ROOT logo
/*
  .L  $ALICE_ROOT/TPC/macros//MakeOCDBDiff.C
*/

Bool_t  MakeOCDBDiff(const char *ocdb1, const char *ocdb2){
  //
  // Compare by by byte the content of the OCDB entry
  // Input parameters:
  //   ocdb1 - path to the OCDB file1
  //   ocdb2 - path to the OCDB file2
  // Return value:
  //   kTRUE - in case the content of the OCDB object (persistent part) is exactly the same 
  //   kFALSE - othewise
  /* 
     ocdb1="Run188720_192738_v2_s0.root"
     ocdb1="Run0_188719_v2_s0.root"
     ocdb2="Run192739_999999999_v2_s0.root" 
  */
  TFile * f1 = TFile::Open(ocdb1);
  TFile * f2 = TFile::Open(ocdb2);
  {if (!f1 || !f2){
    printf("Problem 0:  Files not accessible (%s,%s)\n",ocdb1,ocdb2);
    return kFALSE;
    }}
  AliCDBEntry * entry1 = (AliCDBEntry*)f1->Get("AliCDBEntry");
  AliCDBEntry * entry2 = (AliCDBEntry*)f2->Get("AliCDBEntry");
  {if (!entry1||!entry2){
    printf("Problem 1:  OCDB entry not available (%s,%s)\n",ocdb1,ocdb2);
    return kFALSE; 
    }}
  TObject* object1=entry1->GetObject();
  TObject* object2=entry2->GetObject();
  TMessage * file1 = new TMessage(TBuffer::kWrite);
  file1->WriteObject(object1);
  Int_t size1=file1->Length();  
  TMessage * file2 = new TMessage(TBuffer::kWrite);
  file2->WriteObject(object2);
  Int_t size2=file2->Length(); 
  {if (size1!=size2){
    printf("Problem 2:  OCDB entry of different size (%d,%d)",size1,size2);
    return kFALSE;
    }}
  Int_t countDiff=0;
  for (Int_t i=0; i<size1; i++)    if (file1->Buffer()[i]!=file2->Buffer()[i]) countDiff++;
  {if (countDiff>0){
    printf("Objects are different. %d different bytes\n", countDiff );
    return kFALSE;
    }}
  printf("OCDB Objects are the same\n");

  TClass *cl1= object1->Class();
  
  
  return kTRUE;
}
 MakeOCDBDiff.C:1
 MakeOCDBDiff.C:2
 MakeOCDBDiff.C:3
 MakeOCDBDiff.C:4
 MakeOCDBDiff.C:5
 MakeOCDBDiff.C:6
 MakeOCDBDiff.C:7
 MakeOCDBDiff.C:8
 MakeOCDBDiff.C:9
 MakeOCDBDiff.C:10
 MakeOCDBDiff.C:11
 MakeOCDBDiff.C:12
 MakeOCDBDiff.C:13
 MakeOCDBDiff.C:14
 MakeOCDBDiff.C:15
 MakeOCDBDiff.C:16
 MakeOCDBDiff.C:17
 MakeOCDBDiff.C:18
 MakeOCDBDiff.C:19
 MakeOCDBDiff.C:20
 MakeOCDBDiff.C:21
 MakeOCDBDiff.C:22
 MakeOCDBDiff.C:23
 MakeOCDBDiff.C:24
 MakeOCDBDiff.C:25
 MakeOCDBDiff.C:26
 MakeOCDBDiff.C:27
 MakeOCDBDiff.C:28
 MakeOCDBDiff.C:29
 MakeOCDBDiff.C:30
 MakeOCDBDiff.C:31
 MakeOCDBDiff.C:32
 MakeOCDBDiff.C:33
 MakeOCDBDiff.C:34
 MakeOCDBDiff.C:35
 MakeOCDBDiff.C:36
 MakeOCDBDiff.C:37
 MakeOCDBDiff.C:38
 MakeOCDBDiff.C:39
 MakeOCDBDiff.C:40
 MakeOCDBDiff.C:41
 MakeOCDBDiff.C:42
 MakeOCDBDiff.C:43
 MakeOCDBDiff.C:44
 MakeOCDBDiff.C:45
 MakeOCDBDiff.C:46
 MakeOCDBDiff.C:47
 MakeOCDBDiff.C:48
 MakeOCDBDiff.C:49
 MakeOCDBDiff.C:50
 MakeOCDBDiff.C:51
 MakeOCDBDiff.C:52
 MakeOCDBDiff.C:53
 MakeOCDBDiff.C:54
 MakeOCDBDiff.C:55
 MakeOCDBDiff.C:56