]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/AliGRPDCS.cxx
Update TPCCEda to write output file in parts (to avoid too big files produced in...
[u/mrichter/AliRoot.git] / STEER / AliGRPDCS.cxx
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 ClassImp(AliGRPDCS)
36
37 //_______________________________________________________________
38 AliGRPDCS::AliGRPDCS():
39   TObject(), fStartTime(0), fStopTime(0), fDCSArray(new TObjArray())
40 {
41   // default constructor
42   
43 }
44
45 //_______________________________________________________________
46 AliGRPDCS::AliGRPDCS(TObjArray *dcsArray, UInt_t fStart, UInt_t fStop):
47   TObject(), fStartTime(fStart), fStopTime(fStop), fDCSArray(new TObjArray()) {
48   // constructor
49   fDCSArray = dcsArray;
50 }
51
52 //___________________________________________________________________________
53 AliGRPDCS::AliGRPDCS(const AliGRPDCS& grpDcs):
54   TObject(grpDcs), 
55   fStartTime(grpDcs.fStartTime), fStopTime(grpDcs.fStopTime), 
56   fDCSArray(grpDcs.fDCSArray)
57 {
58   //copy constructor
59
60   //if (grpDcs.fDCSArray) fDCSArray = new TObjArray();
61 }
62
63 //_______________________________________________________________
64 const char* AliGRPDCS::ProcessDCS(Int_t iType)
65 {
66   // process the dcs dps
67   if(!fDCSArray->GetEntries()) {
68     Error("AliGRPDCS::ProcessDCS","No entries in array!!!");
69     return 0;
70   }
71
72   // 1:Bool - 2:Char - 3:Int - 4:UInt - 5:Float
73   TString fDCSDataPointValue;
74   switch (iType) {
75     case 1: {
76       fDCSDataPointValue += ProcessBoolean();
77       break;
78     }
79     case 2: {
80       fDCSDataPointValue += ProcessChar();
81       break;
82     }
83     case 3: {
84       fDCSDataPointValue += ProcessInt();
85       break;
86     }
87     case 4: {
88       fDCSDataPointValue += ProcessUInt();
89       break;
90     }
91     case 5: {
92       fDCSDataPointValue += ProcessFloat();
93       break;
94     }
95 //  case 6: {
96 //    fDCSDataPointValue += ProcessString();
97 //    break;
98 //  }
99     default: {
100       Error("AliGRPDCS::ProcessDCS", "Unknown type!!!" );
101       break;
102     }
103   }//switch
104
105   //cout<<fDCSDataPointValue.Data()<<endl;
106   return fDCSDataPointValue.Data();
107 }
108
109 //_______________________________________________________________
110 const char* AliGRPDCS::ProcessBoolean()
111 {
112   Bool_t fDCSBool = kTRUE;
113   Bool_t previousBool = kTRUE;
114
115   AliDCSValue *v = 0x0;
116
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"));
121       continue;
122     }
123     fDCSBool = v->GetBool();
124     if (iCount > 0) {
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));
127     }
128     previousBool = fDCSBool;
129   }
130
131   TString fDCSDataPointValue = (fDCSBool)? "1" : "0";
132
133   return fDCSDataPointValue.Data();
134 }
135
136 //_______________________________________________________________
137 const char* AliGRPDCS::ProcessInt()
138 {
139   Float_t fFDCSArraySum = 0.0, fFDCSArrayMean = 0.0;
140   Int_t iCounts = 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();
145       iCounts += 1;
146     }
147   }
148   if(iCounts != 0) fFDCSArrayMean = fFDCSArraySum/iCounts;
149   else fFDCSArrayMean = -10.;
150  
151   TString fDCSDataPointValue; fDCSDataPointValue += fFDCSArrayMean;
152
153   return fDCSDataPointValue.Data();
154 }
155
156 //_______________________________________________________________
157 const char* AliGRPDCS::ProcessUInt()
158 {
159   Float_t fFDCSArraySum = 0.0, fFDCSArrayMean = 0.0;
160   Int_t iCounts = 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();
165       iCounts += 1;
166     }
167   }
168   if(iCounts != 0) fFDCSArrayMean = fFDCSArraySum/iCounts;
169   else fFDCSArrayMean = -10.;
170    
171   TString fDCSDataPointValue; fDCSDataPointValue += fFDCSArrayMean;
172
173   return fDCSDataPointValue.Data();
174 }
175
176 //_______________________________________________________________
177 const char* AliGRPDCS::ProcessFloat()
178 {
179   Float_t fFDCSArraySum = 0.0, fFDCSArrayMean = 0.0;
180   Int_t iCounts = 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();
187       iCounts += 1;
188     }
189   }
190   if(iCounts != 0) fFDCSArrayMean = fFDCSArraySum/iCounts;
191   else fFDCSArrayMean = -10.;
192    
193   TString fDCSDataPointValue; fDCSDataPointValue += fFDCSArrayMean;
194
195   return fDCSDataPointValue.Data();
196 }
197
198 //_______________________________________________________________
199 const char* AliGRPDCS::ProcessChar()
200 {
201   TString fDCSString;
202
203   AliDCSValue *v = 0x0;
204
205   //printf("Entries: %d\n",fDCSArray->GetEntries());
206   //printf("Start: %d - Stop: %d\n",fStartTime,fStopTime);
207   
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();
214   }
215   
216   TString fDCSDataPointValue = fDCSString;
217   
218   return fDCSDataPointValue.Data();
219 }
220
221 /*
222 //_______________________________________________________________
223 const char* AliGRPDCS::ProcessString()
224 {
225   TString fDCSString;
226
227   AliDCSValue *v = 0x0;
228
229   //printf("Entries: %d\n",fDCSArray->GetEntries());
230   //printf("Start: %d - Stop: %d\n",fStartTime,fStopTime);
231   
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()
238   }
239   
240   TString fDCSDataPointValue = fDCSString;
241   //cout<<"Returned String: "<<fDCSDataPointValue.Data()<<endl;
242
243   return fDCSDataPointValue.Data();
244 }
245 */