FairRoot/PandaRoot
PndCloneGenerator.cxx
Go to the documentation of this file.
1 /*
2  * PndCloneGenerators.cpp
3  *
4  * Created on: Apr 12, 2010
5  * Author: stockman
6  */
7 
8 #include "PndCloneGenerator.h"
9 
10 #include "FairRootManager.h"
11 #include "FairMCPoint.h"
12 #include "FairHit.h"
13 
14 #include "PndTrackCand.h"
15 #include "PndTrack.h"
16 #include "PndMCTrack.h"
17 #include "PndGemMCPoint.h"
18 #include "PndGemHit.h"
19 
20 #include "TRandom.h"
22 
24 {
25  // TODO Auto-generated constructor stub
26 
27 }
28 
30  // TODO Auto-generated destructor stub
31 }
32 
33 
34 void PndCloneGenerator::Exec(Option_t*)
35 {
36 
37  fTrackCand->Delete();
38  fTrack->Delete();
39  fTrackCandMap.clear();
40  fTrackCandCloneMap.clear();
41 
42  std::cout << "Event #" << FairRootManager::Instance()->GetEntryNr() << std::endl;
46  std::cout << "PndIdealTrackFinder:Found Tracks:" << std::endl;
47  CreateTracks();
50  CreateTracks();
51 }
52 
54 {
55  for (auto trackCandIter : fTrackCandMap)
56  {
57  PndTrackCand myTrackCand = trackCandIter.second;
58  int nHits = myTrackCand.GetNHits();
59  if (nHits > 1){
60  PndTrackCand clone1;
61  clone1.SetInsertHistory(kTRUE);
62  PndTrackCand clone2;
63  clone2.SetInsertHistory(kTRUE);
64  for (int hitIter = 0; hitIter < nHits/2; hitIter++){
65  clone1.AddHit((FairLink)(myTrackCand.GetSortedHit(hitIter)), myTrackCand.GetSortedHit(hitIter).GetRho());
66  }
67  for (int hitIter = nHits/2; hitIter < nHits; hitIter++){
68  clone2.AddHit((FairLink)(myTrackCand.GetSortedHit(hitIter)), myTrackCand.GetSortedHit(hitIter).GetRho());
69  }
70  fTrackCandMap[trackCandIter.first] = clone1;
71  fTrackCandCloneMap[trackCandIter.first] = clone2;
72  }
73  }
74 }
75 
76 void PndCloneGenerator::SetFirstLastHit(std::map<FairLink, PndTrackCand>& trackCandMap)
77 {
78  for (auto trackIter : trackCandMap){
79  PndTrackCandHit first = trackIter.second.GetSortedHit(0);
80  PndTrackCandHit last = trackIter.second.GetSortedHit(trackIter.second.GetNHits()-1);
81 
82  FairMultiLinkedData array;
83  FairMultiLinkedData_Interface* links = 0;
84  TString hitBranchName;
85  hitBranchName = FairRootManager::Instance()->GetBranchName(first.GetType());
86  links = (FairMultiLinkedData_Interface*)fBranchMap[hitBranchName]->At(first.GetIndex());
87  FairMCPoint *firstpoint = 0;
88  if (links != 0){
89  firstpoint = GetFairMCPoint(hitBranchName,links, array);
90  if (firstpoint != 0)
91  fFirstPointMap[links->GetSortedMCTracks().front()] = *firstpoint;
92  }
93  hitBranchName = FairRootManager::Instance()->GetBranchName(last.GetType());
94  links = (FairMultiLinkedData_Interface*)fBranchMap[hitBranchName]->At(last.GetIndex());
95  FairMCPoint *lastpoint = 0;
96  if (links != 0){
97  lastpoint = GetFairMCPoint(hitBranchName,links,array);
98  if (lastpoint != 0)
99  fLastPointMap[links->GetSortedMCTracks().front()] = *lastpoint;
100  }
101  }
102 }
TClonesArray * fTrackCand
std::map< FairLink, FairMCPoint > fFirstPointMap
PndTrackCandHit GetSortedHit(UInt_t i)
Definition: PndTrackCand.h:54
virtual void CreateTrackCands()
void AddHit(UInt_t detId, UInt_t hitId, Double_t rho)
virtual void SetFirstLastHit(std::map< FairLink, PndTrackCand > &trackCandMap)
virtual void CreateTrackCandClones()
int nHits
Definition: RiemannTest.C:16
std::map< FairLink, PndTrackCand > fTrackCandCloneMap
Double_t GetRho() const
virtual void Exec(Option_t *opt)
std::map< TString, TClonesArray * > fBranchMap
virtual FairMCPoint * GetFairMCPoint(TString hitBranch, FairMultiLinkedData_Interface *links, FairMultiLinkedData &array)
UInt_t GetNHits() const
Definition: PndTrackCand.h:59
std::map< FairLink, FairMCPoint > fLastPointMap
ClassImp(PndAnaContFact)
cout<<"the Event No is "<< i<< endl;{{if(hit_array->GetEntriesFast()!=mc_array->GetEntriesFast()) continue;PndSdsHit *hit=(PndSdsHit *) hit_array-> At(j)
Definition: anaLmdCluster.C:71
std::map< FairLink, PndTrackCand > fTrackCandMap