1 //====================================================================
3 // Base class for classes that calculate the multiplicity in the
4 // central region event-by-event
10 // - AliAODCentralMult
15 #include "AliCentralMultiplicityTask.h"
16 #include "AliAODForwardMult.h"
17 #include "AliForwardUtil.h"
19 #include "AliAODHandler.h"
20 #include "AliAnalysisManager.h"
21 #include "AliESDEvent.h"
22 #include "AliMultiplicity.h"
31 //====================================================================
32 AliCentralMultiplicityTask::AliCentralMultiplicityTask(const char* name)
33 : AliAnalysisTaskSE(name),
34 fInspector("centralEventInspector"),
42 fFirstEventSeen(false),
45 fClusterPerTracklet(0),
54 DGUARD(fDebug, 3,"Named CTOR of AliCentralMultiplicityTask: %s", name);
55 DefineOutput(1, TList::Class());
57 "ESD:AliESDRun.,AliESDHeader.,AliMultiplicity.,"
58 "SPDVertex.,PrimaryVertex.";
60 //____________________________________________________________________
61 AliCentralMultiplicityTask::AliCentralMultiplicityTask()
62 : AliAnalysisTaskSE(),
71 fFirstEventSeen(false),
74 fClusterPerTracklet(0),
83 DGUARD(fDebug, 3,"Default CTOR of AliCentralMultiplicityTask");
85 //____________________________________________________________________
86 AliCentralMultiplicityTask::AliCentralMultiplicityTask(const AliCentralMultiplicityTask& o)
87 : AliAnalysisTaskSE(o),
88 fInspector(o.fInspector),
92 fAODCentral(o.fAODCentral),
94 fUseSecondary(o.fUseSecondary),
95 fUseAcceptance(o.fUseAcceptance),
96 fFirstEventSeen(o.fFirstEventSeen),
98 fNClusterTracklet(o.fNClusterTracklet),
99 fClusterPerTracklet(o.fClusterPerTracklet),
100 fNCluster(o.fNCluster),
101 fNTracklet(o.fNTracklet),
108 DGUARD(fDebug, 3,"COPY CTOR of AliCentralMultiplicityTask");
111 //____________________________________________________________________
112 AliCentralMultiplicityTask&
113 AliCentralMultiplicityTask::operator=(const AliCentralMultiplicityTask& o)
116 // Assignment operator
118 DGUARD(fDebug,3,"Assignment of AliCentralMultiplicityTask");
119 if (&o == this) return *this;
120 fInspector = o.fInspector;
124 fAODCentral = o.fAODCentral;
125 fManager = o.fManager;
126 fUseSecondary = o.fUseSecondary;
127 fUseAcceptance = o.fUseAcceptance;
128 fFirstEventSeen = o.fFirstEventSeen;
130 fNClusterTracklet = o.fNClusterTracklet;
131 fClusterPerTracklet= o.fClusterPerTracklet;
132 fNCluster = o.fNCluster;
133 fNTracklet = o.fNTracklet;
138 //____________________________________________________________________
140 AliCentralMultiplicityTask::Configure(const char* macro)
142 // --- Configure the task ------------------------------------------
143 TString macroPath(gROOT->GetMacroPath());
144 if (!macroPath.Contains("$(ALICE_ROOT)/PWGLF/FORWARD/analysis2")) {
145 macroPath.Append(":$(ALICE_ROOT)/PWGLF/FORWARD/analysis2");
146 gROOT->SetMacroPath(macroPath);
148 const char* config = gSystem->Which(gROOT->GetMacroPath(),macro);
150 AliWarningF("%s not found in %s", macro, gROOT->GetMacroPath());
154 AliInfoF("Loading configuration of '%s' from %s", ClassName(), config);
155 gROOT->Macro(Form("%s((AliCentralMultiplicityTask*)%p)", config, this));
161 //____________________________________________________________________
162 void AliCentralMultiplicityTask::UserCreateOutputObjects()
165 // Create output objects
168 DGUARD(fDebug,1,"Create user output in AliCentralMultiplicityTask");
170 AliAnalysisManager* am = AliAnalysisManager::GetAnalysisManager();
172 dynamic_cast<AliAODHandler*>(am->GetOutputEventHandler());
173 if (!ah) AliFatal("No AOD output handler set in analysis manager");
176 TObject* obj = &fAODCentral;
177 ah->AddBranch("AliAODCentralMult", &obj);
184 fInspector.CreateOutputObjects(fList);
189 //____________________________________________________________________
191 AliCentralMultiplicityTask::GetESDEvent()
194 // Get the ESD event. IF this is the first event, initialise
196 DGUARD(fDebug,1,"Get ESD event in AliCentralMultiplicityTask");
197 if (IsZombie()) return 0;
198 AliESDEvent* esd = dynamic_cast<AliESDEvent*>(InputEvent());
200 AliWarning("No ESD event found for input event");
204 // Load in the data needed
207 // IF we've read the first event already, just return the event
208 if (fFirstEventSeen) return esd;
210 // Read the details of the rung
211 fInspector.ReadRunDetails(esd);
213 // If we weren't initialised before (i.e., in the setup), do so now.
214 if (!GetManager().IsInit()) {
215 GetManager().Init(fInspector.GetCollisionSystem(),
216 fInspector.GetEnergy(),
217 fInspector.GetField());
218 //AliInfo("Manager of corrections in AliCentralMultiplicityTask init");
221 if (!GetManager().HasSecondaryCorrection()) {
223 AliError("No secondary correction defined!");
225 if (!GetManager().HasAcceptanceCorrection()) {
227 AliError("No acceptance correction defined!");
229 // If the corrections are not seen, make this a zombie, and prevent
230 // further execution of this task.
232 AliError("Missing corrections, make this a zombie");
235 fFirstEventSeen = true;
239 // Check for existence and get secondary map
240 AliCentralCorrSecondaryMap* secMap = GetManager().GetSecMap();
241 const TAxis& vaxis = secMap->GetVertexAxis();
245 fNClusterTracklet = new TH2D("nClusterVsnTracklet",
246 "Total number of cluster vs number of tracklets",
247 100, 0, 10000, 100, 0, 10000);
248 fNClusterTracklet->SetDirectory(0);
249 fNClusterTracklet->SetXTitle("# of free clusters");
250 fNClusterTracklet->SetYTitle("# of tracklets");
251 fNClusterTracklet->SetStats(0);
252 fList->Add(fNClusterTracklet);
256 fClusterPerTracklet = new TH2D("clusterPerTracklet",
257 "N_{free cluster}/N_{tracklet} vs. #eta",
258 nEta,-lEta,lEta, 101, -.05, 10.05);
259 fClusterPerTracklet->SetDirectory(0);
260 fClusterPerTracklet->SetXTitle("#eta");
261 fClusterPerTracklet->SetYTitle("N_{free cluster}/N_{tracklet}");
262 fClusterPerTracklet->SetStats(0);
263 fList->Add(fClusterPerTracklet);
266 fNCluster = new TH1D("cacheCluster", "", nEta,-lEta,lEta);
267 fNCluster->SetDirectory(0);
270 fNTracklet = new TH1D("cacheTracklet", "", nEta,-lEta,lEta);
271 fNTracklet->SetDirectory(0);
274 // Initialize the inspecto
275 fInspector.SetupForData(vaxis);
276 fFirstEventSeen = kTRUE;
278 // Print some information
283 //____________________________________________________________________
285 AliCentralMultiplicityTask::MarkEventForStore() const
287 // Make sure the AOD tree is filled
288 DGUARD(fDebug,1,"Mark AOD event for store in AliCentralMultiplicityTask");
289 AliAnalysisManager* am = AliAnalysisManager::GetAnalysisManager();
291 dynamic_cast<AliAODHandler*>(am->GetOutputEventHandler());
293 AliFatal("No AOD output handler set in analysis manager");
295 ah->SetFillAOD(kTRUE);
298 //____________________________________________________________________
299 void AliCentralMultiplicityTask::FindEtaLimits()
301 // Find our pseudo-rapidity limits
303 // Uses the secondary map to do so.
304 DGUARD(fDebug,1,"Find eta limits in AliCentralMultiplicityTask");
305 AliCentralCorrSecondaryMap* secMap = GetManager().GetSecMap();
307 const TAxis& vaxis = secMap->GetVertexAxis();
309 fEtaMin.Set(vaxis.GetNbins());
310 fEtaMax.Set(vaxis.GetNbins());
314 fHits->SetName("hitMaps");
317 TList* secs = new TList;
319 secs->SetName("secondaryMaps");
321 unsigned short s = 1;
322 TH2D* hCoverage = new TH2D("coverage", "#eta coverage per v_{z}",
323 secMap->GetCorrection(s)->GetXaxis()->GetNbins(),
324 secMap->GetCorrection(s)->GetXaxis()->GetXmin(),
325 secMap->GetCorrection(s)->GetXaxis()->GetXmax(),
326 vaxis.GetNbins(),vaxis.GetXmin(),vaxis.GetXmax());
327 hCoverage->SetDirectory(0);
328 hCoverage->SetXTitle("#eta");
329 hCoverage->SetYTitle("v_{z} [cm]");
330 hCoverage->SetZTitle("n_{bins}");
331 fList->Add(hCoverage);
333 fAODCentral.Init(*(secMap->GetCorrection(s)->GetXaxis()));
335 for (Int_t v = 1; v <= vaxis.GetNbins(); v++) {
336 TH2D* corr = secMap->GetCorrection(UShort_t(v));
337 TH1D* proj = corr->ProjectionX(Form("secCor%02d", v));
338 proj->Scale(1. / corr->GetNbinsY());
339 proj->SetTitle(Form("Projection of secondary correction "
340 "for %+5.1f<v_{z}<%+5.1f",
341 vaxis.GetBinLowEdge(v), vaxis.GetBinUpEdge(v)));
342 proj->SetYTitle("#LT 2^{nd} correction#GT");
343 proj->SetDirectory(0);
344 proj->SetMarkerStyle(20);
345 proj->SetMarkerColor(kBlue+1);
348 TH2D* obg = static_cast<TH2D*>(corr->Clone(Form("secCor2DFiducial%02d",v)));
349 obg->SetDirectory(0);
352 TH1D* after = static_cast<TH1D*>(proj->Clone(Form("secCorFiducial%02d",v)));
353 after->SetDirectory(0);
354 after->SetMarkerColor(kRed+1);
357 TH2D* data = static_cast<TH2D*>(corr->Clone(Form("hitMap%02d",v)));
358 //d->SetTitle(Form("hitMap%02d",v));
359 data->SetTitle(Form("d^{2}N/d#eta d#phi "
360 "for %+5.1f<v_{z}<%+5.1f",
361 vaxis.GetBinLowEdge(v), vaxis.GetBinUpEdge(v)));
362 data->GetZaxis()->SetTitle("");
363 data->SetMarkerColor(kBlack);
364 data->SetMarkerStyle(1);
367 TH1D* hAcceptance = fManager.GetAcceptanceCorrection(v);
368 TH1D* accClone = static_cast<TH1D*>(hAcceptance->Clone(Form("acceptance%02d",v)));
371 // Double_t prev = 0;
372 for (Int_t e = 1; e <= proj->GetNbinsX(); e++) {
373 Double_t c = proj->GetBinContent(e);
374 if (c > .5 /*&& TMath::Abs(c - prev) < .1*c*/) {
379 after->SetBinContent(e, 0);
380 after->SetBinError(e, 0);
381 for(Int_t nn =1; nn <=obg->GetNbinsY();nn++)
382 obg->SetBinContent(e,nn,0);
385 for (Int_t e = proj->GetNbinsX(); e >= 1; e--) {
386 Double_t c = proj->GetBinContent(e);
387 if (c > .5 /*&& TMath::Abs(c - prev) < .1*c*/) {
392 after->SetBinContent(e, 0);
393 after->SetBinError(e, 0);
394 for(Int_t nn =1; nn <=obg->GetNbinsY();nn++)
395 obg->SetBinContent(e,nn,0);
399 for (Int_t nn = fEtaMin[v-1]; nn<=fEtaMax[v-1]; nn++) {
400 hCoverage->SetBinContent(nn,v,1);
406 //____________________________________________________________________
407 void AliCentralMultiplicityTask::UserExec(Option_t* /*option*/)
410 // Process each event
415 DGUARD(fDebug,1,"Process event in AliCentralMultiplicityTask");
416 fAODCentral.Clear("");
419 AliESDEvent* esd = GetESDEvent();
422 Bool_t lowFlux = kFALSE;
427 UShort_t nClusters = 0;
428 UInt_t found = fInspector.Process(esd, triggers, lowFlux,
429 ivz, ip, cent, nClusters);
431 // No event or no trigger
432 if (found & AliFMDEventInspector::kNoEvent) return;
433 if (found & AliFMDEventInspector::kNoTriggers) return;
435 // Make sure AOD is filled
438 if (found == AliFMDEventInspector::kNoSPD) return;
439 if (found == AliFMDEventInspector::kNoVertex) return;
440 if (triggers & AliAODForwardMult::kPileUp) return;
441 if (found == AliFMDEventInspector::kBadVertex) return; // Out of range
445 const AliMultiplicity* spdmult = esd->GetMultiplicity();
447 TH2D& aodHist = fAODCentral.GetHistogram();
449 ProcessESD(aodHist, spdmult);
450 CorrectData(aodHist, ivz);
452 // TList* hitList = static_cast<TList*>(fList->FindObject("hitMaps"));
453 TH2D* data = static_cast<TH2D*>(fHits->At(ivz-1));
454 if(data) data->Add(&aodHist);
458 //____________________________________________________________________
460 AliCentralMultiplicityTask::ProcessESD(TH2D& aodHist,
461 const AliMultiplicity* spdmult) const
463 DGUARD(fDebug,1,"Process the ESD in AliCentralMultiplicityTask");
467 //Filling clusters in layer 1 used for tracklets...
468 for(Int_t j = 0; j< spdmult->GetNumberOfTracklets();j++) {
469 Double_t eta = spdmult->GetEta(j);
470 fNTracklet->Fill(eta);
471 aodHist.Fill(eta,spdmult->GetPhi(j));
474 //...and then the unused ones in layer 1
475 for(Int_t j = 0; j< spdmult->GetNumberOfSingleClusters();j++) {
476 Double_t eta = -TMath::Log(TMath::Tan(spdmult->GetThetaSingle(j)/2.));
477 fNCluster->Fill(eta);
478 aodHist.Fill(eta, spdmult->GetPhiSingle(j));
480 fNClusterTracklet->Fill(fNCluster->GetEntries(),
481 fNTracklet->GetEntries());
483 fNCluster->Divide(fNTracklet);
484 for (Int_t j = 1; j <= fNCluster->GetNbinsX(); j++)
485 fClusterPerTracklet->Fill(fNCluster->GetXaxis()->GetBinCenter(j),
486 fNCluster->GetBinContent(j));
490 //____________________________________________________________________
492 AliCentralMultiplicityTask::CorrectData(TH2D& aodHist, UShort_t vtxbin) const
495 DGUARD(fDebug,1,"Correct data in AliCentralMultiplicityTask");
496 TH1D* hAcceptance = fManager.GetAcceptanceCorrection(vtxbin);
497 TH2D* hSecMap = fManager.GetSecMapCorrection(vtxbin);
499 if (!hSecMap) AliFatal("No secondary map!");
500 if (!hAcceptance) AliFatal("No acceptance!");
502 if (fUseSecondary && hSecMap) aodHist.Divide(hSecMap);
504 Int_t nY = aodHist.GetNbinsY();
505 for(Int_t ix = 1; ix <= aodHist.GetNbinsX(); ix++) {
506 Float_t accCor = hAcceptance->GetBinContent(ix);
507 Float_t accErr = hAcceptance->GetBinError(ix);
509 Bool_t fiducial = true;
510 if (ix < fEtaMin[vtxbin-1] || ix > fEtaMax[vtxbin-1])
512 // Bool_t etabinSeen = kFALSE;
513 for(Int_t iy = 1; iy <= nY; iy++) {
516 aodHist.SetBinContent(ix, iy, 0);
517 aodHist.SetBinError(ix, iy, 0);
521 // Get currrent value
522 Float_t aodValue = aodHist.GetBinContent(ix,iy);
523 Float_t aodErr = aodHist.GetBinError(ix,iy);
525 #if 0 // This is done once in the FindEtaBins function
528 if(hSecMap) secCor = hSecMap->GetBinContent(ix,iy);
529 if (secCor > 0.5) etabinSeen = kTRUE;
531 if (aodValue < 0.000001) {
532 aodHist.SetBinContent(ix,iy, 0);
533 aodHist.SetBinError(ix,iy, 0);
536 if (!fUseAcceptance) continue;
538 // Acceptance correction
539 if (accCor < 0.000001) accCor = 1;
540 Float_t aodNew = aodValue / accCor ;
541 Float_t error = aodNew*TMath::Sqrt(TMath::Power(aodErr/aodValue,2) +
542 TMath::Power(accErr/accCor,2) );
543 aodHist.SetBinContent(ix,iy, aodNew);
545 aodHist.SetBinError(ix,iy,error);
546 aodHist.SetBinError(ix,iy,aodErr);
548 //Filling underflow bin if we eta bin is in range
550 aodHist.SetBinContent(ix,0, 1.);
551 aodHist.SetBinContent(ix,nY+1, 1.);
553 // if (etabinSeen) aodHist.SetBinContent(ix,0, 1.);
557 //____________________________________________________________________
558 void AliCentralMultiplicityTask::Terminate(Option_t* /*option*/)
566 DGUARD(fDebug,1,"Process merged output in AliCentralMultiplicityTask");
568 //____________________________________________________________________
570 AliCentralMultiplicityTask::Print(Option_t* option) const
578 std::cout << ClassName() << ": " << GetName() << "\n"
580 << " Use secondary correction: " << fUseSecondary << '\n'
581 << " Use acceptance correction: " << fUseAcceptance << '\n'
582 << " Off-line trigger mask: 0x"
583 << std::hex << std::setfill('0')
584 << std::setw (8) << fOfflineTriggerMask
585 << std::dec << std::setfill (' ')
586 << std::noboolalpha << std::endl;
587 AliCentralCorrSecondaryMap* secMap = GetManager().GetSecMap();
589 const TAxis& vaxis = secMap->GetVertexAxis();
590 std::cout << " Eta ranges:\n"
591 << " Vertex | Eta bins\n"
593 << " ----------------+-----------" << std::endl;
594 for (Int_t v = 1; v <= vaxis.GetNbins(); v++) {
595 std::cout << " " << std::setw(2) << v << " "
596 << std::setw(5) << vaxis.GetBinLowEdge(v) << "-"
597 << std::setw(5) << vaxis.GetBinUpEdge(v) << " | ";
598 if (fEtaMin.GetSize() <= 0)
599 std::cout << " ? - ?";
601 std::cout << std::setw(3) << fEtaMin[v-1] << "-"
602 << std::setw(3) << fEtaMax[v-1];
603 std::cout << std::endl;
607 gROOT->IncreaseDirLevel();
608 fManager.Print(option);
609 fInspector.Print(option);
610 gROOT->DecreaseDirLevel();
613 //====================================================================
614 AliCentralMultiplicityTask::Manager::Manager() :
615 fAcceptancePath("$ALICE_ROOT/PWGLF/FORWARD/corrections/CentralAcceptance"),
616 fSecMapPath("$ALICE_ROOT/PWGLF/FORWARD/corrections/CentralSecMap"),
619 fAcceptanceName("centralacceptance"),
620 fSecMapName("centralsecmap"),
627 //____________________________________________________________________
628 AliCentralMultiplicityTask::Manager::Manager(const Manager& o)
629 :fAcceptancePath(o.fAcceptancePath),
630 fSecMapPath(o.fSecMapPath),
631 fAcceptance(o.fAcceptance),
633 fAcceptanceName(o.fAcceptanceName),
634 fSecMapName(o.fSecMapName),
641 //____________________________________________________________________
642 AliCentralMultiplicityTask::Manager&
643 AliCentralMultiplicityTask::Manager::operator=(const Manager& o)
646 // Assignment operator
648 if (&o == this) return *this;
649 fAcceptancePath = o.fAcceptancePath;
650 fSecMapPath = o.fSecMapPath;
651 fAcceptance = o.fAcceptance;
653 fAcceptanceName = o.fAcceptanceName;
654 fSecMapName = o.fSecMapName;
659 //____________________________________________________________________
661 AliCentralMultiplicityTask::Manager::GetFullFileName(UShort_t what,
667 // Get full path name to object file
671 // sys Collision system
672 // sNN Center of mass energy
673 // field Magnetic field
679 what == 0 ? GetSecMapPath() : GetAcceptancePath(),
680 GetFileName(what, sys, sNN, field));
683 //____________________________________________________________________
685 AliCentralMultiplicityTask::Manager::GetFileName(UShort_t what ,
691 // Get the full path name
695 // sys Collision system
696 // sNN Center of mass energy
697 // field Magnetic field
702 // Must be static - otherwise the data may disappear on return from
703 // this member function
704 static TString fname = "";
707 case 0: fname = fSecMapName; break;
708 case 1: fname = fAcceptanceName; break;
710 ::Error("GetFileName",
711 "Invalid indentifier %d for central object, must be 0 or 1!", what);
714 fname.Append(Form("_%s_%04dGeV_%c%1dkG.root",
715 AliForwardUtil::CollisionSystemString(sys),
716 sNN, (field < 0 ? 'm' : 'p'), TMath::Abs(field)));
721 //____________________________________________________________________
723 AliCentralMultiplicityTask::Manager::GetSecMapCorrection(UShort_t vtxbin) const
726 // Get the secondary map
735 ::Warning("GetSecMapCorrection","No secondary map defined");
738 return fSecmap->GetCorrection(vtxbin);
740 //____________________________________________________________________
742 AliCentralMultiplicityTask::Manager::GetAcceptanceCorrection(UShort_t vtxbin)
746 // Get the acceptance correction
755 ::Warning("GetAcceptanceCorrection","No acceptance map defined");
758 return fAcceptance->GetCorrection(vtxbin);
761 //____________________________________________________________________
763 AliCentralMultiplicityTask::Manager::Init(UShort_t sys,
771 // sys Collision system (1: pp, 2: PbPb, 3: pPb)
772 // sNN Center of mass energy per nucleon pair [GeV]
773 // field Magnetic field [kG]
775 if(fIsInit) ::Warning("Init","Already initialised - overriding...");
777 TFile fsec(GetFullFileName(0,sys,sNN,field));
779 dynamic_cast<AliCentralCorrSecondaryMap*>(fsec.Get(fSecMapName.Data()));
781 ::Error("Init", "no central Secondary Map found!") ;
784 TFile facc(GetFullFileName(1,sys,sNN,field));
786 dynamic_cast<AliCentralCorrAcceptance*>(facc.Get(fAcceptanceName.Data()));
788 ::Error("Init", "no central Acceptance found!") ;
792 if(fSecmap && fAcceptance) {
795 "Central Manager initialised for %s, energy %dGeV, field %dkG",
796 sys == 1 ? "pp" : sys == 2 ? "PbPb" : sys == 3 ? "pPb" : "unknown", sNN,field);
799 //____________________________________________________________________
801 AliCentralMultiplicityTask::Manager::WriteFile(UShort_t what,
809 // Write correction output to (a temporary) file
812 // What What to write
813 // sys Collision system (1: pp, 2: PbPb, 3: pPb)
814 // sNN Center of mass energy per nucleon (GeV)
816 // obj Object to write
817 // full if true, write to full path, otherwise locally
823 ofName = GetFileName(what, sys, sNN, fld);
825 ofName = GetFullFileName(what, sys, sNN, fld);
826 if (ofName.IsNull()) {
827 AliErrorGeneral("Manager",Form("Unknown object type %d", what));
830 TFile* output = TFile::Open(ofName, "RECREATE");
832 AliErrorGeneral("Manager",Form("Failed to open file %s", ofName.Data()));
836 TString oName(GetObjectName(what));
837 Int_t ret = obj->Write(oName);
839 AliErrorGeneral("Manager",Form("Failed to write %p to %s/%s (%d)",
840 obj, ofName.Data(), oName.Data(), ret));
844 ret = output->Write();
846 AliErrorGeneral("Manager",
847 Form("Failed to write %s to disk (%d)", ofName.Data(),ret));
854 TString cName(obj->IsA()->GetName());
855 AliInfoGeneral("Manager",
856 Form("Wrote %s object %s to %s\n",
857 cName.Data(),oName.Data(), ofName.Data()));
859 TString dName(GetFileDir(what));
860 AliInfoGeneral("Manager",
861 Form("\n %s should be copied to %s\n"
863 "aliroot $ALICE_ROOT/PWGLF/FORWARD/analysis2/scripts/"
864 "MoveCorrections.C\\(%d\\)\nor\n\t"
866 ofName.Data(),dName.Data(),
868 gSystem->ExpandPathName(dName.Data())));
876 //____________________________________________________________________
878 AliCentralMultiplicityTask::Manager::Print(Option_t* option) const
881 // Print information to standard output
883 std::cout << " AliCentralMultiplicityTask::Manager\n"
885 << " Initialized: " << fIsInit << '\n'
886 << " Acceptance path: " << fAcceptancePath << '\n'
887 << " Acceptance name: " << fAcceptanceName << '\n'
888 << " Acceptance: " << fAcceptance << '\n'
889 << " Secondary path: " << fSecMapPath << '\n'
890 << " Secondary name: " << fSecMapName << '\n'
891 << " Secondary map: " << fSecmap
892 << std::noboolalpha << std::endl;
893 if (fAcceptance) fAcceptance->Print(option);
894 if (fSecmap) fSecmap->Print(option);