9 #include "FairRootManager.h"
10 #include "FairMCPoint.h"
23 fOutBranchName(
"IdealTrack"), fTrackCand(0), fTrack(0), fMCTrack(0), fTrackSelector(0), fPdg(0), fHitCount(0), fMomSigma(0,0,0), fDPoP(0.), fRelative (kFALSE), fVtxSigma(0,0,0), fEfficiency(1.)
50 FairRootManager* ioman = FairRootManager::Instance();
52 std::cout <<
"-E- PndMCTestHitCompare::Init: "
53 <<
"RootManager not instantiated!" << std::endl;
72 fMCTrack = (TClonesArray*)ioman->GetObject(
"MCTrack");
77 fTrack =
new TClonesArray(
"PndTrack");
81 std::cout <<
"-W- PndIdealTrackFinder::Init() no fTrackSelector set! All possible tracks will be taken!" << std::endl;
84 fPdg =
new TDatabasePDG();
106 for (std::map<TString, TClonesArray*>::iterator iter =
fBranchMap.begin(); iter !=
fBranchMap.end(); iter++){
108 for (
int i = 0;
i < iter->second->GetEntriesFast();
i++){
110 FairMultiLinkedData array;
111 FairMultiLinkedData_Interface* links = (FairMultiLinkedData_Interface*)iter->second->At(
i);
112 TString hitBranch = iter->first;
118 FairMCPoint firstpoint = *
point;
119 FairMCPoint lastpoint = *
point;
121 double tof = point->GetTime();
124 for (
int ipnt = 1; ipnt < array.GetNLinks(); ipnt++){
125 point = (FairMCPoint *) FairRootManager::Instance()->GetCloneOfLinkData(array.GetLink(ipnt));
126 tof += point->GetTime();
128 if( point->GetTime() < firstpoint.GetTime()) firstpoint = *point;
129 if( point->GetTime() > lastpoint.GetTime()) lastpoint = *point;
132 tof /= array.GetNLinks();
135 FairMultiLinkedData mctracks = links->GetLinksWithType(FairRootManager::Instance()->GetBranchId(
"MCTrack"));
136 for (
int trackIndex = 0; trackIndex < mctracks.GetNLinks(); trackIndex++){
139 fTrackCandMap[mctracks.GetLink(trackIndex)].SetInsertHistory(kTRUE);
146 FairMCPoint tmpfirstpoint =
fFirstPointMap[mctracks.GetLink(trackIndex)];
147 if(firstpoint.GetTime() < tmpfirstpoint.GetTime())
fFirstPointMap[mctracks.GetLink(trackIndex)] = firstpoint;
148 FairMCPoint tmplastpoint =
fLastPointMap[mctracks.GetLink(trackIndex)];
149 if(lastpoint.GetTime() > tmplastpoint.GetTime())
fLastPointMap[mctracks.GetLink(trackIndex)] = lastpoint;
151 FairLink link(-1, FairRootManager::Instance()->GetEntryNr(),FairRootManager::Instance()->GetBranchId(iter->first),
i);
153 fTrackCandMap[mctracks.GetLink(trackIndex)].SetInsertHistory(kTRUE);
155 fTrackCandMap[mctracks.GetLink(trackIndex)].AddHit(link, tof);
180 myTrackCand->AddLink(iter->first);
181 myTrackCand->SetTimeStamp(FairRootManager::Instance()->GetEventTime());
189 if (mc->
GetPdgCode()<100000000) charge = (Int_t)TMath::Sign(1.0, ((TParticlePDG*)
fPdg->GetParticle(mc->
GetPdgCode()))->Charge());
199 TVector3 firstpos(0, 0, 0), firstmom(0, 0, 0);
200 if(myTrackCand->
GetSortedHit(0).
GetDetId() == FairRootManager::Instance()->GetBranchId(
"GEMHit")) {
201 TClonesArray *gemhitarray =
fBranchMap[
"GEMHit"];
204 FairMultiLinkedData gemhitlink = gemhit->GetLinksWithType(FairRootManager::Instance()->GetBranchId(
"GEMPoint"));
207 TVector3 posin(0, 0, 0), posout(0, 0, 0);
208 gempoint->Position(posin);
210 firstpos = 0.5 * (posin + posout);
212 else firstpoint.Position(firstpos);
215 firstpoint.Momentum(firstmom);
219 FairTrackParP firstPar(firstpos, firstmom,
222 TVector3(1.,0.,0.), TVector3(0.,1.,0.));
225 TVector3 lastpos(0, 0, 0), lastmom(0, 0, 0);
227 if(myTrackCand->
GetSortedHit(myTrackCand->
GetNHits() - 1).GetDetId() == FairRootManager::Instance()->GetBranchId(
"GEMHit")) {
228 TClonesArray *gemhitarray =
fBranchMap[
"GEMHit"];
231 FairMultiLinkedData gemhitlink = gemhit->GetLinksWithType(FairRootManager::Instance()->GetBranchId(
"GEMPoint"));
234 TVector3 posin(0, 0, 0), posout(0, 0, 0);
235 gempoint->Position(posin);
237 lastpos = 0.5 * (posin + posout);
239 else lastpoint.Position(lastpos);
242 lastpoint.Momentum(lastmom);
244 FairTrackParP lastPar(lastpos, lastmom,
247 TVector3(1.,0.,0.), TVector3(0.,1.,0.));
258 FairMultiLinkedData mcpoints = links->GetLinksWithType(FairRootManager::Instance()->GetBranchId(
fPointBranchMap[hitBranch]));
265 if (hitBranch ==
"GEMHit" && mcpoints.GetNLinks() > 1)
return 0;
271 if (array.GetNLinks() == 0){
275 return (FairMCPoint *) FairRootManager::Instance()->GetCloneOfLinkData(array.GetLink(0));
282 rannn = gRandom->Gaus(vec.X(),sigma.X());
285 rannn = gRandom->Gaus(vec.Y(),sigma.Y());
288 rannn = gRandom->Gaus(vec.Z(),sigma.Z());
TClonesArray * fTrackCand
virtual void SmearVector(TVector3 &vec, const TVector3 &sigma)
TDatabasePDG * fPdg
! Particle DB
std::map< FairLink, FairMCPoint > fFirstPointMap
virtual InitStatus Init()
PndTrackCandHit GetSortedHit(UInt_t i)
Ideal track finder for all types of tracking detectors The PndIdealTrackFinder combines all hits in ...
void SetPersistency(Bool_t val=kTRUE)
virtual void Exec(Option_t *opt)
virtual ~PndIdealTrackFinder()
std::map< TString, TString > fPointBranchMap
virtual void CreateTrackCands()
std::vector< TString > fBranchNames
PndTrackFunctor * fTrackSelector
void PositionOut(TVector3 &pos) const
Double_t fDPoP
Relative momentum Smearing.
TVector3 fMomSigma
Momentum smearing sigma [GeV].
std::map< TString, TClonesArray * > fBranchMap
virtual FairMCPoint * GetFairMCPoint(TString hitBranch, FairMultiLinkedData_Interface *links, FairMultiLinkedData &array)
std::map< FairLink, FairMCPoint > fLastPointMap
virtual void FilterTrackCands()
Double_t fEfficiency
Tracking efficiency - if (0 <= e < 1), some tracks will be discarded.
virtual void CreateTracks()
virtual void AddBranchName(TString name)
Search for tracks only in given branches. If no BranchName is given all tracking detectors are taken...
TVector3 fVtxSigma
Vertex smearing sigma [cm].
std::map< FairLink, PndTrackCand > fTrackCandMap