Various improvements
[u/mrichter/AliRoot.git] / PWG2 / FORWARD / analysis2 / AliForwardMultiplicityBase.cxx
1 //====================================================================
2 // 
3 // Base class for classes that calculate the multiplicity in the
4 // forward regions event-by-event
5 // 
6 // Inputs: 
7 //   - AliESDEvent 
8 //
9 // Outputs: 
10 //   - AliAODForwardMult 
11 // 
12 // Histograms 
13 //   
14 // Corrections used 
15 #include "AliForwardMultiplicityBase.h"
16 #include "AliForwardCorrectionManager.h"
17 #include "AliLog.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 <TROOT.h>
28 #include <iostream>
29 #include <iomanip>
30
31 //====================================================================
32 Bool_t 
33 AliForwardMultiplicityBase::CheckCorrections(UInt_t what) const
34 {
35   // 
36   // Check if all needed corrections are there and accounted for.  If not,
37   // do a Fatal exit 
38   // 
39   // Parameters:
40   //    what Which corrections is needed
41   // 
42   // Return:
43   //    true if all present, false otherwise
44   //  
45
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"));
52     return false;
53   }
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"); 
58     return false;
59   }
60   // Check that we have the secondary maps, needed by 
61   //   AliFMDCorrector 
62   //   AliFMDHistCollector
63   if (what & AliForwardCorrectionManager::kSecondaryMap && 
64       !fcm.GetSecondaryMap()) {
65     AliFatal("No secondary corrections");
66     return false;
67   }
68   // Check that we have the vertex bias correction, needed by 
69   //   AliFMDCorrector 
70   if (what & AliForwardCorrectionManager::kVertexBias && 
71       !fcm.GetVertexBias()) { 
72     AliFatal("No event vertex bias corrections");
73     return false;
74   }
75   // Check that we have the merging efficiencies, optionally used by 
76   //   AliFMDCorrector 
77   if (what & AliForwardCorrectionManager::kMergingEfficiency && 
78       !fcm.GetMergingEfficiency()) {
79     AliFatal("No merging efficiencies");
80     return false;
81   }
82   // Check that we have the acceptance correction, needed by 
83   //   AliFMDCorrector 
84   if (what & AliForwardCorrectionManager::kAcceptance && 
85       !fcm.GetAcceptance()) { 
86     AliFatal("No acceptance corrections");
87     return false;
88   }
89   return true;
90 }
91
92 //____________________________________________________________________
93 void
94 AliForwardMultiplicityBase::MarkEventForStore() const
95 {
96   // Make sure the AOD tree is filled 
97   AliAnalysisManager* am = AliAnalysisManager::GetAnalysisManager();
98   AliAODHandler*      ah = 
99     dynamic_cast<AliAODHandler*>(am->GetOutputEventHandler());
100   if (!ah)  
101     AliFatal("No AOD output handler set in analysis manager");
102
103   ah->SetFillAOD(kTRUE);
104 }
105
106 //____________________________________________________________________
107 void
108 AliForwardMultiplicityBase::Print(Option_t* option) const
109 {
110   // 
111   // Print information 
112   // 
113   // Parameters:
114   //    option Not used
115   //
116   std::cout << "AliForwardMultiplicityBase: " << GetName() << "\n" 
117             << "  Enable low flux code:   " << (fEnableLowFlux ? "yes" : "no")
118             << std::endl;
119   gROOT->IncreaseDirLevel();
120   GetEventInspector()   .Print(option);
121   GetEnergyFitter()     .Print(option);    
122   GetSharingFilter()    .Print(option);
123   GetDensityCalculator().Print(option);
124   GetCorrections()      .Print(option);
125   GetHistCollector()    .Print(option);
126   gROOT->DecreaseDirLevel();
127 }
128
129
130 //
131 // EOF
132 //