ROOT logo
// Compare the contents of the calibration, bad channels, etc in OCDB and AODB
// You need connexion to the grid to run this macro
// The OADB file can be in a place different than the default in aliroot

// Author : Gustavo Conesa Balbastre (LPSC-CNRS)

void CompareAODB_OCDB(Int_t run = 160000, TString pathOADB = "$ALICE_ROOT/OADB/EMCAL",
                      Int_t checkObject = 2, TString pass = "pass1", Bool_t printAll = kFALSE)
{  

  gSystem->Load("libOADB");
  TGrid::Connect("alien://");
  
  AliCDBManager* man = AliCDBManager::Instance();
  man->SetDefaultStorage("raw://");
  man->SetRun(run);
  AliCDBStorage *storage = man->GetDefaultStorage();
  
  // Instantiate EMCAL geometry for the first time

  
  if     (run < 140000) geom = AliEMCALGeometry::GetInstance("EMCAL_FIRSTYEARV1"); // 2010
  else if(run < 198000) geom = AliEMCALGeometry::GetInstance("EMCAL_COMPLETEV1");  // 2011-2012-2013
  else                  geom = AliEMCALGeometry::GetInstance("EMCAL_COMPLETE12SMV1_DCAL_8SM"); // Run2
  
  if     (checkObject == 0) CheckBadChannels            (run, pathOADB, storage, geom,     printAll);
  else if(checkObject == 1) CheckEnergyCalibration      (run, pathOADB, storage, geom,pass,printAll);
  else if(checkObject == 2) CheckEnergyOnlineCalibration(run, pathOADB, storage, geom,     printAll);
  else printf("non existing object option\n");
  
  printf("*** Comparisons ended *** \n");
}  

//___________________________
void CheckEnergyCalibration(Int_t run, TString pathOADB, AliCDBStorage * storage, AliEMCALGeometry *geom,
                            TString pass,Bool_t printAll = kTRUE)
{
  // Check energy recalibration, Uncomplete
  
  AliOADBContainer *contRF=new AliOADBContainer("");
  contRF->InitFromFile(Form("%s/EMCALRecalib.root",pathOADB.Data()),"AliEMCALRecalib");
  
  const Int_t nSM = geom->GetNumberOfSuperModules();
  
  // Get the OCDB object
  
  AliEMCALCalibData* cparam = (AliEMCALCalibData*) (storage->Get("EMCAL/Calib/Data", run)->GetObject());

//  // Access directly the OCDB file and not the latest version
//  TFile * f = TFile::Open("alien:///alice/data/2011/OCDB/EMCAL/Calib/Data/Run144484_999999999_v2_s0.root","READ");
//  AliCDBEntry * cdb = (AliCDBEntry*) f->Get("AliCDBEntry");
//  AliEMCALCalibData* cparam2 = (AliEMCALCalibData*)  cdb->GetObject();

  // Get the OADB object
  
  TH2F *h[12];
  
  TObjArray *recal=(TObjArray*)contRF->GetObject(run);
  
  if(!recal)
  {
    printf("Energy recalibration OADB not found  3\n");
    return;
  }
  
  TObjArray *recalpass=(TObjArray*)recal->FindObject(pass);
  
  if(!recalpass)
  {
    printf("Energy recalibration OADB not found 2\n");
    return;
  }
  
  TObjArray *recalib=(TObjArray*)recalpass->FindObject("Recalib");
  
  if(!recalib)
  {
    printf("Energy recalibration OADB not found 1\n");
    return;
  }
  
  for (Int_t i=0; i < nSM; ++i)
  {
    h[i] = (TH2F*)recalib->FindObject(Form("EMCALRecalFactors_SM%d",i));
    if (!h[i])
    {
      AliError(Form("Could not load EMCALRecalFactors_SM%d",i));
      continue;
    }
  }
  
  // Do the comparison
  Float_t paramOCDB = -1;
  Float_t paramAODB = -1;
  Int_t nDiff = 0;
//  Int_t nDiff2 = 0;
  Int_t iCol = -1, iRow = -1, iSM =-1, iMod = -1,iIphi =-1,iIeta = -1;
  for(Int_t i=0;i < nSM*24*48; i++)
  {
    //printf("AbsID %d\n",i);
    geom->GetCellIndex(i,iSM,iMod,iIphi,iIeta);
    geom->GetCellPhiEtaIndexInSModule(iSM,iMod, iIphi, iIeta,iRow,iCol);
    
    Float_t paramOCDB = -1;
    if(cparam) paramOCDB = cparam->GetADCchannel(iSM,iCol,iRow);

//    Float_t paramOCDB2 = -1;
//    if(cparam) paramOCDB2 = cparam2->GetADCchannel(iSM,iCol,iRow);
    
    Float_t paramAODB = -1;
    if(h[iSM]) paramAODB = h[iSM]->GetBinContent(iCol,iRow);
    paramAODB*=0.0162; // Transformation into OCDB parameter, it will not work for all channels
    
    if    (printAll)
    printf("Recalibration parameter: ID %d, col %d, row %d, sm %d  OCDB %1.4f, OADB %1.4f\n",
           i,iCol,iRow,iSM,paramOCDB, paramAODB);
    else if(paramAODB > 0)
    {
      if (paramOCDB/paramAODB > 1.01 || paramOCDB/paramAODB < 0.99) )
      {
        printf("DIFFERENT recalibration parameter: ID %d, col %d, row %d, sm %d  OCDB %1.4f, OADB %1.4f, ratio OCDB/OADB %1.4f\n",//, old OCDB param %1.4f\n",
               i,iCol,iRow,iSM,paramOCDB, paramAODB,paramOCDB/paramAODB);//,paramOCDB2);
        nDiff++;
      }
      else if(paramAODB <= 0)
      {
        printf("DIFFERENT recalibration parameter: ID %d, col %d, row %d, sm %d  OCDB %1.4f, OADB %1.4f\n",//, old OCDB param %1.4f\n",
               i,iCol,iRow,iSM,paramOCDB, paramAODB);//,paramOCDB2);
        nDiff++;
      }
      
//      if(TMath::Abs(paramOCDB2-0.0162)> 0.0001)
//      {
//        printf("\t Different initial calib! %1.4f\n",paramOCDB2);
//        nDiff2++;
//      }
    }
  }
  
  if(!printAll) printf("Total number of different channels %d / %d\n",nDiff,nSM*24*48);//, origin %d\n",nDiff,nSM*24*48,nDiff2);
}

