1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
16 /// Compute the number of Muons tracks as a function of the SPD tracklets multiplicity
17 /// Compare with Monte Carlo tracks
18 /// Author Matthieu LENHARDT - SUBATECH, Nantes
22 #include "AliAnalysisTaskMuonCollisionMultiplicity.h"
25 #include "AliAODEvent.h"
26 #include "AliAODVertex.h"
27 #include "AliESDEvent.h"
28 #include "AliESDVertex.h"
29 #include "AliAODTrack.h"
30 #include "AliESDMuonTrack.h"
31 #include "AliAODTracklets.h"
32 #include "AliAODInputHandler.h"
33 #include "AliAnalysisManager.h"
34 #include "AliAODDimuon.h"
35 #include "AliMCEvent.h"
36 #include "AliMCParticle.h"
37 #include "AliMultiplicity.h"
41 #include <THnSparse.h>
45 #include <Riostream.h>
46 #include <TParticle.h>
47 #include <TLorentzVector.h>
49 //___________________________________________________
50 AliAnalysisTaskMuonCollisionMultiplicity::AliAnalysisTaskMuonCollisionMultiplicity()
58 fTrackletMultiplicity(0),
64 ///Default Constructor
68 //___________________________________________________
69 AliAnalysisTaskMuonCollisionMultiplicity::AliAnalysisTaskMuonCollisionMultiplicity(const AliAnalysisTaskMuonCollisionMultiplicity& src)
77 fTrackletMultiplicity(0),
88 //___________________________________________________
89 AliAnalysisTaskMuonCollisionMultiplicity& AliAnalysisTaskMuonCollisionMultiplicity::operator=(const AliAnalysisTaskMuonCollisionMultiplicity& src)
91 /// assignement operator
102 //___________________________________________________
103 AliAnalysisTaskMuonCollisionMultiplicity::AliAnalysisTaskMuonCollisionMultiplicity(const Char_t *name)
105 AliAnalysisTaskSE(name),
111 fTrackletMultiplicity(0),
117 // Define Inputs and outputs
118 //DefineInput(0, TChain::Class());
119 //DefineInput(1, TChain::Class());
120 DefineOutput(0, TList::Class());
121 DefineOutput(1, TList::Class());
122 DefineOutput(2, TList::Class());
123 DefineOutput(3, TList::Class());
124 DefineOutput(4, TList::Class());
128 //______________________________________________________________________________
129 AliAnalysisTaskMuonCollisionMultiplicity::~AliAnalysisTaskMuonCollisionMultiplicity()
135 delete fSingleMuonList;
137 delete fMonteCarloList;
142 //________________________________________________________________________
143 void AliAnalysisTaskMuonCollisionMultiplicity::UserCreateOutputObjects()
153 //________________________________________________________________________
154 void AliAnalysisTaskMuonCollisionMultiplicity::UserExec(Option_t */*option*/)
162 fAOD = dynamic_cast<AliAODEvent *> (InputEvent());
164 fESD = dynamic_cast<AliESDEvent *> (InputEvent());
173 PostData(1, fTriggerList);
174 PostData(2, fSingleMuonList);
175 PostData(3, fDimuonList);
176 PostData(4, fMonteCarloList);
181 //________________________________________________________________________
182 void AliAnalysisTaskMuonCollisionMultiplicity::NotifyRun()
188 //________________________________________________________________________
189 void AliAnalysisTaskMuonCollisionMultiplicity::FinishTaskOutput()
195 //__________________________________________________________________________
196 Bool_t AliAnalysisTaskMuonCollisionMultiplicity::CheckEventAOD()
198 AliAODVertex *vertex = fAOD->GetPrimaryVertex();
203 if (vertex->GetNContributors() < 1)
206 ComputeMultiplicity();
207 if (fTrackletMultiplicity < 1)
210 // Variables use to determine the type of trigger :
211 // 0 for minimum bias : CINT1B, CINT1-B or MB1
212 // 1 for muon events : CMUS1B, CMUS1-B or MULow
213 // -1 for everything else
214 TString trigger = fAOD->GetFiredTriggerClasses();
215 Int_t triggerClass = -1;
217 if (trigger.Contains("CINT1B") || trigger.Contains("CINT1-B") || trigger.Contains("MB1"))
220 if (trigger.Contains("CMUS1B") || trigger.Contains("CMUS1-B") || trigger.Contains("MULow"))
223 if (triggerClass >= 0)
224 FillHistosAOD(triggerClass);
231 //__________________________________________________________________________
232 Bool_t AliAnalysisTaskMuonCollisionMultiplicity::CheckEventESD()
234 const AliESDVertex *vertex = fESD->GetPrimaryVertex();
239 if (vertex->GetNContributors() < 1)
242 ComputeMultiplicity();
243 if (fTrackletMultiplicity < 1)
246 // Variables use to determine the type of trigger :
247 // 0 for minimum bias : CINT1B, CINT1-B or MB1
248 // 1 for muon events : CMUS1B, CMUS1-B or MULow
249 // -1 for everything else
250 TString trigger = fESD->GetFiredTriggerClasses();
251 Int_t triggerClass = -1;
253 if (trigger.Contains("CINT1B") || trigger.Contains("CINT1-B") || trigger.Contains("MB1") || trigger.Contains("CMBAC-B") || trigger.Contains("CMBACS2-B"))
256 if (trigger.Contains("CMUS1B") || trigger.Contains("CMUS1-B") || trigger.Contains("MULow"))
259 if (triggerClass >= 0)
260 FillHistosESD(triggerClass);
271 //________________________________________________________________________
272 void AliAnalysisTaskMuonCollisionMultiplicity::FillHistosAOD(Int_t triggerClass)
274 // Fill histos for AOD events
275 Int_t nTracks = fAOD->GetNTracks();
276 Int_t nDimuons = fAOD->GetNDimuons();
279 Double_t vertexCut = (TMath::Abs(fAOD->GetPrimaryVertex()->GetZ()) < fZCut);
280 Double_t pileUp = !(fAOD->IsPileupFromSPD());
282 Double_t valuesTrigger[3] = {fTrackletMultiplicity, vertexCut, pileUp};
283 ((THnSparseD *)fTriggerList->At(triggerClass))->Fill(valuesTrigger);
285 // Loop on the muons tracks
286 for (Int_t ii = 0; ii < nTracks; ii++)
287 if (IsUsableMuon(fAOD->GetTrack(ii)))
289 Double_t matchTrigger = fAOD->GetTrack(ii)->GetMatchTrigger();
290 if (matchTrigger > 1.0)
291 matchTrigger = 1.0; // We don't care what type of trigger it is
293 Double_t thetaAbs = (180.0 / TMath::Pi()) * TMath::ATan(fAOD->GetTrack(ii)->GetRAtAbsorberEnd()/505.0);
294 Double_t eta = fAOD->GetTrack(ii)->Eta();
295 Double_t dcaX = fAOD->GetTrack(ii)->XAtDCA();
296 Double_t dcaY = fAOD->GetTrack(ii)->YAtDCA();
297 Double_t p = fAOD->GetTrack(ii)->P();
298 Double_t pT = fAOD->GetTrack(ii)->Pt();
299 Double_t pDCA = p*TMath::Sqrt(dcaX*dcaX + dcaY*dcaY);
301 Double_t valuesMuon[11] = {fTrackletMultiplicity, vertexCut, pileUp, matchTrigger, thetaAbs, eta, p*dcaX, p*dcaY, pDCA, p, pT};
302 ((THnSparseD *)fSingleMuonList->At(triggerClass))->Fill(valuesMuon);
306 for (Int_t ii = 0; ii < nDimuons; ii++)
307 if (fAOD->GetDimuon(ii)->Charge() == 0.0)
308 if (IsUsableMuon(fAOD->GetDimuon(ii)->GetMu(0)))
309 if (IsUsableMuon(fAOD->GetDimuon(ii)->GetMu(1)))
311 Double_t matchTrigger1 = fAOD->GetDimuon(ii)->GetMu(0)->GetMatchTrigger();
312 if (matchTrigger1 > 0.0)
314 Double_t matchTrigger2 = fAOD->GetDimuon(ii)->GetMu(1)->GetMatchTrigger();
315 if (matchTrigger2 > 0.0)
318 Double_t nMatchTrigger = matchTrigger1 + matchTrigger2;
320 Double_t thetaAbs1 = (180.0 / TMath::Pi()) * TMath::ATan(fAOD->GetDimuon(ii)->GetMu(0)->GetRAtAbsorberEnd()/505.0);
321 Double_t thetaAbs2 = (180.0 / TMath::Pi()) * TMath::ATan(fAOD->GetDimuon(ii)->GetMu(1)->GetRAtAbsorberEnd()/505.0);
322 Double_t eta1 = fAOD->GetDimuon(ii)->GetMu(0)->Eta();
323 Double_t eta2 = fAOD->GetDimuon(ii)->GetMu(1)->Eta();
324 Double_t dcaX1 = fAOD->GetDimuon(ii)->GetMu(0)->XAtDCA();
325 Double_t dcaY1 = fAOD->GetDimuon(ii)->GetMu(0)->YAtDCA();
326 Double_t dcaX2 = fAOD->GetDimuon(ii)->GetMu(1)->XAtDCA();
327 Double_t dcaY2 = fAOD->GetDimuon(ii)->GetMu(1)->YAtDCA();
329 Double_t p1 = fAOD->GetDimuon(ii)->GetMu(0)->P();
330 Double_t p2 = fAOD->GetDimuon(ii)->GetMu(1)->P();
332 Double_t p = fAOD->GetDimuon(ii)->P();
333 Double_t pT = fAOD->GetDimuon(ii)->Pt();
334 Double_t M = fAOD->GetDimuon(ii)->M();
336 Double_t valuesDimuon[19] = {fTrackletMultiplicity, vertexCut, pileUp, matchTrigger1, matchTrigger2, nMatchTrigger, thetaAbs1, thetaAbs2,
337 eta1, eta2, p1*dcaX1, p1*dcaY1, p2*dcaX2, p2*dcaY2, p1, p2, p, pT, M};
338 ((THnSparseD *)fDimuonList->At(triggerClass))->Fill(valuesDimuon);
344 void AliAnalysisTaskMuonCollisionMultiplicity::FillHistosESD(Int_t triggerClass)
346 // Fill the histos for ESD events
347 // This is not yet tested (in particular the Dimuon part)
349 Int_t nTracks = fESD->GetNumberOfMuonTracks();
351 Double_t vertexCut = (TMath::Abs(fESD->GetPrimaryVertex()->GetZ()) < fZCut);
352 Double_t pileUp = !(fESD->IsPileupFromSPD());
354 Double_t valuesTrigger[3] = {fTrackletMultiplicity, vertexCut, pileUp};
355 ((THnSparseD *)fTriggerList->At(triggerClass))->Fill(valuesTrigger);
357 // Loop on the muons tracks
358 for (Int_t ii = 0; ii < nTracks; ii++)
359 if (IsUsableMuon(fESD->GetMuonTrack(ii)))
361 Double_t matchTrigger1 = fESD->GetMuonTrack(ii)->GetMatchTrigger();
362 if (matchTrigger1 > 1.0)
363 matchTrigger1 = 1.0; // We don't care what type of trigger it is
365 Double_t thetaAbs1 = (180.0 / TMath::Pi()) * TMath::ATan(fESD->GetMuonTrack(ii)->GetRAtAbsorberEnd()/505.0);
366 Double_t eta1 = fESD->GetMuonTrack(ii)->Eta();
367 Double_t dcaX1 = fESD->GetMuonTrack(ii)->GetNonBendingCoorAtDCA();
368 Double_t dcaY1 = fESD->GetMuonTrack(ii)->GetBendingCoorAtDCA();
369 Double_t p1 = fESD->GetMuonTrack(ii)->P();
370 Double_t pUncor1 = fESD->GetMuonTrack(ii)->PUncorrected();
371 Double_t pT1 = fESD->GetMuonTrack(ii)->Pt();
373 // The pDCA is computed with the average of p and pUncor
374 Double_t pDCAX1 = (p1+pUncor1) * dcaX1 / 2.0;
375 Double_t pDCAY1 = (p1+pUncor1) * dcaY1 / 2.0;
376 Double_t pDCA1 = (p1+pUncor1) * TMath::Sqrt(dcaX1*dcaX1 + dcaY1*dcaY1) / 2.0;
378 Double_t valuesMuon[11] = {fTrackletMultiplicity, vertexCut, pileUp, matchTrigger1, thetaAbs1, eta1, pDCAX1, pDCAY1, pDCA1, p1, pT1};
379 ((THnSparseD *)fSingleMuonList->At(triggerClass))->Fill(valuesMuon);
381 // Second loop on muons, to fill the dimuons histos
382 for (Int_t jj = ii+1; jj < nTracks; jj++)
383 if (IsUsableMuon(fESD->GetMuonTrack(jj)))
384 if (fESD->GetMuonTrack(ii)->Charge() + fESD->GetMuonTrack(jj)->Charge() == 0.0)
386 Double_t matchTrigger2 = fESD->GetMuonTrack(jj)->GetMatchTrigger();
387 if (matchTrigger2 > 0.0)
390 Double_t nMatchTrigger = matchTrigger1 + matchTrigger2;
392 Double_t thetaAbs2 = (180.0 / TMath::Pi()) * TMath::ATan(fESD->GetMuonTrack(jj)->GetRAtAbsorberEnd()/505.0);
393 Double_t eta2 = fESD->GetMuonTrack(jj)->Eta();
394 Double_t dcaX2 = fESD->GetMuonTrack(jj)->GetNonBendingCoorAtDCA();
395 Double_t dcaY2 = fESD->GetMuonTrack(jj)->GetBendingCoorAtDCA();
396 Double_t p2 = fESD->GetMuonTrack(jj)->P();
397 Double_t pUncor2 = fESD->GetMuonTrack(jj)->PUncorrected();
399 // The pDCA is computed with the average of p and pUncor
400 Double_t pDCAX2 = (p2+pUncor2) * dcaX2/2.0;
401 Double_t pDCAY2 = (p2+pUncor2) * dcaY2/2.0;
403 // To compute the p, pT and M of the dimuon, we need a TLorentz vector of the dimuon
404 Double_t E = fESD->GetMuonTrack(ii)->E() + fESD->GetMuonTrack(jj)->E();
405 Double_t pX = fESD->GetMuonTrack(ii)->Px() + fESD->GetMuonTrack(jj)->Px();
406 Double_t pY = fESD->GetMuonTrack(ii)->Py() + fESD->GetMuonTrack(jj)->Py();
407 Double_t pZ = fESD->GetMuonTrack(ii)->Pz() + fESD->GetMuonTrack(jj)->Pz();
408 TLorentzVector *dimuonVector = new TLorentzVector(pX, pY, pZ, E);
409 dimuonVector->SetPxPyPzE(pX, pY, pZ, E);
411 Double_t p = dimuonVector->P();
412 Double_t pT = TMath::Sqrt(pX*pX + pY*pY);
413 Double_t M = dimuonVector->M();
415 Double_t valuesDimuon[19] = {fTrackletMultiplicity, vertexCut, pileUp, matchTrigger1, matchTrigger2, nMatchTrigger, thetaAbs1, thetaAbs2,
416 eta1, eta2, pDCAX1, pDCAY1, pDCAX2, pDCAY2, p1, p2, p, pT, M};
417 ((THnSparseD *)fDimuonList->At(triggerClass))->Fill(valuesDimuon);
425 //________________________________________________________________________
426 void AliAnalysisTaskMuonCollisionMultiplicity::FillHistosMC()
428 // Fill the histo of the correlation between MC tracks and ESD tracks
430 Int_t multiplicityGenerated = 0;
431 const AliESDVertex *vertex = fESD->GetPrimaryVertexTracks();
433 for (Int_t nn = 0; nn < fMCEvent->GetNumberOfTracks(); nn++)
435 AliMCParticle *particle = (AliMCParticle *) fMCEvent->GetTrack(nn);
436 Bool_t isGoodMult = kTRUE;
438 if (particle->Particle()->GetStatusCode() != 1)
441 if (particle->Charge() == 0)
444 if (TMath::Abs(particle->Eta()) > 1.0)
447 // Check if the particle is a pion, kaon, proton, electron or muon
448 if (TMath::Abs(particle->PdgCode()) != 211 && TMath::Abs(particle->PdgCode()) != 321 && TMath::Abs(particle->PdgCode()) != 2212 &&
449 TMath::Abs(particle->PdgCode()) != 11 && TMath::Abs(particle->PdgCode()) != 13)
452 // Check if the distance to vertex is inferior to 1 cm
453 Double_t distanceToVertex = TMath::Sqrt((particle->Xv() - vertex->GetXv())*(particle->Xv() - vertex->GetXv()) +
454 (particle->Yv() - vertex->GetYv())*(particle->Yv() - vertex->GetYv()) +
455 (particle->Zv() - vertex->GetZv())*(particle->Zv() - vertex->GetZv()));
456 if (distanceToVertex > 1.0)
460 multiplicityGenerated += 1;
463 ((TH2D *)fMonteCarloList->At(0))->Fill(multiplicityGenerated, fTrackletMultiplicity);
468 //________________________________________________________________________
469 void AliAnalysisTaskMuonCollisionMultiplicity::ComputeMultiplicity()
471 // Compute the collision multiplicity based on AOD or ESD tracklets
473 Int_t multiplicity = 0;
477 AliAODTracklets *tracklets = fAOD->GetTracklets();
478 Int_t nTracklets = tracklets->GetNumberOfTracklets();
479 for (Int_t nn = 0; nn < nTracklets; nn++)
481 Double_t theta = tracklets->GetTheta(nn);
482 Double_t eta = -TMath::Log(TMath::Tan(theta/2.0));
484 if (TMath::Abs(eta) < fEtaCut)
491 for (Int_t nn = 0; nn < fESD->GetMultiplicity()->GetNumberOfTracklets(); nn++)
492 if (TMath::Abs(fESD->GetMultiplicity()->GetEta(nn)) < fEtaCut)
497 fTrackletMultiplicity = multiplicity;
502 //________________________________________________________________________
503 Bool_t AliAnalysisTaskMuonCollisionMultiplicity::IsUsableMuon(AliAODTrack *track)
505 // Check if the track is a usable muon track
507 // - is it a muon track?
508 // - does it have a pT > 0.0?
510 Bool_t isGood = kFALSE;
512 if (!track->IsMuonTrack())
515 if (!(track->Pt() > 0.0))
524 //________________________________________________________________________
525 Bool_t AliAnalysisTaskMuonCollisionMultiplicity::IsUsableMuon(AliESDMuonTrack *track)
527 // Check if the track is a usable muon track
529 // - is it a muon track?
530 // - does it have a pT > 0.0?
532 Bool_t isGood = kFALSE;
534 if (!track->ContainTrackerData())
537 if (!(track->Pt() > 0.0))
546 //________________________________________________________________________
547 void AliAnalysisTaskMuonCollisionMultiplicity::Init()
549 // Initialize the object
551 fTriggerList = new TList();
552 fSingleMuonList = new TList();
553 fDimuonList = new TList();
554 fMonteCarloList = new TList();
556 fTriggerList->SetOwner();
557 fSingleMuonList->SetOwner();
558 fDimuonList->SetOwner();
559 fMonteCarloList->SetOwner();
565 // dimension 0 : multiplicity of the event
566 // dimension 1 : is the vertex in the z range (0 for no, 1 for yes)?
567 // dimension 2 : is it an event without pile up (0 for no, 1 for yes)?
568 Int_t nBinsTrigger[3] = { 150, 2, 2};
569 Double_t minRangeTrigger[3] = { 0.0, 0.0, 0.0};
570 Double_t maxRangeTrigger[3] = {150.0, 2.0, 2.0};
571 THnSparseD *CINT1B = new THnSparseD ("CINT1B", "CINT1B", 3, nBinsTrigger, minRangeTrigger, maxRangeTrigger);
572 THnSparseD *CMUS1B = new THnSparseD ("CMUS1B", "CMUS1B", 3, nBinsTrigger, minRangeTrigger, maxRangeTrigger);
576 fTriggerList->AddAt(CINT1B, 0);
577 fTriggerList->AddAt(CMUS1B, 1);
584 // dimension 0 : multiplicity of the event
585 // dimension 1 : is the vertex in the z range (0 for no, 1 for yes)?
586 // dimension 2 : is it an event without pile up (0 for no, 1 for yes)?
587 // dimension 3 : does the muon match the trigger (0 for no, 1 for yes)?
588 // dimension 4 : theta_abs of the muon
589 // dimension 5 : eta of the muon
590 // dimension 6 : p DCA_x of the muon
591 // dimension 7 : p DCA_y of the muon
592 // dimension 8 : p DCA of the muon
593 // dimension 9 : p of the muon
594 // dimension 10 : pT of the muon
596 Int_t nBinsMuon[11] = { 150, 2, 2, 2, 110, 35, 150, 150, 150, 500, 300};
597 Double_t minRangeMuon[11] = { 0.0, 0.0, 0.0, 0.0, 0.0, -5.0, -300.0, -300.0, 0.0, 0.0, 0.0};
598 Double_t maxRangeMuon[11] = {150.0, 2.0, 2.0, 2.0, 11.0, -1.5, 300.0, 300.0, 450.0, 100.0, 30.0};
600 THnSparseD *muonCINT1B = new THnSparseD("muonCINT1B", "muonCINT1B", 11, nBinsMuon, minRangeMuon, maxRangeMuon);
601 THnSparseD *muonCMUS1B = new THnSparseD("muonCMUS1B", "muonCMUS1B", 11, nBinsMuon, minRangeMuon, maxRangeMuon);
605 fSingleMuonList->AddAt(muonCINT1B, 0);
606 fSingleMuonList->AddAt(muonCMUS1B, 1);
610 // dimension 0 : multiplicity of the event
611 // dimension 1 : is the vertex in the z range (0 for no, 1 for yes)?
612 // dimension 2 : is it an event without pile up (0 for no, 1 for yes)?
613 // dimension 3 : does the first muon match the trigger (0 for no, 1 for yes)?
614 // dimension 4 : does the second muon match the trigger (0 for no, 1 for yes)?
615 // dimension 5 : number of muons matching the trigger in the dimuon
616 // dimension 6 : theta_abs of the first muon
617 // dimension 7 : theta_abs of the second muon
618 // dimension 8 : eta of the first muon
619 // dimension 9 : eta of the second muon
620 // dimension 10 : p DCA_x of the first muon
621 // dimension 11 : p DCA_y of the first muon
622 // dimension 12 : p DCA_x of the second muon
623 // dimension 13 : p DCA_y of the second muon
624 // dimension 14 : p of the first muon
625 // dimension 15 : p of the second muon
626 // dimension 16 : p of the dimuon
627 // dimension 17 : pT of the dimuon
628 // dimension 18 : invariant mass of the dimuon
630 Int_t nBinsDimuon[19] = { 150, 2, 2, 2, 2, 3, 110, 110, 35, 35, 150, 150, 150, 150, 500, 500, 500, 300, 375};
631 Double_t minRangeDimuon[19] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -5.0, -5.0, -300.0, -300.0, -300.0, -300.0, 0.0, 0.0, 0.0, 0.0, 0.0};
632 Double_t maxRangeDimuon[19] = {150.0, 2.0, 2.0, 2.0, 2.0, 3.0, 11.0, 11.0, -1.5, -1.5, 300.0, 300.0, 300.0, 300.0, 100.0, 100.0, 100.0, 30.0, 15.0};
634 THnSparseD *dimuonCINT1B = new THnSparseD("dimuonCINT1B", "dimuonCINT1B", 19, nBinsDimuon, minRangeDimuon, maxRangeDimuon);
635 THnSparseD *dimuonCMUS1B = new THnSparseD("dimuonCMUS1B", "dimuonCMUS1B", 19, nBinsDimuon, minRangeDimuon, maxRangeDimuon);
637 dimuonCINT1B->Sumw2();
638 dimuonCMUS1B->Sumw2();
640 fDimuonList->AddAt(dimuonCINT1B, 0);
641 fDimuonList->AddAt(dimuonCMUS1B, 1);
644 TH2D *correlGenerReco = new TH2D("correlGenerReco", "correlGenerReco", 250, 0.0, 250.0, 250, 0.0, 250.0);
645 correlGenerReco->GetXaxis()->SetTitle("N ch gener");
646 correlGenerReco->GetYaxis()->SetTitle("N reco tracklets");
648 correlGenerReco->Sumw2();
650 fMonteCarloList->AddAt(correlGenerReco, 0);
659 //________________________________________________________________________
660 void AliAnalysisTaskMuonCollisionMultiplicity::Terminate(Option_t */*option*/)
664 fTriggerList = (TList *) GetOutputData(0);
665 fSingleMuonList = (TList *) GetOutputData(1);
666 fDimuonList = (TList *) GetOutputData(2);