ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

//===================================================================================
// This is a macro to analyze TRD/Calib/DCS OCDB objects either
// from the grid for a given run number or from a local object.
//
// Arguments:
// Either provide a run number as the first argument to access the 
// corresponding file on the grid
// or the path + filename as the second argument (and an arbitrary number as the first)
// to access a local file.
//
// Please note that leading zeros in the run number are not supported.
//
// Examples:
// .x AliTRDcheckConfig.C (60111)
// .x AliTRDcheckConfig.C (0, "$ALICE_ROOT/TRD/Calib/DCS/Run0_999999999_v0_s0.root")
//
// Original author:
//      Frederick Kramer
// Current maintainer:
//      Hans Beck
//===================================================================================

// Make the macro compile.
#if !defined(__CINT__) || defined(__MAKECINT__)
// Compile me in aliroot with .L AliTRDcheckConfig.C+ or with
// 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
#include <iostream>
#include <fstream>
#include <TMath.h>
#include <TFile.h>
#include <TGrid.h>
#include <TEnv.h>
#include "../../STEER/CDB/AliCDBEntry.h"
#include "../../STEER/CDB/AliCDBManager.h"
#include "../Cal/AliTRDCalDCS.h"
#include "../Cal/AliTRDCalDCSv2.h"
#include "../Cal/AliTRDCalDCSFEE.h"
#include "../Cal/AliTRDCalDCSFEEv2.h"

// Not sure where to put it?
using namespace std;
#endif

const Int_t nROC = 540;
const Int_t nROB = 8;
const Int_t nMCM = 18;
const Int_t cArraySize = 1000;

