FairRoot/PandaRoot
PndSttSkewedCombineTask.cxx
Go to the documentation of this file.
2 
3 #include <iostream>
4 
5 // Root includes
6 #include "TROOT.h"
7 #include "TString.h"
8 #include "TClonesArray.h"
9 #include "TParticlePDG.h"
10 
11 // framework includes
12 #include "FairRootManager.h"
13 #include "FairRun.h"
14 #include "FairRuntimeDb.h"
15 #include "FairRunAna.h"
16 #include "FairEventHeader.h"
17 
18 // PndMvd includes
19 #include "PndTrackCand.h"
20 #include "PndRiemannTrack.h"
21 #include "PndSttMapCreator.h"
22 #include "PndSttCellTrackFinder.h"
23 #include "PndSttSkewedHit.h"
24 
25 using std::cout;
26 using std::endl;
27 
29 ;
30 
32  FairRuntimeDb* rtdb = FairRunAna::Instance()->GetRuntimeDb();
33  fSttParameters = (PndGeoSttPar*) rtdb->getContainer("PndGeoSttPar");
34 }
35 
36 //InitStatus PndSttSkewedCombineTask::ReInit() {
37 // InitStatus stat = kSUCCESS;
38 // return stat;
39 //}
40 
41 // ----- Public method Init --------------------------------------------
43  FairRootManager* ioman = FairRootManager::Instance();
44 
45  if (!ioman) {
46  std::cout << "-E- PndSttSkewedCombineTask::Init: "
47  << "RootManager not instantiated!" << std::endl;
48  return kFATAL;
49  }
50 
51  fEventHeader = (TClonesArray*) ioman->GetObject("EventHeader.");
52  if (!fEventHeader) {
53  std::cout << "-W- PndSttSkewedCombineTask::Init: No EventHeader array! Needed for EventNumber" << endl;
54  return kERROR;
55  }
56 
57  // Get input array
58 // if (FairRunAna::Instance()->IsTimeStamp()){
59 // if (fTimeBasedHitBranch.size() == 0){
60 // std::cout << "-W- PndSttSkewedCombineTask::Init: " << "No Branch Names given with AddHitBranch(TString branchName)! Standard BranchNames taken!" << std::endl;
61 // fTimeBasedHitBranch.push_back(FairTSBufferParameters("MVDHitsPixel", new TimeGap(), 10));
62 // }
63 // }
64 
65  fSttHits = (TClonesArray*) FairRootManager::Instance()->GetObject("STTHit");
66 
68  fTubeArray = mapper->FillTubeArray();
71 
72  fCombinedSkewedHits = ioman->Register("STTCombinedSkewedHits", "PndSttSkewedHit", "Stt", kTRUE);
73 
74  if (fVerbose > 0) {
75  std::cout << "-I- PndSttSkewedCombineTask: Initialisation successfull" << std::endl;
76  }
77  //fInitDone = kTRUE;
78  return kSUCCESS;
79 }
80 
81 // ----- Public method Exec --------------------------------------------
83 
84  FairEventHeader* myEventHeader = (FairEventHeader*) fEventHeader;
85  int eventNumber = myEventHeader->GetMCEntryNumber();
86 
87  if (fVerbose > 0) {
88  std::cout << "====================Begin PndSttSkewedCombineTask::Exec=======================" << endl;
89  std::cout << "Event #" << eventNumber << endl;
90  }
91 
92 
93 
94  FairRootManager *ioman = FairRootManager::Instance();
95 
96  std::map<int, PndSttHit*> tubeMap;
97  for (int i = 0; i < fSttHits->GetEntriesFast(); i++){
98  PndSttHit* myHit = (PndSttHit*)fSttHits->At(i);
99  myHit->SetEntryNr(FairLink(-1, eventNumber, ioman->GetBranchId("STTHit"),i));
100  tubeMap[myHit->GetTubeID()] = myHit;
101  }
102 
103  for (int i = 0; i < fSttHits->GetEntriesFast(); i++){
104  PndSttHit* myHit = (PndSttHit*)fSttHits->At(i);
105  int strawRow = fStrawMap.GetRow(myHit->GetTubeID());
106  if (fVerbose > 1) std::cout << "PndSttSkewedCombineTask::Exec: TubeID " << myHit->GetTubeID() << " RowNr " << strawRow << std::endl;
107  if (strawRow > 6 && strawRow < 16 && strawRow % 2 == 1) {
108  TArrayI tmp = fGeometryMap->GetNeighboringsByMap(myHit->GetTubeID());
109  for (int j = 0; j < tmp.GetSize(); j++){
110  if (fStrawMap.GetRow(tmp.At(j)) == strawRow + 1) {
111  if (tubeMap.find(tmp.At(j)) != tubeMap.end()) {
112  TVector3 poca, pocaError;
113  if (fVerbose > 1) std::cout << "PndSttSkewedCombineTask::Exec: FoundNeighbourHit " << tubeMap[tmp.At(j)]->GetTubeID() << std::endl;
114 
115  double distance = fGeometryMap->CalculateStrawPoca(myHit, tubeMap[tmp.At(j)], poca);
116  if (fVerbose > 1) std::cout << "PndSttSkewedCombineTask::Exec: poca: " << poca.x() << "/" << poca.y() << "/" << poca.z() << " " << distance << std::endl;
117  PndSttSkewedHit* skewedHit = new ((*fCombinedSkewedHits)[fCombinedSkewedHits->GetEntriesFast()]) PndSttSkewedHit(-1,myHit->GetTubeID(), tubeMap[tmp.At(j)]->GetTubeID(), -1, poca, pocaError);
118  skewedHit->AddLink(myHit->GetEntryNr());
119  skewedHit->AddLink(tubeMap[tmp.At(j)]->GetEntryNr());
120  skewedHit->SetEntryNr(FairLink(-1, eventNumber, ioman->GetBranchId("STTCombinedSkewedHits"), fCombinedSkewedHits->GetEntriesFast()-1));
121  }
122  }
123  }
124  }
125  }
126 }
127 
129  fCombinedSkewedHits->Delete();
130 }
131 
132 
133 
virtual void Exec(Option_t *opt)
Int_t i
Definition: run_full.C:25
Double_t CalculateStrawPoca(PndSttHit *hit1, PndSttHit *hit2, TVector3 &poca)
void GenerateStrawMap(TClonesArray *const stt_tube_array)
FairRuntimeDb * rtdb
Definition: hit_dirc.C:66
Int_t GetTubeID() const
Definition: PndSttHit.h:75
TClonesArray * FillTubeArray()
PndSttGeometryMap * fGeometryMap
ClassImp(PndSttSkewedCombineTask)
int GetRow(int strawindex) const
TArrayI GetNeighboringsByMap(int tubeId)