FairRoot/PandaRoot
Public Member Functions | Private Member Functions | Private Attributes | List of all members
PndTrackingQA Class Reference

#include <PndTrackingQA.h>

Inheritance diagram for PndTrackingQA:

Public Member Functions

 PndTrackingQA (TString trackBranchName, TString idealTrackName, Bool_t pndTrackData=kTRUE)
 
 PndTrackingQA (TString trackBranchName, TString idealTrackName, PndTrackFunctor *posTrack, Bool_t pndTrackData=kTRUE)
 
virtual ~PndTrackingQA ()
 
virtual void Init ()
 
void SetVerbose (Int_t val)
 
void AddHitsBranchName (TString name)
 Adds branch names of detector data which should be taken into account in the analysis. More...
 
void SetHitsBranchNames (std::vector< TString > names)
 
void AnalyseEvent (TClonesArray *recoTrackInfo)
 
Int_t GetNIdealHits (FairMultiLinkedData &track, TString branchName)
 
std::map< Int_t, Int_t > GetMCTrackFound ()
 
std::map< Int_t, Int_t > GetTrackQualification ()
 
std::map< Int_t, Int_t > GetTrackMCStatus ()
 
std::map< Int_t, std::map
< TString, std::pair< Double_t,
Int_t > > > 
GetEfficiencies ()
 
std::map< Int_t, Double_tGetPResolution ()
 
std::map< Int_t, TVector3 > GetP ()
 
std::map< Int_t, Double_tGetPtResolution ()
 
std::map< Int_t, Double_tGetPt ()
 
std::map< Int_t, Double_tGetPlResolution ()
 
std::map< Int_t, Double_tGetPl ()
 
std::map< Int_t, Double_tGetPResolutionRel ()
 
std::map< Int_t, Double_tGetPtResolutionRel ()
 
std::map< Int_t, Double_tGetPlResolutionRel ()
 
std::map< Int_t, Int_t > GetTrackIdMCId ()
 
Int_t GetNGhosts ()
 
void PrintTrackDataSummary (FairMultiLinkedData &trackData, Bool_t detailedInfo=kFALSE)
 
void PrintTrackDataSummaryCompare (FairMultiLinkedData &recoTrackData, FairMultiLinkedData &idealTrackData)
 
void PrintTrackQualityMap (Bool_t detailedInfo=kFALSE)
 
void PrintTrackMCStatusMap ()
 
void PrintTrackInfo (std::map< TString, FairMultiLinkedData > info)
 
Int_t GetIdealTrackIdFromMCTrackId (int mctrackid)
 
Int_t GetIdealTrackIdFromRecoTrackId (int trackid)
 
PndTrackingQualityRecoInfo GetRecoInfoFromRecoTrack (Int_t trackId, Int_t mctrackId)
 

Private Member Functions

virtual void FillMapTrackQualifikation ()
 
Bool_t IsBetterTrackExisting (Int_t &mcIndex, int quality)
 
Int_t GetSumOfAllValidMCHits (FairMultiLinkedData *trackData)
 
virtual Int_t AnalyseTrackInfo (std::map< TString, FairMultiLinkedData > &trackInfo, Int_t trackId)
 
virtual void CalcEfficiencies (Int_t mostProbableTrack, std::map< TString, FairMultiLinkedData > &trackInfo)
 
FairMultiLinkedData GetMCInfoForBranch (TString branchName, PndTrackCand *trackCand)
 returns which MCTracks and how often (marked by a FairLink) they were seen by the hits of a PndTrackCand More...
 
std::map< TString,
FairMultiLinkedData > 
AnalyseTrackCand (PndTrackCand *trackCand)
 returns a map<BranchNameOfHits, MCTrackLinks> which returns the FairLinks to MCTracks grouped by hit branches and all More...
 

Private Attributes

FairRootManager * ioman
 
TString fTrackBranchName
 
TString fIdealTrackName
 
Bool_t fPndTrackOrTrackCand
 
std::string fPossibleTrackName
 
PndTrackFunctorfPossibleTrack
 
Bool_t fCleanFunctor
 
Int_t fNGhosts
 
Bool_t fUseCorrectedSkewedHits
 
Int_t fVerbose
 
std::vector< TStringfBranchNames
 ! branch names of hits taken into account in the analysis (e.g. MVDHitsPixel, STTHit, ...) More...
 
std::map< Int_t, Int_t > fTrackIdMCId
 ! map between track id and most probable MC track id More...
 
std::map< Int_t, Int_t > fMCIdTrackId
 ! map between MC id and track id More...
 
std::map< Int_t, Int_t > fMCIdIdealTrackId
 ! map between MC id and ideal track id More...
 
std::map< Int_t, Int_t > fMCTrackFound
 ! How often was a MC Track (key) found More...
 
std::map< Int_t, Int_t > fMapTrackMCStatus
 ! TrackId vs TrackStatus from MC More...
 
std::map< Int_t, Int_t > fMapTrackQualification
 ! TrackId vs TrackStatus after analysis of track finding More...
 
