]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TRD/Macros/AliTRDcheckConfig.C
Config.C modified, protection in AliMuonForwardTrackFinder.cxx in case of zero MUON...
[u/mrichter/AliRoot.git] / TRD / Macros / AliTRDcheckConfig.C
CommitLineData
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/");
29TString alienOcdbPath("alien://folder=/alice/data/2010/OCDB/");
32490b1b 30
31// Do not make changes below here unless you know what your doing
32
33const Int_t nROC = 540;
34const Int_t nROB = 8;
35const Int_t nMCM = 18;
36const Int_t cArraySize = 1000;
37
38Bool_t errors = false;
ef619721 39Int_t calVer = 0;
32490b1b 40
41Int_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
65void 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 81void 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 154void 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 258void 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}