]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG2/SPECTRA/AliAnalysisCentralCutESD.cxx
14643d09d378dc4a0020cece8d4de6a32b8c5e33
[u/mrichter/AliRoot.git] / PWG2 / SPECTRA / AliAnalysisCentralCutESD.cxx
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
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 // ------------------------------------------------
22
23 #include <TF1.h>
24 #include <TFile.h>
25
26 #include "AliAnalysisCentralCutESD.h"
27 #include "AliESDtrack.h"
28
29
30 class TObject;
31 class TParticle;
32
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");
64             return;
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;
86
87 }
88
89
90 Bool_t AliAnalysisCentralCutESD::IsSelected(TObject *obj){
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");
97                 return kFALSE;
98     }
99
100     if(fReqCharge){
101                 if(!IsCharged(track)) return kFALSE;
102     } 
103
104     if(fReqPID){
105                 if(!IsA(track, fPartType)) return kFALSE;
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
132 Bool_t AliAnalysisCentralCutESD::IsA(AliESDtrack *track, PDG_t fPartType){
133 // Determines the type of the particle
134     Int_t charge;
135
136         if(fPartType < 0){
137                 charge = -1;
138         }
139         else{
140                 charge = 1;
141         }
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");
180                 return kFALSE;
181     }
182
183     if((AliPID::ParticleCode(partType)) != fPartType){
184                 return kFALSE;
185     }
186
187         if(track->Charge() != charge) return kFALSE;
188
189     return kTRUE;
190
191 }
192
193 Bool_t AliAnalysisCentralCutESD::IsCharged(AliESDtrack* const track) const{
194
195     if(track->Charge() == 0) return kFALSE;
196
197     return kTRUE;
198
199 }