std::map< Int_t, std::map
< TString, std::pair< Double_t,
Int_t > > > 
fMapEfficiencies
 ! MostProbable TrackId, BranchName, Efficiency (#FoundHits / #MCHits), #MCHits More...
 
std::map< Int_t, Double_tfMapPResolution
 
std::map< Int_t, TVector3 > fMapP
 
std::map< Int_t, Double_tfMapPtResolution
 
std::map< Int_t, Double_tfMapPt
 
std::map< Int_t, Double_tfMapPResolutionRel
 
std::map< Int_t, Double_tfMapPtResolutionRel
 
std::map< Int_t, Double_tfMapPlResolution
 
std::map< Int_t, Double_tfMapPl
 
std::map< Int_t, Double_tfMapPlResolutionRel
 
TClonesArray * fTrack
 
TClonesArray * fMCTrack
 
TClonesArray * fIdealTrack
 
TClonesArray * fIdealTrackCand
 

Detailed Description

Definition at line 91 of file PndTrackingQA.h.

Constructor & Destructor Documentation

PndTrackingQA::PndTrackingQA ( TString  trackBranchName,
TString  idealTrackName,
Bool_t  pndTrackData = kTRUE 
)

Definition at line 15 of file PndTrackingQA.cxx.

References fCleanFunctor, and fPossibleTrack.

15  :
16  fTrackBranchName(trackBranchName), fIdealTrackName(idealTrackName), fPndTrackOrTrackCand(pndTrackData), fPossibleTrack(0), fCleanFunctor(kFALSE), fNGhosts(0), fUseCorrectedSkewedHits(kFALSE), fVerbose(0)
17 {
18  if(fPossibleTrack == 0){
19  std::cout << "-I- PndTrackingQA::PndTrackingQA no PossibleTrackFunctor given. Taking Standard!" << std::endl;
20  if (trackBranchName == "MVDTrack" ){
22  } else if (trackBranchName == "CombiTrackCand" ) {
24  } else {
26  }
27  fCleanFunctor = kTRUE;
28  }
29 }
Bool_t fPndTrackOrTrackCand
Bool_t fUseCorrectedSkewedHits
PndTrackFunctor * fPossibleTrack
Bool_t fCleanFunctor
TString fIdealTrackName
TString fTrackBranchName
PndTrackingQA::PndTrackingQA ( TString  trackBranchName,
TString  idealTrackName,
PndTrackFunctor posTrack,
Bool_t  pndTrackData = kTRUE 
)

Definition at line 31 of file PndTrackingQA.cxx.

References fCleanFunctor, and fPossibleTrack.

31  :
32  fTrackBranchName(trackBranchName), fIdealTrackName(idealTrackName), fPndTrackOrTrackCand(pndTrackData), fPossibleTrack(posTrack), fCleanFunctor(kFALSE), fNGhosts(0), fUseCorrectedSkewedHits(kFALSE), fVerbose(0)
33 {
34  if(fPossibleTrack == 0){
35  std::cout << "-I- PndTrackingQA::PndTrackingQA no PossibleTrackFunctor given. Taking Standard!" << std::endl;
36  if (trackBranchName == "MVDTrack" ){
38  } else if (trackBranchName == "CombiTrackCand" ) {
40  } else {
42  }
43  fCleanFunctor = kTRUE;
44  }
45 }
Bool_t fPndTrackOrTrackCand
Bool_t fUseCorrectedSkewedHits
PndTrackFunctor * fPossibleTrack
Bool_t fCleanFunctor
TString fIdealTrackName
TString fTrackBranchName
PndTrackingQA::~PndTrackingQA ( )
virtual

Definition at line 47 of file PndTrackingQA.cxx.

References fCleanFunctor, and fPossibleTrack.

48 {
49  if (fCleanFunctor)
50  delete (fPossibleTrack);
51 }
PndTrackFunctor * fPossibleTrack
Bool_t fCleanFunctor

Member Function Documentation

void PndTrackingQA::AddHitsBranchName ( TString  name)
inline

Adds branch names of detector data which should be taken into account in the analysis.

Definition at line 102 of file PndTrackingQA.h.

References fBranchNames.

Referenced by Init().

102 { fBranchNames.push_back(name);}
std::vector< TString > fBranchNames
! branch names of hits taken into account in the analysis (e.g. MVDHitsPixel, STTHit, ...)
TString name
void PndTrackingQA::AnalyseEvent ( TClonesArray *  recoTrackInfo)

Definition at line 84 of file PndTrackingQA.cxx.

References AnalyseTrackCand(), AnalyseTrackInfo(), CalcEfficiencies(), FillMapTrackQualifikation(), fMapP, fMapPl, fMapPlResolution, fMapPlResolutionRel, fMapPResolution, fMapPResolutionRel, fMapPt, fMapPtResolution, fMapPtResolutionRel, fMapTrackQualification, fMCIdTrackId, fMCTrack, fMCTrackFound, fPndTrackOrTrackCand, fTrack, fTrackIdMCId, fVerbose, PndMCTrack::GetMomentum(), PndTrack::GetParamFirst(), GetRecoInfoFromRecoTrack(), PndTrack::GetTrackCandPtr(), i, mom, PrintTrackQualityMap(), and PndTrackingQualityRecoInfo::SetNofMCTracks().

Referenced by PndTrackingQATask::Exec().

85 {
87  if (fVerbose > 2){
88  std::cout << "PndTrackingQA::AnalyseEvent() Track quality map before analysis: " << std::endl << std::endl;
89  PrintTrackQualityMap(kTRUE);
90  }
91 
92  for (Int_t i = 0; i < fTrack->GetEntriesFast(); i++){
93  if (fVerbose > 2){
94  std::cout << "----------------------------------" << std::endl;
95  std::cout << "Analyse Track: " << i << std::endl;
96  }
97  std::map<TString, FairMultiLinkedData> trackInfo;
98 
100  PndTrack* myTrack = (PndTrack*)fTrack->At(i);
101  trackInfo = AnalyseTrackCand(myTrack->GetTrackCandPtr());
102  } else {
103  PndTrackCand* myTrack = (PndTrackCand*)fTrack->At(i);
104  trackInfo = AnalyseTrackCand(myTrack);
105  }
106  Int_t mostProbableTrack = AnalyseTrackInfo(trackInfo, i);
107 
108  if (fVerbose > 1){
109  std::cout << "PndTrackingQA::AnalyseEvent Analyse track: " << i << std::endl;
110  std::cout << "mostProbableTrack " << mostProbableTrack << std::endl;
111  }
112 
113  if (mostProbableTrack == -1) continue;
114 
115  fTrackIdMCId[i] = mostProbableTrack;
116  CalcEfficiencies(mostProbableTrack, trackInfo);
117 
118  if (fMapTrackQualification.count(mostProbableTrack) > 0)
119  fMCTrackFound[mostProbableTrack]++;
120 
121  PndTrackingQualityRecoInfo recoinfo = GetRecoInfoFromRecoTrack(i, mostProbableTrack);
122  int nof_asso_mctracks = trackInfo["AllHits"].GetNLinks();
123  recoinfo.SetNofMCTracks(nof_asso_mctracks);
124  int size = recoTrackInfo->GetEntriesFast();
125  new((*recoTrackInfo)[size]) PndTrackingQualityRecoInfo(recoinfo);
126  }
127 
128  for (std::map<Int_t, Int_t>::iterator iter = fMapTrackQualification.begin(); iter != fMapTrackQualification.end(); iter++) {
129 
130  if (iter->first > -1 && iter->second > 0) {
131  PndMCTrack* mcTrack = (PndMCTrack*) fMCTrack->At(iter->first);
132 
133  if (fPndTrackOrTrackCand) {
134  PndTrack* myTrack = (PndTrack*) fTrack->At(fMCIdTrackId[iter->first]);
135  TVector3 mom(myTrack->GetParamFirst().GetPx(),
136  myTrack->GetParamFirst().GetPy(),
137  myTrack->GetParamFirst().GetPz());
138  TVector3 McMom(mcTrack->GetMomentum());
139 
140  fMapPResolution[iter->first] = (mom.Mag() - McMom.Mag());
141  fMapP[iter->first] = mom;
142  fMapPtResolution[iter->first] = (mom.Pt() - McMom.Pt());
143  fMapPt[iter->first] = mom.Pt();
144  fMapPlResolution[iter->first] = (mom.Pz() - McMom.Pz());
145  fMapPl[iter->first] = mom.Pz();
146  fMapPResolutionRel[iter->first] = (mom.Mag() - McMom.Mag())
147  / McMom.Mag();
148  fMapPtResolutionRel[iter->first] = (mom.Pt() - McMom.Pt())
149  / McMom.Pt();
150  fMapPlResolutionRel[iter->first] = (mom.Pz() - McMom.Pz())
151  / McMom.Pz();
152  }
153  }
154 
155  }
156  if (fVerbose > 2)
157  std::cout << "AnalyseEvent End" << std::endl;
158 }
std::map< Int_t, Int_t > fMapTrackQualification
! TrackId vs TrackStatus after analysis of track finding
std::map< Int_t, Double_t > fMapPt
virtual Int_t AnalyseTrackInfo(std::map< TString, FairMultiLinkedData > &trackInfo, Int_t trackId)
Bool_t fPndTrackOrTrackCand
Int_t i
Definition: run_full.C:25
std::map< Int_t, Double_t > fMapPlResolution
TVector3 GetMomentum() const
Definition: PndMCTrack.h:78
Double_t mom
Definition: plot_dirc.C:14
void SetNofMCTracks(Int_t nofmctracks)
std::map< Int_t, TVector3 > fMapP
std::map< Int_t, Double_t > fMapPl
std::map< Int_t, Double_t > fMapPlResolutionRel
virtual void CalcEfficiencies(Int_t mostProbableTrack, std::map< TString, FairMultiLinkedData > &trackInfo)
std::map< TString, FairMultiLinkedData > AnalyseTrackCand(PndTrackCand *trackCand)
returns a map&lt;BranchNameOfHits, MCTrackLinks&gt; which returns the FairLinks to MCTracks grouped by hit ...
TClonesArray * fMCTrack
std::map< Int_t, Int_t > fMCTrackFound
! How often was a MC Track (key) found
virtual void FillMapTrackQualifikation()
std::map< Int_t, Double_t > fMapPResolution
std::map< Int_t, Double_t > fMapPResolutionRel
PndTrackingQualityRecoInfo GetRecoInfoFromRecoTrack(Int_t trackId, Int_t mctrackId)
std::map< Int_t, Double_t > fMapPtResolutionRel
std::map< Int_t, Int_t > fTrackIdMCId
! map between track id and most probable MC track id
std::map< Int_t, Int_t > fMCIdTrackId
! map between MC id and track id
PndTrackCand * GetTrackCandPtr()
Definition: PndTrack.h:48
TClonesArray * fTrack
void PrintTrackQualityMap(Bool_t detailedInfo=kFALSE)
std::map< Int_t, Double_t > fMapPtResolution
FairTrackParP GetParamFirst()
Definition: PndTrack.h:49
std::map< TString, FairMultiLinkedData > PndTrackingQA::AnalyseTrackCand ( PndTrackCand trackCand)
private

returns a map<BranchNameOfHits, MCTrackLinks> which returns the FairLinks to MCTracks grouped by hit branches and all

Definition at line 181 of file PndTrackingQA.cxx.

References fBranchNames, fVerbose, GetMCInfoForBranch(), and PrintTrackInfo().

Referenced by AnalyseEvent().

