]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/AliGRPDCS.cxx
Switch off branches by hand.
[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 //-----------------------------------------------------------------
23 #include "Riostream.h"
24 #include "TError.h"
25
26 #include "AliGRPDCS.h"
27 #include "AliDCSValue.h"
28 #include "AliLog.h"
29
30 class TObjString;
31
32 #include <TObjArray.h>
33
34 ClassImp(AliGRPDCS)
35
36 //_______________________________________________________________
37 AliGRPDCS::AliGRPDCS():
38   TObject(), fStartTime(0), fStopTime(0), fDCSArray(new TObjArray()) {
39   // default constructor
40   
41 }
42
43 //_______________________________________________________________
44 AliGRPDCS::AliGRPDCS(TObjArray *dcsArray, UInt_t fStart, UInt_t fStop):
45   TObject(), fStartTime(fStart), fStopTime(fStop), fDCSArray(new TObjArray()) {
46   // constructor
47   fDCSArray = dcsArray;
48 }
49
50 //___________________________________________________________________________
51 AliGRPDCS::AliGRPDCS(const AliGRPDCS& grpDcs):
52   TObject(grpDcs), 
53   fStartTime(grpDcs.fStartTime), fStopTime(grpDcs.fStopTime) {
54   //copy constructor
55
56   if (grpDcs.fDCSArray) fDCSArray = new TObjArray();
57 }
58
59 //_______________________________________________________________
60 const char* AliGRPDCS::ProcessDCS(Int_t iType) {
61   // process the dcs dps
62   if(!fDCSArray->GetEntries()) {
63     Error("AliGRPDCS::ProcessDCS","No entries in array!!!");
64     return 0;
65   }
66
67   //0:Int - 1:UInt - 2:Float - 3:String - 4:Bool
68   TString fDCSDataPointValue;
69   switch (iType) {
70   case 0: {
71     fDCSDataPointValue += ProcessInt();
72     break;
73   }
74   case 1: {
75     fDCSDataPointValue += ProcessUInt();
76     break;
77   }
78   case 2: {
79     fDCSDataPointValue += ProcessFloat();
80     break;
81   }
82   case 3: {
83     fDCSDataPointValue += ProcessString();
84     cout<<fDCSDataPointValue.Data()<<endl;
85     break;
86   }
87   case 4: {
88     fDCSDataPointValue += ProcessBoolean();
89     break;
90   }
91   default: break;
92   }//switch
93
94   cout<<fDCSDataPointValue.Data()<<endl;
95   return fDCSDataPointValue.Data();
96 }
97
98 //_______________________________________________________________
99 const char* AliGRPDCS::ProcessInt() {
100   Float_t fFDCSArraySum = 0.0, fFDCSArrayMean = 0.0;
101   Int_t iCounts = 0;
102   for(Int_t i = 0; i < fDCSArray->GetEntries(); i++) {
103     AliDCSValue *v = (AliDCSValue *)fDCSArray->At(i);
104     if((v->GetTimeStamp() >= fStartTime) &&(v->GetTimeStamp() <= fStopTime)) {
105       fFDCSArraySum += v->GetInt();
106       iCounts += 1;
107     }
108   }
109   if(iCounts != 0) fFDCSArrayMean = fFDCSArraySum/iCounts;
110   else fFDCSArrayMean = -10.;
111  
112   TString fDCSDataPointValue; fDCSDataPointValue += fFDCSArrayMean;
113
114   return fDCSDataPointValue.Data();
115 }
116
117 //_______________________________________________________________
118 const char* AliGRPDCS::ProcessUInt() {
119   Float_t fFDCSArraySum = 0.0, fFDCSArrayMean = 0.0;
120   Int_t iCounts = 0;
121   for(Int_t i = 0; i < fDCSArray->GetEntries(); i++) {
122     AliDCSValue *v = (AliDCSValue *)fDCSArray->At(i);
123     if((v->GetTimeStamp() >= fStartTime) &&(v->GetTimeStamp() <= fStopTime)) {
124       fFDCSArraySum += v->GetUInt();
125       iCounts += 1;
126     }
127   }
128   if(iCounts != 0) fFDCSArrayMean = fFDCSArraySum/iCounts;
129   else fFDCSArrayMean = -10.;
130    
131   TString fDCSDataPointValue; fDCSDataPointValue += fFDCSArrayMean;
132
133   return fDCSDataPointValue.Data();
134 }
135
136 //_______________________________________________________________
137 const char* AliGRPDCS::ProcessFloat() {
138   Float_t fFDCSArraySum = 0.0, fFDCSArrayMean = 0.0;
139   Int_t iCounts = 0;
140   for(Int_t i = 0; i < fDCSArray->GetEntries(); i++) {
141     AliDCSValue *v = (AliDCSValue *)fDCSArray->At(i);
142     if((v->GetTimeStamp() >= fStartTime) &&(v->GetTimeStamp() <= fStopTime)) {
143       fFDCSArraySum += v->GetFloat();
144       iCounts += 1;
145     }
146   }
147   if(iCounts != 0) fFDCSArrayMean = fFDCSArraySum/iCounts;
148   else fFDCSArrayMean = -10.;
149    
150   TString fDCSDataPointValue; fDCSDataPointValue += fFDCSArrayMean;
151
152   return fDCSDataPointValue.Data();
153 }
154
155 //_______________________________________________________________
156 const char* AliGRPDCS::ProcessString() {
157   TString fDCSString, fDCSTemp;
158   Bool_t kFound = kFALSE;
159   Int_t iCount = 0;
160
161   AliDCSValue *v = 0x0;
162
163   printf("Entries: %d\n",fDCSArray->GetEntries());
164   printf("Start: %d - Stop: %d\n",fStartTime,fStopTime);
165
166   while(!kFound) {
167     v = (AliDCSValue *)fDCSArray->At(iCount);
168     iCount += 1;
169     cout<<"Time: "<<v->GetTimeStamp()<<endl;
170     if((v->GetTimeStamp() >= fStartTime) &&(v->GetTimeStamp() <= fStopTime)) kFound = kTRUE;
171   }
172   fDCSTemp = v->GetChar();
173   cout<<"Found: "<<kFound<<" - String: "<<fDCSTemp.Data()<<endl;
174   for(Int_t i = 0; i < fDCSArray->GetEntries(); i++) {
175     AliDCSValue *v1 = (AliDCSValue *)fDCSArray->At(i);
176     if((v1->GetTimeStamp() >= fStartTime) &&(v1->GetTimeStamp() <= fStopTime)) {
177       fDCSString = v1->GetChar();
178       if(fDCSTemp != fDCSString) AliFatal("DCS data point value changed within the run!!!");
179     }
180   }
181   TString fDCSDataPointValue = fDCSString;
182   cout<<"Returned String: "<<fDCSDataPointValue.Data()<<endl;
183
184   return fDCSDataPointValue.Data();
185 }
186
187 //_______________________________________________________________
188 const char* AliGRPDCS::ProcessBoolean() {
189   Bool_t fDCSBool = kTRUE, fDCSTemp = kTRUE;
190   Bool_t kFound = kFALSE;
191   Int_t iCount = 0;
192
193   AliDCSValue *v = 0x0;
194   while(!kFound) {
195     v = (AliDCSValue *)fDCSArray->At(iCount);
196     iCount += 1;
197     if((v->GetTimeStamp() >= fStartTime) &&(v->GetTimeStamp() <= fStopTime)) kFound = kTRUE;
198   }
199   fDCSTemp = v->GetBool();
200   for(Int_t i = 0; i < fDCSArray->GetEntries(); i++) {
201     AliDCSValue *v1 = (AliDCSValue *)fDCSArray->At(i);
202     if((v1->GetTimeStamp() >= fStartTime) &&(v1->GetTimeStamp() <= fStopTime)) {
203       fDCSBool = v1->GetBool();
204       if(fDCSTemp != fDCSBool) AliFatal("DCS data point value changed within the run!!!");
205     }
206   }
207   TString fDCSDataPointValue = fDCSBool;
208
209   return fDCSDataPointValue.Data();
210 }