3 // -----------------------------------------------
4 // Task to extract distributions
5 // for traclets paramters
6 // for a quick comparison
8 // eta, phi, deltaPhi, deltaEta, vtxX, vtxY, vtxZ, SPD GFO
9 // -----------------------------------------------
12 #include "AliTrackletsTask.h"
24 #include <AliESDEvent.h>
25 #include <AliAnalysisManager.h>
26 #include <AliESDInputHandler.h>
27 #include <AliESDHeader.h>
28 #include <AliESDVertex.h>
29 #include <AliMultiplicity.h>
31 ClassImp(AliTrackletsTask)
33 AliTrackletsTask::AliTrackletsTask() :
34 AliAnalysisTask("AliTrackletsTask", ""),
49 // Constructor. Initialization of pointers
52 // Define input and output slots here
53 DefineInput(0, TChain::Class());
54 DefineOutput(0, TList::Class());
57 //------------------------------------------------------------------
59 AliTrackletsTask::~AliTrackletsTask()
65 // histograms are in the output list and deleted when the output
66 // list is deleted by the TSelector dtor
74 //--------------------------------------------------------------------
76 void AliTrackletsTask::ConnectInputData(Option_t *)
82 Printf("AliTrackletsTask::ConnectInputData called");
84 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
87 Printf("ERROR: Could not get ESDInputHandler");
89 fESD = esdH->GetEvent();
91 TString branches("AliESDHeader Tracks AliMultiplicity");
93 // Enable only the needed branches
94 esdH->SetActiveBranches(branches);
98 //---------------------------------------------------------------------
100 void AliTrackletsTask::CreateOutputObjects()
103 // create result objects and add to output list
106 Printf("AliTrackletsTask::CreateOutputObjects");
111 fNtracks = new TH1I("fNtracks", "n. of ESD tracks", 1000, 0, 1000);
112 fOutput->Add(fNtracks);
114 fPhi = new TH1D("fPhi", "Phi (rad)", 720,0,2*TMath::Pi());
117 fEtaPhi = new TH2D("fEtaPhi", "Phi vs Eta;#eta;#phi [rad];count", 80, -4, 4, 18*5,0,2*TMath::Pi());
118 fOutput->Add(fEtaPhi);
120 fVtxX = new TH1D("fVtxX", "x SPD primary vertex; x [cm]; count", 100, -1, 1);
123 fVtxY = new TH1D("fVtxY", "y SPD primary vertex; y [cm]; count", 100, -1, 1);
126 fVtxZ = new TH1D("fVtxZ", "z SPD primary vertex; z [cm]; count", 100, -30, 30);
129 fVtx = new TH3D("fVtx", "SPD primary vertex; x [cm]; y [cm]; z [cm]; count", 100, -1, 1, 100,-1,1,100,-30,30);
132 fVtxContributors = new TH3D("fVtxContributors", "SPD primary vertex with N contributors > 0; x [cm]; y [cm]; z [cm]; count", 100, -1, 1, 100,-1,1,100,-30,30);
133 fOutput->Add(fVtxContributors);
135 fDeltaPhi = new TH1D("fDeltaPhi", "fDeltaPhi;#Delta #phi;Entries", 500, -1, 1);
136 fOutput->Add(fDeltaPhi);
138 fDeltaTheta = new TH1D("fDeltaTheta", "fDeltaTheta;#Delta #theta;Entries", 500, -0.2, 0.2);
139 fOutput->Add(fDeltaTheta);
143 //----------------------------------------------------------------------
145 void AliTrackletsTask::Exec(Option_t*)
151 PostData(0, fOutput);
154 AliError("ESD branch not available");
158 AliESDHeader* esdHeader = fESD->GetHeader();
160 Printf("ERROR: esdHeader could not be retrieved");
164 Bool_t isSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
165 if (isSelected == kFALSE) {
166 AliInfo("Event not selected by Physics analysis");
170 Int_t ntrk = fESD->GetNumberOfTracks() ;
171 fNtracks->Fill(ntrk);
173 const AliMultiplicity* mult = fESD->GetMultiplicity();
175 AliError("AliMultiplicity not found, returning");
179 Int_t nTracklets = mult->GetNumberOfTracklets();
181 for (Int_t iTracklet = 0; iTracklet < nTracklets; iTracklet++){
182 Float_t eta = mult->GetEta(iTracklet);
183 Float_t phi = mult->GetPhi(iTracklet);
184 Float_t deltaPhi = mult->GetDeltaPhi(iTracklet);
185 Float_t deltaTheta = mult->GetDeltaTheta(iTracklet);
186 if (phi < 0) phi += TMath::Pi() * 2;
188 fEtaPhi->Fill(eta, phi);
189 fDeltaPhi->Fill(deltaPhi);
190 fDeltaTheta->Fill(deltaTheta);
194 const AliESDVertex* vertexSPD = 0;
195 vertexSPD = fESD->GetPrimaryVertexSPD();
196 if (vertexSPD && (!(vertexSPD->IsFromVertexerZ() && vertexSPD->GetDispersion() > 0.02))) {
197 Double_t vtxX = vertexSPD->GetX();
198 Double_t vtxY = vertexSPD->GetY();
199 Double_t vtxZ = vertexSPD->GetZ();
203 fVtx->Fill(vtxX,vtxY,vtxZ);
204 if (vertexSPD->GetNContributors() > 0){
205 fVtxContributors->Fill(vtxX,vtxY,vtxZ);
212 //----------------------------------------------------------------------
214 void AliTrackletsTask::Terminate(Option_t *)
217 // Plotting distributions, and saving them in a file
220 fOutput = dynamic_cast<TList*> (GetOutputData(0));
222 Printf("ERROR: fOutput not available");
227 fNtracks = dynamic_cast<TH1I*>(fOutput->FindObject("fNtracks"));
228 fPhi = dynamic_cast<TH1D*>(fOutput->FindObject("fPhi"));
229 fEtaPhi = dynamic_cast<TH2D*>(fOutput->FindObject("fEtaPhi"));
230 fDeltaPhi = dynamic_cast<TH1D*>(fOutput->FindObject("fDeltaPhi"));
231 fDeltaTheta = dynamic_cast<TH1D*>(fOutput->FindObject("fDeltaTheta"));
232 fVtxX = dynamic_cast<TH1D*>(fOutput->FindObject("fVtxX"));
233 fVtxY = dynamic_cast<TH1D*>(fOutput->FindObject("fVtxY"));
234 fVtxZ = dynamic_cast<TH1D*>(fOutput->FindObject("fVtxZ"));
235 fVtx = dynamic_cast<TH3D*>(fOutput->FindObject("fVtx"));
236 fVtxContributors = dynamic_cast<TH3D*>(fOutput->FindObject("fVtxContributors"));
238 new TCanvas("Ntracks", " Ntracks ",50, 50, 550, 550) ;
240 new TCanvas("phi", " phi ",50, 50, 550, 550) ;
242 new TCanvas("etaphi", " etaphi ",50, 50, 550, 550) ;
244 new TCanvas("deltaPhi", " deltaPhi ",50, 50, 550, 550) ;
246 new TCanvas("deltaTheta", " deltaTheta ",50, 50, 550, 550) ;
248 new TCanvas("vtxX", " vtxX ",50, 50, 550, 550) ;
250 new TCanvas("vtxY", " vtxY ",50, 50, 550, 550) ;
252 new TCanvas("vtxZ", " vtxZ ",50, 50, 550, 550) ;
255 TFile* outputFile = new TFile("histograms.root", "RECREATE");
260 fDeltaTheta->Write();
265 fVtxContributors->Write();