182 {
183  std::map<TString, FairMultiLinkedData> trackInfo;
184 
185  if (fVerbose > 2) {
186  std::cout << "PndTrackingQualityData::AnalyseTrackCand: TrackInfo" << std::endl;
187  std::cout << *trackCand << std::endl;
188  }
189  for (size_t branchIndex = 0; branchIndex < fBranchNames.size(); branchIndex++){
190 // std::cout << "BranchName: " << fBranchNames[branchIndex] << std::endl;
191  trackInfo[fBranchNames[branchIndex]] = GetMCInfoForBranch(fBranchNames[branchIndex], trackCand);
192  trackInfo["AllHits"].AddLinks(trackInfo[fBranchNames[branchIndex]]);
193  }
194  if (fVerbose > 2)
195  PrintTrackInfo(trackInfo);
196  return trackInfo;
197 }
FairMultiLinkedData GetMCInfoForBranch(TString branchName, PndTrackCand *trackCand)
returns which MCTracks and how often (marked by a FairLink) they were seen by the hits of a PndTrackC...
std::vector< TString > fBranchNames
! branch names of hits taken into account in the analysis (e.g. MVDHitsPixel, STTHit, ...)
void PrintTrackInfo(std::map< TString, FairMultiLinkedData > info)
Int_t PndTrackingQA::AnalyseTrackInfo ( std::map< TString, FairMultiLinkedData > &  trackInfo,
Int_t  trackId 
)
privatevirtual

Definition at line 199 of file PndTrackingQA.cxx.

References Double_t, fIdealTrack, fMapTrackQualification, fMCIdIdealTrackId, fMCIdTrackId, fNGhosts, fVerbose, GetSumOfAllValidMCHits(), i, qualityNumbers::kFullyFound, qualityNumbers::kPartiallyFound, qualityNumbers::kSpuriousFound, and PrintTrackDataSummary().

Referenced by AnalyseEvent().

200 {
201 
202  Int_t mostProbableTrack = -1; //the MCTrack most FairLinks of a TrackCand are pointing to
203  if (fVerbose > 2){
204  std::cout << "PndTrackingQA::AnalyseTrackInfo: NMCLinks: " << trackInfo["AllHits"].GetNLinks() << std::endl;
205  PrintTrackDataSummary(trackInfo["AllHits"]);
206  std::cout << "PndTrackingQA::AnalyseTrackInfo " << trackInfo["AllHits"] << std::endl;
207  }
208 
209  std::vector<FairLink> sortedMCTracks = trackInfo["AllHits"].GetSortedMCTracks();
210 
211  if (sortedMCTracks.size() == 0) return mostProbableTrack; //returns -1; no MCTracks
212 
213  if (sortedMCTracks.size() == 1){
214  mostProbableTrack = sortedMCTracks[0].GetIndex();
215  if (fMCIdIdealTrackId.count(mostProbableTrack) == 0){
216  std::cout << "-W- PndTrackingQA::AnalyseTrackInfo fMCIdIdealTrackId does not contain mostProbableTrack" << mostProbableTrack << std::endl;
217  return -1;
218  }
219  if (!(fMCIdIdealTrackId[mostProbableTrack] < fIdealTrack->GetEntriesFast())){
220  std::cout << "-W- PndTrackingQA::AnalyseTrackInfo fMCIdIdealTrackId the ideal track is not in fIdealTrack. mostProbableTrack:" << mostProbableTrack << " idealTrack " << fMCIdIdealTrackId[mostProbableTrack] << std::endl;
221  return -1;
222  }
223  PndTrackCand* myIdealTrack = ((PndTrack*)fIdealTrack->At(fMCIdIdealTrackId[mostProbableTrack]))->GetTrackCandPtr();
224  Int_t nMCHits = GetSumOfAllValidMCHits(myIdealTrack->GetPointerToLinks()); //get the number of hits which should be found
225 
226  if (nMCHits == sortedMCTracks[0].GetWeight()){
227  fMapTrackQualification[sortedMCTracks[0].GetIndex()] = qualityNumbers::kFullyFound;
228  fMCIdTrackId[mostProbableTrack] = trackId;
229  } else {
230  if (fMapTrackQualification[sortedMCTracks[0].GetIndex()] != qualityNumbers::kFullyFound){
231  fMapTrackQualification[sortedMCTracks[0].GetIndex()] = qualityNumbers::kPartiallyFound;
232  fMCIdTrackId[mostProbableTrack] = trackId;
233  }
234  }
235  } else {
236  Int_t highestCount = sortedMCTracks[0].GetWeight();
237  mostProbableTrack = sortedMCTracks[0].GetIndex();
238  Int_t allCounts = 0;
239  for (size_t i = 0; i < sortedMCTracks.size(); i++){
240  allCounts += sortedMCTracks[i].GetWeight();
241 // if (trackInfo["AllHits"].GetLink(i).GetWeight() > highestCount){
242 // highestCount = trackInfo["AllHits"].GetLink(i).GetWeight();
243 // mostProbableTrack = trackInfo["AllHits"].GetLink(i).GetIndex();
244 // }
245  }
246 
247 
248  if ((Double_t)highestCount/(Double_t)allCounts > 0.7){
249  if (fMapTrackQualification[mostProbableTrack] != qualityNumbers::kFullyFound
252  fMCIdTrackId[mostProbableTrack] = trackId;
253  }
254  }
255  else {
256  fNGhosts++;
257  }
258  }
259  if (fVerbose > 0){
260  for (size_t j = 0; j < sortedMCTracks.size(); j++){
261  FairLink myLink = sortedMCTracks[j];
262  if (fMCIdIdealTrackId.count(myLink.GetIndex()) > 0){
263  PndTrackCand* myIdealTrack = ((PndTrack*)fIdealTrack->At(fMCIdIdealTrackId[myLink.GetIndex()]))->GetTrackCandPtr();
264  if (fVerbose > 1) std::cout << "Ideal Tracking: Track " << myLink.GetIndex() << ": ";
265  if (fVerbose > 1) PrintTrackDataSummary(*myIdealTrack->GetPointerToLinks());
266  } else {
267  std::cout << "Ideal Tracking: Track " << myLink.GetIndex() << " not available" << std::endl;
268  }
269 
270  }
271 // std::cout << "MostProbableTrack: " << mostProbableTrack << " Quality: " << fMapTrackQualification[mostProbableTrack] << std::endl;
272 // std::cout << std::endl;
273  }
274 
275  return mostProbableTrack;
276 }
void PrintTrackDataSummary(FairMultiLinkedData &trackData, Bool_t detailedInfo=kFALSE)
std::map< Int_t, Int_t > fMapTrackQualification
! TrackId vs TrackStatus after analysis of track finding
Int_t i
Definition: run_full.C:25
std::map< Int_t, Int_t > fMCIdIdealTrackId
! map between MC id and ideal track id
static const int kPartiallyFound
Definition: PndTrackingQA.h:60
TClonesArray * fIdealTrack
Int_t GetSumOfAllValidMCHits(FairMultiLinkedData *trackData)
Double_t
static const int kFullyFound
Definition: PndTrackingQA.h:61
std::map< Int_t, Int_t > fMCIdTrackId
! map between MC id and track id
static const int kSpuriousFound
Definition: PndTrackingQA.h:59
void PndTrackingQA::CalcEfficiencies ( Int_t  mostProbableTrack,
std::map< TString, FairMultiLinkedData > &  trackInfo 
)
privatevirtual

Definition at line 371 of file PndTrackingQA.cxx.

References Double_t, fBranchNames, fIdealTrack, fMapEfficiencies, fMCIdIdealTrackId, fVerbose, GetNIdealHits(), and i.

Referenced by AnalyseEvent().

