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

#include <PndAnalysis.h>

Public Member Functions

 PndAnalysis (TString tname1="", TString tname2="", TString algnamec="PidAlgoIdealCharged", TString algnamen="PidAlgoIdealNeutral")
 
virtual ~PndAnalysis ()
 
void Rewind ()
 
void Reset ()
 
Int_t GetEvent (Int_t n=-1)
 
void GetEventInTask ()
 
FairMCEventHeader * GetEventHeader ()
 
Int_t GetEntries ()
 
Bool_t FillList (RhoCandList &l, TString listkey="All", TString pidTcaNames="", int trackHypothesis=-1)
 
void SetVerbose (Int_t level)
 
Bool_t PropagateToIp (RhoCandidate *cand)
 
Bool_t PropagateToZAxis (RhoCandidate *cand)
 
Bool_t PropagateToPoint (RhoCandidate *cand, TVector3 mypoint)
 
Bool_t PropagateToPlane (RhoCandidate *cand, TVector3 origin, TVector3 dj, TVector3 dk)
 
PndTrackGetTrack (RhoCandidate *cand)
 
FairTrackParP GetFirstPar (RhoCandidate *cand)
 
Bool_t ResetCandidate (RhoCandidate *cand)
 
Bool_t ResetDaughters (RhoCandidate *cand)
 
Bool_t McTruthMatch (RhoCandidate *cand, Int_t level=2, bool verbose=false)
 
Int_t McTruthMatch (RhoCandList &list, Int_t level=2, bool verbose=false)
 
void McMatchAllowPhotos (int maxn=1, double thresh=0.05)
 
Bool_t Propagator (int mode, FairTrackParP &tStart, RhoCandidate *cand, TVector3 point=TVector3(0, 0, 0), Bool_t skipcov=kFALSE, Bool_t overwrite=kFALSE, TVector3 planej=TVector3(1, 0, 0), TVector3 planek=TVector3(0, 1, 0))
 

Private Member Functions

void Init ()
 
void BuildMcCands ()
 
Bool_t GetMcCandList (RhoCandList &l)
 
void ReadRecoCandidates ()
 
void Cleanup ()
 
TClonesArray * ReadTCA (TString tcaname)
 
Bool_t MctMatch (RhoCandidate &c, RhoCandList &mct, Int_t level=2, bool verbose=false)
 
Bool_t MctMatch (RhoCandidate *c, RhoCandList &mct, Int_t level=2, bool verbose=false)
 
 ClassDef (PndAnalysis, 0)
 

Private Attributes

FairRootManager * fRootManager
 
PndAnaPidSelectorfPidSelector
 
PndAnaPidCombinerfPidCombiner
 
Int_t fEvtCount
 
Int_t fChainEntries
 
Bool_t fEventRead
 
Bool_t fBuildMcCands
 
Int_t fVerbose
 
Int_t fPhotosMax
 
Double_t fPhotosThresh
 
std::map< int, RhoCandidate * > fMcPresenceMap
 
std::array< TClonesArray *, 6 > fChargedCands
 
std::array< TClonesArray *, 6 > fBremCorr
 
TClonesArray * fNeutralCands
 
std::array< TClonesArray *, 6 > fChargedProbability
 
std::array< TClonesArray *, 6 > fTracks
 
std::array< TClonesArray *, 6 > fTracks2
 
TClonesArray * fMcCands
 
TClonesArray * fMcTracks
 
std::array< RhoCandList, 6 > fChargedCandList
 
RhoCandList fNeutralCandList
 
RhoCandList fMcCandList
 
TString fChargedPidName
 
TString fNeutralPidName
 
TString fTracksName
 
TString fTracksName2
 
TString fPidHypoStr [6]
 
Int_t fHypoPdg [6]
 
Bool_t fHypoFlagCharged [6]
 
Int_t fDefaultHypo
 Flag to check which hypo lists exists //0-4 for trk hypothesis, 5 for fallback. More...
 

Detailed Description

Definition at line 30 of file PndAnalysis.h.

Constructor & Destructor Documentation

PndAnalysis::PndAnalysis ( TString  tname1 = "",
TString  tname2 = "",
TString  algnamec = "PidAlgoIdealCharged",
TString  algnamen = "PidAlgoIdealNeutral" 
)

Definition at line 48 of file PndAnalysis.cxx.

References fRootManager, and Init().

Referenced by ana_complete(), ana_day1(), ana_multi(), ana_multikalman(), anaDMesonsCharged(), anaideal_complete(), tut_ana(), tut_ana_comb(), tut_ana_fast(), tut_ana_fit(), tut_ana_mclist(), tut_ana_mcmatch(), and tut_ana_pid().

48  :
49  fRootManager ( FairRootManager::Instance() ),
50  fPidSelector ( 0 ),
51  fEvtCount ( 0 ),
52  fChainEntries ( 0 ),
53  fEventRead ( false ),
54  fBuildMcCands ( false ),
55  fVerbose(0),
56  fPhotosMax(0), fPhotosThresh(0.05),
57  fChargedPidName ( algnamec ),
58  fNeutralPidName ( algnamen ),
59  fTracksName ( tname1 ),
60  fTracksName2 ( tname2 ),
61  fDefaultHypo ( 2 )
62 {
63  if ( 0 == fRootManager ) {
64  std::cout << "-E- PndAnalysis: RootManager not instantiated!" << std::endl;
65  return;
66  }
67 
68  Init();
69 }
Bool_t fBuildMcCands
Definition: PndAnalysis.h:93
Int_t fVerbose
Definition: PndAnalysis.h:94
Double_t fPhotosThresh
Definition: PndAnalysis.h:96
PndAnaPidSelector * fPidSelector
Definition: PndAnalysis.h:88
TString fNeutralPidName
Definition: PndAnalysis.h:115
Int_t fEvtCount
Definition: PndAnalysis.h:90
Int_t fDefaultHypo
Flag to check which hypo lists exists //0-4 for trk hypothesis, 5 for fallback.
Definition: PndAnalysis.h:122
TString fChargedPidName
Definition: PndAnalysis.h:114
TString fTracksName2
Definition: PndAnalysis.h:117
FairRootManager * fRootManager
Definition: PndAnalysis.h:87
TString fTracksName
Definition: PndAnalysis.h:116
Int_t fChainEntries
Definition: PndAnalysis.h:91
Int_t fPhotosMax
Definition: PndAnalysis.h:95
Bool_t fEventRead
Definition: PndAnalysis.h:92
PndAnalysis::~PndAnalysis ( )
virtual

Definition at line 71 of file PndAnalysis.cxx.

References fPidSelector.

72 {
73  if ( 0!=fPidSelector ) {
74  delete fPidSelector;
75  }
76 }
PndAnaPidSelector * fPidSelector
Definition: PndAnalysis.h:88

Member Function Documentation

void PndAnalysis::BuildMcCands ( )
private

Definition at line 532 of file PndAnalysis.cxx.

References fabs(), fBuildMcCands, fChargedCandList, fMcCandList, fMcCands, fMcTracks, fNeutralCandList, fVerbose, RhoCandList::Get(), PndMCTrack::Get4Momentum(), RhoCandList::GetLength(), GetMcCandList(), PndPidCandidate::GetMcIndex(), PndMCTrack::GetPdgCode(), RhoCandidate::GetRecoCandidate(), PndMCTrack::GetStartVertex(), i, reco(), RhoCandidate::SetMcTruth(), RhoCandidate::SetP4(), RhoCandidate::SetPos(), RhoCandidate::SetTrackNumber(), RhoCandidate::SetType(), and RhoCandidate::Uid().

Referenced by GetEvent(), and GetEventInTask().

