ROOT logo
//
// Manager (singleton) of corrections 
// 
#ifndef ALIFORWARDCORRECTIONMANAGER_H
#define ALIFORWARDCORRECTIONMANAGER_H
/**
 * @file   AliForwardCorrectionManager.h
 * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
 * @date   Wed Mar 23 14:04:27 2011
 * 
 * @brief  
 * 
 * 
 * @ingroup pwglf_forward_aod
 */
#include "AliCorrectionManagerBase.h"
#include <TString.h>
class TBrowser;
class AliFMDCorrELossFit;
class AliFMDCorrDoubleHit;
class AliFMDCorrVertexBias;
class AliFMDCorrMergingEfficiency;
class AliFMDCorrAcceptance;
class AliFMDCorrSecondaryMap;
class AliFMDCorrNoiseGain;
class TAxis;

/**
 * Manager (singleton) of corrections 
 *
 * Note, that this class has a custom streamer.  That is to ensure
 * that the singleton pointer is correctly set on reading in an object
 * of this type.
 * 
 * @ingroup pwglf_forward_corr 
 * @ingroup pwglf_forward_aod
 */
class AliForwardCorrectionManager : public AliCorrectionManagerBase
{
private:
  /**
   * Enumeration of things that can be read in 
   */
  enum EId { 
    kIdSecondaryMap            = 0, 
    kIdELossFits,
    kIdVertexBias,
    kIdMergingEfficiency,
    kIdDoubleHit,
    kIdAcceptance,
    kIdNoiseGain
  };
public:
  /**
   * Enumeration of things that can be read in 
   */
  enum ECorrection { 
    kSecondaryMap              = 0x01, 
    kELossFits                 = 0x02, 
    kVertexBias                = 0x04, 
    kMergingEfficiency         = 0x08,
    kDoubleHit                 = 0x10,
    kAcceptance                = 0x20,
    kNoiseGain                 = 0x40,
    kDefault                   = (kSecondaryMap|kELossFits|kAcceptance),
    kAll                       = (kSecondaryMap| 
				  kELossFits|
				  kVertexBias|
				  kMergingEfficiency|
				  kDoubleHit|
				  kAcceptance|
				  kNoiseGain)
  };
  /** 
   * Default constructor.  This is public for the sake of the ROOT I/O
   * system, but should never be used outside of that system - that
   * is, do not use this constructor
   */
  AliForwardCorrectionManager();
  /** 
   * Access to the singleton object 
   * 
   * @return Reference to the singleton object 
   */
  static AliForwardCorrectionManager& Instance();

  /** 
   * Append the content of the file @a addition to the @a destination
   * file for this manager.  This used TFileMerger::PartialMerge 
   * 
   * @param destination Filename of destination storage (in OADB_PATH)
   * @param addition    Filename of addition. 
   * 
   * @return true on success 
   */
  virtual Bool_t Append(const TString& addition,
			const TString& destination="") const;

