1 /**************************************************************************
\r
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
\r
4 * Author: The ALICE Off-line Project. *
\r
5 * Contributors are mentioned in the code where appropriate. *
\r
7 * Permission to use, copy, modify and distribute this software and its *
\r
8 * documentation strictly for non-commercial purposes is hereby granted *
\r
9 * without fee, provided that the above copyright notice appears in all *
\r
10 * copies and that both the copyright notice and this permission notice *
\r
11 * appear in the supporting documentation. The authors make no claims *
\r
12 * about the suitability of this software for any purpose. It is *
\r
13 * provided "as is" without express or implied warranty. *
\r
14 **************************************************************************/
\r
18 // **********************
\r
19 // Class containing the GRP data that have to be stored in the OCDB.
\r
20 // Data come either from DAQ logbook or from DCS DB.
\r
21 // Processing of the data can also be performed here.
\r
22 // **********************
\r
25 #include <TObject.h>
\r
26 #include <TObjString.h>
\r
28 #include "AliGRPObject.h"
\r
29 #include "AliDCSSensor.h"
\r
32 ClassImp(AliGRPObject)
\r
34 const Float_t AliGRPObject::fgkInvalidFloat = 1E-33; // value to identify invalid data - float
\r
35 const TString AliGRPObject::fgkInvalidString = ""; // value to identify invalid data - string
\r
36 const Char_t AliGRPObject::fgkInvalidChar = -1; // value to identify invalid data - uchar
\r
37 const Int_t AliGRPObject::fgkInvalidInt = -1; // value to identify invalid data - uint
\r
38 const Int_t AliGRPObject::fgkInvalidUInt = 0; // value to identify invalid data - uint
\r
39 const Int_t AliGRPObject::fgknDCSDPHallProbes = 40; // number of dcs dps
\r
40 const char* AliGRPObject::fgkDCSDataPointsHallProbes[AliGRPObject::fgknDCSDPHallProbes] = {
\r
44 "L3_BSF17_Temperature",
\r
48 "L3_BSF4_Temperature",
\r
52 "L3_BKF17_Temperature",
\r
56 "L3_BKF4_Temperature",
\r
60 "L3_BSF13_Temperature",
\r
64 "L3_BSF8_Temperature",
\r
68 "L3_BKF13_Temperature",
\r
72 "L3_BKF8_Temperature",
\r
76 "Dipole_Inside_Temperature",
\r
77 "Dipole_Outside_H1",
\r
78 "Dipole_Outside_H2",
\r
79 "Dipole_Outside_H3",
\r
80 "Dipole_Outside_Temperature",
\r
83 //-----------------------------------------------------------------------------
\r
84 AliGRPObject::AliGRPObject():
\r
88 fTimeStart((time_t)fgkInvalidFloat),
\r
89 fTimeEnd((time_t)fgkInvalidFloat),
\r
90 fBeamEnergy(fgkInvalidFloat),
\r
91 fBeamType(fgkInvalidString),
\r
92 fNumberOfDetectors(fgkInvalidChar),
\r
93 fDetectorMask(fgkInvalidUInt),
\r
94 fLHCPeriod(fgkInvalidString),
\r
95 fRunType(fgkInvalidString),
\r
96 fLHCState(fgkInvalidString),
\r
97 fLHCLuminosity(new Float_t[fPoints]),
\r
98 fLHCLuminositySplineFit(0x0),
\r
99 fBeamIntensity(new Float_t[fPoints]),
\r
100 fBeamIntensitySplineFit(0x0),
\r
101 fL3Polarity(fgkInvalidChar),
\r
102 fDipolePolarity(fgkInvalidChar),
\r
103 fL3Current(new Float_t[fPoints]),
\r
104 fDipoleCurrent(new Float_t[fPoints]),
\r
105 fCavernTemperature(new Float_t[fPoints]),
\r
106 fCavernAtmosPressure(0x0),
\r
107 fCavernAtmosPressure2(0x0),
\r
108 fSurfaceAtmosPressure(0x0),
\r
113 // AliGRPObject default ctor
\r
116 fDimension = fgknDCSDPHallProbes*fPoints;
\r
117 fHallProbes = new Float_t[fDimension];
\r
119 for (Int_t nhp=0; nhp< fDimension; nhp++){
\r
120 fHallProbes[nhp] = fgkInvalidFloat;
\r
123 for (Int_t i = 0; i < fPoints; i++){
\r
125 fLHCLuminosity[i] = fgkInvalidFloat;
\r
126 fBeamIntensity[i] = fgkInvalidFloat;
\r
127 fL3Current[i] = fgkInvalidFloat;
\r
128 fDipoleCurrent[i] = fgkInvalidFloat;
\r
129 fCavernTemperature[i] = fgkInvalidFloat;
\r
133 //-----------------------------------------------------------------------------
\r
135 AliGRPObject::AliGRPObject(const AliGRPObject &obj):
\r
137 fPoints(obj.fPoints),
\r
138 fDimension(obj.fDimension),
\r
139 fTimeStart(obj.fTimeStart),
\r
140 fTimeEnd(obj.fTimeEnd),
\r
141 fBeamEnergy(obj.fBeamEnergy),
\r
142 fBeamType(obj.fBeamType),
\r
143 fNumberOfDetectors(obj.fNumberOfDetectors),
\r
144 fDetectorMask(obj.fDetectorMask),
\r
145 fLHCPeriod(obj.fLHCPeriod),
\r
146 fRunType(obj.fRunType),
\r
147 fLHCState(obj.fLHCState),
\r
148 fLHCLuminosity(new Float_t[fPoints]),
\r
149 fLHCLuminositySplineFit(obj.fLHCLuminositySplineFit),
\r
150 fBeamIntensity(new Float_t[fPoints]),
\r
151 fBeamIntensitySplineFit(obj.fBeamIntensitySplineFit),
\r
152 fL3Polarity(obj.fL3Polarity),
\r
153 fDipolePolarity(obj.fDipolePolarity),
\r
154 fL3Current(new Float_t[fPoints]),
\r
155 fDipoleCurrent(new Float_t[fPoints]),
\r
156 fCavernTemperature(new Float_t[fPoints]),
\r
157 fCavernAtmosPressure(obj.fCavernAtmosPressure),
\r
158 fCavernAtmosPressure2(obj.fCavernAtmosPressure2),
\r
159 fSurfaceAtmosPressure(obj.fSurfaceAtmosPressure),
\r
165 // AliGRPObject copy ctor
\r
168 fHallProbes = new Float_t[fDimension];
\r
170 for (Int_t nhp=0; nhp< fDimension; nhp++){
\r
171 fHallProbes[nhp] = obj.fHallProbes[nhp];
\r
174 for (Int_t i = 0; i < fPoints; i++){
\r
176 fLHCLuminosity[i] = obj.fLHCLuminosity[i];
\r
177 fBeamIntensity[i] = obj.fBeamIntensity[i];
\r
178 fL3Current[i] = obj.fL3Current[i];
\r
179 fDipoleCurrent[i] = obj.fDipoleCurrent[i];
\r
180 fCavernTemperature[i] = obj.fCavernTemperature[i];
\r
184 //-----------------------------------------------------------------------------
\r
186 AliGRPObject& AliGRPObject:: operator=(const AliGRPObject & obj)
\r
190 // AliGRPObject assignment operator
\r
193 if (&obj == this) return *this;
\r
195 TObject::operator=(obj);
\r
196 this->fTimeStart = obj.GetTimeStart();
\r
197 this->fTimeEnd = obj.GetTimeEnd();
\r
198 this->fBeamEnergy = obj.GetBeamEnergy();
\r
199 this->fBeamType = obj.GetBeamType();
\r
200 this->fNumberOfDetectors = obj.GetNumberOfDetectors();
\r
201 this->fDetectorMask = obj.GetDetectorMask();
\r
202 this->fLHCPeriod = obj.GetLHCPeriod();
\r
203 this->fRunType = obj.GetRunType();
\r
204 this->fLHCState = obj.GetLHCState();
\r
205 this->fLHCLuminositySplineFit = obj.GetLHCLuminositySplineFit();
\r
206 this->fBeamIntensitySplineFit = obj.GetBeamIntensitySplineFit();
\r
207 this->fL3Polarity = obj.GetL3Polarity();
\r
208 this->fDipolePolarity = obj.GetDipolePolarity();
\r
209 this->fCavernAtmosPressure = obj.GetCavernAtmosPressure();
\r
210 this->fCavernAtmosPressure2 = obj.GetCavernAtmosPressure2();
\r
211 this->fSurfaceAtmosPressure = obj.GetSurfaceAtmosPressure();
\r
212 this->fPoints = obj.GetPoints();
\r
213 this->fDimension = obj.GetDimension();
\r
215 this->fLHCLuminosity = new Float_t[fPoints];
\r
216 this->fBeamIntensity = new Float_t[fPoints];
\r
217 this->fL3Current = new Float_t[fPoints];
\r
218 this->fDipoleCurrent = new Float_t[fPoints];
\r
219 this->fCavernTemperature = new Float_t[fPoints];
\r
221 if (this->fHallProbes==NULL) this->fHallProbes = new Float_t[this->fDimension];
\r
222 for (Int_t nhp=0; nhp< fDimension; nhp++){
\r
223 this->fHallProbes[nhp] = obj.GetHallProbes(nhp);
\r
226 for (Int_t i = 0; i < fPoints; i++){
\r
228 this->fLHCLuminosity[i] = obj.GetLHCLuminosity((Stats)i);
\r
229 this->fBeamIntensity[i] = obj.GetBeamIntensity((Stats)i);
\r
230 this->fL3Current[i] = obj.GetL3Current((Stats)i);
\r
231 this->fDipoleCurrent[i] = obj.GetDipoleCurrent((Stats)i);
\r
232 this->fCavernTemperature[i] = obj.GetCavernTemperature((Stats)i);
\r
238 //-----------------------------------------------------------------------------
\r
240 AliGRPObject::~AliGRPObject() {
\r
247 delete [] fHallProbes;
\r
248 delete [] fLHCLuminosity;
\r
249 delete [] fBeamIntensity;
\r
250 delete [] fL3Current;
\r
251 delete [] fDipoleCurrent;
\r
252 delete [] fCavernTemperature;
\r
254 if (fLHCLuminositySplineFit){
\r
255 delete fLHCLuminositySplineFit;
\r
256 fLHCLuminositySplineFit = 0x0;
\r
258 if (fBeamIntensitySplineFit){
\r
259 delete fBeamIntensitySplineFit;
\r
260 fBeamIntensitySplineFit = 0x0;
\r
262 if (fCavernAtmosPressure){
\r
263 delete fCavernAtmosPressure;
\r
264 fCavernAtmosPressure = 0x0;
\r
266 if (fCavernAtmosPressure2){
\r
267 delete fCavernAtmosPressure2;
\r
268 fCavernAtmosPressure2 = 0x0;
\r
270 if (fSurfaceAtmosPressure){
\r
271 delete fSurfaceAtmosPressure;
\r
272 fSurfaceAtmosPressure = 0x0;
\r
276 //-----------------------------------------------------------------------------
\r
277 Float_t* AliGRPObject::GetHallProbesArray(DP_HallProbes hp) const {
\r
280 // method to return array of statistical
\r
281 // variables for Hall Probe hp
\r
284 Float_t* array = new Float_t[fPoints];
\r
285 Int_t shift = fPoints*(Int_t)hp;
\r
286 for (Int_t i=0;i<fPoints; i++){
\r
288 array[i] = fHallProbes[shift+i];
\r
294 //-------------------------------------------------------------------------------
\r
296 void AliGRPObject::SetHallProbes(DP_HallProbes hp, const Float_t* hall_probe){
\r
299 // method to set hall probe hp
\r
300 // from a given array
\r
303 Int_t shift = fPoints*hp;
\r
304 for (Int_t i = 0; i< fPoints; i++){
\r
306 fHallProbes[i+shift] = hall_probe[i];
\r
311 //-------------------------------------------------------------------------------
\r
313 void AliGRPObject::ReadValuesFromMap(const TMap* mapGRP){
\r
316 // method to set the values of the GRP parameters
\r
317 // reading them from the old format of the GRP
\r
318 // object, i.e. a TMap
\r
321 if (mapGRP->GetValue("fAliceStartTime")){
\r
322 SetTimeStart((time_t)(((TObjString*)(mapGRP->GetValue("fAliceStartTime")))->GetString()).Atoi());
\r
325 AliError(Form("No fAliceStartTime value found in GRP map!"));
\r
327 if (mapGRP->GetValue("fAliceStopTime")){
\r
328 SetTimeEnd((time_t)(((TObjString*)(mapGRP->GetValue("fAliceStopTime")))->GetString()).Atoi());
\r
332 AliError(Form("No fAliceStopTime value found in GRP map!"));
\r
335 if(mapGRP->GetValue("fAliceBeamEnergy")){
\r
336 double be = (((TObjString*)(mapGRP->GetValue("fAliceBeamEnergy")))->GetString()).Atof();
\r
337 if (IsBeamEnergyIsSqrtSHalfGeV()) be/=2; // old format was storig sqrt(s)
\r
341 AliError(Form("No fAliceBeamEnergy value found in GRP map!"));
\r
343 if(mapGRP->GetValue("fAliceBeamType")){
\r
344 SetBeamType(((TObjString*)(mapGRP->GetValue("fAliceBeamType")))->GetString());
\r
347 AliError(Form("No fAliceBeamType value found in GRP map!"));
\r
349 if(mapGRP->GetValue("fNumberOfDetectors")){
\r
350 SetNumberOfDetectors((Char_t)(((TObjString*)(mapGRP->GetValue("fNumberOfDetectors")))->GetString()).Atoi());
\r
353 AliError(Form("No fNumberOfDetectors value found in GRP map!"));
\r
355 if(mapGRP->GetValue("fDetectorMask")){
\r
356 SetDetectorMask((UInt_t)(((TObjString*)(mapGRP->GetValue("fDetectorMask")))->GetString()).Atoi());
\r
359 AliError(Form("No fDetectorMask value found in GRP map!"));
\r
361 if(mapGRP->GetValue("fLHCPeriod")){
\r
362 SetLHCPeriod(((TObjString*)(mapGRP->GetValue("fLHCPeriod")))->GetString());
\r
365 AliError(Form("No fLHCPeriod value found in GRP map!"));
\r
367 if(mapGRP->GetValue("fRunType")){
\r
368 SetRunType(((TObjString*)(mapGRP->GetValue("fRunType")))->GetString());
\r
371 AliError(Form("No fRunType value found in GRP map!"));
\r
373 if(mapGRP->GetValue("fLHCState")){
\r
374 SetLHCState(((TObjString*)(mapGRP->GetValue("fLHCState")))->GetString());
\r
377 AliError(Form("No fLHCState value found in GRP map!"));
\r
379 if(mapGRP->GetValue("fLHCluminosity")){
\r
380 AliInfo(Form("fLHCLuminosity found, but porting only average to the new object, since the other values are not available in the old object"));
\r
381 SetLHCLuminosity((Float_t)(((TObjString*)(mapGRP->GetValue("fLHCLuminosity")))->GetString()).Atof(),(Stats)0);
\r
384 AliError(Form("No fLHCLuminosity value found in GRP map!"));
\r
386 if(mapGRP->GetValue("fBeamIntensity")){
\r
387 AliInfo(Form("fBeamIntensity found, but porting only average to the new object, since the other values are not available in the old object"));
\r
388 SetBeamIntensity((Float_t)(((TObjString*)(mapGRP->GetValue("fBeamIntensity")))->GetString()).Atof(),(Stats)0);
\r
391 AliError(Form("No fBeamIntensity value found in GRP map!"));
\r
393 if(mapGRP->GetValue("fL3Polarity")){
\r
394 SetL3Polarity((Char_t)(((TObjString*)(mapGRP->GetValue("fL3Polarity")))->GetString()).Atoi());
\r
397 AliError(Form("No fL3Polarity value found in GRP map!"));
\r
399 if(mapGRP->GetValue("fDipolePolarity")){
\r
400 SetDipolePolarity((Char_t)(((TObjString*)(mapGRP->GetValue("fDipolePolarity")))->GetString()).Atoi());
\r
403 AliError(Form("No fDipolePolarity value found in GRP map!"));
\r
405 if(mapGRP->GetValue("fL3Current")){
\r
406 AliInfo(Form("fL3Current found, but porting only average to the new object, since the other values are not available in the old object"));
\r
407 SetL3Current((Float_t)(((TObjString*)(mapGRP->GetValue("fL3Current")))->GetString()).Atof(),(Stats)0);
\r
410 AliError(Form("No fL3Current value found in GRP map!"));
\r
412 if(mapGRP->GetValue("fDipoleCurrent")){
\r
413 AliInfo(Form("fDipoleCurrent found, but porting only average to the new object, since the other values are not available in the old object"));
\r
414 SetDipoleCurrent((Float_t)(((TObjString*)(mapGRP->GetValue("fDipoleCurrent")))->GetString()).Atof(),(Stats)0);
\r
417 AliError(Form("No fDipoleCurrent value found in GRP map!"));
\r
419 if(mapGRP->GetValue("fCavernTemperature")){
\r
420 AliInfo(Form("fCaverntemperature found, but porting only average to the new object, since the other values are not available in the old object"));
\r
421 SetCavernTemperature((Float_t)(((TObjString*)(mapGRP->GetValue("fCavernTemperature")))->GetString()).Atof(),(Stats)0);
\r
424 AliError(Form("No fCavernTemperature value found in GRP map!"));
\r
426 if(mapGRP->GetValue("fCavernAtmosPressure")){
\r
427 AliInfo(Form("fCavernAtmosPressure found, but not ported to the new object since of a different type"));
\r
430 AliError(Form("No fCavernAtmosPressure value found in GRP map!"));
\r
432 if(mapGRP->GetValue("fP2Pressure")){
\r
433 SetSurfaceAtmosPressure((AliDCSSensor*)((TObjString*)(mapGRP->GetValue("fP2Pressure"))));
\r
436 AliError(Form("No fP2Pressure value found in GRP map!"));
\r