533 {
534  int i;
535  // Make Monte-carlo truth candidates by the reconstructed particles up to the initial state (if available)
536  if ( !fBuildMcCands ) {
537  if(fVerbose) Info("PndAnalysis::BuildMcCands","No mc to build...");
538  return;
539  }
540  if ( !fMcCands ) {
541  Warning("PndAnalysis::BuildMcCands","No array to store candidates...");
542  return;
543  }
544  if ( fMcCands->GetEntriesFast() != 0 ) {
545  fMcCands->Delete();
546  }
547  if ( fMcTracks == 0 ) {
548  Error ( "BuildMcCands","MC track Array does not exist." );
549  return;
550  }
551 
552  //loop all MCTracks
553  for (i=0; i<fMcTracks->GetEntriesFast(); i++)
554  {
555  // fetch particle properties
556  PndMCTrack* part = (PndMCTrack*) fMcTracks->At(i);
557  TLorentzVector p4 = part->Get4Momentum();
558  TVector3 stvtx = part->GetStartVertex();
559  TParticlePDG* ppdg = TDatabasePDG::Instance()->GetParticle(part->GetPdgCode());
560  double charge=0.0;
561  if ( ppdg ) {
562  charge=ppdg->Charge();
563  } else if (fVerbose) {
564  cout <<"-W- CreateMcCandidate: strange PDG code:"<<part->GetPdgCode() <<endl;
565  }
566  if ( fabs(charge) >2 ) {
567  charge/=3.;
568  }
569  // create mc candidate
570  RhoCandidate* pmc=new ( (*fMcCands)[i] ) RhoCandidate(p4,charge);
571  pmc->SetPos(stvtx);
572  pmc->SetType(part->GetPdgCode()); //this overwrites our generator's mass information
573  pmc->SetP4(p4);
574  pmc->SetTrackNumber(i);
575  pmc->SetLink(FairLink(-1, FairRootManager::Instance()->GetEntryNr(), FairRootManager::Instance()->GetBranchId("MCTrack"), i));
576  }
577 
578  //write correctly assigned copy of mc truth candidates
580 
581  // Assign MC truth to reconstructed allCandnds
582  //todo: make sure that this part is not broken
583  RhoCandidate* truth=0;
584  for(int icand=0; icand<fNeutralCandList.GetLength(); icand++) {
585  RhoCandidate* currentcand=fNeutralCandList.Get(icand);
586  // get reco candidate
587  PndPidCandidate* reco = currentcand->GetRecoCandidate();
588 
589  if(!reco) {
590  if (fVerbose) Info("BuildMcCands","reco object to candidate %i (%p) missing.",icand,currentcand);
591  continue;
592  }
593  // get the mctruth
594  Int_t mcidx = reco->GetMcIndex();
595  if (mcidx>fMcCandList.GetLength() || mcidx<0) continue;
596  truth = fMcCandList[mcidx];
597  currentcand->SetMcTruth(truth);
598  if(fVerbose)Info("PndAnalysis::BuildMcCands()","Now setting truth index %i (%p) to candidate (uid=%i)", mcidx,truth,currentcand->Uid());
599  }
600  for(int ihyp=0; ihyp<6; ihyp++) {
601  for(int icand=0; icand<fChargedCandList[ihyp].GetLength(); icand++) {
602  RhoCandidate* currentcand=fChargedCandList[ihyp].Get(icand);
603  //for(int icand=0;icand<fAllCandList[ihyp].GetLength();icand++){
604  //RhoCandidate* currentcand=fAllCandList[ihyp].Get(icand);
605  // get reco candidate
606 
607  PndPidCandidate* reco = currentcand->GetRecoCandidate();
608 
609  if(!reco) {
610  if (fVerbose) Info("BuildMcCands","reco object to candidate %i (%p) missing.",icand,currentcand);
611  continue;
612  }
613  // get the mctruth
614  Int_t mcidx = reco->GetMcIndex();
615  if (mcidx>fMcCandList.GetLength() || mcidx<0) continue;
616  truth = fMcCandList[mcidx];
617  currentcand->SetMcTruth(truth);
618  if(fVerbose)Info("PndAnalysis::BuildMcCands()","Now setting truth index %i (%p) to candidate (uid=%i)", mcidx,truth,currentcand->Uid());
619  }
620 
621  }
622 }
TClonesArray * fMcCands
Definition: PndAnalysis.h:107
Bool_t fBuildMcCands
Definition: PndAnalysis.h:93
std::array< RhoCandList, 6 > fChargedCandList
Definition: PndAnalysis.h:110
void SetPos(const TVector3 &pos)
Definition: RhoCandidate.h:235
Int_t i
Definition: run_full.C:25
Int_t fVerbose
Definition: PndAnalysis.h:94
Int_t GetPdgCode() const
Definition: PndMCTrack.h:73
Int_t GetLength() const
Definition: RhoCandList.h:46
RhoCandList fMcCandList
Definition: PndAnalysis.h:112
PndPidCandidate * GetRecoCandidate() const
Definition: RhoCandidate.h:376
Bool_t GetMcCandList(RhoCandList &l)
Int_t Uid() const
Definition: RhoCandidate.h:419
TLorentzVector Get4Momentum() const
Definition: PndMCTrack.cxx:102
Int_t GetMcIndex() const
void SetType(const TParticlePDG *pdt)
void SetP4(Double_t mass, const TVector3 &p3)
TClonesArray * fMcTracks
Definition: PndAnalysis.h:108
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
void SetMcTruth(RhoCandidate *mct)
Definition: RhoCandidate.h:436
int reco()
void SetTrackNumber(Int_t trnum=-1)
Definition: RhoCandidate.h:418
RhoCandList fNeutralCandList
Definition: PndAnalysis.h:111
TVector3 GetStartVertex() const
Definition: PndMCTrack.h:76
RhoCandidate * Get(Int_t)
Definition: RhoCandList.cxx:94
PndAnalysis::ClassDef ( PndAnalysis  ,
 
)
private
void PndAnalysis::Cleanup ( )
private

Definition at line 229 of file PndAnalysis.cxx.

References RhoCandList::Cleanup(), fChargedCandList, fMcCandList, fNeutralCandList, i, RhoFactory::Instance(), and RhoFactory::Reset().

Referenced by GetEvent(), GetEventInTask(), and ReadRecoCandidates().

230 {
231  // do a safe cleanup
232  for (int i = 0; i<6; i++) {
233  //fAllCandList[i].Cleanup();
234  fChargedCandList[i].Cleanup();
235  }
239 
240 }
void Cleanup()
Definition: RhoCandList.cxx:62
std::array< RhoCandList, 6 > fChargedCandList
Definition: PndAnalysis.h:110
Int_t i
Definition: run_full.C:25
static void Reset()
Definition: RhoFactory.cxx:28
RhoCandList fMcCandList
Definition: PndAnalysis.h:112
static RhoFactory * Instance()
Definition: RhoFactory.cxx:34
RhoCandList fNeutralCandList
Definition: PndAnalysis.h:111
Bool_t PndAnalysis::FillList ( RhoCandList l,
TString  listkey = "All",
TString  pidTcaNames = "",
int  trackHypothesis = -1 
)

Definition at line 319 of file PndAnalysis.cxx.

References PndAnaPidCombiner::Apply(), At, Bool_t, RhoCandList::Cleanup(), fBremCorr, fChargedCandList, fDefaultHypo, fHypoFlagCharged, fNeutralCandList, fPidCombiner, fPidSelector, fVerbose, RhoCandList::GetLength(), GetMcCandList(), PndPidBremCorrected4Mom::GetMomentum(), i, RhoCandList::Select(), PndAnaPidSelector::SetCriterion(), PndAnaPidCombiner::SetDefaults(), PndAnaPidCombiner::SetTcaNames(), and TString.

Referenced by ana_complete(), ana_day1(), ana_jpsi(), ana_multi(), ana_multikalman(), anaDMesonsCharged(), anaideal_complete(), anatut_psi2s(), PndTripleAnaTask::DsDs2317Analysis(), PndProdAnaTask::Exec(), PndTutAnaTaskD0::Exec(), PndLLbarAnaTask::Exec(), PndScrutAnaTask::Exec(), PndAnaWithTrigger::Exec(), PndMyAnalysisTask::Exec(), PndParticleQATask::Exec(), PndTripleAnaTask::Exec(), PndSimpleCombinerTask::Exec(), PndSimpleCombiner::FillGenericLists(), PndSoftTriggerTask::FillGlobalLists(), PndSoftTriggerTask::GetPocaVtx(), PndTripleAnaTask::JpsiAnalysis(), newana_check_eta(), QAmacro_fastsim_2(), PndRhoTupleQA::qaMcList(), PndRhoTupleQA::qaPoca(), PndRhoTupleQA::qaVtx(), run_ana_eta_c_stt_v2(), PndTripleAnaTask::ThreePiAnalysis(), tut_ana(), tut_ana_comb(), tut_ana_d0(), tut_ana_d0_qahelper(), tut_ana_fast(), tut_ana_fit(), tut_ana_mclist(), tut_ana_mcmatch(), tut_ana_ntp(), tut_ana_ntp_noqa(), tut_ana_ntp_qa(), and tut_ana_pid().

