]>
Commit | Line | Data |
---|---|---|
b0f03c34 | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
14 | **************************************************************************/ | |
15 | ||
16 | //----------------------------------------------------------------- | |
17 | // Implementation of the TRD PID class | |
bd50219c | 18 | // Assigns the electron and pion liklihoods for each ESD track. |
bd50219c | 19 | // The function MakePID(AliESD *event) calculates the probability |
20 | // of having dedx and the probability of having timbin at a given | |
21 | // momentum (mom) and particle type k (0 for e) and (2 for pi) | |
22 | // from the precalculated timbin distributions. | |
23 | // Prashant Shukla <shukla@pi0.physi.uni-heidelberg.de> | |
b0f03c34 | 24 | //----------------------------------------------------------------- |
25 | ||
26 | #include "AliTRDpidESD.h" | |
27 | #include "AliESD.h" | |
28 | #include "AliESDtrack.h" | |
cc7cef99 | 29 | #include "AliTRDcalibDB.h" |
30 | #include "AliTRDCalPIDLQ.h" | |
b0f03c34 | 31 | |
32 | ClassImp(AliTRDpidESD) | |
33 | ||
34 | //_________________________________________________________________________ | |
35 | AliTRDpidESD::AliTRDpidESD(Double_t *param) | |
36 | { | |
37 | // | |
38 | // The main constructor | |
39 | // | |
40 | fMIP=param[0]; // MIP signal | |
41 | fRes=param[1]; // relative resolution | |
42 | fRange=param[2]; // PID "range" (in sigmas) | |
43 | } | |
44 | ||
eab5961e | 45 | Double_t AliTRDpidESD::Bethe(Double_t bg) |
46 | { | |
b0f03c34 | 47 | // |
eab5961e | 48 | // Parametrization of the Bethe-Bloch-curve |
49 | // The parametrization is the same as for the TPC and is taken from Lehrhaus. | |
b0f03c34 | 50 | // |
eab5961e | 51 | |
52 | // This parameters have been adjusted to averaged values from GEANT | |
53 | const Double_t kP1 = 7.17960e-02; | |
54 | const Double_t kP2 = 8.54196; | |
55 | const Double_t kP3 = 1.38065e-06; | |
56 | const Double_t kP4 = 5.30972; | |
57 | const Double_t kP5 = 2.83798; | |
58 | ||
59 | // This parameters have been adjusted to Xe-data found in: | |
60 | // Allison & Cobb, Ann. Rev. Nucl. Sci. (1980), 30, 253 | |
61 | //const Double_t kP1 = 0.76176E-1; | |
62 | //const Double_t kP2 = 10.632; | |
63 | //const Double_t kP3 = 3.17983E-6; | |
64 | //const Double_t kP4 = 1.8631; | |
65 | //const Double_t kP5 = 1.9479; | |
66 | ||
67 | // Lower cutoff of the Bethe-Bloch-curve to limit step sizes | |
68 | const Double_t kBgMin = 0.8; | |
69 | const Double_t kBBMax = 6.83298; | |
70 | //const Double_t kBgMin = 0.6; | |
71 | //const Double_t kBBMax = 17.2809; | |
72 | //const Double_t kBgMin = 0.4; | |
73 | //const Double_t kBBMax = 82.0; | |
74 | ||
75 | if (bg > kBgMin) { | |
76 | Double_t yy = bg / TMath::Sqrt(1. + bg*bg); | |
77 | Double_t aa = TMath::Power(yy,kP4); | |
78 | Double_t bb = TMath::Power((1./bg),kP5); | |
79 | bb = TMath::Log(kP3 + bb); | |
80 | return ((kP2 - aa - bb)*kP1 / aa); | |
81 | } | |
82 | else { | |
83 | return kBBMax; | |
84 | } | |
85 | ||
b0f03c34 | 86 | } |
87 | ||
88 | //_________________________________________________________________________ | |
89 | Int_t AliTRDpidESD::MakePID(AliESD *event) | |
bd50219c | 90 | { |
91 | // | |
92 | // This function calculates the "detector response" PID probabilities | |
93 | // | |
cc7cef99 | 94 | |
95 | AliTRDcalibDB* calibration = AliTRDcalibDB::Instance(); | |
96 | if (!calibration) | |
97 | return -1; | |
98 | ||
99 | // The class AliTRDCalPIDLQ contains precalculated prob dis. | |
63a700c6 | 100 | const AliTRDCalPIDLQ *pd = calibration->GetPIDLQObject(); |
1a567dff | 101 | if (!pd) return -1; |
defc9040 | 102 | |
103 | // Example to get mean for particle 2 (pi) and momentum number 4 (2 GeV) | |
104 | // printf("%.2f \n", pd->GetMean(2, 4)); | |
105 | // Example of use of Copy Constructor | |
cc7cef99 | 106 | // AliTRDCalPIDLQ *pd1 = new AliTRDCalPIDLQ(*pd); |
bd50219c | 107 | |
108 | Int_t ntrk=event->GetNumberOfTracks(); | |
109 | for (Int_t i=0; i<ntrk; i++) { | |
110 | AliESDtrack *t=event->GetTrack(i); | |
111 | if ((t->GetStatus()&AliESDtrack::kTRDin)==0) | |
1642e650 | 112 | if ((t->GetStatus()&AliESDtrack::kTRDout)==0) |
113 | if ((t->GetStatus()&AliESDtrack::kTRDrefit)==0) continue; | |
114 | if(t->GetTRDsignal()==0) continue; | |
bd50219c | 115 | // Int_t ns=AliESDtrack::kSPECIES; |
116 | Int_t ns=AliPID::kSPECIES; | |
117 | Double_t p[10]; | |
118 | Double_t mom=t->GetP(); | |
eee41b89 | 119 | Double_t probTotal=0.0; |
bd50219c | 120 | for (Int_t j=0; j<ns; j++) { |
121 | p[j]=1.; | |
122 | for (Int_t ilayer=0; ilayer <6; ilayer++) { | |
123 | Double_t dedx=t->GetTRDsignals(ilayer); | |
124 | Int_t timbin=t->GetTRDTimBin(ilayer); | |
eee41b89 | 125 | p[j]*= pd->GetProbability(j,mom,dedx); |
126 | p[j]*= pd->GetProbabilityT(j,mom,timbin); | |
127 | p[j]*= 100; | |
bd50219c | 128 | } // loop over layers |
eee41b89 | 129 | probTotal+=p[j]; |
bd50219c | 130 | } //loop over particle species |
5f8ccb35 | 131 | // printf(" %f %d %f %f %f \n", mom, timbin, p[0], p[1], p[2]); |
b0f03c34 | 132 | for (Int_t j=0; j<ns; j++) { |
eee41b89 | 133 | if(probTotal) p[j]/= probTotal; |
134 | else p[j]=1.0; | |
5f8ccb35 | 135 | // p[j]=1.; |
eee41b89 | 136 | } //loop over particle species |
b0f03c34 | 137 | t->SetTRDpid(p); |
eee41b89 | 138 | } //loop over tracks |
b0f03c34 | 139 | return 0; |
140 | } |