1 //====================================================================
3 // Base class for classes that calculate the multiplicity in the
4 // forward regions event-by-event
10 // - AliAODForwardMult
15 #include "AliForwardMultiplicityBase.h"
16 #include "AliForwardCorrectionManager.h"
18 #include "AliAODHandler.h"
19 #include "AliInputEventHandler.h"
20 #include "AliAnalysisManager.h"
21 #include "AliFMDEventInspector.h"
22 #include "AliFMDEnergyFitter.h"
23 #include "AliFMDSharingFilter.h"
24 #include "AliFMDDensityCalculator.h"
25 #include "AliFMDCorrector.h"
26 #include "AliFMDHistCollector.h"
27 #include "AliESDEvent.h"
31 //====================================================================
33 AliForwardMultiplicityBase::CheckCorrections(UInt_t what) const
36 // Check if all needed corrections are there and accounted for. If not,
40 // what Which corrections is needed
43 // true if all present, false otherwise
46 AliForwardCorrectionManager& fcm = AliForwardCorrectionManager::Instance();
47 // Check that we have the energy loss fits, needed by
48 // AliFMDSharingFilter
49 // AliFMDDensityCalculator
50 if (what & AliForwardCorrectionManager::kELossFits && !fcm.GetELossFit()) {
51 AliFatal(Form("No energy loss fits"));
54 // Check that we have the double hit correction - (optionally) used by
55 // AliFMDDensityCalculator
56 if (what & AliForwardCorrectionManager::kDoubleHit && !fcm.GetDoubleHit()) {
57 AliFatal("No double hit corrections");
60 // Check that we have the secondary maps, needed by
62 // AliFMDHistCollector
63 if (what & AliForwardCorrectionManager::kSecondaryMap &&
64 !fcm.GetSecondaryMap()) {
65 AliFatal("No secondary corrections");
68 // Check that we have the vertex bias correction, needed by
70 if (what & AliForwardCorrectionManager::kVertexBias &&
71 !fcm.GetVertexBias()) {
72 AliFatal("No event vertex bias corrections");
75 // Check that we have the merging efficiencies, optionally used by
77 if (what & AliForwardCorrectionManager::kMergingEfficiency &&
78 !fcm.GetMergingEfficiency()) {
79 AliFatal("No merging efficiencies");
82 // Check that we have the acceptance correction, needed by
84 if (what & AliForwardCorrectionManager::kAcceptance &&
85 !fcm.GetAcceptance()) {
86 AliFatal("No acceptance corrections");
91 //____________________________________________________________________
93 AliForwardMultiplicityBase::ReadCorrections(const TAxis*& pe, const TAxis*& pv)
95 UInt_t what = AliForwardCorrectionManager::kAll;
97 what ^= AliForwardCorrectionManager::kDoubleHit;
98 if (!GetCorrections().IsUseSecondaryMap()) {
99 what ^= AliForwardCorrectionManager::kSecondaryMap;
100 // Need to make eta and vertex axis here since we don't read
101 // that from the secondary correction objects
102 pe = new TAxis(200, -4, 6);
103 pv = new TAxis(10, -10, 10);
105 if (!GetCorrections().IsUseVertexBias())
106 what ^= AliForwardCorrectionManager::kVertexBias;
107 if (!GetCorrections().IsUseAcceptance())
108 what ^= AliForwardCorrectionManager::kAcceptance;
109 if (!GetCorrections().IsUseMergingEfficiency())
110 what ^= AliForwardCorrectionManager::kMergingEfficiency;
112 AliForwardCorrectionManager& fcm = AliForwardCorrectionManager::Instance();
113 if (!fcm.Init(GetEventInspector().GetCollisionSystem(),
114 GetEventInspector().GetEnergy(),
115 GetEventInspector().GetField(),
118 if (!CheckCorrections(what)) return false;
120 // Get the eta axis from the secondary maps - if read in
122 pe = fcm.GetEtaAxis();
123 if (!pe) AliFatal("No eta axis defined");
125 // Get the vertex axis from the secondary maps - if read in
127 pv = fcm.GetVertexAxis();
128 if (!pv) AliFatal("No vertex axis defined");
133 //____________________________________________________________________
135 AliForwardMultiplicityBase::GetESDEvent()
137 AliESDEvent* esd = dynamic_cast<AliESDEvent*>(InputEvent());
139 AliWarning("No ESD event found for input event");
143 // On the first event, initialize the parameters
144 if (fFirstEvent && esd->GetESDRun()) {
145 GetEventInspector().ReadRunDetails(esd);
147 AliInfo(Form("Initializing with parameters from the ESD:\n"
148 " AliESDEvent::GetBeamEnergy() ->%f\n"
149 " AliESDEvent::GetBeamType() ->%s\n"
150 " AliESDEvent::GetCurrentL3() ->%f\n"
151 " AliESDEvent::GetMagneticField()->%f\n"
152 " AliESDEvent::GetRunNumber() ->%d\n",
153 esd->GetBeamEnergy(),
156 esd->GetMagneticField(),
157 esd->GetRunNumber()));
165 //____________________________________________________________________
167 AliForwardMultiplicityBase::MarkEventForStore() const
169 // Make sure the AOD tree is filled
170 AliAnalysisManager* am = AliAnalysisManager::GetAnalysisManager();
172 dynamic_cast<AliAODHandler*>(am->GetOutputEventHandler());
174 AliFatal("No AOD output handler set in analysis manager");
176 ah->SetFillAOD(kTRUE);
179 //____________________________________________________________________
181 AliForwardMultiplicityBase::Print(Option_t* option) const
189 std::cout << "AliForwardMultiplicityBase: " << GetName() << "\n"
190 << " Enable low flux code: " << (fEnableLowFlux ? "yes" : "no")
192 gROOT->IncreaseDirLevel();
193 GetEventInspector() .Print(option);
194 GetEnergyFitter() .Print(option);
195 GetSharingFilter() .Print(option);
196 GetDensityCalculator().Print(option);
197 GetCorrections() .Print(option);
198 GetHistCollector() .Print(option);
199 gROOT->DecreaseDirLevel();