FairRoot/PandaRoot
PndSttFitTracks.cxx
Go to the documentation of this file.
1 // -------------------------------------------------------------------------
2 // ----- PndSttFitTracks source file -----
3 // -------------------------------------------------------------------------
4 
5 #include "PndSttFitTracks.h"
6 
7 #include "PndSttTrackFitter.h"
8 #include "PndSttTrack.h"
9 #include "PndSttTube.h"
10 #include "PndSttHit.h"
11 #include "PndSttMapCreator.h"
12 
13 #include "FairRootManager.h"
14 #include "FairRunAna.h"
15 #include "FairRuntimeDb.h"
16 #include "FairLink.h"
17 
18 #include "PndDetectorList.h"
19 
20 #include "TClonesArray.h"
21 
22 #include <iostream>
23 
24 using std::cout;
25 using std::endl;
26 using std::string;
27 
28 // ----- Default constructor -------------------------------------------
30 {
31  fFitter = NULL;
32  fNofTracks = 0;
33 }
34 // -------------------------------------------------------------------------
35 
36 
37 
38 // ----- Standard constructor ------------------------------------------
40  const char* title,
41  PndSttTrackFitter* fitter)
42  : FairTask(name)
43 {
44  fFitter = fitter;
45  fNofTracks = 0;
46  fCollectionsComplete = kFALSE;
47  SetTitle(title);
48 }
49 // -------------------------------------------------------------------------
50 
51 
52 
53 // ----- Destructor ----------------------------------------------------
55 {
56  fHitCollectionNames.clear();
57 }
58 // -------------------------------------------------------------------------
59 
60 
61 
62 // ----- Public method Init (abstract in base class) --------------------
63 InitStatus PndSttFitTracks::Init()
64 {
65  // Check for Track fitter
66  if (! fFitter)
67  {
68  cout << "-E- PndSttFitTracks: No track fitter selected!" << endl;
69  return kERROR;
70  }
71 
72  // Get and check FairRootManager
73  FairRootManager
74  *ioman = FairRootManager::Instance();
75 
76  if (! ioman)
77  {
78  cout << "-E- PndSttFitTracks::Init: "
79  << "RootManager not instantised!" << endl;
80  return kFATAL;
81  }
82 
83  // Get SttTrack array CHECK add
84  fTrackCandArray = (TClonesArray*) ioman->GetObject("STTTrackCand"); //=>SG
85  if ( ! fTrackCandArray)
86  {
87  cout << "-E- PndSttFitTracks::Init: No SttTrackCand array!"
88  << endl;
89  return kERROR;
90  }
91 
92  // Create and register SttTrack array
93  fTrackArray = new TClonesArray("PndSttTrack",100);
94  ioman->Register("STTTrack", "STT", fTrackArray, kTRUE); // fPersistence); // CHECK
95 
96  // CHECK added
98  fTubeArray = mapper.FillTubeArray();
99 
100  // Call the Init method of the track fitter
101  fFitter->Init();
103 
104  return kSUCCESS;
105 }
106 // -------------------------------------------------------------------------
107 
108 // CHECK added
110  FairRuntimeDb* rtdb = FairRunAna::Instance()->GetRuntimeDb();
111  fSttParameters = (PndGeoSttPar*) rtdb->getContainer("PndGeoSttPar");
112 }
113 
114 // ----- Public method Exec --------------------------------------------
115 void PndSttFitTracks::Exec(Option_t*)
116 {
118 
119  if ( !fTrackCandArray )
120  return; // =>SG
121  fTrackArray->Clear();
122 
123  Int_t nTracks = fTrackCandArray->GetEntriesFast();
124 
125  for (Int_t iTrack=0; iTrack<nTracks; iTrack++)
126  {
127  PndTrackCand* pTrackCand = (PndTrackCand*) fTrackCandArray->At(iTrack);
128  if(!pTrackCand) continue;
129 
130  Int_t size = fTrackArray->GetEntriesFast();
131  new((*fTrackArray)[size]) PndSttTrack();
132  PndSttTrack* pTrack = (PndSttTrack*) fTrackArray->At(size);
133  pTrack->SetTrackCandIndex(iTrack);
134  pTrack->SetLink(FairLink("SttTrackCand", iTrack));
135 
136  fFitter->DoFit(pTrackCand, pTrack);
137 
138  }
139 
140  // reset hit coordinates
141  for(int i = 0; i < fHitArray->GetEntriesFast(); i++) {
142  PndSttHit *currenthit = (PndSttHit*) fHitArray->At(i);
143  if(!currenthit) continue;
144  // tubeID CHECK added
145  Int_t tubeID = currenthit->GetTubeID();
146  PndSttTube *tube = (PndSttTube*) fTubeArray->At(tubeID);
147  currenthit->SetX(tube->GetPosition().X());
148  currenthit->SetY(tube->GetPosition().Y());
149  currenthit->SetZ(tube->GetPosition().Z());
150  }
151 }
152 // -------------------------------------------------------------------------
153 
154 
155 
156 // ----- Public method Finish ------------------------------------------
158 {
159 }
160 // -------------------------------------------------------------------------
161 
162 void PndSttFitTracks::AddHitCollectionName(char *hitCollectionName)
163 {
164  string
165  newHitName(hitCollectionName);
166 
167  fHitCollectionNames.push_back(newHitName);
168 }
169 
170 void PndSttFitTracks::AddHitCollection(char const *hitCollectionName)
171 {
172  // Get and check FairRootManager
173  FairRootManager
174  *ioman = FairRootManager::Instance();
175 
176  if (!ioman)
177  {
178  cout << "-E- PndSttFindTracks::AddHitCollection: "
179  << "RootManager not instantised!" << endl;
180  }
181 
182  // Get hit Array
183  fHitArray = (TClonesArray*) ioman->GetObject(hitCollectionName);
184 
185  if (!fHitArray)
186  {
187  cout << "-W- PndSttFindTracks::AddHitCollection: No " << hitCollectionName << " STT hit array!"
188  << endl;
189  }
190 
192 }
193 
195 {
197  {
198  for (size_t counter = 0; counter < fHitCollectionNames.size(); counter++)
199  {
201  }
202  fCollectionsComplete = kTRUE;
203  }
204 }
205 
206 
207 
void AddHitCollection(char const *collectionName)
TClonesArray * fTrackCandArray
virtual void Init()
Int_t i
Definition: run_full.C:25
virtual ~PndSttFitTracks()
virtual InitStatus Init()
PndGeoSttPar * fSttParameters
TClonesArray * fHitArray
std::vector< std::string > fHitCollectionNames
h_MC_angle SetTitle("MC truth: opening angle of #pi^{0}")
virtual void Finish()
int counter
Definition: ZeeAnalysis.C:59
virtual Int_t DoFit(PndTrackCand *pTrackCand, PndSttTrack *pTrack, Int_t pidHypo=211)=0
void SetTrackCandIndex(Int_t trackCandID)
Definition: PndSttTrack.h:78
void AddHitCollectionName(char *hitCollectionName)
TVector3 GetPosition()
Definition: PndSttTube.cxx:87
virtual void Exec(Option_t *opt)
TClonesArray * fTubeArray
FairRuntimeDb * rtdb
Definition: hit_dirc.C:66
Int_t GetTubeID() const
Definition: PndSttHit.h:75
TClonesArray * FillTubeArray()
TString name
PndSttTrackFitter * fFitter
ClassImp(PndAnaContFact)
TClonesArray * fTrackArray
virtual void SetTubeArray(TClonesArray *tubeArray)=0
virtual void AddHitCollection(TClonesArray *)
Bool_t fCollectionsComplete