fHistProbTPCTOFvsPtbeforePID(NULL),\r
fHistNSigmaTPCvsPtbeforePID(NULL), \r
fHistNSigmaTOFvsPtbeforePID(NULL), \r
+ fHistBetaVsdEdXbeforePID(NULL), //+++++++ \r
+ fHistNSigmaTPCTOFvsPtbeforePID(NULL), //++++++\r
fHistdEdxVsPTPCafterPID(NULL),\r
fHistBetavsPTOFafterPID(NULL), \r
fHistProbTPCvsPtafterPID(NULL), \r
fHistProbTPCTOFvsPtafterPID(NULL),\r
fHistNSigmaTPCvsPtafterPID(NULL), \r
fHistNSigmaTOFvsPtafterPID(NULL), \r
+ fHistBetaVsdEdXafterPID(NULL), //+++++++ \r
+ fHistNSigmaTPCTOFvsPtafterPID(NULL), //+++++++\r
fCentralityArrayBinsForCorrections(kCENTRALITY),\r
fPIDResponse(0x0),\r
fPIDCombined(0x0),\r
13,-0.5,12.5,220,-5,105);\r
for(Int_t i = 1; i <= 13; i++){\r
fHistCentStats->GetXaxis()->SetBinLabel(i,gCentName[i-1].Data());\r
- //fHistCentStatsUsed->GetXaxis()->SetBinLabel(i,gCentName[i-1].Data()); //++++++++++++++++++++++\r
+ //fHistCentStatsUsed->GetXaxis()->SetBinLabel(i,gCentName[i-1].Data());\r
}\r
fList->Add(fHistCentStats);\r
\r
- fHistCentStatsUsed = new TH2F("fHistCentStatsUsed","Centrality statistics;;Cent percentile", 1,-0.5,0.5,220,-5,105); //++++++++++++++++++++++\r
- fHistCentStatsUsed->GetXaxis()->SetBinLabel(1,fCentralityEstimator.Data()); //++++++++++++++++++++++\r
- fList->Add(fHistCentStatsUsed); //++++++++++++++++++++++\r
+ fHistCentStatsUsed = new TH2F("fHistCentStatsUsed","Centrality statistics;;Cent percentile", 1,-0.5,0.5,220,-5,105);\r
+ fHistCentStatsUsed->GetXaxis()->SetBinLabel(1,fCentralityEstimator.Data());\r
+ fList->Add(fHistCentStatsUsed);\r
\r
fHistTriggerStats = new TH1F("fHistTriggerStats","Trigger statistics;TriggerBit;N_{events}",1025,0,1025);\r
fList->Add(fHistTriggerStats);\r
fPIDCombined->SetDefaultTPCPriors();\r
\r
fHistdEdxVsPTPCbeforePID = new TH2D ("dEdxVsPTPCbefore","dEdxVsPTPCbefore", 1000, -10.0, 10.0, 1000, 0, 1000); \r
- fHistListPIDQA->Add(fHistdEdxVsPTPCbeforePID); //addition \r
+ fHistListPIDQA->Add(fHistdEdxVsPTPCbeforePID);\r
\r
fHistBetavsPTOFbeforePID = new TH2D ("BetavsPTOFbefore","BetavsPTOFbefore", 1000, -10.0, 10., 1000, 0, 1.2); \r
- fHistListPIDQA->Add(fHistBetavsPTOFbeforePID); //addition\r
+ fHistListPIDQA->Add(fHistBetavsPTOFbeforePID); \r
\r
fHistProbTPCvsPtbeforePID = new TH2D ("ProbTPCvsPtbefore","ProbTPCvsPtbefore", 1000, -10.0,10.0, 1000, 0, 2.0); \r
- fHistListPIDQA->Add(fHistProbTPCvsPtbeforePID); //addition \r
+ fHistListPIDQA->Add(fHistProbTPCvsPtbeforePID); \r
\r
fHistProbTOFvsPtbeforePID = new TH2D ("ProbTOFvsPtbefore","ProbTOFvsPtbefore", 1000, -50, 50, 1000, 0, 2.0); \r
- fHistListPIDQA->Add(fHistProbTOFvsPtbeforePID); //addition \r
+ fHistListPIDQA->Add(fHistProbTOFvsPtbeforePID);\r
\r
fHistProbTPCTOFvsPtbeforePID =new TH2D ("ProbTPCTOFvsPtbefore","ProbTPCTOFvsPtbefore", 1000, -50, 50, 1000, 0, 2.0); \r
- fHistListPIDQA->Add(fHistProbTPCTOFvsPtbeforePID); //addition \r
+ fHistListPIDQA->Add(fHistProbTPCTOFvsPtbeforePID);\r
\r
fHistNSigmaTPCvsPtbeforePID = new TH2D ("NSigmaTPCvsPtbefore","NSigmaTPCvsPtbefore", 1000, -10, 10, 1000, 0, 500); \r
- fHistListPIDQA->Add(fHistNSigmaTPCvsPtbeforePID); //addition \r
+ fHistListPIDQA->Add(fHistNSigmaTPCvsPtbeforePID);\r
\r
fHistNSigmaTOFvsPtbeforePID = new TH2D ("NSigmaTOFvsPtbefore","NSigmaTOFvsPtbefore", 1000, -10, 10, 1000, 0, 500); \r
- fHistListPIDQA->Add(fHistNSigmaTOFvsPtbeforePID); //addition \r
+ fHistListPIDQA->Add(fHistNSigmaTOFvsPtbeforePID); \r
+\r
+ fHistBetaVsdEdXbeforePID = new TH2D ("BetaVsdEdXbefore","BetaVsdEdXbefore", 1000, 0., 1000, 1000, 0, 1.2); \r
+ fHistListPIDQA->Add(fHistBetaVsdEdXbeforePID); //++++++++\r
+ \r
+ fHistNSigmaTPCTOFvsPtbeforePID = new TH2D ("NSigmaTPCTOFvsPtbefore","NSigmaTPCTOFvsPtbefore", 1000, -10., 10., 1000, 0, 500); \r
+ fHistListPIDQA->Add(fHistNSigmaTPCTOFvsPtbeforePID); //++++++++\r
\r
fHistdEdxVsPTPCafterPID = new TH2D ("dEdxVsPTPCafter","dEdxVsPTPCafter", 1000, -10, 10, 1000, 0, 1000); \r
- fHistListPIDQA->Add(fHistdEdxVsPTPCafterPID); //addition \r
+ fHistListPIDQA->Add(fHistdEdxVsPTPCafterPID);\r
\r
fHistBetavsPTOFafterPID = new TH2D ("BetavsPTOFafter","BetavsPTOFafter", 1000, -10, 10, 1000, 0, 1.2); \r
- fHistListPIDQA->Add(fHistBetavsPTOFafterPID); //addition \r
+ fHistListPIDQA->Add(fHistBetavsPTOFafterPID); \r
\r
fHistProbTPCvsPtafterPID = new TH2D ("ProbTPCvsPtafter","ProbTPCvsPtafter", 1000, -10, 10, 1000, 0, 2); \r
- fHistListPIDQA->Add(fHistProbTPCvsPtafterPID); //addition \r
+ fHistListPIDQA->Add(fHistProbTPCvsPtafterPID);\r
\r
fHistProbTOFvsPtafterPID = new TH2D ("ProbTOFvsPtafter","ProbTOFvsPtafter", 1000, -10, 10, 1000, 0, 2); \r
- fHistListPIDQA->Add(fHistProbTOFvsPtafterPID); //addition \r
+ fHistListPIDQA->Add(fHistProbTOFvsPtafterPID); \r
\r
fHistProbTPCTOFvsPtafterPID =new TH2D ("ProbTPCTOFvsPtafter","ProbTPCTOFvsPtafter", 1000, -50, 50, 1000, 0, 2.0); \r
- fHistListPIDQA->Add(fHistProbTPCTOFvsPtafterPID); //addition \r
+ fHistListPIDQA->Add(fHistProbTPCTOFvsPtafterPID);\r
\r
fHistNSigmaTPCvsPtafterPID = new TH2D ("NSigmaTPCvsPtafter","NSigmaTPCvsPtafter", 1000, -10, 10, 1000, 0, 500); \r
- fHistListPIDQA->Add(fHistNSigmaTPCvsPtafterPID); //addition \r
+ fHistListPIDQA->Add(fHistNSigmaTPCvsPtafterPID);\r
\r
fHistNSigmaTOFvsPtafterPID = new TH2D ("NSigmaTOFvsPtafter","NSigmaTOFvsPtafter", 1000, -10, 10, 1000, 0, 500); \r
- fHistListPIDQA->Add(fHistNSigmaTOFvsPtafterPID); //addition \r
+ fHistListPIDQA->Add(fHistNSigmaTOFvsPtafterPID);\r
+\r
+ fHistBetaVsdEdXafterPID = new TH2D ("BetaVsdEdXafter","BetaVsdEdXafter", 1000, 0., 1000, 1000, 0, 1.2); \r
+ fHistListPIDQA->Add(fHistBetaVsdEdXafterPID); //++++++++\r
+\r
+ fHistNSigmaTPCTOFvsPtafterPID = new TH2D ("NSigmaTPCTOFvsPtafter","NSigmaTPCTOFvsPtafter", 1000, -10., 10., 1000, 0, 500); \r
+ fHistListPIDQA->Add(fHistNSigmaTPCTOFvsPtafterPID); //++++++++\r
}\r
\r
// for electron rejection only TPC nsigma histograms\r
if(!fUsePID && fElectronRejection) {\r
\r
fHistdEdxVsPTPCbeforePID = new TH2D ("dEdxVsPTPCbefore","dEdxVsPTPCbefore", 1000, -10.0, 10.0, 1000, 0, 1000); \r
- fHistListPIDQA->Add(fHistdEdxVsPTPCbeforePID); //addition \r
+ fHistListPIDQA->Add(fHistdEdxVsPTPCbeforePID);\r
\r
fHistNSigmaTPCvsPtbeforePID = new TH2D ("NSigmaTPCvsPtbefore","NSigmaTPCvsPtbefore", 1000, -10, 10, 1000, 0, 500); \r
fHistListPIDQA->Add(fHistNSigmaTPCvsPtbeforePID); //addition \r
\r
fHistdEdxVsPTPCafterPID = new TH2D ("dEdxVsPTPCafter","dEdxVsPTPCafter", 1000, -10, 10, 1000, 0, 1000); \r
- fHistListPIDQA->Add(fHistdEdxVsPTPCafterPID); //addition \r
+ fHistListPIDQA->Add(fHistdEdxVsPTPCafterPID);\r
\r
fHistNSigmaTPCvsPtafterPID = new TH2D ("NSigmaTPCvsPtafter","NSigmaTPCvsPtafter", 1000, -10, 10, 1000, 0, 500); \r
- fHistListPIDQA->Add(fHistNSigmaTPCvsPtafterPID); //addition \r
+ fHistListPIDQA->Add(fHistNSigmaTPCvsPtafterPID); \r
}\r
//====================PID========================//\r
\r
\r
TString gAnalysisLevel = fBalance->GetAnalysisLevel();\r
Int_t gNumberOfAcceptedTracks = 0;\r
- Double_t lMultiplicityVar = -1.;\r
+ Double_t lMultiplicityVar = -999.; //-1\r
Double_t gReactionPlane = -1.; \r
Float_t bSign = 0.;\r
\r
eventMain = dynamic_cast<AliVEvent*>(MCEvent()); \r
}\r
else{\r
- eventMain = dynamic_cast<AliVEvent*>(InputEvent()); \r
- \r
+ eventMain = dynamic_cast<AliVEvent*>(InputEvent()); \r
// for HBT like cuts need magnetic field sign\r
bSign = (eventMain->GetMagneticField() > 0) ? 1 : -1;\r
}\r
fPIDResponse = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->GetPIDResponse();\r
if (!fPIDResponse) AliFatal("This Task needs the PID response attached to the inputHandler");\r
}\r
- \r
+ \r
// check event cuts and fill event histograms\r
- if((lMultiplicityVar = IsEventAccepted(eventMain)) < 0){\r
+ if((lMultiplicityVar = IsEventAccepted(eventMain)) < 0){ \r
return;\r
}\r
- \r
// get the reaction plane\r
if(fEventClass != "Multiplicity") {\r
gReactionPlane = GetEventPlane(eventMain);\r
return -1.;\r
fHistEventStats->Fill(6,gRefMultiplicity); \r
}\r
-\r
// check for pile-up event\r
if(fCheckPileUp){\r
AliAnalysisUtils ut;\r
\r
if(gAnalysisLevel == "AOD") { // handling of TPC only tracks different in AOD and ESD\r
// Loop over tracks in event\r
+ \r
for (Int_t iTracks = 0; iTracks < event->GetNumberOfTracks(); iTracks++) {\r
AliAODTrack* aodTrack = dynamic_cast<AliAODTrack *>(event->GetTrack(iTracks));\r
if (!aodTrack) {\r
for(Int_t iTrackBit = 0; iTrackBit < 16; iTrackBit++){\r
fHistTrackStats->Fill(iTrackBit,aodTrack->TestFilterBit(1<<iTrackBit));\r
}\r
+\r
if(!aodTrack->TestFilterBit(fnAODtrackCutBit)) continue;\r
\r
vCharge = aodTrack->Charge();\r
}\r
//===========================end of PID (so far only for electron rejection)===============================//\r
\r
+ //+++++++++++++++++++++++++++++//\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
Float_t dcaXY = aodTrack->DCA(); // this is the DCA from global track (not exactly what is cut on)\r
Float_t dcaZ = aodTrack->ZAtDCA(); // this is the DCA from global track (not exactly what is cut on)\r
\r
if(!fHistVZEROAGainEqualizationMap) return 1.0;\r
\r
TString gVZEROSide = side;\r
- for(Int_t iBinX = 1; iBinX <= fHistVZEROAGainEqualizationMap->GetNbinsX(); iBinX++) {\r
+ for(Int_t iBinX = 1; iBinX < fHistVZEROAGainEqualizationMap->GetNbinsX(); iBinX++) {\r
Int_t gRunNumber = atoi(fHistVZEROAGainEqualizationMap->GetXaxis()->GetBinLabel(iBinX));\r
//cout<<"Looking for run "<<run<<" - current run: "<<gRunNumber<<endl;\r
if(gRunNumber == run) {\r