//___________________________
void CheckEnergyOnlineCalibration(Int_t run, TString pathOADB, AliCDBStorage * storage, AliEMCALGeometry *geom,
                            Bool_t printAll = kTRUE)
{
  // Check energy recalibration, Uncomplete
  
  AliOADBContainer *contRF=new AliOADBContainer("");
  contRF->InitFromFile(Form("%s/EMCALCalibOnlineRef.root",pathOADB.Data()),"AliEMCALRecalib");
  
  const Int_t nSM = geom->GetNumberOfSuperModules();
  
  // Get the OCDB object
  // Access directly the OCDB file and not the latest version
  TFile * f = 0;
  if     (run < 140000)
    f = TFile::Open("alien:///alice/data/2010/OCDB/EMCAL/Calib/Data/Run113461_999999999_v3_s0.root","READ");
  else if(run < 171000)
    f = TFile::Open("alien:///alice/data/2011/OCDB/EMCAL/Calib/Data/Run144484_999999999_v3_s0.root","READ");
  else if(run < 198000)
    f = TFile::Open("alien:///alice/data/2012/OCDB/EMCAL/Calib/Data/Run177115_999999999_v2_s0.root","READ");
  else {
    printf("Run not available\n");
    return;
  }
  
  AliCDBEntry * cdb = (AliCDBEntry*) f->Get("AliCDBEntry");
  AliEMCALCalibData* cparam = (AliEMCALCalibData*)  cdb->GetObject();
  
  // Get the OADB object
  
  TH2F *h[12];
  
  TObjArray *cal=(TObjArray*)contRF->GetObject(run);
  
  if(!cal)
  {
    printf("Energy online calibration OADB not found  3\n");
    return;
  }

  for (Int_t i=0; i < nSM; ++i)
  {
    h[i] = (TH2F*)cal->FindObject(Form("EMCALRecalFactors_SM%d",i));
    if (!h[i])
    {
      AliError(Form("Could not load EMCALRecalFactors_SM%d",i));
      continue;
    }
  }
  
  // Do the comparison
  Float_t paramOCDB = -1;
  Float_t paramAODB = -1;
  Int_t nDiff = 0;
  //  Int_t nDiff2 = 0;
  Int_t iCol = -1, iRow = -1, iSM =-1, iMod = -1,iIphi =-1,iIeta = -1;
  for(Int_t i=0;i < nSM*24*48; i++)
  {
    //printf("AbsID %d\n",i);
    geom->GetCellIndex(i,iSM,iMod,iIphi,iIeta);
    geom->GetCellPhiEtaIndexInSModule(iSM,iMod, iIphi, iIeta,iRow,iCol);
    
    Float_t paramOCDB = -1;
    if(cparam) paramOCDB = cparam->GetADCchannel(iSM,iCol,iRow);
    
    Float_t paramAODB = -1;
    if(h[iSM]) paramAODB = h[iSM]->GetBinContent(iCol,iRow);
    
    if    (printAll)
    printf("Online Calib: ID %d, col %d, row %d, sm %d  OCDB %1.4f, OADB %1.4f\n",
           i,iCol,iRow,iSM,paramOCDB, paramAODB);
    
    if (TMath::Abs(paramOCDB-paramAODB) > 0.001)//  || (TMath::Abs(paramOCDB-0.0162)> 0.001))
    {
      printf("Online Calib DIFFERENT: ID %d, col %d, row %d, sm %d  OCDB %1.4f, OADB %1.4f, diff OCDB-OADB %1.4f\n",
             i,iCol,iRow,iSM,paramOCDB, paramAODB,paramOCDB-paramAODB);
      nDiff++;
    }
    
    
  }
  
  if(!printAll) printf("Total number of different channels %d / %d\n",nDiff,nSM*24*48);//, origin %d\n",nDiff,nSM*24*48,nDiff2);
}

