1 /* $Id: AliPhiCorrelationsQATask.cxx 47416 2011-02-15 13:55:09Z jgrosseo $ */
3 #include "AliPhiCorrelationsQATask.h"
10 #include <AliESDVertex.h>
11 #include <AliESDEvent.h>
12 #include <AliMCEvent.h>
14 #include <AliHeader.h>
15 #include <AliAnalysisManager.h>
16 #include <AliCentrality.h>
18 #include "AliESDtrackCuts.h"
20 ClassImp(AliPhiCorrelationsQATask)
22 AliPhiCorrelationsQATask::AliPhiCorrelationsQATask(const char* opt) :
23 AliAnalysisTaskSE("AliPhiCorrelationsQATask"),
31 fCentralityCorrelation(0),
34 fUseUncheckedCentrality(kFALSE)
37 // Constructor. Initialization of pointers
40 // Define input and output slots here
41 DefineOutput(1, TList::Class());
43 AliLog::SetClassDebugLevel("AliPhiCorrelationsQATask", AliLog::kWarning);
46 AliPhiCorrelationsQATask::~AliPhiCorrelationsQATask()
52 // histograms are in the output list and deleted when the output
53 // list is deleted by the TSelector dtor
55 if (fOutput && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
61 void AliPhiCorrelationsQATask::UserCreateOutputObjects()
63 // create result objects and add to output list
65 Printf("AliPhiCorrelationsQATask::CreateOutputObjects");
66 //AliLog::SetClassDebugLevel("AliPhysicsSelection", AliLog::kDebug);
71 fCentralityCorrelation = new TH2F("fCentralityCorrelation", ";v0 centr;spd centr", 100, 0, 100.001, 100, 0, 100.001);
72 fOutput->Add(fCentralityCorrelation);
75 fOutput->Add(fEsdTrackCuts);
77 fOutput->Add(fEsdTrackCuts2);
80 // fEsdTrackCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
81 // fEsdTrackCuts->SetMinNClustersTPC(70);
83 // fEsdTrackCuts->SetMaxDCAToVertexZ();
84 // fEsdTrackCuts->SetMaxDCAToVertexXY();
85 // fEsdTrackCuts->SetDCAToVertex2D(kFALSE);
86 // fEsdTrackCuts->SetName("cuts_quality_only");
87 // fEsdTrackCuts->DefineHistograms();
88 // fOutput->Add(fEsdTrackCuts);
91 // fEsdTrackCuts2 = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
92 // fEsdTrackCuts2->SetMinNClustersTPC(70);
93 // fEsdTrackCuts2->SetName("cuts_quality_dca");
94 // fEsdTrackCuts2->DefineHistograms();
95 // fOutput->Add(fEsdTrackCuts2);
97 fGlobalTracks = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011();
98 fGlobalTracks->SetName("global_cuts");
99 fGlobalTracks->DefineHistograms();
100 fOutput->Add(fGlobalTracks);
102 fCheckITS = new AliESDtrackCuts;
103 fCheckITS->SetRequireITSRefit(kTRUE);
104 fCheckITS->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
105 AliESDtrackCuts::kAny);
106 fCheckITS->SetDCAToVertex2D(kFALSE);
107 fCheckITS->SetRequireSigmaToVertex(kFALSE);
108 fCheckITS->SetName("check_its");
109 fCheckITS->DefineHistograms();
110 fOutput->Add(fCheckITS);
112 Int_t nBins[] = { 20, 10, 200, 100 };
113 Double_t xMin[] = { 0, 0, -5, -5 };
114 Double_t xMax[] = { 20, 100, 5, 5 };
116 fDCAPrimaries = new THnF("fDCAPrimaries", ";pT;centrality;dca_xy;dca_z", 4, nBins, xMin, xMax);
117 fDCASecondaries = (THnF*) fDCAPrimaries->Clone("fDCASecondaries");
119 fOutput->Add(fDCAPrimaries);
120 fOutput->Add(fDCASecondaries);
122 PostData(1, fOutput);
125 void AliPhiCorrelationsQATask::UserExec(Option_t*)
129 //Printf("AliPhiCorrelationsQATask::UserExec");
131 AliESDEvent* esd = (AliESDEvent*) fInputEvent;
133 AliFatal("No input event");
136 const AliESDVertex* vtxESD = esd->GetPrimaryVertex();
137 const AliESDVertex *vtxSPD = esd->GetPrimaryVertexSPD();
145 if (TMath::Abs(vtx[2]) > 10)
148 AliCentrality *centralityObj = esd->GetCentrality();
149 Float_t v0Centrality = -1;
152 Float_t spdCentrality = -1;
154 if (fUseUncheckedCentrality)
156 v0Centrality = centralityObj->GetCentralityPercentileUnchecked("V0M");
157 spdCentrality = centralityObj->GetCentralityPercentileUnchecked("CL1");
161 v0Centrality = centralityObj->GetCentralityPercentile("V0M");
162 spdCentrality = centralityObj->GetCentralityPercentile("CL1");
165 fCentralityCorrelation->Fill(v0Centrality, spdCentrality);
171 stack = fMCEvent->Stack();
173 AliFatal("Stack is 0");
178 for (Int_t i=0; i<esd->GetNumberOfTracks(); i++)
180 AliESDtrack* esdTrack = esd->GetTrack(i);
184 if (!fGlobalTracks->AcceptTrack(esdTrack))
188 Bool_t accept = kFALSE;
189 if (fEsdTrackCuts->AcceptTrack(esdTrack))
192 if (fEsdTrackCuts2 && fEsdTrackCuts2->AcceptTrack(esdTrack))
200 AliESDtrack* track = AliESDtrackCuts::GetTPCOnlyTrack(esd, i);
204 // only constrain tracks above threshold
205 AliExternalTrackParam exParam;
206 // take the B-feild from the ESD, no 3D fieldMap available at this point
207 Bool_t relate = kFALSE;
208 relate = track->RelateToVertexTPC(vtxSPD,esd->GetMagneticField(),kVeryBig,&exParam);
211 // Printf("relating failed");
215 track->Set(exParam.GetX(),exParam.GetAlpha(),exParam.GetParameter(),exParam.GetCovariance());
222 //if (v0Centrality < 0)
227 esdTrack->GetImpactParameters(b, bCov);
229 Bool_t primary = kTRUE;
231 primary = stack->IsPhysicalPrimary(TMath::Abs(esdTrack->GetLabel()));
233 Double_t fillArray[4] = { esdTrack->Pt(), v0Centrality, b[0], b[1] };
236 fDCAPrimaries->Fill(fillArray);
238 fDCASecondaries->Fill(fillArray);
243 // fill histograms of second object
244 // if (!fEsdTrackCuts2->AcceptTrack(esdTrack))
247 // if (fCheckITS->AcceptTrack(esdTrack))
249 // if (!fGlobalTracks->AcceptTrack(esdTrack))
254 // create a tpc only track
255 AliESDtrack *track = AliESDtrackCuts::GetTPCOnlyTrack(esd,esdTrack->GetID());
261 // only constrain tracks above threshold
262 AliExternalTrackParam exParam;
263 // take the B-feild from the ESD, no 3D fieldMap available at this point
264 Bool_t relate = false;
265 relate = track->RelateToVertex(vtxSPD,esd->GetMagneticField(),kVeryBig,&exParam);
270 track->Set(exParam.GetX(),exParam.GetAlpha(),exParam.GetParameter(),exParam.GetCovariance());
274 track->GetImpactParameters(b2,bCov);
276 //Printf("%.2f %.2f %.2f %.2f", b[0], b2[0], b[1], b2[1]);
282 //Printf("%.2f: %d %d tracks (out of %d)", v0Centrality, centralityObj->GetQuality(), count, esd->GetNumberOfTracks());
285 void AliPhiCorrelationsQATask::Terminate(Option_t *)
289 Printf("In AliPhiCorrelationsQATask::Terminate...");
291 fOutput = dynamic_cast<TList*> (GetOutputData(1));
294 Printf("ERROR: fOutput not available");
298 fEsdTrackCuts = dynamic_cast<AliESDtrackCuts*> (fOutput->FindObject("cuts_quality_only"));
301 Printf("ERROR: fEsdTrackCuts not available");
305 fEsdTrackCuts2 = dynamic_cast<AliESDtrackCuts*> (fOutput->FindObject("cuts_quality_dca"));
308 Printf("ERROR: fEsdTrackCuts2 not available");
312 fGlobalTracks = dynamic_cast<AliESDtrackCuts*> (fOutput->FindObject("global_cuts"));
315 Printf("ERROR: fGlobalTracks not available");
319 TFile* file = TFile::Open("track_cuts.root", "RECREATE");
320 fEsdTrackCuts->SaveHistograms();
321 fEsdTrackCuts2->SaveHistograms();
322 fGlobalTracks->SaveHistograms();