]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGDQ/dielectron/AliDielectronPID.cxx
pdf figures to compile with pdflatex
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / AliDielectronPID.cxx
CommitLineData
8df8e382 1/*************************************************************************
2* Copyright(c) 1998-2009, 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// Dielectron PID //
18// //
19// //
20/*
21Detailed description
22
23
24*/
25// //
26///////////////////////////////////////////////////////////////////////////
27
28#include <TMath.h>
29#include <TF1.h>
48609e3d 30#include <TGraph.h>
8df8e382 31
164bfb53 32#include <AliVTrack.h>
5720c765 33#include <AliVCluster.h>
8df8e382 34#include <AliLog.h>
ffbede40 35#include <AliExternalTrackParam.h>
5720c765 36#include <AliPIDResponse.h>
6d5dea7c 37#include <AliTRDPIDResponse.h>
5720c765 38#include <AliESDtrack.h> //!!!!! Remove once Eta correction is treated in the tender
0c09cae4 39#include <AliAODTrack.h>
40#include <AliAODPid.h>
8df8e382 41
42#include "AliDielectronVarManager.h"
43
44#include "AliDielectronPID.h"
45
46ClassImp(AliDielectronPID)
47
48609e3d 48TGraph *AliDielectronPID::fgFitCorr=0x0;
49Double_t AliDielectronPID::fgCorr=0.0;
d327d9cd 50Double_t AliDielectronPID::fgCorrdEdx=1.0;
5720c765 51TF1 *AliDielectronPID::fgFunEtaCorr=0x0;
d327d9cd 52TGraph *AliDielectronPID::fgdEdxRunCorr=0x0;
48609e3d 53
8df8e382 54AliDielectronPID::AliDielectronPID() :
55 AliAnalysisCuts(),
56 fNcuts(0),
5720c765 57 fPIDResponse(0x0)
8df8e382 58{
59 //
60 // Default Constructor
61 //
62 for (Int_t icut=0; icut<kNmaxPID; ++icut){
63 fDetType[icut]=kTPC;
64 fPartType[icut]=AliPID::kPion;
65 fNsigmaLow[icut]=0;
66 fNsigmaUp[icut]=0;
5720c765 67 fmin[icut]=0;
68 fmax[icut]=0;
8df8e382 69 fExclude[icut]=kFALSE;
70 fFunUpperCut[icut]=0x0;
71 fFunLowerCut[icut]=0x0;
61d106d3 72 fRequirePIDbit[icut]=0;
5720c765 73 fActiveCuts[icut]=-1;
88204efa 74 fSigmaFunLow[icut]=0;
75 fSigmaFunUp[icut]=0;
76 fFunSigma[icut]=0x0;
8df8e382 77 }
78}
79
80//______________________________________________
81AliDielectronPID::AliDielectronPID(const char* name, const char* title) :
82 AliAnalysisCuts(name, title),
83 fNcuts(0),
5720c765 84 fPIDResponse(0x0)
8df8e382 85{
86 //
87 // Named Constructor
88 //
89 for (Int_t icut=0; icut<kNmaxPID; ++icut){
90 fDetType[icut]=kTPC;
91 fPartType[icut]=AliPID::kPion;
92 fNsigmaLow[icut]=0;
93 fNsigmaUp[icut]=0;
5720c765 94 fmin[icut]=0;
95 fmax[icut]=0;
8df8e382 96 fExclude[icut]=kFALSE;
97 fFunUpperCut[icut]=0x0;
98 fFunLowerCut[icut]=0x0;
61d106d3 99 fRequirePIDbit[icut]=0;
5720c765 100 fActiveCuts[icut]=0;
88204efa 101 fSigmaFunLow[icut]=0;
102 fSigmaFunUp[icut]=0;
103 fFunSigma[icut]=0x0;
8df8e382 104 }
105}
106
107//______________________________________________
108AliDielectronPID::~AliDielectronPID()
109{
110 //
111 // Default Destructor
112 //
113}
114
115//______________________________________________
116void AliDielectronPID::AddCut(DetType det, AliPID::EParticleType type, Double_t nSigmaLow, Double_t nSigmaUp/*=-99999.*/,
5720c765 117 Double_t min/*=0*/, Double_t max/*=0*/, Bool_t exclude/*=kFALSE*/,
118 UInt_t pidBitType/*=AliDielectronPID::kRequire*/, Int_t var/*=-1*/)
8df8e382 119{
120 //
121 // Add a pid nsigma cut
5720c765 122 // use response of detector 'det' in the range ['min'] to ['max'] for var
123 // use a sigma band between 'nSigmaLow' and 'nSigmaUp'
8df8e382 124 // if nSigmaUp==-99999. then nSigmaLow will be uesd as a symmetric band +- nSigmaLow
125 // specify whether to 'exclude' the given band
126 //
127
45b2b1b8 128 if (fNcuts>=kNmaxPID){
8df8e382 129 AliError(Form("only %d pid cut ranges allowed",kNmaxPID));
45b2b1b8 130 return;
8df8e382 131 }
132 if (TMath::Abs(nSigmaUp+99999.)<1e-20){
133 nSigmaUp=TMath::Abs(nSigmaLow);
134 nSigmaLow=-1.*nSigmaUp;
135 }
136 fDetType[fNcuts]=det;
137 fPartType[fNcuts]=type;
138 fNsigmaLow[fNcuts]=nSigmaLow;
139 fNsigmaUp[fNcuts]=nSigmaUp;
5720c765 140 fmin[fNcuts]=min;
141 fmax[fNcuts]=max;
8df8e382 142 fExclude[fNcuts]=exclude;
61d106d3 143 fRequirePIDbit[fNcuts]=pidBitType;
5720c765 144 fActiveCuts[fNcuts]=(var==-1 ? AliDielectronVarManager::kP : var);
145
fd6ebd85 146 AliDebug(1,Form("Add PID cut %d: sigma [% .1f,% .1f] \t cut [% .1f,% .f] \t var %d->%s \n",
147 fNcuts,nSigmaLow,nSigmaUp,min,max,fActiveCuts[fNcuts],AliDielectronVarManager::GetValueName(fActiveCuts[fNcuts])));
8df8e382 148
5720c765 149 ++fNcuts;
150
8df8e382 151}
152
153//______________________________________________
154void AliDielectronPID::AddCut(DetType det, AliPID::EParticleType type, Double_t nSigmaLow, TF1 * const funUp,
5720c765 155 Double_t min/*=0*/, Double_t max/*=0*/, Bool_t exclude/*=kFALSE*/,
156 UInt_t pidBitType/*=AliDielectronPID::kRequire*/, Int_t var/*=-1*/)
8df8e382 157{
158 //
159 // cut using a TF1 as upper cut
160 //
161 if (funUp==0x0){
162 AliError("A valid function is required for the upper cut. Not adding the cut!");
163 return;
164 }
165 fFunUpperCut[fNcuts]=funUp;
5720c765 166 AddCut(det,type,nSigmaLow,0.,min,max,exclude,pidBitType,var);
8df8e382 167}
168
169//______________________________________________
170void AliDielectronPID::AddCut(DetType det, AliPID::EParticleType type, TF1 * const funLow, Double_t nSigmaUp,
5720c765 171 Double_t min/*=0*/, Double_t max/*=0*/, Bool_t exclude/*=kFALSE*/,
172 UInt_t pidBitType/*=AliDielectronPID::kRequire*/, Int_t var/*=-1*/)
8df8e382 173{
174 //
175 // cut using a TF1 as lower cut
176 //
177 if (funLow==0x0){
178 AliError("A valid function is required for the lower cut. Not adding the cut!");
179 return;
180 }
181 fFunLowerCut[fNcuts]=funLow;
5720c765 182 AddCut(det,type,0.,nSigmaUp,min,max,exclude,pidBitType,var);
8df8e382 183}
184
185//______________________________________________
186void AliDielectronPID::AddCut(DetType det, AliPID::EParticleType type, TF1 * const funLow, TF1 * const funUp,
5720c765 187 Double_t min/*=0*/, Double_t max/*=0*/, Bool_t exclude/*=kFALSE*/,
188 UInt_t pidBitType/*=AliDielectronPID::kRequire*/, Int_t var/*=-1*/)
8df8e382 189{
190 //
191 // cut using a TF1 as lower and upper cut
192 //
193 if ( (funUp==0x0) || (funLow==0x0) ){
194 AliError("A valid function is required for upper and lower cut. Not adding the cut!");
195 return;
196 }
197 fFunUpperCut[fNcuts]=funUp;
198 fFunLowerCut[fNcuts]=funLow;
5720c765 199 AddCut(det,type,0.,0.,min,max,exclude,pidBitType,var);
8df8e382 200}
201
88204efa 202//______________________________________________
203void AliDielectronPID::AddCut(DetType det, AliPID::EParticleType type, Double_t nSigmaLow, Double_t nSigmaUp,
204 Double_t min, Double_t max, Bool_t exclude,
205 UInt_t pidBitType, TF1 * const funSigma)
206{
207 //
208 // cut using a TF1 as lower cut
209 //
210 if (funSigma==0x0){
211 AliError("A valid function is required for the sigma cut. Not adding the cut!");
212 return;
213 }
214 fFunSigma[fNcuts]=funSigma;
215 fSigmaFunLow[fNcuts]=min;
216 fSigmaFunUp[fNcuts]=max;
217
218 AddCut(det,type,nSigmaLow,nSigmaUp,0,0,exclude,pidBitType,-1);
219}
220
8df8e382 221//______________________________________________
222Bool_t AliDielectronPID::IsSelected(TObject* track)
223{
224 //
225 // perform PID cuts
226 //
227
228 //loop over all cuts
164bfb53 229 AliVTrack *part=static_cast<AliVTrack*>(track);
5720c765 230 AliESDtrack *esdTrack=0x0;
0c09cae4 231 AliAODTrack *aodTrack=0x0;
5720c765 232 Double_t origdEdx=-1;
8df8e382 233
5720c765 234 // apply ETa correction, remove once this is in the tender
0c09cae4 235 if( (part->IsA() == AliESDtrack::Class()) ){
5720c765 236 esdTrack=static_cast<AliESDtrack*>(part);
237 origdEdx=esdTrack->GetTPCsignal();
d327d9cd 238 esdTrack->SetTPCsignal(origdEdx/GetEtaCorr(esdTrack)/fgCorrdEdx,esdTrack->GetTPCsignalSigma(),esdTrack->GetTPCsignalN());
0c09cae4 239 } else if ( (part->IsA() == AliAODTrack::Class()) ){
240 aodTrack=static_cast<AliAODTrack*>(track);
241 AliAODPid *pid=const_cast<AliAODPid*>(aodTrack->GetDetPid());
242 origdEdx=pid->GetTPCsignal();
243 pid->SetTPCsignal(origdEdx/GetEtaCorr(aodTrack)/fgCorrdEdx);
5720c765 244 }
5720c765 245
246 //Fill values
247 Double_t values[AliDielectronVarManager::kNMaxValues];
248 AliDielectronVarManager::Fill(track,values);
8df8e382 249
5720c765 250 Bool_t selected=kFALSE;
251 fPIDResponse=AliDielectronVarManager::GetPIDResponse();
252 for (UChar_t icut=0; icut<fNcuts; ++icut){
253 Double_t min=fmin[icut];
254 Double_t max=fmax[icut];
255 Double_t val=values[fActiveCuts[icut]];
256
257 // test var range. In case min==max do not cut
258 if ( (TMath::Abs(min-max)>1e-20) && (val<min || val>=max) ) continue;
88204efa 259
260
261 // check if fFunSigma is set, then check if 'part' is in sigma range of the function
262 if(fFunSigma[icut]){
263 val= fPIDResponse->NumberOfSigmasTPC(part, fPartType[icut]);
264 if (fPartType[icut]==AliPID::kElectron){
265 val-=fgCorr;
266 }
267 min= fFunSigma[icut]->Eval(part->GetTPCmomentum())+fSigmaFunLow[icut];
268 max= fFunSigma[icut]->Eval(part->GetTPCmomentum())+fSigmaFunUp[icut];
269 if(val<min || val>=max) continue;
270 }
271
8df8e382 272 switch (fDetType[icut]){
273 case kITS:
274 selected = IsSelectedITS(part,icut);
275 break;
276 case kTPC:
277 selected = IsSelectedTPC(part,icut);
278 break;
279 case kTRD:
280 selected = IsSelectedTRD(part,icut);
281 break;
5720c765 282 case kTRDeleEff:
283 selected = IsSelectedTRDeleEff(part,icut);
284 break;
6d5dea7c 285 case kTRDeleEff2D:
286 selected = IsSelectedTRDeleEff(part,icut,AliTRDPIDResponse::kLQ2D);
287 break;
8df8e382 288 case kTOF:
289 selected = IsSelectedTOF(part,icut);
290 break;
5720c765 291 case kEMCAL:
292 selected = IsSelectedEMCAL(part,icut);
293 break;
294 }
295 if (!selected) {
296 if (esdTrack) esdTrack->SetTPCsignal(origdEdx,esdTrack->GetTPCsignalSigma(),esdTrack->GetTPCsignalN());
0c09cae4 297 else if (aodTrack){
298 AliAODPid *pid=const_cast<AliAODPid*>(aodTrack->GetDetPid());
299 pid->SetTPCsignal(origdEdx);
300 }
5720c765 301
302 return kFALSE;
8df8e382 303 }
8df8e382 304 }
305
5720c765 306 if (esdTrack) esdTrack->SetTPCsignal(origdEdx,esdTrack->GetTPCsignalSigma(),esdTrack->GetTPCsignalN());
0c09cae4 307 else if (aodTrack){
308 AliAODPid *pid=const_cast<AliAODPid*>(aodTrack->GetDetPid());
309 pid->SetTPCsignal(origdEdx);
310 }
8df8e382 311 return selected;
312}
313
314//______________________________________________
ffbede40 315Bool_t AliDielectronPID::IsSelectedITS(AliVTrack * const part, Int_t icut)
8df8e382 316{
317 //
318 // ITS part of the PID check
319 // Don't accept the track if there was no pid bit set
320 //
8df8e382 321
5720c765 322 if (fRequirePIDbit[icut]==AliDielectronPID::kRequire&&!(part->GetStatus()&AliVTrack::kITSpid)) return kFALSE;
323 if (fRequirePIDbit[icut]==AliDielectronPID::kIfAvailable&&!(part->GetStatus()&AliVTrack::kITSpid)) return kTRUE;
ffbede40 324
325 Double_t mom=part->P();
164bfb53 326
5720c765 327 Float_t numberOfSigmas=fPIDResponse->NumberOfSigmasITS(part, fPartType[icut]);
ffbede40 328
329 // test if we are supposed to use a function for the cut
330 if (fFunUpperCut[icut]) fNsigmaUp[icut] =fFunUpperCut[icut]->Eval(mom);
331 if (fFunLowerCut[icut]) fNsigmaLow[icut]=fFunLowerCut[icut]->Eval(mom);
332
8df8e382 333 Bool_t selected=((numberOfSigmas>=fNsigmaLow[icut])&&(numberOfSigmas<=fNsigmaUp[icut]))^fExclude[icut];
334 return selected;
335}
336
337//______________________________________________
ffbede40 338Bool_t AliDielectronPID::IsSelectedTPC(AliVTrack * const part, Int_t icut)
8df8e382 339{
340 //
341 // TPC part of the PID check
342 // Don't accept the track if there was no pid bit set
343 //
5720c765 344 if (fRequirePIDbit[icut]==AliDielectronPID::kRequire&&!(part->GetStatus()&AliVTrack::kTPCpid)) return kFALSE;
345 if (fRequirePIDbit[icut]==AliDielectronPID::kIfAvailable&&!(part->GetStatus()&AliVTrack::kTPCpid)) return kTRUE;
48609e3d 346
5720c765 347 Double_t mom=part->GetTPCmomentum();
ffbede40 348
5720c765 349 Float_t numberOfSigmas=fPIDResponse->NumberOfSigmasTPC(part, fPartType[icut]);
350
2a14a7b1 351 if (fPartType[icut]==AliPID::kElectron){
352 numberOfSigmas-=fgCorr;
8df8e382 353 }
ffbede40 354
355 // test if we are supposed to use a function for the cut
356 if (fFunUpperCut[icut]) fNsigmaUp[icut] =fFunUpperCut[icut]->Eval(mom);
357 if (fFunLowerCut[icut]) fNsigmaLow[icut]=fFunLowerCut[icut]->Eval(mom);
358
8df8e382 359 Bool_t selected=((numberOfSigmas>=fNsigmaLow[icut])&&(numberOfSigmas<=fNsigmaUp[icut]))^fExclude[icut];
360 return selected;
361}
362
363//______________________________________________
5720c765 364Bool_t AliDielectronPID::IsSelectedTRD(AliVTrack * const part, Int_t icut)
8df8e382 365{
366 //
367 // TRD part of the pid check
5720c765 368 // the TRD checks on the probabilities.
369 //
370
371 if (fRequirePIDbit[icut]==AliDielectronPID::kRequire&&!(part->GetStatus()&AliVTrack::kTRDpid)) return kFALSE;
372 if (fRequirePIDbit[icut]==AliDielectronPID::kIfAvailable&&!(part->GetStatus()&AliVTrack::kTRDpid)) return kTRUE;
373 if (fRequirePIDbit[icut]==AliDielectronPID::kIfAvailable && (part->GetTRDntrackletsPID()<4)) return kTRUE;
374
375 Double_t p[AliPID::kSPECIES]={0.};
376 fPIDResponse->ComputeTRDProbability(part,AliPID::kSPECIES,p);
377 Float_t particleProb=p[fPartType[icut]];
378
379 Bool_t selected=((particleProb>=fNsigmaLow[icut])&&(particleProb<=fNsigmaUp[icut]))^fExclude[icut];
380 return selected;
381}
382
383//______________________________________________
6d5dea7c 384Bool_t AliDielectronPID::IsSelectedTRDeleEff(AliVTrack * const part, Int_t icut, AliTRDPIDResponse::ETRDPIDMethod PIDmethod)
5720c765 385{
8df8e382 386 //
5720c765 387 // TRD part of the pid check using electron efficiency requirement
388 // in this case the upper limit as well as the particle specie is ignored
389 // and the lower limit regarded as the requested electron efficiency
390 //
391
392 if (fRequirePIDbit[icut]==AliDielectronPID::kRequire&&!(part->GetStatus()&AliVTrack::kTRDpid)) return kFALSE;
393 if (fRequirePIDbit[icut]==AliDielectronPID::kIfAvailable&&!(part->GetStatus()&AliVTrack::kTRDpid)) return kTRUE;
394
6d5dea7c 395 Double_t centrality = -1.;
396 if(part->IsA() == AliESDtrack::Class())
397 centrality=(const_cast<AliESDEvent*>( (static_cast<const AliESDtrack*>(part))->GetESDEvent()) )->GetCentrality()->GetCentralityPercentile("V0M");
398 if(part->IsA() == AliAODTrack::Class())
399 centrality=(const_cast<AliAODEvent*>( (static_cast<const AliAODTrack*>(part))->GetAODEvent()) )->GetCentrality()->GetCentralityPercentile("V0M");
400
401 Bool_t selected=fPIDResponse->IdentifiedAsElectronTRD(part,fNsigmaLow[icut], centrality, PIDmethod)^fExclude[icut];
5720c765 402 return selected;
8df8e382 403}
404
405//______________________________________________
ffbede40 406Bool_t AliDielectronPID::IsSelectedTOF(AliVTrack * const part, Int_t icut)
8df8e382 407{
408 //
409 // TOF part of the PID check
410 // Don't accept the track if there was no pid bit set
411 //
8df8e382 412
5720c765 413 if (fRequirePIDbit[icut]==AliDielectronPID::kRequire&&!(part->GetStatus()&AliVTrack::kTOFpid)) return kFALSE;
414 if (fRequirePIDbit[icut]==AliDielectronPID::kIfAvailable&&!(part->GetStatus()&AliVTrack::kTOFpid)) return kTRUE;
415
416 Float_t numberOfSigmas=fPIDResponse->NumberOfSigmasTOF(part, fPartType[icut]);
8df8e382 417
418 Bool_t selected=((numberOfSigmas>=fNsigmaLow[icut])&&(numberOfSigmas<=fNsigmaUp[icut]))^fExclude[icut];
419 return selected;
420}
421
5720c765 422//______________________________________________
423Bool_t AliDielectronPID::IsSelectedEMCAL(AliVTrack * const part, Int_t icut)
424{
425 //
426 // emcal pid selecttion
427 //
428
429 //TODO: correct way to check for emcal pid?
430 Float_t numberOfSigmas=fPIDResponse->NumberOfSigmasEMCAL(part, fPartType[icut]);
431
432 Bool_t hasPID=numberOfSigmas>-998.;
433
434 if (fRequirePIDbit[icut]==AliDielectronPID::kRequire&&!hasPID) return kFALSE;
435 if (fRequirePIDbit[icut]==AliDielectronPID::kIfAvailable&&!hasPID) return kTRUE;
436
437
438 Bool_t selected=((numberOfSigmas>=fNsigmaLow[icut])&&(numberOfSigmas<=fNsigmaUp[icut]))^fExclude[icut];
439 return selected;
440}
441
8df8e382 442//______________________________________________
443void AliDielectronPID::SetDefaults(Int_t def){
444 //
445 // initialise default pid strategies
446 //
447
448 if (def==0){
449 // 2sigma bands TPC:
450 // - include e
451 // - exclude mu,K,pi,p
452 // -complete p range
453 AddCut(kTPC,AliPID::kElectron,2);
454 AddCut(kTPC,AliPID::kMuon,-2.,2.,0.,0.,kTRUE);
455 AddCut(kTPC,AliPID::kPion,-2.,2.,0.,0.,kTRUE);
456 AddCut(kTPC,AliPID::kKaon,-2.,2.,0.,0.,kTRUE);
457 AddCut(kTPC,AliPID::kProton,-2.,2.,0.,0.,kTRUE);
458 } else if (def==1) {
459 // 2sigma bands TPC:
460 // - include e 0<p<inf
461 // - exclude mu,K,pi,p 0<p<2
8df8e382 462 AddCut(kTPC,AliPID::kElectron,2.);
463 AddCut(kTPC,AliPID::kMuon,-2.,2.,0.,2.,kTRUE);
464 AddCut(kTPC,AliPID::kPion,-2.,2.,0.,2.,kTRUE);
465 AddCut(kTPC,AliPID::kKaon,-2.,2.,0.,2.,kTRUE);
466 AddCut(kTPC,AliPID::kProton,-2.,2.,0.,2.,kTRUE);
467
468 } else if (def==2) {
469 // include 2sigma e TPC
470 // 3sigma bands TOF
471 // - exclude K,P
48609e3d 472 AddCut(kTPC,AliPID::kElectron,-3.,3.);
3505bfad 473 AddCut(kTPC,AliPID::kPion,-3.,3.,0.,0.,kTRUE);
474 AddCut(kTPC,AliPID::kProton,-3.,3.,0.,0.,kTRUE);
8df8e382 475
5720c765 476 } else if (def==3 || def==4) { // def3 and def4 are the same??
8df8e382 477 // include 2sigma e TPC
478 // 3sigma bands TOF
479 // - exclude K 0<p<1
480 // - exclude P 0<p<2
481 AddCut(kTPC,AliPID::kElectron,2);
482 AddCut(kTOF,AliPID::kKaon,-3.,3.,0.,1.,kTRUE);
483 AddCut(kTOF,AliPID::kProton,-6.,6.,0.,1.,kTRUE);
484 AddCut(kTOF,AliPID::kProton,-3.,3.,1.,2.,kTRUE);
485
8df8e382 486 } else if (def==5) {
487 AddCut(kTPC,AliPID::kElectron,-0.5,3);
488 AddCut(kTOF,AliPID::kElectron,-3,3,0,1.5);
489 } else if (def==6) {
490 // lower cut TPC: parametrisation by HFE
491 // upper cut TPC: 3 sigma
492 // TOF ele band 3sigma 0<p<1.5GeV
493 TF1 *lowerCut=new TF1("lowerCut", "[0] * TMath::Exp([1]*x)", 0, 100);
494 lowerCut->SetParameters(-2.7,-0.4357);
495 AddCut(kTPC,AliPID::kElectron,lowerCut,3.);
496 AddCut(kTOF,AliPID::kElectron,-3,3,0,1.5);
497 } else if (def==7) {
61d106d3 498 // wide TPC cut
8df8e382 499 // TOF ele band 3sigma 0<p<1.5GeV
500 AddCut(kTPC,AliPID::kElectron,10.);
501 AddCut(kTOF,AliPID::kElectron,-3,3,0,1.5);
61d106d3 502 } else if (def==8) {
503 // TOF 5 sigma inclusion if TOFpid available
504 // this should reduce K,p,Pi to a large extent
505 AddCut(kTOF,AliPID::kElectron,-5,5,0,200,kFALSE,AliDielectronPID::kIfAvailable);
506 } else if (def==9) {
507 // lower cut TPC: parametrisation by HFE
508 // upper cut TPC: 3 sigma
509 // TOF 5 sigma inclusion if TOFpid available
510 // this should reduce K,p,Pi to a large extent
511 TF1 *lowerCut=new TF1("lowerCut", "[0] * TMath::Exp([1]*x)", 0, 100);
164bfb53 512 lowerCut->SetParameters(-2.65,-0.6757);
513 AddCut(kTPC,AliPID::kElectron,lowerCut,4.);
61d106d3 514 AddCut(kTOF,AliPID::kElectron,-5,5,0,200,kFALSE,AliDielectronPID::kIfAvailable);
ba15fdfb 515
61d106d3 516 } else if (def==10) {
517 AddCut(kTOF,AliPID::kElectron,-5,5,0,200,kFALSE,AliDielectronPID::kIfAvailable);
518 AddCut(kTPC,AliPID::kElectron,3.);
519 AddCut(kTPC,AliPID::kPion,-3.,3.,0.,0.,kTRUE);
520 AddCut(kTPC,AliPID::kProton,-3.,3.,0.,0.,kTRUE);
521
ba15fdfb 522 } else if (def==11) {
523 // lower cut TPC: parametrisation by HFE
524 // only use from period d on !!
525 // upper cut TPC: 3 sigma
526 // TOF ele band 3sigma 0<p<2.0GeV
527 TF1 *lowerCut=new TF1("lowerCut", "[0] * TMath::Exp([1]*x)+[2]", 0, 100);
528 lowerCut->SetParameters(-3.718,-0.4,0.27);
529 AddCut(kTPC,AliPID::kElectron,lowerCut,3.);
530 AddCut(kTOF,AliPID::kElectron,-3,3,0,2.);
531 } else if (def==12) {
532 // lower cut TPC: parametrisation by HFE
533 // only use from period d on !!
534 // upper cut TPC: 3 sigma
535 // TOF 5 sigma inclusion if TOFpid available
536 // this should reduce K,p,Pi to a large extent
537 TF1 *lowerCut=new TF1("lowerCut", "[0] * TMath::Exp([1]*x)+[2]", 0, 100);
538 lowerCut->SetParameters(-3.718,-0.4,0.27);
539 AddCut(kTPC,AliPID::kElectron,lowerCut,4.);
540 AddCut(kTOF,AliPID::kElectron,-5,5,0,200,kFALSE,AliDielectronPID::kIfAvailable);
8df8e382 541 }
ba15fdfb 542
8df8e382 543}
544
48609e3d 545//______________________________________________
546void AliDielectronPID::SetCorrVal(Double_t run)
547{
548 //
549 // set correction value for run
550 //
d327d9cd 551 fgCorr=0.;
552 fgCorrdEdx=1.;
553
554 if (fgFitCorr){
555 fgCorr=fgFitCorr->Eval(run);
556 if (run<fgFitCorr->GetX()[0]) fgCorr=fgFitCorr->GetY()[0];
557 if (run>fgFitCorr->GetX()[fgFitCorr->GetN()-1]) fgCorr=fgFitCorr->GetY()[fgFitCorr->GetN()-1];
558 }
559
560 if (fgdEdxRunCorr){
561 fgCorrdEdx=fgdEdxRunCorr->Eval(run);
562 if (run<fgdEdxRunCorr->GetX()[0]) fgCorrdEdx=fgdEdxRunCorr->GetY()[0];
563 if (run>fgdEdxRunCorr->GetX()[fgFitCorr->GetN()-1]) fgCorrdEdx=fgdEdxRunCorr->GetY()[fgdEdxRunCorr->GetN()-1];
564 }
48609e3d 565}
566
5720c765 567//______________________________________________
0c09cae4 568Double_t AliDielectronPID::GetEtaCorr(const AliVTrack *track)
5720c765 569{
570 //
571 // return eta correction
572 //
573 if (!fgFunEtaCorr) return 1;
574 return fgFunEtaCorr->Eval(track->Eta());
575}