ROOT logo
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
* See cxx source for full Copyright notice                               */

// $Id: AliMUONCalibrationData.h 59457 2012-11-06 12:36:48Z laphecet $

/// \ingroup calib
/// \class AliMUONCalibrationData
/// \brief Single entry point to access MUON calibration data.
/// 
//  Author Laurent Aphecetche

#ifndef ALIMUONCALIBRATIONDATA_H
#define ALIMUONCALIBRATIONDATA_H

#ifndef ROOT_TObject
#include "TObject.h"
#endif

class AliCDBEntry;
class AliMUONGlobalCrateConfig;
class AliMUONRegionalTriggerConfig;
class AliMUONRejectList;
class AliMUONTriggerEfficiencyCells;
class AliMUONTriggerLut;
class AliMUONVCalibParam;
class AliMUONVStore;
class AliMUONVStore;
class TMap;

class AliMUONCalibrationData : public TObject
{
public:
  /** Constructor.
    * @param runNumber is used as a key to the CDB
    * @param deferredInitialization if kFALSE, all the calibrations are fetched
    * regardless of whether you'll use them or not.
    */
  AliMUONCalibrationData(Int_t runNumber=-1, Bool_t deferredInitialization=kTRUE);
  virtual ~AliMUONCalibrationData();

  AliMUONVStore* Capacitances() const;

  /// Create a capa store (which must be deleted) from OCDB for the given run
  static AliMUONVStore* CreateCapacitances(Int_t runNumber, Int_t* startOfValidity=0);

  /// Create a gain store (which must be deleted) from OCDB for the given run
  static AliMUONVStore* CreateGains(Int_t runNumber, Int_t* startOfValidity=0);

  /// Create a global trigger mask (which must be deleted) from OCDB for the given run
  static AliMUONGlobalCrateConfig* CreateGlobalTriggerCrateConfig(Int_t runNumber, Int_t* startOfValidity=0);
  
  /// Create a hv map (which must be deleted) from OCDB for the given run
  static TMap* CreateHV(Int_t runNumber, Int_t* startOfValidity=0, Bool_t patched=kTRUE, TList* messages=0x0, Bool_t dryRun=kFALSE);

  /// Create a Trigger HV and current  map (which must be deleted) from OCDB for the given run
  static TMap* CreateTriggerDCS(Int_t runNumber, Int_t* startOfValidity=0);

  /// Create a neighbours store (which must be deleted) from OCDB for the given run
  static AliMUONVStore* CreateNeighbours(Int_t runNumber, Int_t* startOfValidity=0);
  
  /// Create a local trigger mask store (which must be deleted) for a given run
  static AliMUONVStore* CreateLocalTriggerBoardMasks(Int_t runNumber, Int_t* startOfValidity=0);

  /// Create an occupancy map store (which must be deleted) from OCDB for the given run
  static AliMUONVStore* CreateOccupancyMap(Int_t runNumber, Int_t* startOfValidity=0);

  /// Create a rejectlist store (which must be deleted) from OCDB for the given run
  static AliMUONRejectList* CreateRejectList(Int_t runNumber, Int_t* startOfValidity=0);

  /// Create a pedestal store (which must be deleted) from OCDB for the given run
  static AliMUONVStore* CreatePedestals(Int_t runNumber, Int_t* startOfValidity=0);

  /// Create a configuration store (which must be deleted) from OCDB for the given run
  static AliMUONVStore* CreateConfig(Int_t runNumber, Int_t* startOfValidity=0);

  /// Create a regional trigger mask store (which must be deleted) for a given run
  static AliMUONRegionalTriggerConfig* CreateRegionalTriggerConfig(Int_t runNumber, Int_t* startOfValidity=0);

  /// Create a trigger Look Up Table (which must be deleted) for a given run
  static AliMUONTriggerLut* CreateTriggerLut(Int_t runNumber, Int_t* startOfValidity=0);
  /// Create a trigger efficiency map (which must be deleted) for a given run
  static AliMUONTriggerEfficiencyCells* CreateTriggerEfficiency(Int_t runNumber, Int_t* startOfValidity=0);
  
  /// Get all the gains
  AliMUONVStore* Gains() const;

  /// Get the configuration for the global trigger board.
  AliMUONGlobalCrateConfig* GlobalTriggerCrateConfig() const;
    
  /// Get the Gain calibration object for channels within (detElemId,manuId).
  AliMUONVCalibParam* Gains(Int_t detElemId, Int_t manuId) const;
    