Bool_t errors;
Int_t  calVer;
//______________________________________________________________________
Int_t AnalyzeArray(Int_t states[cArraySize], Int_t occur[cArraySize]) {
  Int_t srtIndx[cArraySize] = {0};
  
  TMath::Sort(cArraySize, occur, srtIndx);

  Int_t totalSum = 0, subSum = 0, iIndex = 0;
  for (Int_t i=0; i<cArraySize; i++) totalSum += occur[i];
  
  cout << "    The majority ("<< occur[srtIndx[0]] << " of " 
       << totalSum <<") is: " << states[srtIndx[0]] << endl;
  subSum = occur[srtIndx[0]];
  while (totalSum != subSum) {
    if (++iIndex > 999) {
      cout << "E : out of bounds." << endl;
      break;
    }
    Printf("    Next: %7d (%d)", states[srtIndx[iIndex]], occur[srtIndx[iIndex]]);
    subSum += occur[srtIndx[iIndex]];
  }
  return states[srtIndx[0]];
}
//______________________________________________________________________
void FillItemInArray(Int_t states[cArraySize], Int_t occur[cArraySize], Int_t item, Bool_t allowNeg) {
  for (Int_t iArrPos=0; iArrPos<cArraySize; iArrPos++) {
    // if allowNeg is set then we change the number indicating that the item ws not set from -1 to -100
    // so that small negative numbers can be sorted too
    if ((allowNeg && item == -100000) || (!allowNeg && item == -1)) break; // value not set
    if (states[iArrPos] == item) {
      occur[iArrPos]++;
      break;
    } else if (occur[iArrPos] == 0) {
      states[iArrPos] = item;
      occur[iArrPos]++;
      break;
    }
  }
}
//______________________________________________________________________
void GetMajoritys(TObject* calDCSObj) {
  
  // Initializes full array with zeros
  Int_t gsmStates[cArraySize] = {0}, gsmOccur[cArraySize] = {0};
  Int_t nimStates[cArraySize] = {0}, nimOccur[cArraySize] = {0};
  Int_t nevStates[cArraySize] = {0}, nevOccur[cArraySize] = {0};
  Int_t nptStates[cArraySize] = {0}, nptOccur[cArraySize] = {0};
  

  { // Scoped declaration
    Int_t feeArrSiz = 0;
    if (calVer == 1) {
      if(((AliTRDCalDCS*)calDCSObj)->GetFEEArr())
	feeArrSiz = ((AliTRDCalDCS*)calDCSObj)->GetFEEArr()->GetSize();
    }
    else if (calVer == 2) {
      if(((AliTRDCalDCSv2*)calDCSObj)->GetFEEArr())
	feeArrSiz = ((AliTRDCalDCSv2*)calDCSObj)->GetFEEArr()->GetSize();
    }

    TObject* idcsfee;
    for (Int_t i=0; i<nROC && i<feeArrSiz; i++) {
      if (calVer == 1) idcsfee = ((AliTRDCalDCS*)calDCSObj)->GetCalDCSFEEObj(i);
      else if (calVer == 2) idcsfee = ((AliTRDCalDCSv2*)calDCSObj)->GetCalDCSFEEObj(i);
      
      if (idcsfee == NULL) continue;
      
      Int_t sbit(-9999);
      if (calVer == 1) sbit = ((AliTRDCalDCSFEE*)idcsfee)->GetStatusBit();
      else if (calVer == 2) sbit = ((AliTRDCalDCSFEEv2*)idcsfee)->GetStatusBit();
      if (sbit != 0) continue;
      
      for (Int_t j=0; j<nROB; j++) {
	for (Int_t k=0; k<nMCM; k++) {
	  Int_t igsm = 0;
	  Int_t inim = 0;
	  Int_t inev = 0;
	  Int_t inpt = 0;
	  if (calVer == 1) {
	    igsm = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMGlobalState(j,k);
	    inim = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMStateNI(j,k);
	    inev = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMEventCnt(j,k);
	    inpt = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMPtCnt(j,k);
	  }
	  else if (calVer == 2) {
	    igsm = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMGlobalState(j,k);
	    inim = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMStateNI(j,k);
	    inev = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMEventCnt(j,k);
	    inpt = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMPtCnt(j,k);
	  }

	  FillItemInArray(gsmStates, gsmOccur, igsm, false); 
	  FillItemInArray(nimStates, nimOccur, inim, false); 
	  FillItemInArray(nevStates, nevOccur, inev, false); 
	  FillItemInArray(nptStates, nptOccur, inpt, false); 
	} // End of loop over MCMs
      } // End of loop over ROBs
    } // End of loop over ROCs
  } // End of scoped declaration
    
  cout << "I : Global MCM state statistics:" << endl;
  AnalyzeArray(gsmStates, gsmOccur);
  cout << "I : Network interface state statistics:" << endl;
  AnalyzeArray(nimStates, nimOccur);
  cout << "I : MCM Event counter reading statistics:" << endl;
  AnalyzeArray(nevStates, nevOccur);
  cout << "I : MCM PreTrigger counter reading statistics:" << endl;
  AnalyzeArray(nptStates, nptOccur);
  
  return;
}
//______________________________________________________________________
void GetMajorityDifferences(TObject* calDCSObj, TObject* calDCSObj2) {
  
  // Initializes full array with zeros
  Int_t gsmStates[cArraySize] = {0}, gsmOccur[cArraySize] = {0};
  Int_t nimStates[cArraySize] = {0}, nimOccur[cArraySize] = {0};
  Int_t nevStates[cArraySize] = {0}, nevOccur[cArraySize] = {0};
  Int_t nptStates[cArraySize] = {0}, nptOccur[cArraySize] = {0};
  
  
  {  // Scoped declaration
    Int_t feeArrSiz1 = 0;
    Int_t feeArrSiz2 = 0;
    if (calVer == 1) {
      if(((AliTRDCalDCS*)calDCSObj)->GetFEEArr())
	feeArrSiz1 = ((AliTRDCalDCS*)calDCSObj)->GetFEEArr()->GetSize();
      if(((AliTRDCalDCS*)calDCSObj2)->GetFEEArr())
	feeArrSiz2 = ((AliTRDCalDCS*)calDCSObj2)->GetFEEArr()->GetSize();
    }
    else if (calVer == 2) {
      if(((AliTRDCalDCSv2*)calDCSObj)->GetFEEArr())
	feeArrSiz1 = ((AliTRDCalDCSv2*)calDCSObj)->GetFEEArr()->GetSize();
      if(((AliTRDCalDCSv2*)calDCSObj2)->GetFEEArr())
	feeArrSiz2 = ((AliTRDCalDCSv2*)calDCSObj2)->GetFEEArr()->GetSize();
    }

    TObject* idcsfee;
    TObject* idcsfee2;
    for (Int_t i=0; i<nROC && i<feeArrSiz1 && i<feeArrSiz2; i++) {
      if (calVer == 1) {
	idcsfee  = ((AliTRDCalDCS*)calDCSObj)->GetCalDCSFEEObj(i);
	idcsfee2 = ((AliTRDCalDCS*)calDCSObj2)->GetCalDCSFEEObj(i);
      }
      else if (calVer == 2) {
	idcsfee  = ((AliTRDCalDCSv2*)calDCSObj)->GetCalDCSFEEObj(i);
	idcsfee2 = ((AliTRDCalDCSv2*)calDCSObj2)->GetCalDCSFEEObj(i);
      }
      if ((idcsfee == NULL) || (idcsfee2 == NULL)) continue;
      
      Int_t sbit(-9999);
      if (calVer == 1) sbit = ((AliTRDCalDCSFEE*)idcsfee)->GetStatusBit();
      else if (calVer == 2) sbit = ((AliTRDCalDCSFEEv2*)idcsfee)->GetStatusBit();
      if (sbit != 0) continue;
      
      for (Int_t j=0; j<nROB; j++) {
	for (Int_t k=0; k<nMCM; k++) {
	  Int_t igsm, inim, inev, inpt, igsm1, inim1, inev1, inpt1, igsm2, inim2, inev2, inpt2;
	  if (calVer == 1) {
	    igsm1 = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMGlobalState(j,k);
	    inim1 = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMStateNI(j,k);
	    inev1 = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMEventCnt(j,k);
	    inpt1 = ((AliTRDCalDCSFEE*)idcsfee)->GetMCMPtCnt(j,k);
	    igsm2 = ((AliTRDCalDCSFEE*)idcsfee2)->GetMCMGlobalState(j,k);
	    inim2 = ((AliTRDCalDCSFEE*)idcsfee2)->GetMCMStateNI(j,k);
	    inev2 = ((AliTRDCalDCSFEE*)idcsfee2)->GetMCMEventCnt(j,k);
	    inpt2 = ((AliTRDCalDCSFEE*)idcsfee2)->GetMCMPtCnt(j,k);
	  }
	  else if (calVer == 2) {
	    igsm1 = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMGlobalState(j,k);
	    inim1 = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMStateNI(j,k);
	    inev1 = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMEventCnt(j,k);
	    inpt1 = ((AliTRDCalDCSFEEv2*)idcsfee)->GetMCMPtCnt(j,k);
	    igsm2 = ((AliTRDCalDCSFEEv2*)idcsfee2)->GetMCMGlobalState(j,k);
	    inim2 = ((AliTRDCalDCSFEEv2*)idcsfee2)->GetMCMStateNI(j,k);
	    inev2 = ((AliTRDCalDCSFEEv2*)idcsfee2)->GetMCMEventCnt(j,k);
	    inpt2 = ((AliTRDCalDCSFEEv2*)idcsfee2)->GetMCMPtCnt(j,k);
	  }
	  
	  igsm = igsm1 - igsm2;
	  inim = inim1 - inim2;
	  inev = inev2 - inev1;
	  inpt = inpt2 - inpt1;
	  
	  // if they were set to -1, it means they were not actauuly set
	  // change -1 to -100 to mean they werent set since the above 
	  // can give negatives
	  if (igsm1 == -1 && igsm == 0) igsm =-100000;
	  if (inim1 == -1 && inim == 0) inim =-100000;
	  if (inev1 == -1 && inev == 0) inev =-100000;
	  if (inpt1 == -1 && inpt == 0) inpt =-100000;
	  
	  FillItemInArray(gsmStates, gsmOccur, igsm, true); 
	  FillItemInArray(nimStates, nimOccur, inim, true); 
	  FillItemInArray(nevStates, nevOccur, inev, true); 
	  FillItemInArray(nptStates, nptOccur, inpt, true); 
	} // End of loop over MCMs
      } // End of loop over ROBs
    } // End of loop over ROCs
  } // End of scoped declaration
  
  cout << "I : Global MCM state difference statistics:" << endl;
  AnalyzeArray(gsmStates, gsmOccur);
  cout << "I : Network interface state difference statistics:" << endl;
  AnalyzeArray(nimStates, nimOccur);
  cout << "I : MCM Event counter difference statistics:" << endl;
  if (AnalyzeArray(nevStates, nevOccur) < 1) {
    cout << "E : There should have been some events recorded, but there weren't" << endl;
    errors = true;
  }
  cout << "I : MCM PreTrigger counter difference statistics:" << endl;
  if (AnalyzeArray(nptStates, nptOccur) < 1) {
    cout << "E : There should have been some events recorded, but there weren't" << endl;
    errors = true;
  }
  
  return;
}
//______________________________________________________________________
void WrappedAliTRDcheckConfig(Int_t runNr, const char *pathfile,TFile *f){
  // Reset the 'errors occured' bool as it's global
  errors=false;
  
  AliCDBEntry *entry=0;
  TString pathfilets(pathfile);

  // get the source
  if(pathfilets.Contains("nopathgiven")) {
    cout << "I : Accessing grid storage for run number " << runNr << endl;
    cout << "I : Get CDBManager instance." << endl;
    AliCDBManager *man = AliCDBManager::Instance();
    cout << "I : SetDefaultStorage." << endl;
    man->SetDefaultStorageFromRun(runNr);

    cout << "I : Get OCDB Entry." << endl;
    entry = man->Get("TRD/Calib/DCS", runNr);
    if (entry == NULL) {
      cout << endl << "ERROR: Unable to get the AliTRDCalDCS object"
	   << "from the OCDB for run number " << runNr << "." << endl;
      return;
    }
  } else {
    cout << "I : Accessing file directly" << endl;
    // Might be we want to check a file on the grid
    if(pathfilets.BeginsWith("alien://"))
      TGrid::Connect("alien://");
    f = TFile::Open(pathfile);
    if(f != NULL) {
      entry = (AliCDBEntry*) f->Get("AliCDBEntry");
      if(!entry){
	cout << "E : Can not get the OCDB entry"<<endl;
	return;
      }
    }
    else {
      cout << "E : Cannot open file" << endl;
      return;
    }
  }
  
  TObjArray *objArrayCDB = (TObjArray*)entry->GetObject();
  if(!objArrayCDB){
    cout << "E : Can not get the OCDB object"<<endl;
    return;
  }
  
  Int_t iesor=0;
  for (iesor=0; iesor<3; iesor++) if(objArrayCDB->At(iesor)) break;
  if (iesor > 1) {
    cout << "E : Neither the start or end of run objects were in the root file.";
    return;
  }

  Bool_t hasSOR = (objArrayCDB->At(0));
  Bool_t hasEOR = (objArrayCDB->At(1));
  printf("SOR entry: %d, EOR entry: %d\n", hasSOR, hasEOR);

  if (!strcmp(objArrayCDB->At(iesor)->ClassName(),"AliTRDCalDCS"))   calVer = 1;
  else if (!strcmp(objArrayCDB->At(iesor)->ClassName(),"AliTRDCalDCSv2")) calVer = 2;
  else {  
    cout << "E : Object types undefined.";
    return;
  }

  Bool_t sorandeor = true;
  TObject *caldcs  = objArrayCDB->At(0);
  TObject *caldcs2 = objArrayCDB->At(1);

  if (caldcs == NULL && caldcs2 == NULL) {
    cout << "E : Neither the start or end of run objects were in the root file.";
    return;
  } else if (caldcs != NULL && caldcs2 == NULL) {
    cout << "E : The EOR file was not in the root file.";
    errors = true;
    sorandeor = false;
  } else if (caldcs == NULL && caldcs2 != NULL) {
    cout << "E : The SOR file was not in the root file.";
    errors = true;
    sorandeor = false;
    caldcs = caldcs2;
  }

  cout << endl << "============ Non responding ROC Summary: ============" << endl;
  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: ";
  Int_t lengthfive = bitfivestr.Length();
  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: ";
  Int_t lengthfour = bitfourstr.Length();
  TString bitthreestr = " ROCs with status bit 3! BAD! data from fee server was old or corrupt.\n    DCS IDs: ";
  Int_t lengththree = bitthreestr.Length();
  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: ";
  Int_t lengthtwo = bittwostr.Length();
  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: ";
  Int_t lengthone = bitonestr.Length();


  Int_t nSB1=0, nSB2=0, nSB3=0, nSB4=0, nSB5=0, nTot=0, nChanged=0;
  { // Scoped declaration

    // Determine the size of the array
    Int_t feeArrSiz = 0;
    if (calVer == 1) {
      if(((AliTRDCalDCS*)caldcs)->GetFEEArr())
	feeArrSiz = ((AliTRDCalDCS*)caldcs)->GetFEEArr()->GetSize();
    }
    else if (calVer == 2) {
      if(((AliTRDCalDCSv2*)caldcs)->GetFEEArr())
	feeArrSiz = ((AliTRDCalDCSv2*)caldcs)->GetFEEArr()->GetSize();
    }

    // Check the status/error bist for each ROC
    TObject* idcsfee;
    TObject* idcsfee2;
    // Loop over the ROCs / the array
    for (Int_t i=0; i<nROC && i<feeArrSiz; i++) {
      if (calVer == 1) idcsfee = ((AliTRDCalDCS*)caldcs)->GetCalDCSFEEObj(i);
      else if (calVer == 2) idcsfee = ((AliTRDCalDCSv2*)caldcs)->GetCalDCSFEEObj(i);
      if (idcsfee != NULL) {
	Int_t sb;
	if (calVer == 1) sb = ((AliTRDCalDCSFEE*)idcsfee)->GetStatusBit();
	else if (calVer == 2) sb = ((AliTRDCalDCSFEEv2*)idcsfee)->GetStatusBit();
	if (sb == 5) { bitfivestr  += i; bitfivestr  += "  "; nSB5++; }
	else if (sb == 4) { bitfourstr  += i; bitfourstr  += "  "; nSB4++; errors = true; }
	else if (sb == 3) { bitthreestr += i; bitthreestr += "  "; nSB3++; errors = true; }
	else if (sb == 2) { bittwostr   += i; bittwostr   += "  "; nSB2++; }
	else if (sb == 1) { bitonestr   += i; bitonestr   += "  "; nSB1++; errors = true; }
	nTot += 1;
      }
    } // End of loop over ROCs

    // Print the statistcs for the status/error bits
    if (lengthfive < bitfivestr.Length()) cout << nSB5 << bitfivestr.Data() << endl << endl;
    if (lengthfour < bitfourstr.Length()) cout << nSB4 << bitfourstr.Data() << endl << endl;
    if (lengththree < bitthreestr.Length()) cout << nSB3 << bitthreestr.Data() << endl << endl;
    if (lengthtwo < bittwostr.Length()) cout << nSB2 << bittwostr.Data() << endl << endl;
    if (lengthone < bitonestr.Length()) cout << nSB1 << bitonestr.Data() << endl << endl;
    
    cout << "The remaining " << nTot-(nSB1+nSB2+nSB3+nSB4+nSB5) << " ROCs responded correctly in the start of run."<<endl;
    
    // Reusing nTot
    nTot=0;
    for (Int_t i=0; i<nROC && i<feeArrSiz; i++) {
      if (calVer == 1) {
	if (caldcs)  idcsfee  = ((AliTRDCalDCS*)caldcs)->GetCalDCSFEEObj(i);
	if (caldcs2) idcsfee2 = ((AliTRDCalDCS*)caldcs2)->GetCalDCSFEEObj(i);
      }
      else if (calVer == 2) {
	if (caldcs)  idcsfee  = ((AliTRDCalDCSv2*)caldcs)->GetCalDCSFEEObj(i);
	if (caldcs2) idcsfee2 = ((AliTRDCalDCSv2*)caldcs2)->GetCalDCSFEEObj(i);
      }
      if (idcsfee != NULL && idcsfee2 != NULL) {
	Int_t sbd1 = 0;
	Int_t sbd2 = 0;
	if (calVer == 1) {
	  sbd1 = ((AliTRDCalDCSFEE*)idcsfee)->GetStatusBit();
	  sbd2 = ((AliTRDCalDCSFEE*)idcsfee2)->GetStatusBit();
	}
	if (calVer == 2) {
	  sbd1 = ((AliTRDCalDCSFEEv2*)idcsfee)->GetStatusBit();
	  sbd2 = ((AliTRDCalDCSFEEv2*)idcsfee2)->GetStatusBit();
	}
	Int_t sbd = sbd1 - sbd2;
	if (sbd != 0) { 
	  cout << "ROC " << i << " changed from state " << sbd1 << " at start of the run to "  << sbd2 << " at the end of the run." << endl;
	  cout << "ROC " << i << " changed from state " << sbd1 << " at start of the run to "  << sbd2 << " at the end of the run." << endl;
	  nChanged++; 
	}
	nTot += 1;
      }
    } // End of loop over ROCs
  } // End of scoped declaration
  if (nChanged == 0) {
    cout << "No ROCs changed state between the start and end of the run" << endl;
  } else {
    cout << "E : " << nChanged << " out of " << nTot << " ROCs changed state during the run" << endl;
    errors = true; 
  }

  cout << endl << "============ Statistics from RSTATE: ============" << endl;
  cout<<"I : The majority entry is given as well as all other values," << endl;
  cout<<"    sorted according to their occurrence." << endl << endl;
  GetMajoritys(caldcs);
  if (sorandeor) GetMajorityDifferences(caldcs,caldcs2);

  cout << endl << "============ Global Configuraton: ============" << endl;
  cout<<"I : Anything not listed is not set, mixed numbers are indicated with a" << endl;
  cout<<"    value of -2 and strings are set to 'mixed' if they're mixed." << endl << endl;
 
  Int_t   gtb, gct, gsh, gtc, gsz, gfw, gfs, gfl, gsn;
  TString gcv, gcn, gft, grp, gtp, gtm, gtd, gts, gao;

  if (calVer == 1) {
    gtb = ((AliTRDCalDCS*)caldcs)->GetGlobalNumberOfTimeBins();
    gct = ((AliTRDCalDCS*)caldcs)->GetGlobalConfigTag();
    gsh = ((AliTRDCalDCS*)caldcs)->GetGlobalSingleHitThres();
    gtc = ((AliTRDCalDCS*)caldcs)->GetGlobalThreePadClustThres();
    gsz = ((AliTRDCalDCS*)caldcs)->GetGlobalSelectiveNoZS();
    gfw = ((AliTRDCalDCS*)caldcs)->GetGlobalTCFilterWeight();
    gfs = ((AliTRDCalDCS*)caldcs)->GetGlobalTCFilterShortDecPar();
    gfl = ((AliTRDCalDCS*)caldcs)->GetGlobalTCFilterLongDecPar();
    gsn = ((AliTRDCalDCS*)caldcs)->GetGlobalModeFastStatNoise();
    gcv = ((AliTRDCalDCS*)caldcs)->GetGlobalConfigVersion();
    gcn = ((AliTRDCalDCS*)caldcs)->GetGlobalConfigName();
    gft = ((AliTRDCalDCS*)caldcs)->GetGlobalFilterType();
    grp = ((AliTRDCalDCS*)caldcs)->GetGlobalReadoutParam();
    gtp = ((AliTRDCalDCS*)caldcs)->GetGlobalTestPattern();
    gtm = ((AliTRDCalDCS*)caldcs)->GetGlobalTrackletMode();
    gtd = ((AliTRDCalDCS*)caldcs)->GetGlobalTrackletDef();
    gts = ((AliTRDCalDCS*)caldcs)->GetGlobalTriggerSetup();
    gao = ((AliTRDCalDCS*)caldcs)->GetGlobalAddOptions();
  }
  else if (calVer == 2) {
    gtb = ((AliTRDCalDCSv2*)caldcs)->GetGlobalNumberOfTimeBins();
    gct = ((AliTRDCalDCSv2*)caldcs)->GetGlobalConfigTag();
    gsh = ((AliTRDCalDCSv2*)caldcs)->GetGlobalSingleHitThres();
    gtc = ((AliTRDCalDCSv2*)caldcs)->GetGlobalThreePadClustThres();
    gsz = ((AliTRDCalDCSv2*)caldcs)->GetGlobalSelectiveNoZS();
    gfw = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTCFilterWeight();
    gfs = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTCFilterShortDecPar();
    gfl = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTCFilterLongDecPar();
    gsn = ((AliTRDCalDCSv2*)caldcs)->GetGlobalModeFastStatNoise();
    gcv = ((AliTRDCalDCSv2*)caldcs)->GetGlobalConfigVersion();
    gcn = ((AliTRDCalDCSv2*)caldcs)->GetGlobalConfigName();
    gft = ((AliTRDCalDCSv2*)caldcs)->GetGlobalFilterType();
    grp = ((AliTRDCalDCSv2*)caldcs)->GetGlobalReadoutParam();
    gtp = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTestPattern();
    gtm = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTrackletMode();
    gtd = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTrackletDef();
    gts = ((AliTRDCalDCSv2*)caldcs)->GetGlobalTriggerSetup();
    gao = ((AliTRDCalDCSv2*)caldcs)->GetGlobalAddOptions();
  }


  if (gtb != -1) cout<<"Global number of time bins.........................: "<< gtb << endl;
  if (gct != -1) cout<<"Global configuration tag...........................: "<< gct << endl;
  if (gsh != -1) cout<<"Global single hit threshold........................: "<< gsh << endl;
  if (gtc != -1) cout<<"Global three pad cluster threshold.................: "<< gtc << endl;
  if (gsz != -1) cout<<"Global selective ZS (every i'th event).............: "<< gsz << endl;
  if (gfw != -1) cout<<"Global tail cancellation filter weight.............: "<< gfs << endl;
  if (gfs != -1) cout<<"Global tail cancellat. filter short decay parameter: "<< gfs << endl;
  if (gfl != -1) cout<<"Global tail cancellation filt. long decay parameter: "<< gfl << endl;
  if (gsn != -1) cout<<"Global fast statistics mode?.......................: "<< gsn << endl;
  if (gcv != "") cout<<"Global configuration tag version...................: "<< gcv << endl;
  if (gcn != "") cout<<"Global configuration tag name......................: "<< gcn << endl;
  if (gft != "") cout<<"Global filter type.................................: "<< gft << endl;
  if (grp != "") cout<<"Global readout parameter...........................: "<< grp << endl;
  if (gtp != "") cout<<"Global test pattern................................: "<< gtp << endl;
  if (gtm != "") cout<<"Global tracklet mode...............................: "<< gtm << endl;
  if (gtd != "") cout<<"Global tracklet definition.........................: "<< gtd << endl;
  if (gts != "") cout<<"Global trigger setup...............................: "<< gts << endl;
  if (gao != "") cout<<"Global additional options..........................: "<< gao << endl;
  
  cout << endl << "============ Error Summary: ============" << endl;
  if (errors) {
    cout<<"    I noticed some errors, please see above for the specifics." << endl;
  } else {
    cout<<"    I didn't notice any errors, but that doesn't mean there weren't any!" << endl;
  }
//______________________________________________________________________
}
void AliTRDcheckConfig(Int_t runNr=0, const char *pathfile="nopathgiven"){
  // Wrapping the function to be able to clean up
  TFile *f=0;
  WrappedAliTRDcheckConfig(runNr,pathfile,f);
  AliCDBManager::Destroy();
  if(f){
    delete f; // Destructor calls TFile::Close()
    f=0;
  }
}
//______________________________________________________________________
//
// The stuff below is only for compiling a standalone program,
// i.e., without root / aliroot 
//
#if !defined(__CINT__)
//______________________________________________________________________
void reduceTimeOuts(){
  // Reduces the grid timeouts
  gEnv->SetValue("XNet.ConnectTimeout"    , 20);
  gEnv->SetValue("XNet.RequestTimeout"    , 40);
  gEnv->SetValue("XNet.MaxRedirectCount"  ,  2);
  gEnv->SetValue("XNet.ReconnectWait"     ,  2);
  gEnv->SetValue("XNet.FirstConnectMaxCnt",  3);
  gEnv->SetValue("XNet.TransactionTimeout",300);
}
//______________________________________________________________________
void printHelp(const char* argv0){
  cout <<"Usuage: "<<argv0<< " [arg1 [arg2]]"<<endl
       <<"Where arg1 can be:"<<endl
       <<"  of type int-> gets treated as run number"<<endl
       <<"  *.txt      -> gets treated as list of run numbers"<<endl
       <<"  *.root     -> gets treated as OCDB entry"<<endl
       <<"  -h,--help  -> displays this help"<<endl
       <<"and arg2 can be"<<endl
       <<"  -f, --fast   -> reduces grid timeouts"<<endl;
}
//______________________________________________________________________
int main(int argc,char** argv){
  // This macro is a standalone program.
  
  // We change the meaning of the input 
  // parameters a bit. See the help message

  // Error if too many arguments
  if(argc>3){
    cout << "Too many arguments!"<<endl;
    printHelp(argv[0]);
    return 1;
  }

  // Check the argument two if any
  if(argc>2){
    if( (!strcmp("-f",argv[2])) ||
	(!strcmp("--fast",argv[2])) ){
      reduceTimeOuts();
    }
    else {
      cout <<"Couldn't recognize your argument "
	   <<argv[2]<<endl;
      printHelp(argv[0]);
      return 1;
    }
  }

  // Check argument one
  if(argc>1){
    // Convert to TString for easier handling
    TString input(argv[1]);
    // Help message
    if( (!strcmp("-h",argv[1])) ||
	(!strcmp("--help",argv[1])) ) {
      printHelp(argv[0]);
      return 0;
    }
    // int aka run number provided
    else if(input.IsDigit()){
      AliTRDcheckConfig(input.Atoi());
      return 0;
    }
    // .root aka OCDB file provided
    else if(input.EndsWith(".root")){
      AliTRDcheckConfig(0,input.Data());
      return 0;
    }
    // .txt aka list of root files provided
    else if(input.EndsWith(".txt")){
      // Open the text file
      ifstream in;
      in.open(Form("%s",input.Data()));
      if (!in.is_open()){
	cout << "F: Could not open file "<<input.Data()<<endl;
	return 1;
      }
      // Loop over entries
      string line;
      TString Line;
      while(in.good()) {
	// Reading the line in the .txt file works fine
	if(!getline(in,line)) break;
	Line=line.data();
	if(Line.IsNull()) continue;
	// Run number provided
	if(Line.IsDigit()){
	  AliTRDcheckConfig(Line.Atoi());
	}
	// .root file provided
	else if(Line.EndsWith(".root")){
	  AliTRDcheckConfig(0,Line.Data());
	}
	else {
	  cout <<"Bad line in .txt file: "
	       <<Line.Data()<<endl;
	}
      } // End of loop over .txt file lines
      return 0;
    }
    // Bad input, neither .root nor .txt nor int
    else {
      cout <<"Cannot recognize your input"
	   <<input.Data()<<endl;
      printHelp(argv[0]);
      return 1;
    }
  } // End of argc>1
  
  // Without arguments
  AliTRDcheckConfig();
  return 0;
}// End of main

