ROOT logo
#ifndef ALIGRPOBJECT_H
#define ALIGRPOBJECT_H

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

/* $Id$ */

//
// AliGRPObject
// class to store the information
// coming from the GRP preprocessor
// 

#include <time.h>
#include <TString.h>
#include <TTimeStamp.h>
#include <TArrayD.h>

class TMap;

class AliDCSSensor;
class AliSplineFit;
class AliLog;

class AliGRPObject : public TObject {
 public:

	enum Stats {kMean = 0, kTruncMean = 1, kMedian = 2, kSDMean = 3, kSDMedian = 4};
 	
 	enum StatusBits {kPolConvLHC = BIT(14), kUniformBMap = BIT(15),kConvSqrtSHalfGeV = BIT(16)};

	enum DP_HallProbes { 
		 khpL3bsf17H1= 0 , khpL3bsf17H2, khpL3bsf17H3, khpL3bsf17Temperature, 
		 khpL3bsf4H1, khpL3bsf4H2, khpL3bsf4H3, khpL3bsf4Temperature, 
		 khpL3bkf17H1, khpL3bkf17H2, khpL3bkf17H3, khpL3bkf17Temperature, 
		 khpL3bkf4H1, khpL3bkf4H2, khpL3bkf4H3, khpL3bkf4Temperature, 
		 khpL3bsf13H1, khpL3bsf13H2, khpL3bsf13H3, khpL3bsf13Temperature,
		 khpL3bsf8H1, khpL3bsf8H2, khpL3bsf8H3, khpL3bsfy8Temperature,
		 khpL3bkf13H1, khpL3bkf13H2, khpL3bkf13H3, khpL3bkf13Temperature,
		 khpL3bkf8H1, khpL3bkf8H2, khpL3bkf8H3, khpL3bkf8Temperature,
		 khpDipoleInsideH1, khpDipoleInsideH2, khpDipoleInsideH3, khpDipoleInsideTemperature,
		 khpDipoleOutsideH1, khpDipoleOutsideH2, khpDipoleOutsideH3, khpDipoleOutsideTemperature};


	AliGRPObject();
	AliGRPObject(const AliGRPObject & obj);
	AliGRPObject& operator=(const AliGRPObject & obj);
	~AliGRPObject();

	// getters
	Bool_t    IsBeamEnergyIsSqrtSHalfGeV() const {return TestBit(kConvSqrtSHalfGeV);}
 	Bool_t    IsPolarityConventionLHC() const {return TestBit(kPolConvLHC);}
 	Bool_t    IsUniformBMap() const {return TestBit(kUniformBMap);}
	time_t    GetTimeStart() const {return fTimeStart;}
	time_t    GetTimeEnd() const {return fTimeEnd;}
	Float_t   GetBeamEnergy() const;
	TString   GetBeamType() const {return fBeamType;}
	Char_t    GetNumberOfDetectors() const {return fNumberOfDetectors;}
	UInt_t    GetDetectorMask() const {return fDetectorMask;}
	TString   GetLHCPeriod() const {return fLHCPeriod;}
	TString   GetRunType() const {return fRunType;}
	TString   GetLHCState() const {return fLHCState;}
	TString   GetMachineMode() const {return fMachineMode;}
	TObjArray*   GetLHCStateArray() const {return fLHCStateArray;}
	TObjArray*   GetMachineModeArray() const {return fMachineModeArray;}
	Char_t    GetL3Polarity() const {return fL3Polarity;}
	Char_t    GetDipolePolarity() const {return fDipolePolarity;}
	Float_t*  GetL3Current() const {return fL3Current;}
	Float_t   GetL3Current(Stats stat) const {return fL3Current[stat];}
	Float_t*  GetDipoleCurrent() const {return fDipoleCurrent;}
	Float_t   GetDipoleCurrent(Stats stat) const {return fDipoleCurrent[stat];}
	Float_t*  GetCavernTemperature() const {return fCavernTemperature;}
	Float_t   GetCavernTemperature(Stats stat) const {return fCavernTemperature[stat];}
	AliDCSSensor*   GetCavernAtmosPressure() const {return fCavernAtmosPressure;}
	AliDCSSensor*   GetCavernAtmosPressure2() const {return fCavernAtmosPressure2;}
	AliDCSSensor*   GetSurfaceAtmosPressure() const {return fSurfaceAtmosPressure;}
	AliDCSSensor*   GetBestCavernAtmosPressure() const ;
	AliDCSSensor*   GetBestCavernAtmosPressure(const TTimeStamp& time) const;
	static AliDCSSensor* GetBestCavernAtmosPressure(AliDCSSensor* cavern1, 
	                   AliDCSSensor* cavern2, AliDCSSensor* surface, const TTimeStamp& time);


	Float_t*  GetHallProbesArray(DP_HallProbes hp) const;
	Float_t   GetHallProbes(Int_t hp) const {return fHallProbes[hp];}
	Float_t   GetHallProbes(DP_HallProbes hp, Stats stat) const {return fHallProbes[hp*fPoints+stat];}

