ROOT logo
//
// Manager (singleton) of corrections 
// 
#ifndef ALICENTRALCORRECTIONMANAGER_H
#define ALICENTRALCORRECTIONMANAGER_H
/**
 * @file   AliCentralCorrectionManager.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 AliCentralCorrAcceptance;
class AliCentralCorrSecondaryMap;
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 AliCentralCorrectionManager : public AliCorrectionManagerBase
{
private:
  /**
   * Enumeration of things that can be read in 
   */
  enum EId { 
    kIdSecondaryMap            = 0, 
    kIdAcceptance
  };
public:
  /**
   * Enumeration of things that can be read in 
   */
  enum ECorrection { 
    kSecondaryMap              = 0x01, 
    kAcceptance                = 0x02,
    kDefault                   = (kSecondaryMap|kAcceptance),
    kAll                       = (kSecondaryMap|kAcceptance) 
  };
  /** 
   * 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
   */
  AliCentralCorrectionManager();
  /** 
   * Access to the singleton object 
   * 
   * @return Reference to the singleton object 
   */
  static AliCentralCorrectionManager& 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 the object 
   */
  const Char_t* GetName() const { return "centralCorrections"; }
  /** 
   * Set path to corrections 
   * 
   * @param d Path
   */
  void SetSecondaryMapPath(const char* d) 
  {
    SetCorrectionFile(kIdSecondaryMap, 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=kStandard,
	      Bool_t      force=false);
  /** 
   * Get the vertex axis 
   * 
   * @return The vertex axis or null
   */
  const TAxis* GetVertexAxis() const;
  /** 
   * Get the @f$\eta@f$ axis
   * 
   * @return The @f$\eta@f$ axis or null
   */
  const TAxis* GetEtaAxis() const { return 0; }
  /** 
   * Get the secondary correction map
   * 
   * @return Get the secondary correction map object or null
   */
  const AliCentralCorrSecondaryMap* GetSecondaryMap() const;
  /** 
   * Get the acceptance correction due to dead channels 
   * 
   * 
   * @return Acceptance correction due to dead channels 
   */
  const AliCentralCorrAcceptance* GetAcceptance() const;
private:
  /** 
   * Non-default constructor - initializes corrections - used by
   * singleton access member function Instance
   * 
   * @param notUsed Ignored
   */
  AliCentralCorrectionManager(Bool_t notUsed);
  
  /** Static singleton instance */
  static AliCentralCorrectionManager* fgInstance; // Skeleton

  /** 
   * @{ 
   * @name Object name 
   */
  static const Char_t* fgkSecondaryMapSkel;  // Name of correction object 
  static const Char_t* fgkAcceptanceSkel;    // Name of correction object 
  /* 
   * @} 
   */
  ClassDef(AliCentralCorrectionManager,2) // Manager of corrections 
};

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

 AliCentralCorrectionManager.h:1
 AliCentralCorrectionManager.h:2
 AliCentralCorrectionManager.h:3
 AliCentralCorrectionManager.h:4
 AliCentralCorrectionManager.h:5
 AliCentralCorrectionManager.h:6
 AliCentralCorrectionManager.h:7
 AliCentralCorrectionManager.h:8
 AliCentralCorrectionManager.h:9
 AliCentralCorrectionManager.h:10
 AliCentralCorrectionManager.h:11
 AliCentralCorrectionManager.h:12
 AliCentralCorrectionManager.h:13
 AliCentralCorrectionManager.h:14
 AliCentralCorrectionManager.h:15
 AliCentralCorrectionManager.h:16
 AliCentralCorrectionManager.h:17
 AliCentralCorrectionManager.h:18
 AliCentralCorrectionManager.h:19
 AliCentralCorrectionManager.h:20
 AliCentralCorrectionManager.h:21
 AliCentralCorrectionManager.h:22
 AliCentralCorrectionManager.h:23
 AliCentralCorrectionManager.h:24
 AliCentralCorrectionManager.h:25
 AliCentralCorrectionManager.h:26
 AliCentralCorrectionManager.h:27
 AliCentralCorrectionManager.h:28
 AliCentralCorrectionManager.h:29
 AliCentralCorrectionManager.h:30
 AliCentralCorrectionManager.h:31
 AliCentralCorrectionManager.h:32
 AliCentralCorrectionManager.h:33
 AliCentralCorrectionManager.h:34
 AliCentralCorrectionManager.h:35
 AliCentralCorrectionManager.h:36
 AliCentralCorrectionManager.h:37
 AliCentralCorrectionManager.h:38
 AliCentralCorrectionManager.h:39
 AliCentralCorrectionManager.h:40
 AliCentralCorrectionManager.h:41
 AliCentralCorrectionManager.h:42
 AliCentralCorrectionManager.h:43
 AliCentralCorrectionManager.h:44
 AliCentralCorrectionManager.h:45
 AliCentralCorrectionManager.h:46
 AliCentralCorrectionManager.h:47
 AliCentralCorrectionManager.h:48
 AliCentralCorrectionManager.h:49
 AliCentralCorrectionManager.h:50
 AliCentralCorrectionManager.h:51
 AliCentralCorrectionManager.h:52
 AliCentralCorrectionManager.h:53
 AliCentralCorrectionManager.h:54
 AliCentralCorrectionManager.h:55
 AliCentralCorrectionManager.h:56
 AliCentralCorrectionManager.h:57
 AliCentralCorrectionManager.h:58
 AliCentralCorrectionManager.h:59
 AliCentralCorrectionManager.h:60
 AliCentralCorrectionManager.h:61
 AliCentralCorrectionManager.h:62
 AliCentralCorrectionManager.h:63
 AliCentralCorrectionManager.h:64
 AliCentralCorrectionManager.h:65
 AliCentralCorrectionManager.h:66
 AliCentralCorrectionManager.h:67
 AliCentralCorrectionManager.h:68
 AliCentralCorrectionManager.h:69
 AliCentralCorrectionManager.h:70
 AliCentralCorrectionManager.h:71
 AliCentralCorrectionManager.h:72
 AliCentralCorrectionManager.h:73
 AliCentralCorrectionManager.h:74
 AliCentralCorrectionManager.h:75
 AliCentralCorrectionManager.h:76
 AliCentralCorrectionManager.h:77
 AliCentralCorrectionManager.h:78
 AliCentralCorrectionManager.h:79
 AliCentralCorrectionManager.h:80
 AliCentralCorrectionManager.h:81
 AliCentralCorrectionManager.h:82
 AliCentralCorrectionManager.h:83
 AliCentralCorrectionManager.h:84
 AliCentralCorrectionManager.h:85
 AliCentralCorrectionManager.h:86
 AliCentralCorrectionManager.h:87
 AliCentralCorrectionManager.h:88
 AliCentralCorrectionManager.h:89
 AliCentralCorrectionManager.h:90
 AliCentralCorrectionManager.h:91
 AliCentralCorrectionManager.h:92
 AliCentralCorrectionManager.h:93
 AliCentralCorrectionManager.h:94
 AliCentralCorrectionManager.h:95
 AliCentralCorrectionManager.h:96
 AliCentralCorrectionManager.h:97
 AliCentralCorrectionManager.h:98
 AliCentralCorrectionManager.h:99
 AliCentralCorrectionManager.h:100
 AliCentralCorrectionManager.h:101
 AliCentralCorrectionManager.h:102
 AliCentralCorrectionManager.h:103
 AliCentralCorrectionManager.h:104
 AliCentralCorrectionManager.h:105
 AliCentralCorrectionManager.h:106
 AliCentralCorrectionManager.h:107
 AliCentralCorrectionManager.h:108
 AliCentralCorrectionManager.h:109
 AliCentralCorrectionManager.h:110
 AliCentralCorrectionManager.h:111
 AliCentralCorrectionManager.h:112
 AliCentralCorrectionManager.h:113
 AliCentralCorrectionManager.h:114
 AliCentralCorrectionManager.h:115
 AliCentralCorrectionManager.h:116
 AliCentralCorrectionManager.h:117
 AliCentralCorrectionManager.h:118
 AliCentralCorrectionManager.h:119
 AliCentralCorrectionManager.h:120
 AliCentralCorrectionManager.h:121
 AliCentralCorrectionManager.h:122
 AliCentralCorrectionManager.h:123
 AliCentralCorrectionManager.h:124
 AliCentralCorrectionManager.h:125
 AliCentralCorrectionManager.h:126
 AliCentralCorrectionManager.h:127
 AliCentralCorrectionManager.h:128
 AliCentralCorrectionManager.h:129
 AliCentralCorrectionManager.h:130
 AliCentralCorrectionManager.h:131
 AliCentralCorrectionManager.h:132
 AliCentralCorrectionManager.h:133
 AliCentralCorrectionManager.h:134
 AliCentralCorrectionManager.h:135
 AliCentralCorrectionManager.h:136
 AliCentralCorrectionManager.h:137
 AliCentralCorrectionManager.h:138
 AliCentralCorrectionManager.h:139
 AliCentralCorrectionManager.h:140
 AliCentralCorrectionManager.h:141
 AliCentralCorrectionManager.h:142
 AliCentralCorrectionManager.h:143
 AliCentralCorrectionManager.h:144
 AliCentralCorrectionManager.h:145
 AliCentralCorrectionManager.h:146
 AliCentralCorrectionManager.h:147
 AliCentralCorrectionManager.h:148
 AliCentralCorrectionManager.h:149
 AliCentralCorrectionManager.h:150
 AliCentralCorrectionManager.h:151
 AliCentralCorrectionManager.h:152
 AliCentralCorrectionManager.h:153
 AliCentralCorrectionManager.h:154
 AliCentralCorrectionManager.h:155
 AliCentralCorrectionManager.h:156
 AliCentralCorrectionManager.h:157
 AliCentralCorrectionManager.h:158
 AliCentralCorrectionManager.h:159
 AliCentralCorrectionManager.h:160
 AliCentralCorrectionManager.h:161
 AliCentralCorrectionManager.h:162
 AliCentralCorrectionManager.h:163
 AliCentralCorrectionManager.h:164
 AliCentralCorrectionManager.h:165
 AliCentralCorrectionManager.h:166
 AliCentralCorrectionManager.h:167
 AliCentralCorrectionManager.h:168
 AliCentralCorrectionManager.h:169
 AliCentralCorrectionManager.h:170
 AliCentralCorrectionManager.h:171
 AliCentralCorrectionManager.h:172
 AliCentralCorrectionManager.h:173
 AliCentralCorrectionManager.h:174
 AliCentralCorrectionManager.h:175
 AliCentralCorrectionManager.h:176
 AliCentralCorrectionManager.h:177
 AliCentralCorrectionManager.h:178
 AliCentralCorrectionManager.h:179
 AliCentralCorrectionManager.h:180
 AliCentralCorrectionManager.h:181
 AliCentralCorrectionManager.h:182
 AliCentralCorrectionManager.h:183
 AliCentralCorrectionManager.h:184
 AliCentralCorrectionManager.h:185
 AliCentralCorrectionManager.h:186
 AliCentralCorrectionManager.h:187
 AliCentralCorrectionManager.h:188
 AliCentralCorrectionManager.h:189
 AliCentralCorrectionManager.h:190
 AliCentralCorrectionManager.h:191
 AliCentralCorrectionManager.h:192
 AliCentralCorrectionManager.h:193
 AliCentralCorrectionManager.h:194
 AliCentralCorrectionManager.h:195
 AliCentralCorrectionManager.h:196
 AliCentralCorrectionManager.h:197