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 :
17 : #include "AliVZERODataDCS.h"
18 :
19 : #include "AliDCSValue.h"
20 : #include "AliLog.h"
21 :
22 : #include <TGraph.h>
23 : #include <TAxis.h>
24 : #include <TCanvas.h>
25 : #include <TTimeStamp.h>
26 : #include <TMap.h>
27 : #include <TString.h>
28 : #include <TObjString.h>
29 : #include <TH1F.h>
30 :
31 : class TH2;
32 : class AliCDBMetaData;
33 : class TDatime;
34 :
35 : // AliVZERODataDCS class
36 : // main aim to introduce the aliases for the VZERO DCS
37 : // data points to be then
38 : // stored in the OCDB, and to process them.
39 : // ProcessData() method called by VZEROPreprocessor
40 :
41 44 : ClassImp(AliVZERODataDCS)
42 :
43 : //_____________________________________________________________________________
44 0 : AliVZERODataDCS::AliVZERODataDCS():
45 0 : TObject(),
46 0 : fRun(0),
47 0 : fStartTime(0),
48 0 : fEndTime(0),
49 0 : fDaqStartTime(0),
50 0 : fDaqEndTime(0),
51 0 : fCtpStartTime(0),
52 0 : fCtpEndTime(0),
53 0 : fGraphs("TGraph",kNGraphs),
54 0 : fFEEParameters(NULL),
55 0 : fIsProcessed(kFALSE)
56 :
57 0 : {
58 : // Default constructor
59 0 : for(int i=0;i<kNHvChannel;i++) {
60 0 : fDeadChannel[i] = kFALSE;
61 0 : fMeanHV[i] = 100.0;
62 0 : fWidthHV[i] = 0.0;
63 0 : fHv[i] = NULL;
64 : }
65 0 : }
66 :
67 : //_____________________________________________________________________________
68 0 : AliVZERODataDCS::AliVZERODataDCS(Int_t nRun, UInt_t startTime, UInt_t endTime, UInt_t daqStartTime, UInt_t daqEndTime, UInt_t ctpStartTime, UInt_t ctpEndTime):
69 0 : TObject(),
70 0 : fRun(nRun),
71 0 : fStartTime(startTime),
72 0 : fEndTime(endTime),
73 0 : fDaqStartTime(daqStartTime),
74 0 : fDaqEndTime(daqEndTime),
75 0 : fCtpStartTime(ctpStartTime),
76 0 : fCtpEndTime(ctpEndTime),
77 0 : fGraphs("TGraph",kNGraphs),
78 0 : fFEEParameters(new TMap()),
79 0 : fIsProcessed(kFALSE)
80 :
81 0 : {
82 :
83 : // constructor with arguments
84 0 : for(int i=0;i<kNHvChannel;i++) {
85 0 : fDeadChannel[i] = kFALSE;
86 0 : fMeanHV[i] = 100.0;
87 0 : fWidthHV[i] = 0.0;
88 : }
89 0 : AliInfo(Form("\n\tRun %d \n\tTime Created %s \n\tTime Completed %s \n\tDAQ start %s \n\tDAQ end %s \n\tCTP start %s \n\tCTP end %s ", nRun,
90 : TTimeStamp(startTime).AsString(),
91 : TTimeStamp(endTime).AsString(),
92 : TTimeStamp(daqStartTime).AsString(),
93 : TTimeStamp(daqEndTime).AsString(),
94 : TTimeStamp(ctpStartTime).AsString(),
95 : TTimeStamp(ctpEndTime).AsString()
96 : ));
97 :
98 0 : fFEEParameters->SetOwnerValue();
99 0 : Init();
100 :
101 0 : }
102 :
103 : //_____________________________________________________________________________
104 0 : AliVZERODataDCS::~AliVZERODataDCS() {
105 :
106 : // destructor
107 0 : fGraphs.Clear("C");
108 0 : delete fFEEParameters;
109 :
110 0 : }
111 :
112 : //_____________________________________________________________________________
113 : Bool_t AliVZERODataDCS::ProcessData(TMap& aliasMap){
114 :
115 : // method to process the data
116 : Bool_t success = kTRUE;
117 :
118 0 : if(!(fAliasNames[0])) Init();
119 :
120 : TObjArray *aliasArr;
121 : AliDCSValue* aValue;
122 :
123 : // starting loop on aliases
124 0 : for(int iAlias=0; iAlias<kNAliases; iAlias++){
125 :
126 0 : aliasArr = (TObjArray*) aliasMap.GetValue(fAliasNames[iAlias].Data());
127 0 : if(!aliasArr){
128 0 : AliError(Form("Alias %s not found!", fAliasNames[iAlias].Data()));
129 : success = kFALSE;
130 0 : continue;
131 : }
132 :
133 : //Introduce(iAlias, aliasArr);
134 :
135 0 : if(aliasArr->GetEntries()<2){
136 0 : AliWarning(Form("Alias %s has just %d entries!",
137 : fAliasNames[iAlias].Data(),aliasArr->GetEntries()));
138 0 : }
139 :
140 0 : TIter iterarray(aliasArr);
141 :
142 0 : if(iAlias<kNHvChannel){ // Treating HV values
143 0 : Int_t nentries = aliasArr->GetEntries();
144 :
145 0 : Double_t *times = new Double_t[nentries];
146 0 : Double_t *values = new Double_t[nentries];
147 :
148 : UInt_t iValue=0;
149 : Float_t variation = 0.0;
150 :
151 0 : while((aValue = (AliDCSValue*) iterarray.Next())) {
152 0 : UInt_t currentTime = aValue->GetTimeStamp();
153 0 : if(currentTime>fCtpEndTime) break;
154 :
155 0 : values[iValue] = aValue->GetFloat();
156 0 : times[iValue] = (Double_t) (currentTime);
157 :
158 0 : if(iValue>0) {
159 0 : if(values[iValue-1]>0.) variation = TMath::Abs(values[iValue]-values[iValue-1])/values[iValue-1];
160 0 : if(variation > 0.01) fDeadChannel[GetOfflineChannel(iAlias)] = kTRUE;
161 : }
162 0 : fHv[iAlias]->Fill(values[iValue]);
163 0 : printf("%s : %s : %f Dead=%d\n",fAliasNames[iAlias].Data(),TTimeStamp(currentTime).AsString(),values[iValue],fDeadChannel[GetOfflineChannel(iAlias)]);
164 0 : iValue++;
165 0 : }
166 0 : CreateGraph(iAlias, aliasArr->GetEntries(), times, values); // fill graphs
167 :
168 : // calculate mean and rms of the first two histos
169 : // and convert index to aliroot channel
170 0 : Int_t iChannel = GetOfflineChannel(iAlias);
171 0 : fMeanHV[iChannel] = fHv[iAlias]->GetMean();
172 0 : fWidthHV[iChannel] = fHv[iAlias]->GetRMS();
173 :
174 0 : delete[] values;
175 0 : delete[] times;
176 0 : } else { // Treating FEE Parameters
177 : AliDCSValue * lastVal = NULL;
178 0 : while((aValue = (AliDCSValue*) iterarray.Next())) lastVal = aValue; // Take only the last value
179 0 : fFEEParameters->Add(new TObjString(fAliasNames[iAlias].Data()),lastVal);
180 : }
181 0 : }
182 :
183 0 : fIsProcessed=kTRUE;
184 :
185 0 : return success;
186 0 : }
187 :
188 : //_____________________________________________________________________________
189 : void AliVZERODataDCS::Init(){
190 :
191 : // initialization of aliases and DCS data
192 :
193 0 : TString sindex;
194 : int iAlias = 0;
195 :
196 0 : for(int iSide = 0; iSide<2 ; iSide++){
197 0 : for(int iRing = 0; iRing<4 ; iRing++){
198 0 : for(int iSector = 0; iSector<8 ; iSector++){
199 0 : if(iSide == 0) fAliasNames[iAlias] = "V00/HV/V0A/SECTOR";
200 0 : else fAliasNames[iAlias] = "V00/HV/V0C/SECTOR";
201 0 : sindex.Form("%d/RING%d",iSector,iRing);
202 0 : fAliasNames[iAlias] += sindex;
203 :
204 0 : fHv[iAlias] = new TH1F(fAliasNames[iAlias].Data(),fAliasNames[iAlias].Data(), 3000, kHvMin, kHvMax);
205 0 : fHv[iAlias]->GetXaxis()->SetTitle("Hv");
206 0 : iAlias++;
207 : }
208 : }
209 : }
210 :
211 : // Time Resolution Parameters
212 :
213 0 : for(int iCIU = 0; iCIU<8 ; iCIU++){
214 0 : fAliasNames[iAlias++] = Form("V00/FEE/CIU%d/TimeResolution",iCIU);
215 0 : fAliasNames[iAlias++] = Form("V00/FEE/CIU%d/WidthResolution",iCIU);
216 : }
217 :
218 : // HPTDC parameters
219 0 : for(int iCIU = 0; iCIU<8 ; iCIU++){
220 0 : fAliasNames[iAlias++] = Form("V00/FEE/CIU%d/MatchWindow",iCIU);
221 0 : fAliasNames[iAlias++] = Form("V00/FEE/CIU%d/SearchWindow",iCIU);
222 0 : fAliasNames[iAlias++] = Form("V00/FEE/CIU%d/TriggerCountOffset",iCIU);
223 0 : fAliasNames[iAlias++] = Form("V00/FEE/CIU%d/RollOver",iCIU);
224 : }
225 :
226 0 : for(int iCIU = 0; iCIU<8 ; iCIU++){
227 0 : for(int iCh=1;iCh<=8;iCh++){
228 0 : fAliasNames[iAlias++] = Form("V00/FEE/CIU%d/DelayHit%d",iCIU,iCh);
229 : }
230 : }
231 :
232 0 : for(int iCIU = 0; iCIU<8 ; iCIU++){
233 0 : for(int iCh=1;iCh<=8;iCh++){
234 0 : fAliasNames[iAlias++] = Form("V00/FEE/CIU%d/DiscriThr%d",iCIU,iCh);
235 : }
236 : }
237 :
238 0 : if(iAlias!=kNAliases)
239 0 : AliError(Form("Number of DCS Aliases defined not correct"));
240 :
241 0 : }
242 :
243 : //_____________________________________________________________________________
244 : void AliVZERODataDCS::Introduce(UInt_t numAlias, const TObjArray* aliasArr)const
245 : {
246 :
247 : // method to introduce new aliases
248 :
249 0 : int entries=aliasArr->GetEntries();
250 0 : AliInfo(Form("************ Alias: %s **********",fAliasNames[numAlias].Data()));
251 0 : AliInfo(Form(" %d DP values collected",entries));
252 :
253 0 : }
254 :
255 : //_____________________________________________________________________________
256 : void AliVZERODataDCS::CreateGraph(int i, int dim, const Double_t *x, const Double_t *y)
257 : {
258 :
259 : // Create graphics
260 :
261 0 : TGraph *gr = new(fGraphs[fGraphs.GetEntriesFast()]) TGraph(dim, x, y);
262 :
263 0 : gr->GetXaxis()->SetTimeDisplay(1);
264 0 : gr->SetTitle(fAliasNames[i].Data());
265 :
266 0 : AliInfo(Form("Array entries: %d",fGraphs.GetEntriesFast()));
267 :
268 0 : }
269 :
270 :
271 : //_____________________________________________________________________________
272 : void AliVZERODataDCS::Draw(const Option_t* /*option*/)
273 : {
274 : // Draw all histos and graphs
275 :
276 0 : if(!fIsProcessed) return;
277 :
278 0 : if(fGraphs.GetEntries()==0) return;
279 :
280 0 : TString canvasName;
281 0 : TCanvas *cHV[8];
282 :
283 0 : for(int iSide = 0 ;iSide<2;iSide++){
284 0 : for(int iRing=0;iRing<4;iRing++){
285 0 : if(iSide == 0) canvasName = "V0A_Ring";
286 0 : else canvasName = "V0C_Ring";
287 0 : canvasName += iRing;
288 0 : int iCanvas = iSide*4 + iRing;
289 0 : cHV[iCanvas] = new TCanvas(canvasName,canvasName);
290 0 : cHV[iCanvas]->Divide(3,3);
291 0 : for(int iSector=0;iSector<8;iSector++){
292 0 : cHV[iCanvas]->cd(iSector+1);
293 0 : int iChannel = iSide*32 + iRing*8 + iSector;
294 0 : ((TGraph*) fGraphs.UncheckedAt(iChannel))->SetMarkerStyle(20);
295 0 : ((TGraph*) fGraphs.UncheckedAt(iChannel))->Draw("ALP");
296 :
297 : }
298 :
299 : }
300 : }
301 :
302 0 : }
303 :
|