fHistProbTPCTOFvsPtafterPID(NULL),\r
fHistNSigmaTPCvsPtafterPID(NULL), \r
fHistNSigmaTOFvsPtafterPID(NULL), \r
+ //fHistMatrixCorrectionPlus(0), //======================================================correction\r
+ //fHistMatrixCorrectionMinus(0), //=====================================================correction\r
fPIDResponse(0x0),\r
fPIDCombined(0x0),\r
fParticleOfInterest(kPion),\r
nAODtrackCutBit(128),\r
fPtMin(0.3),\r
fPtMax(1.5),\r
+ fPtMinForCorrections(0.3),\r
+ fPtMaxForCorrections(1.5),\r
+ fPtBinForCorrections(36), //=================================correction\r
fEtaMin(-0.8),\r
fEtaMax(-0.8),\r
+ fEtaMinForCorrections(-0.8),\r
+ fEtaMaxForCorrections(-0.8),\r
+ fEtaBinForCorrections(36), //=================================correction\r
+ fPhiMin(0.),//=================================correction\r
+ fPhiMax(360.),//=================================correction\r
+ fPhiMinForCorrections(0.),//=================================correction\r
+ fPhiMaxForCorrections(360.),//=================================correction\r
+ fPhiBinForCorrections(100), //=================================correction\r
fDCAxyCut(-1),\r
fDCAzCut(-1),\r
fTPCchi2Cut(-1),\r
fExcludeResonancesInMC(kFALSE),\r
fUseMCPdgCode(kFALSE),\r
fPDGCodeToBeAnalyzed(-1),\r
- fEventClass("EventPlane") {\r
+ fEventClass("EventPlane") \r
+{\r
// Constructor\r
// Define input and output slots here\r
// Input slot #0 works with a TChain\r
+ for (Int_t i=0; i<=kCENTRALITY; i++){\r
+ fHistMatrixCorrectionPlus[i] = NULL; //======================================================correction\r
+ fHistMatrixCorrectionMinus[i] = NULL; //=====================================================correction\r
+ }\r
DefineInput(0, TChain::Class());\r
// Output slot #0 writes into a TH1 container\r
DefineOutput(1, TList::Class());\r
\r
}\r
\r
+//====================================correction=============================================//\r
+//________________________________________________________________________\r
+void AliAnalysisTaskBFPsi::SetInputCorrection(const char* filename, const char* gCollSystem) {\r
+ //Open files that will be used for correction\r
+ TString gCollidingSystem = gCollSystem;\r
+\r
+ //Open the input file\r
+ TFile *f = TFile::Open(filename);\r
+ if(!f->IsOpen()) {\r
+ Printf("File not found!!!");\r
+ return;\r
+ //break;\r
+ }\r
+ \r
+ //Get the TDirectoryFile and TList\r
+ TDirectoryFile *dir = dynamic_cast<TDirectoryFile *>(f->Get("PWGCFEbyE.outputBalanceFunctionEfficiencyAnalysis"));\r
+ if(!dir) {\r
+ Printf("TDirectoryFile not found!!!");\r
+ return;\r
+ //break;\r
+ }\r
+ \r
+ TString listEffName = "";\r
+ for (Int_t iCent = 0; iCent < kCENTRALITY; iCent++) {\r
+ listEffName = "listEfficiencyBF_"; \r
+ listEffName += (TString)((Int_t)(centralityArrayForPbPb[iCent]));\r
+ listEffName += "_";\r
+ listEffName += (TString)((Int_t)(centralityArrayForPbPb[iCent+1]));\r
+ TList *list = (TList*)dir->Get(listEffName.Data());\r
+ if(!list) {\r
+ Printf("TList Efficiency not found!!!");\r
+ return;\r
+ // break;\r
+ }\r
+ \r
+ TString histoName = "fHistMatrixCorrectionPlus";\r
+ fHistMatrixCorrectionPlus[iCent]= dynamic_cast<TH3D *>(list->FindObject(histoName.Data()));\r
+ //fHistMatrixCorrectionPlus[iCent]->SetName(Form(histoName.Data()));\r
+ // histoName.Data() = fHistMatrixCorrectionPlus->Clone;\r
+ if(!fHistMatrixCorrectionPlus[iCent]) {\r
+ Printf("fHist not found!!!");\r
+ return;\r
+ //break;\r
+ }\r
+ \r
+ histoName = "fHistMatrixCorrectionMinus";\r
+ fHistMatrixCorrectionMinus[iCent] = dynamic_cast<TH3D *>(list->FindObject(histoName.Data())); \r
+ //fHistMatrixCorrectionMinus[iCent]->SetName(Form(histoName.Data()));\r
+ //histoName.Data() = fHistMatrixCorrectionPlus->Clone;\r
+ if(!fHistMatrixCorrectionMinus[iCent]) {\r
+ Printf("fHist not found!!!");\r
+ return; \r
+ //break;\r
+ }\r
+ }//loop over centralities: ONLY the PbPb case is covered\r
+\r
+ fEtaMinForCorrections = fHistMatrixCorrectionPlus[0]->GetXaxis()->GetXmin();\r
+ fEtaMaxForCorrections = fHistMatrixCorrectionPlus[0]->GetXaxis()->GetXmax();\r
+ fEtaBinForCorrections = fHistMatrixCorrectionPlus[0]->GetNbinsX();\r
+\r
+ fPtMinForCorrections = fHistMatrixCorrectionPlus[0]->GetYaxis()->GetXmin();\r
+ fPtMaxForCorrections = fHistMatrixCorrectionPlus[0]->GetYaxis()->GetXmax();\r
+ fPtBinForCorrections = fHistMatrixCorrectionPlus[0]->GetNbinsY();\r
+\r
+ fPhiMinForCorrections = fHistMatrixCorrectionPlus[0]->GetZaxis()->GetXmin();\r
+ fPhiMaxForCorrections = fHistMatrixCorrectionPlus[0]->GetZaxis()->GetXmax();\r
+ fPhiBinForCorrections = fHistMatrixCorrectionPlus[0]->GetNbinsZ();\r
+}\r
+//====================================correction=============================================//\r
+\r
//________________________________________________________________________\r
void AliAnalysisTaskBFPsi::UserExec(Option_t *) {\r
// Main loop\r
\r
TString gAnalysisLevel = fBalance->GetAnalysisLevel();\r
Int_t gNumberOfAcceptedTracks = 0;\r
- Double_t fCentrality = -1.;\r
+ Double_t gCentrality = -1.;\r
Double_t gReactionPlane = -1.; \r
Float_t bSign = 0.;\r
-\r
+ \r
// get the event (for generator level: MCEvent())\r
AliVEvent* eventMain = NULL;\r
if(gAnalysisLevel == "MC") {\r
}\r
\r
// check event cuts and fill event histograms\r
- if((fCentrality = IsEventAccepted(eventMain)) < 0){\r
+ if((gCentrality = IsEventAccepted(eventMain)) < 0){\r
return;\r
}\r
\r
\r
// get the reaction plane\r
gReactionPlane = GetEventPlane(eventMain);\r
- fHistEventPlane->Fill(gReactionPlane,fCentrality);\r
+ fHistEventPlane->Fill(gReactionPlane,gCentrality);\r
if(gReactionPlane < 0){\r
return;\r
}\r
\r
// get the accepted tracks in main event\r
- TObjArray *tracksMain = GetAcceptedTracks(eventMain,fCentrality,gReactionPlane);\r
+ TObjArray *tracksMain = GetAcceptedTracks(eventMain,gCentrality,gReactionPlane);\r
gNumberOfAcceptedTracks = tracksMain->GetEntriesFast();\r
\r
//multiplicity cut (used in pp)\r
- fHistNumberOfAcceptedTracks->Fill(gNumberOfAcceptedTracks,fCentrality);\r
+ fHistNumberOfAcceptedTracks->Fill(gNumberOfAcceptedTracks,gCentrality);\r
if(fUseMultiplicity) {\r
if((gNumberOfAcceptedTracks < fNumberOfAcceptedTracksMin)||(gNumberOfAcceptedTracks > fNumberOfAcceptedTracksMax))\r
return;\r
// store charges of all accepted tracks, shuffle and reassign (two extra loops!)\r
TObjArray* tracksShuffled = NULL;\r
if(fRunShuffling){\r
- tracksShuffled = GetShuffledTracks(tracksMain);\r
+ tracksShuffled = GetShuffledTracks(tracksMain,gCentrality);\r
}\r
\r
// Event mixing \r
// FillCorrelations(). Also nMix should be passed in, so a weight\r
// of 1./nMix can be applied.\r
\r
- AliEventPool* pool = fPoolMgr->GetEventPool(fCentrality, eventMain->GetPrimaryVertex()->GetZ(),gReactionPlane);\r
+ AliEventPool* pool = fPoolMgr->GetEventPool(gCentrality, eventMain->GetPrimaryVertex()->GetZ(),gReactionPlane);\r
\r
if (!pool){\r
- AliFatal(Form("No pool found for centrality = %f, zVtx = %f, psi = %f", fCentrality, eventMain->GetPrimaryVertex()->GetZ(),gReactionPlane));\r
+ AliFatal(Form("No pool found for centrality = %f, zVtx = %f, psi = %f", gCentrality, eventMain->GetPrimaryVertex()->GetZ(),gReactionPlane));\r
}\r
else{\r
\r
// Fills Event statistics histograms\r
\r
Bool_t isSelectedMain = kTRUE;\r
- Float_t fCentrality = -1.;\r
+ Float_t gCentrality = -1.;\r
TString gAnalysisLevel = fBalance->GetAnalysisLevel();\r
\r
- fHistEventStats->Fill(1,fCentrality); //all events\r
+ fHistEventStats->Fill(1,gCentrality); //all events\r
\r
// Event trigger bits\r
fHistTriggerStats->Fill(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected());\r
isSelectedMain = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();\r
\r
if(isSelectedMain) {\r
- fHistEventStats->Fill(2,fCentrality); //triggered events\r
+ fHistEventStats->Fill(2,gCentrality); //triggered events\r
\r
//Centrality stuff \r
if(fUseCentrality) {\r
if(gAnalysisLevel == "AOD") { //centrality in AOD header\r
AliAODHeader *header = (AliAODHeader*) event->GetHeader();\r
if(header){\r
- fCentrality = header->GetCentralityP()->GetCentralityPercentile(fCentralityEstimator.Data());\r
+ gCentrality = header->GetCentralityP()->GetCentralityPercentile(fCentralityEstimator.Data());\r
\r
// QA for centrality estimators\r
fHistCentStats->Fill(0.,header->GetCentralityP()->GetCentralityPercentile("V0M"));\r
\r
else if(gAnalysisLevel == "ESD" || gAnalysisLevel == "MCESD"){ // centrality class for ESDs or MC-ESDs\r
AliCentrality *centrality = event->GetCentrality();\r
- fCentrality = centrality->GetCentralityPercentile(fCentralityEstimator.Data());\r
+ gCentrality = centrality->GetCentralityPercentile(fCentralityEstimator.Data());\r
\r
// QA for centrality estimators\r
fHistCentStats->Fill(0.,centrality->GetCentralityPercentile("V0M"));\r
AliGenHijingEventHeader* headerH = dynamic_cast<AliGenHijingEventHeader*>(dynamic_cast<AliMCEvent*>(event)->GenEventHeader());\r
if(headerH){\r
gImpactParameter = headerH->ImpactParameter();\r
- fCentrality = gImpactParameter;\r
+ gCentrality = gImpactParameter;\r
}//MC header\r
}//MC\r
else{\r
- fCentrality = -1.;\r
+ gCentrality = -1.;\r
}\r
}\r
\r
//gVertexArray.At(0),\r
//gVertexArray.At(1),\r
//gVertexArray.At(2));\r
- fHistEventStats->Fill(3,fCentrality); //events with a proper vertex\r
+ fHistEventStats->Fill(3,gCentrality); //events with a proper vertex\r
if(TMath::Abs(gVertexArray.At(0)) < fVxMax) {\r
if(TMath::Abs(gVertexArray.At(1)) < fVyMax) {\r
if(TMath::Abs(gVertexArray.At(2)) < fVzMax) {\r
- fHistEventStats->Fill(4,fCentrality); //analayzed events\r
+ fHistEventStats->Fill(4,gCentrality); //analayzed events\r
fHistVx->Fill(gVertexArray.At(0));\r
fHistVy->Fill(gVertexArray.At(1));\r
- fHistVz->Fill(gVertexArray.At(2),fCentrality);\r
+ fHistVz->Fill(gVertexArray.At(2),gCentrality);\r
\r
// take only events inside centrality class\r
- if((fImpactParameterMin < fCentrality) && (fImpactParameterMax > fCentrality)){\r
- return fCentrality; \r
+ if((fImpactParameterMin < gCentrality) && (fImpactParameterMax > gCentrality)){\r
+ return gCentrality; \r
}//centrality class\r
}//Vz cut\r
}//Vy cut\r
vertex->GetCovarianceMatrix(fCov);\r
if(vertex->GetNContributors() > 0) {\r
if(fCov[5] != 0) {\r
- fHistEventStats->Fill(3,fCentrality); //events with a proper vertex\r
+ fHistEventStats->Fill(3,gCentrality); //events with a proper vertex\r
if(TMath::Abs(vertex->GetX()) < fVxMax) {\r
if(TMath::Abs(vertex->GetY()) < fVyMax) {\r
if(TMath::Abs(vertex->GetZ()) < fVzMax) {\r
- fHistEventStats->Fill(4,fCentrality); //analyzed events\r
+ fHistEventStats->Fill(4,gCentrality); //analyzed events\r
fHistVx->Fill(vertex->GetX());\r
fHistVy->Fill(vertex->GetY());\r
- fHistVz->Fill(vertex->GetZ(),fCentrality);\r
+ fHistVz->Fill(vertex->GetZ(),gCentrality);\r
\r
// take only events inside centrality class\r
- if((fCentrality > fCentralityPercentileMin) && (fCentrality < fCentralityPercentileMax)){\r
- fHistEventStats->Fill(5,fCentrality); //events with correct centrality\r
- return fCentrality; \r
+ if((gCentrality > fCentralityPercentileMin) && (gCentrality < fCentralityPercentileMax)){\r
+ fHistEventStats->Fill(5,gCentrality); //events with correct centrality\r
+ return gCentrality; \r
}//centrality class\r
}//Vz cut\r
}//Vy cut\r
// Checks the Event cuts\r
// Fills Event statistics histograms\r
\r
- Float_t fCentrality = -1.;\r
+ Float_t gCentrality = -1.;\r
Double_t fMultiplicity = -100.;\r
TString gAnalysisLevel = fBalance->GetAnalysisLevel();\r
if(fEventClass == "Centrality"){\r
if(gAnalysisLevel == "AOD") { //centrality in AOD header\r
AliAODHeader *header = (AliAODHeader*) event->GetHeader();\r
if(header){\r
- fCentrality = header->GetCentralityP()->GetCentralityPercentile(fCentralityEstimator.Data());\r
+ gCentrality = header->GetCentralityP()->GetCentralityPercentile(fCentralityEstimator.Data());\r
}//AOD header\r
}//AOD\r
\r
else if(gAnalysisLevel == "ESD" || gAnalysisLevel == "MCESD"){ // centrality class for ESDs or MC-ESDs\r
AliCentrality *centrality = event->GetCentrality();\r
- fCentrality = centrality->GetCentralityPercentile(fCentralityEstimator.Data());\r
+ gCentrality = centrality->GetCentralityPercentile(fCentralityEstimator.Data());\r
}//ESD\r
else if(gAnalysisLevel == "MC"){\r
Double_t gImpactParameter = 0.;\r
AliGenHijingEventHeader* headerH = dynamic_cast<AliGenHijingEventHeader*>(dynamic_cast<AliMCEvent*>(event)->GenEventHeader());\r
if(headerH){\r
gImpactParameter = headerH->ImpactParameter();\r
- fCentrality = gImpactParameter;\r
+ gCentrality = gImpactParameter;\r
}//MC header\r
}//MC\r
else{\r
- fCentrality = -1.;\r
+ gCentrality = -1.;\r
}\r
}//End if "Centrality"\r
if(fEventClass=="Multiplicity"&&gAnalysisLevel == "ESD"){\r
if(fEventClass=="Multiplicity"){\r
lReturnVal = fMultiplicity;\r
}else if(fEventClass=="Centrality"){\r
- lReturnVal = fCentrality;\r
+ lReturnVal = gCentrality;\r
}\r
return lReturnVal;\r
}\r
return gReactionPlane;\r
}\r
\r
+//========================correction=============================//\r
+Double_t AliAnalysisTaskBFPsi::GetTrackbyTrackCorrectionMatrix( Double_t vEta, Double_t vPhi, \r
+ Double_t vPt, Short_t vCharge, Double_t gCentrality) {\r
+ // -- Get efficiency correction of particle dependent on (eta, phi, pt, charge, centrality) Â \r
+ \r
+ Double_t correction = 1.;\r
+ //Double_t dimBin[3] = {vEta, vPhi, vPt, gCentrality}; // eta, phi, pt, centrality\r
+ \r
+ Double_t widthEta = (fEtaMaxForCorrections - fEtaMinForCorrections)/fEtaBinForCorrections;\r
+ Int_t binEta = (Int_t)(vEta/widthEta)+1;\r
+ Double_t widthPt = (fPtMaxForCorrections - fPtMinForCorrections)/fPtBinForCorrections;\r
+ Int_t binPt = (Int_t)(vPt/widthPt) + 1;\r
+ Double_t widthPhi = (fPhiMaxForCorrections - fPhiMinForCorrections)/fPhiBinForCorrections;\r
+ Int_t binPhi = (Int_t)(vPhi/widthPhi)+ 1;\r
+\r
+ Int_t gCentralityInt = 1;\r
+ for (Int_t i=1; i<=kCENTRALITY; i++){\r
+ if ((Int_t)(centralityArrayForPbPb[i]) <= gCentrality <= (Int_t)(centralityArrayForPbPb[i])){\r
+ gCentralityInt = i;\r
+ }\r
+ }\r
+ \r
+ if (vCharge > 0) {\r
+ correction = fHistMatrixCorrectionPlus[gCentralityInt-1]->GetBinContent(fHistMatrixCorrectionPlus[gCentralityInt-1]->GetBin(binEta, binPt, binPhi));\r
+ }\r
+ if (vCharge < 0) {\r
+ //correction = fHistMatrixCorrectionMinus->GetBinContent(fHistMatrixCorrectionMinus->GetBin(dimBin));\r
+ correction = fHistMatrixCorrectionMinus[gCentralityInt-1]->GetBinContent(fHistMatrixCorrectionMinus[gCentralityInt-1]->GetBin(binEta, binPt, binPhi));\r
+ }\r
+ if (correction == 0.) { \r
+ AliError(Form("Should not happen : bin content = 0. >> eta: %.2f | phi : %.2f | pt : %.2f | cent %d",vEta, vPhi, vPt, gCentralityInt)); \r
+ correction = 1.; \r
+ } \r
+\r
+ return correction;\r
+}\r
+//========================correction=============================//\r
+\r
//________________________________________________________________________\r
-TObjArray* AliAnalysisTaskBFPsi::GetAcceptedTracks(AliVEvent *event, Double_t fCentrality, Double_t gReactionPlane){\r
+TObjArray* AliAnalysisTaskBFPsi::GetAcceptedTracks(AliVEvent *event, Double_t gCentrality, Double_t gReactionPlane){\r
// Returns TObjArray with tracks after all track cuts (only for AOD!)\r
// Fills QA histograms\r
\r
TObjArray* tracksAccepted = new TObjArray;\r
tracksAccepted->SetOwner(kTRUE);\r
\r
- Double_t vCharge;\r
+ Short_t vCharge;\r
Double_t vEta;\r
Double_t vY;\r
Double_t vPhi;\r
// fill QA histograms\r
fHistClus->Fill(aodTrack->GetITSNcls(),aodTrack->GetTPCNcls());\r
fHistDCA->Fill(dcaZ,dcaXY);\r
- fHistChi2->Fill(aodTrack->Chi2perNDF(),fCentrality);\r
- fHistPt->Fill(vPt,fCentrality);\r
- fHistEta->Fill(vEta,fCentrality);\r
- fHistRapidity->Fill(vY,fCentrality);\r
- if(vCharge > 0) fHistPhiPos->Fill(vPhi,fCentrality);\r
- else if(vCharge < 0) fHistPhiNeg->Fill(vPhi,fCentrality);\r
- fHistPhi->Fill(vPhi,fCentrality);\r
+ fHistChi2->Fill(aodTrack->Chi2perNDF(),gCentrality);\r
+ fHistPt->Fill(vPt,gCentrality);\r
+ fHistEta->Fill(vEta,gCentrality);\r
+ fHistRapidity->Fill(vY,gCentrality);\r
+ if(vCharge > 0) fHistPhiPos->Fill(vPhi,gCentrality);\r
+ else if(vCharge < 0) fHistPhiNeg->Fill(vPhi,gCentrality);\r
+ fHistPhi->Fill(vPhi,gCentrality);\r
+ \r
+ //=======================================correction\r
+ Double_t correction = GetTrackbyTrackCorrectionMatrix(vEta, vPhi, vPt, vCharge, gCentrality); \r
\r
// add the track to the TObjArray\r
- tracksAccepted->Add(new AliBFBasicParticle(vEta, vPhi, vPt, 1.*vCharge));\r
+ tracksAccepted->Add(new AliBFBasicParticle(vEta, vPhi, vPt, vCharge, correction)); \r
}//track loop\r
}// AOD analysis\r
\r
vPt = trackTPC->Pt();\r
fHistClus->Fill(trackTPC->GetITSclusters(0),nClustersTPC);\r
fHistDCA->Fill(b[1],b[0]);\r
- fHistChi2->Fill(chi2PerClusterTPC,fCentrality);\r
- fHistPt->Fill(vPt,fCentrality);\r
- fHistEta->Fill(vEta,fCentrality);\r
- fHistPhi->Fill(vPhi,fCentrality);\r
- fHistRapidity->Fill(vY,fCentrality);\r
- if(vCharge > 0) fHistPhiPos->Fill(vPhi,fCentrality);\r
- else if(vCharge < 0) fHistPhiNeg->Fill(vPhi,fCentrality);\r
+ fHistChi2->Fill(chi2PerClusterTPC,gCentrality);\r
+ fHistPt->Fill(vPt,gCentrality);\r
+ fHistEta->Fill(vEta,gCentrality);\r
+ fHistPhi->Fill(vPhi,gCentrality);\r
+ fHistRapidity->Fill(vY,gCentrality);\r
+ if(vCharge > 0) fHistPhiPos->Fill(vPhi,gCentrality);\r
+ else if(vCharge < 0) fHistPhiNeg->Fill(vPhi,gCentrality);\r
\r
+ //=======================================correction\r
+ Double_t correction = GetTrackbyTrackCorrectionMatrix(vEta, vPhi, vPt, vCharge, gCentrality); \r
+\r
// add the track to the TObjArray\r
- tracksAccepted->Add(new AliBFBasicParticle(vEta, vPhi, vPt, vCharge)); \r
+ tracksAccepted->Add(new AliBFBasicParticle(vEta, vPhi, vPt, vCharge, correction)); \r
\r
delete trackTPC;\r
}//track loop\r
vPhi = track->Phi();\r
//Printf("phi (before): %lf",vPhi);\r
\r
- fHistPt->Fill(vPt,fCentrality);\r
- fHistEta->Fill(vEta,fCentrality);\r
- fHistPhi->Fill(vPhi,fCentrality);\r
- //fHistPhi->Fill(vPhi*TMath::RadToDeg(),fCentrality);\r
- fHistRapidity->Fill(vY,fCentrality);\r
- //if(vCharge > 0) fHistPhiPos->Fill(vPhi*TMath::RadToDeg(),fCentrality);\r
- //else if(vCharge < 0) fHistPhiNeg->Fill(vPhi*TMath::RadToDeg(),fCentrality);\r
- if(vCharge > 0) fHistPhiPos->Fill(vPhi,fCentrality);\r
- else if(vCharge < 0) fHistPhiNeg->Fill(vPhi,fCentrality);\r
+ fHistPt->Fill(vPt,gCentrality);\r
+ fHistEta->Fill(vEta,gCentrality);\r
+ fHistPhi->Fill(vPhi,gCentrality);\r
+ //fHistPhi->Fill(vPhi*TMath::RadToDeg(),gCentrality);\r
+ fHistRapidity->Fill(vY,gCentrality);\r
+ //if(vCharge > 0) fHistPhiPos->Fill(vPhi*TMath::RadToDeg(),gCentrality);\r
+ //else if(vCharge < 0) fHistPhiNeg->Fill(vPhi*TMath::RadToDeg(),gCentrality);\r
+ if(vCharge > 0) fHistPhiPos->Fill(vPhi,gCentrality);\r
+ else if(vCharge < 0) fHistPhiNeg->Fill(vPhi,gCentrality);\r
\r
//Flow after burner\r
if(fUseFlowAfterBurner) {\r
//Printf("phi (after): %lf\n",vPhi);\r
Double_t vDeltaphiBefore = phi0 - gReactionPlane*TMath::DegToRad();\r
if(vDeltaphiBefore < 0) vDeltaphiBefore += 2*TMath::Pi();\r
- fHistPhiBefore->Fill(vDeltaphiBefore,fCentrality);\r
+ fHistPhiBefore->Fill(vDeltaphiBefore,gCentrality);\r
\r
Double_t vDeltaphiAfter = vPhi - gReactionPlane*TMath::DegToRad();\r
if(vDeltaphiAfter < 0) vDeltaphiAfter += 2*TMath::Pi();\r
- fHistPhiAfter->Fill(vDeltaphiAfter,fCentrality);\r
+ fHistPhiAfter->Fill(vDeltaphiAfter,gCentrality);\r
+ \r
}\r
\r
//vPhi *= TMath::RadToDeg();\r
- \r
- tracksAccepted->Add(new AliBFBasicParticle(vEta, vPhi, vPt, vCharge));\r
+\r
+ //=======================================correction\r
+ Double_t correction = GetTrackbyTrackCorrectionMatrix(vEta, vPhi, vPt, vCharge, gCentrality); \r
+ \r
+ tracksAccepted->Add(new AliBFBasicParticle(vEta, vPhi, vPt, vCharge, correction)); \r
\r
} //track loop\r
}//MC\r
return tracksAccepted; \r
}\r
//________________________________________________________________________\r
-TObjArray* AliAnalysisTaskBFPsi::GetShuffledTracks(TObjArray *tracks){\r
+TObjArray* AliAnalysisTaskBFPsi::GetShuffledTracks(TObjArray *tracks, Double_t gCentrality){\r
// Clones TObjArray and returns it with tracks after shuffling the charges\r
\r
TObjArray* tracksShuffled = new TObjArray;\r
\r
for(Int_t i = 0; i < tracks->GetEntriesFast(); i++){\r
AliVParticle* track = (AliVParticle*) tracks->At(i);\r
- tracksShuffled->Add(new AliBFBasicParticle(track->Eta(), track->Phi(), track->Pt(),chargeVector->at(i)));\r
+ //==============================correction\r
+ Double_t correction = GetTrackbyTrackCorrectionMatrix(track->Eta(), track->Phi(),track->Pt(), chargeVector->at(i), gCentrality);\r
+ tracksShuffled->Add(new AliBFBasicParticle(track->Eta(), track->Phi(), track->Pt(),chargeVector->at(i), correction));\r
}\r
\r
delete chargeVector;\r