#include "AlidNdPtEventCuts.h"\r
#include "AlidNdPtAcceptanceCuts.h"\r
\r
+#include "AliPWG0Helper.h"\r
+#include "AlidNdPtHelper.h"\r
#include "AlidNdPtCutAnalysis.h"\r
\r
using namespace std;\r
return;\r
}\r
\r
- // trigger definition\r
- Bool_t isEventTriggered = AlidNdPtHelper::IsEventTriggered(esdEvent->GetTriggerMask(), GetTrigger());\r
- //if(!isEventTriggered) printf("no MB1 trigger ... \n");\r
-\r
- // cuts\r
+ // get selection cuts\r
AlidNdPtEventCuts *evtCuts = GetEventCuts(); \r
AlidNdPtAcceptanceCuts *accCuts = GetAcceptanceCuts(); \r
AliESDtrackCuts *esdTrackCuts = GetTrackCuts(); \r
\r
- if(!evtCuts || !accCuts || !esdTrackCuts) {\r
+ if(!evtCuts || !accCuts || !esdTrackCuts) {\r
AliDebug(AliLog::kError, "cuts not available");\r
return;\r
}\r
\r
+ // trigger selection\r
+ Bool_t isEventTriggered = kTRUE;\r
+ if(evtCuts->IsTriggerRequired()) {\r
+ isEventTriggered = AliPWG0Helper::IsEventTriggered(esdEvent->GetTriggerMask(), GetTrigger());\r
+ }\r
+\r
// use MC information\r
AliHeader* header = 0;\r
AliGenEventHeader* genHeader = 0;\r
AliStack* stack = 0;\r
TArrayF vtxMC(3);\r
- AlidNdPtHelper::MCProcessType evtType = AlidNdPtHelper::kInvalidProcess;\r
+ //AlidNdPtHelper::MCProcessType evtType = AlidNdPtHelper::kInvalidProcess;\r
+ AliPWG0Helper::MCProcessType evtType = AliPWG0Helper::kInvalidProcess;\r
\r
if(IsUseMCInfo())\r
{\r
}\r
\r
// get event type (ND=0x1, DD=0x2, SD=0x4)\r
- evtType = AlidNdPtHelper::GetEventProcessType(header);\r
+ evtType = AliPWG0Helper::GetEventProcessType(header);\r
AliDebug(AliLog::kDebug+1, Form("Found process type %d", evtType));\r
\r
// get MC vertex\r
} // end bUseMC\r
\r
// get reconstructed vertex \r
- const AliESDVertex* vtxESD = AlidNdPtHelper::GetVertex(esdEvent,evtCuts,accCuts,esdTrackCuts,GetAnalysisMode(), kFALSE, kTRUE, kTRUE); // redo TPC vertex & vertex constraints\r
+ Bool_t bRedoTPCVertex = evtCuts->IsRedoTPCVertex();\r
+ Bool_t bUseConstraints = evtCuts->IsUseBeamSpotConstraint();\r
+ const AliESDVertex* vtxESD = AlidNdPtHelper::GetVertex(esdEvent,evtCuts,accCuts,esdTrackCuts,GetAnalysisMode(),kFALSE,bRedoTPCVertex,bUseConstraints); \r
if(!vtxESD) return; \r
\r
- Bool_t isRecVertex = AlidNdPtHelper::TestVertex(vtxESD, GetAnalysisMode(), kFALSE); // should be moved to AcceptEvent\r
+ Bool_t isRecVertex = AlidNdPtHelper::TestRecVertex(vtxESD, GetAnalysisMode(), kFALSE);\r
Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD) && isRecVertex;\r
\r
TObjArray *allChargedTracks=0;\r
if(isEventOK && isEventTriggered)\r
{\r
// get all charged tracks\r
- allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,vtxESD,GetAnalysisMode());\r
- //allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode());\r
+ allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode());\r
if(!allChargedTracks) return;\r
\r
Int_t entries = allChargedTracks->GetEntries();\r
FillHistograms(track, stack);\r
multAll++;\r
}\r
- } \r
\r
Double_t vRecEventHist[5] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv(),vtxESD->GetZRes(),multAll};\r
fRecEventHist->Fill(vRecEventHist);\r
Double_t vRecMCEventHist[5] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetYv()-vtxMC[1],vtxESD->GetZv()-vtxMC[2],multAll};\r
fRecMCEventHist->Fill(vRecMCEventHist);\r
}\r
+ }\r
\r
if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0;\r
}\r
// Fill ESD track and MC histograms \r
//\r
if(!esdTrack) return;\r
+ if(esdTrack->Charge() == 0.) return;\r
\r
- //Float_t q = esdTrack->Charge();\r
Float_t pt = esdTrack->Pt();\r
Float_t eta = esdTrack->Eta();\r
Float_t phi = esdTrack->Phi();\r
//\r
// Fill rec vs MC information\r
//\r
- if(!stack) return;\r
- Int_t label = TMath::Abs(esdTrack->GetLabel()); \r
- TParticle* particle = stack->Particle(label);\r
- if(!particle) return;\r
- Bool_t isPrim = stack->IsPhysicalPrimary(label);\r
+\r
+ Bool_t isPrim = kTRUE;\r
+\r
+ if(IsUseMCInfo()) {\r
+ if(!stack) return;\r
+ Int_t label = TMath::Abs(esdTrack->GetLabel()); \r
+ TParticle* particle = stack->Particle(label);\r
+ if(!particle) return;\r
+ if(particle->GetPDG() && particle->GetPDG()->Charge()==0.) return;\r
+ isPrim = stack->IsPhysicalPrimary(label);\r
+ }\r
\r
// fill histo\r
Double_t vRecMCTrackHist[10] = {nClust,chi2PerCluster,clustPerFindClust,b[0],b[1],eta,phi,pt,isKink,isPrim}; \r
Double_t minEta = accCuts->GetMinEta();\r
Double_t maxEta = accCuts->GetMaxEta()-0.00001;\r
\r
+ Double_t maxDCAr = accCuts->GetMaxDCAr();\r
+\r
//\r
// Create rec. event histograms\r
//\r
h2D->SetName("rec_xv_vs_zv");\r
aFolderObj->Add(h2D);\r
\r
- h2D = (TH2D *)fRecEventHist->Projection(0,2);\r
+ h2D = (TH2D *)fRecEventHist->Projection(3,4);\r
h2D->SetName("rec_resZv_vs_Mult");\r
aFolderObj->Add(h2D);\r
\r
+\r
+ //\r
+ // MC available\r
+ //\r
+ if(IsUseMCInfo()) {\r
+\r
//\r
// Create mc event histograms\r
//\r
h2D->SetName("rec_mc_deltaZv_vs_mult");\r
aFolderObj->Add(h2D);\r
\r
+ } // end use MC info \r
+\r
+\r
+\r
//\r
// Create rec-mc track track histograms \r
//\r
\r
// DCA cuts\r
- fRecMCTrackHist->GetAxis(3)->SetRangeUser(-0.3,0.3);\r
- fRecMCTrackHist->GetAxis(4)->SetRangeUser(-0.3,0.3);\r
+ fRecMCTrackHist->GetAxis(3)->SetRangeUser(-maxDCAr,maxDCAr);\r
+ fRecMCTrackHist->GetAxis(4)->SetRangeUser(-maxDCAr,maxDCAr);\r
+\r
+ h2D = (TH2D *)fRecMCTrackHist->Projection(7,5);\r
+ h2D->SetName("pt_vs_eta");\r
+ aFolderObj->Add(h2D);\r
+\r
fRecMCTrackHist->GetAxis(7)->SetRangeUser(minPt,maxPt); \r
\r
h2D = (TH2D *)fRecMCTrackHist->Projection(0,5);\r
aFolderObj->Add(h2D);\r
\r
//\r
+ fRecMCTrackHist->GetAxis(7)->SetRangeUser(minEta,maxEta); \r
+\r
h2D = (TH2D *)fRecMCTrackHist->Projection(0,6);\r
h2D->SetName("nClust_vs_phi");\r
aFolderObj->Add(h2D);\r
h2D->SetName("ratio_nClust_nFindableClust_vs_phi");\r
aFolderObj->Add(h2D);\r
\r
+ h2D = (TH2D *)fRecMCTrackHist->Projection(5,6);\r
+ h2D->SetName("eta_vs_phi");\r
+ aFolderObj->Add(h2D);\r
+\r
//\r
fRecMCTrackHist->GetAxis(7)->SetRangeUser(0.0,maxPt); \r
\r
h2D->SetName("ratio_nClust_nFindableClust_vs_pt");\r
aFolderObj->Add(h2D);\r
\r
+ h2D = (TH2D *)fRecMCTrackHist->Projection(6,7);\r
+ h2D->SetName("phi_vs_pt");\r
+ aFolderObj->Add(h2D);\r
+\r
+\r
// fiducial volume\r
fRecMCTrackHist->GetAxis(5)->SetRangeUser(minEta,maxEta); \r
fRecMCTrackHist->GetAxis(7)->SetRangeUser(minPt,maxPt); \r
\r
// DCA cuts\r
- fRecMCTrackHist->GetAxis(3)->SetRangeUser(-0.3,0.3);\r
- fRecMCTrackHist->GetAxis(4)->SetRangeUser(-0.3,0.3);\r
+ fRecMCTrackHist->GetAxis(3)->SetRangeUser(-maxDCAr,maxDCAr);\r
+ fRecMCTrackHist->GetAxis(4)->SetRangeUser(-maxDCAr,maxDCAr);\r
\r
h2D = (TH2D *)fRecMCTrackHist->Projection(0,1);\r
h2D->SetName("nClust_vs_chi2PerClust");\r
aFolderObj->Add(h2D);\r
\r
// DCAy cuts\r
- fRecMCTrackHist->GetAxis(3)->SetRangeUser(-10.0,10.0);\r
+ fRecMCTrackHist->GetAxis(3)->SetRange(1,fRecMCTrackHist->GetAxis(3)->GetNbins());\r
fRecMCTrackHist->GetAxis(4)->SetRangeUser(-1.0,1.0);\r
\r
// sec\r
\r
// DCAz cuts\r
fRecMCTrackHist->GetAxis(3)->SetRangeUser(-1.0,1.0);\r
- fRecMCTrackHist->GetAxis(4)->SetRangeUser(-10.0,10.0);\r
+ fRecMCTrackHist->GetAxis(4)->SetRange(1,fRecMCTrackHist->GetAxis(4)->GetNbins());\r
\r
// sec\r
fRecMCTrackHist->GetAxis(9)->SetRange(1,1);\r