320 {
321  // Reads the specified List for the current event
322  resultList.Cleanup();
323 
324  // Select the right tracking hypothesis
326  trackHypothesis=fDefaultHypo; // Pions are default
327  }
328 
329  TString trkPostfix[6]= {"Electron","Muon","Pion","Kaon","Proton",""};
330  if(0>trackHypothesis || 6<trackHypothesis) { //only for unsupportet track hyp. mumber
331  for(int i=0; i<6; ++i) {
332  if (fHypoFlagCharged[i] && listkey.Contains ( trkPostfix[i] ) ) {
333  trackHypothesis=i;
334  break;
335  }
336  }
337  }
338  if(fVerbose>4) cout<<"PndAnalysis::FillList() listkey=\""<<listkey<<"\" trackhypo="<<trackHypothesis<<" pidTcaNames=\""<<pidTcaNames.Data()<<"\" trkPostfix=\""<<trkPostfix[trackHypothesis]<<"\""<<endl;
339 
340  // Set which PID information should be used.
341  if ( pidTcaNames!="" ) {
342  fPidCombiner->SetTcaNames ( pidTcaNames, trkPostfix[trackHypothesis] );
343  } else {
344  // FIXME This may cause problems, if defaults are not there
345  fPidCombiner->SetDefaults(); // no pid array
346  }
347 
348  // Get or build Monte-Carlo truth list
349  if ( listkey=="McTruth" ) {
350  return GetMcCandList(resultList);
351  }
352 
353  if(fVerbose>4)Info("PndAnalysis::FillList","key=%s",listkey.Data());
354  // acceleration: just give the large lists directly
355 
356  //if ( listkey=="Neutral" ) {
357  if ( listkey.Contains ( "Neutral" ) ) {
358  resultList=fNeutralCandList;
359  return kTRUE;
360  }
361  //if ( listkey.Contains ( "Neutral" ) )
362  //{ // The neutrals are all clusters, except for the ones which were close to a track. The hypothesis is used in extrapolating the track...
364  //fPidSelector->Select ( fNeutralCandList,resultList );
365  //return kTRUE;
366 
367  //}
368 
369  if ( listkey=="Charged" ) {
370  resultList=fChargedCandList[trackHypothesis];
371  fPidCombiner->Apply ( resultList );
372  if(fVerbose>4)cout<<"trackhyp="<<trackHypothesis<<" list size after selection="<<resultList.GetLength()<<endl;
373  return kTRUE;
374  }
375 
376  const bool doBremCorr = listkey.Contains("Brem");
377  if (doBremCorr) listkey.ReplaceAll("Brem","");
378 
379  // Real selection requested:
380  // set the base list for the PID list maker
381  Bool_t checkcrit = fPidSelector->SetCriterion ( listkey );
382  if (!checkcrit) return kFALSE;
383 
384  if ( listkey.Contains ( "Electron" ) ||listkey.Contains ( "Muon" ) ||listkey.Contains ( "Pion" )
385  || listkey.Contains ( "Kaon" ) ||listkey.Contains ( "Proton" )
386  || listkey.Contains ( "Plus" ) ||listkey.Contains ( "Minus" ) ||listkey.Contains ( "Charged" ) ) {
387  // We create a copy of all charged candidates
388 
389  resultList=fChargedCandList[trackHypothesis];
390  if(fVerbose>4)cout<<"trackhyp="<<trackHypothesis<<" list size="<<resultList.GetLength()<<endl;
391  // Correction for Bremsstrahlung, if desired
392  if ( doBremCorr )
393  {
394  if (fBremCorr[trackHypothesis]==0) {
395  if(fVerbose) Warning("PndAnalysis::FillList","Brem requested but no PndPidBremCorrected4Mom found on input file. Brem Correction can't be done.");
396  } else {
397  for (int j=0; j<resultList.GetLength(); ++j)
398  {
399  int trk_id = resultList[j]->GetTrackNumber();
400  int nBremCorr = fBremCorr[trackHypothesis]->GetEntriesFast();
401  if (nBremCorr!=resultList.GetLength())
402  if(fVerbose)
403  Warning("PndAnalysis::FillList","Warning: BermCorr list size diff. from chargeCandList");
404  PndPidBremCorrected4Mom *bremCorr = (PndPidBremCorrected4Mom*) fBremCorr[trackHypothesis]->At(trk_id);
405  resultList[j]->SetP3(bremCorr->GetMomentum());
406  }
407  }
408  }
409  fPidCombiner->Apply ( resultList );
410  if(fVerbose>4)cout<<"trackhyp="<<trackHypothesis<<" list size after pid ="<<resultList.GetLength()<<endl;
411  resultList.Select(fPidSelector);
412  if(fVerbose>4)cout<<"trackhyp="<<trackHypothesis<<" list size after selection="<<resultList.GetLength()<<endl;
413  return kTRUE;
414  }
415 
416  Error ( "FillList", "Unknown list key: %s",listkey.Data() );
417  return kFALSE;
418 }
void SetTcaNames(TString &names, TString postfix="")
std::array< RhoCandList, 6 > fChargedCandList
Definition: PndAnalysis.h:110
Int_t i
Definition: run_full.C:25
Int_t fVerbose
Definition: PndAnalysis.h:94
Bool_t Apply(RhoCandidate *tc)
PndAnaPidSelector * fPidSelector
Definition: PndAnalysis.h:88
Bool_t GetMcCandList(RhoCandList &l)
Bool_t SetCriterion(TString &crit)
Int_t fDefaultHypo
Flag to check which hypo lists exists //0-4 for trk hypothesis, 5 for fallback.
Definition: PndAnalysis.h:122
PndAnaPidCombiner * fPidCombiner
Definition: PndAnalysis.h:89
std::array< TClonesArray *, 6 > fBremCorr
Definition: PndAnalysis.h:101
RhoCandList fNeutralCandList
Definition: PndAnalysis.h:111
Bool_t fHypoFlagCharged[6]
Definition: PndAnalysis.h:121
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
Int_t PndAnalysis::GetEntries ( )
Int_t PndAnalysis::GetEvent ( Int_t  n = -1)

Definition at line 257 of file PndAnalysis.cxx.

References BuildMcCands(), Cleanup(), fBremCorr, fChainEntries, fChargedCands, fChargedProbability, fEvtCount, fHypoFlagCharged, fPidHypoStr, fRootManager, fTracks, fTracks2, fVerbose, i, and ReadRecoCandidates().

Referenced by ana_complete(), ana_day1(), ana_jpsi(), ana_multi(), ana_multikalman(), anaDMesonsCharged(), anaideal_complete(), anatut_psi2s(), PndTutAnaTask::Exec(), PndTutAnaTaskD0::Exec(), PndLLbarAnaTask::Exec(), PndMyAnalysisTask::Exec(), PndScrutAnaTask::Exec(), newana_check_eta(), QAmacro_fastsim_2(), run_ana_eta_c_stt_v2(), tut_ana(), tut_ana_comb(), tut_ana_d0(), tut_ana_d0_qahelper(), tut_ana_fast(), tut_ana_fit(), tut_ana_mclist(), tut_ana_mcmatch(), tut_ana_ntp(), tut_ana_ntp_noqa(), tut_ana_ntp_qa(), and tut_ana_pid().

258 {
259  Cleanup();
260 
261  if ( n>=0 ) {
262  fEvtCount=n+1;
263  } else {
264  fEvtCount++;
265  }
266 
267  if ( fEvtCount>fChainEntries ) {
269  Info("PndAnalysis::GetEvent()","Maximum number of entries in the file chain reached: %i.",fEvtCount);
270  return 0;
271  }
272  fRootManager->ReadEvent ( fEvtCount-1 );
273 
274  //Printout
275  if(fVerbose>4)
276  {
277  std::cout
278  <<"-------->8-------->8-------->8-------->8-------->8-------->8-------->8-------->8"
279  <<"\n"
280  <<" No. - Name - Flag - PidArr - Trk Arr -Trk Arr2 - PID - Brem"
281  <<std::endl;
282  for (int i = 0; i < 6 ; i++) // 0-4 for PID hypothesis, 5 for fallback
283  {
284  std::cout
285  <<std::setw(5)<<i
286  <<std::setw(10)<<fPidHypoStr[i]
287  <<std::setw(10)<<fHypoFlagCharged[i]
288  <<std::setw(10)<<fChargedCands[i]
289  <<std::setw(10)<<fTracks[i]
290  <<std::setw(10)<<fTracks2[i]
291  <<std::setw(10)<<fChargedProbability[i]
292  <<std::setw(10)<<fBremCorr[i]
293  <<std::endl;
294  }
295  std::cout
296  <<"-------->8-------->8-------->8-------->8-------->8-------->8-------->8-------->8"
297  <<std::endl;
298  }
299 
301  BuildMcCands();
302 
303  if(fVerbose) Info("PndAnalysis::GetEvent()","Finished loading event fEvtCount=%i.",fEvtCount);
304  return fEvtCount;
305 }
std::array< TClonesArray *, 6 > fChargedProbability
Definition: PndAnalysis.h:103
Int_t i
Definition: run_full.C:25
Int_t fVerbose
Definition: PndAnalysis.h:94
int n
Int_t fEvtCount
Definition: PndAnalysis.h:90
std::array< TClonesArray *, 6 > fBremCorr
Definition: PndAnalysis.h:101
void BuildMcCands()
void ReadRecoCandidates()
void Cleanup()
TString fPidHypoStr[6]
Definition: PndAnalysis.h:119
std::array< TClonesArray *, 6 > fTracks
Definition: PndAnalysis.h:105
FairRootManager * fRootManager
Definition: PndAnalysis.h:87
Int_t fChainEntries
Definition: PndAnalysis.h:91
Bool_t fHypoFlagCharged[6]
Definition: PndAnalysis.h:121
std::array< TClonesArray *, 6 > fTracks2
Definition: PndAnalysis.h:106
std::array< TClonesArray *, 6 > fChargedCands
Definition: PndAnalysis.h:100
FairMCEventHeader * PndAnalysis::GetEventHeader ( )

Definition at line 307 of file PndAnalysis.cxx.

References fEventRead, fEvtCount, and fRootManager.

Referenced by newana_check_eta().

308 {
309  if ( !fEventRead ) {
310  fRootManager->ReadEvent ( fEvtCount-1 );
311  fEventRead=kTRUE;
312  }
313 
314  FairMCEventHeader* evthead = ( FairMCEventHeader* ) FairRootManager::Instance()->GetObject ( "MCEventHeader." );
315 
316  return evthead;
317 }
Int_t fEvtCount
Definition: PndAnalysis.h:90
FairRootManager * fRootManager
Definition: PndAnalysis.h:87
Bool_t fEventRead
Definition: PndAnalysis.h:92
void PndAnalysis::GetEventInTask ( )
FairTrackParP PndAnalysis::GetFirstPar ( RhoCandidate cand)

Definition at line 690 of file PndAnalysis.cxx.

References PndTrack::GetParamFirst(), GetTrack(), and track.

Referenced by PropagateToPlane(), PropagateToPoint(), PropagateToZAxis(), and ResetCandidate().

691 {
692  if ( !cand ) {
693  Error ( "GetFirstPar","Candidate not found: %p",cand );
694  FairTrackParP dummy;
695  return dummy;
696  }
697  PndTrack* track = GetTrack(cand);
698 
699  if ( !track ) {
700  Warning ( "GetFirstPar","Could not find track object " );
701  FairTrackParP dummy;
702  return dummy;
703  }
704 
705  FairTrackParP tStart = track->GetParamFirst();
706 
707  return tStart;
708 }
PndTrack * GetTrack(RhoCandidate *cand)
PndMCTrack * track
Definition: anaLmdCluster.C:89
FairTrackParP GetParamFirst()
Definition: PndTrack.h:49
Bool_t PndAnalysis::GetMcCandList ( RhoCandList l)
private

Definition at line 420 of file PndAnalysis.cxx.

References fabs(), fMcCands, fMcTracks, fVerbose, RhoCandList::GetLength(), PndMCTrack::GetMotherID(), PndMCTrack::GetSecondMotherID(), i, and RhoCandList::Put().

Referenced by BuildMcCands(), and FillList().