  /// Get the HV values. Use patched=kFALSE to get unprocessed (i.e. "raw") values as they are in the OCDB
  TMap* HV(Bool_t patched=kTRUE) const;

  /// Get the Trigger HV and current values
  TMap* TriggerDCS() const;
    
  /// Whether this object is valid or not (might be invalid if fetching from CDB failed).
  Bool_t IsValid() const { return fIsValid; }
    
  /// Get the mask for a given local trigger board.
  AliMUONVCalibParam* LocalTriggerBoardMasks(Int_t localBoardNumber) const;
    
  /// Get the neighbours store
  AliMUONVStore* Neighbours() const;
  
  /// Get the pedestal store
  AliMUONVStore* Pedestals() const;

  /// Get the config store
  AliMUONVStore* Config() const;
  
  /// Get the occupancy map store
  AliMUONVStore* OccupancyMap() const;

  /// Get the reject list store
  AliMUONRejectList* RejectList() const;

  /// Get the Pedestal calibration object for channels within (detElemId,manuId).
  AliMUONVCalibParam* Pedestals(Int_t detElemId, Int_t manuId) const;
  
  /// Dump to screen.
  virtual void Print(Option_t* opt="") const;

  /// Get the config for regional trigger.
  AliMUONRegionalTriggerConfig* RegionalTriggerConfig() const;


  /// The runnumber used by this object.
  Int_t RunNumber() const { return fRunNumber; }
  
  /// Get the trigger Look Up Table.
  AliMUONTriggerLut* TriggerLut() const;
  
  /// Get the trigger efficiency map
  AliMUONTriggerEfficiencyCells* TriggerEfficiency() const;
  
  void Reset();

  static TObject* CreateObject(Int_t runNumber, const char* path, Int_t* startOfValidity=0x0);
  
  static void Check(Int_t runNumber);

  static void BypassStores(AliMUONVStore* ped, AliMUONVStore* gain);

protected:
  /// Not implemented
  AliMUONCalibrationData(const AliMUONCalibrationData& other);
  /// Not implemented
  AliMUONCalibrationData& operator=(const AliMUONCalibrationData& other);

  static Bool_t PatchHVValues(TObjArray& values, TString* msg=0x0, Bool_t dryRun=kFALSE);
  
  static Bool_t CheckHVGroup(TObjArray& values, Int_t first, Int_t last, Double_t& value,
                             Int_t& slope, TString* msg);

  static void PatchSt1DCSAliases(TMap& hvMap);

  static void AddToMap(const TMap& sourceMap,
                       TMap& destMap,
                       const TString& key,
                       const char* source,
                       const char* dest);

private:
  mutable Bool_t fIsValid; ///<  Whether we were able to correctly initialize
  Int_t fRunNumber; ///<  The run number for which we hold calibrations
  mutable AliMUONVStore* fGains; //!< Gains
  mutable AliMUONVStore* fPedestals; //!< Pedestals
  mutable TMap* fHV; //!< HV
  mutable TMap* fTriggerDCS; //!< Trigger HV and Currents
  mutable AliMUONVStore* fLocalTriggerBoardMasks; //!< Local trigger board maska  
  mutable AliMUONRegionalTriggerConfig* fRegionalTriggerConfig; //!< Regional trigger config
  mutable AliMUONGlobalCrateConfig* fGlobalTriggerCrateConfig; //!< Global trigger crate config
  
  mutable AliMUONTriggerLut* fTriggerLut; //!< TRigger LUTs
  mutable AliMUONTriggerEfficiencyCells* fTriggerEfficiency; //!< Trigger efficiency cells
  mutable AliMUONVStore* fCapacitances; //!< Manu capacitances
  mutable AliMUONVStore* fNeighbours; //!< list of neighbours for all channels
  
  mutable AliMUONVStore* fOccupancyMap; //!< occupancy map
  
  mutable AliMUONRejectList* fRejectList; //!< reject list

  static AliMUONVStore* fgBypassPedestals;
  static AliMUONVStore* fgBypassGains;
  
  mutable AliMUONVStore* fConfig; //!< configuration of the tracker
  
  static UInt_t fgkDCSSt1Flag; //!< flag to indicate that the DCS alias naming is not messed up in St1
  
  ClassDef(AliMUONCalibrationData,14) // Storage for all MUON calibration data.
};

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