1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
16 // Class for Bayesian PID
17 // Implements the abstract base class AliHFEpidBase
19 // Class contains Bayesian specific cuts and QA histograms
20 // several detectors added for combined PID
25 // Yvonne Pachmayer <pachmay@physi.uni-heidelberg.de>
30 #include "AliAODPid.h"
31 #include "AliAODTrack.h"
32 #include "AliAODMCParticle.h"
33 #include "AliESDtrack.h"
34 #include "AliExternalTrackParam.h"
36 #include "AliMCParticle.h"
38 #include "AliPIDResponse.h"
39 #include "AliPIDCombined.h"
41 #include "AliHFEpidTPC.h"
42 #include "AliHFEpidTOF.h"
43 #include "AliHFEpidTRD.h"
44 #include "AliHFEpidBayes.h"
45 #include "AliHFEpidQAmanager.h"
47 ClassImp(AliHFEpidBayes)
49 //___________________________________________________________________
50 AliHFEpidBayes::AliHFEpidBayes() :
56 , fDetMaskDefaultandTRD(14)
60 // default constructor
66 //___________________________________________________________________
67 AliHFEpidBayes::AliHFEpidBayes(const char* name) :
73 , fDetMaskDefaultandTRD(14)
77 // default constructor
83 //____________________________________________________________
84 AliHFEpidBayes::AliHFEpidBayes(const AliHFEpidBayes &ref):
89 , fDetMaskDefaultandTRD(14)
98 //____________________________________________________________
99 AliHFEpidBayes &AliHFEpidBayes::operator=(const AliHFEpidBayes &ref){
109 //___________________________________________________________________
110 AliHFEpidBayes::~AliHFEpidBayes(){
116 //___________________________________________________________________
117 void AliHFEpidBayes::Copy(TObject &ref) const {
119 // Performs the copying of the object
121 AliHFEpidBayes &target = dynamic_cast<AliHFEpidBayes &>(ref);
123 target.fPIDCombined = fPIDCombined;
124 target.fDetMask = fDetMask;
125 target.fDetMaskDefault = fDetMaskDefault;
126 target.fDetMaskDefaultandTRD = fDetMaskDefaultandTRD;
127 target.fpidthres = fpidthres;
129 AliHFEpidBase::Copy(ref);
133 //___________________________________________________________________
134 Bool_t AliHFEpidBayes::InitializePID(Int_t /*run*/){
136 // Initialize Bayes PID
139 fPIDCombined=new AliPIDCombined;
140 fDetMaskDefault=AliPIDResponse::kDetTPC+AliPIDResponse::kDetTOF;
141 fDetMaskDefaultandTRD=AliPIDResponse::kDetTPC+AliPIDResponse::kDetTOF+AliPIDResponse::kDetTRD;
145 //___________________________________________________________________
146 Int_t AliHFEpidBayes::IsSelected(const AliHFEpidObject *track, AliHFEpidQAmanager *pidqa) const
149 // identification of electrons via Bayes pid
152 if(pidqa) pidqa->ProcessTrack(track, AliHFEpid::kBAYESpid, AliHFEdetPIDqa::kBeforePID);
153 AliDebug(1, "Doing Bayes PID based");
157 AliFatal("This Task needs the PID response attached to the inputHandler");
162 Bool_t usedTOF=kFALSE;
163 Bool_t usedTPC=kFALSE;
164 Bool_t usedTRD=kFALSE;
168 if((fDetMask==fDetMaskDefault)||(fDetMask==fDetMaskDefaultandTRD))
170 Double_t probTPC[AliPID::kSPECIES]={0.};
171 usedTPC = fkPIDResponse->ComputePIDProbability(AliPIDResponse::kDetTPC,(AliVTrack*)track->GetRecTrack(),AliPID::kSPECIES,probTPC) == AliPIDResponse::kDetPidOk;
172 Double_t probTOF[AliPID::kSPECIES]={0.};
173 usedTOF = fkPIDResponse->ComputePIDProbability(AliPIDResponse::kDetTOF,(AliVTrack*)track->GetRecTrack(),AliPID::kSPECIES,probTOF) == AliPIDResponse::kDetPidOk;
174 if((usedTOF==1)&&(usedTPC==1)) used=1;
177 if(fDetMask==fDetMaskDefaultandTRD)
179 Double_t probTRD[AliPID::kSPECIES]={0.};
180 usedTRD = fkPIDResponse->ComputePIDProbability(AliPIDResponse::kDetTRD,(AliVTrack*)track->GetRecTrack(),AliPID::kSPECIES,probTRD) == AliPIDResponse::kDetPidOk;
181 if((usedTOF==1)&&(usedTPC==1)&&(usedTRD==1)) used=1;
189 Double_t fprobComb[AliPID::kSPECIES]={0.};
190 CalcCombProb(track,fkPIDResponse, fprobComb);
193 if(fprobComb[AliPID::kElectron]>fpidthres) pdg=11;
195 if((pidqa) && (pdg==11) && (used==1)) pidqa->ProcessTrack(track, AliHFEpid::kBAYESpid, AliHFEdetPIDqa::kAfterPID);
202 void AliHFEpidBayes::CalcCombProb(const AliHFEpidObject *track,const AliPIDResponse *fPIDResponse, Double_t* fprobTPCTOF) const
205 // The name says it all
208 for(Int_t i=0;i<AliPID::kSPECIES;i++)
212 fPIDCombined->SetEnablePriors(kFALSE);
213 fPIDCombined->SetDetectorMask(fDetMask);
215 fPIDCombined->ComputeProbabilities((AliVTrack*)track->GetRecTrack(), fPIDResponse, fprobTPCTOF);