421 {
422  l.Clear();
423  // Put all candidates from the mctruth list to the candlist and set the mother-daughter relations
424  if ( !fMcCands ) return kFALSE;
425 
426  RhoCandidate* truth=0;
427  for (int i=0; i<fMcCands->GetEntriesFast(); i++)
428  {
429  // copy candidates via put
430  truth = (RhoCandidate*) fMcCands->At(i);
431  if(fVerbose>4) std::cout<<"PndAnalysis::GetMcCandList: mccand "<<i<<" :"<<truth<<" \t "<<*truth<<std::endl;
432  l.Put(truth);
433  }
434 
435  // now set genealogy inside the list
436  RhoCandidate* truthmother=0;
437  for (int k=0; k<l.GetLength(); k++)
438  {
439  // get mother track
440  PndMCTrack* part = (PndMCTrack*) fMcTracks->At(k);
441  Int_t mcMotherID = part->GetMotherID();
442  if(mcMotherID<0) mcMotherID=part->GetSecondMotherID();
443 
444  // SetMotherLink does the deep mother-daughter relation
445  if (mcMotherID<0) continue; // no mother there, go on...
446  if (mcMotherID>=l.GetLength()) continue; // something bad hapened to the indices
447 
448  // do the linking
449  truthmother = (RhoCandidate*) l[mcMotherID];
450  l[k]->SetMotherLink(truthmother, false);
451  }
452  // And now we have to rapair the charges, because delta electrons are inside the MC list, but not the inons
453  for (int k=0; k<l.GetLength(); k++)
454  {
455  TParticlePDG* ppdg = TDatabasePDG::Instance()->GetParticle(l[k]->PdgCode());
456  double charge=0.0;
457  if ( ppdg ) {
458  charge=ppdg->Charge();
459  } else if (fVerbose) {
460  cout <<"-W- CreateMcCandidate: strange PDG code:"<<l[k]->PdgCode() <<endl;
461  }
462  if ( fabs(charge) >2 ) {
463  charge/=3.;
464  }
465  l[k]->SetCharge(charge);
466  }
467 
468  return kTRUE;
469 }
TClonesArray * fMcCands
Definition: PndAnalysis.h:107
Int_t i
Definition: run_full.C:25
Int_t fVerbose
Definition: PndAnalysis.h:94
Int_t GetLength() const
Definition: RhoCandList.h:46
TClonesArray * fMcTracks
Definition: PndAnalysis.h:108
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
Int_t GetSecondMotherID() const
Definition: PndMCTrack.h:75
void Put(const RhoCandidate *, Int_t i=-1)
Definition: RhoCandList.cxx:77
Int_t GetMotherID() const
Definition: PndMCTrack.h:74
PndTrack * PndAnalysis::GetTrack ( RhoCandidate cand)

Definition at line 657 of file PndAnalysis.cxx.

References a, At, fHypoPdg, fTracks, RhoCandidate::GetRecoCandidate(), PndPidCandidate::GetTrackIndex(), RhoCandidate::PdgCode(), and track.

Referenced by GetFirstPar().

658 {
659  if ( !cand ) {
660  Error ( "GetTrack","Candidate not found: %p",cand );
661  return NULL;
662  }
663 
664  PndPidCandidate* pidCand = (PndPidCandidate*)cand->GetRecoCandidate();
665 
666  if ( !pidCand ) {
667  Error ( "GetTrack","PID Candidate not found: %p",pidCand );
668  return NULL;
669  }
670 
671  // TODO fallback should go away someday
672  int hypid=5; // default is the fallback -
673  for(int a=0; a<5; a++) {
674  if(cand->PdgCode()==fHypoPdg[a]) {
675  hypid=a;
676  break;
677  }
678  }
679 
680  PndTrack* track = ( PndTrack* ) fTracks[hypid]->At ( pidCand->GetTrackIndex() );
681 
682  if ( !track ) {
683  Warning ( "GetTrack","Could not find track object of index %d",pidCand->GetTrackIndex() );
684  return NULL;
685  }
686 
687  return track;
688 }
Int_t GetTrackIndex() const
Int_t fHypoPdg[6]
Definition: PndAnalysis.h:120
PndPidCandidate * GetRecoCandidate() const
Definition: RhoCandidate.h:376
Int_t a
Definition: anaLmdDigi.C:126
PndMCTrack * track
Definition: anaLmdCluster.C:89
std::array< TClonesArray *, 6 > fTracks
Definition: PndAnalysis.h:105
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
void PndAnalysis::Init ( )
private

Definition at line 88 of file PndAnalysis.cxx.

References fBremCorr, fBuildMcCands, fChainEntries, fChargedCands, fChargedPidName, fChargedProbability, fDefaultHypo, fHypoFlagCharged, fHypoPdg, fMcCands, fMcTracks, fNeutralCands, fPidCombiner, fPidHypoStr, fPidSelector, fRootManager, fTracks, fTracks2, fTracksName, fTracksName2, fVerbose, i, ReadTCA(), Reset(), and TString.

Referenced by PndAnalysis().

89 {
90  Reset();
91  fPidHypoStr[0] = "Electron";
92  fPidHypoStr[1] = "Muon";
93  fPidHypoStr[2] = "Pion";
94  fPidHypoStr[3] = "Kaon";
95  fPidHypoStr[4] = "Proton";
96  fPidHypoStr[5] = "";
97  fHypoPdg[0]=-11;
98  fHypoPdg[1]=-13;
99  fHypoPdg[2]=211;
100  fHypoPdg[3]=321;
101  fHypoPdg[4]=2212;
102  fHypoPdg[5]=0;
103 
104  fNeutralCands = ReadTCA ( "PidNeutralCand" );
105  //if ( !fNeutralCands ) { }
106  //fNeutralProbability = ReadTCA ( fNeutralPidName.Data()+fPidHypoStr[fDefaultHypo] );
107 
108  // List of branches to check by default
109  TString branchnames1[4]= {fTracksName,"SttMvdGemGenTrack","BarrelGenTrack","SttMvdGenTrack"};
110  TString branchnames2[4]= {fTracksName2,"FTSGenTrack","FtsIdealGenTrack","FTSTrkIdeal"};
111  for (int i = 0; i < 6 ; i++) // 0-4 for PID hypothesis, 5 for fallback
112  {
113  //read pidcand arrays
114  fTracks[i]=NULL; // initialize properly
115  fTracks2[i]=NULL; // initialize properly
116  fBremCorr[i]=NULL; // initialize properly
117  fChargedProbability[i]=NULL; // initialize properly
118  fChargedCands[i] = ReadTCA ( "PidChargedCand"+fPidHypoStr[i] );
119  if ( fChargedCands[i] ) {
120  fHypoFlagCharged[i] = true;
121  std::cout<< " #################### read PidChargedCand with special tracking hypothesis: "<<("PidChargedCand"+fPidHypoStr[i]).Data()<<" pointer "<<fChargedCands[i] <<std::endl;
122  } else {
123  fHypoFlagCharged[i] = false;
124  //fChargedCands[i] = ReadTCA ( "PidChargedCand" );
125  std::cout<< " #################### No PidChargedCand with "<<fPidHypoStr[i].Data()<<" tracking hypothesis" <<std::endl;
126  }
127 
128  // Read Bremsstrahling Corrections and PID values
129  if(fHypoFlagCharged[i]) {
130  fBremCorr[i] = ReadTCA( "BremCorrected4Mom"+fPidHypoStr[i] );
132  }
133 
134  // load barrel tracks
135  for(int k=0; k<4; k++) {
136  if(fHypoFlagCharged[i]) {
137  if(fVerbose>4) std::cout << "-I- PndAnalysis::Init(): br:"<<k<<" hyp:"<<i<<" Trying \""<<(branchnames1[k]+fPidHypoStr[i]).Data() <<"\" now.";
138  fTracks[i] = ReadTCA ( branchnames1[k]+fPidHypoStr[i] );
139  }
140  if ( fTracks[i] ) {
141  if(fVerbose>4) std::cout << " Succes reading tracking array \""<<(branchnames1[k]+fPidHypoStr[i]).Data() <<"\" with pointer "<<fTracks[i];
142  break;
143  }
144  }
145  if ( !fTracks[i] ) {
146  std::cout << "-W- PndAnalysis::Init(): No barrel track inpt array." << std::endl;
147  } else {
148  std::cout<<" printing track array:";
149  std::cout<<endl;
150  fTracks[i]->Print();
151  }
152 
153  // load forward tracks
154  for(int k=0; k<4; k++) {
155  if(fHypoFlagCharged[i]) {
156 
157  if(fVerbose>4) std::cout << "-I- PndAnalysis::Init(): Trying \""<<(branchnames2[k]+fPidHypoStr[i]).Data() <<"\" now.";
158  fTracks2[i] = ReadTCA ( branchnames2[k]+fPidHypoStr[i] );
159  }
160  if ( fTracks2[i] ) break;
161  }
162  if ( !fTracks2[i] ) {
163  std::cout << "-W- PndAnalysis::Init(): No forward track inpt array." << std::endl;
164  } else {
165  std::cout<<endl;
166  fTracks2[i]->Print();
167  }
168 
169  } // loop tracking hyp
170 
171  //Check if a list of pions exists. If not, set default hypo to something else
172  if (!fHypoFlagCharged[2]) {
173  if (fHypoFlagCharged[1]) {
174  fDefaultHypo=1;
175  std::cout<<"PndAnalysis::Init(): Default hypothesis is muons."<<std::endl;
176  }
177  else if (fHypoFlagCharged[0]) {
178  fDefaultHypo=0;
179  std::cout<<"PndAnalysis::Init(): Default hypothesis is electrons."<<std::endl;
180  }
181  else if (fHypoFlagCharged[3]) {
182  fDefaultHypo=3;
183  std::cout<<"PndAnalysis::Init(): Default hypothesis is Kaons."<<std::endl;
184  }
185  else if (fHypoFlagCharged[4]) {
186  fDefaultHypo=4;
187  std::cout<<"PndAnalysis::Init(): Default hypothesis is protons."<<std::endl;
188  }
189  else {
190  std::cout<<"PndAnalysis::Init(): No Multikalman input branches exist, do fallback."<<std::endl;
191  fDefaultHypo=5; // empty string in name arrays
192  }
193  } else {
194  std::cout<<"PndAnalysis::Init(): Default hypothesis is pions."<<std::endl;
195  }
196 
197  // -- MC Tracks
198  fBuildMcCands = false;
199 
200  fMcCands = 0;
201 
202  if(fVerbose>4) std::cout << "-I- PndAnalysis::Init(): Trying mc stack now." << std::endl;
203  fMcTracks = ( TClonesArray* ) fRootManager->GetObject ( "MCTrack" );
204 
205  if ( ! fMcTracks && fVerbose ) {
206  std::cout << "-W- PndAnalysis::Init(): No \"MCTrack\" array found. No MC info available." << std::endl;
207  } else {
208  fBuildMcCands = true;
209  fMcCands = new TClonesArray ( "RhoCandidate" );
210  // next line commented by KG, 07/2012
211  fRootManager->Register ( "PndMcTracks","PndMcTracksFolder", fMcCands, kFALSE );
212  }
213 
214  //fChainEntries = ( fRootManager->GetInChain() )->GetEntries();
215  fChainEntries = fRootManager->CheckMaxEventNo();
216 
217  //TODO default constructor here?
220 
221 }
std::array< TClonesArray *, 6 > fChargedProbability
Definition: PndAnalysis.h:103
Int_t fHypoPdg[6]
Definition: PndAnalysis.h:120
TClonesArray * ReadTCA(TString tcaname)
Definition: PndAnalysis.cxx:78
TClonesArray * fMcCands
Definition: PndAnalysis.h:107
Bool_t fBuildMcCands
Definition: PndAnalysis.h:93
Int_t i
Definition: run_full.C:25
Int_t fVerbose
Definition: PndAnalysis.h:94
PndAnaPidSelector * fPidSelector
Definition: PndAnalysis.h:88
Int_t fDefaultHypo
Flag to check which hypo lists exists //0-4 for trk hypothesis, 5 for fallback.
Definition: PndAnalysis.h:122
PndAnaPidCombiner * fPidCombiner
Definition: PndAnalysis.h:89
std::array< TClonesArray *, 6 > fBremCorr
Definition: PndAnalysis.h:101
TClonesArray * fMcTracks
Definition: PndAnalysis.h:108
TString fChargedPidName
Definition: PndAnalysis.h:114
void Reset()
Definition: PndAnalysis.h:37
TString fPidHypoStr[6]
Definition: PndAnalysis.h:119
TString fTracksName2
Definition: PndAnalysis.h:117
std::array< TClonesArray *, 6 > fTracks
Definition: PndAnalysis.h:105
FairRootManager * fRootManager
Definition: PndAnalysis.h:87
TString fTracksName
Definition: PndAnalysis.h:116
Int_t fChainEntries
Definition: PndAnalysis.h:91
Bool_t fHypoFlagCharged[6]
Definition: PndAnalysis.h:121
std::array< TClonesArray *, 6 > fTracks2
Definition: PndAnalysis.h:106
TClonesArray * fNeutralCands
Definition: PndAnalysis.h:102
std::array< TClonesArray *, 6 > fChargedCands
Definition: PndAnalysis.h:100
void PndAnalysis::McMatchAllowPhotos ( int  maxn = 1,
double  thresh = 0.05 
)
inline

