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"),
41 fFirstEventSeen(false),
44 fClusterPerTracklet(0),
53 DGUARD(fDebug,0,"Named CTOR of AliCentralMultiplicityTask: %s", name);
54 DefineOutput(1, TList::Class());
56 "ESD:AliESDRun.,AliESDHeader.,AliMultiplicity.,"
57 "SPDVertex.,PrimaryVertex.";
59 //____________________________________________________________________
60 AliCentralMultiplicityTask::AliCentralMultiplicityTask()
61 : AliAnalysisTaskSE(),
69 fFirstEventSeen(false),
72 fClusterPerTracklet(0),
81 DGUARD(fDebug,0,"Default CTOR of AliCentralMultiplicityTask");
83 //____________________________________________________________________
84 AliCentralMultiplicityTask::AliCentralMultiplicityTask(const AliCentralMultiplicityTask& o)
85 : AliAnalysisTaskSE(o),
86 fInspector(o.fInspector),
89 fAODCentral(o.fAODCentral),
91 fUseSecondary(o.fUseSecondary),
92 fUseAcceptance(o.fUseAcceptance),
93 fFirstEventSeen(o.fFirstEventSeen),
95 fNClusterTracklet(o.fNClusterTracklet),
96 fClusterPerTracklet(o.fClusterPerTracklet),
97 fNCluster(o.fNCluster),
98 fNTracklet(o.fNTracklet),
105 DGUARD(fDebug,0,"COPY CTOR of AliCentralMultiplicityTask");
108 //____________________________________________________________________
109 AliCentralMultiplicityTask&
110 AliCentralMultiplicityTask::operator=(const AliCentralMultiplicityTask& o)
113 // Assignment operator
115 DGUARD(fDebug,3,"Assignment of AliCentralMultiplicityTask");
116 if (&o == this) return *this;
117 fInspector = o.fInspector;
120 fAODCentral = o.fAODCentral;
121 fManager = o.fManager;
122 fUseSecondary = o.fUseSecondary;
123 fUseAcceptance = o.fUseAcceptance;
124 fFirstEventSeen = o.fFirstEventSeen;
126 fNClusterTracklet = o.fNClusterTracklet;
127 fClusterPerTracklet= o.fClusterPerTracklet;
128 fNCluster = o.fNCluster;
129 fNTracklet = o.fNTracklet;
134 //____________________________________________________________________
136 AliCentralMultiplicityTask::Configure(const char* macro)
138 // --- Configure the task ------------------------------------------
139 TString macroPath(gROOT->GetMacroPath());
140 if (!macroPath.Contains("$(ALICE_ROOT)/PWGLF/FORWARD/analysis2")) {
141 macroPath.Append(":$(ALICE_ROOT)/PWGLF/FORWARD/analysis2");
142 gROOT->SetMacroPath(macroPath);
144 const char* config = gSystem->Which(gROOT->GetMacroPath(),macro);
146 AliWarningF("%s not found in %s", macro, gROOT->GetMacroPath());
150 AliInfoF("Loading configuration of '%s' from %s", ClassName(), config);
151 gROOT->Macro(Form("%s((AliCentralMultiplicityTask*)%p)", config, this));
157 //____________________________________________________________________
158 void AliCentralMultiplicityTask::UserCreateOutputObjects()
161 // Create output objects
164 DGUARD(fDebug,1,"Create user output in AliCentralMultiplicityTask");
166 AliAnalysisManager* am = AliAnalysisManager::GetAnalysisManager();
168 dynamic_cast<AliAODHandler*>(am->GetOutputEventHandler());
169 if (!ah) AliFatal("No AOD output handler set in analysis manager");
172 TObject* obj = &fAODCentral;
173 ah->AddBranch("AliAODCentralMult", &obj);
180 fInspector.DefineOutput(fList);
185 //____________________________________________________________________
187 AliCentralMultiplicityTask::GetESDEvent()
190 // Get the ESD event. IF this is the first event, initialise
192 DGUARD(fDebug,1,"Get ESD event in AliCentralMultiplicityTask");
193 if (IsZombie()) return 0;
194 AliESDEvent* esd = dynamic_cast<AliESDEvent*>(InputEvent());
196 AliWarning("No ESD event found for input event");
200 // IF we've read the first event already, just return the event
201 if (fFirstEventSeen) return esd;
203 // Read the details of the rung
204 fInspector.ReadRunDetails(esd);
206 // If we weren't initialised before (i.e., in the setup), do so now.
207 if (!GetManager().IsInit()) {
208 GetManager().Init(fInspector.GetCollisionSystem(),
209 fInspector.GetEnergy(),
210 fInspector.GetField());
211 //AliInfo("Manager of corrections in AliCentralMultiplicityTask init");
214 if (!GetManager().HasSecondaryCorrection()) {
216 AliError("No secondary correction defined!");
218 if (!GetManager().HasAcceptanceCorrection()) {
220 AliError("No acceptance correction defined!");
222 // If the corrections are not seen, make this a zombie, and prevent
223 // further execution of this task.
225 AliError("Missing corrections, make this a zombie");
228 fFirstEventSeen = true;
232 // Check for existence and get secondary map
233 AliCentralCorrSecondaryMap* secMap = GetManager().GetSecMap();
234 const TAxis& vaxis = secMap->GetVertexAxis();
238 fNClusterTracklet = new TH2D("nClusterVsnTracklet",
239 "Total number of cluster vs number of tracklets",
240 100, 0, 10000, 100, 0, 10000);
241 fNClusterTracklet->SetDirectory(0);
242 fNClusterTracklet->SetXTitle("# of free clusters");
243 fNClusterTracklet->SetYTitle("# of tracklets");
244 fNClusterTracklet->SetStats(0);
245 fList->Add(fNClusterTracklet);
249 fClusterPerTracklet = new TH2D("clusterPerTracklet",
250 "N_{free cluster}/N_{tracklet} vs. #eta",
251 nEta,-lEta,lEta, 101, -.05, 10.05);
252 fClusterPerTracklet->SetDirectory(0);
253 fClusterPerTracklet->SetXTitle("#eta");
254 fClusterPerTracklet->SetYTitle("N_{free cluster}/N_{tracklet}");
255 fClusterPerTracklet->SetStats(0);
256 fList->Add(fClusterPerTracklet);
259 fNCluster = new TH1D("cacheCluster", "", nEta,-lEta,lEta);
260 fNCluster->SetDirectory(0);
263 fNTracklet = new TH1D("cacheTracklet", "", nEta,-lEta,lEta);
264 fNTracklet->SetDirectory(0);
267 // Initialize the inspecto
268 fInspector.Init(vaxis);
269 fFirstEventSeen = kTRUE;
271 // Print some information
276 //____________________________________________________________________
278 AliCentralMultiplicityTask::MarkEventForStore() const
280 // Make sure the AOD tree is filled
281 DGUARD(fDebug,1,"Mark AOD event for store in AliCentralMultiplicityTask");
282 AliAnalysisManager* am = AliAnalysisManager::GetAnalysisManager();
284 dynamic_cast<AliAODHandler*>(am->GetOutputEventHandler());
286 AliFatal("No AOD output handler set in analysis manager");
288 ah->SetFillAOD(kTRUE);
291 //____________________________________________________________________
292 void AliCentralMultiplicityTask::FindEtaLimits()
294 // Find our pseudo-rapidity limits
296 // Uses the secondary map to do so.
297 DGUARD(fDebug,1,"Find eta limits in AliCentralMultiplicityTask");
298 AliCentralCorrSecondaryMap* secMap = GetManager().GetSecMap();
300 const TAxis& vaxis = secMap->GetVertexAxis();
302 fEtaMin.Set(vaxis.GetNbins());
303 fEtaMax.Set(vaxis.GetNbins());
305 TList* hits = new TList;
307 hits->SetName("hitMaps");
310 TList* secs = new TList;
312 secs->SetName("secondaryMaps");
314 unsigned short s = 1;
315 TH2D* hCoverage = new TH2D("coverage", "#eta coverage per v_{z}",
316 secMap->GetCorrection(s)->GetXaxis()->GetNbins(),
317 secMap->GetCorrection(s)->GetXaxis()->GetXmin(),
318 secMap->GetCorrection(s)->GetXaxis()->GetXmax(),
319 vaxis.GetNbins(),vaxis.GetXmin(),vaxis.GetXmax());
320 hCoverage->SetDirectory(0);
321 hCoverage->SetXTitle("#eta");
322 hCoverage->SetYTitle("v_{z} [cm]");
323 hCoverage->SetZTitle("n_{bins}");
324 fList->Add(hCoverage);
326 for (Int_t v = 1; v <= vaxis.GetNbins(); v++) {
327 TH2D* corr = secMap->GetCorrection(UShort_t(v));
328 TH1D* proj = corr->ProjectionX(Form("secCor%02d", v));
329 proj->Scale(1. / corr->GetNbinsY());
330 proj->SetTitle(Form("Projection of secondary correction "
331 "for %+5.1f<v_{z}<%+5.1f",
332 vaxis.GetBinLowEdge(v), vaxis.GetBinUpEdge(v)));
333 proj->SetYTitle("#LT 2^{nd} correction#GT");
334 proj->SetDirectory(0);
335 proj->SetMarkerStyle(20);
336 proj->SetMarkerColor(kBlue+1);
339 TH2D* obg = static_cast<TH2D*>(corr->Clone(Form("secCor2DFiducial%02d",v)));
340 obg->SetDirectory(0);
343 TH1D* after = static_cast<TH1D*>(proj->Clone(Form("secCorFiducial%02d",v)));
344 after->SetDirectory(0);
345 after->SetMarkerColor(kRed+1);
348 TH2D* data = static_cast<TH2D*>(corr->Clone(Form("hitMap%02d",v)));
349 //d->SetTitle(Form("hitMap%02d",v));
350 data->SetTitle(Form("d^{2}N/d#eta d#phi "
351 "for %+5.1f<v_{z}<%+5.1f",
352 vaxis.GetBinLowEdge(v), vaxis.GetBinUpEdge(v)));
353 data->GetZaxis()->SetTitle("");
354 data->SetMarkerColor(kBlack);
355 data->SetMarkerStyle(1);
358 TH1D* hAcceptance = fManager.GetAcceptanceCorrection(v);
359 TH1D* accClone = static_cast<TH1D*>(hAcceptance->Clone(Form("acceptance%02d",v)));
362 // Double_t prev = 0;
363 for (Int_t e = 1; e <= proj->GetNbinsX(); e++) {
364 Double_t c = proj->GetBinContent(e);
365 if (c > .5 /*&& TMath::Abs(c - prev) < .1*c*/) {
370 after->SetBinContent(e, 0);
371 after->SetBinError(e, 0);
372 for(Int_t nn =1; nn <=obg->GetNbinsY();nn++)
373 obg->SetBinContent(e,nn,0);
376 for (Int_t e = proj->GetNbinsX(); e >= 1; e--) {
377 Double_t c = proj->GetBinContent(e);
378 if (c > .5 /*&& TMath::Abs(c - prev) < .1*c*/) {
383 after->SetBinContent(e, 0);
384 after->SetBinError(e, 0);
385 for(Int_t nn =1; nn <=obg->GetNbinsY();nn++)
386 obg->SetBinContent(e,nn,0);
390 for (Int_t nn = fEtaMin[v-1]; nn<=fEtaMax[v-1]; nn++) {
391 hCoverage->SetBinContent(nn,v,1);
397 //____________________________________________________________________
398 void AliCentralMultiplicityTask::UserExec(Option_t* /*option*/)
401 // Process each event
406 DGUARD(fDebug,1,"Process event in AliCentralMultiplicityTask");
407 fAODCentral.Clear("");
410 AliESDEvent* esd = GetESDEvent();
413 Bool_t lowFlux = kFALSE;
418 UShort_t nClusters = 0;
419 UInt_t found = fInspector.Process(esd, triggers, lowFlux,
420 ivz, vz, cent, nClusters);
422 // No event or no trigger
423 if (found & AliFMDEventInspector::kNoEvent) return;
424 if (found & AliFMDEventInspector::kNoTriggers) return;
426 // Make sure AOD is filled
429 if (found == AliFMDEventInspector::kNoSPD) return;
430 if (found == AliFMDEventInspector::kNoVertex) return;
431 if (triggers & AliAODForwardMult::kPileUp) return;
432 if (found == AliFMDEventInspector::kBadVertex) return; // Out of range
436 const AliMultiplicity* spdmult = esd->GetMultiplicity();
438 TH2D& aodHist = fAODCentral.GetHistogram();
440 ProcessESD(aodHist, spdmult);
441 CorrectData(aodHist, ivz);
443 TList* hitList = static_cast<TList*>(fList->FindObject("hitMaps"));
446 data = static_cast<TH2D*>(hitList->At(ivz-1));
452 //____________________________________________________________________
454 AliCentralMultiplicityTask::ProcessESD(TH2D& aodHist,
455 const AliMultiplicity* spdmult) const
457 DGUARD(fDebug,1,"Process the ESD in AliCentralMultiplicityTask");
461 //Filling clusters in layer 1 used for tracklets...
462 for(Int_t j = 0; j< spdmult->GetNumberOfTracklets();j++) {
463 Double_t eta = spdmult->GetEta(j);
464 fNTracklet->Fill(eta);
465 aodHist.Fill(eta,spdmult->GetPhi(j));
468 //...and then the unused ones in layer 1
469 for(Int_t j = 0; j< spdmult->GetNumberOfSingleClusters();j++) {
470 Double_t eta = -TMath::Log(TMath::Tan(spdmult->GetThetaSingle(j)/2.));
471 fNCluster->Fill(eta);
472 aodHist.Fill(eta, spdmult->GetPhiSingle(j));
474 fNClusterTracklet->Fill(fNCluster->GetEntries(),
475 fNTracklet->GetEntries());
477 fNCluster->Divide(fNTracklet);
478 for (Int_t j = 1; j <= fNCluster->GetNbinsX(); j++)
479 fClusterPerTracklet->Fill(fNCluster->GetXaxis()->GetBinCenter(j),
480 fNCluster->GetBinContent(j));
484 //____________________________________________________________________
486 AliCentralMultiplicityTask::CorrectData(TH2D& aodHist, UShort_t vtxbin) const
489 DGUARD(fDebug,1,"Correct data in AliCentralMultiplicityTask");
490 TH1D* hAcceptance = fManager.GetAcceptanceCorrection(vtxbin);
491 TH2D* hSecMap = fManager.GetSecMapCorrection(vtxbin);
493 if (!hSecMap) AliFatal("No secondary map!");
494 if (!hAcceptance) AliFatal("No acceptance!");
496 if (fUseSecondary && hSecMap) aodHist.Divide(hSecMap);
498 for(Int_t nx = 1; nx <= aodHist.GetNbinsX(); nx++) {
499 Float_t accCor = hAcceptance->GetBinContent(nx);
500 Float_t accErr = hAcceptance->GetBinError(nx);
502 Bool_t fiducial = true;
503 if (nx < fEtaMin[vtxbin-1] || nx > fEtaMax[vtxbin-1])
505 // Bool_t etabinSeen = kFALSE;
506 for(Int_t ny = 1; ny <= aodHist.GetNbinsY(); ny++) {
509 aodHist.SetBinContent(nx, ny, 0);
510 aodHist.SetBinError(nx, ny, 0);
514 // Get currrent value
515 Float_t aodValue = aodHist.GetBinContent(nx,ny);
516 Float_t aodErr = aodHist.GetBinError(nx,ny);
518 #if 0 // This is done once in the FindEtaBins function
521 if(hSecMap) secCor = hSecMap->GetBinContent(nx,ny);
522 if (secCor > 0.5) etabinSeen = kTRUE;
524 if (aodValue < 0.000001) {
525 aodHist.SetBinContent(nx,ny, 0);
526 aodHist.SetBinError(nx,ny, 0);
529 if (!fUseAcceptance) continue;
531 // Acceptance correction
532 if (accCor < 0.000001) accCor = 1;
533 Float_t aodNew = aodValue / accCor ;
534 Float_t error = aodNew*TMath::Sqrt(TMath::Power(aodErr/aodValue,2) +
535 TMath::Power(accErr/accCor,2) );
536 aodHist.SetBinContent(nx,ny, aodNew);
538 aodHist.SetBinError(nx,ny,error);
539 aodHist.SetBinError(nx,ny,aodErr);
541 //Filling underflow bin if we eta bin is in range
542 if (fiducial) aodHist.SetBinContent(nx,0, 1.);
543 // if (etabinSeen) aodHist.SetBinContent(nx,0, 1.);
547 //____________________________________________________________________
548 void AliCentralMultiplicityTask::Terminate(Option_t* /*option*/)
556 DGUARD(fDebug,1,"Process merged output in AliCentralMultiplicityTask");
558 //____________________________________________________________________
560 AliCentralMultiplicityTask::Print(Option_t* option) const
568 std::cout << ClassName() << ": " << GetName() << "\n"
570 << " Use secondary correction: " << fUseSecondary << '\n'
571 << " Use acceptance correction: " << fUseAcceptance << '\n'
572 << " Off-line trigger mask: 0x"
573 << std::hex << std::setfill('0')
574 << std::setw (8) << fOfflineTriggerMask
575 << std::dec << std::setfill (' ')
576 << std::noboolalpha << std::endl;
577 AliCentralCorrSecondaryMap* secMap = GetManager().GetSecMap();
579 const TAxis& vaxis = secMap->GetVertexAxis();
580 std::cout << " Eta ranges:\n"
581 << " Vertex | Eta bins\n"
583 << " ----------------+-----------" << std::endl;
584 for (Int_t v = 1; v <= vaxis.GetNbins(); v++) {
585 std::cout << " " << std::setw(2) << v << " "
586 << std::setw(5) << vaxis.GetBinLowEdge(v) << "-"
587 << std::setw(5) << vaxis.GetBinUpEdge(v) << " | "
588 << std::setw(3) << fEtaMin[v-1] << "-"
589 << std::setw(3) << fEtaMax[v-1] << std::endl;
593 gROOT->IncreaseDirLevel();
594 fManager.Print(option);
595 fInspector.Print(option);
596 gROOT->DecreaseDirLevel();
599 //====================================================================
600 AliCentralMultiplicityTask::Manager::Manager() :
601 fAcceptancePath("$ALICE_ROOT/PWGLF/FORWARD/corrections/CentralAcceptance"),
602 fSecMapPath("$ALICE_ROOT/PWGLF/FORWARD/corrections/CentralSecMap"),
605 fAcceptanceName("centralacceptance"),
606 fSecMapName("centralsecmap"),
613 //____________________________________________________________________
614 AliCentralMultiplicityTask::Manager::Manager(const Manager& o)
615 :fAcceptancePath(o.fAcceptancePath),
616 fSecMapPath(o.fSecMapPath),
617 fAcceptance(o.fAcceptance),
619 fAcceptanceName(o.fAcceptanceName),
620 fSecMapName(o.fSecMapName),
627 //____________________________________________________________________
628 AliCentralMultiplicityTask::Manager&
629 AliCentralMultiplicityTask::Manager::operator=(const Manager& o)
632 // Assignment operator
634 if (&o == this) return *this;
635 fAcceptancePath = o.fAcceptancePath;
636 fSecMapPath = o.fSecMapPath;
637 fAcceptance = o.fAcceptance;
639 fAcceptanceName = o.fAcceptanceName;
640 fSecMapName = o.fSecMapName;
645 //____________________________________________________________________
647 AliCentralMultiplicityTask::Manager::GetFullFileName(UShort_t what,
653 // Get full path name to object file
657 // sys Collision system
658 // sNN Center of mass energy
659 // field Magnetic field
665 what == 0 ? GetSecMapPath() : GetAcceptancePath(),
666 GetFileName(what, sys, sNN, field));
669 //____________________________________________________________________
671 AliCentralMultiplicityTask::Manager::GetFileName(UShort_t what ,
677 // Get the full path name
681 // sys Collision system
682 // sNN Center of mass energy
683 // field Magnetic field
688 // Must be static - otherwise the data may disappear on return from
689 // this member function
690 static TString fname = "";
693 case 0: fname = fSecMapName; break;
694 case 1: fname = fAcceptanceName; break;
696 ::Error("GetFileName",
697 "Invalid indentifier %d for central object, must be 0 or 1!", what);
700 fname.Append(Form("_%s_%04dGeV_%c%1dkG.root",
701 AliForwardUtil::CollisionSystemString(sys),
702 sNN, (field < 0 ? 'm' : 'p'), TMath::Abs(field)));
707 //____________________________________________________________________
709 AliCentralMultiplicityTask::Manager::GetSecMapCorrection(UShort_t vtxbin) const
712 // Get the secondary map
721 ::Warning("GetSecMapCorrection","No secondary map defined");
724 return fSecmap->GetCorrection(vtxbin);
726 //____________________________________________________________________
728 AliCentralMultiplicityTask::Manager::GetAcceptanceCorrection(UShort_t vtxbin)
732 // Get the acceptance correction
741 ::Warning("GetAcceptanceCorrection","No acceptance map defined");
744 return fAcceptance->GetCorrection(vtxbin);
747 //____________________________________________________________________
749 AliCentralMultiplicityTask::Manager::Init(UShort_t sys,
757 // sys Collision system (1: pp, 2: PbPb, 3: pPb)
758 // sNN Center of mass energy per nucleon pair [GeV]
759 // field Magnetic field [kG]
761 if(fIsInit) ::Warning("Init","Already initialised - overriding...");
763 TFile fsec(GetFullFileName(0,sys,sNN,field));
765 dynamic_cast<AliCentralCorrSecondaryMap*>(fsec.Get(fSecMapName.Data()));
767 ::Error("Init", "no central Secondary Map found!") ;
770 TFile facc(GetFullFileName(1,sys,sNN,field));
772 dynamic_cast<AliCentralCorrAcceptance*>(facc.Get(fAcceptanceName.Data()));
774 ::Error("Init", "no central Acceptance found!") ;
778 if(fSecmap && fAcceptance) {
781 "Central Manager initialised for %s, energy %dGeV, field %dkG",
782 sys == 1 ? "pp" : sys == 2 ? "PbPb" : sys == 3 ? "pPb" : "unknown", sNN,field);
785 //____________________________________________________________________
787 AliCentralMultiplicityTask::Manager::WriteFile(UShort_t what,
795 // Write correction output to (a temporary) file
798 // What What to write
799 // sys Collision system (1: pp, 2: PbPb, 3: pPb)
800 // sNN Center of mass energy per nucleon (GeV)
802 // obj Object to write
803 // full if true, write to full path, otherwise locally
809 ofName = GetFileName(what, sys, sNN, fld);
811 ofName = GetFullFileName(what, sys, sNN, fld);
812 if (ofName.IsNull()) {
813 AliErrorGeneral("Manager",Form("Unknown object type %d", what));
816 TFile* output = TFile::Open(ofName, "RECREATE");
818 AliErrorGeneral("Manager",Form("Failed to open file %s", ofName.Data()));
822 TString oName(GetObjectName(what));
823 Int_t ret = obj->Write(oName);
825 AliErrorGeneral("Manager",Form("Failed to write %p to %s/%s (%d)",
826 obj, ofName.Data(), oName.Data(), ret));
830 ret = output->Write();
832 AliErrorGeneral("Manager",
833 Form("Failed to write %s to disk (%d)", ofName.Data(),ret));
839 TString cName(obj->IsA()->GetName());
840 AliInfoGeneral("Manager",
841 Form("Wrote %s object %s to %s\n",
842 cName.Data(),oName.Data(), ofName.Data()));
844 TString dName(GetFileDir(what));
845 AliInfoGeneral("Manager",
846 Form("%s should be copied to %s\n"
848 "aliroot $ALICE_ROOT/PWGLF/FORWARD/analysis2/scripts/"
849 "MoveCorrections.C\\(%d\\)\nor\n\t"
851 ofName.Data(),dName.Data(),
853 gSystem->ExpandPathName(dName.Data())));
860 //____________________________________________________________________
862 AliCentralMultiplicityTask::Manager::Print(Option_t* option) const
865 // Print information to standard output
867 std::cout << " AliCentralMultiplicityTask::Manager\n"
869 << " Initialized: " << fIsInit << '\n'
870 << " Acceptance path: " << fAcceptancePath << '\n'
871 << " Acceptance name: " << fAcceptanceName << '\n'
872 << " Acceptance: " << fAcceptance << '\n'
873 << " Secondary path: " << fSecMapPath << '\n'
874 << " Secondary name: " << fSecMapName << '\n'
875 << " Secondary map: " << fSecmap
876 << std::noboolalpha << std::endl;
877 if (fAcceptance) fAcceptance->Print(option);
878 if (fSecmap) fSecmap->Print(option);