FairRoot/PandaRoot
PndPidRichAssociatorTask.cxx
Go to the documentation of this file.
2 #include "PndPidCandidate.h"
3 #include "PndPidProbability.h"
4 #include "FairRootManager.h"
5 #include "TMath.h"
6 #include "TF1.h"
7 #include "Riostream.h"
8 #include <cmath>
9 
10 //___________________________________________________________
12  //
13  FairRootManager *fManager =FairRootManager::Instance();
14  fManager->Write();
15 }
16 
17 //___________________________________________________________
19  //---
20  fPidChargedProb = new TClonesArray("PndPidProbability");
22 }
23 
24 //___________________________________________________________
25 PndPidRichAssociatorTask::PndPidRichAssociatorTask(const char *name, const char *title):FairTask(name)
26 {
27  //---
28  fPidChargedProb = new TClonesArray("PndPidProbability");
30  SetTitle(title);
31 }
32 
33 //___________________________________________________________
35 
36  std::cout << "InitStatus PndPidRichAssociatorTask::Init()" << std::endl;
37 
38  FairRootManager *fManager =FairRootManager::Instance();
39 
40  fPidChargedCand = (TClonesArray *)fManager->GetObject("PidChargedCand"+fTrackBranchNamePidHypo);
41  if ( ! fPidChargedCand) {
42  std::cout << "-I- PndPidRichAssociatorTask::Init: No PndPidCandidate array PidChargedCand there!" << std::endl;
43  return kERROR;
44  }
45 
46  Register();
47 
48  std::cout << "-I- PndPidRichAssociatorTask::Init: Success!" << std::endl;
49 
50  return kSUCCESS;
51 }
52 
53 //______________________________________________________
55  //--
56 }
57 //______________________________________________________
59  if (fPidChargedProb->GetEntriesFast() != 0) fPidChargedProb->Clear();
60  if(fVerbose>1) std::cout << "-I- Start PndPidRichAssociatorTask. "<<std::endl;
61 
62  // Get the Candidates
63  for(Int_t i=0; i<fPidChargedCand->GetEntriesFast(); i++)
64  {
66  TClonesArray& pidRef = *fPidChargedProb;
67  PndPidProbability* prob = new(pidRef[i]) PndPidProbability();// initializes with zeros
68  prob->SetIndex(i);
69  if (pidcand->GetRichIndex()==-1) continue;
70  DoPidMatch(pidcand,prob);
71  }
72 
73 }
74 
76 {
77  Float_t sigma = pidcand->GetRichThetaCErr();
79  // electron
80  {
81  Float_t mass = 0.0005;
82  prob->SetElectronPdf(GetPdf(pidcand->GetRichThetaC(),pidcand->GetMomentum().Mag(),mass, sigma));
83  }
84 
85  // muon
86  {
87  Float_t mass = 0.106;
88  prob->SetMuonPdf(GetPdf(pidcand->GetRichThetaC(),pidcand->GetMomentum().Mag(),mass, sigma));
89  }
90 
91  // pion
92  {
93  Float_t mass = 0.140;
94  prob->SetPionPdf(GetPdf(pidcand->GetRichThetaC(),pidcand->GetMomentum().Mag(),mass, sigma));
95  }
96 
97  // kaon
98  {
99  Float_t mass = 0.494;
100  prob->SetKaonPdf(GetPdf(pidcand->GetRichThetaC(),pidcand->GetMomentum().Mag(),mass, sigma));
101  }
102 
103  // proton
104  {
105  Float_t mass = 0.938;
106  prob->SetProtonPdf(GetPdf(pidcand->GetRichThetaC(),pidcand->GetMomentum().Mag(),mass, sigma));
107  }
108 }
109 
111 {
112  Double_t beta = mom / TMath::Sqrt(mom*mom + mass*mass);
113  if ( (beta>0.) )
114  {
115  Double_t center = thetaC;
116  TF1 *gausPdf = new TF1("gausPdf","gausn",0,1);
117  gausPdf->SetParameter(0,1);
118  gausPdf->SetParameter(1,center);
119  gausPdf->SetParameter(2,sigma);
120  Double_t val = gausPdf->Eval(beta);
121  delete gausPdf;
122  return val;
123  }
124  else
125  {
126  // FIXME: Don't write Zeros to that pdf!
127  return 0.;
128  }
129 }
130 
131 //_________________________________________________________________
133  //---
134  FairRootManager::Instance()->
135  Register("PidAlgoRich"+fTrackBranchNamePidHypo,"Pid", fPidChargedProb, kTRUE);
136 }
137 
138 //_________________________________________________________________
140 }
141 
142 //_________________________________________________________________
144  //---
145 }
146 
147 
Float_t GetRichThetaCErr() const
Int_t GetRichIndex() const
int fVerbose
Definition: poormantracks.C:24
Int_t i
Definition: run_full.C:25
void SetPionPdf(Double_t val)
Double_t val[nBoxes][nFEBox]
Definition: createCalib.C:11
static T Sqrt(const T &x)
Definition: PndCAMath.h:37
void SetKaonPdf(Double_t val)
Double_t sigma[nsteps]
Definition: dedx_bands.C:65
Double_t mom
Definition: plot_dirc.C:14
Float_t GetRichThetaC() const
TString fTrackBranchNamePidHypo
PndPidProbability TCA for charged particles.
virtual void Exec(Option_t *option)
void SetElectronPdf(Double_t val)
void SetMuonPdf(Double_t val)
h_MC_angle SetTitle("MC truth: opening angle of #pi^{0}")
Double_t
TClonesArray * fPidChargedProb
PndPidCandidate TCA for charged particles.
Double_t GetPdf(Double_t thetaC, Double_t mom, Double_t mass, Double_t sigma)
TString name
void DoPidMatch(PndPidCandidate *pidcand, PndPidProbability *prob)
void SetProtonPdf(Double_t val)
ClassImp(PndAnaContFact)
TVector3 GetMomentum() const
Double_t thetaC
Definition: plot_dirc.C:16
void SetIndex(Int_t idx)