Definition at line 62 of file PndAnalysis.h.

References fPhotosMax, and fPhotosThresh.

Referenced by PndAnaWithTrigger::Init(), and PndSoftTriggerTask::Init().

62 {fPhotosMax=maxn;fPhotosThresh=thresh;}
Double_t fPhotosThresh
Definition: PndAnalysis.h:96
Int_t fPhotosMax
Definition: PndAnalysis.h:95
Bool_t PndAnalysis::MctMatch ( RhoCandidate c,
RhoCandList mct,
Int_t  level = 2,
bool  verbose = false 
)
inlineprivate

Definition at line 83 of file PndAnalysis.h.

References MctMatch(), and verbose.

Referenced by MctMatch(), and McTruthMatch().

83 { return MctMatch(&c,mct,level,verbose); };
#define verbose
Bool_t MctMatch(RhoCandidate &c, RhoCandList &mct, Int_t level=2, bool verbose=false)
Definition: PndAnalysis.h:83
Bool_t PndAnalysis::MctMatch ( RhoCandidate c,
RhoCandList mct,
Int_t  level = 2,
bool  verbose = false 
)
private

Definition at line 948 of file PndAnalysis.cxx.

References RhoCandidate::Daughter(), RhoCandidate::E(), fPhotosMax, fPhotosThresh, RhoCandidate::GetMcTruth(), i, mct, MctMatch(), RhoCandidate::NDaughters(), RhoCandidate::PdgCode(), RhoCandidate::SetMcTruth(), RhoCandidate::TheMother(), and verbose.

949 {
950  Int_t nd = c->NDaughters();
951  Int_t pdg = c->PdgCode();
952  //Int_t nmct = mct.GetLength(); //[R.K. 01/2017] unused variable?
953 
954  if ( 0==nd ) { // final state particle
955  RhoCandidate* mccnd = c->GetMcTruth();
956  if ( !mccnd ) {
957  if(verbose) Info("PndMcTruthMatch::MctMatch","rejected final state by nonexistent mc truth pointer");
958  return false;
959  }
960  if ( mccnd->PdgCode() == pdg ) {
961  if(verbose) Info("PndMcTruthMatch::MctMatch","accepted final state by PDG code (pdg=%i)",pdg);
962  //if(verbose) std::cout<<*c<<std::endl;
963  return true;
964  } else {
965  if(verbose) Info("PndMcTruthMatch::MctMatch","rejected final state by PDG Code (pdg=%i|mcpdg=%i)",pdg, mccnd->PdgCode());
966  return false;
967  }
968  }
969 
970  // check recursively whether all daughter trees match
971  for ( Int_t i=0; i<nd; i++ ) {
972  if ( !MctMatch ( c->Daughter ( i ) , mct, level, verbose ) ) {
973  if(verbose) Info("PndMcTruthMatch::MctMatch","rejected composite (pdg=%i) by non-matching daughter: idau=%i",pdg,i);
974  return false;
975  }
976  }
977 
978  // ***
979  // *** MATCH LEVEL 0 reached: only PID of final state particles are matched
980  // ***
981  if ( 0==level ) {
982  return true;
983  }
984  //if(verbose)std::cout<<"going Level 1"<<std::endl;
985  // reset mc truth pointer
986  RhoCandidate* mccnd = c->GetMcTruth();
987  if(mccnd) {
988  if(verbose) Warning("PndMcTruthMatch::MctMatch","Existing MC truth found. Will reset it now.");
989  c->SetMcTruth(0);
990  //return false;
991  }
992 
993  // find this particle's truth in the mc decay tree
994  RhoCandidate* dauzero = c->Daughter(0);
995  if (!dauzero) {
996  if(verbose) Info("PndMcTruthMatch::MctMatch","rejected by not existing daughter zero");
997  return false;
998  }
999  RhoCandidate* mcdauzero = dauzero->GetMcTruth();
1000  if (!mcdauzero) {
1001  if(verbose) Info("PndMcTruthMatch::MctMatch","rejected by not existing MC truth of daughter zero");
1002  return false;
1003  }
1004  RhoCandidate* mcdauzeromother=mcdauzero->TheMother();
1005  if (!mcdauzeromother) {
1006  if(verbose) {
1007  Info("PndMcTruthMatch::MctMatch","rejected by not existing mother of MC truth of daughter zero");
1008  cout <<*mcdauzero<<endl;
1009  }
1010 
1011  return false;
1012  }
1013 
1014  //now check the tree structure:
1015 
1016  int ndaudiff = mcdauzeromother->NDaughters() - nd;
1017 
1018  // we still might accept if only photos photons are missing in the reco tree
1019  // if overall difference is small enough, we check further below what particles are missing
1020  if( ndaudiff<0 || ndaudiff>fPhotosMax )
1021  {
1022  if(verbose) Info("PndMcTruthMatch::MctMatch","rejected by differing daughter count: cand:%i mc:%i",c->NDaughters(),mcdauzeromother->NDaughters());
1023  return false;
1024  }
1025  // count daughter photons (pdg==22) from MC mother with E < photos_thresh
1026  int nphall = 0;
1027  if (ndaudiff>0)
1028  for (int idau=0; idau<mcdauzeromother->NDaughters(); ++idau)
1029  if (mcdauzeromother->Daughter(idau)->PdgCode()==22 && mcdauzeromother->Daughter(idau)->E()<fPhotosThresh) nphall++;
1030 
1031  // reco'd photons with E<photos_thresh
1032  int nphreco = 0;
1033  // now if all daughters MC-Mother is the same
1034  for(int idau=1; idau<nd; idau++) {
1035  // look if all daughters mc mothers are the same
1036  RhoCandidate* dau = c->Daughter(idau);
1037  if (!dau) {
1038  if(verbose) Info("PndMcTruthMatch::MctMatch","rejected by not existing daughter %i",idau);
1039  return false;
1040  }
1041  RhoCandidate* mcdau = dau->GetMcTruth();
1042  if (!mcdau) {
1043  if(verbose) Info("PndMcTruthMatch::MctMatch","rejected by not existing MC truth of daughter %i",idau);
1044  //if(verbose) std::cout<<*dau<<std::endl;
1045  return false;
1046  }
1047  RhoCandidate* mcdaumother=mcdau->TheMother();
1048  if (!mcdaumother) {
1049  if(verbose) Info("PndMcTruthMatch::MctMatch","rejected by not existing mother of MC truth of daughter %i",idau);
1050  return false;
1051  }
1052  if(mcdaumother!=mcdauzeromother) {
1053  if(verbose) Info("PndMcTruthMatch::MctMatch","rejected by mc mother of daughter %i(%p) is different to mc mother of daughter zero(%p) -> Tree does not match"
1054  ,idau,mcdaumother,mcdauzeromother);
1055  return false;
1056  }
1057 
1058  // daughter was correctly matched; now check for low energetic photon for photos accept
1059  if (ndaudiff>0 && mcdau->PdgCode()==22 && mcdau->E()<fPhotosThresh) nphreco++;
1060  }
1061  // difference in #phot<max allowed and has to be exactly the total number of particle difference
1062  if ( (nphall-nphreco)>fPhotosMax || (nphall-nphreco)!=ndaudiff )
1063  {
1064  if(verbose) Info("PndMcTruthMatch::MctMatch","rejected by differing daughter count not being photos photons: cand:%i mc:%i",c->NDaughters(),mcdauzeromother->NDaughters());
1065  return false;
1066  }
1067 
1068  // ***
1069  // *** MATCH LEVEL 1: PID of the leaves and tree topology are matched
1070  // ***
1071  if ( 1==level ) {
1072  if (verbose) Info("PndMcTruthMatch::MctMatch","accepted composite(pdg=%i) on match-level 1",pdg);
1073  c->SetMcTruth(mcdauzeromother);
1074  if (verbose) cout <<*c->GetMcTruth()<<endl;
1075  return true;
1076  }
1077  //if(verbose)std::cout<<"going Level 2"<<std::endl;
1078  // check whether all daughter's mother has correct PDG code
1079  if ( pdg != mcdauzeromother->PdgCode() ) {
1080  if(verbose) Info("PndMcTruthMatch::MctMatch","rejected by nonmatching pdg code in tree (pdgcode|mcpdgcode) (%i|%i)",pdg,mcdauzeromother->PdgCode());
1081  return false;
1082  }
1083  // ***
1084  // *** MATCH LEVEL 2: PID of leaves, tree topology and intermediate particle types are matched
1085  // ***
1086  if (verbose) Info("PndMcTruthMatch::MctMatch","accepted composite(pdg=%i) on match-level 2", pdg);
1087  c->SetMcTruth(mcdauzeromother);
1088  if (verbose) cout <<*c->GetMcTruth()<<endl;
1089  return true; // c's tree matches!
1090 }
Int_t i
Definition: run_full.C:25
#define verbose
Double_t fPhotosThresh
Definition: PndAnalysis.h:96
Bool_t MctMatch(RhoCandidate &c, RhoCandList &mct, Int_t level=2, bool verbose=false)
Definition: PndAnalysis.h:83
RhoCandidate * Daughter(Int_t n)
RhoCandidate * GetMcTruth() const
Definition: RhoCandidate.h:437
Double_t E() const
Definition: RhoCandidate.h:202
void SetMcTruth(RhoCandidate *mct)
Definition: RhoCandidate.h:436
Int_t NDaughters() const
Int_t fPhotosMax
Definition: PndAnalysis.h:95
PndMCTrack * mct
Definition: hist-t7.C:147
const RhoCandidate * TheMother() const
Definition: RhoCandidate.h:272
Bool_t PndAnalysis::McTruthMatch ( RhoCandidate cand,
Int_t  level = 2,
bool  verbose = false 
)
Int_t PndAnalysis::McTruthMatch ( RhoCandList list,
Int_t  level = 2,
bool  verbose = false 
)