//_____________________
void CheckBadChannels(Int_t run, TString pathOADB, AliCDBStorage * storage, AliEMCALGeometry *geom, Bool_t printAll = kTRUE)
{
  // Get the OCDB bad channels and compare to the OADB ones
  
  //const Int_t nSM = static_const (geom->GetNumberOfSuperModules());
  const Int_t nSM = static_cast<const Int_t> (geom->GetNumberOfSuperModules());

  // Access OCDB histograms
  AliCaloCalibPedestal* caloped  = (AliCaloCalibPedestal*) (storage->Get("EMCAL/Calib/Pedestals", run)->GetObject());
    
  // Access directly the OCDB file and not the latest version
  //TFile * f = TFile::Open("alien:///alice/data/2011/OCDB/EMCAL/Calib/Pedestals/Run145954_146856_v3_s0.root","READ");
  //AliCDBEntry * cdb = (AliCDBEntry*) f->Get("AliCDBEntry");
  //AliCaloCalibPedestal * caloped = (AliCaloCalibPedestal *) cdb->GetObject();  
  
  TObjArray map = caloped->GetDeadMap();

  // Access OADB histograms
  TH2I *hbm[12];
  
  AliOADBContainer *contBC=new AliOADBContainer("");
  
  contBC->InitFromFile(Form("%s/EMCALBadChannels.root",pathOADB.Data()),"AliEMCALBadChannels"); 
  
  TObjArray *arrayBC=(TObjArray*)contBC->GetObject(run);
  
  if(!arrayBC)
  {
    printf("--- Bad map not available \n");
    return;
  }
  
  for (Int_t i=0; i < nSM; ++i)
  {
    hbm[i]=(TH2I*)arrayBC->FindObject(Form("EMCALBadChannelMap_Mod%d",i));
    
    if (!hbm)
    {
      AliError(Form("Can not get EMCALBadChannelMap_Mod%d",i));
      continue;
    }
  }
  
  Int_t badMapOCDB = -1;
  Int_t badMapAODB = -1;
  Int_t iCol = -1, iRow = -1, iSM =-1, iMod = -1,iIphi =-1,iIeta = -1;    
  for(Int_t i=0;i < nSM*24*48; i++)
  {
    //printf("AbsID %d\n",i);
    geom->GetCellIndex(i,iSM,iMod,iIphi,iIeta); 
    geom->GetCellPhiEtaIndexInSModule(iSM,iMod, iIphi, iIeta,iRow,iCol);
    if(map.At(iSM))badMapOCDB = ((TH2F*)map.At(iSM))->GetBinContent(iCol,iRow);
    else badMapOCDB  = -1;
    if(hbm[iSM])   badMapAODB = hbm[iSM]->GetBinContent(iCol,iRow);
     else badMapAODB = -1;

    if    (printAll && badMapOCDB > 0)
      printf("STATUS: ID %d, col %d, row %d, sm %d  OCDB %d, OADB %d\n",
             i,iCol,iRow,iSM,badMapOCDB, badMapAODB);
    else if(badMapOCDB!=badMapAODB)
      printf("DIFFERENT STATUS: ID %d, col %d, row %d, sm %d  OCDB %d, OADB %d\n",
             i,iCol,iRow,iSM,badMapOCDB, badMapAODB);

  }
  
}

