2 // Manager (singleton) of corrections
4 #include "AliForwardCorrectionManager.h"
5 #include "AliFMDCorrSecondaryMap.h"
6 #include "AliFMDCorrDoubleHit.h"
7 #include "AliFMDCorrELossFit.h"
8 #include "AliFMDCorrVertexBias.h"
9 #include "AliFMDCorrMergingEfficiency.h"
10 #include "AliFMDCorrAcceptance.h"
11 #include "AliForwardUtil.h"
12 #include "AliOADBForward.h"
23 //____________________________________________________________________
24 AliForwardCorrectionManager* AliForwardCorrectionManager::fgInstance= 0;
25 const char* AliForwardCorrectionManager::fgkSecondaryMapSkel = "secondary";
26 const char* AliForwardCorrectionManager::fgkDoubleHitSkel = "doublehit";
27 const char* AliForwardCorrectionManager::fgkELossFitsSkel = "elossfits";
28 const char* AliForwardCorrectionManager::fgkVertexBiasSkel = "vertexbias";
29 const char* AliForwardCorrectionManager::fgkMergingEffSkel = "merging";
30 const char* AliForwardCorrectionManager::fgkAcceptanceSkel = "acceptance";
32 #define PREFIX "$(ALICE_ROOT)/OADB/PWGLF/FORWARD/CORRECTIONS/data/"
33 #define DB_NAME "fmd_corrections.root"
35 //____________________________________________________________________
36 AliForwardCorrectionManager& AliForwardCorrectionManager::Instance()
39 // Access to the singleton object
42 // Reference to the singleton object
44 if (!fgInstance) fgInstance= new AliForwardCorrectionManager(false);
48 //____________________________________________________________________
49 AliForwardCorrectionManager::AliForwardCorrectionManager()
52 // Default constructor
55 //____________________________________________________________________
56 AliForwardCorrectionManager::AliForwardCorrectionManager(Bool_t d)
57 : AliCorrectionManagerBase(d)
60 // Non-default constructor
65 RegisterCorrection(kIdSecondaryMap, fgkSecondaryMapSkel,
66 PREFIX DB_NAME, AliFMDCorrSecondaryMap::Class(),
67 kStandard|kSatellite);
68 RegisterCorrection(kIdELossFits, fgkELossFitsSkel,
69 PREFIX DB_NAME, AliFMDCorrELossFit::Class(), kFull);
70 RegisterCorrection(kIdVertexBias, fgkVertexBiasSkel,
71 PREFIX DB_NAME, AliFMDCorrVertexBias::Class(),
72 kStandard|kSatellite);
73 RegisterCorrection(kIdMergingEfficiency, fgkMergingEffSkel,
74 PREFIX DB_NAME, AliFMDCorrMergingEfficiency::Class(),
75 kStandard|kSatellite);
76 RegisterCorrection(kIdDoubleHit, fgkDoubleHitSkel,
77 PREFIX DB_NAME, AliFMDCorrDoubleHit::Class(),
79 RegisterCorrection(kIdAcceptance, fgkAcceptanceSkel,
80 PREFIX DB_NAME, AliFMDCorrAcceptance::Class(),
81 kRun|kSys|kSNN|kSatellite);
83 //____________________________________________________________________
85 AliForwardCorrectionManager::Init(ULong_t runNo,
95 // Read in correction based on passed parameters
98 // collisionSystem Collision system string
99 // cmsNN Center of mass energy per nucleon pair [GeV]
100 // field Magnetic field [kG]
101 // mc Monte-carlo switch
102 // what What to read in
103 // force Force (re-)reading of specified things
108 UShort_t col = AliForwardUtil::ParseCollisionSystem(sys);
109 // AliInfo(Form("Initialising with cms='%s', sNN=%fGeV field=%fkG",
110 // cms, sNN, field));
111 return Init(runNo, col,
112 AliForwardUtil::ParseCenterOfMassEnergy(col, sNN),
113 AliForwardUtil::ParseMagneticField(field),
114 mc, sat, what, force);
117 //____________________________________________________________________
119 AliForwardCorrectionManager::Init(ULong_t runNo,
129 // Read in corrections based on the parameters given
132 // collisionSystem Collision system
133 // cmsNN Center of mass energy per nuclean pair [GeV]
134 // field Magnetic field setting [kG]
135 // mc Monte-carlo switch
136 // what What to read in.
137 // force Force (re-)reading of specified things
142 EnableCorrection(kIdSecondaryMap, what & kSecondaryMap);
143 EnableCorrection(kIdDoubleHit, what & kDoubleHit);
144 EnableCorrection(kIdELossFits, what & kELossFits);
145 EnableCorrection(kIdAcceptance, what & kAcceptance);
146 EnableCorrection(kIdVertexBias, what & kVertexBias);
147 EnableCorrection(kIdMergingEfficiency,what & kMergingEfficiency);
149 return InitCorrections(runNo, sys, sNN, field, mc, sat, force);
152 //____________________________________________________________________
154 AliForwardCorrectionManager::ParseFields(const TString& fields)
157 TObjArray* tokens = fields.Tokenize(" \t,|+:;-&");
159 TObjString* ostr = 0;
160 while ((ostr = static_cast<TObjString*>(next()))) {
161 const TString& str = ostr->String();
163 if (str.Contains("all", TString::kIgnoreCase))
165 else if (str.Contains("default", TString::kIgnoreCase))
167 else if (str.Contains(fgkSecondaryMapSkel, TString::kIgnoreCase))
168 ret |= kSecondaryMap;
169 else if (str.Contains(fgkDoubleHitSkel, TString::kIgnoreCase))
171 else if (str.Contains(fgkELossFitsSkel, TString::kIgnoreCase))
173 else if (str.Contains(fgkVertexBiasSkel, TString::kIgnoreCase))
175 else if (str.Contains(fgkMergingEffSkel, TString::kIgnoreCase))
176 ret |= kMergingEfficiency;
177 else if (str.Contains(fgkAcceptanceSkel, TString::kIgnoreCase))
180 AliWarningClassF("Unknown correction: %s", str.Data());
187 //____________________________________________________________________
189 AliForwardCorrectionManager::Append(const TString& addition,
190 const TString& destination) const
192 TString dest(destination);
194 dest = PREFIX DB_NAME;
195 return AliCorrectionManagerBase::Append(addition, dest);
199 //____________________________________________________________________
200 const AliFMDCorrELossFit*
201 AliForwardCorrectionManager::GetELossFit() const
204 * Get the energy loss fit correction object.
206 * @return Get the energy loss fits corrections object or null pointer
208 return static_cast<const AliFMDCorrELossFit*>(Get(kIdELossFits));
210 //____________________________________________________________________
211 const AliFMDCorrSecondaryMap*
212 AliForwardCorrectionManager::GetSecondaryMap() const
215 * Get the secondary correction map
217 * @return Get the secondary correction map object or null
219 return static_cast<const AliFMDCorrSecondaryMap*>(Get(kIdSecondaryMap));
221 //____________________________________________________________________
222 const AliFMDCorrDoubleHit*
223 AliForwardCorrectionManager::GetDoubleHit() const
226 * Get the double hit correction object
228 * @return Get the double hit correction object or null
230 return static_cast<const AliFMDCorrDoubleHit*>(Get(kIdDoubleHit));
232 //____________________________________________________________________
233 const AliFMDCorrVertexBias*
234 AliForwardCorrectionManager::GetVertexBias() const
237 * Get the vertex bias correction object
239 * @return Get the vertex bias correction object or null
241 return static_cast<const AliFMDCorrVertexBias*>(Get(kIdVertexBias));
243 //____________________________________________________________________
244 const AliFMDCorrMergingEfficiency*
245 AliForwardCorrectionManager::GetMergingEfficiency() const
248 * Get the merging efficiency
251 * @return Get the vertex efficiency correction
254 static_cast<const AliFMDCorrMergingEfficiency*>(Get(kIdMergingEfficiency));
256 //____________________________________________________________________
257 const AliFMDCorrAcceptance*
258 AliForwardCorrectionManager::GetAcceptance() const
261 * Get the acceptance correction due to dead channels
264 * @return Acceptance correction due to dead channels
266 return static_cast<const AliFMDCorrAcceptance*>(Get(kIdAcceptance));
269 //____________________________________________________________________
271 AliForwardCorrectionManager::GetEtaAxis() const
273 const AliFMDCorrSecondaryMap* map = GetSecondaryMap();
275 return &(map->GetEtaAxis());
277 //____________________________________________________________________
279 AliForwardCorrectionManager::GetVertexAxis() const
281 const AliFMDCorrSecondaryMap* map = GetSecondaryMap();
283 return &(map->GetVertexAxis());
288 //______________________________________________________________________________
289 void AliForwardCorrectionManager::Streamer(TBuffer &R__b)
292 // Stream an object of class AliForwardCorrectionManager.
294 if (R__b.IsReading()) {
295 R__b.ReadClassBuffer(AliForwardCorrectionManager::Class(),this);
297 AliWarning(Form("Singleton instance already set (%p) when reading "
298 "singleton object (%p). Read object will be new "
299 "singleton object", fgInstance, this));
300 // delete fgInstance;
303 // fgInstance->fCorrections.ls();
305 R__b.WriteClassBuffer(AliForwardCorrectionManager::Class(),this);
310 //____________________________________________________________________