\r
// Generic histograms to be corrected\r
fRecEventHist(0),\r
- fRecTrackHist(0)\r
+ fRecTrackHist(0),\r
\r
+ // Candle event histogram\r
+ fRecCandleEventMatrix(0)\r
{\r
// default constructor\r
for(Int_t i=0; i<AlidNdPtHelper::kCutSteps; i++) { \r
\r
// Generic histograms to be corrected\r
fRecEventHist(0),\r
- fRecTrackHist(0)\r
+ fRecTrackHist(0),\r
+\r
+ // Candle event histogram\r
+ fRecCandleEventMatrix(0)\r
{\r
//\r
// constructor\r
if(fRecNDEventMatrix) delete fRecNDEventMatrix; fRecNDEventMatrix=0;\r
if(fRecNSDEventMatrix) delete fRecNSDEventMatrix; fRecNSDEventMatrix=0;\r
\r
+ if(fRecCandleEventMatrix) delete fRecCandleEventMatrix; fRecCandleEventMatrix=0;\r
//\r
if(fGenTrackEventMatrix) delete fGenTrackEventMatrix; fGenTrackEventMatrix=0;\r
if(fGenTrackSDEventMatrix) delete fGenTrackSDEventMatrix; fGenTrackSDEventMatrix=0;\r
fRecNSDEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
fRecNSDEventMatrix->Sumw2();\r
\r
+ fRecCandleEventMatrix = new THnSparseF("fRecCandleEventMatrix","mcZv:multMB",2,binsEventMatrix,minEventMatrix,maxEventMatrix);\r
+ fRecCandleEventMatrix->SetBinEdges(0,binsZv);\r
+ fRecCandleEventMatrix->SetBinEdges(1,binsMult);\r
+ fRecCandleEventMatrix->GetAxis(0)->SetTitle("mcZv (cm)");\r
+ fRecCandleEventMatrix->GetAxis(1)->SetTitle("multiplicity MB");\r
+ fRecCandleEventMatrix->Sumw2();\r
+\r
// \r
// track to event corrections\r
//\r
return;\r
}\r
\r
-\r
// trigger selection\r
Bool_t isEventTriggered = kTRUE;\r
AliPhysicsSelection *trigSel = NULL;\r
\r
} // end bUseMC\r
\r
+\r
// get reconstructed vertex \r
const AliESDVertex* vtxESD = 0; \r
Bool_t isRecVertex = kFALSE;\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
TObjArray *allChargedTracks=0;\r
Int_t multAll=0, multAcc=0, multRec=0;\r
Int_t *labelsAll=0, *labelsAcc=0, *labelsRec=0;\r
Int_t highPtCount = 0;\r
\r
// check event cuts\r
- if(isEventOK && isEventTriggered)\r
+ if(isEventOK && isEventTriggered && isEventSelected)\r
{\r
// get all charged tracks\r
allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode());\r
// \r
Double_t vRecEventHist[2] = {vtxESD->GetZv(),multMBTracks};\r
fRecEventHist->Fill(vRecEventHist);\r
-\r
} \r
\r
if(IsUseMCInfo()) \r
{\r
+ if(!mcEvent) return; \r
+\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
+\r
+ Bool_t isMCEventSelected = AlidNdPtHelper::SelectMCEvent(mcEvent);\r
+ //printf("isMCEventSelected %d \n", isMCEventSelected);\r
+ if(!isMCEventSelected) return; \r
+ }\r
+\r
Double_t vMultTrueEventMatrix[2] = { multRec, multMCTrueTracks };\r
if(isEventOK && isEventTriggered) { \r
if(TMath::Abs(vtxMC[2]) < 10.0) // both Rec. and corresponding MC events must be accepted\r
//\r
// MC histograms for track efficiency studies\r
//\r
+ Int_t countRecCandle = 0;\r
for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc) \r
{\r
TParticle* particle = stack->Particle(iMc);\r
if(iMc == labelsRec[iRec]) \r
{\r
fRecTrackMatrix->Fill(vTrackMatrix);\r
-\r
+ \r
if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) ) {\r
fRecPrimTrackMatrix->Fill(vTrackMatrix);\r
//AliESDtrack *track = esdEvent->GetTrack(iRec);\r
//if(track && track->GetKinkIndex(0) < 0) \r
// printf("prim kink \n");\r
+ countRecCandle++;\r
}\r
\r
if(!prim) fRecSecTrackMatrix->Fill(vTrackMatrix);\r
}\r
}\r
}\r
+\r
+ if(countRecCandle>0) fRecCandleEventMatrix->Fill(vEventMatrix);\r
}\r
+\r
+\r
} // end bUseMC\r
\r
if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0;\r
fRecNDEventMatrix->Add(entry->fRecNDEventMatrix);\r
fRecNSDEventMatrix->Add(entry->fRecNSDEventMatrix);\r
\r
+ fRecCandleEventMatrix->Add(entry->fRecCandleEventMatrix);\r
//\r
fGenTrackEventMatrix->Add(entry->fGenTrackEventMatrix);\r
fGenTrackSDEventMatrix->Add(entry->fGenTrackSDEventMatrix);\r
THnSparseF *GetRecNDEventMatrix() const {return fRecNDEventMatrix;}
THnSparseF *GetRecNSDEventMatrix() const {return fRecNSDEventMatrix;}
+ //
+ THnSparseF *GetRecCandleEventMatrix() const {return fRecCandleEventMatrix;}
+
//
THnSparseF *GetGenTrackEventMatrix() const {return fGenTrackEventMatrix;}
THnSparseF *GetGenTrackSDEventMatrix() const {return fGenTrackSDEventMatrix;}
THnSparseF *fRecNDEventMatrix; //-> mcZv:multMB
THnSparseF *fRecNSDEventMatrix; //-> mcZv:multMB
+
//
// track-event level correction
//
THnSparseF *fRecEventHist; //-> Zv:multMB
THnSparseF *fRecTrackHist; //-> Zv:pT:eta
+ //
+ // candle events track corrections
+ //
+ THnSparseF *fRecCandleEventMatrix; //-> Zv:multMB
+
AlidNdPtAnalysis(const AlidNdPtAnalysis&); // not implemented
AlidNdPtAnalysis& operator=(const AlidNdPtAnalysis&); // not implemented
- ClassDef(AlidNdPtAnalysis,3);
+ ClassDef(AlidNdPtAnalysis,4);
};
#endif
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
return;\r
}\r
\r
+\r
// trigger selection\r
Bool_t isEventTriggered = kTRUE;\r
AliPhysicsSelection *trigSel = NULL;\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
// 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
// deta, dphi, pt1 for cosmics
THnSparseF *fCosmicsHisto; //-> deta:dphi:pt
- THnSparseF *fEventCount; //-> trig, trig + vertex
+ THnSparseF *fEventCount; //-> trig, trig + vertex, selected event
AlidNdPtCorrection(const AlidNdPtCorrection&); // not implemented
AlidNdPtCorrection& operator=(const AlidNdPtCorrection&); // not implemented
- ClassDef(AlidNdPtCorrection,2);
+ ClassDef(AlidNdPtCorrection,3);
};
#endif
//\r
\r
// TPC -> ITS matching efficiency\r
- // eta:phi:pt:isPrim:charge:isMatch\r
- Int_t binsRecMCTrackHistTPCITS[6]= { 30, 90, ptNbins, 2, 3, 2 };\r
- Double_t minRecMCTrackHistTPCITS[6]={-1.5, 0., ptMin, 0., -1., 0 };\r
- Double_t maxRecMCTrackHistTPCITS[6]={ 1.5, 2.*TMath::Pi(), ptMax, 2., 2., 2.};\r
+ // eta:phi:pt:isPrim:charge:isMatch:isTPC\r
+ Int_t binsRecMCTrackHistTPCITS[7]= { 30, 90, ptNbins, 2, 3, 2, 2 };\r
+ Double_t minRecMCTrackHistTPCITS[7]={-1.5, 0., ptMin, 0., -1., 0., 0. };\r
+ Double_t maxRecMCTrackHistTPCITS[7]={ 1.5, 2.*TMath::Pi(), ptMax, 2., 2., 2., 2. };\r
\r
- fRecMCTrackHistTPCITS = new THnSparseF("fRecMCTrackHistTPCITS","eta:phi:pt:isPrim:charge:isMatch",6,binsRecMCTrackHistTPCITS,minRecMCTrackHistTPCITS,maxRecMCTrackHistTPCITS);\r
+ fRecMCTrackHistTPCITS = new THnSparseF("fRecMCTrackHistTPCITS","eta:phi:pt:isPrim:charge:isMatch:isTPC",7,binsRecMCTrackHistTPCITS,minRecMCTrackHistTPCITS,maxRecMCTrackHistTPCITS);\r
fRecMCTrackHistTPCITS->SetBinEdges(2,binsPt);\r
fRecMCTrackHistTPCITS->GetAxis(0)->SetTitle("#eta");\r
fRecMCTrackHistTPCITS->GetAxis(1)->SetTitle("#phi (rad)");\r
fRecMCTrackHistTPCITS->GetAxis(3)->SetTitle("isPrim");\r
fRecMCTrackHistTPCITS->GetAxis(4)->SetTitle("charge");\r
fRecMCTrackHistTPCITS->GetAxis(5)->SetTitle("isMatch");\r
+ fRecMCTrackHistTPCITS->GetAxis(6)->SetTitle("isTPC");\r
fRecMCTrackHistTPCITS->Sumw2();\r
\r
// ITS -> TPC matching efficiency\r
}\r
\r
// get selection cuts\r
- AlidNdPtEventCuts *evtCuts = GetEventCuts(); \r
+ AlidNdPtEventCuts *evtCuts = GetEventCuts(); \r
AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); \r
- AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); \r
+ AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); \r
\r
if(!evtCuts || !accCuts || !esdTrackCuts) {\r
AliDebug(AliLog::kError, "cuts not available");\r
return;\r
}\r
\r
+ \r
+\r
// trigger selection\r
Bool_t isEventTriggered = kTRUE;\r
\r
allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode());\r
if(!allChargedTracks) return;\r
\r
- Bool_t isMatch = kFALSE;\r
Int_t entries = allChargedTracks->GetEntries();\r
+ Bool_t isTPC = kFALSE;\r
+ Bool_t isMatch = kFALSE;\r
\r
// TPC -> ITS prolongation efficiency\r
for(Int_t iTrack=0; iTrack<entries;++iTrack) \r
AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(iTrack);\r
if(!track) continue;\r
\r
+ isTPC = kFALSE;\r
+\r
if(track->Charge()==0) continue;\r
- if (!track->GetTPCInnerParam()) continue;\r
+ if(!track->GetTPCInnerParam()) continue;\r
+ if(!(track->GetStatus() & AliESDtrack::kTPCrefit)) continue;\r
\r
// Get TPC only tracks (must be deleted by user) \r
AliESDtrack* tpcTrack = AliESDtrackCuts::GetTPCOnlyTrack(esdEvent,iTrack);\r
if(!tpcTrack) continue;\r
+ if(!tpcTrack->RelateToVertex(vtxESD,esdEvent->GetMagneticField(),100.)) { delete tpcTrack; continue; } \r
\r
// check loose cuts for TPC tracks\r
if(!esdTrackCuts->AcceptTrack(tpcTrack)) { delete tpcTrack; continue; } \r
\r
- if(track->GetNcls(0) >= 2 && (track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1))) \r
+ isTPC = kTRUE;\r
+ isMatch = kFALSE;\r
+ if( (track->GetStatus()&AliESDtrack::kITSrefit) && \r
+ (track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) ) \r
{\r
isMatch = kTRUE;\r
}\r
\r
//\r
- FillHistograms(tpcTrack, stack, isMatch, 0);\r
+ FillHistograms(tpcTrack, stack, isMatch, isTPC, kFALSE);\r
if(tpcTrack) delete tpcTrack;\r
} \r
\r
if(!track->HasPointOnITSLayer(0) && !track->HasPointOnITSLayer(1)) continue;\r
\r
// Check matching with TPC only track\r
- isMatch = kFALSE;\r
for(Int_t jTrack=0; jTrack<entries;++jTrack) \r
{\r
+ isMatch = kFALSE;\r
+\r
if(iTrack==jTrack) continue;\r
\r
AliESDtrack *track2 = (AliESDtrack*)allChargedTracks->At(jTrack);\r
if(!track2) continue;\r
if(track2->Charge()==0) continue;\r
- if (!track2->GetTPCInnerParam()) continue;\r
+ if(!track2->GetTPCInnerParam()) continue;\r
+ if(!(track2->GetStatus() & AliESDtrack::kTPCrefit)) continue;\r
\r
// Get TPC only tracks (must be deleted by user) \r
AliESDtrack* tpcTrack2 = AliESDtrackCuts::GetTPCOnlyTrack(esdEvent, jTrack);\r
if(!tpcTrack2) continue;\r
+ if(!tpcTrack2->RelateToVertex(vtxESD,esdEvent->GetMagneticField(),100.)) { delete tpcTrack2; continue; } \r
\r
// check loose cuts for TPC tracks\r
- //if(!esdTrackCuts->AcceptTrack(tpcTrack2)) { delete tpcTrack2; continue; }\r
+ if(!esdTrackCuts->AcceptTrack(tpcTrack2)) { delete tpcTrack2; continue; }\r
\r
// check matching\r
if (TMath::Abs(track->GetY() - tpcTrack2->GetY()) > 3) { delete tpcTrack2; continue; }\r
}\r
\r
//\r
- Bool_t isITSTPC = kTRUE;\r
- FillHistograms(track, stack, isMatch, isITSTPC);\r
+ FillHistograms(track, stack, isMatch, kFALSE, kTRUE);\r
} \r
}\r
\r
}\r
\r
//_____________________________________________________________________________\r
-void AlidNdPtEfficiency::FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack, const Bool_t isMatch, const Bool_t isITSTPC) const\r
+void AlidNdPtEfficiency::FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack, const Bool_t isMatch, const Bool_t isTPC, const Bool_t isITSTPC) const\r
{\r
//\r
// Fill ESD track and MC histograms \r
\r
// fill histo\r
Double_t vRecMCTrackHist[6] = { eta,phi,pt,isPrim,charge,isMatch }; \r
+ Double_t vRecMCTrackHistTPCITS[7] = { eta,phi,pt,isPrim,charge,isMatch,isTPC }; \r
\r
if(isITSTPC) {\r
fRecMCTrackHistITSTPC->Fill(vRecMCTrackHist);\r
}\r
else {\r
- fRecMCTrackHistTPCITS->Fill(vRecMCTrackHist);\r
+ fRecMCTrackHistTPCITS->Fill(vRecMCTrackHistTPCITS);\r
}\r
}\r
\r
//\r
\r
//eff vs eta\r
+ fRecMCTrackHistTPCITS->GetAxis(6)->SetRange(2,2); \r
h1Dall = (TH1D *)fRecMCTrackHistTPCITS->Projection(0);\r
fRecMCTrackHistTPCITS->GetAxis(5)->SetRange(2,2); \r
h1D = (TH1D *)fRecMCTrackHistTPCITS->Projection(0);\r
h1Dc->Divide(h1Dall);\r
aFolderObj->Add(h1Dc);\r
fRecMCTrackHistTPCITS->GetAxis(5)->SetRange(1,2); \r
+ fRecMCTrackHistTPCITS->GetAxis(6)->SetRange(1,2); \r
\r
//eff vs phi\r
+ fRecMCTrackHistTPCITS->GetAxis(6)->SetRange(2,2); \r
fRecMCTrackHistTPCITS->GetAxis(0)->SetRangeUser(-0.8, 0.799); \r
h1Dall = (TH1D *)fRecMCTrackHistTPCITS->Projection(1);\r
fRecMCTrackHistTPCITS->GetAxis(5)->SetRange(2,2); \r
h1Dc->Divide(h1Dall);\r
aFolderObj->Add(h1Dc);\r
fRecMCTrackHistTPCITS->GetAxis(5)->SetRange(1,2); \r
+ fRecMCTrackHistTPCITS->GetAxis(6)->SetRange(1,2); \r
\r
//eff vs pT\r
+ fRecMCTrackHistTPCITS->GetAxis(6)->SetRange(2,2); \r
fRecMCTrackHistTPCITS->GetAxis(0)->SetRangeUser(-0.8, 0.799); \r
h1Dall = (TH1D *)fRecMCTrackHistTPCITS->Projection(2);\r
fRecMCTrackHistTPCITS->GetAxis(5)->SetRange(2,2); \r
h1Dc->Divide(h1Dall);\r
aFolderObj->Add(h1Dc);\r
fRecMCTrackHistTPCITS->GetAxis(5)->SetRange(1,2); \r
+ fRecMCTrackHistTPCITS->GetAxis(6)->SetRange(1,2); \r
\r
\r
//\r
- // TPC->ITS efficiency\r
+ // ITS->TPC efficiency\r
//\r
\r
fRecMCTrackHistITSTPC->GetAxis(0)->SetRangeUser(-1.5, 1.499); \r
TFolder *CreateFolder(TString folder = "folderdNdPtAnalysis",TString title = "Analysed dNdPt histograms");
// Fill histograms
- void FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack, const Bool_t isMatch, const Bool_t isITSTPC) const;
+ void FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack, const Bool_t isMatch, const Bool_t isTPC,const Bool_t isITSTPC) const;
// Getters
THnSparseF *GetRecMCTrackHistTPCITS() const {return fRecMCTrackHistTPCITS;}
//
//TPC -> ITS matching efficiency
- THnSparseF *fRecMCTrackHistTPCITS; //-> eta:phi:pt:isPrim:charge:isMatch
+ THnSparseF *fRecMCTrackHistTPCITS; //-> eta:phi:pt:isPrim:charge:isMatch:isTPC
//ITS -> TPC matching efficiency
THnSparseF *fRecMCTrackHistITSTPC; //-> eta:phi:pt:isPrim:charge:isMatch
AlidNdPtEfficiency(const AlidNdPtEfficiency&); // not implemented
AlidNdPtEfficiency& operator=(const AlidNdPtEfficiency&); // not implemented
- ClassDef(AlidNdPtEfficiency,1);
+ ClassDef(AlidNdPtEfficiency,2);
};
#endif
, fSigmaMeanZv(0)
, fRedoTPCVertex(kTRUE)
, fUseBeamSpotConstraint(kTRUE)
+, fEventSelectedRequired(kFALSE)
{
// default constructor
fSigmaMeanXv = sxv; fSigmaMeanYv = syv; fSigmaMeanZv = szv;\r
}\r
\r
+\r
void SetRedoTPCVertex(const Bool_t redo = kTRUE) {fRedoTPCVertex = redo;}\r
void SetUseBeamSpotConstraint(const Bool_t useConstr = kTRUE) {fUseBeamSpotConstraint = useConstr;}\r
+ void SetEventSelectedRequired(const Bool_t evtSel = kTRUE) {fEventSelectedRequired = evtSel;} \r
+\r
\r
// getters \r
+ Bool_t IsEventSelectedRequired() const {return fEventSelectedRequired;}\r
Bool_t IsTriggerRequired() const {return fTriggerRequired;}\r
Bool_t IsRecVertexRequired() const {return fRecVertexRequired;}\r
Int_t GetEventProcessType() const {return fEventProcessType;} \r
Bool_t IsRedoTPCVertex() const {return fRedoTPCVertex;}\r
Bool_t IsUseBeamSpotConstraint() const {return fUseBeamSpotConstraint;}\r
\r
+\r
// cuts init function\r
void Init();\r
\r
Bool_t fRedoTPCVertex; // redo vertex\r
Bool_t fUseBeamSpotConstraint; // use beam spot contraints \r
\r
+ Bool_t fEventSelectedRequired; // event with at least one track (pT>0.5 GeV, |eta|<0.8) required\r
+\r
AlidNdPtEventCuts(const AlidNdPtEventCuts&); // not implemented\r
AlidNdPtEventCuts& operator=(const AlidNdPtEventCuts&); // not implemented\r
\r
- ClassDef(AlidNdPtEventCuts, 1)\r
+ ClassDef(AlidNdPtEventCuts, 2)\r
};\r
\r
#endif // ALIDNDPTEVENTCUTS_H\r
return track;
}
+//_____________________________________________________________________________
+Bool_t AlidNdPtHelper::SelectEvent(const AliESDEvent* const esdEvent, AliESDtrackCuts* const esdTrackCuts) {
+// select events with at least
+// one reconstructed primary track in acceptance
+// pT>0.5 GeV/c, |eta|<0.8 for cross section studies
+
+if(!esdEvent) return kFALSE;
+if(!esdTrackCuts) return kFALSE;
+
+ AliESDtrack *track=0;
+ Int_t count = 0;
+ for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++)
+ {
+ track = esdEvent->GetTrack(iTrack);
+ if(!track) continue;
+ if(track->Charge()==0) continue;
+ if(!esdTrackCuts->AcceptTrack(track)) continue;
+ if(track->Pt() < 0.5) continue;
+ if(TMath::Abs(track->Eta()) > 0.8) continue;
+
+ count++;
+ }
+
+ if(count > 0) return kTRUE;
+ else return kFALSE;
+
+return kFALSE;
+}
+
+//_____________________________________________________________________________
+Bool_t AlidNdPtHelper::SelectMCEvent(AliMCEvent* const mcEvent) {
+//
+// select events with at least
+// one prompt (MC primary) track in acceptance
+// pT>0.5 GeV/c, |eta|<0.8 for cross section studies
+//
+
+if(!mcEvent) return kFALSE;
+AliStack* stack = mcEvent->Stack();
+if(!stack) return kFALSE;
+
+ Int_t count = 0;
+ for (Int_t iMc = 0; iMc < stack->GetNtrack(); ++iMc)
+ {
+ TParticle* particle = stack->Particle(iMc);
+ if (!particle) continue;
+
+ // only charged particles
+ if(!particle->GetPDG()) continue;
+ Double_t charge = particle->GetPDG()->Charge()/3.;
+ if(charge == 0) continue;
+
+ // physical primary
+ Bool_t prim = stack->IsPhysicalPrimary(iMc);
+ if(!prim) continue;
+
+ if(particle->Pt() < 0.5) continue;
+ if(TMath::Abs(particle->Eta()) > 0.8) continue;
+
+ count++;
+ }
+
+ if(count > 0) return kTRUE;
+ else return kFALSE;
+
+return kFALSE;
+}
+
//_____________________________________________________________________________
Int_t AlidNdPtHelper::GetTPCMBTrackMult(const AliESDEvent *const esdEvent,const AlidNdPtEventCuts *const evtCuts, const AlidNdPtAcceptanceCuts *const accCuts,const AliESDtrackCuts *const trackCuts)
{
static Bool_t IsGoodImpPar(const AliESDtrack *const track);
static Int_t ConvertPdgToPid(const TParticle *const particle);
+ static Bool_t SelectEvent(const AliESDEvent* const aEsd, AliESDtrackCuts* const esdTrackCuts);
+ static Bool_t SelectMCEvent(AliMCEvent* const mcEvent);
+
static TObjArray *GetAllChargedTracks(AliESDEvent *const esdEvent, AnalysisMode analysisMode);
static TH1F* MakeResol(TH2F * const his, Int_t integ, Bool_t type, Bool_t drawBins, Int_t minHistEntries);