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 "AliFMDCorrNoiseGain.h"
12 #include "AliForwardUtil.h"
13 #include "AliOADBForward.h"
24 //____________________________________________________________________
25 AliForwardCorrectionManager* AliForwardCorrectionManager::fgInstance= 0;
26 const char* AliForwardCorrectionManager::fgkSecondaryMapSkel = "secondary";
27 const char* AliForwardCorrectionManager::fgkDoubleHitSkel = "doublehit";
28 const char* AliForwardCorrectionManager::fgkELossFitsSkel = "elossfits";
29 const char* AliForwardCorrectionManager::fgkVertexBiasSkel = "vertexbias";
30 const char* AliForwardCorrectionManager::fgkMergingEffSkel = "merging";
31 const char* AliForwardCorrectionManager::fgkAcceptanceSkel = "acceptance";
32 const char* AliForwardCorrectionManager::fgkNoiseGainSkel = "noisegain";
34 #define PREFIX "$(ALICE_ROOT)/OADB/PWGLF/FORWARD/CORRECTIONS/data/"
35 #define DB_NAME "fmd_corrections.root"
37 //____________________________________________________________________
38 AliForwardCorrectionManager& AliForwardCorrectionManager::Instance()
41 // Access to the singleton object
44 // Reference to the singleton object
46 if (!fgInstance) fgInstance= new AliForwardCorrectionManager(false);
50 //____________________________________________________________________
51 AliForwardCorrectionManager::AliForwardCorrectionManager()
54 // Default constructor
57 //____________________________________________________________________
58 AliForwardCorrectionManager::AliForwardCorrectionManager(Bool_t d)
59 : AliCorrectionManagerBase(d)
62 // Non-default constructor
67 RegisterCorrection(kIdSecondaryMap, fgkSecondaryMapSkel,
68 PREFIX DB_NAME, AliFMDCorrSecondaryMap::Class(),
69 kStandard|kSatellite);
70 RegisterCorrection(kIdELossFits, fgkELossFitsSkel,
71 PREFIX DB_NAME, AliFMDCorrELossFit::Class(), kFull);
72 RegisterCorrection(kIdVertexBias, fgkVertexBiasSkel,
73 PREFIX DB_NAME, AliFMDCorrVertexBias::Class(),
74 kStandard|kSatellite);
75 RegisterCorrection(kIdMergingEfficiency, fgkMergingEffSkel,
76 PREFIX DB_NAME, AliFMDCorrMergingEfficiency::Class(),
77 kStandard|kSatellite);
78 RegisterCorrection(kIdDoubleHit, fgkDoubleHitSkel,
79 PREFIX DB_NAME, AliFMDCorrDoubleHit::Class(),
81 RegisterCorrection(kIdAcceptance, fgkAcceptanceSkel,
82 PREFIX DB_NAME, AliFMDCorrAcceptance::Class(),
83 kRun|kSys|kSNN|kSatellite);
84 RegisterCorrection(kIdNoiseGain, fgkNoiseGainSkel,
85 PREFIX DB_NAME, AliFMDCorrNoiseGain::Class(), kRun);
87 //____________________________________________________________________
89 AliForwardCorrectionManager::Init(ULong_t runNo,
99 // Read in correction based on passed parameters
102 // collisionSystem Collision system string
103 // cmsNN Center of mass energy per nucleon pair [GeV]
104 // field Magnetic field [kG]
105 // mc Monte-carlo switch
106 // what What to read in
107 // force Force (re-)reading of specified things
112 UShort_t col = AliForwardUtil::ParseCollisionSystem(sys);
113 // AliInfo(Form("Initialising with cms='%s', sNN=%fGeV field=%fkG",
114 // cms, sNN, field));
115 return Init(runNo, col,
116 AliForwardUtil::ParseCenterOfMassEnergy(col, sNN),
117 AliForwardUtil::ParseMagneticField(field),
118 mc, sat, what, force);
121 //____________________________________________________________________
123 AliForwardCorrectionManager::Init(ULong_t runNo,
133 // Read in corrections based on the parameters given
136 // collisionSystem Collision system
137 // cmsNN Center of mass energy per nuclean pair [GeV]
138 // field Magnetic field setting [kG]
139 // mc Monte-carlo switch
140 // what What to read in.
141 // force Force (re-)reading of specified things
146 EnableCorrection(kIdSecondaryMap, what & kSecondaryMap);
147 EnableCorrection(kIdDoubleHit, what & kDoubleHit);
148 EnableCorrection(kIdELossFits, what & kELossFits);
149 EnableCorrection(kIdAcceptance, what & kAcceptance);
150 EnableCorrection(kIdVertexBias, what & kVertexBias);
151 EnableCorrection(kIdMergingEfficiency,what & kMergingEfficiency);
152 EnableCorrection(kIdNoiseGain, what & kNoiseGain);
154 return InitCorrections(runNo, sys, sNN, field, mc, sat, force);
157 //____________________________________________________________________
159 AliForwardCorrectionManager::ParseFields(const TString& fields)
162 TObjArray* tokens = fields.Tokenize(" \t,|+:;-&");
164 TObjString* ostr = 0;
165 while ((ostr = static_cast<TObjString*>(next()))) {
166 const TString& str = ostr->String();
168 if (str.Contains("all", TString::kIgnoreCase))
170 else if (str.Contains("default", TString::kIgnoreCase))
172 else if (str.Contains(fgkSecondaryMapSkel, TString::kIgnoreCase))
173 ret |= kSecondaryMap;
174 else if (str.Contains(fgkDoubleHitSkel, TString::kIgnoreCase))
176 else if (str.Contains(fgkELossFitsSkel, TString::kIgnoreCase))
178 else if (str.Contains(fgkVertexBiasSkel, TString::kIgnoreCase))
180 else if (str.Contains(fgkMergingEffSkel, TString::kIgnoreCase))
181 ret |= kMergingEfficiency;
182 else if (str.Contains(fgkAcceptanceSkel, TString::kIgnoreCase))
184 else if (str.Contains(fgkNoiseGainSkel, TString::kIgnoreCase))
187 AliWarningClassF("Unknown correction: %s", str.Data());
194 //____________________________________________________________________
196 AliForwardCorrectionManager::Append(const TString& addition,
197 const TString& destination) const
199 TString dest(destination);
201 dest = PREFIX DB_NAME;
202 return AliCorrectionManagerBase::Append(addition, dest);
206 //____________________________________________________________________
207 const AliFMDCorrELossFit*
208 AliForwardCorrectionManager::GetELossFit() const
211 * Get the energy loss fit correction object.
213 * @return Get the energy loss fits corrections object or null pointer
215 return static_cast<const AliFMDCorrELossFit*>(Get(kIdELossFits));
217 //____________________________________________________________________
218 const AliFMDCorrSecondaryMap*
219 AliForwardCorrectionManager::GetSecondaryMap() const
222 * Get the secondary correction map
224 * @return Get the secondary correction map object or null
226 return static_cast<const AliFMDCorrSecondaryMap*>(Get(kIdSecondaryMap));
228 //____________________________________________________________________
229 const AliFMDCorrDoubleHit*
230 AliForwardCorrectionManager::GetDoubleHit() const
233 * Get the double hit correction object
235 * @return Get the double hit correction object or null
237 return static_cast<const AliFMDCorrDoubleHit*>(Get(kIdDoubleHit));
239 //____________________________________________________________________
240 const AliFMDCorrVertexBias*
241 AliForwardCorrectionManager::GetVertexBias() const
244 * Get the vertex bias correction object
246 * @return Get the vertex bias correction object or null
248 return static_cast<const AliFMDCorrVertexBias*>(Get(kIdVertexBias));
250 //____________________________________________________________________
251 const AliFMDCorrMergingEfficiency*
252 AliForwardCorrectionManager::GetMergingEfficiency() const
255 * Get the merging efficiency
258 * @return Get the vertex efficiency correction
261 static_cast<const AliFMDCorrMergingEfficiency*>(Get(kIdMergingEfficiency));
263 //____________________________________________________________________
264 const AliFMDCorrAcceptance*
265 AliForwardCorrectionManager::GetAcceptance() const
268 * Get the acceptance correction due to dead channels
271 * @return Acceptance correction due to dead channels
273 return static_cast<const AliFMDCorrAcceptance*>(Get(kIdAcceptance));
275 //____________________________________________________________________
276 const AliFMDCorrNoiseGain*
277 AliForwardCorrectionManager::GetNoiseGain() const
280 * Get the noisegain calibration
282 * @return NoiseGain calibration
284 return static_cast<const AliFMDCorrNoiseGain*>(Get(kIdNoiseGain));
287 //____________________________________________________________________
289 AliForwardCorrectionManager::GetEtaAxis() const
291 const AliFMDCorrSecondaryMap* map = GetSecondaryMap();
293 return &(map->GetEtaAxis());
295 //____________________________________________________________________
297 AliForwardCorrectionManager::GetVertexAxis() const
299 const AliFMDCorrSecondaryMap* map = GetSecondaryMap();
301 return &(map->GetVertexAxis());
306 //______________________________________________________________________________
307 void AliForwardCorrectionManager::Streamer(TBuffer &R__b)
310 // Stream an object of class AliForwardCorrectionManager.
312 if (R__b.IsReading()) {
313 R__b.ReadClassBuffer(AliForwardCorrectionManager::Class(),this);
315 AliWarning(Form("Singleton instance already set (%p) when reading "
316 "singleton object (%p). Read object will be new "
317 "singleton object", fgInstance, this));
318 // delete fgInstance;
321 // fgInstance->fCorrections.ls();
323 R__b.WriteClassBuffer(AliForwardCorrectionManager::Class(),this);
328 //____________________________________________________________________