  /** 
   * @return name of object 
   */
  const Char_t* GetName() const { return "forwardCorrections"; }
  /** 
   * Set path to corrections 
   * 
   * @param d Path
   */
  void SetSecondaryMapPath(const char* d) 
  {
    SetCorrectionFile(kIdSecondaryMap, d);
  }
  /** 
   * Set path to corrections 
   * 
   * @param d Path
   */
  void SetDoubleHitPath(const char* d)    
  {
    SetCorrectionFile(kIdDoubleHit, d);
  }
  /** 
   * Set path to corrections 
   * 
   * @param d Path
   */
  void SetELossFitsPath(const char* d)    
  {
    SetCorrectionFile(kIdELossFits, d);
  }
  /** 
   * Set path to corrections 
   * 
   * @param d Path
   */
  void SetVertexBiasPath(const char* d)   
  {
    SetCorrectionFile(kIdVertexBias, d);
  }
  /** 
   * Set path to corrections 
   * 
   * @param d Path
   */
  void SetMergingEffPath(const char* d)   
  {
    SetCorrectionFile(kIdMergingEfficiency, d);
  }
  /** 
   * Set path to corrections 
   * 
   * @param d Path
   */
  void SetAcceptancePath(const char* d)   
  {
    SetCorrectionFile(kIdAcceptance, d);
  }
  /** 
   * Read in corrections based on the parameters given 
   * 
   * @param runNumber       Run number
   * @param collisionSystem Collision system
   * @param cmsNN           Center of mass energy per nuclean pair [GeV]
   * @param field           Magnetic field setting [kG]
   * @param mc              Monte-carlo switch
   * @param what            What to read in. 
   * @param force           Force (re-)reading of specified things
   * @param satelliteCollisions For satellite collisions
   * 
   * @return 
   */
  Bool_t Init(ULong_t  runNumber,
	      UShort_t collisionSystem, 
	      UShort_t cmsNN, 
	      Short_t  field, 
	      Bool_t   mc=false,
	      Bool_t   satelliteCollisions=false,
	      UInt_t   what=kDefault,
	      Bool_t   force=false);
  /** 
   * Read in correction based on passed parameters
   * 
   * @param runNumber       Run number
   * @param collisionSystem Collision system string 
   * @param cmsNN           Center of mass energy per nucleon pair [GeV]
   * @param field           Magnetic field [kG]
   * @param mc              Monte-carlo switch
   * @param what            What to read in 
   * @param force           Force (re-)reading of specified things
   * @param satelliteCollisions For satellite collisions
   * 
   * @return true on success
   */
  Bool_t Init(ULong_t     runNumber, 
	      const char* collisionSystem, 
	      Float_t     cmsNN, 
	      Float_t     field, 
	      Bool_t      mc=false,
	      Bool_t      satelliteCollisions=false,
	      UInt_t      what=kDefault,
	      Bool_t      force=false);
  /** 
   * Parse string with fields in it, and return the corresponding bit mask
   * 
   * @param what The string 
   * 
   * @return The corresponding bit mask
   */
  static UInt_t ParseFields(const TString& what);
  /** 
   * Get the eta axis 
   * 
   * @return Eta axis or null
   */
  const TAxis* GetEtaAxis() const;
  /** 
   * Get the vertex axis 
   * 
   * @return The vertex axis or null
   */
  const TAxis* GetVertexAxis() const;
  /** 
   * Get the energy loss fit correction object. 
   * 
   * @return Get the energy loss fits corrections object or null pointer
   */
  const AliFMDCorrELossFit* GetELossFit() const;
  /** 
   * Alias for GetELossFit
   * 
   * @return Get the energy loss fits corrections object or null pointer
   */
  const AliFMDCorrELossFit* GetELossFits() const { return GetELossFit(); }
  /** 
   * Get the secondary correction map
   * 
   * @return Get the secondary correction map object or null
   */
  const AliFMDCorrSecondaryMap* GetSecondaryMap() const;
  /** 
   * Get the double hit correction object
   * 
   * @return Get the double hit correction object or null 
   */
  const AliFMDCorrDoubleHit* GetDoubleHit() const;
  /** 
   * Get the vertex bias correction object
   * 
   * @return Get the vertex bias correction object or null 
   */
  const AliFMDCorrVertexBias* GetVertexBias() const;
  /** 
   * Get the merging efficiency 
   * 
   * @return Get the vertex efficiency correction 
   */
  const AliFMDCorrMergingEfficiency* GetMergingEfficiency() const;
  /** 
   * Get the acceptance correction due to dead channels 
   * 
   * @return Acceptance correction due to dead channels 
   */
  const AliFMDCorrAcceptance* GetAcceptance() const;
  /** 
   * Get the noise calibration.  That is, the ratio 
   *
   * @f[ 
   *   \frac{\sigma_{i}}{g_{i}k}
   * @f] 
   *
   * where @f$ k@f$ is a constant determined by the electronics of
   * units DAC/MIP, and @f$ \sigma_i, g_i@f$ are the noise and gain of
   * the @f$ i @f$ strip respectively
   * 
   * @return Noise-gain calibration
   */
  const AliFMDCorrNoiseGain* GetNoiseGain() const;
private:
  /** 
   * Non-default constructor - initializes corrections - used by
   * singleton access member function Instance
   * 
   * @param notUsed Ignored
   */
  AliForwardCorrectionManager(Bool_t notUsed);
  
