Double_t binsZv[zvNbins+1] = {-30.,-25.,-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.,25.,30.};\r
*/\r
\r
- const Int_t ptNbins = 55; \r
- Double_t binsPt[ptNbins+1] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0,4.5,5.0,5.5,6.0,6.5,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0};\r
+\r
+ const Int_t ptNbins = 68;\r
+ Double_t binsPt[ptNbins+1] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0,4.5,5.0,5.5,6.0,6.5,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,18.0,20.0,22.0,24.0,26.0,28.0,30.0,32.0,34.0,36.0,40.0,45.0,50.0};\r
+\r
+\r
Double_t binsEta[etaNbins+1] = {-1.5,-1.4,-1.3,-1.2,-1.1,-1.0,-0.9,-0.8,-0.7,-0.6,-0.5,-0.4,-0.3,-0.2,-0.1,0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.3,1.4,1.5};\r
Double_t binsZv[zvNbins+1] = {-30.,-25.,-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.,25.,30.};\r
\r
fCosmicsHisto->Sumw2();\r
\r
//\r
- Int_t binsEventCount[2]={2,2};\r
- Double_t minEventCount[2]={0,0}; \r
- Double_t maxEventCount[2]={2,2}; \r
- fEventCount = new THnSparseF("fEventCount","trig vs trig+vertex",2,binsEventCount,minEventCount,maxEventCount);\r
+ Int_t binsEventCount[3]={2,2,2};\r
+ Double_t minEventCount[3]={0,0,0}; \r
+ Double_t maxEventCount[3]={2,2,2}; \r
+ fEventCount = new THnSparseF("fEventCount","trig vs trig+vertex",3,binsEventCount,minEventCount,maxEventCount);\r
fEventCount->GetAxis(0)->SetTitle("trig");\r
fEventCount->GetAxis(1)->SetTitle("trig+vert");\r
+ fEventCount->GetAxis(2)->SetTitle("selected");\r
fEventCount->Sumw2();\r
\r
\r
-\r
-\r
-\r
// init output folder\r
fCorrectionFolder = CreateFolder("folderdNdPt","Correction dNdPt Folder");\r
\r
return;\r
}\r
\r
+\r
// trigger selection\r
Bool_t isEventTriggered = kTRUE;\r
AliPhysicsSelection *trigSel = NULL;\r
AliTriggerAnalysis *trigAna = NULL; // needed for andV0\r
+\r
if(evtCuts->IsTriggerRequired()) \r
{\r
//\r
return;\r
}\r
\r
- if(IsUseMCInfo()) { \r
+ if(IsUseMCInfo()) \r
+ { \r
trigSel->SetAnalyzeMC();\r
- isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
-\r
- trigAna = trigSel->GetTriggerAnalysis();\r
- if(!trigAna) \r
- return;\r
\r
- if(GetTrigger() == AliTriggerAnalysis::kV0AND)\r
- isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
+ if(GetParticleMode() == AlidNdPtHelper::kVZEROCase1)\r
+ {\r
+ // check V0 systematics (case1)\r
+ // Initialization done in the macro\r
+ trigAna = trigSel->GetTriggerAnalysis();\r
+ if(!trigAna) \r
+ return;\r
+\r
+ //trigAna->SetV0HwPars(15, 61.5, 86.5);\r
+ //trigAna->SetV0AdcThr(15);\r
+\r
+ isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
+ //printf("MB1 & kVZEROCase1 %d \n",isEventTriggered);\r
+ //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
+ \r
+ if(GetTrigger() == AliTriggerAnalysis::kV0AND) \r
+ {\r
+ isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
+ //printf("V0AND %d \n",isEventTriggered);\r
+ }\r
+ }\r
+ else if(GetParticleMode() == AlidNdPtHelper::kVZEROCase2)\r
+ {\r
+ // check V0 systematics (case2 only in MC)\r
+ // Initialization done in the macro\r
+\r
+ trigAna = trigSel->GetTriggerAnalysis();\r
+ if(!trigAna) \r
+ return;\r
+\r
+ //trigAna->SetV0HwPars(0, 0, 125);\r
+ //trigAna->SetV0AdcThr(0);\r
+\r
+ isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
+ //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
+ \r
+ if(GetTrigger() == AliTriggerAnalysis::kV0AND) \r
+ {\r
+ isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
+ //printf("V0AND %d \n",isEventTriggered);\r
+ }\r
+ }\r
+ else {\r
+ isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
+ //printf("MB1 %d \n",isEventTriggered);\r
+ \r
+ if(GetTrigger() == AliTriggerAnalysis::kV0AND) \r
+ {\r
+ trigAna = trigSel->GetTriggerAnalysis();\r
+ if(!trigAna) \r
+ return;\r
+\r
+ isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
+ //printf("V0AND %d \n",isEventTriggered);\r
+ }\r
+ }\r
}\r
else {\r
//\r
// 0-multiplicity bin for LHC background correction\r
//\r
- if(GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || \r
- GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt) \r
+ if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || \r
+ GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || \r
+ GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || \r
+ GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || \r
+ GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt ) \r
{\r
trigSel->SetBin0CallbackViaPointer(&AlidNdPtAnalysis::IsBinZeroTrackSPDvtx);\r
} else {\r
trigSel->SetBin0CallbackViaPointer(&AlidNdPtAnalysis::IsBinZeroSPDvtx);\r
}\r
\r
- isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
-\r
- trigAna = trigSel->GetTriggerAnalysis();\r
- if(!trigAna) \r
- return;\r
-\r
- if(GetTrigger() == AliTriggerAnalysis::kV0AND)\r
- isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
+ if(GetParticleMode() == AlidNdPtHelper::kVZEROCase1)\r
+ {\r
+ // check V0 systematics (case1)\r
+ // Initialization done in the macro\r
+ trigAna = trigSel->GetTriggerAnalysis();\r
+ if(!trigAna) \r
+ return;\r
+\r
+ //trigAna->SetV0HwPars(15, 61.5, 86.5);\r
+ //trigAna->SetV0AdcThr(15);\r
+\r
+ isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
+ //isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
+ \r
+ if(GetTrigger() == AliTriggerAnalysis::kV0AND) \r
+ {\r
+ isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
+ //printf("V0AND %d \n",isEventTriggered);\r
+ }\r
+ }\r
+ else {\r
+ isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
+ //printf("MB1 %d \n",isEventTriggered);\r
+ \r
+ if(GetTrigger() == AliTriggerAnalysis::kV0AND) \r
+ {\r
+ trigAna = trigSel->GetTriggerAnalysis();\r
+ if(!trigAna) \r
+ return;\r
+\r
+ isEventTriggered = trigAna->IsOfflineTriggerFired(esdEvent, GetTrigger());\r
+ //printf("V0AND %d \n",isEventTriggered);\r
+ }\r
+ }\r
}\r
}\r
- \r
+\r
// use MC information\r
AliHeader* header = 0;\r
AliGenEventHeader* genHeader = 0;\r
multMBTracks = mult->GetNumberOfTracklets();\r
\r
} \r
- else if( GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || \r
- GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt)\r
+ else if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || \r
+ GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || \r
+ GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || \r
+ GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || \r
+ GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt )\r
{\r
if(vtxESD->GetStatus() && isRecVertex)\r
multMBTracks = vtxESD->GetNContributors();\r
\r
}\r
else {\r
- AliDebug(AliLog::kError, Form("Found analysis type %s", GetAnalysisMode()));\r
+ AliDebug(AliLog::kError, Form("Found analysis type %d", GetAnalysisMode()));\r
return; \r
}\r
\r
+ Bool_t isEventSelected = kTRUE;\r
+ if(evtCuts->IsEventSelectedRequired()) \r
+ { \r
+ // select events with at least \r
+ // one prompt track in acceptance\r
+ // pT>0.5 GeV/c, |eta|<0.8 for the Cross Section studies\r
+\r
+ isEventSelected = AlidNdPtHelper::SelectEvent(esdEvent,esdTrackCuts);\r
+ //printf("isEventSelected %d \n", isEventSelected);\r
+ }\r
+\r
Bool_t isTrigAndVertex = isEventTriggered && isEventOK;\r
- Double_t vEventCount[2] = { isEventTriggered, isTrigAndVertex};\r
+ Double_t vEventCount[3] = { isEventTriggered, isTrigAndVertex, isEventSelected };\r
fEventCount->Fill(vEventCount);\r
\r
//\r
Bool_t isCosmic = kFALSE;\r
\r
\r
- if(isEventOK && isEventTriggered)\r
+ if(isEventOK && isEventTriggered && isEventSelected)\r
{\r
// get all charged tracks\r
allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode());\r
\r
if(esdTrackCuts->AcceptTrack(track)) \r
{\r
- if(GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt) {\r
- if(AlidNdPtHelper::IsGoodImpPar(track) && accCuts->AcceptTrack(track)) multRecTemp++;\r
- }\r
- else {\r
if(accCuts->AcceptTrack(track)) multRecTemp++;\r
- }\r
} \r
}\r
\r
- /*\r
- // check multiplicity\r
- const AliMultiplicity* mult = esdEvent->GetMultiplicity();\r
- Int_t trackletMult = 0;\r
- if (mult) {\r
- for(Int_t i=0; i<mult->GetNumberOfTracklets(); i++) {\r
- if(TMath::Abs(mult->GetEta(i)) < accCuts->GetMaxEta() )\r
- trackletMult++;\r
- }\r
- }\r
- // use tracklet multiplicity\r
- multRecTemp = trackletMult;\r
- */\r
-\r
//\r
for(Int_t i=0; i<entries;++i) \r
{\r
\r
// track-level corrections\r
if(!esdTrackCuts->AcceptTrack(track)) continue;\r
- if(GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt && !AlidNdPtHelper::IsGoodImpPar(track)) continue;\r
+ //if(GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt && !AlidNdPtHelper::IsGoodImpPar(track)) continue;\r
\r
// cosmics analysis\r
isCosmic = kFALSE;\r
\r
// empty events corrections\r
// no reconstructed zv\r
- if( isEventTriggered && multMBTracks==0 ) \r
+ if( isEventTriggered && multMBTracks==0 && isEventSelected ) \r
{\r
if(GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo()) \r
{\r
\r
if(IsUseMCInfo()) \r
{\r
+ if(!mcEvent) return; \r
+\r
+ Bool_t isMCEventSelected = kTRUE;\r
+ if(evtCuts->IsEventSelectedRequired()) \r
+ { \r
+ // select events with at least \r
+ // one MC primary track in acceptance\r
+ // pT>0.5 GeV/c, |eta|<0.8 for the Cross Section studies\r
+ isMCEventSelected = AlidNdPtHelper::SelectMCEvent(mcEvent);\r
+ //printf("isMCEventSelected %d \n", isMCEventSelected);\r
+ }\r
+\r
// select MC events \r
- if(evtCuts->AcceptMCEvent(mcEvent))\r
+ if(evtCuts->AcceptMCEvent(mcEvent) && isMCEventSelected)\r
{\r
//\r
// event histograms\r
continue;\r
\r
// only charged particles\r
+ \r
+ if(!particle->GetPDG()) continue;\r
Double_t charge = particle->GetPDG()->Charge()/3.;\r
if (TMath::Abs(charge) < 0.001)\r
continue;\r
TParticle* particle = stack->Particle(label);\r
if(!particle) return;\r
\r
+ if(!particle->GetPDG()) return;\r
Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3\r
if(TMath::Abs(gq)<0.001) return;\r
Float_t gpt = particle->Pt();\r
if(mother) mother_pdg = TMath::Abs(mother->GetPdgCode()); // take abs for visualisation only\r
Int_t mech = particle->GetUniqueID(); // production mechanism\r
\r
+ if(!particle->GetPDG()) return;\r
Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3 \r
Float_t gpt = particle->Pt();\r
Float_t qgpt = particle->Pt() * gq;\r