Line data Source code
1 : /**************************************************************************
2 : * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 : * *
4 : * Author: The ALICE Off-line Project. *
5 : * Contributors are mentioned in the code where appropriate. *
6 : * *
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 : **************************************************************************/
15 :
16 : /* $Id$ */
17 :
18 : //-----------------------------------------------------------------
19 : // AliGRPDCS class
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"
25 : #include "TError.h"
26 :
27 : #include "AliGRPDCS.h"
28 : #include "AliDCSValue.h"
29 : #include "AliLog.h"
30 :
31 : class TObjString;
32 :
33 : #include <TObjArray.h>
34 :
35 128 : ClassImp(AliGRPDCS)
36 :
37 : //_______________________________________________________________
38 : AliGRPDCS::AliGRPDCS():
39 0 : TObject(), fStartTime(0), fStopTime(0), fDCSArray(new TObjArray())
40 0 : {
41 : // default constructor
42 :
43 0 : }
44 :
45 : //_______________________________________________________________
46 : AliGRPDCS::AliGRPDCS(TObjArray *dcsArray, UInt_t fStart, UInt_t fStop):
47 0 : TObject(), fStartTime(fStart), fStopTime(fStop), fDCSArray(new TObjArray()) {
48 : // constructor
49 0 : fDCSArray = dcsArray;
50 0 : }
51 :
52 : //___________________________________________________________________________
53 : AliGRPDCS::AliGRPDCS(const AliGRPDCS& grpDcs):
54 0 : TObject(grpDcs),
55 0 : fStartTime(grpDcs.fStartTime), fStopTime(grpDcs.fStopTime),
56 0 : fDCSArray(grpDcs.fDCSArray)
57 0 : {
58 : //copy constructor
59 :
60 : //if (grpDcs.fDCSArray) fDCSArray = new TObjArray();
61 0 : }
62 :
63 : //_______________________________________________________________
64 : TString AliGRPDCS::ProcessDCS(Int_t iType)
65 : {
66 : // process the dcs dps
67 0 : if(!fDCSArray->GetEntries()) {
68 0 : Error("AliGRPDCS::ProcessDCS","No entries in array!!!");
69 0 : return TString();
70 : }
71 :
72 : // 1:Bool - 2:Char - 3:Int - 4:UInt - 5:Float
73 0 : TString fDCSDataPointValue;
74 0 : switch (iType) {
75 : case 1: {
76 0 : fDCSDataPointValue += ProcessBoolean();
77 0 : break;
78 : }
79 : case 2: {
80 0 : fDCSDataPointValue += ProcessChar();
81 0 : break;
82 : }
83 : case 3: {
84 0 : fDCSDataPointValue += ProcessInt();
85 0 : break;
86 : }
87 : case 4: {
88 0 : fDCSDataPointValue += ProcessUInt();
89 0 : break;
90 : }
91 : case 5: {
92 0 : fDCSDataPointValue += ProcessFloat();
93 0 : break;
94 : }
95 : // case 6: {
96 : // fDCSDataPointValue += ProcessString();
97 : // break;
98 : // }
99 : default: {
100 0 : Error("AliGRPDCS::ProcessDCS", "Unknown type!!!" );
101 : break;
102 : }
103 : }//switch
104 :
105 : //cout<<fDCSDataPointValue.Data()<<endl;
106 0 : return fDCSDataPointValue;
107 0 : }
108 :
109 : //_______________________________________________________________
110 : TString AliGRPDCS::ProcessBoolean()
111 : {
112 : Bool_t fDCSBool = kTRUE;
113 : Bool_t previousBool = kTRUE;
114 :
115 : AliDCSValue *v = 0x0;
116 :
117 0 : for(Int_t iCount = 0; iCount < fDCSArray->GetEntries(); iCount++) {
118 0 : v = (AliDCSValue *)fDCSArray->At(iCount);
119 0 : if ((v->GetTimeStamp() < fStartTime) || (v->GetTimeStamp() > fStopTime)) {
120 0 : AliError(Form("DCS values for the parameter outside the queried interval"));
121 0 : continue;
122 : }
123 0 : fDCSBool = v->GetBool();
124 0 : if (iCount > 0) {
125 0 : if (fDCSBool != previousBool)
126 0 : AliError(Form("DCS values for the parameter changed from %d to %d within the queried interval", (Int_t)previousBool, (Int_t)fDCSBool));
127 : }
128 0 : previousBool = fDCSBool;
129 0 : }
130 :
131 0 : return (fDCSBool)? "1" : "0";
132 0 : }
133 :
134 : //_______________________________________________________________
135 : TString AliGRPDCS::ProcessInt()
136 : {
137 : Float_t fFDCSArraySum = 0.0, fFDCSArrayMean = 0.0;
138 : Int_t iCounts = 0;
139 0 : for(Int_t i = 0; i < fDCSArray->GetEntries(); i++) {
140 0 : AliDCSValue *v = (AliDCSValue *)fDCSArray->At(i);
141 0 : if((v->GetTimeStamp() >= fStartTime) &&(v->GetTimeStamp() <= fStopTime)) {
142 0 : fFDCSArraySum += v->GetInt();
143 0 : iCounts += 1;
144 0 : }
145 : }
146 0 : if(iCounts != 0) fFDCSArrayMean = fFDCSArraySum/iCounts;
147 : else fFDCSArrayMean = -10.;
148 :
149 0 : TString fDCSDataPointValue; fDCSDataPointValue += fFDCSArrayMean;
150 : //return fDCSDataPointValue.Data()
151 : // return string from root circular buffer, do not return local pointer
152 0 : return Form("%s",fDCSDataPointValue.Data());
153 0 : }
154 :
155 : //_______________________________________________________________
156 : TString AliGRPDCS::ProcessUInt()
157 : {
158 : Float_t fFDCSArraySum = 0.0, fFDCSArrayMean = 0.0;
159 : Int_t iCounts = 0;
160 0 : for(Int_t i = 0; i < fDCSArray->GetEntries(); i++) {
161 0 : AliDCSValue *v = (AliDCSValue *)fDCSArray->At(i);
162 0 : if((v->GetTimeStamp() >= fStartTime) &&(v->GetTimeStamp() <= fStopTime)) {
163 0 : fFDCSArraySum += v->GetUInt();
164 0 : iCounts += 1;
165 0 : }
166 : }
167 0 : if(iCounts != 0) fFDCSArrayMean = fFDCSArraySum/iCounts;
168 : else fFDCSArrayMean = -10.;
169 :
170 0 : TString fDCSDataPointValue; fDCSDataPointValue += fFDCSArrayMean;
171 : //return fDCSDataPointValue.Data();
172 : // return string from root circular buffer, do not return local pointer
173 0 : return Form("%s",fDCSDataPointValue.Data());
174 :
175 :
176 0 : }
177 :
178 : //_______________________________________________________________
179 : TString AliGRPDCS::ProcessFloat()
180 : {
181 : Float_t fFDCSArraySum = 0.0, fFDCSArrayMean = 0.0;
182 : Int_t iCounts = 0;
183 : //printf("Entries: %d\n",fDCSArray->GetEntries());
184 : //printf("Start: %d - Stop: %d\n",fStartTime,fStopTime);
185 0 : for(Int_t i = 0; i < fDCSArray->GetEntries(); i++) {
186 0 : AliDCSValue *v = (AliDCSValue *)fDCSArray->At(i);
187 0 : if((v->GetTimeStamp() >= fStartTime) &&(v->GetTimeStamp() <= fStopTime)) {
188 0 : fFDCSArraySum += v->GetFloat();
189 0 : iCounts += 1;
190 0 : }
191 : }
192 0 : if(iCounts != 0) fFDCSArrayMean = fFDCSArraySum/iCounts;
193 : else fFDCSArrayMean = -10.;
194 :
195 0 : TString fDCSDataPointValue; fDCSDataPointValue += fFDCSArrayMean;
196 : // return fDCSDataPointValue.Data();
197 : // return string from root circular buffer, do not return local pointer
198 0 : return Form("%s",fDCSDataPointValue.Data());
199 :
200 0 : }
201 :
202 : //_______________________________________________________________
203 : TString AliGRPDCS::ProcessChar()
204 : {
205 0 : TString fDCSString;
206 :
207 : AliDCSValue *v = 0x0;
208 :
209 : //printf("Entries: %d\n",fDCSArray->GetEntries());
210 : //printf("Start: %d - Stop: %d\n",fStartTime,fStopTime);
211 :
212 0 : for(Int_t iCount = 0; iCount < fDCSArray->GetEntries(); iCount++) {
213 0 : v = (AliDCSValue *)fDCSArray->At(iCount);
214 0 : if ((v->GetTimeStamp() >= fStartTime) && (v->GetTimeStamp() <= fStopTime))
215 0 : AliError(Form("DCS values for the parameter changed within the queried interval"));
216 0 : if (v->GetTimeStamp() > fStopTime) continue;
217 0 : fDCSString = v->GetChar();
218 : }
219 :
220 0 : TString fDCSDataPointValue = fDCSString;
221 :
222 : return fDCSDataPointValue;
223 0 : }
224 :
225 : /*
226 : //_______________________________________________________________
227 : TString AliGRPDCS::ProcessString()
228 : {
229 : TString fDCSString;
230 :
231 : AliDCSValue *v = 0x0;
232 :
233 : //printf("Entries: %d\n",fDCSArray->GetEntries());
234 : //printf("Start: %d - Stop: %d\n",fStartTime,fStopTime);
235 :
236 : for(Int_t iCount = 0; iCount < fDCSArray->GetEntries(); iCount++) {
237 : v = (TObjString *)fDCSArray->At(iCount);
238 : if ((v->GetTimeStamp() >= fStartTime) && (v->GetTimeStamp() <= fStopTime))
239 : AliError(Form("DCS values for the parameter changed within the queried interval"));
240 : if (v->GetTimeStamp() > fStopTime) continue;
241 : fDCSString = v->GetChar(); // FIXME should be something like v->GetString()
242 : }
243 :
244 : TString fDCSDataPointValue = fDCSString;
245 : //cout<<"Returned String: "<<fDCSDataPointValue.Data()<<endl;
246 :
247 : return fDCSDataPointValue.Data();
248 : }
249 : */
|