	Int_t    GetPoints() const {return fPoints;}
	Int_t    GetDimension() const {return fDimension;}

	Double_t GetMaxTimeLHCValidity() const {return fMaxTimeLHCValidity;}
	//
	TObjArray* GetQATrigClasses()    const {return (TObjArray*)fQATrigClasses;}
	TObjArray* GetQACloningRequest() const {return (TObjArray*)fQACloningRequest;}
	//
	// setters
 	void SetBeamEnergyIsSqrtSHalfGeV(Bool_t v=kTRUE) {SetBit(kConvSqrtSHalfGeV,v);}
 	void SetPolarityConventionLHC(Bool_t v=kTRUE) {return SetBit(kPolConvLHC,v);}
 	void SetUniformBMap(Bool_t v=kTRUE) {return SetBit(kUniformBMap,v);}
	void SetTimeStart(time_t timeStart)  {fTimeStart = timeStart;}
	void SetTimeEnd(time_t timeEnd)  {fTimeEnd = timeEnd;}
	void SetBeamEnergy(Float_t beamEnergy)  {fBeamEnergy = beamEnergy;}
	void SetBeamType(TString beamType)  {fBeamType = beamType;}
	void SetNumberOfDetectors(Char_t numberOfDetectors)  {fNumberOfDetectors = numberOfDetectors;}
	void SetDetectorMask(UInt_t detectorMask)  {fDetectorMask = detectorMask;}
	void SetLHCPeriod(TString lhcPeriod)  {fLHCPeriod = lhcPeriod;}
	void SetRunType(TString runType)  {fRunType = runType;}
	void SetLHCState(TString lhcState)  {fLHCState = lhcState;}
	void SetMachineMode(TString machineMode)  {fMachineMode = machineMode;}
	void SetLHCStateArray(TObjArray* lhcStateArray)  {fLHCStateArray = lhcStateArray;}
	void SetMachineModeArray(TObjArray* machineModeArray)  {fMachineModeArray = machineModeArray;}
	void SetL3Polarity(Char_t l3Polarity)  {fL3Polarity = l3Polarity;}
	void SetDipolePolarity(Char_t dipolePolarity)  {fDipolePolarity = dipolePolarity;}
	void SetL3Current(const Float_t* l3Current)  {
		for (Int_t i = 0;i<fPoints;i++) fL3Current[i] = l3Current[i];
	}
	void SetL3Current(Float_t l3Current, Stats stat)  {fL3Current[stat] = l3Current;}
	void SetDipoleCurrent(const Float_t* dipoleCurrent) {
  		for (Int_t i = 0;i<fPoints;i++) fDipoleCurrent[i] = dipoleCurrent[i];
	}
	void SetDipoleCurrent(Float_t dipoleCurrent, Stats stat)  {fDipoleCurrent[stat] = dipoleCurrent;}
	void SetCavernTemperature(const Float_t* cavernTemperature)  {
  		for (Int_t i = 0;i<fPoints;i++) fCavernTemperature[i] = cavernTemperature[i];
	}
	void SetCavernTemperature(Float_t cavernTemperature, Stats stat)  {fCavernTemperature[stat] = cavernTemperature;}
	void SetCavernAtmosPressure(AliDCSSensor* const cavernAtmosPressure)  {fCavernAtmosPressure = cavernAtmosPressure;}
	void SetCavernAtmosPressure2(AliDCSSensor* const cavernAtmosPressure)  {fCavernAtmosPressure2 = cavernAtmosPressure;}
	void SetSurfaceAtmosPressure(AliDCSSensor* const surfacePressure)  {fSurfaceAtmosPressure = surfacePressure;}

	void SetHallProbes(DP_HallProbes hp, Float_t hall_probe, Stats stat)  {fHallProbes[hp*fPoints+stat] = hall_probe;}
	void SetHallProbes(const Float_t* hall_probe){
		for (Int_t i = 0; i< fDimension; i++) fHallProbes[i] =  hall_probe[i];}

	void SetHallProbes(DP_HallProbes hp, const Float_t* hall_probe);  
	void SetPoints(Int_t points) {fPoints = points;}
	void SetDimension(Int_t dimension) {fDimension = dimension;}
	void SetMaxTimeLHCValidity(Double_t maxTimeLHCValidity) {fMaxTimeLHCValidity = maxTimeLHCValidity;}
	//
	void SetQATrigClasses(TObjArray* arr)    {fQATrigClasses = arr;}
	void SetQACloningRequest(TObjArray* arr) {fQACloningRequest = arr;}
	//
	// getters for "invalid" flags

	static Float_t GetInvalidFloat() {return fgkInvalidFloat;}
	static TString GetInvalidString() {return fgkInvalidString;}
	static Int_t GetInvalidInt() {return fgkInvalidInt;}
	static Int_t GetInvalidUInt() {return fgkInvalidUInt;}
	static Char_t GetInvalidChar() {return fgkInvalidChar;}
	static Int_t GetNumberOfHP() {return fgknDCSDPHallProbes;}
	static const char* GetHPDP(Int_t indexHP) {return fgkDCSDataPointsHallProbes[indexHP];}

