Command line interface to browse and compare OCDB content: ocdbMakeTable, dumpObject...
authormivanov <marian.ivanov@cern.ch>
Fri, 11 Apr 2014 09:34:43 +0000 (11:34 +0200)
committermivanov <marian.ivanov@cern.ch>
Fri, 11 Apr 2014 09:34:43 +0000 (11:34 +0200)
PWGPP/CalibMacros/AliOCDBtoolkit.sh
STEER/CDB/AliOCDBtoolkit.cxx
STEER/CDB/AliOCDBtoolkit.h

index 8183aff..10d57b4 100644 (file)
@@ -1,3 +1,4 @@
+#!/bin/bash
 ocdbMakeTable(){
 #
 # create a text file with the OCDB setupt descriptors#
@@ -5,8 +6,38 @@ ocdbMakeTable(){
 # Input: 
 #   $1 inputFile name
 #   $2 flag type of the input file
+#   flags: 
+#   log file = "log"
+#   AliESDs.root = "ESD"
+#   galice.root = "MC"
 # Output:
 #   $3 output file name
+    if [ $# -lt 3 ] ; then
+        echo "Usage: $0 \$inputFile \$flag \$outputFile"
+        return 1
+    fi
+    local inFile=${1}
+    local inFlag=${2}
+    local outFile=${3}
+    shift 3
+    if [ ! -f ${inFile} ] ; then 
+        echo ${inFile} not found!
+        return 1
+    fi
+    if [ -f ${outFile} ] ; then 
+        >${outFile}
+    fi
+
+    tmpscript=$(mktemp)
+    cat > ${tmpscript} <<HEREDOC
+        {
+            AliOCDBtoolkit::DumpOCDBAsTxt("${inFile}","${inFlag}","${outFile}");
+        }
+HEREDOC
+
+    aliroot -l -q -b ${tmpscript} 
+    sleep 60 && rm ${tmpscript} &
+    return 1
 }
 
 
@@ -16,9 +47,43 @@ dumpObject(){
 #  Input:
 #    $1 path
 #    $2 obj name 
-#    $3 type of the dump (xml or MI recursive dump )
+#    $3 type of the dump (XML or MI recursive dump )
 #  Output:
-#    #3 output file name   
+#    $4 output file name   
+    if [ $# -lt 4 ] ; then
+        echo "Usage: $0 \$inputFile \$object_name \$dump_type [XML/MI] \$outfile"
+        return 1
+    fi
+    local inFile=${1}
+    local fobject=${2}
+    local ftype=${3}
+    local outFile=${4}
+    shift 4
+    if [ ! -f ${inFile} ] ; then 
+        echo ${inFile} not found!
+        return 1
+    fi
+    if [ -f ${outFile} ] ; then 
+        >${outFile}
+    fi
+    if [ ${ftype} = "XML" ] ; then
+        isXML=kTRUE
+    elif [ ${ftype} = "MI" ] ; then
+        isXML=kFALSE
+    else
+        echo "option ${ftype} not recognized! Use \"XML\" or \"MI\"!"
+        return 1
+    fi
+    tmpscript=$(mktemp)
+    cat > ${tmpscript} <<HEREDOC
+        {
+            AliOCDBtoolkit::DumpOCDBFile("${inFile}","${outFile}",1,${isXML});
+        }
+HEREDOC
+
+    aliroot -l -q -b ${tmpscript} 
+    sleep 60 && rm ${tmpscript} &
+    return 1
 }
 
 diffObject(){
@@ -27,8 +92,54 @@ diffObject(){
 #  Input:
 #    $1 path0
 #    $2 path1
-#    $2 obj name 
-#    $3 type of the dump (xml or MI recursive dump )
+#    $3 obj name 
+#    $4 type of the dump (xml or MI recursive dump )
 #  Output:
-#    #3 output diff file name   
-}
\ No newline at end of file
+#    $5 output diff file name   
+    if [ $# -lt 5 ] ; then
+        echo "Usage: $0 \$inputFile1 \$inputFile2 \$object_name \$dump_type [XML/MI] \$outfile"
+        return 1
+    fi
+    local inFile1=${1}
+    local inFile2=${2}
+    local fobject=${3}
+    local ftype=${4}
+    local outFile=${5}
+    shift 5
+    local tmp1=$(mktemp)
+    local tmp2=$(mktemp)
+    if [ ${ftype} = "XML" ] ; then
+        isXML=kTRUE
+        tmp1="${tmp1}.xml"
+        tmp2="${tmp2}.xml"
+    elif [ ${ftype} = "MI" ] ; then
+        isXML=kFALSE
+    else
+        echo "option ${ftype} not recognized! Use \"XML\" or \"MI\"!"
+        return 1
+    fi
+    dumpObject ${inFile1} ${fobject} ${ftype} ${tmp1%.xml}
+    dumpObject ${inFile2} ${fobject} ${ftype} ${tmp2%.xml}
+    diff ${tmp1} ${tmp2} >${outFile}
+    rm ${tmp1} ${tmp2} 2>/dev/null
+    rm "${tmp1}.xml" "${tmp2}.xml" 2>/dev/null
+    return 1
+}
+
+example1(){
+    ocdbMakeTable "/hera/alice/jwagner/simulations/benchmark/aliroot_tests/ppbench/rec.log" "log" "testout"
+}
+example2(){
+    dumpObject "/hera/alice/jwagner/OCDB/temp/TPC/Calib/RecoParam/Run0_999999999_v0_s0.root" "object" "XML" "testout2XML"
+    dumpObject "/hera/alice/jwagner/OCDB/temp/TPC/Calib/RecoParam/Run0_999999999_v0_s0.root" "object" "MI" "testout2MI" 
+}
+example3(){
+    file1="/hera/alice/jwagner/OCDB/temp/TPC/Calib/RecoParam/Run0_999999999_v0_s0.root"
+    file2="$ALICE_ROOT/OCDB/TPC/Calib/RecoParam/Run0_999999999_v0_s0.root"
+    diffObject ${file1} ${file2} "object" "MI" "testdiffMI"
+    diffObject ${file1} ${file2} "object" "XML" "testdiffXML"
+}
+source /hera/alice/jwagner/software/aliroot/loadMyAliroot.sh TPCdev
+example1
+example2
+example3
index e8b26fc..18b8885 100644 (file)
@@ -53,8 +53,8 @@
   // Compare alignment example:
   // Compare TPC alignemnt 2013 and 2010
   //
-  AliOCDBtoolkit::DumpOCDBFile("/cvmfs/alice.gsi.de/alice/data/2013/OCDB/TPC/Align/Data/Run0_999999999_v1_s0.root","TPCalign2013.dump",1);
-  AliOCDBtoolkit::DumpOCDBFile("/cvmfs/alice.gsi.de/alice/data/2010/OCDB/TPC/Align/Data/Run0_999999999_v1_s0.root","TPCalign2010.dump",1);
+  AliOCDBtoolkit::DumpOCDBFile("/cvmfs/alice.gsi.de/alice/data/2013/OCDB/TPC/Align/Data/Run0_999999999_v1_s0.root","TPCalign2013.dump",1,1);
+  AliOCDBtoolkit::DumpOCDBFile("/cvmfs/alice.gsi.de/alice/data/2010/OCDB/TPC/Align/Data/Run0_999999999_v1_s0.root","TPCalign2010.dump",1,1);
   diff  TPCalign2013.dump TPCalign2010.dump > TPCalign2013_TPCalign2010.diff
   //
   //    
@@ -137,7 +137,7 @@ void AliOCDBtoolkit::MakeDiffExampleUseCase(){
 }
 
 
-void AliOCDBtoolkit::DumpOCDBAsTxt(const TString fInput,const TString fType){
+void AliOCDBtoolkit::DumpOCDBAsTxt(const TString fInput, const TString fType, const TString outfile){
   //
   //
   //
@@ -171,7 +171,7 @@ void AliOCDBtoolkit::DumpOCDBAsTxt(const TString fInput,const TString fType){
         return;
     }
   cout <<"BEGINDUMP:" << endl;
-  DumpOCDB(cdbMap,cdbList);
+  DumpOCDB(cdbMap,cdbList,outfile);
 }
 
 
@@ -378,7 +378,7 @@ void AliOCDBtoolkit::MakeDiff(const TMap *cdbMap0, const TList *cdbList0, const
   }
 }
 
-void AliOCDBtoolkit::DumpOCDB(const TMap *cdbMap0, const TList *cdbList0){
+void AliOCDBtoolkit::DumpOCDB(const TMap *cdbMap0, const TList *cdbList0, const TString outfile){
   //
   // Dump the OCDB configuatation as formated text file 
   // with following collumns
@@ -401,6 +401,7 @@ void AliOCDBtoolkit::DumpOCDB(const TMap *cdbMap0, const TList *cdbList0){
   UInt_t hash;
   TMessage * file;
   Int_t size; 
+  FILE *ofs = fopen(outfile.Data(),"w");
   
   while ((CDBId  =(AliCDBId*) next())){
     cdbName = CDBId->GetPath();
@@ -415,11 +416,11 @@ void AliOCDBtoolkit::DumpOCDB(const TMap *cdbMap0, const TList *cdbList0){
     file->WriteObject(obj);
     size = file->Length();
     if(!obj){
-      printf("object %s empty!\n",cdbName.Data());
+      fprintf(ofs,"object %s empty!\n",cdbName.Data());
       continue;
     }
     hash = TString::Hash(file->Buffer(),size);
-    printf("%s\t%s\t%s/Run%d_%d_v%d_s%d.root\t%d\t%u\n",
+    fprintf(ofs,"%s\t%s\t%s/Run%d_%d_v%d_s%d.root\t%d\t%u\n",
           cdbName.Data(),
           cdbPath.Data(),
           cdbName.Data(),
@@ -434,6 +435,7 @@ void AliOCDBtoolkit::DumpOCDB(const TMap *cdbMap0, const TList *cdbList0){
     //cout << CDBId.ToString() << endl;
     delete file;
   }
+  fclose(ofs);
 }
 
 
@@ -460,7 +462,7 @@ void AliOCDBtoolkit::DumpOCDBFile(const char *finput , const char *foutput, Bool
   if (!xml){
     if (dumpMetaData) gROOT->ProcessLine(TString::Format("((TObject*)%p)->Dump(); >%s",entry, foutput).Data());
     if (!obj) return;
-    gROOT->ProcessLine(TString::Format("DumpObjectRecursive((TObject*)%p); >>%s",obj, foutput).Data());
+    gROOT->ProcessLine(TString::Format("AliOCDBtoolkit::DumpObjectRecursive((TObject*)%p); >>%s",obj, foutput).Data());
   }
   if (xml){
     TFile * f = TFile::Open(TString::Format("%s.xml",foutput).Data(),"recreate");
index b64676d..a647a83 100644 (file)
@@ -17,7 +17,7 @@ public:
   //static AliOCDBtoolkit * Instance();
   
   static void MakeDiffExampleUseCase();    // example usage
-  static void DumpOCDBAsTxt(const TString fInput,const TString fType);
+  static void DumpOCDBAsTxt(const TString fInput,const TString fType, const TString outfile);
   //
   static Bool_t   ParseInfoFromOcdbString(TString ocdbString, TString &ocdbPath, Int_t &run0, Int_t &run1, Int_t &version, Int_t &subVersion);   
   static Bool_t   ParseInfoFromOcdbString(TString ocdbString, AliCDBId &cdbId);
@@ -27,7 +27,7 @@ public:
   static void LoadOCDBFromLog(const char *logName, Int_t verbose);
   static void LoadOCDBFromMap(const TMap *cdbMap, const TList *cdbList);
   static void MakeDiff(const TMap *cdbMap0, const TList *cdbList0, const TMap *cdbMap1, const TList *cdbList1, Int_t verbose);
-  static void DumpOCDB(const TMap *cdbMap0, const TList *cdbList0);
+  static void DumpOCDB(const TMap *cdbMap0, const TList *cdbList0, const TString outfile);
   //
   // dump object functionality
   //