FairRoot/PandaRoot
CbmGeaneTr.cxx
Go to the documentation of this file.
1 // Task for the exercise 1 of the GEANE tutorial
2 // Authors A. Fontana & P. Genova, Sept. 2007
3 
4 #include "TClonesArray.h"
5 #include "FairRootManager.h"
6 #include "FairGeaneTr.h"
7 #include "TGeant3TGeo.h"
8 #include "TGeant3.h"
9 #include "TVector3.h"
10 #include "CbmPlanePoint.h"
11 #include "TTree.h"
12 #include "TDatabasePDG.h"
13 
14 #include "FairTrackParH.h"
15 #include <iostream>
16 
17 using namespace std;
18 
19 // ----- Default constructor -------------------------------------------
21  FairTask("Test") { }
22 // -------------------------------------------------------------------------
23 
24 
25 
26 // ----- Destructor ----------------------------------------------------
28 // -------------------------------------------------------------------------
29 
30 
31 // ----- Public method Init --------------------------------------------
32 InitStatus FairGeaneTr::Init() {
33 
34  // Get RootManager
35  FairRootManager* ioman = FairRootManager::Instance();
36  if ( ! ioman ) {
37  cout << "-E- FairGeaneTr::Init: "
38  << "RootManager not instantised!" << endl;
39  return kFATAL;
40  }
41 
42 
43  fTrackParGeane = new TClonesArray("FairTrackParH");
44  ioman->Register("GeaneTrackPar","Geane", fTrackParGeane, kTRUE);
45 
46  fTrackParIni = new TClonesArray("FairTrackParH");
47  ioman->Register("GeaneTrackIni","Geane", fTrackParIni, kTRUE);
48 
49  fTrackParFinal = new TClonesArray("FairTrackParH");
50  ioman->Register("GeaneTrackFinal","Geane", fTrackParFinal, kTRUE);
51 
52  // Get input array
53 
54  fPointArray1 = (TClonesArray*) ioman->GetObject("Plane1Point");
55 
56  fPointArray2 = (TClonesArray*)ioman->GetObject("Plane2Point");
57 
58  // Create and register output array
59 
60  fPro = new FairGeanePro();
61 
62  fPro->PropagateToVolume("mL3",0,1);
63 
64 
65 
66  return kSUCCESS;
67 
68 }
69 // -------------------------------------------------------------------------
70 
71 
72 // ----- Public method Exec --------------------------------------------
73 void FairGeaneTr::Exec(Option_t*) {
74 // cout << "FairGeaneTr::Exec" << endl;
75  fTrackParGeane->Delete();
76  fTrackParIni->Delete();
77  fTrackParFinal->Delete();
78 
79  Int_t NoOfEntries=fPointArray1->GetEntriesFast();
80  cout<<fPointArray2->GetEntriesFast()<<endl;
81  for (Int_t i=0; i<NoOfEntries; i++) {
83 // cout << "first loop for " << i << "from "<< NoOfEntries << " entries " << endl;
84  Int_t trId=fPoint1->GetTrackID();
85  fPoint2=0;
86  for (Int_t k=0; k<fPointArray2->GetEntriesFast(); k++) {
88  // cout << "second loop for " << k << endl;
89  if(fPoint2->GetTrackID()==trId) break;
90  }
91 
92  if(fPoint2==0) break;
93 
94  TVector3 StartPos = TVector3 (fPoint1->GetXIn(),fPoint1->GetYIn(),fPoint1->GetZIn());
95 // TVector3 StartPos = TVector3 (0.,0.,0.);
96  TVector3 StartPosErr = TVector3(0,0,0);
97  TVector3 StartMom = TVector3 (fPoint1->GetPxIn(),fPoint1->GetPyIn(),fPoint1->GetPzIn());
98 // TVector3 StartMom = TVector3 (1.,0.1,0.1);
99  TVector3 StartMomErr = TVector3(0,0,0);
100 
101  TVector3 EndPos =TVector3 (fPoint2->GetXIn(),fPoint2->GetYIn(),fPoint2->GetZIn());
102  TVector3 EndPosErr=TVector3(0,0,0);
103  TVector3 EndMom= TVector3 (fPoint2->GetPxIn(),fPoint2->GetPyIn(),fPoint2->GetPzIn());
104  TVector3 EndMomErr=TVector3(0,0,0);
105 
106 
107  Int_t PDGCode= 13;
108 
109  TDatabasePDG *fdbPDG= TDatabasePDG::Instance();
110  TParticlePDG *fParticle= fdbPDG->GetParticle(PDGCode);
111  Double_t fCharge= fParticle->Charge();
112 
113  TClonesArray& clref1 = *fTrackParIni;
114  Int_t size1 = clref1.GetEntriesFast();
115  FairTrackParH *fStart= new (clref1[size1]) FairTrackParH(StartPos, StartMom, StartPosErr, StartMomErr, fCharge);
116  // fStart->Print();
117 
118  TClonesArray& clref = *fTrackParGeane;
119  Int_t size = clref.GetEntriesFast();
120  FairTrackParH *fRes= new(clref[size]) FairTrackParH();
121  // fRes->Print();
122 
123  TClonesArray& clref2 = *fTrackParFinal;
124  Int_t size2 = clref2.GetEntriesFast();
125  FairTrackParH *fFinal= new(clref2[size2]) FairTrackParH(EndPos, EndMom, EndPosErr, EndMomErr, fCharge);
126 
127 
128  Bool_t rc = fPro->Propagate(fStart, fRes,PDGCode);
129 
130  Double_t fLm,fPhi,cLm,sLm,cphi,sphi,fX_sc,fY_sc,fZ_sc,fX,fY,fZ;
131 
132  fLm = fRes->GetLambda();
133  fPhi= fRes->GetPhi();
134  fX = fFinal->GetX();
135  fY = fFinal->GetY();
136  fZ = fFinal->GetZ();
137  cLm= TMath::Cos(fLm);
138  sLm= TMath::Sin(fLm);
139  cphi= TMath::Cos(fPhi);
140  sphi= TMath::Sin(fPhi);
141 
142  fX_sc = fX*cphi*cLm+ fY*cLm*sphi+fZ*sLm;
143  fY_sc = fY*cphi-fX*sphi;
144  fZ_sc = fZ*cLm-fY*sLm*sphi-fX*sLm*cphi;
145 
146  fFinal->SetX_sc(fX_sc);
147  fFinal->SetY_sc(fY_sc);
148  fFinal->SetZ_sc(fZ_sc);
149 
150  }
151  // }
152  fPointArray1->Delete();
153  fPointArray2->Delete();
154 
155 }
156 
157 
158 
TClonesArray * fPointArray1
Definition: CbmGeaneTr.h:34
Double_t GetZIn() const
Definition: CbmPlanePoint.h:56
TClonesArray * fPointArray2
Definition: CbmGeaneTr.h:35
Double_t GetPzIn() const
Definition: CbmPlanePoint.h:59
TClonesArray * fTrackParIni
Definition: CbmGeaneTr.h:42
Double_t GetXIn() const
Definition: CbmPlanePoint.h:54
Int_t i
Definition: run_full.C:25
Double_t GetYIn() const
Definition: CbmPlanePoint.h:55
Int_t GetTrackID() const
Definition: CbmPlanePoint.h:62
CbmPlanePoint * fPoint2
Definition: CbmGeaneTr.h:37
static T Sin(const T &x)
Definition: PndCAMath.h:42
Double_t fX
Definition: PndCaloDraw.cxx:34
TClonesArray * fTrackParFinal
Definition: CbmGeaneTr.h:44
CbmPlanePoint * fPoint1
Definition: CbmGeaneTr.h:36
FairGeanePro * fPro
Definition: CbmGeaneTr.h:49
virtual void Exec(Option_t *opt)
Definition: CbmGeaneTr.cxx:73
static T Cos(const T &x)
Definition: PndCAMath.h:43
Double_t fZ
Definition: PndCaloDraw.cxx:34
TClonesArray * fTrackParGeane
Definition: CbmGeaneTr.h:43
Int_t * fParticle
Definition: run_full.C:24
Double_t
Double_t const fPhi
Double_t fY
Definition: PndCaloDraw.cxx:34
Double_t GetPyIn() const
Definition: CbmPlanePoint.h:58
virtual InitStatus Init()
Definition: CbmGeaneTr.cxx:32
ClassImp(PndAnaContFact)
Double_t GetPxIn() const
Definition: CbmPlanePoint.h:57