1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
18 //-----------------------------------------------------------------
20 // This class deals with the DCS related info of the GRP
21 // Origin: Panos Christakoglou, UOA-CERN, Panos.Christakoglou@cern.ch
22 // Modified: Ernesto.Lopez.Torres@cern.ch CEADEN-CERN
23 //-----------------------------------------------------------------
24 #include "Riostream.h"
27 #include "AliGRPDCS.h"
28 #include "AliDCSValue.h"
33 #include <TObjArray.h>
37 //_______________________________________________________________
38 AliGRPDCS::AliGRPDCS():
39 TObject(), fStartTime(0), fStopTime(0), fDCSArray(new TObjArray())
41 // default constructor
45 //_______________________________________________________________
46 AliGRPDCS::AliGRPDCS(TObjArray *dcsArray, UInt_t fStart, UInt_t fStop):
47 TObject(), fStartTime(fStart), fStopTime(fStop), fDCSArray(new TObjArray()) {
52 //___________________________________________________________________________
53 AliGRPDCS::AliGRPDCS(const AliGRPDCS& grpDcs):
55 fStartTime(grpDcs.fStartTime), fStopTime(grpDcs.fStopTime),
56 fDCSArray(grpDcs.fDCSArray)
60 //if (grpDcs.fDCSArray) fDCSArray = new TObjArray();
63 //_______________________________________________________________
64 const char* AliGRPDCS::ProcessDCS(Int_t iType)
66 // process the dcs dps
67 if(!fDCSArray->GetEntries()) {
68 Error("AliGRPDCS::ProcessDCS","No entries in array!!!");
72 // 1:Bool - 2:Char - 3:Int - 4:UInt - 5:Float
73 TString fDCSDataPointValue;
76 fDCSDataPointValue += ProcessBoolean();
80 fDCSDataPointValue += ProcessChar();
84 fDCSDataPointValue += ProcessInt();
88 fDCSDataPointValue += ProcessUInt();
92 fDCSDataPointValue += ProcessFloat();
96 // fDCSDataPointValue += ProcessString();
100 Error("AliGRPDCS::ProcessDCS", "Unknown type!!!" );
105 //cout<<fDCSDataPointValue.Data()<<endl;
106 return fDCSDataPointValue.Data();
109 //_______________________________________________________________
110 const char* AliGRPDCS::ProcessBoolean()
112 Bool_t fDCSBool = kTRUE;
113 Bool_t previousBool = kTRUE;
115 AliDCSValue *v = 0x0;
117 for(Int_t iCount = 0; iCount < fDCSArray->GetEntries(); iCount++) {
118 v = (AliDCSValue *)fDCSArray->At(iCount);
119 if ((v->GetTimeStamp() < fStartTime) || (v->GetTimeStamp() > fStopTime)) {
120 AliError(Form("DCS values for the parameter outside the queried interval"));
123 fDCSBool = v->GetBool();
125 if (fDCSBool != previousBool)
126 AliError(Form("DCS values for the parameter changed from %d to %d within the queried interval", (Int_t)previousBool, (Int_t)fDCSBool));
128 previousBool = fDCSBool;
131 TString fDCSDataPointValue = (fDCSBool)? "1" : "0";
133 return fDCSDataPointValue.Data();
136 //_______________________________________________________________
137 const char* AliGRPDCS::ProcessInt()
139 Float_t fFDCSArraySum = 0.0, fFDCSArrayMean = 0.0;
141 for(Int_t i = 0; i < fDCSArray->GetEntries(); i++) {
142 AliDCSValue *v = (AliDCSValue *)fDCSArray->At(i);
143 if((v->GetTimeStamp() >= fStartTime) &&(v->GetTimeStamp() <= fStopTime)) {
144 fFDCSArraySum += v->GetInt();
148 if(iCounts != 0) fFDCSArrayMean = fFDCSArraySum/iCounts;
149 else fFDCSArrayMean = -10.;
151 TString fDCSDataPointValue; fDCSDataPointValue += fFDCSArrayMean;
153 return fDCSDataPointValue.Data();
156 //_______________________________________________________________
157 const char* AliGRPDCS::ProcessUInt()
159 Float_t fFDCSArraySum = 0.0, fFDCSArrayMean = 0.0;
161 for(Int_t i = 0; i < fDCSArray->GetEntries(); i++) {
162 AliDCSValue *v = (AliDCSValue *)fDCSArray->At(i);
163 if((v->GetTimeStamp() >= fStartTime) &&(v->GetTimeStamp() <= fStopTime)) {
164 fFDCSArraySum += v->GetUInt();
168 if(iCounts != 0) fFDCSArrayMean = fFDCSArraySum/iCounts;
169 else fFDCSArrayMean = -10.;
171 TString fDCSDataPointValue; fDCSDataPointValue += fFDCSArrayMean;
173 return fDCSDataPointValue.Data();
176 //_______________________________________________________________
177 const char* AliGRPDCS::ProcessFloat()
179 Float_t fFDCSArraySum = 0.0, fFDCSArrayMean = 0.0;
181 //printf("Entries: %d\n",fDCSArray->GetEntries());
182 //printf("Start: %d - Stop: %d\n",fStartTime,fStopTime);
183 for(Int_t i = 0; i < fDCSArray->GetEntries(); i++) {
184 AliDCSValue *v = (AliDCSValue *)fDCSArray->At(i);
185 if((v->GetTimeStamp() >= fStartTime) &&(v->GetTimeStamp() <= fStopTime)) {
186 fFDCSArraySum += v->GetFloat();
190 if(iCounts != 0) fFDCSArrayMean = fFDCSArraySum/iCounts;
191 else fFDCSArrayMean = -10.;
193 TString fDCSDataPointValue; fDCSDataPointValue += fFDCSArrayMean;
195 return fDCSDataPointValue.Data();
198 //_______________________________________________________________
199 const char* AliGRPDCS::ProcessChar()
203 AliDCSValue *v = 0x0;
205 //printf("Entries: %d\n",fDCSArray->GetEntries());
206 //printf("Start: %d - Stop: %d\n",fStartTime,fStopTime);
208 for(Int_t iCount = 0; iCount < fDCSArray->GetEntries(); iCount++) {
209 v = (AliDCSValue *)fDCSArray->At(iCount);
210 if ((v->GetTimeStamp() >= fStartTime) && (v->GetTimeStamp() <= fStopTime))
211 AliError(Form("DCS values for the parameter changed within the queried interval"));
212 if (v->GetTimeStamp() > fStopTime) continue;
213 fDCSString = v->GetChar();
216 TString fDCSDataPointValue = fDCSString;
218 return fDCSDataPointValue.Data();
222 //_______________________________________________________________
223 const char* AliGRPDCS::ProcessString()
227 AliDCSValue *v = 0x0;
229 //printf("Entries: %d\n",fDCSArray->GetEntries());
230 //printf("Start: %d - Stop: %d\n",fStartTime,fStopTime);
232 for(Int_t iCount = 0; iCount < fDCSArray->GetEntries(); iCount++) {
233 v = (TObjString *)fDCSArray->At(iCount);
234 if ((v->GetTimeStamp() >= fStartTime) && (v->GetTimeStamp() <= fStopTime))
235 AliError(Form("DCS values for the parameter changed within the queried interval"));
236 if (v->GetTimeStamp() > fStopTime) continue;
237 fDCSString = v->GetChar(); // FIXME should be something like v->GetString()
240 TString fDCSDataPointValue = fDCSString;
241 //cout<<"Returned String: "<<fDCSDataPointValue.Data()<<endl;
243 return fDCSDataPointValue.Data();