]>
Commit | Line | Data |
---|---|---|
eaceaf51 | 1 | //===================================================================================\r\r |
2 | // This is a macro to analyze TRD/Calib/DCS OCDB objects either\r\r | |
3 | // from the grid for a given run number or from a local object.\r\r | |
4 | // If you want to analyze data from the grid, please don't forget to\r\r | |
5 | // have a valid alien token initialized and the file /tmp/gclient_env_$UID source'd.\r\r | |
6 | //\r\r | |
7 | // Arguments:\r\r | |
8 | // The first argument is the runnumber (this is ignored in case of a local file),\r\r | |
9 | // the second is a string that needs to contain either "grid" or "local". Further\r\r | |
10 | // you can add either verbose or quiet to that string. If you don't, you'll be asked\r\r | |
11 | // for all stuff individually wether you want to see it or not\r\r | |
12 | // the thrid argument is the number of the ROC you (eventually) want to dump its data\r\r | |
13 | // member of.\r\r | |
14 | // The fourth one is the path and name of the local file you might want to look at.\r\r | |
15 | //\r\r | |
16 | // So the simplest way to use this macro is if you want to check the output of a given\r\r | |
17 | // run from the OCDB:\r\r | |
18 | // .x AliTRDcheckConfig.C(60111)\r\r | |
19 | //\r\r | |
20 | // An example for quickly checking a local file:\r\r | |
21 | // .x AliTRDcheckConfig.C(0, "local quiet", 533, "$ALICE_ROOT/TRD/Calib/DCS/Run0_999999999_v0_s0.root")\r\r | |
22 | //\r\r | |
23 | // Please contact Frederick Kramer in case of problems\r\r | |
24 | //===================================================================================\r\r | |
25 | \r\r | |
26 | \r\r | |
27 | const Int_t nROC = 540;\r\r | |
28 | const Int_t nROB = 8;\r\r | |
29 | const Int_t nMCM = 18;\r\r | |
30 | const Int_t cArraySize = 1000;\r\r | |
31 | \r\r | |
32 | \r\r | |
33 | \r\r | |
34 | void AnalyzeArray(Int_t states[cArraySize], Int_t occur[cArraySize]) {\r\r | |
35 | long long srtIndx[cArraySize] = 0;\r\r | |
36 | \r\r | |
37 | TMath::Sort(cArraySize, occur, srtIndx);\r\r | |
38 | \r\r | |
39 | Int_t totalSum = 0, subSum = 0, iIndex = 0;\r\r | |
40 | for (Int_t i=0; i<cArraySize; i++) totalSum += occur[i];\r\r | |
41 | \r\r | |
42 | cout << " The majority ("<< occur[srtIndx[0]] << " of " \r\r | |
43 | << totalSum <<") is: " << states[srtIndx[0]] << endl;\r\r | |
44 | subSum = occur[srtIndx[0]];\r\r | |
45 | while (totalSum != subSum) {\r\r | |
46 | if (++iIndex > 999) {\r\r | |
47 | cout << "E : out of bounds." << endl;\r\r | |
48 | break;\r\r | |
49 | }\r\r | |
50 | Printf(" Next: %7d (%d)", states[srtIndx[iIndex]], occur[srtIndx[iIndex]]);\r\r | |
51 | subSum += occur[srtIndx[iIndex]];\r\r | |
52 | }\r\r | |
53 | }\r\r | |
54 | \r\r | |
55 | \r\r | |
56 | \r\r | |
57 | void FillItemInArray(Int_t states[cArraySize], Int_t occur[cArraySize], Int_t item) {\r\r | |
58 | for (Int_t iArrPos=0; iArrPos<cArraySize; iArrPos++) {\r\r | |
59 | if (item == -1) break; // value not set\r\r | |
60 | if (states[iArrPos] == item) {\r\r | |
61 | occur[iArrPos]++;\r\r | |
62 | break;\r\r | |
63 | } else if (occur[iArrPos] == 0) {\r\r | |
64 | states[iArrPos] = item;\r\r | |
65 | occur[iArrPos]++;\r\r | |
66 | break;\r\r | |
67 | }\r\r | |
68 | }\r\r | |
69 | }\r\r | |
70 | \r\r | |
71 | \r\r | |
72 | \r\r | |
73 | void GetMajoritys(AliTRDCalDCS* calDCSObj) {\r\r | |
74 | \r\r | |
75 | Int_t gsmStates[cArraySize] = {0}, gsmOccur[cArraySize] = {0};\r\r | |
76 | Int_t nimStates[cArraySize] = {0}, nimOccur[cArraySize] = {0};\r\r | |
77 | Int_t nevStates[cArraySize] = {0}, nevOccur[cArraySize] = {0};\r\r | |
78 | Int_t nptStates[cArraySize] = {0}, nptOccur[cArraySize] = {0};\r\r | |
79 | \r\r | |
80 | for (Int_t i=0; i<cArraySize; i++) {\r\r | |
81 | gsmStates[i] = 0;\r\r | |
82 | gsmOccur[i] = 0;\r\r | |
83 | nimStates[i] = 0;\r\r | |
84 | nimOccur[i] = 0;\r\r | |
85 | nevStates[i] = 0;\r\r | |
86 | nevOccur[i] = 0;\r\r | |
87 | nptStates[i] = 0;\r\r | |
88 | nptOccur[i] = 0; \r\r | |
89 | }\r\r | |
90 | \r\r | |
91 | for (Int_t i=0; i<nROC; i++) {\r\r | |
92 | AliTRDCalDCSFEE *idcsfee = calDCSObj->GetCalDCSFEEObj(i);\r\r | |
93 | if ((idcsfee == NULL) || (idcsfee->GetStatusBit() != 0)) continue;\r\r | |
94 | for (Int_t j=0; j<nROB; j++) {\r\r | |
95 | for (Int_t k=0; k<nMCM; k++) {\r\r | |
96 | Int_t igsm = idcsfee->GetMCMGlobalState(j,k);\r\r | |
97 | Int_t inim = idcsfee->GetMCMStateNI(j,k);\r\r | |
98 | Int_t inev = idcsfee->GetMCMEventCnt(j,k);\r\r | |
99 | Int_t inpt = idcsfee->GetMCMPtCnt(j,k);\r\r | |
100 | \r\r | |
101 | FillItemInArray(gsmStates, gsmOccur, igsm); \r\r | |
102 | FillItemInArray(nimStates, nimOccur, inim); \r\r | |
103 | FillItemInArray(nevStates, nevOccur, inev); \r\r | |
104 | FillItemInArray(nptStates, nptOccur, inpt); \r\r | |
105 | }\r\r | |
106 | }\r\r | |
107 | }\r\r | |
108 | \r\r | |
109 | cout << "I : Global MCM state statistics:" << endl;\r\r | |
110 | AnalyzeArray(gsmStates, gsmOccur);\r\r | |
111 | cout << "I : Network interface state statistics:" << endl;\r\r | |
112 | AnalyzeArray(nimStates, nimOccur);\r\r | |
113 | cout << "I : MCM Event counter reading statistics:" << endl;\r\r | |
114 | AnalyzeArray(nevStates, nevOccur);\r\r | |
115 | cout << "I : MCM PreTrigger counter reading statistics:" << endl;\r\r | |
116 | AnalyzeArray(nptStates, nptOccur);\r\r | |
117 | \r\r | |
118 | return;\r\r | |
119 | }\r\r | |
120 | \r\r | |
121 | \r\r | |
122 | void AliTRDcheckConfig(Int_t runNr=0, TString source="grid", Int_t dumpid=0, char *pathfile="nopathgiven"){\r\r | |
123 | \r\r | |
124 | AliCDBEntry *entry=0;\r\r | |
125 | \r\r | |
126 | // get the source\r\r | |
127 | if(source.Contains("grid")) {\r\r | |
128 | cout << "I : Accessing grid storage for run number " << runNr << endl;\r\r | |
129 | cout << "I : Get CDBManager instance." << endl;\r\r | |
130 | AliCDBManager *man = AliCDBManager::Instance();\r\r | |
131 | cout << "I : SetDefaultStorage." << endl;\r\r | |
132 | man->SetDefaultStorage("alien://folder=/alice/data/2008/LHC08d/OCDB/");\r\r | |
133 | cout << "I : Get OCDB Entry." << endl;\r\r | |
134 | entry = man->Get("TRD/Calib/DCSCONFIG", runNr);\r\r | |
135 | } else if(source.Contains("local")) {\r\r | |
136 | cout << "I : Accessing local storage" << endl;\r\r | |
137 | TFile *f = new TFile(pathfile);\r\r | |
138 | if(f != NULL) {\r\r | |
139 | entry = (AliCDBEntry*) f->Get("AliCDBEntry");\r\r | |
140 | }\r\r | |
141 | else {\r\r | |
142 | cout << "E : Cannot open file" << endl;\r\r | |
143 | return;\r\r | |
144 | }\r\r | |
145 | } else {\r\r | |
146 | cout << "E : Please specify a correct source (grid/local)" << endl;\r\r | |
147 | return;\r\r | |
148 | }\r\r | |
149 | \r\r | |
150 | \r\r | |
151 | Int_t dump[20], contSelect=-1;\r\r | |
152 | for(Int_t i=0; i<20; i++) dump[i]=0;\r\r | |
153 | if(!source.Contains("quiet") && !source.Contains("verbose")) {\r\r | |
154 | cout << "Q : Do you want to dump the AliCDBEntry? (1/0) ";\r\r | |
155 | cin >> dump[0];\r\r | |
156 | cout << "Q : Do you want to dump the AliTRDCalDCS Object? (1/0) ";\r\r | |
157 | cin >> dump[1];\r\r | |
158 | cout << "Q : Do you want to dump the AliTRDCalDCSFEE Object? (1/0) ";\r\r | |
159 | cin >> dump[2];\r\r | |
160 | if(dump[2] == 1) {\r\r | |
161 | cout << "Q : Which Detector ID? (0..540) ";\r\r | |
162 | cin >> dumpid;\r\r | |
163 | }\r\r | |
164 | cout << "Q : Do you want to get a status bit summary? (1/0) ";\r\r | |
165 | cin >> dump[3];\r\r | |
166 | cout << "Q : Do you want to get a status bit histogram? (1/0) ";\r\r | |
167 | cin >> dump[4];\r\r | |
168 | cout << "Q : Do you want to get a check on data integrity? (1/0) ";\r\r | |
169 | cin >> dump[5];\r\r | |
170 | }\r\r | |
171 | if(source.Contains("verbose")) for(Int_t i=0; i<20; i++) dump[i]=1;\r\r | |
172 | \r\r | |
173 | // check version\r\r | |
174 | //TObject *objectCDB = (TObject*)entry->GetObject();\r\r | |
175 | TObject *objectCDB = (TObject*)entry->GetObject();\r\r | |
176 | if (objectCDB->IsA()->InheritsFrom("TObjArray")) {\r\r | |
177 | cout << "I : It seems like you are checking a file containing both SOR and EOR informations." << endl;\r\r | |
178 | cout << "Q : Do you want to check SOR (0), EOR (1) or their differences (2)? ";\r\r | |
179 | cin >> contSelect;\r\r | |
180 | TObjArray *objArrayCDB = (TObjArray*)entry->GetObject();\r\r | |
181 | }\r\r | |
182 | \r\r | |
183 | \r\r | |
184 | \r\r | |
185 | // the AliCDBEntry\r\r | |
186 | if(dump[0] > 0) {\r\r | |
187 | cout << endl << "============ Dumping the AliCDBEntry ============" << endl;\r\r | |
188 | entry->Dump();\r\r | |
189 | }\r\r | |
190 | \r\r | |
191 | \r\r | |
192 | // the CalDCS object\r\r | |
193 | AliTRDCalDCS *caldcs;\r\r | |
194 | switch(contSelect) {\r\r | |
195 | case -1:\r\r | |
196 | caldcs = (AliTRDCalDCS*) entry->GetObject();\r\r | |
197 | break; \r\r | |
198 | case 0:\r\r | |
199 | caldcs = (AliTRDCalDCS*) objArrayCDB->At(0);\r\r | |
200 | break; \r\r | |
201 | case 1:\r\r | |
202 | caldcs = (AliTRDCalDCS*) objArrayCDB->At(1);\r\r | |
203 | break; \r\r | |
204 | case 2:\r\r | |
205 | cout << "I : Sorry, not implemented yet. Stop." << endl;\r\r | |
206 | return;\r\r | |
207 | break; \r\r | |
208 | default:\r\r | |
209 | cout << "E : Invalid key. Stop." << endl;\r\r | |
210 | return;\r\r | |
211 | }\r\r | |
212 | \r\r | |
213 | \r\r | |
214 | \r\r | |
215 | if(dump[1] > 0) {\r\r | |
216 | cout << endl << "============ Dumping the AliTRDCalDCS Object ============" << endl;\r\r | |
217 | caldcs->Dump();\r\r | |
218 | }\r\r | |
219 | \r\r | |
220 | // one CalDCSFEE object\r\r | |
221 | if(dump[2] > 0) {\r\r | |
222 | AliTRDCalDCSFEE *dcsfee;\r\r | |
223 | dcsfee = caldcs->GetCalDCSFEEObj(dumpid);\r\r | |
224 | cout <<endl<< "============ Dumping the AliTRDCalDCSFEE Object Nr. " << dumpid << " ============" << endl;\r\r | |
225 | if (dcsfee != NULL) {\r\r | |
226 | dcsfee->Dump();\r\r | |
227 | }\r\r | |
228 | }\r\r | |
229 | \r\r | |
230 | // fill histograms\r\r | |
231 | TH1F *hStatusBits = new TH1F("hStatusBits", "DCS FEE Status Bits", 10, -.5, 9.5);\r\r | |
232 | hStatusBits->SetFillColor(38);\r\r | |
233 | hStatusBits->GetXaxis()->SetTitle("Status Bit Value");\r\r | |
234 | hStatusBits->GetYaxis()->SetTitle("Occurrence");\r\r | |
235 | \r\r | |
236 | // get a status bit summary\r\r | |
237 | if(dump[3] > 0) {\r\r | |
238 | cout << endl << "============ Status Bit Summary: ============" << endl;\r\r | |
239 | TString bitfivestr = " ROCs with status bit 5. These have been not even responding to any DIM communication attempt. Most probably they just were off.\n DCS IDs: ";\r\r | |
240 | Int_t lengthfive = bitfivestr.Length();\r\r | |
241 | 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: ";\r\r | |
242 | Int_t lengthfour = bitfourstr.Length();\r\r | |
243 | TString bitthreestr = " ROCs with status bit 3!!! VERY BAD! This might be due to a serious communication error between the fxsproxy program and the FEEservers.\n DCS IDs: ";\r\r | |
244 | Int_t lengththree = bitthreestr.Length();\r\r | |
245 | 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: ";\r\r | |
246 | Int_t lengthtwo = bittwostr.Length();\r\r | |
247 | 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: ";\r\r | |
248 | Int_t lengthone = bitonestr.Length();\r\r | |
249 | \r\r | |
250 | Int_t nSB1=0, nSB2=0, nSB3=0, nSB4=0, nSB5=0;\r\r | |
251 | for (Int_t i=0; i<540; i++) {\r\r | |
252 | AliTRDCalDCSFEE *idcsfee;\r\r | |
253 | idcsfee = caldcs->GetCalDCSFEEObj(i);\r\r | |
254 | if (idcsfee != NULL) {\r\r | |
255 | Int_t sb = idcsfee->GetStatusBit();\r\r | |
256 | if (sb == 5) { bitfivestr += i; bitfivestr += " "; nSB5++; }\r\r | |
257 | if (sb == 4) { bitfourstr += i; bitfourstr += " "; nSB4++; }\r\r | |
258 | if (sb == 3) { bitthreestr += i; bitthreestr += " "; nSB3++; }\r\r | |
259 | if (sb == 2) { bittwostr += i; bittwostr += " "; nSB2++; }\r\r | |
260 | if (sb == 1) { bitonestr += i; bitonestr += " "; nSB1++; }\r\r | |
261 | hStatusBits->Fill(sb);\r\r | |
262 | }\r\r | |
263 | }\r\r | |
264 | \r\r | |
265 | if (lengthfive < bitfivestr.Length()) cout << nSB5 << bitfivestr.Data() << endl << endl;\r\r | |
266 | else cout << "GOOD: No ROCs with status bit 5" << endl;\r\r | |
267 | if (lengthfour < bitfourstr.Length()) cout << nSB4 << bitfourstr.Data() << endl << endl;\r\r | |
268 | else cout << "GOOD: No ROCs with status bit 4" << endl;\r\r | |
269 | if (lengththree < bitthreestr.Length()) cout << nSB3 << bitthreestr.Data() << endl << endl;\r\r | |
270 | else cout << "GOOD: No ROCs with status bit 3" << endl;\r\r | |
271 | if (lengthtwo < bittwostr.Length()) cout << nSB2 << bittwostr.Data() << endl << endl;\r\r | |
272 | else cout << "GOOD: No ROCs with status bit 2" << endl;\r\r | |
273 | if (lengthone < bitonestr.Length()) cout << nSB1 << bitonestr.Data() << endl << endl;\r\r | |
274 | else cout << "GOOD: No ROCs with status bit 1" << endl;\r\r | |
275 | }\r\r | |
276 | \r\r | |
277 | \r\r | |
278 | // get a status bit histogram\r\r | |
279 | if(dump[4] > 0) {\r\r | |
280 | TCanvas *c1 = new TCanvas("c1");\r\r | |
281 | gPad->SetLogy();\r\r | |
282 | hStatusBits->Draw("HIST");\r\r | |
283 | }\r\r | |
284 | \r\r | |
285 | \r\r | |
286 | \r\r | |
287 | // get a check on data integrity\r\r | |
288 | if(dump[5] > 0) {\r\r | |
289 | cout << endl << "============ Data Integrity: ============" << endl;\r\r | |
290 | TH1F *tb = new TH1F("tbs", "", 100000, 0, 100000);\r\r | |
291 | TH1F *ct = new TH1F("cts", "", 100000, 0, 100000);\r\r | |
292 | const Int_t ngsm = nROB * nMCM;\r\r | |
293 | \r\r | |
294 | Int_t gsm_occ[nROC][ngsm][2];\r\r | |
295 | Int_t ni_occ[nROC][ngsm][2];\r\r | |
296 | Int_t ev_occ[nROC][ngsm][2];\r\r | |
297 | Int_t pt_occ[nROC][ngsm][2];\r\r | |
298 | \r\r | |
299 | for (Int_t i=0; i<nROC; i++) {\r\r | |
300 | for (Int_t j=0; j<ngsm; j++) {\r\r | |
301 | gsm_occ[i][j][0] = 0; // values\r\r | |
302 | gsm_occ[i][j][1] = 0; // counter\r\r | |
303 | ni_occ[i][j][0] = 0; // values\r\r | |
304 | ni_occ[i][j][1] = 0; // counter\r\r | |
305 | ev_occ[i][j][0] = 0; // values\r\r | |
306 | ev_occ[i][j][1] = 0; // counter\r\r | |
307 | pt_occ[i][j][0] = 0; // values\r\r | |
308 | pt_occ[i][j][1] = 0; // counter\r\r | |
309 | }\r\r | |
310 | }\r\r | |
311 | \r\r | |
312 | Int_t majGSM[2], majNI[2], majEV[2], majPT[2];\r\r | |
313 | majGSM[0] = 0; // value\r\r | |
314 | majGSM[1] = 0; // count\r\r | |
315 | majNI[0] = 0; // value\r\r | |
316 | majNI[1] = 0; // count\r\r | |
317 | majEV[0] = 0; // value\r\r | |
318 | majEV[1] = 0; // count\r\r | |
319 | majPT[0] = 0; // value\r\r | |
320 | majPT[1] = 0; // count\r\r | |
321 | \r\r | |
322 | \r\r | |
323 | // find the majority states/counters\r\r | |
324 | for (Int_t i=0; i<nROC; i++) {\r\r | |
325 | AliTRDCalDCSFEE *idcsfee;\r\r | |
326 | idcsfee = caldcs->GetCalDCSFEEObj(i);\r\r | |
327 | if (idcsfee != NULL) {\r\r | |
328 | if(idcsfee->GetStatusBit() == 0) {\r\r | |
329 | tb->Fill(idcsfee->GetNumberOfTimeBins()-1);\r\r | |
330 | ct->Fill(idcsfee->GetConfigTag()-1);\r\r | |
331 | for (Int_t j=0; j<nROB; j++) {\r\r | |
332 | for (Int_t k=0; k<nMCM; k++) {\r\r | |
333 | Int_t igsm = idcsfee->GetMCMGlobalState(j, k);\r\r | |
334 | Int_t ini = idcsfee->GetMCMStateNI(j, k);\r\r | |
335 | Int_t iev = idcsfee->GetMCMEventCnt(j, k);\r\r | |
336 | Int_t ipt = idcsfee->GetMCMPtCnt(j, k);\r\r | |
337 | // gsm\r\r | |
338 | for (Int_t l=0; l<nROB*nMCM; l++) {\r\r | |
339 | if (gsm_occ[i][l][1] == 0){\r\r | |
340 | gsm_occ[i][l][1] = 1;\r\r | |
341 | gsm_occ[i][l][0] = igsm;\r\r | |
342 | break;\r\r | |
343 | }\r\r | |
344 | else if (gsm_occ[i][l][0] == igsm) {\r\r | |
345 | gsm_occ[i][l][1]++;\r\r | |
346 | break;\r\r | |
347 | }\r\r | |
348 | }\r\r | |
349 | // ni\r\r | |
350 | for (Int_t l=0; l<nROB*nMCM; l++) {\r\r | |
351 | if (ni_occ[i][l][1] == 0){\r\r | |
352 | ni_occ[i][l][1] = 1;\r\r | |
353 | ni_occ[i][l][0] = ini;\r\r | |
354 | break;\r\r | |
355 | }\r\r | |
356 | else if (ni_occ[i][l][0] == ini) {\r\r | |
357 | ni_occ[i][l][1]++;\r\r | |
358 | break;\r\r | |
359 | }\r\r | |
360 | }\r\r | |
361 | // ev\r\r | |
362 | for (Int_t l=0; l<nROB*nMCM; l++) {\r\r | |
363 | if (ev_occ[i][l][1] == 0){\r\r | |
364 | ev_occ[i][l][1] = 1;\r\r | |
365 | ev_occ[i][l][0] = iev;\r\r | |
366 | break;\r\r | |
367 | }\r\r | |
368 | else if (ev_occ[i][l][0] == iev) {\r\r | |
369 | ev_occ[i][l][1]++;\r\r | |
370 | break;\r\r | |
371 | }\r\r | |
372 | }\r\r | |
373 | // pt\r\r | |
374 | for (Int_t l=0; l<nROB*nMCM; l++) {\r\r | |
375 | if (pt_occ[i][l][1] == 0){\r\r | |
376 | pt_occ[i][l][1] = 1;\r\r | |
377 | pt_occ[i][l][0] = ipt;\r\r | |
378 | break;\r\r | |
379 | }\r\r | |
380 | else if (pt_occ[i][l][0] == ipt) {\r\r | |
381 | pt_occ[i][l][1]++;\r\r | |
382 | break;\r\r | |
383 | }\r\r | |
384 | }\r\r | |
385 | }\r\r | |
386 | }\r\r | |
387 | \r\r | |
388 | for (Int_t j=0; j<ngsm; j++) {\r\r | |
389 | // gsm\r\r | |
390 | if (gsm_occ[i][j][1] > 0) {\r\r | |
391 | if (gsm_occ[i][j][1] > majGSM[1]) {\r\r | |
392 | majGSM[0] = gsm_occ[i][j][0];\r\r | |
393 | majGSM[1] = gsm_occ[i][j][1];\r\r | |
394 | }\r\r | |
395 | }\r\r | |
396 | // ni\r\r | |
397 | if (ni_occ[i][j][1] > 0) {\r\r | |
398 | if (ni_occ[i][j][1] > majNI[1]) {\r\r | |
399 | majNI[0] = ni_occ[i][j][0];\r\r | |
400 | majNI[1] = ni_occ[i][j][1];\r\r | |
401 | }\r\r | |
402 | }\r\r | |
403 | // ev\r\r | |
404 | if (ev_occ[i][j][1] > 0) {\r\r | |
405 | if (ev_occ[i][j][1] > majEV[1]) {\r\r | |
406 | majEV[0] = ev_occ[i][j][0];\r\r | |
407 | majEV[1] = ev_occ[i][j][1];\r\r | |
408 | }\r\r | |
409 | }\r\r | |
410 | // pt\r\r | |
411 | if (pt_occ[i][j][1] > 0) {\r\r | |
412 | if (pt_occ[i][j][1] > majPT[1]) {\r\r | |
413 | majPT[0] = pt_occ[i][j][0];\r\r | |
414 | majPT[1] = pt_occ[i][j][1];\r\r | |
415 | }\r\r | |
416 | } \r\r | |
417 | }\r\r | |
418 | }\r\r | |
419 | }\r\r | |
420 | }\r\r | |
421 | \r\r | |
422 | Int_t maxBinCT = ct->GetMaximumBin();\r\r | |
423 | //cout << "Majority number of configuration tags: " << maxBinCT << endl;\r\r | |
424 | Int_t maxBinTB = tb->GetMaximumBin();\r\r | |
425 | //cout << "Majority number of timebins: " << maxBinTB << endl;\r\r | |
426 | Int_t integrityProblem = 0;\r\r | |
427 | \r\r | |
428 | for (Int_t i=0; i<nROC; i++) {\r\r | |
429 | AliTRDCalDCSFEE *idcsfee;\r\r | |
430 | idcsfee = caldcs->GetCalDCSFEEObj(i);\r\r | |
431 | if (idcsfee != NULL) {\r\r | |
432 | if(idcsfee->GetStatusBit() == 0) {\r\r | |
433 | Int_t ict = idcsfee->GetConfigTag();\r\r | |
434 | if(ict != maxBinCT) {\r\r | |
435 | cout << "ROB " << i << " has the config tag = " << ict \r\r | |
436 | << " what differs from the majority (=" << maxBinCT << ")!" << endl;\r\r | |
437 | integrityProblem++;\r\r | |
438 | }\r\r | |
439 | Int_t itb = idcsfee->GetNumberOfTimeBins();\r\r | |
440 | if(itb != maxBinTB) {\r\r | |
441 | cout << "ROB " << i << " has number of time bins = " << itb \r\r | |
442 | << " what differs from the majority (=" << maxBinTB << ")!" << endl;\r\r | |
443 | integrityProblem++;\r\r | |
444 | }\r\r | |
445 | \r\r | |
446 | \r\r | |
447 | for (Int_t j=0; j<ngsm; j++) {\r\r | |
448 | // gsm\r\r | |
449 | if ((gsm_occ[i][j][1] > 0) && (gsm_occ[i][j][0] != majGSM[0])) {\r\r | |
450 | if (!((gsm_occ[i][j][0] == -1) && ((gsm_occ[i][j][1] == 6) || (gsm_occ[i][j][1] == 40)))) { \r\r | |
451 | printf("ROC %3d %3d inconstistent global rstates found with value %2d\n",\r\r | |
452 | i,gsm_occ[i][j][1],gsm_occ[i][j][0]);\r\r | |
453 | integrityProblem++;\r\r | |
454 | }\r\r | |
455 | }\r\r | |
456 | // ni\r\r | |
457 | if ((ni_occ[i][j][1] > 0) && (ni_occ[i][j][0] != majNI[0])) {\r\r | |
458 | if (!((ni_occ[i][j][0] == -1) && ((ni_occ[i][j][1] == 6) || (ni_occ[i][j][1] == 40)))) { \r\r | |
459 | printf("ROC %3d %3d inconstistent network interface states found with value %2d\n",\r\r | |
460 | i,ni_occ[i][j][1],ni_occ[i][j][0]);\r\r | |
461 | integrityProblem++;\r\r | |
462 | }\r\r | |
463 | }\r\r | |
464 | // ev\r\r | |
465 | if ((ev_occ[i][j][1] > 0) && (ev_occ[i][j][0] != majEV[0])) {\r\r | |
466 | if (!((ev_occ[i][j][0] == -1) && ((ev_occ[i][j][1] == 6) || (ev_occ[i][j][1] == 40)))) { \r\r | |
467 | printf("ROC %3d %3d inconstistent event counters found with value %2d\n",\r\r | |
468 | i,ev_occ[i][j][1],ev_occ[i][j][0]);\r\r | |
469 | integrityProblem++;\r\r | |
470 | }\r\r | |
471 | }\r\r | |
472 | // pt\r\r | |
473 | if ((pt_occ[i][j][1] > 0) && (pt_occ[i][j][0] != majPT[0])) {\r\r | |
474 | if (!((pt_occ[i][j][0] == -1) && ((pt_occ[i][j][1] == 6) || (pt_occ[i][j][1] == 40)))) { \r\r | |
475 | printf("ROC %3d %3d inconstistent pretrigger counters found with value %2d\n",\r\r | |
476 | i,pt_occ[i][j][1],pt_occ[i][j][0]);\r\r | |
477 | integrityProblem++;\r\r | |
478 | }\r\r | |
479 | }\r\r | |
480 | \r\r | |
481 | }\r\r | |
482 | }\r\r | |
483 | }\r\r | |
484 | }\r\r | |
485 | \r\r | |
486 | if(integrityProblem == 0) cout << "No problem with data integrity found." << endl;\r\r | |
487 | else cout << endl << "There were in total " << integrityProblem << " inconsistencies!" << endl;\r\r | |
488 | }\r\r | |
489 | \r\r | |
490 | \r\r | |
491 | cout << endl << "============ Statistics from RSTATE: ============" << endl;\r\r | |
492 | cout<<"I : The majority entry is given as well as all other values," << endl;\r\r | |
493 | cout<<" sorted according to their occurrence." << endl << endl;\r\r | |
494 | GetMajoritys(caldcs);\r\r | |
495 | \r\r | |
496 | \r\r | |
497 | cout << endl << "============ Global Configuraton: ============" << endl;\r\r | |
498 | cout<<"I : Numbers are -1 if not set and -2 if mixed," << endl;\r\r | |
499 | cout<<" strings are empty if not set and 'mixed' if so." << endl << endl;\r\r | |
500 | cout<<"Global number of time bins.........................: "<<caldcs->GetGlobalNumberOfTimeBins() << endl;\r\r | |
501 | cout<<"Global configuration tag...........................: "<<caldcs->GetGlobalConfigTag() << endl;\r\r | |
502 | cout<<"Global single hit threshold........................: "<<caldcs->GetGlobalSingleHitThres() << endl;\r\r | |
503 | cout<<"Global three pad cluster threshold.................: "<<caldcs->GetGlobalThreePadClustThres()<<endl;\r\r | |
504 | cout<<"Global selective ZS (every i'th event).............: "<<caldcs->GetGlobalSelectiveNoZS() << endl;\r\r | |
505 | cout<<"Global tail cancellation filter weight.............: "<<caldcs->GetGlobalTCFilterWeight() << endl;\r\r | |
506 | cout<<"Global tail cancellat. filter short decay parameter: "<<caldcs->GetGlobalTCFilterShortDecPar()<<endl;\r\r | |
507 | cout<<"Global tail cancellation filt. long decay parameter: "<<caldcs->GetGlobalTCFilterLongDecPar()<<endl;\r\r | |
508 | cout<<"Global fast statistics mode?.......................: "<<caldcs->GetGlobalModeFastStatNoise() << endl;\r\r | |
509 | cout<<"Global configuration tag version...................: "<<caldcs->GetGlobalConfigVersion() << endl;\r\r | |
510 | cout<<"Global configuration tag name......................: "<<caldcs->GetGlobalConfigName() << endl;\r\r | |
511 | cout<<"Global filter type.................................: "<<caldcs->GetGlobalFilterType() << endl;\r\r | |
512 | cout<<"Global readout parameter...........................: "<<caldcs->GetGlobalReadoutParam() << endl;\r\r | |
513 | cout<<"Global test pattern................................: "<<caldcs->GetGlobalTestPattern() << endl;\r\r | |
514 | cout<<"Global tracklet mode...............................: "<<caldcs->GetGlobalTrackletMode() << endl;\r\r | |
515 | cout<<"Global tracklet definition.........................: "<<caldcs->GetGlobalTrackletDef() << endl;\r\r | |
516 | cout<<"Global trigger setup...............................: "<<caldcs->GetGlobalTriggerSetup() << endl;\r\r | |
517 | cout<<"Global additional options..........................: "<<caldcs->GetGlobalAddOptions() << endl;\r\r | |
518 | \r\r | |
519 | }\r\r |