//_____________________
void CheckTimeCalibration(Int_t run, TString pathOADB, AliCDBStorage * storage, AliEMCALGeometry *geom, TString pass, Bool_t printAll = kTRUE)
{
  printf(" === Comparison for this object is not implemented === \n");
}

 CompareAODB_OCDB.C:1
 CompareAODB_OCDB.C:2
 CompareAODB_OCDB.C:3
 CompareAODB_OCDB.C:4
 CompareAODB_OCDB.C:5
 CompareAODB_OCDB.C:6
 CompareAODB_OCDB.C:7
 CompareAODB_OCDB.C:8
 CompareAODB_OCDB.C:9
 CompareAODB_OCDB.C:10
 CompareAODB_OCDB.C:11
 CompareAODB_OCDB.C:12
 CompareAODB_OCDB.C:13
 CompareAODB_OCDB.C:14
 CompareAODB_OCDB.C:15
 CompareAODB_OCDB.C:16
 CompareAODB_OCDB.C:17
 CompareAODB_OCDB.C:18
 CompareAODB_OCDB.C:19
 CompareAODB_OCDB.C:20
 CompareAODB_OCDB.C:21
 CompareAODB_OCDB.C:22
 CompareAODB_OCDB.C:23
 CompareAODB_OCDB.C:24
 CompareAODB_OCDB.C:25
 CompareAODB_OCDB.C:26
 CompareAODB_OCDB.C:27
 CompareAODB_OCDB.C:28
 CompareAODB_OCDB.C:29
 CompareAODB_OCDB.C:30
 CompareAODB_OCDB.C:31
 CompareAODB_OCDB.C:32
 CompareAODB_OCDB.C:33
 CompareAODB_OCDB.C:34
 CompareAODB_OCDB.C:35
 CompareAODB_OCDB.C:36
 CompareAODB_OCDB.C:37
 CompareAODB_OCDB.C:38
 CompareAODB_OCDB.C:39
 CompareAODB_OCDB.C:40
 CompareAODB_OCDB.C:41
 CompareAODB_OCDB.C:42
 CompareAODB_OCDB.C:43
 CompareAODB_OCDB.C:44
 CompareAODB_OCDB.C:45
 CompareAODB_OCDB.C:46
 CompareAODB_OCDB.C:47
 CompareAODB_OCDB.C:48
 CompareAODB_OCDB.C:49
 CompareAODB_OCDB.C:50
 CompareAODB_OCDB.C:51
 CompareAODB_OCDB.C:52
 CompareAODB_OCDB.C:53
 CompareAODB_OCDB.C:54
 CompareAODB_OCDB.C:55
 CompareAODB_OCDB.C:56
 CompareAODB_OCDB.C:57
 CompareAODB_OCDB.C:58
 CompareAODB_OCDB.C:59
 CompareAODB_OCDB.C:60
 CompareAODB_OCDB.C:61
 CompareAODB_OCDB.C:62
 CompareAODB_OCDB.C:63
 CompareAODB_OCDB.C:64
 CompareAODB_OCDB.C:65
 CompareAODB_OCDB.C:66
 CompareAODB_OCDB.C:67
 CompareAODB_OCDB.C:68
 CompareAODB_OCDB.C:69
 CompareAODB_OCDB.C:70
 CompareAODB_OCDB.C:71
 CompareAODB_OCDB.C:72
 CompareAODB_OCDB.C:73
 CompareAODB_OCDB.C:74
 CompareAODB_OCDB.C:75
 CompareAODB_OCDB.C:76
 CompareAODB_OCDB.C:77
 CompareAODB_OCDB.C:78
 CompareAODB_OCDB.C:79
 CompareAODB_OCDB.C:80
 CompareAODB_OCDB.C:81
 CompareAODB_OCDB.C:82
 CompareAODB_OCDB.C:83
 CompareAODB_OCDB.C:84
 CompareAODB_OCDB.C:85
 CompareAODB_OCDB.C:86
 CompareAODB_OCDB.C:87
 CompareAODB_OCDB.C:88
 CompareAODB_OCDB.C:89
 CompareAODB_OCDB.C:90
 CompareAODB_OCDB.C:91
 CompareAODB_OCDB.C:92
 CompareAODB_OCDB.C:93
 CompareAODB_OCDB.C:94
 CompareAODB_OCDB.C:95
 CompareAODB_OCDB.C:96
 CompareAODB_OCDB.C:97
 CompareAODB_OCDB.C:98
 CompareAODB_OCDB.C:99
 CompareAODB_OCDB.C:100
 CompareAODB_OCDB.C:101
 CompareAODB_OCDB.C:102
 CompareAODB_OCDB.C:103
 CompareAODB_OCDB.C:104
 CompareAODB_OCDB.C:105
 CompareAODB_OCDB.C:106
 CompareAODB_OCDB.C:107
 CompareAODB_OCDB.C:108
 CompareAODB_OCDB.C:109
 CompareAODB_OCDB.C:110
 CompareAODB_OCDB.C:111
 CompareAODB_OCDB.C:112
 CompareAODB_OCDB.C:113
 CompareAODB_OCDB.C:114
 CompareAODB_OCDB.C:115
 CompareAODB_OCDB.C:116
 CompareAODB_OCDB.C:117
 CompareAODB_OCDB.C:118
 CompareAODB_OCDB.C:119
 CompareAODB_OCDB.C:120
 CompareAODB_OCDB.C:121
 CompareAODB_OCDB.C:122
 CompareAODB_OCDB.C:123
 CompareAODB_OCDB.C:124
 CompareAODB_OCDB.C:125
 CompareAODB_OCDB.C:126
 CompareAODB_OCDB.C:127
 CompareAODB_OCDB.C:128
 CompareAODB_OCDB.C:129
 CompareAODB_OCDB.C:130
 CompareAODB_OCDB.C:131
 CompareAODB_OCDB.C:132
 CompareAODB_OCDB.C:133
 CompareAODB_OCDB.C:134
 CompareAODB_OCDB.C:135
 CompareAODB_OCDB.C:136
 CompareAODB_OCDB.C:137
 CompareAODB_OCDB.C:138
 CompareAODB_OCDB.C:139
 CompareAODB_OCDB.C:140
 CompareAODB_OCDB.C:141
 CompareAODB_OCDB.C:142
 CompareAODB_OCDB.C:143
 CompareAODB_OCDB.C:144
 CompareAODB_OCDB.C:145
 CompareAODB_OCDB.C:146
 CompareAODB_OCDB.C:147
 CompareAODB_OCDB.C:148
 CompareAODB_OCDB.C:149
 CompareAODB_OCDB.C:150
 CompareAODB_OCDB.C:151
 CompareAODB_OCDB.C:152
 CompareAODB_OCDB.C:153
 CompareAODB_OCDB.C:154
 CompareAODB_OCDB.C:155
 CompareAODB_OCDB.C:156
 CompareAODB_OCDB.C:157
 CompareAODB_OCDB.C:158
 CompareAODB_OCDB.C:159
 CompareAODB_OCDB.C:160
 CompareAODB_OCDB.C:161
 CompareAODB_OCDB.C:162
 CompareAODB_OCDB.C:163
 CompareAODB_OCDB.C:164
 CompareAODB_OCDB.C:165
 CompareAODB_OCDB.C:166
 CompareAODB_OCDB.C:167
 CompareAODB_OCDB.C:168
 CompareAODB_OCDB.C:169
 CompareAODB_OCDB.C:170
 CompareAODB_OCDB.C:171
 CompareAODB_OCDB.C:172
 CompareAODB_OCDB.C:173
 CompareAODB_OCDB.C:174
 CompareAODB_OCDB.C:175
 CompareAODB_OCDB.C:176
 CompareAODB_OCDB.C:177
 CompareAODB_OCDB.C:178
 CompareAODB_OCDB.C:179
 CompareAODB_OCDB.C:180
 CompareAODB_OCDB.C:181
 CompareAODB_OCDB.C:182
 CompareAODB_OCDB.C:183
 CompareAODB_OCDB.C:184
 CompareAODB_OCDB.C:185
 CompareAODB_OCDB.C:186
 CompareAODB_OCDB.C:187
 CompareAODB_OCDB.C:188
 CompareAODB_OCDB.C:189
 CompareAODB_OCDB.C:190
 CompareAODB_OCDB.C:191
 CompareAODB_OCDB.C:192
 CompareAODB_OCDB.C:193
 CompareAODB_OCDB.C:194
 CompareAODB_OCDB.C:195
 CompareAODB_OCDB.C:196
 CompareAODB_OCDB.C:197
 CompareAODB_OCDB.C:198
 CompareAODB_OCDB.C:199
 CompareAODB_OCDB.C:200
 CompareAODB_OCDB.C:201
 CompareAODB_OCDB.C:202
 CompareAODB_OCDB.C:203
 CompareAODB_OCDB.C:204
 CompareAODB_OCDB.C:205
 CompareAODB_OCDB.C:206
 CompareAODB_OCDB.C:207
 CompareAODB_OCDB.C:208
 CompareAODB_OCDB.C:209
 CompareAODB_OCDB.C:210
 CompareAODB_OCDB.C:211
 CompareAODB_OCDB.C:212
 CompareAODB_OCDB.C:213
 CompareAODB_OCDB.C:214
 CompareAODB_OCDB.C:215
 CompareAODB_OCDB.C:216
 CompareAODB_OCDB.C:217
 CompareAODB_OCDB.C:218
 CompareAODB_OCDB.C:219
 CompareAODB_OCDB.C:220
 CompareAODB_OCDB.C:221
 CompareAODB_OCDB.C:222
 CompareAODB_OCDB.C:223
 CompareAODB_OCDB.C:224
 CompareAODB_OCDB.C:225
 CompareAODB_OCDB.C:226
 CompareAODB_OCDB.C:227
 CompareAODB_OCDB.C:228
 CompareAODB_OCDB.C:229
 CompareAODB_OCDB.C:230
 CompareAODB_OCDB.C:231
 CompareAODB_OCDB.C:232
 CompareAODB_OCDB.C:233
 CompareAODB_OCDB.C:234
 CompareAODB_OCDB.C:235
 CompareAODB_OCDB.C:236
 CompareAODB_OCDB.C:237
 CompareAODB_OCDB.C:238
 CompareAODB_OCDB.C:239
 CompareAODB_OCDB.C:240
 CompareAODB_OCDB.C:241
 CompareAODB_OCDB.C:242
 CompareAODB_OCDB.C:243
 CompareAODB_OCDB.C:244
 CompareAODB_OCDB.C:245
 CompareAODB_OCDB.C:246
 CompareAODB_OCDB.C:247
 CompareAODB_OCDB.C:248
 CompareAODB_OCDB.C:249
 CompareAODB_OCDB.C:250
 CompareAODB_OCDB.C:251
 CompareAODB_OCDB.C:252
 CompareAODB_OCDB.C:253
 CompareAODB_OCDB.C:254
 CompareAODB_OCDB.C:255
 CompareAODB_OCDB.C:256
 CompareAODB_OCDB.C:257
 CompareAODB_OCDB.C:258
 CompareAODB_OCDB.C:259
 CompareAODB_OCDB.C:260
 CompareAODB_OCDB.C:261
 CompareAODB_OCDB.C:262
 CompareAODB_OCDB.C:263
 CompareAODB_OCDB.C:264
 CompareAODB_OCDB.C:265
 CompareAODB_OCDB.C:266
 CompareAODB_OCDB.C:267
 CompareAODB_OCDB.C:268
 CompareAODB_OCDB.C:269
 CompareAODB_OCDB.C:270
 CompareAODB_OCDB.C:271
 CompareAODB_OCDB.C:272
 CompareAODB_OCDB.C:273
 CompareAODB_OCDB.C:274
 CompareAODB_OCDB.C:275
 CompareAODB_OCDB.C:276
 CompareAODB_OCDB.C:277
 CompareAODB_OCDB.C:278
 CompareAODB_OCDB.C:279
 CompareAODB_OCDB.C:280
 CompareAODB_OCDB.C:281
 CompareAODB_OCDB.C:282
 CompareAODB_OCDB.C:283
 CompareAODB_OCDB.C:284
 CompareAODB_OCDB.C:285
 CompareAODB_OCDB.C:286
 CompareAODB_OCDB.C:287
 CompareAODB_OCDB.C:288
 CompareAODB_OCDB.C:289
 CompareAODB_OCDB.C:290
 CompareAODB_OCDB.C:291
 CompareAODB_OCDB.C:292
 CompareAODB_OCDB.C:293
 CompareAODB_OCDB.C:294
 CompareAODB_OCDB.C:295
 CompareAODB_OCDB.C:296
 CompareAODB_OCDB.C:297
 CompareAODB_OCDB.C:298
 CompareAODB_OCDB.C:299
 CompareAODB_OCDB.C:300
 CompareAODB_OCDB.C:301
 CompareAODB_OCDB.C:302