]>
Commit | Line | Data |
---|---|---|
32490b1b | 1 | //=================================================================================== |
2 | // This is a macro to analyze TRD/Calib/DCS OCDB objects either | |
3 | // from the grid for a given run number or from a local object. | |
4 | // If you want to analyze data from the grid, please don't forget to | |
5 | // have a valid alien token initialized and the file /tmp/gclient_env_$UID source'd. | |
6 | // | |
7 | // Arguments: | |
8 | // The first argument is the runnumber (this is ignored in case of a local file), | |
9 | // the second is a string that needs to contain either "grid" or "local". Further | |
10 | // you can add either verbose or quiet to that string. If you don't, you'll be asked | |
11 | // for all stuff individually wether you want to see it or not | |
12 | // the thrid argument is the number of the ROC you (eventually) want to dump its data | |
13 | // member of. | |
14 | // The fourth one is the path and name of the local file you might want to look at. | |
15 | // | |
16 | // So the simplest way to use this macro is if you want to check the output of a given | |
17 | // run from the OCDB: | |
ef619721 | 18 | // .x AliTRDcheckConfigv2.C(60111) |
32490b1b | 19 | // |
20 | // An example for quickly checking a local file: | |
ef619721 | 21 | // .x AliTRDcheckConfigv2.C(0, "local quiet", 533, "$ALICE_ROOT/TRD/Calib/DCS/Run0_999999999_v0_s0.root") |
32490b1b | 22 | // |
23 | // Please contact Frederick Kramer in case of problems | |
24 | //=================================================================================== | |
25 | ||
26 | // This is the path one needs to change if the year is no longer 2009 | |
27 | // and the runnumber cannot be found | |
34b0e35e | 28 | //TString alienOcdbPath("alien://folder=/alice/data/2009/OCDB/"); |
29 | TString alienOcdbPath("alien://folder=/alice/data/2010/OCDB/"); | |
32490b1b | 30 | |
31 | // Do not make changes below here unless you know what your doing | |
32 | ||
33 | const Int_t nROC = 540; | |
34 | const Int_t nROB = 8; | |
35 | const Int_t nMCM = 18; | |
36 | const Int_t cArraySize = 1000; | |
37 | ||
38 | Bool_t errors = false; | |
ef619721 | 39 | Int_t calVer = 0; |
32490b1b | 40 | |
41 | Int_t AnalyzeArray(Int_t states[cArraySize], Int_t occur[cArraySize]) { | |
42 | long long srtIndx[cArraySize] = 0; | |
43 | ||
44 | TMath::Sort(cArraySize, occur, srtIndx); | |
45 | ||
46 | Int_t totalSum = 0, subSum = 0, iIndex = 0; | |
47 | for (Int_t i=0; i<cArraySize; i++) totalSum += occur[i]; | |
48 | ||
49 | cout << " The majority ("<< occur[srtIndx[0]] << " of " | |
50 | << totalSum <<") is: " << states[srtIndx[0]] << endl; | |
51 | subSum = occur[srtIndx[0]]; | |
52 | while (totalSum != subSum) { | |
53 | if (++iIndex > 999) { | |
54 | cout << "E : out of bounds." << endl; | |
55 | break; | |
56 | } | |
57 | Printf(" Next: %7d (%d)", states[srtIndx[iIndex]], occur[srtIndx[iIndex]]); | |
58 | subSum += occur[srtIndx[iIndex]]; | |
59 | } | |
60 | return states[srtIndx[0]]; | |
61 | } | |
62 | ||
63 | ||
64 | ||
65 | void FillItemInArray(Int_t states[cArraySize], Int_t occur[cArraySize], Int_t item, Bool_t allowNeg) { | |
66 | for (Int_t iArrPos=0; iArrPos<cArraySize; iArrPos++) { | |
67 | // if allowNeg is set then we change the number indicating that the item ws not set from -1 to -100 | |
68 | // so that small negitive numbers can be sorted too | |
69 | if ((allowNeg && item == -100000) || (!allowNeg && item == -1)) break; // value not set | |
70 | if (states[iArrPos] == item) { | |
71 | occur[iArrPos]++; | |
72 | break; | |
73 | } else if (occur[iArrPos] == 0) { | |
74 | states[iArrPos] = item; | |
75 | occur[iArrPos]++; | |
76 | break; | |
77 | } | |
78 | } | |
79 | } | |
80 | ||
ef619721 | 81 | void GetMajoritys(TObject* calDCSObj) { |
32490b1b | 82 | |
83 | Int_t gsmStates[cArraySize] = {0}, gsmOccur[cArraySize] = {0}; | |
84 | Int_t nimStates[cArraySize] = {0}, nimOccur[cArraySize] = {0}; | |
85 | Int_t nevStates[cArraySize] = {0}, nevOccur[cArraySize] = {0}; | |
86 | Int_t nptStates[cArraySize] = {0}, nptOccur[cArraySize] = {0}; | |
87 | ||
88 | for (Int_t i=0; i<cArraySize; i++) { | |
89 | gsmStates[i] = 0; gsmOccur[i] = 0; | |
90 | nimStates[i] = 0; nimOccur[i] = 0; | |
91 | nevStates[i] = 0; nevOccur[i] = 0; | |
92 | nptStates[i] = 0; nptOccur[i] = 0; | |
93 | } | |
94 | ||
ef619721 | 95 | |
96 | Int_t feeArrSiz = 0; | |
97 | if (calVer == 1) feeArrSiz = ((AliTRDCalDCS*)calDCSObj)->GetFEEArr()->GetSize(); | |
98 | if (calVer == 2) feeArrSiz = ((AliTRDCalDCSv2*)calDCSObj)->GetFEEArr()->GetSize(); | |
99 | ||
100 | for (Int_t i=0; i<nROC && i<feeArrSiz; i++) { | |
101 | TObject* idcsfee; | |
102 | if (calVer == 1) idcsfee = ((AliTRDCalDCS*)calDCSObj)->GetCalDCSFEEObj(i); | |
103 | if (calVer == 2) idcsfee = ((AliTRDCalDCSv2*)calDCSObj)->GetCalDCSFEEObj(i); | |
104 | ||
105 | if (idcsfee == NULL) continue; | |
106 | ||
107 | Int_t sbit = 0; | |
108 | if (calVer == 1) ((AliTRDCalDCSFEE*)idcsfee)->GetStatusBit(); | |
109 | if (calVer == 2) ((AliTRDCalDCSFEEv2*)idcsfee)->GetStatusBit(); | |
110 | ||
111 | if (sbit != 0) continue; | |
112 | ||
32490b1b | 113 | for (Int_t j=0; j<nROB; j++) { |
114 | for (Int_t k=0; k<nMCM; k++) { | |
ef619721 | 115 | Int_t igsm = 0; |
116 | Int_t inim = 0; | |
117 | Int_t inev = 0; | |
118 | Int_t inpt = 0; | |
119 | if (calVer == 1) { | |
120 | igsm = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMGlobalState(j,k); | |
121 | inim = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMStateNI(j,k); | |
122 | inev = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMEventCnt(j,k); | |
123 | inpt = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMPtCnt(j,k); | |
124 | } | |
125 | if (calVer == 2) { | |
126 | igsm = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMGlobalState(j,k); | |
127 | inim = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMStateNI(j,k); | |
128 | inev = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMEventCnt(j,k); | |
129 | inpt = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMPtCnt(j,k); | |
130 | } | |
32490b1b | 131 | |
132 | FillItemInArray(gsmStates, gsmOccur, igsm, false); | |
133 | FillItemInArray(nimStates, nimOccur, inim, false); | |
134 | FillItemInArray(nevStates, nevOccur, inev, false); | |
135 | FillItemInArray(nptStates, nptOccur, inpt, false); | |
136 | } | |
137 | } | |
138 | } | |
139 | ||
140 | cout << "I : Global MCM state statistics:" << endl; | |
141 | AnalyzeArray(gsmStates, gsmOccur); | |
142 | cout << "I : Network interface state statistics:" << endl; | |
143 | AnalyzeArray(nimStates, nimOccur); | |
144 | cout << "I : MCM Event counter reading statistics:" << endl; | |
145 | AnalyzeArray(nevStates, nevOccur); | |
146 | cout << "I : MCM PreTrigger counter reading statistics:" << endl; | |
147 | AnalyzeArray(nptStates, nptOccur); | |
148 | ||
149 | return; | |
150 | } | |
151 | ||
152 | ||
153 | ||
ef619721 | 154 | void GetMajorityDifferences(TObject* calDCSObj, TObject* calDCSObj2) { |
32490b1b | 155 | |
156 | Int_t gsmStates[cArraySize] = {0}, gsmOccur[cArraySize] = {0}; | |
157 | Int_t nimStates[cArraySize] = {0}, nimOccur[cArraySize] = {0}; | |
158 | Int_t nevStates[cArraySize] = {0}, nevOccur[cArraySize] = {0}; | |
159 | Int_t nptStates[cArraySize] = {0}, nptOccur[cArraySize] = {0}; | |
160 | ||
161 | for (Int_t i=0; i<cArraySize; i++) { | |
162 | gsmStates[i] = 0; gsmOccur[i] = 0; | |
163 | nimStates[i] = 0; nimOccur[i] = 0; | |
164 | nevStates[i] = 0; nevOccur[i] = 0; | |
165 | nptStates[i] = 0; nptOccur[i] = 0; | |
166 | } | |
ef619721 | 167 | |
168 | Int_t feeArrSiz1 = 0; | |
169 | Int_t feeArrSiz2 = 0; | |
170 | if (calVer == 1) { | |
171 | feeArrSiz1 = ((AliTRDCalDCS*)calDCSObj)->GetFEEArr()->GetSize(); | |
172 | feeArrSiz2 = ((AliTRDCalDCS*)calDCSObj2)->GetFEEArr()->GetSize(); | |
173 | } | |
174 | if (calVer == 2) { | |
175 | feeArrSiz1 = ((AliTRDCalDCSv2*)calDCSObj)->GetFEEArr()->GetSize(); | |
176 | feeArrSiz2 = ((AliTRDCalDCSv2*)calDCSObj2)->GetFEEArr()->GetSize(); | |
177 | } | |
178 | ||
179 | for (Int_t i=0; i<nROC && i<feeArrSiz1 && i<feeArrSiz2; i++) { | |
180 | TObject* idcsfee; | |
181 | TObject* idcsfee2; | |
182 | if (calVer == 1) { | |
183 | idcsfee = ((AliTRDCalDCS*)calDCSObj)->GetCalDCSFEEObj(i); | |
184 | idcsfee2 = ((AliTRDCalDCS*)calDCSObj2)->GetCalDCSFEEObj(i); | |
185 | } | |
186 | if (calVer == 2) { | |
187 | idcsfee = ((AliTRDCalDCSv2*)calDCSObj)->GetCalDCSFEEObj(i); | |
188 | idcsfee2 = ((AliTRDCalDCSv2*)calDCSObj2)->GetCalDCSFEEObj(i); | |
189 | } | |
190 | Int_t sbit = 0; | |
191 | if (calVer == 1) ((AliTRDCalDCSFEE*)idcsfee)->GetStatusBit(); | |
192 | if (calVer == 1) ((AliTRDCalDCSFEEv2*)idcsfee)->GetStatusBit(); | |
193 | if ((idcsfee == NULL) || (idcsfee2 == NULL) || (sbit != 0) /*|| (idcsfee2->GetStatusBit() != 0)*/) continue; | |
32490b1b | 194 | for (Int_t j=0; j<nROB; j++) { |
195 | for (Int_t k=0; k<nMCM; k++) { | |
ef619721 | 196 | Int_t igsm, inim, inev, inpt, igsm1, inim1, inev1, inpt1, igsm2, inim2, inev2, inpt2; |
197 | if (calVer == 1) { | |
198 | igsm1 = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMGlobalState(j,k); | |
199 | inim1 = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMStateNI(j,k); | |
200 | inev1 = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMEventCnt(j,k); | |
201 | inpt1 = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMPtCnt(j,k); | |
202 | igsm2 = ((AliTRDCalDCSFEE*)idcsfee2)->GetMCMGlobalState(j,k); | |
203 | inim2 = ((AliTRDCalDCSFEE*)idcsfee2)->GetMCMStateNI(j,k); | |
204 | inev2 = ((AliTRDCalDCSFEE*)idcsfee2)->GetMCMEventCnt(j,k); | |
205 | inpt2 = ((AliTRDCalDCSFEE*)idcsfee2)->GetMCMPtCnt(j,k); | |
206 | } | |
207 | if (calVer == 2) { | |
208 | igsm1 = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMGlobalState(j,k); | |
209 | inim1 = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMStateNI(j,k); | |
210 | inev1 = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMEventCnt(j,k); | |
211 | inpt1 = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMPtCnt(j,k); | |
212 | igsm2 = ((AliTRDCalDCSFEEv2*)idcsfee2)->GetMCMGlobalState(j,k); | |
213 | inim2 = ((AliTRDCalDCSFEEv2*)idcsfee2)->GetMCMStateNI(j,k); | |
214 | inev2 = ((AliTRDCalDCSFEEv2*)idcsfee2)->GetMCMEventCnt(j,k); | |
215 | inpt2 = ((AliTRDCalDCSFEEv2*)idcsfee2)->GetMCMPtCnt(j,k); | |
216 | } | |
217 | ||
218 | igsm = igsm1 - igsm2; | |
219 | inim = inim1 - inim2; | |
220 | inev = inev2 - inev1; | |
221 | inpt = inpt2 - inpt1; | |
32490b1b | 222 | |
223 | // if they were set to -1, it means they were not actauuly set | |
224 | // change -1 to -100 to mean they werent set since the above | |
225 | // can give negitives | |
ef619721 | 226 | if (igsm1 == -1 && igsm == 0) igsm =-100000; |
227 | if (inim1 == -1 && inim == 0) inim =-100000; | |
228 | if (inev1 == -1 && inev == 0) inev =-100000; | |
229 | if (inpt1 == -1 && inpt == 0) inpt =-100000; | |
32490b1b | 230 | |
231 | FillItemInArray(gsmStates, gsmOccur, igsm, true); | |
232 | FillItemInArray(nimStates, nimOccur, inim, true); | |
233 | FillItemInArray(nevStates, nevOccur, inev, true); | |
234 | FillItemInArray(nptStates, nptOccur, inpt, true); | |
235 | } | |
236 | } | |
237 | } | |
238 | ||
239 | cout << "I : Global MCM state difference statistics:" << endl; | |
240 | AnalyzeArray(gsmStates, gsmOccur); | |
241 | cout << "I : Network interface state difference statistics:" << endl; | |
242 | AnalyzeArray(nimStates, nimOccur); | |
243 | cout << "I : MCM Event counter difference statistics:" << endl; | |
244 | if (AnalyzeArray(nevStates, nevOccur) < 1) { | |
245 | cout << "E : There should have been some events recorded, but there weren't" << endl; | |
246 | errors = true; | |
247 | } | |
248 | cout << "I : MCM PreTrigger counter difference statistics:" << endl; | |
249 | if (AnalyzeArray(nptStates, nptOccur) < 1) { | |
250 | cout << "E : There should have been some events recorded, but there weren't" << endl; | |
251 | errors = true; | |
252 | } | |
253 | ||
254 | return; | |
255 | } | |
256 | ||
257 | ||
aa6410b5 | 258 | void AliTRDcheckConfig(Int_t runNr=0, char *pathfile="nopathgiven"){ |
32490b1b | 259 | |
260 | AliCDBEntry *entry=0; | |
261 | TString pathfilets(pathfile); | |
262 | ||
263 | // get the source | |
264 | if(pathfilets.Contains("nopathgiven")) { | |
265 | cout << "I : Accessing grid storage for run number " << runNr << endl; | |
266 | cout << "I : Get CDBManager instance." << endl; | |
267 | AliCDBManager *man = AliCDBManager::Instance(); | |
268 | cout << "I : SetDefaultStorage." << endl; | |
269 | man->SetDefaultStorage(alienOcdbPath); | |
270 | cout << "I : Get OCDB Entry." << endl; | |
271 | entry = man->Get("TRD/Calib/DCS", runNr); | |
272 | if (entry == NULL) { | |
273 | cout << endl << "ERROR: Unable to get the AliTRDCalDCS object from the OCDB for run number " << runNr << endl << endl; | |
ef619721 | 274 | cout << "If the run number is correct, it could be that the year is no longer 2010 and" << endl; |
32490b1b | 275 | cout << "the path where the objects is stored has changed, check the top of this macro " << endl; |
276 | cout << "to change the path." << endl; | |
277 | return; | |
278 | } | |
279 | } else { | |
280 | cout << "I : Accessing local storage" << endl; | |
281 | TFile *f = new TFile(pathfile); | |
282 | if(f != NULL) { | |
283 | entry = (AliCDBEntry*) f->Get("AliCDBEntry"); | |
284 | } | |
285 | else { | |
286 | cout << "E : Cannot open file" << endl; | |
287 | return; | |
288 | } | |
289 | } | |
290 | ||
291 | TObject *objectCDB = (TObject*)entry->GetObject(); | |
292 | if (objectCDB->IsA()->InheritsFrom("TObjArray")) { | |
293 | TObjArray *objArrayCDB = (TObjArray*)entry->GetObject(); | |
294 | } | |
295 | ||
ef619721 | 296 | if (!strcmp(objArrayCDB->At(0)->ClassName(),"AliTRDCalDCS")) calVer = 1; |
297 | if (!strcmp(objArrayCDB->At(0)->ClassName(),"AliTRDCalDCSv2")) calVer = 2; | |
32490b1b | 298 | |
299 | Bool_t sorandeor = true; | |
ef619721 | 300 | TObject *caldcs = objArrayCDB->At(0); |
301 | TObject *caldcs2 = objArrayCDB->At(1); | |
32490b1b | 302 | |
303 | if (caldcs == NULL && caldcs2 == NULL) { | |
ef619721 | 304 | cout << "E : Neither the start or end of run files were in the root file."; |
32490b1b | 305 | return; |
306 | } else if (caldcs != NULL && caldcs2 == NULL) { | |
307 | cout << "E : The EOR file was not in the root file."; | |
308 | errors = true; | |
309 | sorandeor = false; | |
310 | } else if (caldcs == NULL && caldcs2 != NULL) { | |
311 | cout << "E : The SOR file was not in the root file."; | |
312 | errors = true; | |
313 | sorandeor = false; | |
314 | caldcs = caldcs2; | |
315 | } | |
316 | ||
317 | cout << endl << "============ Non responding ROC Summary: ============" << endl; | |
318 | TString bitfivestr = " ROCs with status bit 5. These havn't responded to communication\nattempts over DIM. Most probably they just were off this is ok.\n DCS IDs: "; | |
319 | Int_t lengthfive = bitfivestr.Length(); | |
320 | TString bitfourstr = " ROCs with status bit 4! BAD! This might be due to a communication problem between fxsproxy and the feeserver(s) \n DCS IDs: "; | |
321 | Int_t lengthfour = bitfourstr.Length(); | |
322 | TString bitthreestr = " ROCs with status bit 3! BAD! data from fee server was old or corrupt.\n DCS IDs: "; | |
323 | Int_t lengththree = bitthreestr.Length(); | |
324 | TString bittwostr = " ROCs with status bit 2. These have been in states in which they cannot be read out, e.g. Standby.\n DCS IDs: "; | |
325 | Int_t lengthtwo = bittwostr.Length(); | |
326 | TString bitonestr = " ROCs with status bit 1! BAD! This means the chamber(s) didn't respont even though is should have been in a good state.\n DCS IDs: "; | |
327 | Int_t lengthone = bitonestr.Length(); | |
328 | ||
ef619721 | 329 | Int_t feeArrSiz = 0; |
330 | if (calVer == 1) feeArrSiz = ((AliTRDCalDCS*)caldcs)->GetFEEArr()->GetSize(); | |
331 | if (calVer == 2) feeArrSiz = ((AliTRDCalDCSv2*)caldcs)->GetFEEArr()->GetSize(); | |
332 | ||
32490b1b | 333 | Int_t nSB1=0, nSB2=0, nSB3=0, nSB4=0, nSB5=0, nTot=0; |
ef619721 | 334 | for (Int_t i=0; i<nROC && i<feeArrSiz; i++) { |
335 | TObject* idcsfee; | |
336 | if (calVer == 1) idcsfee = ((AliTRDCalDCS*)caldcs)->GetCalDCSFEEObj(i); | |
337 | if (calVer == 2) idcsfee = ((AliTRDCalDCSv2*)caldcs)->GetCalDCSFEEObj(i); | |
32490b1b | 338 | if (idcsfee != NULL) { |
ef619721 | 339 | Int_t sb; |
340 | if (calVer == 1) sb = ((AliTRDCalDCSFEE*)idcsfee)->GetStatusBit(); | |
341 | if (calVer == 2) sb = ((AliTRDCalDCSFEEv2*)idcsfee)->GetStatusBit(); | |
32490b1b | 342 | if (sb == 5) { bitfivestr += i; bitfivestr += " "; nSB5++; } |
343 | if (sb == 4) { bitfourstr += i; bitfourstr += " "; nSB4++; errors = true; } | |
344 | if (sb == 3) { bitthreestr += i; bitthreestr += " "; nSB3++; errors = true; } | |
345 | if (sb == 2) { bittwostr += i; bittwostr += " "; nSB2++; } | |
346 | if (sb == 1) { bitonestr += i; bitonestr += " "; nSB1++; errors = true; } | |
347 | nTot += 1; | |
348 | } | |
349 | } | |
350 | ||
351 | if (lengthfive < bitfivestr.Length()) cout << nSB5 << bitfivestr.Data() << endl << endl; | |
352 | if (lengthfour < bitfourstr.Length()) cout << nSB4 << bitfourstr.Data() << endl << endl; | |
353 | if (lengththree < bitthreestr.Length()) cout << nSB3 << bitthreestr.Data() << endl << endl; | |
354 | if (lengthtwo < bittwostr.Length()) cout << nSB2 << bittwostr.Data() << endl << endl; | |
355 | if (lengthone < bitonestr.Length()) cout << nSB1 << bitonestr.Data() << endl << endl; | |
356 | ||
357 | cout << "The remaining " << nTot-(nSB1+nSB2+nSB3+nSB4+nSB5) << " ROCs responded correctly in the start of run."<<endl; | |
358 | ||
359 | Int_t nChanged=0, nTot=0; | |
ef619721 | 360 | for (Int_t i=0; i<nROC && i<feeArrSiz; i++) { |
361 | TObject* idcsfee; | |
362 | TObject* idcsfee2; | |
363 | if (calVer == 1) { | |
364 | idcsfee = ((AliTRDCalDCS*)caldcs)->GetCalDCSFEEObj(i); | |
365 | idcsfee2 = ((AliTRDCalDCS*)caldcs2)->GetCalDCSFEEObj(i); | |
366 | } | |
367 | if (calVer == 2) { | |
368 | idcsfee = ((AliTRDCalDCSv2*)caldcs)->GetCalDCSFEEObj(i); | |
369 | idcsfee2 = ((AliTRDCalDCSv2*)caldcs2)->GetCalDCSFEEObj(i); | |
370 | } | |
32490b1b | 371 | if (idcsfee != NULL && idcsfee2 != NULL) { |
ef619721 | 372 | Int_t sbd1 = 0; |
373 | Int_t sbd2 = 0; | |
374 | if (calVer == 1) { | |
375 | sbd1 = ((AliTRDCalDCSFEE*)idcsfee)->GetStatusBit(); | |
376 | sbd2 = ((AliTRDCalDCSFEE*)idcsfee2)->GetStatusBit(); | |
377 | } | |
378 | if (calVer == 2) { | |
379 | sbd1 = ((AliTRDCalDCSFEEv2*)idcsfee)->GetStatusBit(); | |
380 | sbd2 = ((AliTRDCalDCSFEEv2*)idcsfee2)->GetStatusBit(); | |
381 | } | |
382 | Int_t sbd = sbd1 - sbd2; | |
32490b1b | 383 | if (sbd != 0) { |
ef619721 | 384 | cout << "ROC " << i << " changed from state " << sbd1 << " at start of the run to " << sbd2 << " at the end of the run." << endl; |
385 | cout << "ROC " << i << " changed from state " << sbd1 << " at start of the run to " << sbd2 << " at the end of the run." << endl; | |
32490b1b | 386 | nChanged++; |
387 | } | |
388 | nTot += 1; | |
389 | } | |
390 | } | |
391 | ||
392 | if (nChanged == 0) { | |
393 | cout << "No ROCs changed state between the start and end of the run" << endl; | |
394 | } else { | |
395 | cout << "E : " << nChanged << " out of " << nTot << " ROCs changed state during the run" << endl; | |
396 | errors = true; | |
397 | } | |
398 | ||
399 | cout << endl << "============ Statistics from RSTATE: ============" << endl; | |
400 | cout<<"I : The majority entry is given as well as all other values," << endl; | |
401 | cout<<" sorted according to their occurrence." << endl << endl; | |
402 | GetMajoritys(caldcs); | |
403 | if (sorandeor) GetMajorityDifferences(caldcs,caldcs2); | |
404 | ||
405 | cout << endl << "============ Global Configuraton: ============" << endl; | |
406 | cout<<"I : Anything not listed is not set, mixed numbers are indicated with a" << endl; | |
407 | cout<<" value of -2 and strings are set to 'mixed' if they're mixed." << endl << endl; | |
ef619721 | 408 | |
409 | Int_t gtb, gct, gsh, gtc, gsz, gfw, gfs, gfl, gsn; | |
410 | TString gcv, gcn, gft, grp, gtp, gtm, gtd, gts, gao; | |
411 | ||
412 | if (calVer == 1) { | |
413 | gtb = ((AliTRDCalDCS*)caldcs)->GetGlobalNumberOfTimeBins(); | |
414 | gct = ((AliTRDCalDCS*)caldcs)->GetGlobalConfigTag(); | |
415 | gsh = ((AliTRDCalDCS*)caldcs)->GetGlobalSingleHitThres(); | |
416 | gtc = ((AliTRDCalDCS*)caldcs)->GetGlobalThreePadClustThres(); | |
417 | gsz = ((AliTRDCalDCS*)caldcs)->GetGlobalSelectiveNoZS(); | |
418 | gfw = ((AliTRDCalDCS*)caldcs)->GetGlobalTCFilterWeight(); | |
419 | gfs = ((AliTRDCalDCS*)caldcs)->GetGlobalTCFilterShortDecPar(); | |
420 | gfl = ((AliTRDCalDCS*)caldcs)->GetGlobalTCFilterLongDecPar(); | |
421 | gsn = ((AliTRDCalDCS*)caldcs)->GetGlobalModeFastStatNoise(); | |
422 | gcv = ((AliTRDCalDCS*)caldcs)->GetGlobalConfigVersion(); | |
423 | gcn = ((AliTRDCalDCS*)caldcs)->GetGlobalConfigName(); | |
424 | gft = ((AliTRDCalDCS*)caldcs)->GetGlobalFilterType(); | |
425 | grp = ((AliTRDCalDCS*)caldcs)->GetGlobalReadoutParam(); | |
426 | gtp = ((AliTRDCalDCS*)caldcs)->GetGlobalTestPattern(); | |
427 | gtm = ((AliTRDCalDCS*)caldcs)->GetGlobalTrackletMode(); | |
428 | gtd = ((AliTRDCalDCS*)caldcs)->GetGlobalTrackletDef(); | |
429 | gts = ((AliTRDCalDCS*)caldcs)->GetGlobalTriggerSetup(); | |
430 | gao = ((AliTRDCalDCS*)caldcs)->GetGlobalAddOptions(); | |
431 | } | |
432 | if (calVer == 2) { | |
433 | gtb = ((AliTRDCalDCSv2*)caldcs)->GetGlobalNumberOfTimeBins(); | |
434 | gct = ((AliTRDCalDCSv2*)caldcs)->GetGlobalConfigTag(); | |
435 | gsh = ((AliTRDCalDCSv2*)caldcs)->GetGlobalSingleHitThres(); | |
436 | gtc = ((AliTRDCalDCSv2*)caldcs)->GetGlobalThreePadClustThres(); | |
437 | gsz = ((AliTRDCalDCSv2*)caldcs)->GetGlobalSelectiveNoZS(); | |
438 | gfw = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTCFilterWeight(); | |
439 | gfs = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTCFilterShortDecPar(); | |
440 | gfl = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTCFilterLongDecPar(); | |
441 | gsn = ((AliTRDCalDCSv2*)caldcs)->GetGlobalModeFastStatNoise(); | |
442 | gcv = ((AliTRDCalDCSv2*)caldcs)->GetGlobalConfigVersion(); | |
443 | gcn = ((AliTRDCalDCSv2*)caldcs)->GetGlobalConfigName(); | |
444 | gft = ((AliTRDCalDCSv2*)caldcs)->GetGlobalFilterType(); | |
445 | grp = ((AliTRDCalDCSv2*)caldcs)->GetGlobalReadoutParam(); | |
446 | gtp = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTestPattern(); | |
447 | gtm = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTrackletMode(); | |
448 | gtd = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTrackletDef(); | |
449 | gts = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTriggerSetup(); | |
450 | gao = ((AliTRDCalDCSv2*)caldcs)->GetGlobalAddOptions(); | |
451 | } | |
452 | ||
453 | ||
454 | if (gtb != -1) cout<<"Global number of time bins.........................: "<< gtb << endl; | |
455 | if (gct != -1) cout<<"Global configuration tag...........................: "<< gct << endl; | |
456 | if (gsh != -1) cout<<"Global single hit threshold........................: "<< gsh << endl; | |
457 | if (gtc != -1) cout<<"Global three pad cluster threshold.................: "<< gtc << endl; | |
458 | if (gsz != -1) cout<<"Global selective ZS (every i'th event).............: "<< gsz << endl; | |
459 | if (gfw != -1) cout<<"Global tail cancellation filter weight.............: "<< gfs << endl; | |
460 | if (gfs != -1) cout<<"Global tail cancellat. filter short decay parameter: "<< gfs << endl; | |
461 | if (gfl != -1) cout<<"Global tail cancellation filt. long decay parameter: "<< gsn << endl; | |
462 | if (gsn != -1) cout<<"Global fast statistics mode?.......................: "<< gsn << endl; | |
463 | if (gcv != "") cout<<"Global configuration tag version...................: "<< gcv << endl; | |
464 | if (gcn != "") cout<<"Global configuration tag name......................: "<< gcn << endl; | |
465 | if (gft != "") cout<<"Global filter type.................................: "<< gft << endl; | |
466 | if (grp != "") cout<<"Global readout parameter...........................: "<< grp << endl; | |
467 | if (gtp != "") cout<<"Global test pattern................................: "<< gtp << endl; | |
468 | if (gtm != "") cout<<"Global tracklet mode...............................: "<< gtm << endl; | |
469 | if (gtd != "") cout<<"Global tracklet definition.........................: "<< gtd << endl; | |
470 | if (gts != "") cout<<"Global trigger setup...............................: "<< gts << endl; | |
471 | if (gao != "") cout<<"Global additional options..........................: "<< gao << endl; | |
32490b1b | 472 | |
473 | cout << endl << "============ Error Summary: ============" << endl; | |
474 | if (errors) { | |
475 | cout<<" I noticed some errors, please see above for the specifics." << endl; | |
476 | } else { | |
477 | cout<<" I didn't notice any errors, but that doesn't mean there weren't any!" << endl; | |
478 | } | |
479 | ||
480 | ||
481 | } |