372 {
373  if (mostProbableTrack < 0) return;
374  if (fVerbose > 2)
375  std::cout << "PndTrackingQA::CalcEfficiencies() for mostProbableTrack " << mostProbableTrack
376  << " count " << fMCIdIdealTrackId.count(mostProbableTrack) << std::endl;
377  for (size_t branchIndex = 0; branchIndex < fBranchNames.size(); branchIndex++){
378  if (fMCIdIdealTrackId.count(mostProbableTrack) > 0){
379  PndTrackCand* trackCand = ((PndTrack*)fIdealTrack->At(fMCIdIdealTrackId[mostProbableTrack]))->GetTrackCandPtr();
380  if (trackCand == 0) return;
381  Int_t nMcHits = GetNIdealHits(*trackCand->GetPointerToLinks(), fBranchNames[branchIndex]);
382  FairMultiLinkedData foundHits = trackInfo[fBranchNames[branchIndex]];
383  for (int i = 0; i < foundHits.GetNLinks(); i++){
384  if (foundHits.GetLink(i).GetIndex() == mostProbableTrack){
385  Double_t nFoundHits = foundHits.GetLink(i).GetWeight();
386  if ((nFoundHits/nMcHits) > fMapEfficiencies[mostProbableTrack][fBranchNames[branchIndex]].first){
387  std::pair<Double_t, Int_t> result(nFoundHits/nMcHits, nMcHits);
388  fMapEfficiencies[mostProbableTrack][fBranchNames[branchIndex]]=result;
389  }
390  }
391  }
392  }
393  }
394 }
Int_t i
Definition: run_full.C:25
std::map< Int_t, Int_t > fMCIdIdealTrackId
! map between MC id and ideal track id
std::vector< TString > fBranchNames
! branch names of hits taken into account in the analysis (e.g. MVDHitsPixel, STTHit, ...)
TClonesArray * fIdealTrack
Double_t
std::map< Int_t, std::map< TString, std::pair< Double_t, Int_t > > > fMapEfficiencies
! MostProbable TrackId, BranchName, Efficiency (#FoundHits / #MCHits), #MCHits
Int_t GetNIdealHits(FairMultiLinkedData &track, TString branchName)
void PndTrackingQA::FillMapTrackQualifikation ( )
privatevirtual

Definition at line 278 of file PndTrackingQA.cxx.

References Bool_t, fIdealTrack, fMapTrackMCStatus, fMapTrackQualification, fMCIdIdealTrackId, fMCTrack, fPossibleTrack, fVerbose, PndTrackCand::getMcTrackId(), PndMCTrack::GetMotherID(), GetNIdealHits(), i, qualityNumbers::kAtLeastThreePrim, qualityNumbers::kAtLeastThreeSec, qualityNumbers::kLessThanThreePrim, qualityNumbers::kPossiblePrim, qualityNumbers::kPossibleSec, and nHits.

Referenced by AnalyseEvent().

279 {
280  fMapTrackQualification.clear();
281  fMapTrackMCStatus.clear();
282  fMCIdIdealTrackId.clear();
283 // std::cout << " fIdealTrack.size() " << fIdealTrack->GetEntriesFast() << std::endl;
284  for (int i = 0; i < fIdealTrack->GetEntriesFast(); i++){
285  PndTrackCand* idealTrackCand = ((PndTrack*)fIdealTrack->At(i))->GetTrackCandPtr();
286 // std::cout << i << " : PndTrackingQA::FillMapTrackQualifikation: " << *idealTrackCand << std::endl;
287 
288  PndMCTrack* mcTrack = (PndMCTrack*)fMCTrack->At(idealTrackCand->getMcTrackId());
289 
290 
291  fMCIdIdealTrackId[idealTrackCand->getMcTrackId()] = i;
292  Bool_t primaryTrack = (mcTrack->GetMotherID() < 0);
293  Bool_t atLeastThreeHits = kFALSE;
294  Int_t nHits = 0;
295 // for (int branchIndex = 0; branchIndex < fBranchNames.size(); branchIndex++){
296 // TString branchName = fBranchNames[branchIndex];
297 // nHits += GetNIdealHits(i, branchName);
298 // }
299  nHits += GetNIdealHits(*(idealTrackCand->GetPointerToLinks()), "MVDHitsPixel");
300  nHits += GetNIdealHits(*(idealTrackCand->GetPointerToLinks()), "MVDHitsStrip");
301  nHits += GetNIdealHits(*(idealTrackCand->GetPointerToLinks()), "STTHit");
302  nHits += GetNIdealHits(*(idealTrackCand->GetPointerToLinks()), "GEMHit");
303  nHits += GetNIdealHits(*(idealTrackCand->GetPointerToLinks()), "FTSHit");
304  //std::cout << "FillMapTrackQualifikation: NHits: " << nHits << std::endl;
305 
306  if (nHits > 2) atLeastThreeHits = kTRUE;
307 
308  if (atLeastThreeHits) {
309  if (primaryTrack) {
311  } else {
313  }
314  // std::cout << "AtLeastThreeHits: Track "<< i << " status: " << fMapTrackQualification[i] << std::endl;
315  }
316 
317  else if (primaryTrack){ //No hits for primary track in tracking detectors
319  }
320 
321  PndTrackCand* entry = ((PndTrack*)fIdealTrack->At(i))->GetTrackCandPtr();
322  if ((*fPossibleTrack)((FairMultiLinkedData*)entry->GetPointerToLinks(), primaryTrack))
323  {
324  if (primaryTrack) {
326  } else {
328  }
329  }
330  }
331  if (fVerbose > 1){
332  std::cout << "-I- PndMCTestPatternRecoQuality::FillMapTrackQualifikation:" << std::endl;
333 // PrintTrackQualityMap();
334  }
336 }
std::map< Int_t, Int_t > fMapTrackQualification
! TrackId vs TrackStatus after analysis of track finding
int getMcTrackId() const
Definition: PndTrackCand.h:60
Int_t i
Definition: run_full.C:25
static const int kLessThanThreePrim
Definition: PndTrackingQA.h:47
static const int kPossiblePrim
Definition: PndTrackingQA.h:44
static const int kAtLeastThreeSec
Definition: PndTrackingQA.h:45
std::map< Int_t, Int_t > fMCIdIdealTrackId
! map between MC id and ideal track id
PndTrackFunctor * fPossibleTrack
TClonesArray * fIdealTrack
static const int kPossibleSec
Definition: PndTrackingQA.h:43
TClonesArray * fMCTrack
int nHits
Definition: RiemannTest.C:16
static const int kAtLeastThreePrim
Definition: PndTrackingQA.h:46
std::map< Int_t, Int_t > fMapTrackMCStatus
! TrackId vs TrackStatus from MC
Int_t GetNIdealHits(FairMultiLinkedData &track, TString branchName)
Int_t GetMotherID() const
Definition: PndMCTrack.h:74
std::map<Int_t, std::map<TString, std::pair<Double_t, Int_t > > > PndTrackingQA::GetEfficiencies ( )
inline

Definition at line 112 of file PndTrackingQA.h.

References fMapEfficiencies.

Referenced by PndTrackingQATask::Exec().

112 {return fMapEfficiencies;}
std::map< Int_t, std::map< TString, std::pair< Double_t, Int_t > > > fMapEfficiencies
! MostProbable TrackId, BranchName, Efficiency (#FoundHits / #MCHits), #MCHits
Int_t PndTrackingQA::GetIdealTrackIdFromMCTrackId ( int  mctrackid)
inline

Definition at line 137 of file PndTrackingQA.h.

References fMCIdIdealTrackId.

Referenced by PndTrackingQATask::Exec().

137  {
138  if (fMCIdIdealTrackId.count(mctrackid) == 0) return -1;
139  return fMCIdIdealTrackId[mctrackid];
140  }
std::map< Int_t, Int_t > fMCIdIdealTrackId
! map between MC id and ideal track id
Int_t PndTrackingQA::GetIdealTrackIdFromRecoTrackId ( int  trackid)
inline

Definition at line 141 of file PndTrackingQA.h.

References fMCIdIdealTrackId, and fTrackIdMCId.

Referenced by PndTrackingQATask::Exec().

141  {
142  int mctrackid = fTrackIdMCId[trackid];
143  if (fMCIdIdealTrackId.count(mctrackid) == 0) return -1;
144  return fMCIdIdealTrackId[mctrackid];
145  }
std::map< Int_t, Int_t > fMCIdIdealTrackId
! map between MC id and ideal track id
std::map< Int_t, Int_t > fTrackIdMCId
! map between track id and most probable MC track id
FairMultiLinkedData PndTrackingQA::GetMCInfoForBranch ( TString  branchName,
PndTrackCand trackCand 
)
private

returns which MCTracks and how often (marked by a FairLink) they were seen by the hits of a PndTrackCand

Definition at line 160 of file PndTrackingQA.cxx.

References ioman.

Referenced by AnalyseTrackCand().

161 {
162  FairMultiLinkedData result;
163  result.SetInsertHistory(kFALSE);
164  //std::cout << "GetMCInforForBranch: " << branchName << std::endl;
165  FairMultiLinkedData linksOfType = trackCand->GetLinksWithType(ioman->GetBranchId(branchName));
166 // std::cout << "GetMCInforForBranch: LinksOfType " << branchName << " : " << linksOfType << std::endl;
167 
168  for (int j = 0; j < linksOfType.GetNLinks(); j++){
169  FairMultiLinkedData_Interface* linkData = (FairMultiLinkedData_Interface*)FairRootManager::Instance()->GetCloneOfLinkData(linksOfType.GetLink(j));
170  //std::cout << "CloneOfLinkData: " << *linkData << std::endl;
171  if (linkData != 0){
172  FairMultiLinkedData linkDataType = linkData->GetLinksWithType(FairRootManager::Instance()->GetBranchId("MCTrack"));
173  linkDataType.SetAllWeights(1.);
174  result.AddLinks(linkDataType);
175  linkData->Delete();
176  }
177  }
178  return result;
179 }
FairRootManager * ioman
std::map<Int_t, Int_t> PndTrackingQA::GetMCTrackFound ( )
inline

Definition at line 109 of file PndTrackingQA.h.

References fMCTrackFound.

Referenced by PndTrackingQATask::Exec().

109 {return fMCTrackFound;}
std::map< Int_t, Int_t > fMCTrackFound
! How often was a MC Track (key) found
Int_t PndTrackingQA::GetNGhosts ( )
inline

Definition at line 123 of file PndTrackingQA.h.

References fNGhosts.

Referenced by PndTrackingQATask::Exec().

123 {return fNGhosts;}
Int_t PndTrackingQA::GetNIdealHits ( FairMultiLinkedData &  track,
TString  branchName 
)

Definition at line 404 of file PndTrackingQA.cxx.

References ioman.

Referenced by CalcEfficiencies(), FillMapTrackQualifikation(), GetRecoInfoFromRecoTrack(), PrintTrackDataSummary(), and PrintTrackDataSummaryCompare().

405 {
406  Int_t numberGemHits = 0;
407  if (branchName == "GEMHit"){
408  numberGemHits = track.GetLinksWithType(ioman->GetBranchId("GEMPoint")).GetNLinks();
409  return numberGemHits;
410  }
411  return track.GetLinksWithType(ioman->GetBranchId(branchName)).GetNLinks();
412 }
FairRootManager * ioman
PndMCTrack * track
Definition: anaLmdCluster.C:89
std::map<Int_t, TVector3> PndTrackingQA::GetP ( )
inline

Definition at line 114 of file PndTrackingQA.h.

References fMapP.

Referenced by PndTrackingQATask::Exec().

114 {return fMapP;}
std::map< Int_t, TVector3 > fMapP
std::map<Int_t, Double_t> PndTrackingQA::GetPl ( )
inline

Definition at line 118 of file PndTrackingQA.h.

References fMapPl.

118 {return fMapPl;}
std::map< Int_t, Double_t > fMapPl
std::map<Int_t, Double_t> PndTrackingQA::GetPlResolution ( )
inline

Definition at line 117 of file PndTrackingQA.h.

References fMapPlResolution.

Referenced by PndTrackingQATask::Exec().

117 {return fMapPlResolution;}
std::map< Int_t, Double_t > fMapPlResolution
std::map<Int_t, Double_t> PndTrackingQA::GetPlResolutionRel ( )
inline

Definition at line 121 of file PndTrackingQA.h.

References fMapPlResolutionRel.

Referenced by PndTrackingQATask::Exec().

121 {return fMapPlResolutionRel;}
std::map< Int_t, Double_t > fMapPlResolutionRel
std::map<Int_t, Double_t> PndTrackingQA::GetPResolution ( )
inline

Definition at line 113 of file PndTrackingQA.h.

References fMapPResolution.

Referenced by PndTrackingQATask::Exec().

113 {return fMapPResolution;}
std::map< Int_t, Double_t > fMapPResolution
std::map<Int_t, Double_t> PndTrackingQA::GetPResolutionRel ( )
inline

Definition at line 119 of file PndTrackingQA.h.

References fMapPResolutionRel.

Referenced by PndTrackingQATask::Exec().

119 {return fMapPResolutionRel;}
std::map< Int_t, Double_t > fMapPResolutionRel
std::map<Int_t, Double_t> PndTrackingQA::GetPt ( )
inline

Definition at line 116 of file PndTrackingQA.h.

References fMapPt.

116 {return fMapPt;}
std::map< Int_t, Double_t > fMapPt
std::map<Int_t, Double_t> PndTrackingQA::GetPtResolution ( )
inline

Definition at line 115 of file PndTrackingQA.h.

References fMapPtResolution.

Referenced by PndTrackingQATask::Exec().

115 {return fMapPtResolution;}
std::map< Int_t, Double_t > fMapPtResolution
std::map<Int_t, Double_t> PndTrackingQA::GetPtResolutionRel ( )
inline

Definition at line 120 of file PndTrackingQA.h.

References fMapPtResolutionRel.

Referenced by PndTrackingQATask::Exec().

120 {return fMapPtResolutionRel;}
std::map< Int_t, Double_t > fMapPtResolutionRel
PndTrackingQualityRecoInfo PndTrackingQA::GetRecoInfoFromRecoTrack ( Int_t  trackId,
Int_t  mctrackId 
)

Definition at line 503 of file PndTrackingQA.cxx.

References Bool_t, fBranchNames, fIdealTrack, fMCIdIdealTrackId, fTrack, fVerbose, PndTrack::GetFlag(), GetNIdealHits(), PndTrack::GetParamFirst(), PndTrack::GetParamLast(), PndTrack::GetTrackCandPtr(), hit, ioman, nHits, PndTrackingQualityRecoInfo::SetCharge(), PndTrackingQualityRecoInfo::SetFlag(), PndTrackingQualityRecoInfo::SetMCTrackID(), PndTrackingQualityRecoInfo::SetMomentumFirst(), PndTrackingQualityRecoInfo::SetMomentumLast(), PndTrackingQualityRecoInfo::SetNofFtsFakeHits(), PndTrackingQualityRecoInfo::SetNofFtsMissingHits(), PndTrackingQualityRecoInfo::SetNofFtsTrueHits(), PndTrackingQualityRecoInfo::SetNofGemFakeHits(), PndTrackingQualityRecoInfo::SetNofGemMissingHits(), PndTrackingQualityRecoInfo::SetNofGemTrueHits(), PndTrackingQualityRecoInfo::SetNofMvdPixelFakeHits(), PndTrackingQualityRecoInfo::SetNofMvdPixelMissingHits(), PndTrackingQualityRecoInfo::SetNofMvdPixelTrueHits(), PndTrackingQualityRecoInfo::SetNofMvdStripFakeHits(), PndTrackingQualityRecoInfo::SetNofMvdStripMissingHits(), PndTrackingQualityRecoInfo::SetNofMvdStripTrueHits(), PndTrackingQualityRecoInfo::SetNofSttFakeHits(), PndTrackingQualityRecoInfo::SetNofSttMissingHits(), PndTrackingQualityRecoInfo::SetNofSttTrueHits(), PndTrackingQualityRecoInfo::SetPositionFirst(), PndTrackingQualityRecoInfo::SetPositionLast(), and track.

Referenced by AnalyseEvent().

504 {
505  PndTrackingQualityRecoInfo recoinfo(trackId);
506 
507  // CHECK this can be modified in the future, for now it is ok
508  // mvd pix / mvd str / stt paral / stt skew / gem
509 
510  if (fVerbose > 2)
511  std::cout << "PndTrackingQA::GetRecoInfoFromRecoTrack()" << std::endl;
512 
513  std::map<int, int> noftruehits;
514  std::map<int, int> noffakehits;
515  std::map<int, int> nofmissinghits;
516 
517  for (size_t branchIndex = 0; branchIndex < fBranchNames.size();
518  branchIndex++) {
519  noftruehits.clear();
520  noffakehits.clear();
521  nofmissinghits.clear();
522 
523  // get the reco track...
524  PndTrack *track = (PndTrack*) fTrack->At(trackId);
525  // .. and the track cand
526  PndTrackCand* trackcand = track->GetTrackCandPtr();
527 
528  recoinfo.SetPositionFirst(track->GetParamFirst().GetPosition());
529  recoinfo.SetMomentumFirst(track->GetParamFirst().GetMomentum());
530 
531  recoinfo.SetPositionLast(track->GetParamLast().GetPosition());
532  recoinfo.SetMomentumLast(track->GetParamLast().GetMomentum());
533 
534  recoinfo.SetCharge(track->GetParamFirst().GetQ());
535  recoinfo.SetFlag(track->GetFlag());
536 
537  // get links associated to the reco track
538  FairMultiLinkedData ptrlink = *trackcand->GetPointerToLinks();
539  // get links corresponding to the hits of the specific detector
540  FairMultiLinkedData links = ptrlink.GetLinksWithType(
541  ioman->GetBranchId(fBranchNames[branchIndex]));
542  // get their number
543  Int_t nHits = links.GetNLinks();
544  if (fVerbose > 2){
545  if (nHits > 0)
546  std::cout << "----- reco track " << trackId << " (mc track " << mctrackId<< ") has " << nHits << " from " << fBranchNames[branchIndex] << std::endl;
547  }
548  // get mc track info from each hit
549  for (int ihit = 0; ihit < nHits; ihit++) {
550  FairLink link = links.GetLink(ihit);
551  int assomctrack = -1;
552  // std::cout << "ihit " << ihit << " " << link.GetIndex() << " " << link.GetType() << " " << link.GetWeight() << std::endl;
553  FairHit * hit = (FairHit*) links.GetData(link);
554  if (!hit) {
555  std::cout << "ihit " << ihit << " " << link
556  << " is FAKE" << std::endl;
557  // std::cout << "No Obj Hit" << std::endl;
558 
559  //
560  if (noffakehits.count(branchIndex) > 0)
561  noffakehits[branchIndex]++;
562  else
563  noffakehits[branchIndex] = 1; // if not there
564  continue;
565  }
566 
567  // get links of the hit
568  FairMultiLinkedData hitlink = *hit->GetPointerToLinks();
569  // get the links corresponding to the mc track associated to the hit
570  FairMultiLinkedData mclinks = hitlink.GetLinksWithType(
571  ioman->GetBranchId("MCTrack"));
572  // std::cout << "hit " << ihit << " belongs to " << mclinks.GetNLinks() << " mc tracks" << std::endl;
573  Bool_t isgood = kFALSE;
574  FairMultiLinkedData mvdstrhits = links.GetLinksWithType(
575  FairRootManager::Instance()->GetBranchId("MVDHitsStrip"));
576  FairMultiLinkedData gemhits = links.GetLinksWithType(
577  FairRootManager::Instance()->GetBranchId("GEMHit"));
578  if ((gemhits.GetNLinks() > 0 || mvdstrhits.GetNLinks() > 0) && mclinks.GetNLinks() > 1) {
579  isgood = kFALSE;
580  } else {
581  for (int imctrk = 0; imctrk < mclinks.GetNLinks(); imctrk++) {
582  FairLink mclink = mclinks.GetLink(imctrk);
583  assomctrack = mclink.GetIndex();
584  // std::cout << "imctrk " << imctrk << " " << mclink.GetIndex() << " " << mclink.GetType() << " " << mclink.GetWeight() << std::endl;
585 // std::cout << "ihit " << ihit << " (hitid " << link.GetIndex() << ") belongs to MC track " << assomctrack << std::endl;
586  if (assomctrack == mctrackId)
587  isgood = kTRUE;
588  }
589  }
590 
591  // if true
592  if (isgood == kTRUE) {
593  // if true and already there
594  if (noftruehits.count(branchIndex) > 0)
595  noftruehits[branchIndex]++;
596  else
597  noftruehits[branchIndex] = 1; // if not there
598  } else { // if not
599  if (noffakehits.count(branchIndex) > 0)
600  noffakehits[branchIndex]++;
601  else
602  noffakehits[branchIndex] = 1; // if not there
603  }
604 
605  }
606 
607  // retrieve the ideal track cand associated
608  if (fMCIdIdealTrackId.count(mctrackId) > 0) {
609  int idealtrackid = fMCIdIdealTrackId[mctrackId];
610  PndTrack *idealtrack = (PndTrack*) fIdealTrack->At(idealtrackid);
611  PndTrackCand* idealtrackcand = idealtrack->GetTrackCandPtr();
612 
613  Int_t nMcHits = GetNIdealHits(*idealtrackcand->GetPointerToLinks(),
614  fBranchNames[branchIndex]);
615 
616  nofmissinghits[branchIndex] = nMcHits - noftruehits[branchIndex];
617 
618 // std::cout << "**** ideal track " << idealtrackid << " has " << nMcHits << " from " << fBranchNames[branchIndex] << std::endl;
619 
620  }
621 
622 // std::cout << "===> BRANCH " << fBranchNames[branchIndex] << " of track " << trackId << " (mc track " << mctrackId << ") has " << noftruehits[branchIndex] << " true, " << noffakehits[branchIndex] << " fake and " << nofmissinghits[branchIndex] << " missing hits" << std::endl;
623 
624  if (fBranchNames[branchIndex] == "MVDHitsPixel") {
625  recoinfo.SetNofMvdPixelTrueHits(noftruehits[branchIndex]);
626  recoinfo.SetNofMvdPixelFakeHits(noffakehits[branchIndex]);
627  recoinfo.SetNofMvdPixelMissingHits(nofmissinghits[branchIndex]);
628  } else if (fBranchNames[branchIndex] == "MVDHitsStrip") {
629  recoinfo.SetNofMvdStripTrueHits(noftruehits[branchIndex]);
630  recoinfo.SetNofMvdStripFakeHits(noffakehits[branchIndex]);
631  recoinfo.SetNofMvdStripMissingHits(nofmissinghits[branchIndex]);
632  } else if (fBranchNames[branchIndex] == "STTHit") {
633  recoinfo.SetNofSttTrueHits(noftruehits[branchIndex]);
634  recoinfo.SetNofSttFakeHits(noffakehits[branchIndex]);
635  recoinfo.SetNofSttMissingHits(nofmissinghits[branchIndex]);
636  } else if (fBranchNames[branchIndex] == "GEMHit") {
637  recoinfo.SetNofGemTrueHits(noftruehits[branchIndex]);
638  recoinfo.SetNofGemFakeHits(noffakehits[branchIndex]);
639  recoinfo.SetNofGemMissingHits(nofmissinghits[branchIndex]);
640  } else if (fBranchNames[branchIndex] == "FTSHit") {
641  recoinfo.SetNofFtsTrueHits(noftruehits[branchIndex]);
642  recoinfo.SetNofFtsFakeHits(noffakehits[branchIndex]);
643  recoinfo.SetNofFtsMissingHits(nofmissinghits[branchIndex]);
644  }
645 
646  }
647 
648  recoinfo.SetMCTrackID(mctrackId);
649  return recoinfo;
650 }
Int_t GetFlag() const
Definition: PndTrack.h:33
std::map< Int_t, Int_t > fMCIdIdealTrackId
! map between MC id and ideal track id
std::vector< TString > fBranchNames
! branch names of hits taken into account in the analysis (e.g. MVDHitsPixel, STTHit, ...)
TClonesArray * fIdealTrack
FairRootManager * ioman
int nHits
Definition: RiemannTest.C:16
PndMCTrack * track
Definition: anaLmdCluster.C:89
FairTrackParP GetParamLast()
Definition: PndTrack.h:50
Int_t GetNIdealHits(FairMultiLinkedData &track, TString branchName)
PndSdsMCPoint * hit
Definition: anasim.C:70
PndTrackCand * GetTrackCandPtr()
Definition: PndTrack.h:48
TClonesArray * fTrack
FairTrackParP GetParamFirst()
Definition: PndTrack.h:49
Int_t PndTrackingQA::GetSumOfAllValidMCHits ( FairMultiLinkedData *  trackData)
private

Definition at line 356 of file PndTrackingQA.cxx.

References fBranchNames, and ioman.

Referenced by AnalyseTrackInfo().

357 {
358  Int_t result = 0;
359  for (size_t branchIndex = 0; branchIndex < fBranchNames.size(); branchIndex++){
360  if (fBranchNames[branchIndex] == "GEMHit"){
361  FairMultiLinkedData gemHits = trackData->GetLinksWithType(ioman->GetBranchId("GEMPoint"));
362  result += gemHits.GetNLinks();
363  } else {
364  result += trackData->GetLinksWithType(ioman->GetBranchId(fBranchNames[branchIndex])).GetNLinks();
365  }
366  }
367  return result;
368 }
std::vector< TString > fBranchNames
! branch names of hits taken into account in the analysis (e.g. MVDHitsPixel, STTHit, ...)
FairRootManager * ioman
std::map<Int_t, Int_t> PndTrackingQA::GetTrackIdMCId ( )
inline

Definition at line 122 of file PndTrackingQA.h.

References fTrackIdMCId.

122 {return fTrackIdMCId;}
std::map< Int_t, Int_t > fTrackIdMCId
! map between track id and most probable MC track id
std::map<Int_t, Int_t> PndTrackingQA::GetTrackMCStatus ( )
inline

Definition at line 111 of file PndTrackingQA.h.

References fMapTrackMCStatus.

Referenced by PndTrackingQATask::Exec().

111 {return fMapTrackMCStatus;}
std::map< Int_t, Int_t > fMapTrackMCStatus
! TrackId vs TrackStatus from MC
std::map<Int_t, Int_t> PndTrackingQA::GetTrackQualification ( )
inline

Definition at line 110 of file PndTrackingQA.h.

References fMapTrackQualification.

Referenced by PndTrackingQATask::Exec().

110 {return fMapTrackQualification;}
std::map< Int_t, Int_t > fMapTrackQualification
! TrackId vs TrackStatus after analysis of track finding
void PndTrackingQA::Init ( )
virtual

Definition at line 53 of file PndTrackingQA.cxx.

References AddHitsBranchName(), fBranchNames, fIdealTrack, fIdealTrackName, fMCTrack, fPossibleTrack, fTrack, fTrackBranchName, fVerbose, ioman, and PndTrackFunctor::Print().

Referenced by PndTrackingQATask::Exec().

54 {
55  ioman = FairRootManager::Instance();
56  if (!ioman) {
57  std::cout << "-E- PndTrackingQualityTask::Init: "
58  << "RootManager not instantiated!" << std::endl;
59  return;
60  }
61 
62  fTrack = (TClonesArray*) ioman->GetObject(fTrackBranchName);
63  fMCTrack = (TClonesArray*) ioman->GetObject("MCTrack");
64  fIdealTrack = (TClonesArray*) ioman->GetObject(fIdealTrackName);
65 
66 
67  if (fBranchNames.size() == 0){
68  AddHitsBranchName("MVDHitsPixel");
69  AddHitsBranchName("MVDHitsStrip");
70  AddHitsBranchName("STTHit");
71  AddHitsBranchName("GEMHit");
72  AddHitsBranchName("FTSHit");
73 
74  // if (FairRootManager::Instance()->GetBranchId("CorrectedSkewedHits") > 0){
75  // AddHitsBranchName("CorrectedSkewedHits");
76  // }
77  }
78  if (fVerbose > 0){
79  std::cout << "-I- PndTrackingQA::Init: PossibleTrackFunctor: ";
81  }
82 }
virtual void Print()=0
PndTrackFunctor * fPossibleTrack
std::vector< TString > fBranchNames
! branch names of hits taken into account in the analysis (e.g. MVDHitsPixel, STTHit, ...)
void AddHitsBranchName(TString name)
Adds branch names of detector data which should be taken into account in the analysis.
TClonesArray * fIdealTrack
FairRootManager * ioman
TClonesArray * fMCTrack
TString fIdealTrackName
TClonesArray * fTrack
TString fTrackBranchName
Bool_t PndTrackingQA::IsBetterTrackExisting ( Int_t &  mcIndex,
int  quality 
)
private

Definition at line 495 of file PndTrackingQA.cxx.

References fMapTrackQualification.

496 {
497  if (fMapTrackQualification.count(mcIndex) == 1){
498  if (fMapTrackQualification[mcIndex] > 0 && fMapTrackQualification[mcIndex] > quality) return true;
499  }
500  return false;
501 }
std::map< Int_t, Int_t > fMapTrackQualification
! TrackId vs TrackStatus after analysis of track finding
void PndTrackingQA::PrintTrackDataSummary ( FairMultiLinkedData &  trackData,
Bool_t  detailedInfo = kFALSE 
)

Definition at line 414 of file PndTrackingQA.cxx.

References fBranchNames, GetNIdealHits(), ioman, and TString.

Referenced by AnalyseTrackInfo(), and PrintTrackQualityMap().

415 {
416  if (detailedInfo == kTRUE) std::cout << std::endl;
417  for (size_t branchIndex = 0; branchIndex < fBranchNames.size(); branchIndex++){
418  TString branchName = fBranchNames[branchIndex];
419  if (GetNIdealHits(trackData, branchName) > 0){
420  std::cout << branchName << " " << GetNIdealHits(trackData, branchName);
421  if (detailedInfo == kTRUE){
422  std::cout << " : ";
423  if (trackData.GetLinksWithType(ioman->GetBranchId(branchName)).GetNLinks() > 0)
424  std::cout << trackData.GetLinksWithType(ioman->GetBranchId(branchName));
425  std::cout << std::endl;
426  } else {
427  std::cout << " | ";
428  }
429  }
430  }
431  std::cout << std::endl;
432 }
std::vector< TString > fBranchNames
! branch names of hits taken into account in the analysis (e.g. MVDHitsPixel, STTHit, ...)
FairRootManager * ioman
Int_t GetNIdealHits(FairMultiLinkedData &track, TString branchName)
void PndTrackingQA::PrintTrackDataSummaryCompare ( FairMultiLinkedData &  recoTrackData,
FairMultiLinkedData &  idealTrackData 
)

Definition at line 434 of file PndTrackingQA.cxx.

References fBranchNames, GetNIdealHits(), and TString.

Referenced by PrintTrackQualityMap().

435 {
436  for (size_t branchIndex = 0; branchIndex < fBranchNames.size(); branchIndex++){
437  TString branchName = fBranchNames[branchIndex];
438  std::cout << branchName << " " << GetNIdealHits(recoTrackData, branchName);
439  std::cout << "/" << GetNIdealHits(idealTrackData, branchName);
440  std::cout << " | ";
441  }
442  std::cout << std::endl;
443 }
std::vector< TString > fBranchNames
! branch names of hits taken into account in the analysis (e.g. MVDHitsPixel, STTHit, ...)
Int_t GetNIdealHits(FairMultiLinkedData &track, TString branchName)
void PndTrackingQA::PrintTrackInfo ( std::map< TString, FairMultiLinkedData >  info)

Definition at line 481 of file PndTrackingQA.cxx.

References i.

Referenced by AnalyseTrackCand().

482 {
483  std::cout << "TrackInfo: (MC-ID/NHits) : ";
484  for (std::map<TString, FairMultiLinkedData>::iterator iter = info.begin(); iter != info.end(); iter++){
485  std::cout << iter->first;
486  for (int i = 0; i < iter->second.GetNLinks(); i++){
487  std::cout << " : (" << iter->second.GetLink(i).GetIndex() << "/" << iter->second.GetLink(i).GetWeight() << ")";
488  }
489  std::cout << " || ";
490  }
491  std::cout << std::endl;
492 }
Int_t i
Definition: run_full.C:25
void PndTrackingQA::PrintTrackMCStatusMap ( )

Definition at line 470 of file PndTrackingQA.cxx.

References fMapTrackMCStatus, fMCTrackFound, and qualityNumbers::QualityNumberToString().

471 {
472  std::cout << "PrintTrackMCStatusMap: " << std::endl;
473  for (std::map<Int_t, Int_t>::iterator iter = fMapTrackMCStatus.begin(); iter != fMapTrackMCStatus.end(); iter++){
474  std::cout << "TrackID: " << iter->first << " Quality: " << qualityNumbers::QualityNumberToString(iter->second) << " Found: " << fMCTrackFound[iter->first];
475  std::cout << std::endl;
476  }
477  std::cout << std::endl;
478 }
static std::string QualityNumberToString(int qNumber)
Definition: PndTrackingQA.h:68
std::map< Int_t, Int_t > fMCTrackFound
! How often was a MC Track (key) found
std::map< Int_t, Int_t > fMapTrackMCStatus
! TrackId vs TrackStatus from MC
void PndTrackingQA::PrintTrackQualityMap ( Bool_t  detailedInfo = kFALSE)

The description of the quality map IDs is now located a but further up, at struct qualityNumbers

Definition at line 446 of file PndTrackingQA.cxx.

References fIdealTrack, fMapTrackMCStatus, fMapTrackQualification, fMCIdIdealTrackId, fMCIdTrackId, fMCTrackFound, fTrack, PrintTrackDataSummary(), PrintTrackDataSummaryCompare(), and qualityNumbers::QualityNumberToString().

Referenced by AnalyseEvent(), and PndTrackingQATask::Exec().

447 {
448  for (std::map<Int_t, Int_t>::iterator iter = fMapTrackQualification.begin(); iter != fMapTrackQualification.end(); iter++){
449  std::cout << "TrackID: " << iter->first << " MCQuality: " << qualityNumbers::QualityNumberToString(fMapTrackMCStatus[iter->first]) << " Quality: ";
450  if (iter->second < 0)
451  std::cout << " NOT FOUND ";
452  else
453  std::cout << qualityNumbers::QualityNumberToString(iter->second);
454  std::cout << " NFound: " << fMCTrackFound[iter->first];
455  std::cout << " MCData: ";
456  if (fMCIdIdealTrackId.count(iter->first) > 0){
457  PndTrackCand* idealTrackCand = ((PndTrack*)fIdealTrack->At(fMCIdIdealTrackId[iter->first]))->GetTrackCandPtr();
458  if (iter->second < 0)
459  PrintTrackDataSummary(*idealTrackCand->GetPointerToLinks(), detailedInfo);
460  else {
461  PndTrackCand* recoTrackCand = ((PndTrack*)fTrack->At(fMCIdTrackId[iter->first]))->GetTrackCandPtr();
462  if (recoTrackCand != 0 && idealTrackCand != 0)
463  PrintTrackDataSummaryCompare(*recoTrackCand->GetPointerToLinks(), *idealTrackCand->GetPointerToLinks());
464  }
465  }
466  }
467  std::cout << std::endl;
468 }
void PrintTrackDataSummary(FairMultiLinkedData &trackData, Bool_t detailedInfo=kFALSE)
std::map< Int_t, Int_t > fMapTrackQualification
! TrackId vs TrackStatus after analysis of track finding
std::map< Int_t, Int_t > fMCIdIdealTrackId
! map between MC id and ideal track id
TClonesArray * fIdealTrack
static std::string QualityNumberToString(int qNumber)
Definition: PndTrackingQA.h:68
std::map< Int_t, Int_t > fMCTrackFound
! How often was a MC Track (key) found
void PrintTrackDataSummaryCompare(FairMultiLinkedData &recoTrackData, FairMultiLinkedData &idealTrackData)
std::map< Int_t, Int_t > fMapTrackMCStatus
! TrackId vs TrackStatus from MC
std::map< Int_t, Int_t > fMCIdTrackId
! map between MC id and track id
TClonesArray * fTrack
void PndTrackingQA::SetHitsBranchNames ( std::vector< TString names)
inline

Definition at line 103 of file PndTrackingQA.h.

References fBranchNames.

Referenced by PndTrackingQATask::Exec().

103 { fBranchNames = names;}
std::vector< TString > fBranchNames
! branch names of hits taken into account in the analysis (e.g. MVDHitsPixel, STTHit, ...)
void PndTrackingQA::SetVerbose ( Int_t  val)
inline

Definition at line 99 of file PndTrackingQA.h.

References fVerbose, and val.

Referenced by PndTrackingQATask::Exec().

99 {fVerbose = val;}
Double_t val[nBoxes][nFEBox]
Definition: createCalib.C:11

Member Data Documentation

std::vector<TString> PndTrackingQA::fBranchNames
private

! branch names of hits taken into account in the analysis (e.g. MVDHitsPixel, STTHit, ...)

Definition at line 176 of file PndTrackingQA.h.

Referenced by AddHitsBranchName(), AnalyseTrackCand(), CalcEfficiencies(), GetRecoInfoFromRecoTrack(), GetSumOfAllValidMCHits(), Init(), PrintTrackDataSummary(), PrintTrackDataSummaryCompare(), and SetHitsBranchNames().

Bool_t PndTrackingQA::fCleanFunctor
private

Definition at line 170 of file PndTrackingQA.h.

Referenced by PndTrackingQA(), and ~PndTrackingQA().

TClonesArray* PndTrackingQA::fIdealTrack
private
TClonesArray* PndTrackingQA::fIdealTrackCand
private

Definition at line 201 of file PndTrackingQA.h.

TString PndTrackingQA::fIdealTrackName
private

Definition at line 166 of file PndTrackingQA.h.

Referenced by Init().

std::map<Int_t, std::map<TString, std::pair<Double_t, Int_t> > > PndTrackingQA::fMapEfficiencies
private

! MostProbable TrackId, BranchName, Efficiency (#FoundHits / #MCHits), #MCHits

Definition at line 187 of file PndTrackingQA.h.

Referenced by CalcEfficiencies(), and GetEfficiencies().

std::map<Int_t, TVector3> PndTrackingQA::fMapP
private

Definition at line 189 of file PndTrackingQA.h.

Referenced by AnalyseEvent(), and GetP().

std::map<Int_t, Double_t> PndTrackingQA::fMapPl
private

Definition at line 195 of file PndTrackingQA.h.

Referenced by AnalyseEvent(), and GetPl().

std::map<Int_t, Double_t> PndTrackingQA::fMapPlResolution
private

Definition at line 194 of file PndTrackingQA.h.

Referenced by AnalyseEvent(), and GetPlResolution().

std::map<Int_t, Double_t> PndTrackingQA::fMapPlResolutionRel
private

Definition at line 196 of file PndTrackingQA.h.

Referenced by AnalyseEvent(), and GetPlResolutionRel().

std::map<Int_t, Double_t> PndTrackingQA::fMapPResolution
private

Definition at line 188 of file PndTrackingQA.h.

Referenced by AnalyseEvent(), and GetPResolution().

std::map<Int_t, Double_t> PndTrackingQA::fMapPResolutionRel
private

Definition at line 192 of file PndTrackingQA.h.

Referenced by AnalyseEvent(), and GetPResolutionRel().

std::map<Int_t, Double_t> PndTrackingQA::fMapPt
private

Definition at line 191 of file PndTrackingQA.h.

Referenced by AnalyseEvent(), and GetPt().

std::map<Int_t, Double_t> PndTrackingQA::fMapPtResolution
private

Definition at line 190 of file PndTrackingQA.h.

Referenced by AnalyseEvent(), and GetPtResolution().

std::map<Int_t, Double_t> PndTrackingQA::fMapPtResolutionRel
private

Definition at line 193 of file PndTrackingQA.h.

Referenced by AnalyseEvent(), and GetPtResolutionRel().

std::map<Int_t, Int_t> PndTrackingQA::fMapTrackMCStatus
private

! TrackId vs TrackStatus from MC

Definition at line 185 of file PndTrackingQA.h.

Referenced by FillMapTrackQualifikation(), GetTrackMCStatus(), PrintTrackMCStatusMap(), and PrintTrackQualityMap().

std::map<Int_t, Int_t> PndTrackingQA::fMapTrackQualification
private

! TrackId vs TrackStatus after analysis of track finding

Definition at line 186 of file PndTrackingQA.h.

Referenced by AnalyseEvent(), AnalyseTrackInfo(), FillMapTrackQualifikation(), GetTrackQualification(), IsBetterTrackExisting(), and PrintTrackQualityMap().

std::map<Int_t, Int_t> PndTrackingQA::fMCIdIdealTrackId
private
std::map<Int_t, Int_t> PndTrackingQA::fMCIdTrackId
private

! map between MC id and track id

Definition at line 178 of file PndTrackingQA.h.

Referenced by AnalyseEvent(), AnalyseTrackInfo(), and PrintTrackQualityMap().

TClonesArray* PndTrackingQA::fMCTrack
private

Definition at line 199 of file PndTrackingQA.h.

Referenced by AnalyseEvent(), FillMapTrackQualifikation(), and Init().

std::map<Int_t, Int_t> PndTrackingQA::fMCTrackFound
private

! How often was a MC Track (key) found

Definition at line 181 of file PndTrackingQA.h.

Referenced by AnalyseEvent(), GetMCTrackFound(), PrintTrackMCStatusMap(), and PrintTrackQualityMap().

Int_t PndTrackingQA::fNGhosts
private

Definition at line 171 of file PndTrackingQA.h.

Referenced by AnalyseTrackInfo(), and GetNGhosts().

Bool_t PndTrackingQA::fPndTrackOrTrackCand
private

Definition at line 167 of file PndTrackingQA.h.

Referenced by AnalyseEvent().

PndTrackFunctor* PndTrackingQA::fPossibleTrack
private

Definition at line 169 of file PndTrackingQA.h.

Referenced by FillMapTrackQualifikation(), Init(), PndTrackingQA(), and ~PndTrackingQA().

std::string PndTrackingQA::fPossibleTrackName
private

Definition at line 168 of file PndTrackingQA.h.

TClonesArray* PndTrackingQA::fTrack
private
TString PndTrackingQA::fTrackBranchName
private

Definition at line 165 of file PndTrackingQA.h.

Referenced by Init().

std::map<Int_t, Int_t> PndTrackingQA::fTrackIdMCId
private

! map between track id and most probable MC track id

Definition at line 177 of file PndTrackingQA.h.

Referenced by AnalyseEvent(), GetIdealTrackIdFromRecoTrackId(), and GetTrackIdMCId().

Bool_t PndTrackingQA::fUseCorrectedSkewedHits
private

Definition at line 173 of file PndTrackingQA.h.

Int_t PndTrackingQA::fVerbose
private
FairRootManager* PndTrackingQA::ioman
private

The documentation for this class was generated from the following files: