+/**************************************************************************\r
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *\r
+ * *\r
+ * Author: The ALICE Off-line Project. *\r
+ * Contributors are mentioned in the code where appropriate. *\r
+ * *\r
+ * Permission to use, copy, modify and distribute this software and its *\r
+ * documentation strictly for non-commercial purposes is hereby granted *\r
+ * without fee, provided that the above copyright notice appears in all *\r
+ * copies and that both the copyright notice and this permission notice *\r
+ * appear in the supporting documentation. The authors make no claims *\r
+ * about the suitability of this software for any purpose. It is *\r
+ * provided "as is" without express or implied warranty. *\r
+ **************************************************************************/\r
+\r
//===================================================================================\r
// This is a macro to analyze TRD/Calib/DCS OCDB objects either\r
// from the grid for a given run number or from a local object.\r
-// If you want to analyze data from the grid, please don't forget to\r
-// have a valid alien token initialized\r
//\r
// Arguments:\r
// Either provide a run number as the first argument to access the \r
// .x AliTRDcheckConfig.C (60111)\r
// .x AliTRDcheckConfig.C (0, "$ALICE_ROOT/TRD/Calib/DCS/Run0_999999999_v0_s0.root")\r
//\r
-// Please contact Frederick Kramer or Hans Beck in case of problems\r
+// Original author:\r
+// Frederick Kramer\r
+// Current maintainer:\r
+// Hans Beck\r
//===================================================================================\r
\r
+// Make the macro compile.\r
+#if !defined(__CINT__) || defined(__MAKECINT__)\r
+// Compile me in aliroot with .L AliTRDcheckConfig.C+ or with\r
+// clang -lXMLParser -lGui -lProof -lRAWDatabase -lVMC -lMinuit -lSTEERbase -lANALYSIS -lSTEER -lESD -L$ALICE_BUILD/lib/tgt_`root-config --arch` -lTRDbase -lCDB -lstdc++ `root-config --libs` -I`root-config --incdir` -I$ALICE_ROOT/include AliTRDcheckConfig.C\r
+#include <iostream>\r
+#include <fstream>\r
+#include <TMath.h>\r
+#include <TFile.h>\r
+#include <TGrid.h>\r
+#include <TEnv.h>\r
+#include "../../STEER/CDB/AliCDBEntry.h"\r
+#include "../../STEER/CDB/AliCDBManager.h"\r
+#include "../Cal/AliTRDCalDCS.h"\r
+#include "../Cal/AliTRDCalDCSv2.h"\r
+#include "../Cal/AliTRDCalDCSFEE.h"\r
+#include "../Cal/AliTRDCalDCSFEEv2.h"\r
+\r
+// Not sure where to put it?\r
+using namespace std;\r
+#endif\r
\r
const Int_t nROC = 540;\r
const Int_t nROB = 8;\r
const Int_t nMCM = 18;\r
const Int_t cArraySize = 1000;\r
\r
-Bool_t errors = false;\r
-Int_t calVer = 0;\r
-\r
+Bool_t errors;\r
+Int_t calVer;\r
+//______________________________________________________________________\r
Int_t AnalyzeArray(Int_t states[cArraySize], Int_t occur[cArraySize]) {\r
- long long srtIndx[cArraySize] = 0;\r
+ Int_t srtIndx[cArraySize] = {0};\r
\r
TMath::Sort(cArraySize, occur, srtIndx);\r
\r
}\r
return states[srtIndx[0]];\r
}\r
-\r
-\r
-\r
+//______________________________________________________________________\r
void FillItemInArray(Int_t states[cArraySize], Int_t occur[cArraySize], Int_t item, Bool_t allowNeg) {\r
for (Int_t iArrPos=0; iArrPos<cArraySize; iArrPos++) {\r
// if allowNeg is set then we change the number indicating that the item ws not set from -1 to -100\r
- // so that small negitive numbers can be sorted too\r
+ // so that small negative numbers can be sorted too\r
if ((allowNeg && item == -100000) || (!allowNeg && item == -1)) break; // value not set\r
if (states[iArrPos] == item) {\r
occur[iArrPos]++;\r
}\r
}\r
}\r
-\r
+//______________________________________________________________________\r
void GetMajoritys(TObject* calDCSObj) {\r
\r
+ // Initializes full array with zeros\r
Int_t gsmStates[cArraySize] = {0}, gsmOccur[cArraySize] = {0};\r
Int_t nimStates[cArraySize] = {0}, nimOccur[cArraySize] = {0};\r
Int_t nevStates[cArraySize] = {0}, nevOccur[cArraySize] = {0};\r
Int_t nptStates[cArraySize] = {0}, nptOccur[cArraySize] = {0};\r
\r
- for (Int_t i=0; i<cArraySize; i++) {\r
- gsmStates[i] = 0; gsmOccur[i] = 0;\r
- nimStates[i] = 0; nimOccur[i] = 0;\r
- nevStates[i] = 0; nevOccur[i] = 0;\r
- nptStates[i] = 0; nptOccur[i] = 0; \r
- }\r
- \r
\r
- Int_t feeArrSiz = 0;\r
- if (calVer == 1) feeArrSiz = ((AliTRDCalDCS*)calDCSObj)->GetFEEArr()->GetSize();\r
- if (calVer == 2) feeArrSiz = ((AliTRDCalDCSv2*)calDCSObj)->GetFEEArr()->GetSize();\r
+ { // Scoped declaration\r
+ Int_t feeArrSiz = 0;\r
+ if (calVer == 1) {\r
+ if(((AliTRDCalDCS*)calDCSObj)->GetFEEArr())\r
+ feeArrSiz = ((AliTRDCalDCS*)calDCSObj)->GetFEEArr()->GetSize();\r
+ }\r
+ else if (calVer == 2) {\r
+ if(((AliTRDCalDCSv2*)calDCSObj)->GetFEEArr())\r
+ feeArrSiz = ((AliTRDCalDCSv2*)calDCSObj)->GetFEEArr()->GetSize();\r
+ }\r
\r
- for (Int_t i=0; i<nROC && i<feeArrSiz; i++) {\r
TObject* idcsfee;\r
- if (calVer == 1) idcsfee = ((AliTRDCalDCS*)calDCSObj)->GetCalDCSFEEObj(i);\r
- if (calVer == 2) idcsfee = ((AliTRDCalDCSv2*)calDCSObj)->GetCalDCSFEEObj(i);\r
-\r
- if (idcsfee == NULL) continue;\r
-\r
- Int_t sbit = 0;\r
- if (calVer == 1) ((AliTRDCalDCSFEE*)idcsfee)->GetStatusBit();\r
- if (calVer == 2) ((AliTRDCalDCSFEEv2*)idcsfee)->GetStatusBit();\r
-\r
- if (sbit != 0) continue;\r
-\r
- for (Int_t j=0; j<nROB; j++) {\r
- for (Int_t k=0; k<nMCM; k++) {\r
- Int_t igsm = 0;\r
- Int_t inim = 0;\r
- Int_t inev = 0;\r
- Int_t inpt = 0;\r
- if (calVer == 1) {\r
- igsm = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMGlobalState(j,k);\r
- inim = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMStateNI(j,k);\r
- inev = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMEventCnt(j,k);\r
- inpt = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMPtCnt(j,k);\r
- }\r
- if (calVer == 2) {\r
- igsm = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMGlobalState(j,k);\r
- inim = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMStateNI(j,k);\r
- inev = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMEventCnt(j,k);\r
- inpt = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMPtCnt(j,k);\r
- }\r
- \r
- FillItemInArray(gsmStates, gsmOccur, igsm, false); \r
- FillItemInArray(nimStates, nimOccur, inim, false); \r
- FillItemInArray(nevStates, nevOccur, inev, false); \r
- FillItemInArray(nptStates, nptOccur, inpt, false); \r
- }\r
- }\r
- }\r
- \r
+ for (Int_t i=0; i<nROC && i<feeArrSiz; i++) {\r
+ if (calVer == 1) idcsfee = ((AliTRDCalDCS*)calDCSObj)->GetCalDCSFEEObj(i);\r
+ else if (calVer == 2) idcsfee = ((AliTRDCalDCSv2*)calDCSObj)->GetCalDCSFEEObj(i);\r
+ \r
+ if (idcsfee == NULL) continue;\r
+ \r
+ Int_t sbit(-9999);\r
+ if (calVer == 1) sbit = ((AliTRDCalDCSFEE*)idcsfee)->GetStatusBit();\r
+ else if (calVer == 2) sbit = ((AliTRDCalDCSFEEv2*)idcsfee)->GetStatusBit();\r
+ if (sbit != 0) continue;\r
+ \r
+ for (Int_t j=0; j<nROB; j++) {\r
+ for (Int_t k=0; k<nMCM; k++) {\r
+ Int_t igsm = 0;\r
+ Int_t inim = 0;\r
+ Int_t inev = 0;\r
+ Int_t inpt = 0;\r
+ if (calVer == 1) {\r
+ igsm = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMGlobalState(j,k);\r
+ inim = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMStateNI(j,k);\r
+ inev = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMEventCnt(j,k);\r
+ inpt = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMPtCnt(j,k);\r
+ }\r
+ else if (calVer == 2) {\r
+ igsm = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMGlobalState(j,k);\r
+ inim = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMStateNI(j,k);\r
+ inev = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMEventCnt(j,k);\r
+ inpt = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMPtCnt(j,k);\r
+ }\r
+\r
+ FillItemInArray(gsmStates, gsmOccur, igsm, false); \r
+ FillItemInArray(nimStates, nimOccur, inim, false); \r
+ FillItemInArray(nevStates, nevOccur, inev, false); \r
+ FillItemInArray(nptStates, nptOccur, inpt, false); \r
+ } // End of loop over MCMs\r
+ } // End of loop over ROBs\r
+ } // End of loop over ROCs\r
+ } // End of scoped declaration\r
+ \r
cout << "I : Global MCM state statistics:" << endl;\r
AnalyzeArray(gsmStates, gsmOccur);\r
cout << "I : Network interface state statistics:" << endl;\r
\r
return;\r
}\r
-\r
-\r
-\r
+//______________________________________________________________________\r
void GetMajorityDifferences(TObject* calDCSObj, TObject* calDCSObj2) {\r
\r
+ // Initializes full array with zeros\r
Int_t gsmStates[cArraySize] = {0}, gsmOccur[cArraySize] = {0};\r
Int_t nimStates[cArraySize] = {0}, nimOccur[cArraySize] = {0};\r
Int_t nevStates[cArraySize] = {0}, nevOccur[cArraySize] = {0};\r
Int_t nptStates[cArraySize] = {0}, nptOccur[cArraySize] = {0};\r
\r
- for (Int_t i=0; i<cArraySize; i++) {\r
- gsmStates[i] = 0; gsmOccur[i] = 0;\r
- nimStates[i] = 0; nimOccur[i] = 0;\r
- nevStates[i] = 0; nevOccur[i] = 0;\r
- nptStates[i] = 0; nptOccur[i] = 0; \r
- }\r
-\r
- Int_t feeArrSiz1 = 0;\r
- Int_t feeArrSiz2 = 0;\r
- if (calVer == 1) {\r
- feeArrSiz1 = ((AliTRDCalDCS*)calDCSObj)->GetFEEArr()->GetSize();\r
- feeArrSiz2 = ((AliTRDCalDCS*)calDCSObj2)->GetFEEArr()->GetSize();\r
- }\r
- if (calVer == 2) {\r
- feeArrSiz1 = ((AliTRDCalDCSv2*)calDCSObj)->GetFEEArr()->GetSize();\r
- feeArrSiz2 = ((AliTRDCalDCSv2*)calDCSObj2)->GetFEEArr()->GetSize();\r
- }\r
-\r
- for (Int_t i=0; i<nROC && i<feeArrSiz1 && i<feeArrSiz2; i++) {\r
- TObject* idcsfee;\r
- TObject* idcsfee2;\r
-\r
+ \r
+ { // Scoped declaration\r
+ Int_t feeArrSiz1 = 0;\r
+ Int_t feeArrSiz2 = 0;\r
if (calVer == 1) {\r
- idcsfee = ((AliTRDCalDCS*)calDCSObj)->GetCalDCSFEEObj(i);\r
- idcsfee2 = ((AliTRDCalDCS*)calDCSObj2)->GetCalDCSFEEObj(i);\r
+ if(((AliTRDCalDCS*)calDCSObj)->GetFEEArr())\r
+ feeArrSiz1 = ((AliTRDCalDCS*)calDCSObj)->GetFEEArr()->GetSize();\r
+ if(((AliTRDCalDCS*)calDCSObj2)->GetFEEArr())\r
+ feeArrSiz2 = ((AliTRDCalDCS*)calDCSObj2)->GetFEEArr()->GetSize();\r
}\r
- if (calVer == 2) {\r
- idcsfee = ((AliTRDCalDCSv2*)calDCSObj)->GetCalDCSFEEObj(i);\r
- idcsfee2 = ((AliTRDCalDCSv2*)calDCSObj2)->GetCalDCSFEEObj(i);\r
+ else if (calVer == 2) {\r
+ if(((AliTRDCalDCSv2*)calDCSObj)->GetFEEArr())\r
+ feeArrSiz1 = ((AliTRDCalDCSv2*)calDCSObj)->GetFEEArr()->GetSize();\r
+ if(((AliTRDCalDCSv2*)calDCSObj2)->GetFEEArr())\r
+ feeArrSiz2 = ((AliTRDCalDCSv2*)calDCSObj2)->GetFEEArr()->GetSize();\r
}\r
- if ((idcsfee == NULL) || (idcsfee2 == NULL)) continue;\r
-\r
- Int_t sbit = 0;\r
- if (calVer == 1) sbit = ((AliTRDCalDCSFEE*)idcsfee)->GetStatusBit();\r
- if (calVer == 2) sbit = ((AliTRDCalDCSFEEv2*)idcsfee)->GetStatusBit();\r
- if (sbit != 0) continue;\r
\r
- for (Int_t j=0; j<nROB; j++) {\r
- for (Int_t k=0; k<nMCM; k++) {\r
- Int_t igsm, inim, inev, inpt, igsm1, inim1, inev1, inpt1, igsm2, inim2, inev2, inpt2;\r
- if (calVer == 1) {\r
- igsm1 = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMGlobalState(j,k);\r
- inim1 = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMStateNI(j,k);\r
- inev1 = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMEventCnt(j,k);\r
- inpt1 = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMPtCnt(j,k);\r
- igsm2 = ((AliTRDCalDCSFEE*)idcsfee2)->GetMCMGlobalState(j,k);\r
- inim2 = ((AliTRDCalDCSFEE*)idcsfee2)->GetMCMStateNI(j,k);\r
- inev2 = ((AliTRDCalDCSFEE*)idcsfee2)->GetMCMEventCnt(j,k);\r
- inpt2 = ((AliTRDCalDCSFEE*)idcsfee2)->GetMCMPtCnt(j,k);\r
- }\r
- if (calVer == 2) {\r
- igsm1 = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMGlobalState(j,k);\r
- inim1 = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMStateNI(j,k);\r
- inev1 = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMEventCnt(j,k);\r
- inpt1 = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMPtCnt(j,k);\r
- igsm2 = ((AliTRDCalDCSFEEv2*)idcsfee2)->GetMCMGlobalState(j,k);\r
- inim2 = ((AliTRDCalDCSFEEv2*)idcsfee2)->GetMCMStateNI(j,k);\r
- inev2 = ((AliTRDCalDCSFEEv2*)idcsfee2)->GetMCMEventCnt(j,k);\r
- inpt2 = ((AliTRDCalDCSFEEv2*)idcsfee2)->GetMCMPtCnt(j,k);\r
- }\r
-\r
- igsm = igsm1 - igsm2;\r
- inim = inim1 - inim2;\r
- inev = inev2 - inev1;\r
- inpt = inpt2 - inpt1;\r
- \r
- // if they were set to -1, it means they were not actauuly set\r
- // change -1 to -100 to mean they werent set since the above \r
- // can give negitives\r
- if (igsm1 == -1 && igsm == 0) igsm =-100000;\r
- if (inim1 == -1 && inim == 0) inim =-100000;\r
- if (inev1 == -1 && inev == 0) inev =-100000;\r
- if (inpt1 == -1 && inpt == 0) inpt =-100000;\r
- \r
- FillItemInArray(gsmStates, gsmOccur, igsm, true); \r
- FillItemInArray(nimStates, nimOccur, inim, true); \r
- FillItemInArray(nevStates, nevOccur, inev, true); \r
- FillItemInArray(nptStates, nptOccur, inpt, true); \r
+ TObject* idcsfee;\r
+ TObject* idcsfee2;\r
+ for (Int_t i=0; i<nROC && i<feeArrSiz1 && i<feeArrSiz2; i++) {\r
+ if (calVer == 1) {\r
+ idcsfee = ((AliTRDCalDCS*)calDCSObj)->GetCalDCSFEEObj(i);\r
+ idcsfee2 = ((AliTRDCalDCS*)calDCSObj2)->GetCalDCSFEEObj(i);\r
}\r
- }\r
- }\r
+ else if (calVer == 2) {\r
+ idcsfee = ((AliTRDCalDCSv2*)calDCSObj)->GetCalDCSFEEObj(i);\r
+ idcsfee2 = ((AliTRDCalDCSv2*)calDCSObj2)->GetCalDCSFEEObj(i);\r
+ }\r
+ if ((idcsfee == NULL) || (idcsfee2 == NULL)) continue;\r
+ \r
+ Int_t sbit(-9999);\r
+ if (calVer == 1) sbit = ((AliTRDCalDCSFEE*)idcsfee)->GetStatusBit();\r
+ else if (calVer == 2) sbit = ((AliTRDCalDCSFEEv2*)idcsfee)->GetStatusBit();\r
+ if (sbit != 0) continue;\r
+ \r
+ for (Int_t j=0; j<nROB; j++) {\r
+ for (Int_t k=0; k<nMCM; k++) {\r
+ Int_t igsm, inim, inev, inpt, igsm1, inim1, inev1, inpt1, igsm2, inim2, inev2, inpt2;\r
+ if (calVer == 1) {\r
+ igsm1 = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMGlobalState(j,k);\r
+ inim1 = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMStateNI(j,k);\r
+ inev1 = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMEventCnt(j,k);\r
+ inpt1 = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMPtCnt(j,k);\r
+ igsm2 = ((AliTRDCalDCSFEE*)idcsfee2)->GetMCMGlobalState(j,k);\r
+ inim2 = ((AliTRDCalDCSFEE*)idcsfee2)->GetMCMStateNI(j,k);\r
+ inev2 = ((AliTRDCalDCSFEE*)idcsfee2)->GetMCMEventCnt(j,k);\r
+ inpt2 = ((AliTRDCalDCSFEE*)idcsfee2)->GetMCMPtCnt(j,k);\r
+ }\r
+ else if (calVer == 2) {\r
+ igsm1 = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMGlobalState(j,k);\r
+ inim1 = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMStateNI(j,k);\r
+ inev1 = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMEventCnt(j,k);\r
+ inpt1 = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMPtCnt(j,k);\r
+ igsm2 = ((AliTRDCalDCSFEEv2*)idcsfee2)->GetMCMGlobalState(j,k);\r
+ inim2 = ((AliTRDCalDCSFEEv2*)idcsfee2)->GetMCMStateNI(j,k);\r
+ inev2 = ((AliTRDCalDCSFEEv2*)idcsfee2)->GetMCMEventCnt(j,k);\r
+ inpt2 = ((AliTRDCalDCSFEEv2*)idcsfee2)->GetMCMPtCnt(j,k);\r
+ }\r
+ \r
+ igsm = igsm1 - igsm2;\r
+ inim = inim1 - inim2;\r
+ inev = inev2 - inev1;\r
+ inpt = inpt2 - inpt1;\r
+ \r
+ // if they were set to -1, it means they were not actauuly set\r
+ // change -1 to -100 to mean they werent set since the above \r
+ // can give negatives\r
+ if (igsm1 == -1 && igsm == 0) igsm =-100000;\r
+ if (inim1 == -1 && inim == 0) inim =-100000;\r
+ if (inev1 == -1 && inev == 0) inev =-100000;\r
+ if (inpt1 == -1 && inpt == 0) inpt =-100000;\r
+ \r
+ FillItemInArray(gsmStates, gsmOccur, igsm, true); \r
+ FillItemInArray(nimStates, nimOccur, inim, true); \r
+ FillItemInArray(nevStates, nevOccur, inev, true); \r
+ FillItemInArray(nptStates, nptOccur, inpt, true); \r
+ } // End of loop over MCMs\r
+ } // End of loop over ROBs\r
+ } // End of loop over ROCs\r
+ } // End of scoped declaration\r
\r
cout << "I : Global MCM state difference statistics:" << endl;\r
AnalyzeArray(gsmStates, gsmOccur);\r
\r
return;\r
}\r
-\r
-\r
-void AliTRDcheckConfig(Int_t runNr=0, char *pathfile="nopathgiven"){\r
-\r
+//______________________________________________________________________\r
+void WrappedAliTRDcheckConfig(Int_t runNr, const char *pathfile,TFile *f){\r
+ // Reset the 'errors occured' bool as it's global\r
+ errors=false;\r
+ \r
AliCDBEntry *entry=0;\r
TString pathfilets(pathfile);\r
\r
cout << "I : Get OCDB Entry." << endl;\r
entry = man->Get("TRD/Calib/DCS", runNr);\r
if (entry == NULL) {\r
- cout << endl << "ERROR: Unable to get the AliTRDCalDCS object from the OCDB for run number " << runNr << "." << endl;\r
+ cout << endl << "ERROR: Unable to get the AliTRDCalDCS object"\r
+ << "from the OCDB for run number " << runNr << "." << endl;\r
return;\r
}\r
} else {\r
- cout << "I : Accessing local storage" << endl;\r
- TFile *f = new TFile(pathfile);\r
+ cout << "I : Accessing file directly" << endl;\r
+ // Might be we want to check a file on the grid\r
+ if(pathfilets.BeginsWith("alien://"))\r
+ TGrid::Connect("alien://");\r
+ f = TFile::Open(pathfile);\r
if(f != NULL) {\r
entry = (AliCDBEntry*) f->Get("AliCDBEntry");\r
+ if(!entry){\r
+ cout << "E : Can not get the OCDB entry"<<endl;\r
+ return;\r
+ }\r
}\r
else {\r
cout << "E : Cannot open file" << endl;\r
}\r
}\r
\r
- TObject *objectCDB = (TObject*)entry->GetObject();\r
- if (objectCDB->IsA()->InheritsFrom("TObjArray")) {\r
- TObjArray *objArrayCDB = (TObjArray*)entry->GetObject();\r
+ TObjArray *objArrayCDB = (TObjArray*)entry->GetObject();\r
+ if(!objArrayCDB){\r
+ cout << "E : Can not get the OCDB object"<<endl;\r
+ return;\r
}\r
\r
Int_t iesor=0;\r
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
Int_t lengthone = bitonestr.Length();\r
\r
- Int_t feeArrSiz = 0;\r
- if (calVer == 1) feeArrSiz = ((AliTRDCalDCS*)caldcs)->GetFEEArr()->GetSize();\r
- if (calVer == 2) feeArrSiz = ((AliTRDCalDCSv2*)caldcs)->GetFEEArr()->GetSize();\r
\r
- Int_t nSB1=0, nSB2=0, nSB3=0, nSB4=0, nSB5=0, nTot=0;\r
- for (Int_t i=0; i<nROC && i<feeArrSiz; i++) {\r
- TObject* idcsfee;\r
- if (calVer == 1) idcsfee = ((AliTRDCalDCS*)caldcs)->GetCalDCSFEEObj(i);\r
- if (calVer == 2) idcsfee = ((AliTRDCalDCSv2*)caldcs)->GetCalDCSFEEObj(i);\r
- if (idcsfee != NULL) {\r
- Int_t sb;\r
- if (calVer == 1) sb = ((AliTRDCalDCSFEE*)idcsfee)->GetStatusBit();\r
- if (calVer == 2) sb = ((AliTRDCalDCSFEEv2*)idcsfee)->GetStatusBit();\r
- if (sb == 5) { bitfivestr += i; bitfivestr += " "; nSB5++; }\r
- if (sb == 4) { bitfourstr += i; bitfourstr += " "; nSB4++; errors = true; }\r
- if (sb == 3) { bitthreestr += i; bitthreestr += " "; nSB3++; errors = true; }\r
- if (sb == 2) { bittwostr += i; bittwostr += " "; nSB2++; }\r
- if (sb == 1) { bitonestr += i; bitonestr += " "; nSB1++; errors = true; }\r
- nTot += 1;\r
- }\r
- }\r
+ Int_t nSB1=0, nSB2=0, nSB3=0, nSB4=0, nSB5=0, nTot=0, nChanged=0;\r
+ { // Scoped declaration\r
\r
- if (lengthfive < bitfivestr.Length()) cout << nSB5 << bitfivestr.Data() << endl << endl;\r
- if (lengthfour < bitfourstr.Length()) cout << nSB4 << bitfourstr.Data() << endl << endl;\r
- if (lengththree < bitthreestr.Length()) cout << nSB3 << bitthreestr.Data() << endl << endl;\r
- if (lengthtwo < bittwostr.Length()) cout << nSB2 << bittwostr.Data() << endl << endl;\r
- if (lengthone < bitonestr.Length()) cout << nSB1 << bitonestr.Data() << endl << endl;\r
- \r
- cout << "The remaining " << nTot-(nSB1+nSB2+nSB3+nSB4+nSB5) << " ROCs responded correctly in the start of run."<<endl;\r
-\r
- Int_t nChanged=0, nTot=0;\r
- for (Int_t i=0; i<nROC && i<feeArrSiz; i++) {\r
- TObject* idcsfee;\r
- TObject* idcsfee2;\r
+ // Determine the size of the array\r
+ Int_t feeArrSiz = 0;\r
if (calVer == 1) {\r
- if (caldcs) idcsfee = ((AliTRDCalDCS*)caldcs)->GetCalDCSFEEObj(i);\r
- if (caldcs2) idcsfee2 = ((AliTRDCalDCS*)caldcs2)->GetCalDCSFEEObj(i);\r
+ if(((AliTRDCalDCS*)caldcs)->GetFEEArr())\r
+ feeArrSiz = ((AliTRDCalDCS*)caldcs)->GetFEEArr()->GetSize();\r
}\r
- if (calVer == 2) {\r
- if (caldcs) idcsfee = ((AliTRDCalDCSv2*)caldcs)->GetCalDCSFEEObj(i);\r
- if (caldcs2) idcsfee2 = ((AliTRDCalDCSv2*)caldcs2)->GetCalDCSFEEObj(i);\r
+ else if (calVer == 2) {\r
+ if(((AliTRDCalDCSv2*)caldcs)->GetFEEArr())\r
+ feeArrSiz = ((AliTRDCalDCSv2*)caldcs)->GetFEEArr()->GetSize();\r
}\r
- if (idcsfee != NULL && idcsfee2 != NULL) {\r
- Int_t sbd1 = 0;\r
- Int_t sbd2 = 0;\r
+\r
+ // Check the status/error bist for each ROC\r
+ TObject* idcsfee;\r
+ TObject* idcsfee2;\r
+ // Loop over the ROCs / the array\r
+ for (Int_t i=0; i<nROC && i<feeArrSiz; i++) {\r
+ if (calVer == 1) idcsfee = ((AliTRDCalDCS*)caldcs)->GetCalDCSFEEObj(i);\r
+ else if (calVer == 2) idcsfee = ((AliTRDCalDCSv2*)caldcs)->GetCalDCSFEEObj(i);\r
+ if (idcsfee != NULL) {\r
+ Int_t sb;\r
+ if (calVer == 1) sb = ((AliTRDCalDCSFEE*)idcsfee)->GetStatusBit();\r
+ else if (calVer == 2) sb = ((AliTRDCalDCSFEEv2*)idcsfee)->GetStatusBit();\r
+ if (sb == 5) { bitfivestr += i; bitfivestr += " "; nSB5++; }\r
+ else if (sb == 4) { bitfourstr += i; bitfourstr += " "; nSB4++; errors = true; }\r
+ else if (sb == 3) { bitthreestr += i; bitthreestr += " "; nSB3++; errors = true; }\r
+ else if (sb == 2) { bittwostr += i; bittwostr += " "; nSB2++; }\r
+ else if (sb == 1) { bitonestr += i; bitonestr += " "; nSB1++; errors = true; }\r
+ nTot += 1;\r
+ }\r
+ } // End of loop over ROCs\r
+\r
+ // Print the statistcs for the status/error bits\r
+ if (lengthfive < bitfivestr.Length()) cout << nSB5 << bitfivestr.Data() << endl << endl;\r
+ if (lengthfour < bitfourstr.Length()) cout << nSB4 << bitfourstr.Data() << endl << endl;\r
+ if (lengththree < bitthreestr.Length()) cout << nSB3 << bitthreestr.Data() << endl << endl;\r
+ if (lengthtwo < bittwostr.Length()) cout << nSB2 << bittwostr.Data() << endl << endl;\r
+ if (lengthone < bitonestr.Length()) cout << nSB1 << bitonestr.Data() << endl << endl;\r
+ \r
+ cout << "The remaining " << nTot-(nSB1+nSB2+nSB3+nSB4+nSB5) << " ROCs responded correctly in the start of run."<<endl;\r
+ \r
+ // Reusing nTot\r
+ nTot=0;\r
+ for (Int_t i=0; i<nROC && i<feeArrSiz; i++) {\r
if (calVer == 1) {\r
- sbd1 = ((AliTRDCalDCSFEE*)idcsfee)->GetStatusBit();\r
- sbd2 = ((AliTRDCalDCSFEE*)idcsfee2)->GetStatusBit();\r
+ if (caldcs) idcsfee = ((AliTRDCalDCS*)caldcs)->GetCalDCSFEEObj(i);\r
+ if (caldcs2) idcsfee2 = ((AliTRDCalDCS*)caldcs2)->GetCalDCSFEEObj(i);\r
}\r
- if (calVer == 2) {\r
- sbd1 = ((AliTRDCalDCSFEEv2*)idcsfee)->GetStatusBit();\r
- sbd2 = ((AliTRDCalDCSFEEv2*)idcsfee2)->GetStatusBit();\r
+ else if (calVer == 2) {\r
+ if (caldcs) idcsfee = ((AliTRDCalDCSv2*)caldcs)->GetCalDCSFEEObj(i);\r
+ if (caldcs2) idcsfee2 = ((AliTRDCalDCSv2*)caldcs2)->GetCalDCSFEEObj(i);\r
}\r
- Int_t sbd = sbd1 - sbd2;\r
- if (sbd != 0) { \r
- cout << "ROC " << i << " changed from state " << sbd1 << " at start of the run to " << sbd2 << " at the end of the run." << endl;\r
- cout << "ROC " << i << " changed from state " << sbd1 << " at start of the run to " << sbd2 << " at the end of the run." << endl;\r
- nChanged++; \r
+ if (idcsfee != NULL && idcsfee2 != NULL) {\r
+ Int_t sbd1 = 0;\r
+ Int_t sbd2 = 0;\r
+ if (calVer == 1) {\r
+ sbd1 = ((AliTRDCalDCSFEE*)idcsfee)->GetStatusBit();\r
+ sbd2 = ((AliTRDCalDCSFEE*)idcsfee2)->GetStatusBit();\r
+ }\r
+ if (calVer == 2) {\r
+ sbd1 = ((AliTRDCalDCSFEEv2*)idcsfee)->GetStatusBit();\r
+ sbd2 = ((AliTRDCalDCSFEEv2*)idcsfee2)->GetStatusBit();\r
+ }\r
+ Int_t sbd = sbd1 - sbd2;\r
+ if (sbd != 0) { \r
+ cout << "ROC " << i << " changed from state " << sbd1 << " at start of the run to " << sbd2 << " at the end of the run." << endl;\r
+ cout << "ROC " << i << " changed from state " << sbd1 << " at start of the run to " << sbd2 << " at the end of the run." << endl;\r
+ nChanged++; \r
+ }\r
+ nTot += 1;\r
}\r
- nTot += 1;\r
- }\r
- }\r
- \r
+ } // End of loop over ROCs\r
+ } // End of scoped declaration\r
if (nChanged == 0) {\r
cout << "No ROCs changed state between the start and end of the run" << endl;\r
} else {\r
gts = ((AliTRDCalDCS*)caldcs)->GetGlobalTriggerSetup();\r
gao = ((AliTRDCalDCS*)caldcs)->GetGlobalAddOptions();\r
}\r
- if (calVer == 2) {\r
- gtb = ((AliTRDCalDCSv2*)caldcs)->GetCalDCSFEEObj(0)->GetNumberOfTimeBins();\r
- gct = ((AliTRDCalDCSv2*)caldcs)->GetCalDCSFEEObj(0)->GetConfigTag();\r
- gsh = ((AliTRDCalDCSv2*)caldcs)->GetCalDCSFEEObj(0)->GetSingleHitThres();\r
- gtc = ((AliTRDCalDCSv2*)caldcs)->GetCalDCSFEEObj(0)->GetThreePadClustThres();\r
- gsz = ((AliTRDCalDCSv2*)caldcs)->GetCalDCSFEEObj(0)->GetSelectiveNoZS();\r
- gfw = ((AliTRDCalDCSv2*)caldcs)->GetCalDCSFEEObj(0)->GetTCFilterWeight();\r
- gfs = ((AliTRDCalDCSv2*)caldcs)->GetCalDCSFEEObj(0)->GetTCFilterShortDecPar();\r
- gfl = ((AliTRDCalDCSv2*)caldcs)->GetCalDCSFEEObj(0)->GetTCFilterLongDecPar();\r
- gcv = ((AliTRDCalDCSv2*)caldcs)->GetCalDCSFEEObj(0)->GetConfigVersion();\r
- gcn = ((AliTRDCalDCSv2*)caldcs)->GetCalDCSFEEObj(0)->GetConfigName();\r
- gft = ((AliTRDCalDCSv2*)caldcs)->GetCalDCSFEEObj(0)->GetFilterType();\r
- grp = ((AliTRDCalDCSv2*)caldcs)->GetCalDCSFEEObj(0)->GetReadoutParam();\r
- gtp = ((AliTRDCalDCSv2*)caldcs)->GetCalDCSFEEObj(0)->GetTestPattern();\r
- gtm = ((AliTRDCalDCSv2*)caldcs)->GetCalDCSFEEObj(0)->GetTrackletMode();\r
- gtd = ((AliTRDCalDCSv2*)caldcs)->GetCalDCSFEEObj(0)->GetTrackletDef();\r
- gts = ((AliTRDCalDCSv2*)caldcs)->GetCalDCSFEEObj(0)->GetTriggerSetup();\r
- gao = ((AliTRDCalDCSv2*)caldcs)->GetCalDCSFEEObj(0)->GetAddOptions();\r
+ else if (calVer == 2) {\r
+ gtb = ((AliTRDCalDCSv2*)caldcs)->GetGlobalNumberOfTimeBins();\r
+ gct = ((AliTRDCalDCSv2*)caldcs)->GetGlobalConfigTag();\r
+ gsh = ((AliTRDCalDCSv2*)caldcs)->GetGlobalSingleHitThres();\r
+ gtc = ((AliTRDCalDCSv2*)caldcs)->GetGlobalThreePadClustThres();\r
+ gsz = ((AliTRDCalDCSv2*)caldcs)->GetGlobalSelectiveNoZS();\r
+ gfw = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTCFilterWeight();\r
+ gfs = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTCFilterShortDecPar();\r
+ gfl = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTCFilterLongDecPar();\r
+ gsn = ((AliTRDCalDCSv2*)caldcs)->GetGlobalModeFastStatNoise();\r
+ gcv = ((AliTRDCalDCSv2*)caldcs)->GetGlobalConfigVersion();\r
+ gcn = ((AliTRDCalDCSv2*)caldcs)->GetGlobalConfigName();\r
+ gft = ((AliTRDCalDCSv2*)caldcs)->GetGlobalFilterType();\r
+ grp = ((AliTRDCalDCSv2*)caldcs)->GetGlobalReadoutParam();\r
+ gtp = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTestPattern();\r
+ gtm = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTrackletMode();\r
+ gtd = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTrackletDef();\r
+ gts = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTriggerSetup();\r
+ gao = ((AliTRDCalDCSv2*)caldcs)->GetGlobalAddOptions();\r
}\r
\r
\r
} else {\r
cout<<" I didn't notice any errors, but that doesn't mean there weren't any!" << endl;\r
}\r
+//______________________________________________________________________\r
+}\r
+void AliTRDcheckConfig(Int_t runNr=0, const char *pathfile="nopathgiven"){\r
+ // Wrapping the function to be able to clean up\r
+ TFile *f=0;\r
+ WrappedAliTRDcheckConfig(runNr,pathfile,f);\r
+ AliCDBManager::Destroy();\r
+ if(f){\r
+ delete f; // Destructor calls TFile::Close()\r
+ f=0;\r
+ }\r
+}\r
+//______________________________________________________________________\r
+//\r
+// The stuff below is only for compiling a standalone program,\r
+// i.e., without root / aliroot \r
+//\r
+#if !defined(__CINT__)\r
+//______________________________________________________________________\r
+void reduceTimeOuts(){\r
+ // Reduces the grid timeouts\r
+ gEnv->SetValue("XNet.ConnectTimeout" , 20);\r
+ gEnv->SetValue("XNet.RequestTimeout" , 40);\r
+ gEnv->SetValue("XNet.MaxRedirectCount" , 2);\r
+ gEnv->SetValue("XNet.ReconnectWait" , 2);\r
+ gEnv->SetValue("XNet.FirstConnectMaxCnt", 3);\r
+ gEnv->SetValue("XNet.TransactionTimeout",300);\r
+}\r
+//______________________________________________________________________\r
+void printHelp(const char* argv0){\r
+ cout <<"Usuage: "<<argv0<< " [arg1 [arg2]]"<<endl\r
+ <<"Where arg1 can be:"<<endl\r
+ <<" of type int-> gets treated as run number"<<endl\r
+ <<" *.txt -> gets treated as list of run numbers"<<endl\r
+ <<" *.root -> gets treated as OCDB entry"<<endl\r
+ <<" -h,--help -> displays this help"<<endl\r
+ <<"and arg2 can be"<<endl\r
+ <<" -f, --fast -> reduces grid timeouts"<<endl;\r
+}\r
+//______________________________________________________________________\r
+int main(int argc,char** argv){\r
+ // This macro is a standalone program.\r
\r
+ // We change the meaning of the input \r
+ // parameters a bit. See the help message\r
+\r
+ // Error if too many arguments\r
+ if(argc>3){\r
+ cout << "Too many arguments!"<<endl;\r
+ printHelp(argv[0]);\r
+ return 1;\r
+ }\r
\r
-}\r
+ // Check the argument two if any\r
+ if(argc>2){\r
+ if( (!strcmp("-f",argv[2])) ||\r
+ (!strcmp("--fast",argv[2])) ){\r
+ reduceTimeOuts();\r
+ }\r
+ else {\r
+ cout <<"Couldn't recognize your argument "\r
+ <<argv[2]<<endl;\r
+ printHelp(argv[0]);\r
+ return 1;\r
+ }\r
+ }\r
+\r
+ // Check argument one\r
+ if(argc>1){\r
+ // Convert to TString for easier handling\r
+ TString input(argv[1]);\r
+ // Help message\r
+ if( (!strcmp("-h",argv[1])) ||\r
+ (!strcmp("--help",argv[1])) ) {\r
+ printHelp(argv[0]);\r
+ return 0;\r
+ }\r
+ // int aka run number provided\r
+ else if(input.IsDigit()){\r
+ AliTRDcheckConfig(input.Atoi());\r
+ return 0;\r
+ }\r
+ // .root aka OCDB file provided\r
+ else if(input.EndsWith(".root")){\r
+ AliTRDcheckConfig(0,input.Data());\r
+ return 0;\r
+ }\r
+ // .txt aka list of root files provided\r
+ else if(input.EndsWith(".txt")){\r
+ // Open the text file\r
+ ifstream in;\r
+ in.open(Form("%s",input.Data()));\r
+ if (!in.is_open()){\r
+ cout << "F: Could not open file "<<input.Data()<<endl;\r
+ return 1;\r
+ }\r
+ // Loop over entries\r
+ string line;\r
+ TString Line;\r
+ while(in.good()) {\r
+ // Reading the line in the .txt file works fine\r
+ if(!getline(in,line)) break;\r
+ Line=line.data();\r
+ if(Line.IsNull()) continue;\r
+ // Run number provided\r
+ if(Line.IsDigit()){\r
+ AliTRDcheckConfig(Line.Atoi());\r
+ }\r
+ // .root file provided\r
+ else if(Line.EndsWith(".root")){\r
+ AliTRDcheckConfig(0,Line.Data());\r
+ }\r
+ else {\r
+ cout <<"Bad line in .txt file: "\r
+ <<Line.Data()<<endl;\r
+ }\r
+ } // End of loop over .txt file lines\r
+ return 0;\r
+ }\r
+ // Bad input, neither .root nor .txt nor int\r
+ else {\r
+ cout <<"Cannot recognize your input"\r
+ <<input.Data()<<endl;\r
+ printHelp(argv[0]);\r
+ return 1;\r
+ }\r
+ } // End of argc>1\r
+ \r
+ // Without arguments\r
+ AliTRDcheckConfig();\r
+ return 0;\r
+}// End of main\r
+\r
+// End of the non-root part\r
+#endif\r