Definition at line 937 of file PndAnalysis.cxx.

References fMcCandList, RhoCandList::GetLength(), and MctMatch().

938 {
939  Int_t ifound = 0;
940  for(int icand=0; icand<list.GetLength(); icand++) {
941  if( true == MctMatch(list[icand],fMcCandList,level,verbose) ) {
942  ifound++;
943  }
944  }
945  return ifound;
946 }
#define verbose
Int_t GetLength() const
Definition: RhoCandList.h:46
RhoCandList fMcCandList
Definition: PndAnalysis.h:112
Bool_t MctMatch(RhoCandidate &c, RhoCandList &mct, Int_t level=2, bool verbose=false)
Definition: PndAnalysis.h:83
Bool_t PndAnalysis::PropagateToIp ( RhoCandidate cand)

Definition at line 624 of file PndAnalysis.cxx.

References PropagateToPoint().

625 {
626  //Propagate from the tracks first parameter set to the POCA from (0,0,0)
627  TVector3 ip( 0.,0.,0. );
628  return PropagateToPoint ( cand, ip );
629 }
Bool_t PropagateToPoint(RhoCandidate *cand, TVector3 mypoint)
Bool_t PndAnalysis::PropagateToPlane ( RhoCandidate cand,
TVector3  origin,
TVector3  dj,
TVector3  dk 
)

Definition at line 647 of file PndAnalysis.cxx.

References GetFirstPar(), and Propagator().

648 {
649  //Propagate from the tracks first parameter set to a (detector) plane
650  //The candidate is updated but the track not touched
651  //Only the uncorrelated errors are propagated,
652  //TODO: implement a real cov matrix
653  FairTrackParP tStart = GetFirstPar(cand);
654  return Propagator ( 3,tStart,cand,origin,kFALSE,kFALSE,dj,dk );
655 }
FairTrackParP GetFirstPar(RhoCandidate *cand)
Bool_t Propagator(int mode, FairTrackParP &tStart, RhoCandidate *cand, TVector3 point=TVector3(0, 0, 0), Bool_t skipcov=kFALSE, Bool_t overwrite=kFALSE, TVector3 planej=TVector3(1, 0, 0), TVector3 planek=TVector3(0, 1, 0))
Bool_t PndAnalysis::PropagateToPoint ( RhoCandidate cand,
TVector3  mypoint 
)

Definition at line 637 of file PndAnalysis.cxx.

References GetFirstPar(), and Propagator().

Referenced by PropagateToIp().

638 {
639  //Propagate from the tracks first parameter set to the POCA from mypoint
640  //The candidate is updated but the track not touched
641  //Only the uncorrelated errors are propagated,
642  //TODO: implement a real cov matrix
643  FairTrackParP tStart = GetFirstPar(cand);
644  return Propagator ( 1,tStart,cand,mypoint );
645 }
FairTrackParP GetFirstPar(RhoCandidate *cand)
Bool_t Propagator(int mode, FairTrackParP &tStart, RhoCandidate *cand, TVector3 point=TVector3(0, 0, 0), Bool_t skipcov=kFALSE, Bool_t overwrite=kFALSE, TVector3 planej=TVector3(1, 0, 0), TVector3 planek=TVector3(0, 1, 0))
Bool_t PndAnalysis::PropagateToZAxis ( RhoCandidate cand)

Definition at line 631 of file PndAnalysis.cxx.

References GetFirstPar(), and Propagator().

632 {
633  FairTrackParP tStart = GetFirstPar(cand);
634  return Propagator ( 2,tStart,cand );
635 }
FairTrackParP GetFirstPar(RhoCandidate *cand)
Bool_t Propagator(int mode, FairTrackParP &tStart, RhoCandidate *cand, TVector3 point=TVector3(0, 0, 0), Bool_t skipcov=kFALSE, Bool_t overwrite=kFALSE, TVector3 planej=TVector3(1, 0, 0), TVector3 planek=TVector3(0, 1, 0))
Bool_t PndAnalysis::Propagator ( int  mode,
FairTrackParP &  tStart,
RhoCandidate cand,
TVector3  point = TVector3(0,0,0),
Bool_t  skipcov = kFALSE,
Bool_t  overwrite = kFALSE,
TVector3  planej = TVector3(1,0,0),
TVector3  planek = TVector3(0,1,0) 
)

Definition at line 750 of file PndAnalysis.cxx.

References Bool_t, cos(), Double_t, fVerbose, RhoCalculationTools::GetConverted7(), RhoCalculationTools::GetFitError(), jj, RhoCandidate::P4(), RhoCandidate::PdgCode(), pos, RhoCandidate::SetCov7(), RhoCandidate::SetP3(), RhoCandidate::SetPosition(), sqrt(), and vecdiff.

Referenced by PropagateToPlane(), PropagateToPoint(), and PropagateToZAxis().

