+ //+++++++++++++++++++++++++++++//\r
+ //===========================PID===============================// \r
+ if(fUsePID) {\r
+ Double_t prob[AliPID::kSPECIES]={0.};\r
+ Double_t probTPC[AliPID::kSPECIES]={0.};\r
+ Double_t probTOF[AliPID::kSPECIES]={0.};\r
+ Double_t probTPCTOF[AliPID::kSPECIES]={0.};\r
+ \r
+ Double_t nSigma = 0.;\r
+ Double_t nSigmaTPC = 0.; //++++\r
+ Double_t nSigmaTOF = 0.; //++++\r
+ UInt_t detUsedTPC = 0;\r
+ UInt_t detUsedTOF = 0;\r
+ UInt_t detUsedTPCTOF = 0;\r
+ \r
+ //Decide what detector configuration we want to use\r
+ switch(fPidDetectorConfig) {\r
+ case kTPCpid:\r
+ fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTPC);\r
+ nSigma = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(aodTrack,(AliPID::EParticleType)fParticleOfInterest));\r
+ detUsedTPC = fPIDCombined->ComputeProbabilities(aodTrack, fPIDResponse, probTPC);\r
+ for(Int_t iSpecies = 0; iSpecies < AliPID::kSPECIES; iSpecies++)\r
+ prob[iSpecies] = probTPC[iSpecies];\r
+ break;\r
+ case kTOFpid:\r
+ fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTOF);\r
+ nSigma = TMath::Abs(fPIDResponse->NumberOfSigmasTOF(aodTrack,(AliPID::EParticleType)fParticleOfInterest));\r
+ detUsedTOF = fPIDCombined->ComputeProbabilities(aodTrack, fPIDResponse, probTOF);\r
+ for(Int_t iSpecies = 0; iSpecies < AliPID::kSPECIES; iSpecies++)\r
+ prob[iSpecies] = probTOF[iSpecies];\r
+ break;\r
+ case kTPCTOF:\r
+ fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTOF|AliPIDResponse::kDetTPC);\r
+ nSigmaTPC = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(aodTrack,(AliPID::EParticleType)fParticleOfInterest)); //++++++\r
+ nSigmaTOF = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(aodTrack,(AliPID::EParticleType)fParticleOfInterest)); //++++++\r
+ nSigma = TMath::Sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF);//++++++\r
+ detUsedTPCTOF = fPIDCombined->ComputeProbabilities(aodTrack, fPIDResponse, probTPCTOF);\r
+ for(Int_t iSpecies = 0; iSpecies < AliPID::kSPECIES; iSpecies++)\r
+ prob[iSpecies] = probTPCTOF[iSpecies];\r
+ break;\r
+ default:\r
+ break;\r
+ }//end switch: define detector mask\r
+ \r
+ //Filling the PID QA\r
+ Double_t tofTime = -999., length = 999., tof = -999.;\r
+ Double_t c = TMath::C()*1.E-9;// m/ns\r
+ Double_t beta = -999.;\r
+ Double_t nSigmaTOFForParticleOfInterest = -999.;\r
+ if ( (aodTrack->IsOn(AliAODTrack::kTOFin)) &&\r
+ (aodTrack->IsOn(AliAODTrack::kTIME)) ) { \r
+ tofTime = aodTrack->GetTOFsignal();//in ps\r
+ length = aodTrack->GetIntegratedLength();\r
+ tof = tofTime*1E-3; // ns \r
+ \r
+ if (tof <= 0) {\r
+ //Printf("WARNING: track with negative TOF time found! Skipping this track for PID checks\n");\r
+ continue;\r
+ }\r
+ if (length <= 0){\r
+ //printf("WARNING: track with negative length found!Skipping this track for PID checks\n");\r
+ continue;\r
+ }\r
+ \r
+ length = length*0.01; // in meters\r
+ tof = tof*c;\r
+ beta = length/tof;\r
+ \r
+ nSigmaTOFForParticleOfInterest = fPIDResponse->NumberOfSigmasTOF(aodTrack,(AliPID::EParticleType)fParticleOfInterest);\r
+ fHistBetavsPTOFbeforePID ->Fill(aodTrack->P()*aodTrack->Charge(),beta);\r
+ fHistProbTOFvsPtbeforePID ->Fill(aodTrack->Pt(),probTOF[fParticleOfInterest]);\r
+ fHistNSigmaTOFvsPtbeforePID ->Fill(aodTrack->Pt(),nSigmaTOFForParticleOfInterest);\r
+ }//TOF signal \r
+ \r
+ Double_t nSigmaTPCForParticleOfInterest = fPIDResponse->NumberOfSigmasTPC(aodTrack,(AliPID::EParticleType)fParticleOfInterest);\r
+ fHistdEdxVsPTPCbeforePID -> Fill(aodTrack->P()*aodTrack->Charge(),aodTrack->GetTPCsignal());\r
+ fHistProbTPCvsPtbeforePID -> Fill(aodTrack->Pt(),probTPC[fParticleOfInterest]); \r
+ fHistNSigmaTPCvsPtbeforePID -> Fill(aodTrack->Pt(),nSigmaTPCForParticleOfInterest); \r
+ fHistProbTPCTOFvsPtbeforePID -> Fill(aodTrack->Pt(),probTPCTOF[fParticleOfInterest]);\r
+ \r
+ //combined TPC&TOF\r
+ fHistBetaVsdEdXbeforePID->Fill(aodTrack->GetTPCsignal(),beta); //+++++++++ \r
+ Double_t nSigmaTPCTOFForParticleOfInterest = -999.;//++++++++\r
+ nSigmaTPCTOFForParticleOfInterest = TMath::Sqrt(nSigmaTPCForParticleOfInterest*nSigmaTPCForParticleOfInterest + nSigmaTOFForParticleOfInterest*nSigmaTOFForParticleOfInterest);//++++++++\r
+ fHistNSigmaTPCTOFvsPtbeforePID -> Fill(aodTrack->Pt(),nSigmaTPCTOFForParticleOfInterest); //++++++++\r
+\r
+ //Printf("nSigma %lf",nSigma); //++++++++++++\r
+ //Printf("nSigmaTPCTOF %lf",nSigmaTPCTOFForParticleOfInterest); //++++++++++++\r
+ //end of QA-before pid\r
+ \r
+ if ((detUsedTPC != 0)||(detUsedTOF != 0)||(detUsedTPCTOF != 0)) {\r
+ //Make the decision based on the n-sigma\r
+ if(fUsePIDnSigma) {\r
+ if(nSigma > fPIDNSigma) continue; \r
+ \r
+ fHistNSigmaTOFvsPtafterPID ->Fill(aodTrack->Pt(),nSigma);\r
+ fHistNSigmaTPCvsPtafterPID ->Fill(aodTrack->Pt(),nSigma); \r
+ fHistNSigmaTPCTOFvsPtafterPID ->Fill(aodTrack->Pt(),nSigma); //++++++++\r
+ }\r
+ //Make the decision based on the bayesian\r
+ else if(fUsePIDPropabilities) {\r
+ if(fParticleOfInterest != TMath::LocMax(AliPID::kSPECIES,prob)) continue;\r
+ if (prob[fParticleOfInterest] < fMinAcceptedPIDProbability) continue; \r
+ \r
+ fHistProbTOFvsPtafterPID ->Fill(aodTrack->Pt(),probTOF[fParticleOfInterest]);\r
+ fHistProbTPCvsPtafterPID ->Fill(aodTrack->Pt(),probTPC[fParticleOfInterest]); \r
+ fHistProbTPCTOFvsPtafterPID ->Fill(aodTrack->Pt(),probTPCTOF[fParticleOfInterest]);\r
+ \r
+ }\r
+ \r
+ //Printf("nSigmaAFTER %lf", nSigma); //++++++++++++\r
+ //Printf("nSigmaTPCTOFAFTER %lf", nSigmaTPCTOFForParticleOfInterest); //++++++++++++ \r
+ //Fill QA after the PID\r
+ fHistBetavsPTOFafterPID ->Fill(aodTrack->P()*aodTrack->Charge(),beta);\r
+ fHistdEdxVsPTPCafterPID ->Fill(aodTrack->P()*aodTrack->Charge(),aodTrack->GetTPCsignal());\r
+ fHistBetaVsdEdXafterPID->Fill(aodTrack->GetTPCsignal(),beta); //+++++++++ \r
+ }\r
+ }\r
+ //===========================PID===============================//\r
+ //+++++++++++++++++++++++++++++//\r
+\r
+\r