]>
Commit | Line | Data |
---|---|---|
bde49c8a | 1 | /************************************************************************* |
2 | * Copyright(c) 1998-2008, 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 | ||
410ff8cc | 16 | // ----------------------------------------------- |
17 | // particle level cuts for azimuthal isotropic | |
18 | // expansion in highly central collisions analysis | |
19 | // author: Cristian Andrei | |
20 | // acristian@niham.nipne.ro | |
21 | // ------------------------------------------------ | |
bde49c8a | 22 | |
8a993eac | 23 | #include <TF1.h> |
410ff8cc | 24 | #include <TFile.h> |
bde49c8a | 25 | |
410ff8cc | 26 | #include "AliAnalysisCentralCutESD.h" |
bde49c8a | 27 | #include "AliESDtrack.h" |
28 | ||
410ff8cc | 29 | |
30 | class TObject; | |
31 | class TParticle; | |
32 | ||
bde49c8a | 33 | |
34 | //____________________________________________________________________ | |
35 | ClassImp(AliAnalysisCentralCutESD) | |
36 | ||
37 | //____________________________________________________________________ | |
38 | AliAnalysisCentralCutESD::AliAnalysisCentralCutESD(const Char_t* name, const Char_t* title) | |
39 | :AliAnalysisCuts(name,title) | |
40 | ,fReqPID(kFALSE) | |
41 | ,fReqCharge(kFALSE) | |
42 | ,fPartType(kPiPlus) | |
43 | ,fPIDtype("Custom") | |
44 | ,fPriorsFunc(kFALSE) | |
45 | ,fPartPriors() | |
46 | ,fElectronFunction(0) | |
47 | ,fMuonFunction(0) | |
48 | ,fPionFunction(0) | |
49 | ,fKaonFunction(0) | |
50 | ,fProtonFunction(0) | |
51 | { | |
52 | // Constructor | |
53 | // Initialize the priors | |
54 | fPartPriors[0] = 0.01; | |
55 | fPartPriors[1] = 0.01; | |
56 | fPartPriors[2] = 0.85; | |
57 | fPartPriors[3] = 0.1; | |
58 | fPartPriors[4] = 0.05; | |
59 | ||
60 | if(fPriorsFunc){ | |
61 | TFile *f = TFile::Open("$ALICE_ROOT/PWG2/data/PriorProbabilities.root "); | |
62 | if(!f){ | |
63 | printf("Can't open PWG2 prior probabilities file!\n Exiting ...\n"); | |
8a993eac | 64 | return; |
bde49c8a | 65 | } |
66 | fElectronFunction = (TF1 *)f->Get("fitElectrons"); | |
67 | fMuonFunction = (TF1 *)f->Get("fitMuons"); | |
68 | fPionFunction = (TF1 *)f->Get("fitPions"); | |
69 | fKaonFunction = (TF1 *)f->Get("fitKaons"); | |
70 | fProtonFunction = (TF1 *)f->Get("fitProtons"); | |
71 | } | |
72 | ||
73 | } | |
74 | ||
75 | AliAnalysisCentralCutESD::~AliAnalysisCentralCutESD() { | |
76 | // Destructor | |
77 | // Delete the created priors | |
78 | ||
79 | if(fPartPriors) delete [] fPartPriors; | |
80 | ||
81 | if(fElectronFunction) delete fElectronFunction; | |
82 | if(fMuonFunction) delete fMuonFunction; | |
83 | if(fPionFunction) delete fPionFunction; | |
84 | if(fKaonFunction) delete fKaonFunction; | |
85 | if(fProtonFunction) delete fProtonFunction; | |
410ff8cc | 86 | |
bde49c8a | 87 | } |
88 | ||
89 | ||
9eeae5d5 | 90 | Bool_t AliAnalysisCentralCutESD::IsSelected(TObject *obj){ |
bde49c8a | 91 | // Checks if a particle passes the cuts |
92 | ||
93 | AliESDtrack *track = dynamic_cast<AliESDtrack *>(obj); | |
94 | ||
95 | if(!track){ | |
96 | printf("AliAnalysisCentralCutESD:IsSelected ->Can't get track!\n"); | |
8a993eac | 97 | return kFALSE; |
bde49c8a | 98 | } |
99 | ||
100 | if(fReqCharge){ | |
101 | if(!IsCharged(track)) return kFALSE; | |
102 | } | |
103 | ||
104 | if(fReqPID){ | |
8a993eac | 105 | if(!IsA(track, fPartType)) return kFALSE; |
bde49c8a | 106 | } |
107 | ||
108 | return kTRUE; | |
109 | } | |
110 | ||
111 | ||
112 | Double_t AliAnalysisCentralCutESD::GetPriors(Int_t i, Double_t p) { | |
113 | //Return the a priori probs | |
114 | ||
115 | Double_t priors=0; | |
116 | if(fPriorsFunc) { | |
117 | if(i == 0) priors = fElectronFunction->Eval(p); | |
118 | if(i == 1) priors = fMuonFunction->Eval(p); | |
119 | if(i == 2) priors = fPionFunction->Eval(p); | |
120 | if(i == 3) priors = fKaonFunction->Eval(p); | |
121 | if(i == 4) priors = fProtonFunction->Eval(p); | |
122 | } | |
123 | else { | |
124 | priors = fPartPriors[i]; | |
125 | } | |
126 | ||
127 | return priors; | |
128 | } | |
129 | ||
130 | ||
131 | ||
011e988c | 132 | Bool_t AliAnalysisCentralCutESD::IsA(AliESDtrack *track, PDG_t reqPartType){ |
bde49c8a | 133 | // Determines the type of the particle |
0fb1f0cf | 134 | Int_t charge; |
135 | ||
011e988c | 136 | if(reqPartType < 0){ |
0fb1f0cf | 137 | charge = -1; |
138 | } | |
139 | else{ | |
140 | charge = 1; | |
141 | } | |
bde49c8a | 142 | |
143 | Double_t probability[5]; | |
144 | Double_t w[5]; | |
145 | ||
146 | Long64_t partType = 0; | |
147 | ||
148 | Double_t p = track->P(); | |
149 | ||
150 | track->GetESDpid(probability); | |
151 | ||
152 | Double_t s = 0.0; | |
153 | ||
154 | ||
155 | for(Int_t i = 0; i < AliPID::kSPECIES; i++){ | |
156 | s += probability[i]*GetPriors(i,p); | |
157 | } | |
158 | ||
159 | if(!s < 0.000001) { | |
160 | for(Int_t i = 0; i < AliPID::kSPECIES; i++){ | |
161 | w[i] = probability[i]*GetPriors(i,p)/s; | |
162 | } | |
163 | } | |
164 | ||
165 | ||
166 | if(fPIDtype.Contains("Bayesian")) { | |
167 | partType = TMath::LocMax(AliPID::kSPECIES,w); | |
168 | } | |
169 | ||
170 | else if(fPIDtype.Contains("Custom")){ | |
171 | for(Int_t i=0;i<AliPID::kSPECIES;i++) { | |
172 | if(w[i]>0.9){ | |
173 | partType = i; | |
174 | } | |
175 | } | |
176 | } | |
177 | ||
178 | else{ | |
179 | printf("Unknown PID method!\n"); | |
8a993eac | 180 | return kFALSE; |
bde49c8a | 181 | } |
182 | ||
011e988c | 183 | if((AliPID::ParticleCode(partType)) != reqPartType){ |
bde49c8a | 184 | return kFALSE; |
185 | } | |
186 | ||
0fb1f0cf | 187 | if(track->Charge() != charge) return kFALSE; |
bde49c8a | 188 | |
189 | return kTRUE; | |
190 | ||
191 | } | |
192 | ||
193 | Bool_t AliAnalysisCentralCutESD::IsCharged(AliESDtrack* const track) const{ | |
0fb1f0cf | 194 | |
bde49c8a | 195 | if(track->Charge() == 0) return kFALSE; |
0fb1f0cf | 196 | |
bde49c8a | 197 | return kTRUE; |
198 | ||
199 | } |