751 {
752  //Propagate from the tracks first parameter set to the POCA from mypoint
753  //The candidate is updated but the track not touched
754  //Only the uncorrelated errors are propagated,
755  //TODO: implement a real cov matrix
756 
757  Bool_t rc = kFALSE;
758  FairGeanePro* geaneProp = new FairGeanePro();
759  Int_t pdgcode = cand->PdgCode();
760 
761  if ( fVerbose>0 ) {
762  cout<<"Try mode "<<mode<<" with pdgCode "<<pdgcode<<endl;
763  }
764 
765  if ( fVerbose>2 ) {
766  std::cout<<"Start Params are:"<<std::endl;
767  tStart.Print();
768  }
769 
770  Double_t startCov[6][6];
771 
772  tStart.GetMARSCov ( startCov );
773  TMatrixD errst ( 6,6 );
774 
775  for ( Int_t ii=0; ii<6; ii++ ) for ( Int_t jj=0; jj<6; jj++ ) {
776  errst[ii][jj]=startCov[ii][jj];
777  }
778 
779  if ( fVerbose>2 ) {
780  std::cout<<"Start MARS cov: ";
781  errst.Print();
782  }
783 
784  if ( 1==mode ) { // to point
785  geaneProp->BackTrackToVertex(); //set where to propagate
786  geaneProp->SetPoint ( mypoint );
787  } else if ( 2==mode ) { // to line
788  geaneProp->PropagateToPCA ( 2, -1 );// track back to z axis
789  TVector3 ex1 ( 0.,0.,-50. ); // virtual wire of arbitrarily chosen size
790  TVector3 ex2 ( 0.,0.,100. );
791  geaneProp->SetWire ( ex1,ex2 );
792  } else if ( 3==mode ) { // to plane
793  geaneProp->PropagateToPlane(mypoint,planej,planek);
794  } else {
795  Error ( "Propagator()","Use mode 1 (to a TVector3) or mode 2 (to z axis) or mode 3 (to plane). (Mode=%i)",mode );
796  return kFALSE;
797  }
798 
799  if(skipcov) geaneProp->PropagateOnlyParameters();
800 
801  FairTrackParH* myResult=0;
802  // now we propagate
803  if(mode==3) {
804  FairTrackParP* tResult = new FairTrackParP();
805  rc = geaneProp->Propagate ( &tStart, tResult,pdgcode );
806  myResult = new FairTrackParH(*tResult);
807  } else {
808  myResult = new FairTrackParH();
809  FairTrackParH* myStart = new FairTrackParH ( tStart );
810  rc = geaneProp->Propagate ( myStart, myResult,pdgcode );
811  }
812 
813  if ( !rc ) {
814  if ( fVerbose>0 ) {
815  Warning ( "Propagator()","Geane propagation failed" );
816  }
817  return kFALSE;
818  }
819 
820  int ierr=0;
821  TVector3 di = myResult->GetMomentum();
822  di.SetMag ( 1. );
823  TVector3 dj = di.Orthogonal();
824  TVector3 dk = di.Cross ( dj );
825  FairTrackParP* myParab = new FairTrackParP ( myResult, dj, dk, ierr );
826 
827  TVector3 pos( myResult->GetX(),myResult->GetY(),myResult->GetZ() ); // I want to be sure...
828  cand->SetPosition( pos );
829  cand->SetP3( myResult->GetMomentum() ); // implicitly uses the candidates mass to set P4
830 
831  //printout for checks
832  if ( fVerbose>1 ) {
833  TVector3 vecdiff=tStart.GetPosition() - myResult->GetPosition();
834  std::cout<<"position start :";
835  tStart.GetPosition().Print();
836  std::cout<<"position ip :";
837  myResult->GetPosition().Print();
838  std::cout<<"position difference:";
839  vecdiff.Print();
840  vecdiff=tStart.GetMomentum()-myResult->GetMomentum();
841  std::cout<<"momentum start :";
842  tStart.GetMomentum().Print();
843  std::cout<<"momentum ip :";
844  myResult->GetMomentum().Print();
845  std::cout<<"momentum difference:";
846  vecdiff.Print();
847  }
848 
849  if(kFALSE==skipcov) {
850  Double_t globalCov[6][6];
851  myParab->GetMARSCov ( globalCov );
852  TMatrixD err ( 6,6 );
853 
854  for ( Int_t ii=0; ii<6; ii++ ) for ( Int_t jj=0; jj<6; jj++ ) {
855  err[ii][jj]=globalCov[ii][jj];
856  }
857 
858  if ( fVerbose>2 ) {
859  std::cout<<"MARS cov (px,py,pz,E,x,y,z): ";
860  err.Print();
861  }
862 
863  TLorentzVector lv = cand->P4();
864 
866 
867  if ( fVerbose>2 ) {
868  std::cout<<"covPosMom (x,y,z,px,py,pz,E): ";
869  covPosMom.Print();
870  }
871 
872  cand->SetCov7 ( covPosMom );
873  }
874  // rc = RhoCalculationTools::FillHelixParams(cand,skipcov);
875  // if (!rc) {Warning("Propagator()","P7toHelix failed"); return kFALSE;}
876 
877  if ( fVerbose>2 ) {
878  std::cout<<" ::::::::::: Printout in PndAnalysis::Propagator() ::::::::::: "<<std::endl;
879 
880  //std::cout<<"Start Params:"<<std::endl;
881  //myStart->Print();
882 
883  std::cout<<"SC system params:"
884  <<"\nq/p = "<<myResult->GetQp()
885  <<"\nLambda = "<<myResult->GetLambda()
886  <<"\nPhi = "<<myResult->GetPhi()
887  <<"\nX_sc = "<<myResult->GetX_sc()
888  <<"\nY_sc = "<<myResult->GetY_sc()
889  <<"\nZ_sc = "<<myResult->GetZ_sc()
890  <<std::endl;
891 
892  std::cout<<"some values:"
893  <<"\n Z0 ?= z_sc / cos(lambda) = "<< myResult->GetZ_sc() / cos ( myResult->GetLambda() )
894  <<"\n Z0 ?= sqrt(x_sc^2+z_sc^2) = "<<sqrt ( myResult->GetX_sc() *myResult->GetX_sc() +myResult->GetZ_sc() *myResult->GetZ_sc() )
895  <<std::endl;
896  }
897 
898  // COMMENT:
899  // When taking the Trackparams in the POCA to the z-axis, the SC system from GEANE matches the common helix params easier, i.e:
900  // D0 = y_sc and Z0 = sqrt(x_sc^2 + z_sc^2) = z_sc*tan(Lambda)
901 
902  if(overwrite) {
903  if ( fVerbose>1 ) {
904  Info ( "Propagator ","overwriting start parameter state with result");
905  }
906  tStart.SetTrackPar(myParab->GetV(), myParab->GetW(),
907  myParab->GetTV(), myParab->GetTW(),
908  myParab->GetQp(), myParab->GetCov(),
909  myParab->GetOrigin(),
910  myParab->GetIVer(),
911  myParab->GetJVer(),
912  myParab->GetKVer(),
913  myParab->GetSPU()
914  );
915  }
916 
917  if ( fVerbose>1 ) {
918  Info ( "Propagator ","Succsess=%i",rc );
919  }
920 
921  return kTRUE;
922 }
TVector3 pos
friend F32vec4 cos(const F32vec4 &a)
Definition: P4_F32vec4.h:112
Int_t fVerbose
Definition: PndAnalysis.h:94
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
void SetPosition(const TVector3 &pos)
Int_t mode
Definition: autocutx.C:47
void SetP3(const TVector3 &p3)
Double_t
TLorentzVector P4() const
Definition: RhoCandidate.h:195
static TMatrixD GetConverted7(TMatrixD)
static TMatrixDSym GetFitError(TMatrixDSym)
TVector3 vecdiff
Definition: anaLmdReco.C:77
void SetCov7(const TMatrixD &cov7)
TMatrixT< double > TMatrixD
Definition: PndLmdDim.h:52
void PndAnalysis::ReadRecoCandidates ( )
private

Definition at line 480 of file PndAnalysis.cxx.

References RhoCandList::Add(), At, RhoCandidate::Charge(), RhoCandList::Cleanup(), Cleanup(), fChargedCandList, fChargedCands, fHypoFlagCharged, fHypoPdg, fNeutralCandList, fNeutralCands, fVerbose, h, i, RhoCandidate::SetTrackNumber(), and RhoCandidate::SetType().

Referenced by GetEvent(), and GetEventInTask().

481 {
482  UInt_t _uid=0;
483  for(int i=0; i<6; i++) fChargedCandList[i].Cleanup();
485 
486  // CHARGED
487  int nEntries=0;
488  for(int h=0; h<6; h++) {
489  if ( fChargedCands[h] ) {
490  nEntries=fChargedCands[h]->GetEntriesFast();
491  break;
492  }
493  }
494  if(0==nEntries&&fVerbose) Warning("PndAnalysis::ReadRecoCandidates()","No filled charged reco array found.");
495 
496  for ( Int_t i2=0; i2<nEntries; i2++ )
497  {
498  _uid++; // uid will start from (n_neutrals + 1) should be uniquie over all five pid hypotheses
499  for(int i=0; i<6; i++)
500  {
501  if (!fHypoFlagCharged[i]) continue;
502  PndPidCandidate* mic = ( PndPidCandidate* ) fChargedCands[i]->At ( i2 );
503  RhoCandidate tc ( *mic,_uid );
504  tc.SetTrackNumber ( i2 ); // Index for PID arrays
505  if(i<5){tc.SetType( tc.Charge()*fHypoPdg[i] );}
506  fChargedCandList[i].Add ( &tc );
507  if(fVerbose>4) cout<<"Added Candidate to list i="<<i<<" with i2="<<i2<<" making the list to size "<<fChargedCandList[i].GetLength()<<endl;
508  }
509  }
510 
511  // NEUTRALS
512  if ( fNeutralCands )
513  {
514  for ( Int_t i1=0; i1<fNeutralCands->GetEntriesFast(); i1++ )
515  {
516  _uid++; // uid will start from 1
517  PndPidCandidate* mic = ( PndPidCandidate* ) fNeutralCands->At ( i1 );
518 
519  RhoCandidate tc ( *mic,_uid );
520 
521  tc.SetTrackNumber ( -1 );//(i1);
522  tc.SetType( 22 ); // default PDG code for neutrals is gamma = 22
523  fNeutralCandList.Add(&tc);
524  }
525  } else {
526  if(fVerbose) Warning("PndAnalysis::ReadRecoCandidates()","No neutral reco array found.");
527  }
528 
529  return;
530 }
Int_t fHypoPdg[6]
Definition: PndAnalysis.h:120
void Add(const RhoCandidate *c)
Definition: RhoCandList.h:49
void Cleanup()
Definition: RhoCandList.cxx:62
std::array< RhoCandList, 6 > fChargedCandList
Definition: PndAnalysis.h:110
Int_t i
Definition: run_full.C:25
Int_t fVerbose
Definition: PndAnalysis.h:94
void Cleanup()
RhoCandList fNeutralCandList
Definition: PndAnalysis.h:111
Bool_t fHypoFlagCharged[6]
Definition: PndAnalysis.h:121
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
TClonesArray * fNeutralCands
Definition: PndAnalysis.h:102
std::array< TClonesArray *, 6 > fChargedCands
Definition: PndAnalysis.h:100
TClonesArray * PndAnalysis::ReadTCA ( TString  tcaname)
private