// End of the non-root part
#endif
 AliTRDcheckConfig.C:1
 AliTRDcheckConfig.C:2
 AliTRDcheckConfig.C:3
 AliTRDcheckConfig.C:4
 AliTRDcheckConfig.C:5
 AliTRDcheckConfig.C:6
 AliTRDcheckConfig.C:7
 AliTRDcheckConfig.C:8
 AliTRDcheckConfig.C:9
 AliTRDcheckConfig.C:10
 AliTRDcheckConfig.C:11
 AliTRDcheckConfig.C:12
 AliTRDcheckConfig.C:13
 AliTRDcheckConfig.C:14
 AliTRDcheckConfig.C:15
 AliTRDcheckConfig.C:16
 AliTRDcheckConfig.C:17
 AliTRDcheckConfig.C:18
 AliTRDcheckConfig.C:19
 AliTRDcheckConfig.C:20
 AliTRDcheckConfig.C:21
 AliTRDcheckConfig.C:22
 AliTRDcheckConfig.C:23
 AliTRDcheckConfig.C:24
 AliTRDcheckConfig.C:25
 AliTRDcheckConfig.C:26
 AliTRDcheckConfig.C:27
 AliTRDcheckConfig.C:28
 AliTRDcheckConfig.C:29
 AliTRDcheckConfig.C:30
 AliTRDcheckConfig.C:31
 AliTRDcheckConfig.C:32
 AliTRDcheckConfig.C:33
 AliTRDcheckConfig.C:34
 AliTRDcheckConfig.C:35
 AliTRDcheckConfig.C:36
 AliTRDcheckConfig.C:37
 AliTRDcheckConfig.C:38
 AliTRDcheckConfig.C:39
 AliTRDcheckConfig.C:40
 AliTRDcheckConfig.C:41
 AliTRDcheckConfig.C:42
 AliTRDcheckConfig.C:43
 AliTRDcheckConfig.C:44
 AliTRDcheckConfig.C:45
 AliTRDcheckConfig.C:46
 AliTRDcheckConfig.C:47
 AliTRDcheckConfig.C:48
 AliTRDcheckConfig.C:49
 AliTRDcheckConfig.C:50
 AliTRDcheckConfig.C:51
 AliTRDcheckConfig.C:52
 AliTRDcheckConfig.C:53
 AliTRDcheckConfig.C:54
 AliTRDcheckConfig.C:55
 AliTRDcheckConfig.C:56
 AliTRDcheckConfig.C:57
 AliTRDcheckConfig.C:58
 AliTRDcheckConfig.C:59
 AliTRDcheckConfig.C:60
 AliTRDcheckConfig.C:61
 AliTRDcheckConfig.C:62
 AliTRDcheckConfig.C:63
 AliTRDcheckConfig.C:64
 AliTRDcheckConfig.C:65
 AliTRDcheckConfig.C:66
 AliTRDcheckConfig.C:67
 AliTRDcheckConfig.C:68
 AliTRDcheckConfig.C:69
 AliTRDcheckConfig.C:70
 AliTRDcheckConfig.C:71
 AliTRDcheckConfig.C:72
 AliTRDcheckConfig.C:73
 AliTRDcheckConfig.C:74
 AliTRDcheckConfig.C:75
 AliTRDcheckConfig.C:76
 AliTRDcheckConfig.C:77
 AliTRDcheckConfig.C:78
 AliTRDcheckConfig.C:79
 AliTRDcheckConfig.C:80
 AliTRDcheckConfig.C:81
 AliTRDcheckConfig.C:82
 AliTRDcheckConfig.C:83
 AliTRDcheckConfig.C:84
 AliTRDcheckConfig.C:85
 AliTRDcheckConfig.C:86
 AliTRDcheckConfig.C:87
 AliTRDcheckConfig.C:88
 AliTRDcheckConfig.C:89
 AliTRDcheckConfig.C:90
 AliTRDcheckConfig.C:91
 AliTRDcheckConfig.C:92
 AliTRDcheckConfig.C:93
 AliTRDcheckConfig.C:94
 AliTRDcheckConfig.C:95
 AliTRDcheckConfig.C:96
 AliTRDcheckConfig.C:97
 AliTRDcheckConfig.C:98
 AliTRDcheckConfig.C:99
 AliTRDcheckConfig.C:100
 AliTRDcheckConfig.C:101
 AliTRDcheckConfig.C:102
 AliTRDcheckConfig.C:103
 AliTRDcheckConfig.C:104
 AliTRDcheckConfig.C:105
 AliTRDcheckConfig.C:106
 AliTRDcheckConfig.C:107
 AliTRDcheckConfig.C:108
 AliTRDcheckConfig.C:109
 AliTRDcheckConfig.C:110
 AliTRDcheckConfig.C:111
 AliTRDcheckConfig.C:112
 AliTRDcheckConfig.C:113
 AliTRDcheckConfig.C:114
 AliTRDcheckConfig.C:115
 AliTRDcheckConfig.C:116
 AliTRDcheckConfig.C:117
 AliTRDcheckConfig.C:118
 AliTRDcheckConfig.C:119
 AliTRDcheckConfig.C:120
 AliTRDcheckConfig.C:121
 AliTRDcheckConfig.C:122
 AliTRDcheckConfig.C:123
 AliTRDcheckConfig.C:124
 AliTRDcheckConfig.C:125
 AliTRDcheckConfig.C:126
 AliTRDcheckConfig.C:127
 AliTRDcheckConfig.C:128
 AliTRDcheckConfig.C:129
 AliTRDcheckConfig.C:130
 AliTRDcheckConfig.C:131
 AliTRDcheckConfig.C:132
 AliTRDcheckConfig.C:133
 AliTRDcheckConfig.C:134
 AliTRDcheckConfig.C:135
 AliTRDcheckConfig.C:136
 AliTRDcheckConfig.C:137
 AliTRDcheckConfig.C:138
 AliTRDcheckConfig.C:139
 AliTRDcheckConfig.C:140
 AliTRDcheckConfig.C:141
 AliTRDcheckConfig.C:142
 AliTRDcheckConfig.C:143
 AliTRDcheckConfig.C:144
 AliTRDcheckConfig.C:145
 AliTRDcheckConfig.C:146
 AliTRDcheckConfig.C:147
 AliTRDcheckConfig.C:148
 AliTRDcheckConfig.C:149
 AliTRDcheckConfig.C:150
 AliTRDcheckConfig.C:151
 AliTRDcheckConfig.C:152
 AliTRDcheckConfig.C:153
 AliTRDcheckConfig.C:154
 AliTRDcheckConfig.C:155
 AliTRDcheckConfig.C:156
 AliTRDcheckConfig.C:157
 AliTRDcheckConfig.C:158
 AliTRDcheckConfig.C:159
 AliTRDcheckConfig.C:160
 AliTRDcheckConfig.C:161
 AliTRDcheckConfig.C:162
 AliTRDcheckConfig.C:163
 AliTRDcheckConfig.C:164
 AliTRDcheckConfig.C:165
 AliTRDcheckConfig.C:166
 AliTRDcheckConfig.C:167
 AliTRDcheckConfig.C:168
 AliTRDcheckConfig.C:169
 AliTRDcheckConfig.C:170
 AliTRDcheckConfig.C:171
 AliTRDcheckConfig.C:172
 AliTRDcheckConfig.C:173
 AliTRDcheckConfig.C:174
 AliTRDcheckConfig.C:175
 AliTRDcheckConfig.C:176
 AliTRDcheckConfig.C:177
 AliTRDcheckConfig.C:178
 AliTRDcheckConfig.C:179
 AliTRDcheckConfig.C:180
 AliTRDcheckConfig.C:181
 AliTRDcheckConfig.C:182
 AliTRDcheckConfig.C:183
 AliTRDcheckConfig.C:184
 AliTRDcheckConfig.C:185
 AliTRDcheckConfig.C:186
 AliTRDcheckConfig.C:187
 AliTRDcheckConfig.C:188
 AliTRDcheckConfig.C:189
 AliTRDcheckConfig.C:190
 AliTRDcheckConfig.C:191
 AliTRDcheckConfig.C:192
 AliTRDcheckConfig.C:193
 AliTRDcheckConfig.C:194
 AliTRDcheckConfig.C:195
 AliTRDcheckConfig.C:196
 AliTRDcheckConfig.C:197
 AliTRDcheckConfig.C:198
 AliTRDcheckConfig.C:199
 AliTRDcheckConfig.C:200
 AliTRDcheckConfig.C:201
 AliTRDcheckConfig.C:202
 AliTRDcheckConfig.C:203
 AliTRDcheckConfig.C:204
 AliTRDcheckConfig.C:205
 AliTRDcheckConfig.C:206
 AliTRDcheckConfig.C:207
 AliTRDcheckConfig.C:208
 AliTRDcheckConfig.C:209
 AliTRDcheckConfig.C:210
 AliTRDcheckConfig.C:211
 AliTRDcheckConfig.C:212
 AliTRDcheckConfig.C:213
 AliTRDcheckConfig.C:214
 AliTRDcheckConfig.C:215
 AliTRDcheckConfig.C:216
 AliTRDcheckConfig.C:217
 AliTRDcheckConfig.C:218
 AliTRDcheckConfig.C:219
 AliTRDcheckConfig.C:220
 AliTRDcheckConfig.C:221
 AliTRDcheckConfig.C:222
 AliTRDcheckConfig.C:223
 AliTRDcheckConfig.C:224
 AliTRDcheckConfig.C:225
 AliTRDcheckConfig.C:226
 AliTRDcheckConfig.C:227
 AliTRDcheckConfig.C:228
 AliTRDcheckConfig.C:229
 AliTRDcheckConfig.C:230
 AliTRDcheckConfig.C:231
 AliTRDcheckConfig.C:232
 AliTRDcheckConfig.C:233
 AliTRDcheckConfig.C:234
 AliTRDcheckConfig.C:235
 AliTRDcheckConfig.C:236
 AliTRDcheckConfig.C:237
 AliTRDcheckConfig.C:238
 AliTRDcheckConfig.C:239
 AliTRDcheckConfig.C:240
 AliTRDcheckConfig.C:241
 AliTRDcheckConfig.C:242
 AliTRDcheckConfig.C:243
 AliTRDcheckConfig.C:244
 AliTRDcheckConfig.C:245
 AliTRDcheckConfig.C:246
 AliTRDcheckConfig.C:247
 AliTRDcheckConfig.C:248
 AliTRDcheckConfig.C:249
 AliTRDcheckConfig.C:250
 AliTRDcheckConfig.C:251
 AliTRDcheckConfig.C:252
 AliTRDcheckConfig.C:253
 AliTRDcheckConfig.C:254
 AliTRDcheckConfig.C:255
 AliTRDcheckConfig.C:256
 AliTRDcheckConfig.C:257
 AliTRDcheckConfig.C:258
 AliTRDcheckConfig.C:259
 AliTRDcheckConfig.C:260
 AliTRDcheckConfig.C:261
 AliTRDcheckConfig.C:262
 AliTRDcheckConfig.C:263
 AliTRDcheckConfig.C:264
 AliTRDcheckConfig.C:265
 AliTRDcheckConfig.C:266
 AliTRDcheckConfig.C:267
 AliTRDcheckConfig.C:268
 AliTRDcheckConfig.C:269
 AliTRDcheckConfig.C:270
 AliTRDcheckConfig.C:271
 AliTRDcheckConfig.C:272
 AliTRDcheckConfig.C:273
 AliTRDcheckConfig.C:274
 AliTRDcheckConfig.C:275
 AliTRDcheckConfig.C:276
 AliTRDcheckConfig.C:277
 AliTRDcheckConfig.C:278
 AliTRDcheckConfig.C:279
 AliTRDcheckConfig.C:280
 AliTRDcheckConfig.C:281
 AliTRDcheckConfig.C:282
 AliTRDcheckConfig.C:283
 AliTRDcheckConfig.C:284
 AliTRDcheckConfig.C:285
 AliTRDcheckConfig.C:286
 AliTRDcheckConfig.C:287
 AliTRDcheckConfig.C:288
 AliTRDcheckConfig.C:289
 AliTRDcheckConfig.C:290
 AliTRDcheckConfig.C:291
 AliTRDcheckConfig.C:292
 AliTRDcheckConfig.C:293
 AliTRDcheckConfig.C:294
 AliTRDcheckConfig.C:295
 AliTRDcheckConfig.C:296
 AliTRDcheckConfig.C:297
 AliTRDcheckConfig.C:298
 AliTRDcheckConfig.C:299
 AliTRDcheckConfig.C:300
 AliTRDcheckConfig.C:301
 AliTRDcheckConfig.C:302
 AliTRDcheckConfig.C:303
 AliTRDcheckConfig.C:304
 AliTRDcheckConfig.C:305
 AliTRDcheckConfig.C:306
 AliTRDcheckConfig.C:307
 AliTRDcheckConfig.C:308
 AliTRDcheckConfig.C:309
 AliTRDcheckConfig.C:310
 AliTRDcheckConfig.C:311
 AliTRDcheckConfig.C:312
 AliTRDcheckConfig.C:313
 AliTRDcheckConfig.C:314
 AliTRDcheckConfig.C:315
 AliTRDcheckConfig.C:316
 AliTRDcheckConfig.C:317
 AliTRDcheckConfig.C:318
 AliTRDcheckConfig.C:319
 AliTRDcheckConfig.C:320
 AliTRDcheckConfig.C:321
 AliTRDcheckConfig.C:322
 AliTRDcheckConfig.C:323
 AliTRDcheckConfig.C:324
 AliTRDcheckConfig.C:325
 AliTRDcheckConfig.C:326
 AliTRDcheckConfig.C:327
 AliTRDcheckConfig.C:328
 AliTRDcheckConfig.C:329
 AliTRDcheckConfig.C:330
 AliTRDcheckConfig.C:331
 AliTRDcheckConfig.C:332
 AliTRDcheckConfig.C:333
 AliTRDcheckConfig.C:334
 AliTRDcheckConfig.C:335
 AliTRDcheckConfig.C:336
 AliTRDcheckConfig.C:337
 AliTRDcheckConfig.C:338
 AliTRDcheckConfig.C:339
 AliTRDcheckConfig.C:340
 AliTRDcheckConfig.C:341
 AliTRDcheckConfig.C:342
 AliTRDcheckConfig.C:343
 AliTRDcheckConfig.C:344
 AliTRDcheckConfig.C:345
 AliTRDcheckConfig.C:346
 AliTRDcheckConfig.C:347
 AliTRDcheckConfig.C:348
 AliTRDcheckConfig.C:349
 AliTRDcheckConfig.C:350
 AliTRDcheckConfig.C:351
 AliTRDcheckConfig.C:352
 AliTRDcheckConfig.C:353
 AliTRDcheckConfig.C:354
 AliTRDcheckConfig.C:355
 AliTRDcheckConfig.C:356
 AliTRDcheckConfig.C:357
 AliTRDcheckConfig.C:358
 AliTRDcheckConfig.C:359
 AliTRDcheckConfig.C:360
 AliTRDcheckConfig.C:361
 AliTRDcheckConfig.C:362
 AliTRDcheckConfig.C:363
 AliTRDcheckConfig.C:364
 AliTRDcheckConfig.C:365
 AliTRDcheckConfig.C:366
 AliTRDcheckConfig.C:367
 AliTRDcheckConfig.C:368
 AliTRDcheckConfig.C:369
 AliTRDcheckConfig.C:370
 AliTRDcheckConfig.C:371
 AliTRDcheckConfig.C:372
 AliTRDcheckConfig.C:373
 AliTRDcheckConfig.C:374
 AliTRDcheckConfig.C:375
 AliTRDcheckConfig.C:376
 AliTRDcheckConfig.C:377
 AliTRDcheckConfig.C:378
 AliTRDcheckConfig.C:379
 AliTRDcheckConfig.C:380
 AliTRDcheckConfig.C:381
 AliTRDcheckConfig.C:382
 AliTRDcheckConfig.C:383
 AliTRDcheckConfig.C:384
 AliTRDcheckConfig.C:385
 AliTRDcheckConfig.C:386
 AliTRDcheckConfig.C:387
 AliTRDcheckConfig.C:388
 AliTRDcheckConfig.C:389
 AliTRDcheckConfig.C:390
 AliTRDcheckConfig.C:391
 AliTRDcheckConfig.C:392
 AliTRDcheckConfig.C:393
 AliTRDcheckConfig.C:394
 AliTRDcheckConfig.C:395
 AliTRDcheckConfig.C:396
 AliTRDcheckConfig.C:397
 AliTRDcheckConfig.C:398
 AliTRDcheckConfig.C:399
 AliTRDcheckConfig.C:400
 AliTRDcheckConfig.C:401
 AliTRDcheckConfig.C:402
 AliTRDcheckConfig.C:403
 AliTRDcheckConfig.C:404
 AliTRDcheckConfig.C:405
 AliTRDcheckConfig.C:406
 AliTRDcheckConfig.C:407
 AliTRDcheckConfig.C:408
 AliTRDcheckConfig.C:409
 AliTRDcheckConfig.C:410
 AliTRDcheckConfig.C:411
 AliTRDcheckConfig.C:412
 AliTRDcheckConfig.C:413
 AliTRDcheckConfig.C:414
 AliTRDcheckConfig.C:415
 AliTRDcheckConfig.C:416
 AliTRDcheckConfig.C:417
 AliTRDcheckConfig.C:418
 AliTRDcheckConfig.C:419
 AliTRDcheckConfig.C:420
 AliTRDcheckConfig.C:421
 AliTRDcheckConfig.C:422
 AliTRDcheckConfig.C:423
 AliTRDcheckConfig.C:424
 AliTRDcheckConfig.C:425
 AliTRDcheckConfig.C:426
 AliTRDcheckConfig.C:427
 AliTRDcheckConfig.C:428
 AliTRDcheckConfig.C:429
 AliTRDcheckConfig.C:430
 AliTRDcheckConfig.C:431
 AliTRDcheckConfig.C:432
 AliTRDcheckConfig.C:433
 AliTRDcheckConfig.C:434
 AliTRDcheckConfig.C:435
 AliTRDcheckConfig.C:436
 AliTRDcheckConfig.C:437
 AliTRDcheckConfig.C:438
 AliTRDcheckConfig.C:439
 AliTRDcheckConfig.C:440
 AliTRDcheckConfig.C:441
 AliTRDcheckConfig.C:442
 AliTRDcheckConfig.C:443
 AliTRDcheckConfig.C:444
 AliTRDcheckConfig.C:445
 AliTRDcheckConfig.C:446
 AliTRDcheckConfig.C:447
 AliTRDcheckConfig.C:448
 AliTRDcheckConfig.C:449
 AliTRDcheckConfig.C:450
 AliTRDcheckConfig.C:451
 AliTRDcheckConfig.C:452
 AliTRDcheckConfig.C:453
 AliTRDcheckConfig.C:454
 AliTRDcheckConfig.C:455
 AliTRDcheckConfig.C:456
 AliTRDcheckConfig.C:457
 AliTRDcheckConfig.C:458
 AliTRDcheckConfig.C:459
 AliTRDcheckConfig.C:460
 AliTRDcheckConfig.C:461
 AliTRDcheckConfig.C:462
 AliTRDcheckConfig.C:463
 AliTRDcheckConfig.C:464
 AliTRDcheckConfig.C:465
 AliTRDcheckConfig.C:466
 AliTRDcheckConfig.C:467
 AliTRDcheckConfig.C:468
 AliTRDcheckConfig.C:469
 AliTRDcheckConfig.C:470
 AliTRDcheckConfig.C:471
 AliTRDcheckConfig.C:472
 AliTRDcheckConfig.C:473
 AliTRDcheckConfig.C:474
 AliTRDcheckConfig.C:475
 AliTRDcheckConfig.C:476
 AliTRDcheckConfig.C:477
 AliTRDcheckConfig.C:478
 AliTRDcheckConfig.C:479
 AliTRDcheckConfig.C:480
 AliTRDcheckConfig.C:481
 AliTRDcheckConfig.C:482
 AliTRDcheckConfig.C:483
 AliTRDcheckConfig.C:484
 AliTRDcheckConfig.C:485
 AliTRDcheckConfig.C:486
 AliTRDcheckConfig.C:487
 AliTRDcheckConfig.C:488
 AliTRDcheckConfig.C:489
 AliTRDcheckConfig.C:490
 AliTRDcheckConfig.C:491
 AliTRDcheckConfig.C:492
 AliTRDcheckConfig.C:493
 AliTRDcheckConfig.C:494
 AliTRDcheckConfig.C:495
 AliTRDcheckConfig.C:496
 AliTRDcheckConfig.C:497
 AliTRDcheckConfig.C:498
 AliTRDcheckConfig.C:499
 AliTRDcheckConfig.C:500
 AliTRDcheckConfig.C:501
 AliTRDcheckConfig.C:502
 AliTRDcheckConfig.C:503
 AliTRDcheckConfig.C:504
 AliTRDcheckConfig.C:505
 AliTRDcheckConfig.C:506
 AliTRDcheckConfig.C:507
 AliTRDcheckConfig.C:508
 AliTRDcheckConfig.C:509
 AliTRDcheckConfig.C:510
 AliTRDcheckConfig.C:511
 AliTRDcheckConfig.C:512
 AliTRDcheckConfig.C:513
 AliTRDcheckConfig.C:514
 AliTRDcheckConfig.C:515
 AliTRDcheckConfig.C:516
 AliTRDcheckConfig.C:517
 AliTRDcheckConfig.C:518
 AliTRDcheckConfig.C:519
 AliTRDcheckConfig.C:520
 AliTRDcheckConfig.C:521
 AliTRDcheckConfig.C:522
 AliTRDcheckConfig.C:523
 AliTRDcheckConfig.C:524
 AliTRDcheckConfig.C:525
 AliTRDcheckConfig.C:526
 AliTRDcheckConfig.C:527
 AliTRDcheckConfig.C:528
 AliTRDcheckConfig.C:529
 AliTRDcheckConfig.C:530
 AliTRDcheckConfig.C:531
 AliTRDcheckConfig.C:532
 AliTRDcheckConfig.C:533
 AliTRDcheckConfig.C:534
 AliTRDcheckConfig.C:535
 AliTRDcheckConfig.C:536
 AliTRDcheckConfig.C:537
 AliTRDcheckConfig.C:538
 AliTRDcheckConfig.C:539
 AliTRDcheckConfig.C:540
 AliTRDcheckConfig.C:541
 AliTRDcheckConfig.C:542
 AliTRDcheckConfig.C:543
 AliTRDcheckConfig.C:544
 AliTRDcheckConfig.C:545
 AliTRDcheckConfig.C:546
 AliTRDcheckConfig.C:547
 AliTRDcheckConfig.C:548
 AliTRDcheckConfig.C:549
 AliTRDcheckConfig.C:550
 AliTRDcheckConfig.C:551
 AliTRDcheckConfig.C:552
 AliTRDcheckConfig.C:553
 AliTRDcheckConfig.C:554
 AliTRDcheckConfig.C:555
 AliTRDcheckConfig.C:556
 AliTRDcheckConfig.C:557
 AliTRDcheckConfig.C:558
 AliTRDcheckConfig.C:559
 AliTRDcheckConfig.C:560
 AliTRDcheckConfig.C:561
 AliTRDcheckConfig.C:562
 AliTRDcheckConfig.C:563
 AliTRDcheckConfig.C:564
 AliTRDcheckConfig.C:565
 AliTRDcheckConfig.C:566
 AliTRDcheckConfig.C:567
 AliTRDcheckConfig.C:568
 AliTRDcheckConfig.C:569
 AliTRDcheckConfig.C:570
 AliTRDcheckConfig.C:571
 AliTRDcheckConfig.C:572
 AliTRDcheckConfig.C:573
 AliTRDcheckConfig.C:574
 AliTRDcheckConfig.C:575
 AliTRDcheckConfig.C:576
 AliTRDcheckConfig.C:577
 AliTRDcheckConfig.C:578
 AliTRDcheckConfig.C:579
 AliTRDcheckConfig.C:580
 AliTRDcheckConfig.C:581
 AliTRDcheckConfig.C:582
 AliTRDcheckConfig.C:583
 AliTRDcheckConfig.C:584
 AliTRDcheckConfig.C:585
 AliTRDcheckConfig.C:586
 AliTRDcheckConfig.C:587
 AliTRDcheckConfig.C:588
 AliTRDcheckConfig.C:589
 AliTRDcheckConfig.C:590
 AliTRDcheckConfig.C:591
 AliTRDcheckConfig.C:592
 AliTRDcheckConfig.C:593
 AliTRDcheckConfig.C:594
 AliTRDcheckConfig.C:595
 AliTRDcheckConfig.C:596
 AliTRDcheckConfig.C:597
 AliTRDcheckConfig.C:598
 AliTRDcheckConfig.C:599
 AliTRDcheckConfig.C:600
 AliTRDcheckConfig.C:601
 AliTRDcheckConfig.C:602
 AliTRDcheckConfig.C:603
 AliTRDcheckConfig.C:604
 AliTRDcheckConfig.C:605
 AliTRDcheckConfig.C:606
 AliTRDcheckConfig.C:607
 AliTRDcheckConfig.C:608
 AliTRDcheckConfig.C:609
 AliTRDcheckConfig.C:610
 AliTRDcheckConfig.C:611
 AliTRDcheckConfig.C:612
 AliTRDcheckConfig.C:613
 AliTRDcheckConfig.C:614
 AliTRDcheckConfig.C:615
 AliTRDcheckConfig.C:616
 AliTRDcheckConfig.C:617
 AliTRDcheckConfig.C:618
 AliTRDcheckConfig.C:619
 AliTRDcheckConfig.C:620
 AliTRDcheckConfig.C:621
 AliTRDcheckConfig.C:622
 AliTRDcheckConfig.C:623
 AliTRDcheckConfig.C:624
 AliTRDcheckConfig.C:625
 AliTRDcheckConfig.C:626
 AliTRDcheckConfig.C:627
 AliTRDcheckConfig.C:628
 AliTRDcheckConfig.C:629
 AliTRDcheckConfig.C:630
 AliTRDcheckConfig.C:631
 AliTRDcheckConfig.C:632
 AliTRDcheckConfig.C:633
 AliTRDcheckConfig.C:634
 AliTRDcheckConfig.C:635
 AliTRDcheckConfig.C:636
 AliTRDcheckConfig.C:637
 AliTRDcheckConfig.C:638
 AliTRDcheckConfig.C:639
 AliTRDcheckConfig.C:640
 AliTRDcheckConfig.C:641
 AliTRDcheckConfig.C:642
 AliTRDcheckConfig.C:643
 AliTRDcheckConfig.C:644
 AliTRDcheckConfig.C:645
 AliTRDcheckConfig.C:646
 AliTRDcheckConfig.C:647
 AliTRDcheckConfig.C:648
 AliTRDcheckConfig.C:649
 AliTRDcheckConfig.C:650
 AliTRDcheckConfig.C:651
 AliTRDcheckConfig.C:652
 AliTRDcheckConfig.C:653
 AliTRDcheckConfig.C:654
 AliTRDcheckConfig.C:655
 AliTRDcheckConfig.C:656
 AliTRDcheckConfig.C:657
 AliTRDcheckConfig.C:658
 AliTRDcheckConfig.C:659
 AliTRDcheckConfig.C:660
 AliTRDcheckConfig.C:661
 AliTRDcheckConfig.C:662
 AliTRDcheckConfig.C:663
 AliTRDcheckConfig.C:664
 AliTRDcheckConfig.C:665
 AliTRDcheckConfig.C:666
 AliTRDcheckConfig.C:667
 AliTRDcheckConfig.C:668
 AliTRDcheckConfig.C:669
 AliTRDcheckConfig.C:670
 AliTRDcheckConfig.C:671
 AliTRDcheckConfig.C:672
 AliTRDcheckConfig.C:673
 AliTRDcheckConfig.C:674
 AliTRDcheckConfig.C:675
 AliTRDcheckConfig.C:676
 AliTRDcheckConfig.C:677