        Double_t EvalCavernPressure(const TTimeStamp& time, Bool_t& inside) const;
	static Double_t EvalCavernPressure(AliDCSSensor* cavern1, 
	              AliDCSSensor* cavern2, AliDCSSensor* surface, 
		      const TTimeStamp& time, Bool_t& inside);

	// to read old GRP object in TMap format

	void ReadValuesFromMap(const TMap* map);	

	void SetSingleBeamType(Int_t ibeamType, TString beamType)  {fSeparateBeamType[ibeamType] = beamType;}
	TString   GetSingleBeamType(Int_t ibeamType) const {return fSeparateBeamType[ibeamType];}

	void SetNFalseDataQualityFlag(Int_t nFalses) {fNFalseDataQualityFlag = nFalses;}
	Int_t GetNFalseDataQualityFlag() const {return fNFalseDataQualityFlag;}

	void SetFalseDataQualityFlagPeriods(Double_t* falses);
	TArrayD* GetFalseDataQualityFlagPeriods() const {return fFalseDataQualityFlag;}

	Double_t GetStartFalseDataQualityFlag(Int_t iperiod) const;
	Double_t GetEndFalseDataQualityFlag(Int_t iperiod) const;

	void SetBeamTypeFromLHC(TString beamTypeFromLHC)  {fBeamTypeFromLHC = beamTypeFromLHC;}
	TString   GetBeamTypeFromLHC() const {return fBeamTypeFromLHC;}

 private:

	static const Float_t fgkInvalidFloat;   // value to identify invalid data - float
	static const TString fgkInvalidString;  // value to identify invalid data - string
	static const Char_t fgkInvalidChar;     // value to identify invalid data - char
	static const Int_t fgkInvalidInt;       // value to identify invalid data - int
	static const Int_t fgkInvalidUInt;       // value to identify invalid data - uint
	static const Int_t   fgknDCSDPHallProbes;               //! number of dcs dps
	static const char*   fgkDCSDataPointsHallProbes[];      //! names of dcs dps

	Int_t fPoints;                    // number of statistical quantities to be stored
	Int_t fDimension;                 // dimension of Hall Probes array

	time_t   fTimeStart;              // DAQ_time_start entry from DAQ logbook
 	time_t   fTimeEnd;                // DAQ_time_end entry from DAQ logbook
	Float_t  fBeamEnergy;             // beamEnergy entry from DAQ logbook
	TString  fBeamType;               // beamType entry from DAQ logbook
	Char_t   fNumberOfDetectors;      // numberOfDetectors entry from DAQ logbook
	UInt_t   fDetectorMask;           // detectorMask entry from DAQ logbook
	TString  fLHCPeriod;              // LHCperiod entry from DAQ logbook 
	TString  fRunType;                // RunType entry from DAQ logbook 
	TString  fLHCState;               // LHCState entry from DCS DB
	Char_t    fL3Polarity;            // L3Polarity entry from DCS DB
	Char_t    fDipolePolarity;        // DipolePolarity entry from DCS DB 	                                  
	Float_t*  fL3Current;             // [fPoints]
	                                  // L3Current entry from DCS DB
	Float_t*  fDipoleCurrent;         // [fPoints]
                                          // DipoleCurrent entry from DCS DB
	Float_t*  fCavernTemperature;     // [fPoints]
                                          // CavernTemperature entry from DCS DB
	AliDCSSensor*  fCavernAtmosPressure;    // CavernAtmosPressure entry from DCS DB
	AliDCSSensor*  fCavernAtmosPressure2;    // CavernAtmosPressure2 entry from DCS DB
	AliDCSSensor*  fSurfaceAtmosPressure;   // SurfaceAtmosPressure entry from DCS DB

	// Hall Probes

	Float_t* fHallProbes;       //[fDimension] 
	                            // array containg the values for the Hall Probes

	TString  fMachineMode;      // Machine Mode from LHC
	TObjArray* fLHCStateArray;     // Array of values for the LHC State
	TObjArray* fMachineModeArray;  // Array of values for the LHC State
	TObjArray* fQATrigClasses;     // RS: Array of trigger class to watch in QA
	TObjArray* fQACloningRequest;  // RS: Array of cloning requests for QA histos
	Double_t fMaxTimeLHCValidity;    // time until which the LHC Data Machine Mode and Beam Mode didn't change 
	TString  fSeparateBeamType[2];   // separate beam Types from LHC
	Int_t fNFalseDataQualityFlag;    // number of times the data quality flag turned to FALSE
	TArrayD* fFalseDataQualityFlag;  // array of starts (even positions) and ends (odd poistions) of the periods
	                                 // when the data quality flag was FALSE
	TString fBeamTypeFromLHC;        // string containing the information about the beam types AS SENT BY LHC (in the form "beam1-beam2")
	
	ClassDef(AliGRPObject,10)

};

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