Definition at line 78 of file PndAnalysis.cxx.

References fRootManager, and fVerbose.

Referenced by Init().

79 {
80  TClonesArray* tca = ( TClonesArray* ) fRootManager->GetObject ( tcaname.Data() );
81  if ( fVerbose>4 && ! tca ) { // the info is printed by the RootManager already.
82  std::cout << "-I- PndAnalysis::ReadTCA(): No "<<tcaname.Data() <<" array found." << std::endl;
83  }
84 
85  return tca;
86 }
Int_t fVerbose
Definition: PndAnalysis.h:94
FairRootManager * fRootManager
Definition: PndAnalysis.h:87
void PndAnalysis::Reset ( )
inline

Definition at line 37 of file PndAnalysis.h.

References Rewind().

Referenced by Init().

37 { Rewind(); }
Bool_t PndAnalysis::ResetCandidate ( RhoCandidate cand)

Definition at line 722 of file PndAnalysis.cxx.

References Double_t, fVerbose, RhoCalculationTools::GetConverted7(), GetFirstPar(), RhoCalculationTools::GetFitError(), jj, RhoCandidate::P4(), RhoCandidate::SetCov7(), RhoCandidate::SetP3(), and RhoCandidate::SetPosition().

Referenced by ResetDaughters().

723 {
724  FairTrackParP firstpar = GetFirstPar ( cand );
725  Double_t globalCov[6][6];
726  firstpar.GetMARSCov ( globalCov );
727  TMatrixD err ( 6,6 );
728 
729  for ( Int_t ii=0; ii<6; ii++ ) for ( Int_t jj=0; jj<6; jj++ ) {
730  err[ii][jj]=globalCov[ii][jj];
731  }
732 
733  if(fVerbose>3){ std::cout<<"MARS cov (px,py,pz,E,x,y,z): ";err.Print();}
734  TLorentzVector lv = cand->P4();
735 
737 
738  if(fVerbose>3){ std::cout<<"covPosMom (x,y,z,px,py,pz,E): ";covPosMom.Print();}
739 
740  cand->SetPosition ( firstpar.GetPosition() );
741 
742  cand->SetP3 ( firstpar.GetMomentum() ); // implicitly uses the candidates mass to set P4
743 
744  cand->SetCov7 ( covPosMom );
745 
746  return kTRUE;
747 }
FairTrackParP GetFirstPar(RhoCandidate *cand)
Int_t fVerbose
Definition: PndAnalysis.h:94
void SetPosition(const TVector3 &pos)
void SetP3(const TVector3 &p3)
Double_t
TLorentzVector P4() const
Definition: RhoCandidate.h:195
static TMatrixD GetConverted7(TMatrixD)
static TMatrixDSym GetFitError(TMatrixDSym)
void SetCov7(const TMatrixD &cov7)
TMatrixT< double > TMatrixD
Definition: PndLmdDim.h:52
Bool_t PndAnalysis::ResetDaughters ( RhoCandidate cand)

Definition at line 710 of file PndAnalysis.cxx.

References a, Bool_t, RhoCandidate::Daughter(), RhoCandidate::NDaughters(), ResetCandidate(), and mrfdata_8b_error::success.

711 {
712  Bool_t success=kTRUE;
713 
714  for ( Int_t daug =0; daug<cand->NDaughters(); daug++ ) {
715  RhoCandidate* a=cand->Daughter ( daug );
716  success = success && ResetCandidate ( a );
717  }
718 
719  return success;
720 }
Bool_t ResetCandidate(RhoCandidate *cand)
RhoCandidate * Daughter(Int_t n)
Int_t a
Definition: anaLmdDigi.C:126
Int_t NDaughters() const
void PndAnalysis::Rewind ( )

Definition at line 224 of file PndAnalysis.cxx.

References fEvtCount.

Referenced by Reset().

225 {
226  fEvtCount=0;
227 }
Int_t fEvtCount
Definition: PndAnalysis.h:90
void PndAnalysis::SetVerbose ( Int_t  level)
inline

Definition at line 43 of file PndAnalysis.h.

References fVerbose.

43 {fVerbose = level;}
Int_t fVerbose
Definition: PndAnalysis.h:94

Member Data Documentation

std::array<TClonesArray*,6> PndAnalysis::fBremCorr
private

Definition at line 101 of file PndAnalysis.h.

Referenced by FillList(), GetEvent(), and Init().

Bool_t PndAnalysis::fBuildMcCands
private

Definition at line 93 of file PndAnalysis.h.

Referenced by BuildMcCands(), and Init().

Int_t PndAnalysis::fChainEntries
private

Definition at line 91 of file PndAnalysis.h.

Referenced by GetEvent(), and Init().

std::array<RhoCandList,6> PndAnalysis::fChargedCandList
private

Definition at line 110 of file PndAnalysis.h.

Referenced by BuildMcCands(), Cleanup(), FillList(), and ReadRecoCandidates().

std::array<TClonesArray*,6> PndAnalysis::fChargedCands
private

Definition at line 100 of file PndAnalysis.h.

Referenced by GetEvent(), Init(), and ReadRecoCandidates().

TString PndAnalysis::fChargedPidName
private

Definition at line 114 of file PndAnalysis.h.

Referenced by Init().

std::array<TClonesArray*,6> PndAnalysis::fChargedProbability
private

Definition at line 103 of file PndAnalysis.h.

Referenced by GetEvent(), and Init().

Int_t PndAnalysis::fDefaultHypo
private

Flag to check which hypo lists exists //0-4 for trk hypothesis, 5 for fallback.

Definition at line 122 of file PndAnalysis.h.

Referenced by FillList(), and Init().

Bool_t PndAnalysis::fEventRead
private

Definition at line 92 of file PndAnalysis.h.

Referenced by GetEventHeader().

Int_t PndAnalysis::fEvtCount
private

Definition at line 90 of file PndAnalysis.h.

Referenced by GetEvent(), GetEventHeader(), and Rewind().

Bool_t PndAnalysis::fHypoFlagCharged[6]
private

Definition at line 121 of file PndAnalysis.h.

Referenced by FillList(), GetEvent(), Init(), and ReadRecoCandidates().

Int_t PndAnalysis::fHypoPdg[6]
private

Definition at line 120 of file PndAnalysis.h.

Referenced by GetTrack(), Init(), and ReadRecoCandidates().

RhoCandList PndAnalysis::fMcCandList
private

Definition at line 112 of file PndAnalysis.h.

Referenced by BuildMcCands(), Cleanup(), and McTruthMatch().

TClonesArray* PndAnalysis::fMcCands
private

Definition at line 107 of file PndAnalysis.h.

Referenced by BuildMcCands(), GetMcCandList(), and Init().

std::map<int,RhoCandidate*> PndAnalysis::fMcPresenceMap
private

Definition at line 98 of file PndAnalysis.h.

TClonesArray* PndAnalysis::fMcTracks
private

Definition at line 108 of file PndAnalysis.h.

Referenced by BuildMcCands(), GetMcCandList(), and Init().

RhoCandList PndAnalysis::fNeutralCandList
private

Definition at line 111 of file PndAnalysis.h.

Referenced by BuildMcCands(), Cleanup(), FillList(), and ReadRecoCandidates().

TClonesArray* PndAnalysis::fNeutralCands
private

Definition at line 102 of file PndAnalysis.h.

Referenced by Init(), and ReadRecoCandidates().

TString PndAnalysis::fNeutralPidName
private

Definition at line 115 of file PndAnalysis.h.

Int_t PndAnalysis::fPhotosMax
private

Definition at line 95 of file PndAnalysis.h.

Referenced by McMatchAllowPhotos(), and MctMatch().

Double_t PndAnalysis::fPhotosThresh
private

Definition at line 96 of file PndAnalysis.h.

Referenced by McMatchAllowPhotos(), and MctMatch().

PndAnaPidCombiner* PndAnalysis::fPidCombiner
private

Definition at line 89 of file PndAnalysis.h.

Referenced by FillList(), and Init().

TString PndAnalysis::fPidHypoStr[6]
private

Definition at line 119 of file PndAnalysis.h.

Referenced by GetEvent(), and Init().

PndAnaPidSelector* PndAnalysis::fPidSelector
private

Definition at line 88 of file PndAnalysis.h.

Referenced by FillList(), Init(), and ~PndAnalysis().

FairRootManager* PndAnalysis::fRootManager
private

Definition at line 87 of file PndAnalysis.h.

Referenced by GetEntries(), GetEvent(), GetEventHeader(), Init(), PndAnalysis(), and ReadTCA().

std::array<TClonesArray*,6> PndAnalysis::fTracks
private

Definition at line 105 of file PndAnalysis.h.

Referenced by GetEvent(), GetTrack(), and Init().

std::array<TClonesArray*,6> PndAnalysis::fTracks2
private

Definition at line 106 of file PndAnalysis.h.

Referenced by GetEvent(), and Init().

TString PndAnalysis::fTracksName
private

Definition at line 116 of file PndAnalysis.h.

Referenced by Init().

TString PndAnalysis::fTracksName2
private

Definition at line 117 of file PndAnalysis.h.

Referenced by Init().

Int_t PndAnalysis::fVerbose
private

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