9 #include "AliESDtrackCuts.h"
10 #include "AliESDpid.h"
11 #include "AliESDVertex.h"
14 #include "AliAnalysisTask.h"
15 #include "AliAnalysisManager.h"
16 #include "AliCentrality.h"
17 #include "AliESDEvent.h"
18 #include "AliESDInputHandler.h"
20 #include "AliMCEventHandler.h"
21 #include "AliMCEvent.h"
24 #include "AliAnalysisTaskAntiHe4.h"
27 ///////////////////////////////////////////////////////////
29 // Analysis for the observation of anti-alpha particles. //
31 ///////////////////////////////////////////////////////////
36 ClassImp(AliAnalysisTaskAntiHe4)
38 //________________________________________________________________________
39 AliAnalysisTaskAntiHe4::AliAnalysisTaskAntiHe4()
40 : AliAnalysisTaskSE(),
43 fHistCentralityClass10(0),
44 fHistCentralityPercentile(0),
46 fHistTriggerStatAfterEventSelection(0),
59 fBBParametersLightParticles(),
60 fBBParametersNuclei(),
64 fESDtrackCutsSharp(0),
68 fHistHelium4PtGenPrim(0),
69 fHistHelium4PtGenSec(0),
70 fHistHelium4PtGenEta(0),
71 fHistHelium4PtGenPrimEta(0),
72 fHistAntiHelium4PtGen(0),
73 fHistAntiHelium4PtGenPrim(0),
74 fHistAntiHelium4PtGenSec(0),
75 fHistAntiHelium4PtGenEta(0),
77 fHistHelium4PtAsoPrim(0),
78 fHistHelium4PtAsoSec(0),
79 fHistAntiHelium4PtAso(0),
83 // default Constructor
86 // Define input and output slots here
89 //________________________________________________________________________
90 AliAnalysisTaskAntiHe4::AliAnalysisTaskAntiHe4(const char *name)
91 : AliAnalysisTaskSE(name),
94 fHistCentralityClass10(0),
95 fHistCentralityPercentile(0),
97 fHistTriggerStatAfterEventSelection(0),
102 fGraphAlphaSignal(0),
110 fBBParametersLightParticles(),
111 fBBParametersNuclei(),
115 fESDtrackCutsSharp(0),
118 fHistHelium4PtGen(0),
119 fHistHelium4PtGenPrim(0),
120 fHistHelium4PtGenSec(0),
121 fHistHelium4PtGenEta(0),
122 fHistHelium4PtGenPrimEta(0),
123 fHistAntiHelium4PtGen(0),
124 fHistAntiHelium4PtGenPrim(0),
125 fHistAntiHelium4PtGenSec(0),
126 fHistAntiHelium4PtGenEta(0),
127 fHistHelium4PtAso(0),
128 fHistHelium4PtAsoPrim(0),
129 fHistHelium4PtAsoSec(0),
130 fHistAntiHelium4PtAso(0),
136 // Define input and output slots here
137 // Input slot #0 works with a TChain
138 DefineInput(0, TChain::Class());
139 // Output slot #0 writes into a TH1 container
140 DefineOutput(1, TObjArray::Class());
141 DefineOutput(2, TTree::Class());
143 // cuts for candidates
145 fESDtrackCuts = new AliESDtrackCuts("AliESDtrackCuts","AliESDtrackCuts");
147 fESDtrackCuts->SetAcceptKinkDaughters(kFALSE);
148 fESDtrackCuts->SetMinNClustersTPC(70);
149 fESDtrackCuts->SetMaxChi2PerClusterTPC(5);
150 fESDtrackCuts->SetMaxDCAToVertexXY(3);
151 fESDtrackCuts->SetMaxDCAToVertexZ(2);
152 fESDtrackCuts->SetRequireTPCRefit(kTRUE);
153 //fESDtrackCuts->SetRequireITSRefit(kTRUE);
154 fESDtrackCuts->SetMinNClustersITS(2);
155 fESDtrackCuts->SetEtaRange(-0.8,0.8);
157 // cuts for final plots
159 fESDtrackCutsSharp = new AliESDtrackCuts("AliESDtrackCuts","AliESDtrackCuts");
160 fESDtrackCutsSharp->SetAcceptKinkDaughters(kFALSE);
161 fESDtrackCutsSharp->SetMinNClustersTPC(80);
162 fESDtrackCutsSharp->SetMaxChi2PerClusterITS(10);// TO BE INVESTIGATED !!!!!!!!!!!!!!
163 fESDtrackCutsSharp->SetMaxChi2PerClusterTPC(5);
164 fESDtrackCutsSharp->SetRequireTPCRefit(kTRUE);
165 fESDtrackCutsSharp->SetRequireITSRefit(kTRUE);
166 fESDtrackCutsSharp->SetMinNClustersITS(2);
167 fESDtrackCutsSharp->SetMaxDCAToVertexXY(0.1);
168 fESDtrackCutsSharp->SetMaxDCAToVertexZ(0.5);
169 fESDtrackCutsSharp->SetEtaRange(-0.8,0.8);
171 //ESD Track cuts from TestFilterRawTask
172 /* fESDtrackCuts = new AliESDtrackCuts("AliESDtrackCuts","AliESDtrackCuts");
173 fESDtrackCuts->SetMinNClustersTPC(80);
174 fESDtrackCuts->SetMinNClustersITS(2);
175 fESDtrackCuts->SetAcceptKinkDaughters(kFALSE);
176 fESDtrackCuts->SetMaxChi2PerClusterTPC(5);
177 fESDtrackCuts->SetRequireTPCRefit(kTRUE);
178 fESDtrackCuts->SetRequireITSRefit(kTRUE);
179 fESDtrackCuts->SetEtaRange(-1,1);
180 fESDtrackCuts->SetMaxDCAToVertexXY(1);
181 fESDtrackCuts->SetMaxDCAToVertexZ(2);
182 //test strickter cuts
183 //fESDtrackCuts->SetMaxDCAToVertexXY(0.1);
184 //fESDtrackCuts->SetMaxDCAToVertexZ(0.5);
185 //fESDtrackCuts->SetEtaRange(-0.8,0.8);
192 //________________________________________________________________________
193 void AliAnalysisTaskAntiHe4::UserCreateOutputObjects()
198 //histogram to count number of events
200 fHistCentralityClass10 = new TH1F("fHistCentralityClass10", "centrality with class10", 11, -0.5, 10.5);
201 fHistCentralityClass10->GetXaxis()->SetTitle("Centrality");
202 fHistCentralityClass10->GetYaxis()->SetTitle("Entries");
204 fHistCentralityPercentile = new TH1F("fHistCentralityPercentile", "centrality with percentile", 101, -0.1, 100.1);
205 fHistCentralityPercentile->GetXaxis()->SetTitle("Centrality");
206 fHistCentralityPercentile->GetYaxis()->SetTitle("Entries");
208 //trigger statitics histogram
210 fHistTriggerStat = new TH1F("fHistTriggerStat","Trigger statistics", fNTriggers,-0.5,fNTriggers-0.5);
211 const Char_t* aTriggerNames[] = { "kMB", "kCentral", "kSemiCentral", "kEMCEJE", "kEMCEGA" };
212 for ( Int_t ii=0; ii < fNTriggers; ii++ )
213 fHistTriggerStat->GetXaxis()->SetBinLabel(ii+1, aTriggerNames[ii]);
215 fHistTriggerStatAfterEventSelection = new TH1F("fHistTriggerStatAfterEventSelection","Trigger statistics after event selection", fNTriggers,-0.5,fNTriggers-0.5);
216 for ( Int_t ii=0; ii < fNTriggers; ii++ )
217 fHistTriggerStatAfterEventSelection->GetXaxis()->SetBinLabel(ii+1, aTriggerNames[ii]);
220 fHistDEDx= new TH3F("fHistDEDx","DEDx",1000,0.01,100,1000,1,2000,2,-2,2);
221 BinLogAxis(fHistDEDx, 0);
222 BinLogAxis(fHistDEDx, 1);
223 fHistDEDx->GetXaxis()->SetTitle("p_{tot}/sign");
224 fHistDEDx->GetYaxis()->SetTitle("TPC signal");
226 fHistDeDx = new TH2F("fHistDeDx", "dE/dx", 1000, 0.1, 6.0, 1000, 0.0, 1000);
227 fHistDeDx->GetYaxis()->SetTitle("TPC dE/dx signal (a.u.)");
228 fHistDeDx->GetXaxis()->SetTitle("#frac{p}{z} (GeV/c)");
229 BinLogAxis(fHistDeDx);
231 fHistDeDxRegion = new TH3F("fHistDeDxRegion", "dE/dx", 400, 0., 6.0, 300, 0., 3., 4, -0.5, 3.5);
232 fHistDeDxRegion->GetYaxis()->SetTitle("TPC dE/dx signal (a.u.)");
233 fHistDeDxRegion->GetXaxis()->SetTitle("#frac{p}{z} (GeV/c)");
235 fHistDeDxSharp = new TH2F("fHistDeDxSharp", "dE/dx", 1000, 0.1, 6.0, 1000, 0.0, 1000);
236 fHistDeDxSharp->GetYaxis()->SetTitle("TPC dE/dx signal (a.u.)");
237 fHistDeDxSharp->GetXaxis()->SetTitle("#frac{p}{z} (GeV/c)");
238 BinLogAxis(fHistDeDxSharp);
241 fHistTOF3D = new TH3F("fHistTOF3D","mass determination from TOF",400,0.25,4.5,2,-0.5,1.5,2,-1,1);
243 fHistTOF2D = new TH2F("fHistTOF2D", "TOF2D", 500, 0.0, 10., 2250, 0.2, 1.1);
244 fHistTOF2D->GetYaxis()->SetTitle("#beta");
245 fHistTOF2D->GetXaxis()->SetTitle("p (GeV/c)");
247 fHistTOFnuclei = new TH2F("fHistTOFnuclei", "TOF", 500, 0.0, 10., 2250, 0.7, 1.);
248 fHistTOFnuclei->GetYaxis()->SetTitle("#beta");
249 fHistTOFnuclei->GetXaxis()->SetTitle("#frac{p}{z} (GeV/c)");
252 fHistAlpha = new TH1F("fHistAlpha", "Anti-Alpha", 22, 1.12, 4.31);
253 fHistAlpha->GetYaxis()->SetTitle("Counts");
254 fHistAlpha->GetXaxis()->SetTitle("#frac{m^{2}}{z^{2}} (GeV^{2}/c^{4})");
256 fHistAlphaSignal = new TH1F("fHistAlphaSignal", "Anti-Alpha", 22, 1.12, 4.31);
257 fHistAlphaSignal->GetYaxis()->SetTitle("Counts");
258 fHistAlphaSignal->GetXaxis()->SetTitle("#frac{m^{2}}{z^{2}} (GeV^{2}/c^{4})");
260 fGraphAlphaSignal = new TGraph(20);
263 // (0.) dca, (1.) sign, (2.) particle Type, (3.) p_tot
265 TString axisNameMult[4]={"dca","sign","particleType","ptot"};
266 TString axisTitleMult[4]={"dca","sign","particleType","ptot"};
267 const Int_t kDcaBins = 76;
268 Double_t binsDca[kDcaBins+1] = {-3,-2.85,-2.7,-2.55,-2.4,-2.25,-2.1,-1.95,-1.8,-1.65,-1.5,-1.35,-1.2,-1.05,-0.9,-0.75,-0.6,-0.45,-0.3,-0.285,-0.27,-0.255,-0.24,-0.225,-0.21,-0.195,-0.18,-0.165,-0.15,-0.135,-0.12,-0.105,-0.09,-0.075,-0.06,-0.045,-0.03,-0.015,0,0.015,0.03,0.045,0.06,0.075,0.09,0.105,0.12,0.135,0.15,0.165,0.18,0.195,0.21,0.225,0.24,0.255,0.27,0.285,0.3,0.45,0.6,0.75,0.9,1.05,1.2,1.35,1.5,1.65,1.8,1.95,2.1,2.25,2.4,2.55,2.7,2.85,3};
270 // (0.) dca, (1.) sign, (2.) particle Type, (3.) p_tot
271 Int_t binsAntiAlpha[4] = {77, 2, 4, 100};
272 Double_t xminAntiAlpha[4] = {-3, -2, -0.5, 0};
273 Double_t xmaxAntiAlpha[4] = { 3, 2, 3.5, 6};
275 fAntiAlpha = new THnF("fAntiAlpha", "AntiAlpha; (0.) dca, (1.) sign, (2.) particle Type, (3.) p_tot", 4, binsAntiAlpha, xminAntiAlpha, xmaxAntiAlpha);
277 fAntiAlpha->GetAxis(0)->Set(kDcaBins, binsDca);
278 for (Int_t iaxis=0; iaxis<4;iaxis++){
279 fAntiAlpha->GetAxis(iaxis)->SetName(axisNameMult[iaxis]);
280 fAntiAlpha->GetAxis(iaxis)->SetTitle(axisTitleMult[iaxis]);
284 //Create histograms for MC
285 //generated histogramms
286 fHistHelium4PtGen = new TH1F("fHistHelium4PtGen", "Generated ^{4}He", 200, 0.0, 10.0);
287 fHistHelium4PtGen->GetYaxis()->SetTitle("Counts");
288 fHistHelium4PtGen->GetXaxis()->SetTitle("p_{T} (GeV/c)");
290 fHistHelium4PtGenPrim = new TH1F("fHistHelium4PtGenPrim", "Primary generated ^{4}He", 200, 0.0, 10.0);
291 fHistHelium4PtGenPrim->GetYaxis()->SetTitle("Counts");
292 fHistHelium4PtGenPrim->GetXaxis()->SetTitle("p_{T} (GeV/c)");
294 fHistHelium4PtGenSec = new TH1F("fHistHelium4PtGenSec", "Secondary generated ^{4}He", 200, 0.0, 10.0);
295 fHistHelium4PtGenSec->GetYaxis()->SetTitle("Counts");
296 fHistHelium4PtGenSec->GetXaxis()->SetTitle("p_{T} (GeV/c)");
298 fHistHelium4PtGenEta = new TH1F("fHistHelium4PtGenEta", "Generated ^{4}He in #eta < 0.8", 200, 0.0, 10.0);
299 fHistHelium4PtGenEta->GetYaxis()->SetTitle("Counts");
300 fHistHelium4PtGenEta->GetXaxis()->SetTitle("p_{T} (GeV/c)");
302 fHistHelium4PtGenPrimEta = new TH1F("fHistHelium4PtGenPrimEta", "Primary generated ^{4}He in #eta < 0.8", 200, 0.0, 10.0);
303 fHistHelium4PtGenPrimEta->GetYaxis()->SetTitle("Counts");
304 fHistHelium4PtGenPrimEta->GetXaxis()->SetTitle("p_{T} (GeV/c)");
306 fHistAntiHelium4PtGen = new TH1F("fHistAntiHelium4PtGen", "Generated #bar{^{4}He}", 200, 0.0, 10.0);
307 fHistAntiHelium4PtGen->GetYaxis()->SetTitle("Counts");
308 fHistAntiHelium4PtGen->GetXaxis()->SetTitle("p_{T} (GeV/c)");
310 fHistAntiHelium4PtGenPrim = new TH1F("fHistAntiHelium4PtGenPrim", "Primary generated #bar{^{4}He}", 200, 0.0, 10.0);
311 fHistAntiHelium4PtGenPrim->GetYaxis()->SetTitle("Counts");
312 fHistAntiHelium4PtGenPrim->GetXaxis()->SetTitle("p_{T} (GeV/c)");
314 fHistAntiHelium4PtGenSec = new TH1F("fHistAntiHelium4PtGenSec", "Secondary generated #bar{^{4}He}", 200, 0.0, 10.0);
315 fHistAntiHelium4PtGenSec->GetYaxis()->SetTitle("Counts");
316 fHistAntiHelium4PtGenSec->GetXaxis()->SetTitle("p_{T} (GeV/c)");
318 fHistAntiHelium4PtGenEta = new TH1F("fHistAntiHelium4PtGenEta", "Generated #bar{^{4}He} in #eta < 0.8", 200, 0.0, 10.0);
319 fHistAntiHelium4PtGenEta->GetYaxis()->SetTitle("Counts");
320 fHistAntiHelium4PtGenEta->GetXaxis()->SetTitle("p_{T} (GeV/c)");
322 //associated histograms
323 fHistHelium4PtAso = new TH1F("fHistHelium4PtAso", "Associated ^{4}He", 200, 0.0, 10.0);
324 fHistHelium4PtAso->GetYaxis()->SetTitle("Counts");
325 fHistHelium4PtAso->GetXaxis()->SetTitle("p_{T} (GeV/c)");
327 fHistHelium4PtAsoPrim = new TH1F("fHistHelium4PtAsoPrim", "Associated prim ^{4}He", 200, 0.0, 10.0);
328 fHistHelium4PtAsoPrim->GetYaxis()->SetTitle("Counts");
329 fHistHelium4PtAsoPrim->GetXaxis()->SetTitle("p_{T} (GeV/c)");
331 fHistHelium4PtAsoSec = new TH1F("fHistHelium4PtAsoSec", "Associated sec ^{4}He", 200, 0.0, 10.0);
332 fHistHelium4PtAsoSec->GetYaxis()->SetTitle("Counts");
333 fHistHelium4PtAsoSec->GetXaxis()->SetTitle("p_{T} (GeV/c)");
335 fHistAntiHelium4PtAso = new TH1F("fHistAntiHelium4PtAso", "Associated #bar{^{4}He}", 200, 0.0, 10.0);
336 fHistAntiHelium4PtAso->GetYaxis()->SetTitle("Counts");
337 fHistAntiHelium4PtAso->GetXaxis()->SetTitle("p_{T} (GeV/c)");
341 fOutputContainer = new TObjArray(1);
342 fOutputContainer->SetOwner(kTRUE);
343 fOutputContainer->SetName(GetName());
344 fOutputContainer->Add(fHistCentralityClass10);
345 fOutputContainer->Add(fHistCentralityPercentile);
346 fOutputContainer->Add(fHistTriggerStat);
347 fOutputContainer->Add(fHistTriggerStatAfterEventSelection);
348 fOutputContainer->Add(fHistDEDx);
349 fOutputContainer->Add(fHistDeDx);
350 fOutputContainer->Add(fHistDeDxRegion);
351 fOutputContainer->Add(fHistDeDxSharp);
352 fOutputContainer->Add(fAntiAlpha);
353 fOutputContainer->Add(fHistAlpha);
354 fOutputContainer->Add(fHistAlphaSignal);
355 fOutputContainer->Add(fGraphAlphaSignal);
356 fOutputContainer->Add(fHistTOF3D);
357 fOutputContainer->Add(fHistTOF2D);
358 fOutputContainer->Add(fHistTOFnuclei);
359 fOutputContainer->Add(fHistHelium4PtGen);
360 fOutputContainer->Add(fHistHelium4PtGenPrim);
361 fOutputContainer->Add(fHistHelium4PtGenSec);
362 fOutputContainer->Add(fHistHelium4PtGenEta);
363 fOutputContainer->Add(fHistHelium4PtGenPrimEta);
364 fOutputContainer->Add(fHistAntiHelium4PtGen);
365 fOutputContainer->Add(fHistAntiHelium4PtGenPrim);
366 fOutputContainer->Add(fHistAntiHelium4PtGenSec);
367 fOutputContainer->Add(fHistAntiHelium4PtGenEta);
368 fOutputContainer->Add(fHistHelium4PtAso);
369 fOutputContainer->Add(fHistHelium4PtAsoPrim);
370 fOutputContainer->Add(fHistHelium4PtAsoSec);
371 fOutputContainer->Add(fHistAntiHelium4PtAso);
374 //------------ Tree and branch definitions ----------------//
375 fTree = new TTree("tree", " alpha tree");
377 //------------ Event variables ------------//
378 fTree->Branch("Name",Name,"Name/C");
379 fTree->Branch("Evnt",&evnt, "evnt/I");
380 fTree->Branch("itrk", &itrk, "itrk/I");
382 //-------------------------------------------//
383 //----------- Track variables --------------//
385 fTree->Branch("TrkPtot",TrkPtot,"TrkPtot[itrk]/F");
386 fTree->Branch("TPCPtot",TPCPtot,"TPCPtot[itrk]/F");
387 fTree->Branch("DeDx",DeDx,"DeDx[itrk]/F");
388 fTree->Branch("Sign",Sign,"Sign[itrk]/F");
389 fTree->Branch("DCAXY",DCAXY,"DCAXY[itrk]/F");
390 fTree->Branch("DCAZ",DCAZ,"DCAZ[itrk]/F");
391 fTree->Branch("ITSnCluster",ITSnCluster,"ITSnCluster[itrk]/F");
392 fTree->Branch("TPCNsignal",TPCNsignal,"TPCNsignal[itrk]/F");
393 fTree->Branch("Mass",Mass,"Mass[itrk]/F");
395 fTree->Branch("ITSRefit",ITSRefit,"ITSRefit[itrk]/F");
396 fTree->Branch("TOFtime",TOFtime,"TOFtime[itrk]/F");
397 fTree->Branch("TOFRefit",TOFRefit,"TOFRefit[itrk]/F");
398 fTree->Branch("TOFout",TOFout,"TOFout[itrk]/F");
400 fTree->Branch("ITSsignal",ITSsignal,"ITSsignal[itrk]/F");
401 fTree->Branch("SharedClusters",SharedClusters,"SharedClusters[itrk]/F");
402 fTree->Branch("fFileName",fFileName,"fFileName/C");
403 fTree->Branch("fEventNumber",fEventNumber,"fEventNumber/I");
405 fTree->Branch("fAssociated",fAssociated,"fAssociated[itrk]/O");
406 fTree->Branch("fTrackPt",fTrackPt,"fTrackPt[itrk]/F");
410 //________________________________________________________________________
411 void AliAnalysisTaskAntiHe4::UserExec(Option_t *)
414 // Called for each event
416 //get Event-Handler for the trigger information
417 fEventHandler= dynamic_cast<AliInputEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
418 if (!fEventHandler) {
419 AliError("Could not get InputHandler");
425 AliMCEventHandler* eventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
427 //Printf("ERROR: Could not retrieve MC event handler");
431 AliMCEvent* mcEvent = 0x0;
432 AliStack* stack = 0x0;
433 if (eventHandler) mcEvent = eventHandler->MCEvent();
435 //Printf("ERROR: Could not retrieve MC event");
440 stack = mcEvent->Stack();
444 //look for the generated particles
447 fESD=dynamic_cast<AliESDEvent*>(InputEvent());
449 //Printf("ERROR: fESD not available");
453 if (SetupEvent() < 0) {
454 PostData(1, fOutputContainer);
458 const AliESDVertex *vertex = fESD->GetPrimaryVertexTracks();
459 if(vertex->GetNContributors()<1) {
461 vertex = fESD->GetPrimaryVertexSPD();
462 if(vertex->GetNContributors()<1) {
463 PostData(1, fOutputContainer);
468 // check if event is selected by physics selection class
470 Bool_t isSelected = kFALSE;
471 isSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
472 if (!isSelected || TMath::Abs(vertex->GetZv()) > 10) {
473 PostData(1, fOutputContainer);
478 //centrality selection in PbPb
480 Int_t centralityClass10 = -1;
481 Int_t centralityPercentile = -1;
483 if (fESD->GetEventSpecie() == 4) { //species == 4 == PbPb
485 AliCentrality *esdCentrality = fESD->GetCentrality();
486 centralityClass10 = esdCentrality->GetCentralityClass10("V0M"); // centrality percentile determined with V0
487 centralityPercentile = esdCentrality->GetCentralityPercentile("V0M"); // centrality percentile determined with V0
489 if (centralityPercentile < 0. || centralityPercentile > 80. ) return; //select only events with centralities between 0 and 80 %
493 if (!fTriggerFired[0] && !fTriggerFired[1] && !fTriggerFired[2]) return; // select only events which pass kMB, kCentral, kSemiCentral
495 fHistCentralityClass10->Fill(centralityClass10);
496 fHistCentralityPercentile->Fill(centralityPercentile);
498 if(fTriggerFired[0] == kTRUE) fHistTriggerStatAfterEventSelection->Fill(0);
499 if(fTriggerFired[1] == kTRUE) fHistTriggerStatAfterEventSelection->Fill(1);
500 if(fTriggerFired[2] == kTRUE) fHistTriggerStatAfterEventSelection->Fill(2);
501 if(fTriggerFired[3] == kTRUE) fHistTriggerStatAfterEventSelection->Fill(3);
502 if(fTriggerFired[4] == kTRUE) fHistTriggerStatAfterEventSelection->Fill(4);
505 if (!fESDpid) fESDpid = ((AliESDInputHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->GetESDpid();
507 fESDpid = new AliESDpid(); // HACK FOR MC PBPB --> PLEASE REMOVE AS SOON AS POSSIBLE
508 fESDpid->GetTPCResponse().SetBetheBlochParameters(1.28778e+00/50., 3.13539e+01, TMath::Exp(-3.16327e+01), 1.87901e+00, 6.41583e+00);
511 Float_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z for th // for Anti-Alpha
512 evnt = fESD->GetEventNumberInFile();
513 sscanf(fInputHandler->GetTree()->GetCurrentFile()->GetName(),"%s", Name);
517 runNumber = fESD->GetRunNumber();
519 Bool_t fillTree = kFALSE;
520 // Track loop to fill the spectram
521 for (Int_t iTracks = 0; iTracks < fESD->GetNumberOfTracks(); iTracks++) {
523 AliESDtrack* track = dynamic_cast<AliESDtrack*>(fESD->GetTrack(iTracks));
524 if (!fESDtrackCuts->AcceptTrack(track)) continue;
526 Double_t nClustersTPCPID=track->GetTPCsignalN();
527 if(nClustersTPCPID < 60) continue;
529 if (!track->GetInnerParam()) continue;
531 Double32_t signal[4] = {0,0,0,0};
534 if (track->GetTPCdEdxInfo()) {
535 track->GetTPCdEdxInfo()->GetTPCSignalRegionInfo(signal,ncl,nrows);
538 Double_t ptot = track->GetInnerParam()->GetP();
539 Double_t ptotInc = track->GetP(); // total momentum of the incoming particle
540 Double_t sign = track->GetSign();
542 Double_t eta = TMath::Abs(track->Eta());
543 TBits shared = track->GetTPCSharedMap();
545 track->GetImpactParameters(dca, cov);
546 Float_t dcaXY = TMath::Sqrt(dca[0]*dca[0]);
547 Float_t dcaXYsign = dca[0];
548 Float_t dcaZ = TMath::Sqrt(dca[1]*dca[1]);
551 Double_t tpcSignal = track->GetTPCsignal();
553 //PID via specific energy loss in the TPC
554 //define the arrays for the Bethe-Bloch-Parameters
557 SetBBParameters(runNumber);
559 //define expected signals for the various species
560 Double_t expSignalProton = AliExternalTrackParam::BetheBlochAleph(ptot/0.93827,fBBParametersLightParticles[0],fBBParametersLightParticles[1],fBBParametersLightParticles[2],fBBParametersLightParticles[3],fBBParametersLightParticles[4]);
561 Double_t expSignalDeuteron = AliExternalTrackParam::BetheBlochAleph(ptot/1.875612,fBBParametersLightParticles[0],fBBParametersLightParticles[1],fBBParametersLightParticles[2],fBBParametersLightParticles[3],fBBParametersLightParticles[4]);
562 Double_t expSignalTriton = AliExternalTrackParam::BetheBlochAleph(ptot/2.808921,fBBParametersLightParticles[0],fBBParametersLightParticles[1],fBBParametersLightParticles[2],fBBParametersLightParticles[3],fBBParametersLightParticles[4]);
564 Double_t expSignalHelium3 = 4*AliExternalTrackParam::BetheBlochAleph(2*ptot/2.80941,fBBParametersNuclei[0],fBBParametersNuclei[1],fBBParametersNuclei[2],fBBParametersNuclei[3],fBBParametersNuclei[4]);
565 Double_t expSignalHelium4 = 4*AliExternalTrackParam::BetheBlochAleph(2*ptot/3.728401,fBBParametersNuclei[0],fBBParametersNuclei[1],fBBParametersNuclei[2],fBBParametersNuclei[3],fBBParametersNuclei[4]);
572 Bool_t hasTOFout = kFALSE;
573 Bool_t hasTOFtime = kFALSE;
574 Float_t length = track->GetIntegratedLength();
575 UInt_t status = track->GetStatus();
576 Bool_t isAssociated = kFALSE;
579 time = track->GetTOFsignal() - fESDpid->GetTOFResponse().GetStartTime(track->P());
581 beta = length / (2.99792457999999984e-02 * time);
582 gamma = 1/TMath::Sqrt(1 - beta*beta);
583 mass = ptot/TMath::Sqrt(gamma*gamma - 1); // using inner TPC mom. as approx.
587 // fill tree and print candidates (for short list)
589 Float_t cut = 4*AliExternalTrackParam::BetheBlochAleph(2*ptot/(0.938*3),1.1931,
594 if (fMCtrue) cut = 4*AliExternalTrackParam::BetheBlochAleph(2*ptot/(0.938*3),0.9931,
599 if (eta < 0.8 && tpcSignal > 120 && tpcSignal > cut && tpcSignal < 1000 && track->GetTPCsignalN() > 60 && dcaZ < 15 && dcaXY < 15 && ptot > 1.0 && ptot < 20) {
601 cout << "AntiAlphaEvent" << " "
602 << AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->GetTree()->GetCurrentFile()->GetName() << " "
603 << "event number in file: " << fESD->GetEventNumberInFile()
604 << " Index " << iTracks
606 << " sig: " << tpcSignal <<endl;
610 TrkPtot[itrk] = track->P();
611 TPCPtot[itrk] = ptot;
612 DeDx[itrk] = tpcSignal;
614 TPCNsignal[itrk] = track->GetTPCsignalN();
615 ITSnCluster[itrk] = track->GetNcls(0);
620 ITSsignal[itrk] = track->GetITSsignal();
621 SharedClusters[itrk] = shared.CountBits();
622 sscanf(fInputHandler->GetTree()->GetCurrentFile()->GetName(),"%s", fFileName);
623 //fFileName[itrk] = fInputHandler->GetTree()->GetCurrentFile()->GetName();
624 fEventNumber[itrk] = fESD->GetEventNumberInFile();
626 if(status&AliESDtrack::kITSrefit)
628 else ITSRefit[itrk] = 0;
637 hasTOFout = status&AliESDtrack::kTOFout;
638 hasTOFtime = status&AliESDtrack::kTIME;
640 TOFtime[itrk] = hasTOFtime;
641 TOFout[itrk] = hasTOFout;
643 if (fMCtrue){ //associated
645 Int_t label = track->GetLabel();
646 TParticle *tparticle = stack->Particle(TMath::Abs(label));
648 Bool_t isPrimary = stack->IsPhysicalPrimary(TMath::Abs(label));
649 Bool_t isSecondary = stack->IsSecondaryFromMaterial(TMath::Abs(label));
651 Long_t pdgCode = tparticle->GetPdgCode();
652 Double_t pT =(track->Pt())*2;
654 if(pdgCode == 1000020040)
656 fHistHelium4PtAso->Fill(pT);
657 if(isPrimary) fHistHelium4PtAsoPrim->Fill(pT);
658 if(isSecondary) fHistHelium4PtAsoSec->Fill(pT);
659 isAssociated = kTRUE;
662 if(pdgCode == -1000020040)
664 fHistAntiHelium4PtAso->Fill(pT);
665 isAssociated = kTRUE;
670 fAssociated[itrk] = isAssociated;
671 fTrackPt[itrk] = track->Pt();
676 // do pid fill histogram for raw ratios
678 // (0.) dca, (1.) sign, (2.) particle Type, (3.) p_tot
680 if (ptot > 0.2 && TMath::Abs(tpcSignal - expSignalProton)/expSignalProton < 0.2) id = 0;
681 if (ptot > 0.3 && TMath::Abs(tpcSignal - expSignalDeuteron)/expSignalDeuteron < 0.2) id = 1;
682 if (ptot > 0.7 && TMath::Abs(tpcSignal - expSignalTriton)/expSignalTriton < 0.2) id = 2;
683 if (ptot > 0.5 && (tpcSignal - expSignalHelium3)/expSignalHelium3 > -0.1 && (tpcSignal - expSignalHelium3)/expSignalHelium3 < 0.2) id = 3;
685 Double_t vecAntiAlpha[4] = {dcaXYsign, sign, id, ptotInc};
686 if (id != -1 && tpcSignal > 120) fAntiAlpha->Fill(vecAntiAlpha);
688 // fill final histograms
690 if (!fESDtrackCutsSharp->AcceptTrack(track) || shared.CountBits() > 1 || track->GetTPCsignalN() < 80 || track->GetKinkIndex(0) != 0 || track->GetTPCNclsIter1() < 80) continue;
692 fHistDEDx->Fill(ptot,track->GetTPCsignal(), sign);
693 if (TMath::Abs(tpcSignal - expSignalHelium4)/expSignalHelium4 < 0.2 && time < 99998) fHistTOF3D->Fill(mass,1,sign);
695 // remove overlapping tracks with special dE/dx cut
697 //if (signal[1] < 6) continue;
698 //if (signal[0]/signal[1] > 1.6 || signal[2]/signal[1] > 1.6 || signal[3]/signal[1] > 1.3) continue;
701 fHistDeDx->Fill(ptot, track->GetTPCsignal());
702 if (track->GetTPCsignalN() > 100 &&
703 TMath::Abs(track->Eta()) < 0.8 &&
704 signal[3]/signal[1] > 0.6 &&
705 signal[0]/signal[1] > 0.5 &&
706 signal[3]/signal[1] < 1.2 &&
707 track->GetTPCNclsIter1() > 70 &&
708 track->GetTPCnclsS() < 10) {
709 fHistDeDxSharp->Fill(ptot, track->GetTPCsignal());
713 // dE/dx for specific regions
715 for(Int_t iSig = 0; iSig < 4; iSig++) {
716 if (signal[1] > 6) fHistDeDxRegion->Fill(ptot,signal[iSig]/signal[1],iSig);
721 if((track->GetTPCsignal()-expSignalHelium4)/expSignalHelium4 > -0.15 && (track->GetTPCsignal()-expSignalHelium4)/expSignalHelium4 < 0.15) {
723 hasTOFout = status&AliESDtrack::kTOFout;
724 hasTOFtime = status&AliESDtrack::kTIME;
725 Bool_t hasTOF = kFALSE;
727 if (hasTOFout && hasTOFtime) hasTOF = kTRUE;
729 if (length < 350.) hasTOF = kFALSE;
731 Float_t time0 = fESDpid->GetTOFResponse().GetStartTime(track->P());//fESDpid->GetTOFResponse().GetTimeZero();
733 if (length > 350. && hasTOF == kTRUE && ptot < 4) {
734 time = track->GetTOFsignal() - time0;
736 beta = length / (2.99792457999999984e-02 * time);
738 gamma = 1/TMath::Sqrt(1 - beta*beta);
739 mass = ptot/TMath::Sqrt(gamma*gamma - 1); // using inner TPC mom. as approx.
740 if (TMath::Sqrt(track->GetTOFsignalDz()*track->GetTOFsignalDz() + track->GetTOFsignalDx()*track->GetTOFsignalDx()) < 5.) {
741 fHistAlpha->Fill(mass*mass);
742 if (mass*mass > 3. && mass*mass < 4.) {
743 fHistAlphaSignal->Fill(mass*mass);
744 fGraphAlphaSignal->SetPoint(fNCounter, ptot, track->GetTPCsignal());
747 fHistTOFnuclei->Fill(ptot,beta);
754 }//end loop over tracks
756 if (fillTree) fTree->Fill();
759 PostData(1, fOutputContainer);
763 //________________________________________________________________________
764 void AliAnalysisTaskAntiHe4::Terminate(const Option_t *)
766 // Draw result to the screen
767 // Called once at the end of the query
769 //get output data and darw 'fHistPt'
770 if (!GetOutputData(0)) return;
775 //________________________________________________________________________
776 void AliAnalysisTaskAntiHe4::BinLogAxis(const THn *h, Int_t axisNumber) {
778 // Method for the correct logarithmic binning of histograms
780 TAxis *axis = h->GetAxis(axisNumber);
781 int bins = axis->GetNbins();
783 Double_t from = axis->GetXmin();
784 Double_t to = axis->GetXmax();
785 Double_t *newBins = new Double_t[bins + 1];
788 Double_t factor = pow(to/from, 1./bins);
790 for (int i = 1; i <= bins; i++) {
791 newBins[i] = factor * newBins[i-1];
793 axis->Set(bins, newBins);
798 //________________________________________________________________________
799 void AliAnalysisTaskAntiHe4::BinLogAxis(const TH3 *h, Int_t axisNumber) {
801 // Method for the correct logarithmic binning of histograms
803 TAxis *axis = h->GetXaxis();
804 if (axisNumber == 1) axis = h->GetYaxis();
805 if (axisNumber == 2) axis = h->GetZaxis();
806 int bins = axis->GetNbins();
808 Double_t from = axis->GetXmin();
809 Double_t to = axis->GetXmax();
810 Double_t *newBins = new Double_t[bins + 1];
813 Double_t factor = pow(to/from, 1./bins);
815 for (int i = 1; i <= bins; i++) {
816 newBins[i] = factor * newBins[i-1];
818 axis->Set(bins, newBins);
822 //________________________________________________________________________
823 void AliAnalysisTaskAntiHe4::BinLogAxis(const TH1 *h) {
825 // Method for the correct logarithmic binning of histograms
827 TAxis *axis = h->GetXaxis();
828 int bins = axis->GetNbins();
830 Double_t from = axis->GetXmin();
831 Double_t to = axis->GetXmax();
832 Double_t *newBins = new Double_t[bins + 1];
835 Double_t factor = pow(to/from, 1./bins);
837 for (int i = 1; i <= bins; i++) {
838 newBins[i] = factor * newBins[i-1];
840 axis->Set(bins, newBins);
844 //_____________________________________________________________________________
845 Int_t AliAnalysisTaskAntiHe4::Initialize() {
854 //________________________________________________________________________
855 Int_t AliAnalysisTaskAntiHe4::SetupEvent() {
856 // Setup Reading of event
859 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
861 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
863 //Bool_t isTriggered = IsTriggered();
867 //_____________________________________________________________________________
868 void AliAnalysisTaskAntiHe4::ResetEvent() {
871 for (Int_t ii = 0; ii < fNTriggers; ++ii)
872 fTriggerFired[ii] = kFALSE;
876 //________________________________________________________________________
877 Bool_t AliAnalysisTaskAntiHe4::IsTriggered() {
878 // Check if Event is triggered and fill Trigger Histogram
880 if ((fEventHandler->IsEventSelected() & AliVEvent::kMB)) fTriggerFired[0] = kTRUE;
881 if ((fEventHandler->IsEventSelected() & AliVEvent::kCentral)) fTriggerFired[1] = kTRUE;
882 if ((fEventHandler->IsEventSelected() & AliVEvent::kSemiCentral)) fTriggerFired[2] = kTRUE;
883 if ((fEventHandler->IsEventSelected() & AliVEvent::kEMCEJE)) fTriggerFired[3] = kTRUE;
884 if ((fEventHandler->IsEventSelected() & AliVEvent::kEMCEGA)) fTriggerFired[4] = kTRUE;
886 Bool_t isTriggered = kFALSE;
888 for (Int_t ii=0; ii<fNTriggers; ++ii) {
889 if(fTriggerFired[ii]) {
891 fHistTriggerStat->Fill(ii);
897 //________________________________________________________________________
898 void AliAnalysisTaskAntiHe4::SetBBParameters(Int_t runNumber){
900 if(runNumber < 166500){ //LHC10h
902 fBBParametersLightParticles[0] = 1.45802;
903 fBBParametersLightParticles[1] = 27.4992;
904 fBBParametersLightParticles[2] = 4.00313e-15;
905 fBBParametersLightParticles[3] = 2.48485;
906 fBBParametersLightParticles[4] = 8.31768;
908 fBBParametersNuclei[0] = 1.69155;
909 fBBParametersNuclei[1] = 27.4992;
910 fBBParametersNuclei[2] = 4.00313e-15;
911 fBBParametersNuclei[3] = 2.48485;
912 fBBParametersNuclei[4] = 8.31768;
916 if(runNumber > 166500){ //LHC11h
918 fBBParametersLightParticles[0] = 4.69637;//1.11243;
919 fBBParametersLightParticles[1] = 7.51827;//26.1144;
920 fBBParametersLightParticles[2] = 0.0183746;//4.00313e-15;
921 fBBParametersLightParticles[3] = 2.60;//2.72969;
922 fBBParametersLightParticles[4] = 2.7;//9.15038;
924 fBBParametersNuclei[0] = 1.4906;
925 fBBParametersNuclei[1] = 27.9758;
926 fBBParametersNuclei[2] = 4.00313e-15;
927 fBBParametersNuclei[3] = 2.50804;
928 fBBParametersNuclei[4] = 8.31768;
932 //______________________________________________________________________________
933 void AliAnalysisTaskAntiHe4::MCGenerated(AliStack* stack)
936 // Monte Carlo for genenerated particles
937 if (fMCtrue) //MC loop
942 for(stackN = 0; stackN < stack->GetNtrack(); stackN++) //loop over stack
945 Bool_t isPrimary = stack->IsPhysicalPrimary(stackN);
946 Bool_t isSecondary = stack->IsSecondaryFromMaterial(stackN);
948 const TParticle *tparticle = stack->Particle(stackN);
949 Long_t pdgCode = tparticle->GetPdgCode();
951 Double_t pTGen = tparticle->Pt();
952 Double_t eta = tparticle->Eta();
953 //check which particle it is
956 if(pdgCode == 1000020040)
958 fHistHelium4PtGen->Fill(pTGen);
959 if(isPrimary) fHistHelium4PtGenPrim->Fill(pTGen);
960 if(isSecondary) fHistHelium4PtGenSec->Fill(pTGen);
961 if(eta < 0.8)fHistHelium4PtGenEta->Fill(pTGen);
962 if(isPrimary && eta < 0.8)fHistHelium4PtGenPrimEta->Fill(pTGen);
966 if(pdgCode == -1000020040)
968 fHistAntiHelium4PtGen->Fill(pTGen);
969 if(isPrimary) fHistAntiHelium4PtGenPrim->Fill(pTGen);
970 if(isSecondary) fHistAntiHelium4PtGenSec->Fill(pTGen);
971 if(eta < 0.8)fHistAntiHelium4PtGenEta->Fill(pTGen);
975 }//end loop over stack