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 for (Int_t nhp=0; nhp< fDimension; nhp++){
\r
169 fHallProbes[nhp] = obj.fHallProbes[nhp];
\r
172 for (Int_t i = 0; i < fPoints; i++){
\r
174 fLHCLuminosity[i] = obj.fLHCLuminosity[i];
\r
175 fBeamIntensity[i] = obj.fBeamIntensity[i];
\r
176 fL3Current[i] = obj.fL3Current[i];
\r
177 fDipoleCurrent[i] = obj.fDipoleCurrent[i];
\r
178 fCavernTemperature[i] = obj.fCavernTemperature[i];
\r
182 //-----------------------------------------------------------------------------
\r
184 AliGRPObject& AliGRPObject:: operator=(const AliGRPObject & obj)
\r
188 // AliGRPObject assignment operator
\r
191 this->fTimeStart = obj.GetTimeStart();
\r
192 this->fTimeEnd = obj.GetTimeEnd();
\r
193 this->fBeamEnergy = obj.GetBeamEnergy();
\r
194 this->fBeamType = obj.GetBeamType();
\r
195 this->fNumberOfDetectors = obj.GetNumberOfDetectors();
\r
196 this->fDetectorMask = obj.GetDetectorMask();
\r
197 this->fLHCPeriod = obj.GetLHCPeriod();
\r
198 this->fRunType = obj.GetRunType();
\r
199 this->fLHCState = obj.GetLHCState();
\r
200 this->fLHCLuminositySplineFit = obj.GetLHCLuminositySplineFit();
\r
201 this->fBeamIntensitySplineFit = obj.GetBeamIntensitySplineFit();
\r
202 this->fL3Polarity = obj.GetL3Polarity();
\r
203 this->fDipolePolarity = obj.GetDipolePolarity();
\r
204 this->fCavernAtmosPressure = obj.GetCavernAtmosPressure();
\r
205 this->fCavernAtmosPressure2 = obj.GetCavernAtmosPressure2();
\r
206 this->fSurfaceAtmosPressure = obj.GetSurfaceAtmosPressure();
\r
207 this->fPoints = obj.GetPoints();
\r
208 this->fDimension = obj.GetDimension();
\r
210 this->fLHCLuminosity = new Float_t[fPoints];
\r
211 this->fBeamIntensity = new Float_t[fPoints];
\r
212 this->fL3Current = new Float_t[fPoints];
\r
213 this->fDipoleCurrent = new Float_t[fPoints];
\r
214 this->fCavernTemperature = new Float_t[fPoints];
\r
216 for (Int_t nhp=0; nhp< fDimension; nhp++){
\r
217 this->fHallProbes[nhp] = obj.GetHallProbes(nhp);
\r
220 for (Int_t i = 0; i < fPoints; i++){
\r
222 this->fLHCLuminosity[i] = obj.GetLHCLuminosity((Stats)i);
\r
223 this->fBeamIntensity[i] = obj.GetBeamIntensity((Stats)i);
\r
224 this->fL3Current[i] = obj.GetL3Current((Stats)i);
\r
225 this->fDipoleCurrent[i] = obj.GetDipoleCurrent((Stats)i);
\r
226 this->fCavernTemperature[i] = obj.GetCavernTemperature((Stats)i);
\r
232 //-----------------------------------------------------------------------------
\r
234 AliGRPObject::~AliGRPObject() {
\r
241 delete [] fHallProbes;
\r
242 delete [] fLHCLuminosity;
\r
243 delete [] fBeamIntensity;
\r
244 delete [] fL3Current;
\r
245 delete [] fDipoleCurrent;
\r
246 delete [] fCavernTemperature;
\r
248 if (fLHCLuminositySplineFit){
\r
249 delete fLHCLuminositySplineFit;
\r
250 fLHCLuminositySplineFit = 0x0;
\r
252 if (fBeamIntensitySplineFit){
\r
253 delete fBeamIntensitySplineFit;
\r
254 fBeamIntensitySplineFit = 0x0;
\r
256 if (fCavernAtmosPressure){
\r
257 delete fCavernAtmosPressure;
\r
258 fCavernAtmosPressure = 0x0;
\r
260 if (fCavernAtmosPressure2){
\r
261 delete fCavernAtmosPressure2;
\r
262 fCavernAtmosPressure2 = 0x0;
\r
264 if (fSurfaceAtmosPressure){
\r
265 delete fSurfaceAtmosPressure;
\r
266 fSurfaceAtmosPressure = 0x0;
\r
270 //-----------------------------------------------------------------------------
\r
271 Float_t* AliGRPObject::GetHallProbesArray(DP_HallProbes hp) const {
\r
274 // method to return array of statistical
\r
275 // variables for Hall Probe hp
\r
278 Float_t* array = new Float_t[fPoints];
\r
279 Int_t shift = fPoints*(Int_t)hp;
\r
280 for (Int_t i=0;i<fPoints; i++){
\r
282 array[i] = fHallProbes[shift+i];
\r
288 //-------------------------------------------------------------------------------
\r
290 void AliGRPObject::SetHallProbes(DP_HallProbes hp, const Float_t* hall_probe){
\r
293 // method to set hall probe hp
\r
294 // from a given array
\r
297 Int_t shift = fPoints*hp;
\r
298 for (Int_t i = 0; i< fPoints; i++){
\r
300 fHallProbes[i+shift] = hall_probe[i];
\r
305 //-------------------------------------------------------------------------------
\r
307 void AliGRPObject::ReadValuesFromMap(const TMap* mapGRP){
\r
310 // method to set the values of the GRP parameters
\r
311 // reading them from the old format of the GRP
\r
312 // object, i.e. a TMap
\r
315 if (mapGRP->GetValue("fAliceStartTime")){
\r
316 SetTimeStart((time_t)(((TObjString*)(mapGRP->GetValue("fAliceStartTime")))->GetString()).Atoi());
\r
319 AliError(Form("No fAliceStartTime value found in GRP map!"));
\r
321 if (mapGRP->GetValue("fAliceStopTime")){
\r
322 SetTimeEnd((time_t)(((TObjString*)(mapGRP->GetValue("fAliceStopTime")))->GetString()).Atoi());
\r
326 AliError(Form("No fAliceStopTime value found in GRP map!"));
\r
329 if(mapGRP->GetValue("fAliceBeamEnergy")){
\r
330 SetBeamEnergy((((TObjString*)(mapGRP->GetValue("fAliceBeamEnergy")))->GetString()).Atof());
\r
333 AliError(Form("No fAliceBeamEnergy value found in GRP map!"));
\r
335 if(mapGRP->GetValue("fAliceBeamType")){
\r
336 SetBeamType(((TObjString*)(mapGRP->GetValue("fAliceBeamType")))->GetString());
\r
339 AliError(Form("No fAliceBeamType value found in GRP map!"));
\r
341 if(mapGRP->GetValue("fNumberOfDetectors")){
\r
342 SetNumberOfDetectors((Char_t)(((TObjString*)(mapGRP->GetValue("fNumberOfDetectors")))->GetString()).Atoi());
\r
345 AliError(Form("No fNumberOfDetectors value found in GRP map!"));
\r
347 if(mapGRP->GetValue("fDetectorMask")){
\r
348 SetDetectorMask((UInt_t)(((TObjString*)(mapGRP->GetValue("fDetectorMask")))->GetString()).Atoi());
\r
351 AliError(Form("No fDetectorMask value found in GRP map!"));
\r
353 if(mapGRP->GetValue("fLHCPeriod")){
\r
354 SetLHCPeriod(((TObjString*)(mapGRP->GetValue("fLHCPeriod")))->GetString());
\r
357 AliError(Form("No fLHCPeriod value found in GRP map!"));
\r
359 if(mapGRP->GetValue("fRunType")){
\r
360 SetRunType(((TObjString*)(mapGRP->GetValue("fRunType")))->GetString());
\r
363 AliError(Form("No fRunType value found in GRP map!"));
\r
365 if(mapGRP->GetValue("fLHCState")){
\r
366 SetLHCState(((TObjString*)(mapGRP->GetValue("fLHCState")))->GetString());
\r
369 AliError(Form("No fLHCState value found in GRP map!"));
\r
371 if(mapGRP->GetValue("fLHCluminosity")){
\r
372 AliInfo(Form("fLHCLuminosity found, but porting only average to the new object, since the other values are not available in the old object"));
\r
373 SetLHCLuminosity((Float_t)(((TObjString*)(mapGRP->GetValue("fLHCLuminosity")))->GetString()).Atof(),(Stats)0);
\r
376 AliError(Form("No fLHCLuminosity value found in GRP map!"));
\r
378 if(mapGRP->GetValue("fBeamIntensity")){
\r
379 AliInfo(Form("fBeamIntensity found, but porting only average to the new object, since the other values are not available in the old object"));
\r
380 SetBeamIntensity((Float_t)(((TObjString*)(mapGRP->GetValue("fBeamIntensity")))->GetString()).Atof(),(Stats)0);
\r
383 AliError(Form("No fBeamIntensity value found in GRP map!"));
\r
385 if(mapGRP->GetValue("fL3Polarity")){
\r
386 SetL3Polarity((Char_t)(((TObjString*)(mapGRP->GetValue("fL3Polarity")))->GetString()).Atoi());
\r
389 AliError(Form("No fL3Polarity value found in GRP map!"));
\r
391 if(mapGRP->GetValue("fDipolePolarity")){
\r
392 SetDipolePolarity((Char_t)(((TObjString*)(mapGRP->GetValue("fDipolePolarity")))->GetString()).Atoi());
\r
395 AliError(Form("No fDipolePolarity value found in GRP map!"));
\r
397 if(mapGRP->GetValue("fL3Current")){
\r
398 AliInfo(Form("fL3Current found, but porting only average to the new object, since the other values are not available in the old object"));
\r
399 SetL3Current((Float_t)(((TObjString*)(mapGRP->GetValue("fL3Current")))->GetString()).Atof(),(Stats)0);
\r
402 AliError(Form("No fL3Current value found in GRP map!"));
\r
404 if(mapGRP->GetValue("fDipoleCurrent")){
\r
405 AliInfo(Form("fDipoleCurrent found, but porting only average to the new object, since the other values are not available in the old object"));
\r
406 SetDipoleCurrent((Float_t)(((TObjString*)(mapGRP->GetValue("fDipoleCurrent")))->GetString()).Atof(),(Stats)0);
\r
409 AliError(Form("No fDipoleCurrent value found in GRP map!"));
\r
411 if(mapGRP->GetValue("fCavernTemperature")){
\r
412 AliInfo(Form("fCaverntemperature found, but porting only average to the new object, since the other values are not available in the old object"));
\r
413 SetCavernTemperature((Float_t)(((TObjString*)(mapGRP->GetValue("fCavernTemperature")))->GetString()).Atof(),(Stats)0);
\r
416 AliError(Form("No fCavernTemperature value found in GRP map!"));
\r
418 if(mapGRP->GetValue("fCavernAtmosPressure")){
\r
419 AliInfo(Form("fCavernAtmosPressure found, but not ported to the new object since of a different type"));
\r
422 AliError(Form("No fCavernAtmosPressure value found in GRP map!"));
\r
424 if(mapGRP->GetValue("fP2Pressure")){
\r
425 SetSurfaceAtmosPressure((AliDCSSensor*)((TObjString*)(mapGRP->GetValue("fP2Pressure"))));
\r
428 AliError(Form("No fP2Pressure value found in GRP map!"));
\r