  /** Static singleton instance */
  static AliForwardCorrectionManager* fgInstance; // Skeleton

  /** 
   * @{ 
   * @name Object name 
   */
  static const Char_t* fgkSecondaryMapSkel;  // Name of correction object 
  static const Char_t* fgkDoubleHitSkel;     // Name of correction object 
  static const Char_t* fgkELossFitsSkel;     // Name of correction object 
  static const Char_t* fgkVertexBiasSkel;    // Name of correction object 
  static const Char_t* fgkMergingEffSkel;    // Name of correction object 
  static const Char_t* fgkAcceptanceSkel;    // Name of correction object 
  static const Char_t* fgkNoiseGainSkel;     // Name of correction object 
  /* 
   * @} 
   */
  ClassDef(AliForwardCorrectionManager,5) // Manager of corrections 
};

#endif
// Local Variables:
//   mode: C++ 
// End: 

 AliForwardCorrectionManager.h:1
 AliForwardCorrectionManager.h:2
 AliForwardCorrectionManager.h:3
 AliForwardCorrectionManager.h:4
 AliForwardCorrectionManager.h:5
 AliForwardCorrectionManager.h:6
 AliForwardCorrectionManager.h:7
 AliForwardCorrectionManager.h:8
 AliForwardCorrectionManager.h:9
 AliForwardCorrectionManager.h:10
 AliForwardCorrectionManager.h:11
 AliForwardCorrectionManager.h:12
 AliForwardCorrectionManager.h:13
 AliForwardCorrectionManager.h:14
 AliForwardCorrectionManager.h:15
 AliForwardCorrectionManager.h:16
 AliForwardCorrectionManager.h:17
 AliForwardCorrectionManager.h:18
 AliForwardCorrectionManager.h:19
 AliForwardCorrectionManager.h:20
 AliForwardCorrectionManager.h:21
 AliForwardCorrectionManager.h:22
 AliForwardCorrectionManager.h:23
 AliForwardCorrectionManager.h:24
 AliForwardCorrectionManager.h:25
 AliForwardCorrectionManager.h:26
 AliForwardCorrectionManager.h:27
 AliForwardCorrectionManager.h:28
 AliForwardCorrectionManager.h:29
 AliForwardCorrectionManager.h:30
 AliForwardCorrectionManager.h:31
 AliForwardCorrectionManager.h:32
 AliForwardCorrectionManager.h:33
 AliForwardCorrectionManager.h:34
 AliForwardCorrectionManager.h:35
 AliForwardCorrectionManager.h:36
 AliForwardCorrectionManager.h:37
 AliForwardCorrectionManager.h:38
 AliForwardCorrectionManager.h:39
 AliForwardCorrectionManager.h:40
 AliForwardCorrectionManager.h:41
 AliForwardCorrectionManager.h:42
 AliForwardCorrectionManager.h:43
 AliForwardCorrectionManager.h:44
 AliForwardCorrectionManager.h:45
 AliForwardCorrectionManager.h:46
 AliForwardCorrectionManager.h:47
 AliForwardCorrectionManager.h:48
 AliForwardCorrectionManager.h:49
 AliForwardCorrectionManager.h:50
 AliForwardCorrectionManager.h:51
 AliForwardCorrectionManager.h:52
 AliForwardCorrectionManager.h:53
 AliForwardCorrectionManager.h:54
 AliForwardCorrectionManager.h:55
 AliForwardCorrectionManager.h:56
 AliForwardCorrectionManager.h:57
 AliForwardCorrectionManager.h:58
 AliForwardCorrectionManager.h:59
 AliForwardCorrectionManager.h:60
 AliForwardCorrectionManager.h:61
 AliForwardCorrectionManager.h:62
 AliForwardCorrectionManager.h:63
 AliForwardCorrectionManager.h:64
 AliForwardCorrectionManager.h:65
 AliForwardCorrectionManager.h:66
 AliForwardCorrectionManager.h:67
 AliForwardCorrectionManager.h:68
 AliForwardCorrectionManager.h:69
 AliForwardCorrectionManager.h:70
 AliForwardCorrectionManager.h:71
 AliForwardCorrectionManager.h:72
 AliForwardCorrectionManager.h:73
 AliForwardCorrectionManager.h:74
 AliForwardCorrectionManager.h:75
 AliForwardCorrectionManager.h:76
 AliForwardCorrectionManager.h:77
 AliForwardCorrectionManager.h:78
 AliForwardCorrectionManager.h:79
 AliForwardCorrectionManager.h:80
 AliForwardCorrectionManager.h:81
 AliForwardCorrectionManager.h:82
 AliForwardCorrectionManager.h:83
 AliForwardCorrectionManager.h:84
 AliForwardCorrectionManager.h:85
 AliForwardCorrectionManager.h:86
 AliForwardCorrectionManager.h:87
 AliForwardCorrectionManager.h:88
 AliForwardCorrectionManager.h:89
 AliForwardCorrectionManager.h:90
 AliForwardCorrectionManager.h:91
 AliForwardCorrectionManager.h:92
 AliForwardCorrectionManager.h:93
 AliForwardCorrectionManager.h:94
 AliForwardCorrectionManager.h:95
 AliForwardCorrectionManager.h:96
 AliForwardCorrectionManager.h:97
 AliForwardCorrectionManager.h:98
 AliForwardCorrectionManager.h:99
 AliForwardCorrectionManager.h:100
 AliForwardCorrectionManager.h:101
 AliForwardCorrectionManager.h:102
 AliForwardCorrectionManager.h:103
 AliForwardCorrectionManager.h:104
 AliForwardCorrectionManager.h:105
 AliForwardCorrectionManager.h:106
 AliForwardCorrectionManager.h:107
 AliForwardCorrectionManager.h:108
 AliForwardCorrectionManager.h:109
 AliForwardCorrectionManager.h:110
 AliForwardCorrectionManager.h:111
 AliForwardCorrectionManager.h:112
 AliForwardCorrectionManager.h:113
 AliForwardCorrectionManager.h:114
 AliForwardCorrectionManager.h:115
 AliForwardCorrectionManager.h:116
 AliForwardCorrectionManager.h:117
 AliForwardCorrectionManager.h:118
 AliForwardCorrectionManager.h:119
 AliForwardCorrectionManager.h:120
 AliForwardCorrectionManager.h:121
 AliForwardCorrectionManager.h:122
 AliForwardCorrectionManager.h:123
 AliForwardCorrectionManager.h:124
 AliForwardCorrectionManager.h:125
 AliForwardCorrectionManager.h:126
 AliForwardCorrectionManager.h:127
 AliForwardCorrectionManager.h:128
 AliForwardCorrectionManager.h:129
 AliForwardCorrectionManager.h:130
 AliForwardCorrectionManager.h:131
 AliForwardCorrectionManager.h:132
 AliForwardCorrectionManager.h:133
 AliForwardCorrectionManager.h:134
 AliForwardCorrectionManager.h:135
 AliForwardCorrectionManager.h:136
 AliForwardCorrectionManager.h:137
 AliForwardCorrectionManager.h:138
 AliForwardCorrectionManager.h:139
 AliForwardCorrectionManager.h:140
 AliForwardCorrectionManager.h:141
 AliForwardCorrectionManager.h:142
 AliForwardCorrectionManager.h:143
 AliForwardCorrectionManager.h:144
 AliForwardCorrectionManager.h:145
 AliForwardCorrectionManager.h:146
 AliForwardCorrectionManager.h:147
 AliForwardCorrectionManager.h:148
 AliForwardCorrectionManager.h:149
 AliForwardCorrectionManager.h:150
 AliForwardCorrectionManager.h:151
 AliForwardCorrectionManager.h:152
 AliForwardCorrectionManager.h:153
 AliForwardCorrectionManager.h:154
 AliForwardCorrectionManager.h:155
 AliForwardCorrectionManager.h:156
 AliForwardCorrectionManager.h:157
 AliForwardCorrectionManager.h:158
 AliForwardCorrectionManager.h:159
 AliForwardCorrectionManager.h:160
 AliForwardCorrectionManager.h:161
 AliForwardCorrectionManager.h:162
 AliForwardCorrectionManager.h:163
 AliForwardCorrectionManager.h:164
 AliForwardCorrectionManager.h:165
 AliForwardCorrectionManager.h:166
 AliForwardCorrectionManager.h:167
 AliForwardCorrectionManager.h:168
 AliForwardCorrectionManager.h:169
 AliForwardCorrectionManager.h:170
 AliForwardCorrectionManager.h:171
 AliForwardCorrectionManager.h:172
 AliForwardCorrectionManager.h:173
 AliForwardCorrectionManager.h:174
 AliForwardCorrectionManager.h:175
 AliForwardCorrectionManager.h:176
 AliForwardCorrectionManager.h:177
 AliForwardCorrectionManager.h:178
 AliForwardCorrectionManager.h:179
 AliForwardCorrectionManager.h:180
 AliForwardCorrectionManager.h:181
 AliForwardCorrectionManager.h:182
 AliForwardCorrectionManager.h:183
 AliForwardCorrectionManager.h:184
 AliForwardCorrectionManager.h:185
 AliForwardCorrectionManager.h:186
 AliForwardCorrectionManager.h:187
 AliForwardCorrectionManager.h:188
 AliForwardCorrectionManager.h:189
 AliForwardCorrectionManager.h:190
 AliForwardCorrectionManager.h:191
 AliForwardCorrectionManager.h:192
 AliForwardCorrectionManager.h:193
 AliForwardCorrectionManager.h:194
 AliForwardCorrectionManager.h:195
 AliForwardCorrectionManager.h:196
 AliForwardCorrectionManager.h:197
 AliForwardCorrectionManager.h:198
 AliForwardCorrectionManager.h:199
 AliForwardCorrectionManager.h:200
 AliForwardCorrectionManager.h:201
 AliForwardCorrectionManager.h:202
 AliForwardCorrectionManager.h:203
 AliForwardCorrectionManager.h:204
 AliForwardCorrectionManager.h:205
 AliForwardCorrectionManager.h:206
 AliForwardCorrectionManager.h:207
 AliForwardCorrectionManager.h:208
 AliForwardCorrectionManager.h:209
 AliForwardCorrectionManager.h:210
 AliForwardCorrectionManager.h:211
 AliForwardCorrectionManager.h:212
 AliForwardCorrectionManager.h:213
 AliForwardCorrectionManager.h:214
 AliForwardCorrectionManager.h:215
 AliForwardCorrectionManager.h:216
 AliForwardCorrectionManager.h:217
 AliForwardCorrectionManager.h:218
 AliForwardCorrectionManager.h:219
 AliForwardCorrectionManager.h:220
 AliForwardCorrectionManager.h:221
 AliForwardCorrectionManager.h:222
 AliForwardCorrectionManager.h:223
 AliForwardCorrectionManager.h:224
 AliForwardCorrectionManager.h:225
 AliForwardCorrectionManager.h:226
 AliForwardCorrectionManager.h:227
 AliForwardCorrectionManager.h:228
 AliForwardCorrectionManager.h:229
 AliForwardCorrectionManager.h:230
 AliForwardCorrectionManager.h:231
 AliForwardCorrectionManager.h:232
 AliForwardCorrectionManager.h:233
 AliForwardCorrectionManager.h:234
 AliForwardCorrectionManager.h:235
 AliForwardCorrectionManager.h:236
 AliForwardCorrectionManager.h:237
 AliForwardCorrectionManager.h:238
 AliForwardCorrectionManager.h:239
 AliForwardCorrectionManager.h:240
 AliForwardCorrectionManager.h:241
 AliForwardCorrectionManager.h:242
 AliForwardCorrectionManager.h:243
 AliForwardCorrectionManager.h:244
 AliForwardCorrectionManager.h:245
 AliForwardCorrectionManager.h:246
 AliForwardCorrectionManager.h:247
 AliForwardCorrectionManager.h:248
 AliForwardCorrectionManager.h:249
 AliForwardCorrectionManager.h:250
 AliForwardCorrectionManager.h:251
 AliForwardCorrectionManager.h:252
 AliForwardCorrectionManager.h:253
 AliForwardCorrectionManager.h:254
 AliForwardCorrectionManager.h:255
 AliForwardCorrectionManager.h:256
 AliForwardCorrectionManager.h:257
 AliForwardCorrectionManager.h:258
 AliForwardCorrectionManager.h:259
 AliForwardCorrectionManager.h:260
 AliForwardCorrectionManager.h:261
 AliForwardCorrectionManager.h:262
 AliForwardCorrectionManager.h:263
 AliForwardCorrectionManager.h:264
 AliForwardCorrectionManager.h:265
 AliForwardCorrectionManager.h:266
 AliForwardCorrectionManager.h:267
 AliForwardCorrectionManager.h:268
 AliForwardCorrectionManager.h:269
 AliForwardCorrectionManager.h:270
 AliForwardCorrectionManager.h:271
 AliForwardCorrectionManager.h:272
 AliForwardCorrectionManager.h:273
 AliForwardCorrectionManager.h:274
 AliForwardCorrectionManager.h:275
 AliForwardCorrectionManager.h:276
 AliForwardCorrectionManager.h:277
 AliForwardCorrectionManager.h:278
 AliForwardCorrectionManager.h:279
 AliForwardCorrectionManager.h:280
 AliForwardCorrectionManager.h:281
 AliForwardCorrectionManager.h:282
 AliForwardCorrectionManager.h:283
 AliForwardCorrectionManager.h:284
 AliForwardCorrectionManager.h:285
 AliForwardCorrectionManager.h:286
 AliForwardCorrectionManager.h:287
 AliForwardCorrectionManager.h:288
 AliForwardCorrectionManager.h:289
 AliForwardCorrectionManager.h:290
 AliForwardCorrectionManager.h:291
 AliForwardCorrectionManager.h:292
 AliForwardCorrectionManager.h:293
 AliForwardCorrectionManager.h:294
 AliForwardCorrectionManager.h:295
 AliForwardCorrectionManager.h:296
 AliForwardCorrectionManager.h:297
 AliForwardCorrectionManager.h:298
 AliForwardCorrectionManager.h:299
 AliForwardCorrectionManager.h:300
 AliForwardCorrectionManager.h:301
 AliForwardCorrectionManager.h:302
 AliForwardCorrectionManager.h:303
 AliForwardCorrectionManager.h:304
 AliForwardCorrectionManager.h:305
 AliForwardCorrectionManager.h:306
 AliForwardCorrectionManager.h:307
 AliForwardCorrectionManager.h:308
 AliForwardCorrectionManager.h:309
 AliForwardCorrectionManager.h:310