]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDPreprocessor.cxx
Coding violations corrected.
[u/mrichter/AliRoot.git] / TRD / AliTRDPreprocessor.cxx
index 08d04ef177c56269775de562a152936c1446ee22..a2998ba165cf937c6221b02ea2dfe393bdb337f6 100644 (file)
@@ -27,6 +27,7 @@
 //                                                                        //
 // Authors:                                                               //
 //   R. Bailhache (R.Bailhache@gsi.de)                                    //
+//   J. Book (jbook@ikf.uni-frankfurt.de)                                 //
 //   W. Monange   (w.monange@gsi.de)                                      //
 //   F. Kramer    (kramer@ikf.uni-frankfurt.de)                           //
 //                                                                        //
 #include "AliTRDCalibPadStatus.h"
 #include "AliTRDSaxHandler.h"
 #include "AliTRDgeometry.h"
+#include "AliTRDCalibChamberStatus.h"
 #include "Cal/AliTRDCalPad.h"
 #include "Cal/AliTRDCalPadStatus.h"
 #include "Cal/AliTRDCalDCS.h"
 #include "Cal/AliTRDCalSingleChamberStatus.h"
+#include "Cal/AliTRDCalChamberStatus.h"
 #include "Cal/AliTRDCalROC.h"
 
 ClassImp(AliTRDPreprocessor)
@@ -62,19 +65,33 @@ ClassImp(AliTRDPreprocessor)
 //______________________________________________________________________________________________
 AliTRDPreprocessor::AliTRDPreprocessor(AliShuttleInterface *shuttle)
   :AliPreprocessor("TRD", shuttle)
+  ,fCalDCSObjSOR(0)
+  ,fCalDCSObjEOR(0)
   ,fVdriftHLT(0)
 {
   //
   // Constructor
   //
 
+
   AddRunType("PHYSICS");
   AddRunType("STANDALONE");
   AddRunType("PEDESTAL");
   AddRunType("DAQ");
   
+  
+}
+//______________________________________________________________________________________________
+ AliTRDPreprocessor::AliTRDPreprocessor(const AliTRDPreprocessor&  ) :
+   AliPreprocessor("TRD",0),
+   fCalDCSObjSOR(0),
+   fCalDCSObjEOR(0),
+   fVdriftHLT(0)
+{
+  
+  Fatal("AliTRDPreprocessor", "copy constructor not implemented");
+  
 }
-
 //______________________________________________________________________________________________
 AliTRDPreprocessor::~AliTRDPreprocessor()
 {
@@ -82,8 +99,22 @@ AliTRDPreprocessor::~AliTRDPreprocessor()
   // Destructor
   //
 
-}
+  if (fCalDCSObjSOR != NULL) {
+    delete fCalDCSObjSOR;
+    fCalDCSObjSOR =0;
+  }
+  if (fCalDCSObjEOR != NULL) {
+    delete fCalDCSObjEOR;
+    fCalDCSObjEOR =0;
+  }
 
+}
+//______________________________________________________________________________________________
+AliTRDPreprocessor& AliTRDPreprocessor::operator = (const AliTRDPreprocessor& )
+{
+  Fatal("operator =", "assignment operator not implemented");
+  return *this;
+}
 //______________________________________________________________________________________________
 void AliTRDPreprocessor::Initialize(Int_t run, UInt_t startTime, UInt_t endTime)
 {
@@ -92,7 +123,7 @@ void AliTRDPreprocessor::Initialize(Int_t run, UInt_t startTime, UInt_t endTime)
   //
 
   AliPreprocessor::Initialize(run,startTime,endTime);
-
+  
 }
 
 //______________________________________________________________________________________________
@@ -108,7 +139,7 @@ UInt_t AliTRDPreprocessor::Process(TMap* dcsAliasMap)
   // always process the configuration data
   Int_t DCSConfigReturn = ProcessDCSConfigData();
   if(DCSConfigReturn) return DCSConfigReturn; 
-  
+
   if (runType=="PEDESTAL"){
     if(ExtractPedestals()) return 1;
     return 0;
@@ -116,19 +147,24 @@ UInt_t AliTRDPreprocessor::Process(TMap* dcsAliasMap)
 
   if ((runType=="PHYSICS") || (runType=="STANDALONE") || (runType=="DAQ")){
     // DCS
-    if(ProcessDCS(dcsAliasMap)) return 1; 
+    if(ProcessDCS(dcsAliasMap)) return 1;
     if(runType=="PHYSICS"){
       // HLT if On
       //TString runPar = GetRunParameter("HLTStatus");
       //if(runPar=="1") {
       if(GetHLTStatus()) {
-       if(ExtractHLT()) return 1; // for testing!
+       //if(ExtractHLT()) return 1; // for testing!
+       ExtractHLT();
       } 
       // DAQ if HLT failed
       if(!fVdriftHLT) {
-       if(ExtractDriftVelocityDAQ()) return 1; // for testing!
+       //if(ExtractDriftVelocityDAQ()) return 1; 
+       ExtractDriftVelocityDAQ(); // for testing!
       }
     }
+    //if((runType=="PHYSICS") || (runType=="STANDALONE")) {
+      //      if(ExtractHalfChamberStatusDAQ()) return 1;
+    //}
   }
   
   return 0;  
@@ -165,7 +201,7 @@ Bool_t AliTRDPreprocessor::ProcessDCS(TMap *dcsAliasMap)
 
   Log("****** DCS ******\n");
        
-  TObjArray * list=AliTRDSensorArray::GetList ();
+  TObjArray * list=AliTRDSensorArray::GetList();
        
   if (list == 0x0) {
     Log ("Error during AliTRDSensorArray::GetList");
@@ -273,7 +309,98 @@ Bool_t AliTRDPreprocessor::ProcessDCS(TMap *dcsAliasMap)
   return error;
 
 }
+//______________________________________________________________________________________________
+Bool_t AliTRDPreprocessor::ExtractHalfChamberStatusDAQ()
+{
+  //
+  // Half chamber status algorithm running on DAQ
+  //
+
+  Bool_t error = kFALSE;
+
+  AliCDBMetaData metaData;
+  metaData.SetBeamPeriod(0);
+  metaData.SetResponsible("Raphaelle Bailhache");
+  metaData.SetComment("TRD calib test");
+  
+  // Take the output of the DA on DAQ
+  TList * listpad = GetFileSources(kDAQ,"HALFCHAMBERSTATUS");
+  if (!listpad) {
+    Log("No list found for the HalfChamberStatus");
+    return kTRUE;
+  }
 
+  AliTRDCalibChamberStatus *calPed = 0x0;
+    
+  // loop through all files (only one normally)
+  UInt_t index = 0;
+  while (listpad->At(index)!=NULL) {
+    TObjString* fileNameEntry = (TObjString*) listpad->At(index);
+    if (fileNameEntry != NULL)
+      {
+        TString fileName = GetFile(kDAQ, "HALFCHAMBERSTATUS",
+                                  fileNameEntry->GetString().Data());
+       if(fileName.Length() ==0){
+         Log(Form("Error by retrieving the file %d for the halfchamberstatus",(Int_t)index));
+         delete listpad;
+         return kTRUE;
+       }
+       
+       TFile *f = TFile::Open(fileName);
+       f->GetObject("calibchamberstatus",calPed);
+       
+       if(calPed) {
+         
+         // store as reference data
+         TString name("HalfChamberStatus");
+         if(!StoreReferenceData("DAQData",(const char *)name,(TObject *) calPed,&metaData)){
+           Log(Form("Error storing AliTRDCalibPadStatus object %d as reference data",(Int_t)index));
+           error = kTRUE;
+         }
+       } // calPed
+       else Log(Form("Error getting AliTRDCalibChamberStatus onject from file"));
+                
+      } // fileNameEntry
+    ++index;
+  }// while (list)
+
+  Log(Form("%d elements found in the list for the halfchamberstatus",(Int_t)index));
+  if(index!=1){
+    delete listpad;
+    return kTRUE;
+  }
+
+  //
+  // Produce the AliTRDCalChamberStatus  name calHalfChamberStatus
+  //
+  AliTRDCalChamberStatus *calHalfChamberStatus = 0x0;
+  if(calPed) {
+    //calPed->AnalyseHisto();   // check number of events, create calHalfChamberStatus (done on DAQ)
+    if(fCalDCSObjEOR) {
+      calPed->CheckEORStatus((AliTRDCalDCS *)fCalDCSObjEOR);
+    }
+    calHalfChamberStatus=(AliTRDCalChamberStatus *)calPed->GetCalChamberStatus();
+  }
+
+  //
+  // Store  
+  //  
+
+  AliCDBMetaData md3; 
+  md3.SetObjectClassName("AliTRDCalChamberStatus");
+  md3.SetResponsible("Raphaelle Bailhache");
+  md3.SetBeamPeriod(1);
+  md3.SetComment("TRD calib test");
+  if(!Store("Calib","ChamberStatus"    ,(TObject *)calHalfChamberStatus, &md3, 0, kTRUE)){
+    Log("Error storing the pedestal");
+    delete listpad;
+    return kTRUE;
+  }
+  
+  delete listpad;
+  return error; 
+  
+}
 //______________________________________________________________________________________________
 Bool_t AliTRDPreprocessor::ExtractPedestals()
 {
@@ -679,38 +806,41 @@ Bool_t AliTRDPreprocessor::ExtractDriftVelocityDAQ()
       Int_t nbtg = 6*4*18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb0(1))
        + 6*  18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb2(1));
       Int_t nbfit        = calibra->GetNumberFit();
+      Int_t nbfitSuccess = calibra->GetNumberFitSuccess();
       Int_t nbE        = calibra->GetNumberEnt();
       
       // if enough statistics store the results
       if ((nbtg >                  0) && 
-         (nbfit        >= 0.5*nbE)) {
+         (nbfit        >= 0.5*nbE) && (nbE > 30) && (nbfitSuccess > 30)) {
        // create the cal objects
+       calibra->RemoveOutliers(1,kTRUE);
        calibra->PutMeanValueOtherVectorFit(1,kTRUE);
+       calibra->RemoveOutliers2(kTRUE);
        calibra->PutMeanValueOtherVectorFit2(1,kTRUE);
        TObjArray object      = calibra->GetVectorFit();
        AliTRDCalDet *objdriftvelocitydet = calibra->CreateDetObjectVdrift(&object,kTRUE);
-       TObject *objdriftvelocitypad = calibra->CreatePadObjectVdrift();
+       //      TObject *objdriftvelocitypad = calibra->CreatePadObjectVdrift();
        object              = calibra->GetVectorFit2();
        AliTRDCalDet *objtime0det         = calibra->CreateDetObjectT0(&object,kTRUE);
-       TObject *objtime0pad         = calibra->CreatePadObjectT0();
+       //      TObject *objtime0pad         = calibra->CreatePadObjectT0();
        calibra->ResetVectorFit();
        // store
-       if(!Store("Calib","ChamberVdrift"    ,(TObject *) objdriftvelocitydet,&md1,0,kTRUE)){
-         Log("Error storing the calibration object for the chamber vdrift (DAQ)");
-         error = kTRUE;
-       }
-       if(!Store("Calib","ChamberT0"        ,(TObject *) objtime0det        ,&md1,0,kTRUE)){
-         Log("Error storing the calibration object for the chamber t0 (DAQ)");
-         error = kTRUE;
-       }
-       if(!Store("Calib","LocalVdrift"      ,(TObject *) objdriftvelocitypad,&md2,0,kTRUE)){
-         Log("Error storing the calibration object for the local drift velocity (DAQ)");
-         error = kTRUE;
-       }
-       if(!Store("Calib","LocalT0"          ,(TObject *) objtime0pad        ,&md2,0,kTRUE)){
-         Log("Error storing the calibration object for the local time0 (DAQ)");
-         error = kTRUE;
-       }
+        if(!Store("Calib","ChamberVdrift"    ,(TObject *) objdriftvelocitydet,&md1,0,kTRUE)){
+                 Log("Error storing the calibration object for the chamber vdrift (DAQ)");
+                 error = kTRUE;
+               }
+               if(!Store("Calib","ChamberT0"        ,(TObject *) objtime0det        ,&md1,0,kTRUE)){
+                 Log("Error storing the calibration object for the chamber t0 (DAQ)");
+                 error = kTRUE;
+               }
+       //      if(!Store("Calib","LocalVdrift"      ,(TObject *) objdriftvelocitypad,&md2,0,kTRUE)){
+       //        Log("Error storing the calibration object for the local drift velocity (DAQ)");
+       //        error = kTRUE;
+       //      }
+       //      if(!Store("Calib","LocalT0"          ,(TObject *) objtime0pad        ,&md2,0,kTRUE)){
+       //        Log("Error storing the calibration object for the local time0 (DAQ)");
+       //        error = kTRUE;
+       //      }
       }
       else{
        Log("Not enough statistics for the average pulse height (DAQ)");
@@ -779,8 +909,8 @@ Bool_t AliTRDPreprocessor::ExtractHLT()
     
     // gain
     TH2I *histogain = (TH2I *) filehlt->Get("CH2d");
-    histogain->SetDirectory(0);
     if (histogain) {
+      histogain->SetDirectory(0);
       // store the reference data
       if(!StoreReferenceData("HLTData","Gain",(TObject *) histogain,&metaData)){
        Log("Error storing 2D histos for gain");
@@ -796,21 +926,21 @@ Bool_t AliTRDPreprocessor::ExtractHLT()
       Int_t nbE         = calibra->GetNumberEnt();
       // enough statistics
       if ((nbtg >                  0) && 
-         (nbfit        >= 0.5*nbE)) {
+         (nbfit        >= 0.5*nbE) && (nbE > 30)) {
        // create the cal objects
        calibra->PutMeanValueOtherVectorFit(1,kTRUE);
        TObjArray object           = calibra->GetVectorFit();
        AliTRDCalDet *objgaindet   = calibra->CreateDetObjectGain(&object);
-       TObject *objgainpad        = calibra->CreatePadObjectGain();
+       //      TObject *objgainpad        = calibra->CreatePadObjectGain();
        // store them
        if(!Store("Calib","ChamberGainFactor",(TObject *) objgaindet         ,&md1,0,kTRUE)){
          Log("Error storing the calibration object for the chamber gain");
          error = kTRUE;
        }
-       if(!Store("Calib","LocalGainFactor"  ,(TObject *) objgainpad         ,&md2,0,kTRUE)){
-         Log("Error storing the calibration object for the local gain factor");
-         error = kTRUE;
-       }
+       //      if(!Store("Calib","LocalGainFactor"  ,(TObject *) objgainpad         ,&md2,0,kTRUE)){
+       //        Log("Error storing the calibration object for the local gain factor");
+       //        error = kTRUE;
+       //      }
       }
       calibra->ResetVectorFit();
     }// if histogain
@@ -818,8 +948,8 @@ Bool_t AliTRDPreprocessor::ExtractHLT()
     // vdrift
     fVdriftHLT = kFALSE;
     TProfile2D *histodriftvelocity = (TProfile2D *) filehlt->Get("PH2d");
-    histodriftvelocity->SetDirectory(0);
     if (histodriftvelocity) {
+      histodriftvelocity->SetDirectory(0);
       // store the reference data
       if(!StoreReferenceData("HLTData","VdriftT0",(TObject *) histodriftvelocity,&metaData)){
        Log("Error storing 2D Profile for average pulse height (HLT)");
@@ -832,19 +962,22 @@ Bool_t AliTRDPreprocessor::ExtractHLT()
       Int_t nbtg = 6*4*18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb0(1))
        + 6*  18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb2(1));
       Int_t nbfit        = calibra->GetNumberFit();
+      Int_t nbfitSuccess = calibra->GetNumberFitSuccess();
       Int_t nbE          = calibra->GetNumberEnt();
       // enough statistics
       if ((nbtg >                  0) && 
-         (nbfit        >= 0.5*nbE)) {
+         (nbfit        >= 0.5*nbE) && (nbE > 30) && (nbfitSuccess > 30)) {
        // create the cal objects
+       calibra->RemoveOutliers(1,kTRUE);
        calibra->PutMeanValueOtherVectorFit(1,kTRUE);
+       calibra->RemoveOutliers2(kTRUE);
        calibra->PutMeanValueOtherVectorFit2(1,kTRUE);
        TObjArray object  = calibra->GetVectorFit();
        AliTRDCalDet *objdriftvelocitydet = calibra->CreateDetObjectVdrift(&object,kTRUE);
-       TObject *objdriftvelocitypad      = calibra->CreatePadObjectVdrift();
+       //      TObject *objdriftvelocitypad      = calibra->CreatePadObjectVdrift();
        object              = calibra->GetVectorFit2();
        AliTRDCalDet *objtime0det  = calibra->CreateDetObjectT0(&object,kTRUE);
-       TObject *objtime0pad       = calibra->CreatePadObjectT0();
+       //TObject *objtime0pad       = calibra->CreatePadObjectT0();
        // store them
        if(!Store("Calib","ChamberVdrift"    ,(TObject *) objdriftvelocitydet,&md1,0,kTRUE)){
          Log("Error storing the calibration object for the chamber vdrift (HLT)");
@@ -854,14 +987,14 @@ Bool_t AliTRDPreprocessor::ExtractHLT()
          Log("Error storing the calibration object for the chamber t0 (HLT)");
          error = kTRUE;
        }
-       if(!Store("Calib","LocalVdrift"      ,(TObject *) objdriftvelocitypad,&md2,0,kTRUE)){
-         Log("Error storing the calibration object for the local drift velocity (HLT)");
-         error = kTRUE;
-       }
-       if(!Store("Calib","LocalT0"          ,(TObject *) objtime0pad        ,&md2,0,kTRUE)){
-         Log("Error storing the calibration object for the local time0 (HLT)");
-         error = kTRUE;
-       }
+       // if(!Store("Calib","LocalVdrift"      ,(TObject *) objdriftvelocitypad,&md2,0,kTRUE)){
+       //        Log("Error storing the calibration object for the local drift velocity (HLT)");
+       //        error = kTRUE;
+       //      }
+       //      if(!Store("Calib","LocalT0"          ,(TObject *) objtime0pad        ,&md2,0,kTRUE)){
+       //        Log("Error storing the calibration object for the local time0 (HLT)");
+       //        error = kTRUE;
+       //      }
        fVdriftHLT = kTRUE;
       }
       calibra->ResetVectorFit();
@@ -869,8 +1002,8 @@ Bool_t AliTRDPreprocessor::ExtractHLT()
     
     // prf
     TProfile2D *histoprf = (TProfile2D *) filehlt->Get("PRF2d");
-    histoprf->SetDirectory(0);
     if (histoprf) {
+      histoprf->SetDirectory(0);    
       // store reference data
       if(!StoreReferenceData("HLTData","PRF",(TObject *) histoprf,&metaData)){
        Log("Error storing the 2D Profile for Pad Response Function");
@@ -886,7 +1019,7 @@ Bool_t AliTRDPreprocessor::ExtractHLT()
       Int_t nbE          = calibra->GetNumberEnt();
       // enough statistics
       if ((nbtg >                  0) && 
-         (nbfit        >= 0.95*nbE)) {
+         (nbfit        >= 0.95*nbE) && (nbE > 30)) {
        // create cal pad objects 
        TObjArray object            = calibra->GetVectorFit();
        TObject *objPRFpad          = calibra->CreatePadObjectPRF(&object);
@@ -914,7 +1047,7 @@ UInt_t AliTRDPreprocessor::ProcessDCSConfigData()
   // parse it/them and store TObjArrays in the CDB
   //
   // return 0 for success, otherwise:
-  //  5 : Could not get the SOR and EOR file from the FXS
+  //  5 : Could not get the (SOR and EOR) or SOR file from the FXS
   //  8 : Both files are not valid
   // 10 : SOR XML is not well-formed
   // 11 : EOR XML is not well-formed
@@ -929,67 +1062,77 @@ UInt_t AliTRDPreprocessor::ProcessDCSConfigData()
 
   // get the XML files
   Log("Requesting the 2 summaryfiles from the FXS..");
-  const char *xmlFileS = GetFile(kDCS,"CONFIGSUMMARYSOR","");
-  const char *xmlFileE = GetFile(kDCS,"CONFIGSUMMARYEOR","");
+  TString xmlFileS = GetFile(kDCS,"CONFIGSUMMARYSOR","");
+  TString xmlFileE = GetFile(kDCS,"CONFIGSUMMARYEOR","");
   // Request EOR and SOR files from the fxs, if both are not found exit
 
-  if (xmlFileS == NULL && xmlFileE == NULL) {
-    Log(Form("ERROR: SOR and EOR Files %s and %s not found!",xmlFileS,xmlFileE));
-    return 5;
-  } 
-
-  Bool_t fileExistE = true, fileExistS = true;
+  Bool_t fileExistE = kTRUE, fileExistS = kTRUE;
 
   // check if the files are there
-  if (xmlFileS == NULL) {
-    Log(Form("Warning: SOR File %s not found!",xmlFileS));
-    fileExistS = false;
-  } else if (xmlFileE == NULL) {
-    Log(Form("Warning: EOR File %s not found!",xmlFileE));
-    fileExistE = false;
-  } else {
-    Log(Form("Both Files (%s and %s) found.",xmlFileS,xmlFileE));
+  if (xmlFileS.IsNull()) {
+         Log(Form("Warning: SOR file %s not found!", xmlFileS.Data()));
+    fileExistS = kFALSE;
+  } else Log(Form("SOR file found: %s", xmlFileS.Data()));
+
+  if (xmlFileE.IsNull()) {
+    Log(Form("Warning: EOR file %s not found!", xmlFileE.Data()));
+    fileExistE = kFALSE;
+  } else Log(Form("EOR file found: %s", xmlFileE.Data()));
+
+  if (fileExistS==0 && fileExistE==0) {
+    Log(Form("ERROR: SOR and EOR files not found: %s and %s", xmlFileS.Data(), xmlFileE.Data()));
+    return 5;
   }
 
   // test the files
   if (fileExistS) {
+    Log("Checking if SOR file is valid.");
     std::ifstream fileTestS;
-    fileTestS.open(xmlFileS, std::ios_base::binary | std::ios_base::in);
+    fileTestS.open(xmlFileS.Data(), std::ios_base::binary | std::ios_base::in);
     if (!fileTestS.good() || fileTestS.eof() || !fileTestS.is_open()) {
-      Log(Form("Warning: File %s not valid!",xmlFileS));
-      fileExistS = false;
+      Log(Form("Warning: File %s not valid!",xmlFileS.Data()));
+      fileExistS = kFALSE;
+      return 5;
     }
+    Log("Checking if SOR file is not empty.");
     fileTestS.seekg(0, std::ios_base::end);
     if (static_cast<int>(fileTestS.tellg()) < 2) {
-      Log(Form("Warning: File %s is empty!",xmlFileS));
-      fileExistS = false;
+      Log(Form("Warning: File %s is empty!",xmlFileS.Data()));
+      fileExistS = kFALSE;
+      return 5;
     }
   }
+
+
   if (fileExistE) {
+    Log("Checking if EOR file is valid.");
     std::ifstream fileTestE;
-    fileTestE.open(xmlFileE, std::ios_base::binary | std::ios_base::in);
+    fileTestE.open(xmlFileE.Data(), std::ios_base::binary | std::ios_base::in);
     if (!fileTestE.good() || fileTestE.eof() || !fileTestE.is_open()) {
-      Log(Form("Warning: File %s not valid!",xmlFileE));
-      fileExistE = false;
+      Log(Form("Warning: File %s not valid!",xmlFileE.Data()));
+      fileExistE = kFALSE;
     }
+    Log("Checking if EOR file is not empty.");
     fileTestE.seekg(0, std::ios_base::end);
     if (static_cast<int>(fileTestE.tellg()) < 2) {
-      Log(Form("Warning: File %s is empty!",xmlFileE));
-      fileExistE = false;
+      Log(Form("Warning: File %s is empty!",xmlFileE.Data()));
+      fileExistE = kFALSE;
     }
   }
-  if (!fileExistS && !fileExistE) {
+
+  if (fileExistS==0 && fileExistE==0) {
     Log("ERROR: Both files (SOR/EOR) are not valid!");
     return 8;
   }
+
   Log("One or both of the tested files are valid.");
 
   // make a robust XML validation
   TSAXParser testParser;
-  if (fileExistS && testParser.ParseFile(xmlFileS) < 0 ) {
+  if (fileExistS && testParser.ParseFile(xmlFileS.Data()) < 0 ) {
     Log("ERROR: XML content (SOR) is not well-formed.");
     return 10;
-  } else if (fileExistE && testParser.ParseFile(xmlFileE) < 0 ) {
+  } else if (fileExistE && testParser.ParseFile(xmlFileE.Data()) < 0 ) {
     Log("ERROR: XML content (EOR) is not well-formed.");
     return 11;
   }
@@ -1000,11 +1143,11 @@ UInt_t AliTRDPreprocessor::ProcessDCSConfigData()
   AliTRDSaxHandler saxHandlerS, saxHandlerE;
   if (fileExistS) {
     saxParserS.ConnectToHandler("AliTRDSaxHandler", &saxHandlerS);
-    saxParserS.ParseFile(xmlFileS);
+    saxParserS.ParseFile(xmlFileS.Data());
   }
   if (fileExistE) {
     saxParserE.ConnectToHandler("AliTRDSaxHandler", &saxHandlerE);
-    saxParserE.ParseFile(xmlFileE);
+    saxParserE.ParseFile(xmlFileE.Data());
   }
   // report errors of the parser if present
   if (fileExistS && saxParserS.GetParseCode() != 0) {
@@ -1028,45 +1171,53 @@ UInt_t AliTRDPreprocessor::ProcessDCSConfigData()
   Log("SAX handler reports no errors.");
 
   // put both objects in one TObjArray to store them
-  TObjArray* fCalObjArray = new TObjArray(2);
-  fCalObjArray->SetOwner();
+  TObjArray* calObjArray = new TObjArray(2);
+  calObjArray->SetOwner();
 
   // get the calibration object storing the data from the handler
   if (fileExistS) {
-    AliTRDCalDCS* fCalDCSObjSOR = saxHandlerS.GetCalDCSObj();
+    if(fCalDCSObjSOR) delete fCalDCSObjSOR;
+    fCalDCSObjSOR = (AliTRDCalDCS *) saxHandlerS.GetCalDCSObj()->Clone();
     fCalDCSObjSOR->EvaluateGlobalParameters();
     fCalDCSObjSOR->SetRunType(GetRunType());
     fCalDCSObjSOR->SetStartTime(GetStartTimeDCSQuery());
     fCalDCSObjSOR->SetEndTime(GetEndTimeDCSQuery());
-    fCalObjArray->AddAt(fCalDCSObjSOR,0);
+    calObjArray->AddAt(fCalDCSObjSOR,0);
     Log("TRDCalDCS object for SOR created.");
   }
 
   if (fileExistE) {
-    AliTRDCalDCS* fCalDCSObjEOR = saxHandlerE.GetCalDCSObj();
+    if(fCalDCSObjEOR) delete fCalDCSObjEOR;
+    fCalDCSObjEOR = (AliTRDCalDCS *) saxHandlerE.GetCalDCSObj()->Clone();
     fCalDCSObjEOR->EvaluateGlobalParameters();
     fCalDCSObjEOR->SetRunType(GetRunType());
     fCalDCSObjEOR->SetStartTime(GetStartTimeDCSQuery());
     fCalDCSObjEOR->SetEndTime(GetEndTimeDCSQuery());
-    fCalObjArray->AddAt(fCalDCSObjEOR,1);
+    calObjArray->AddAt(fCalDCSObjEOR,1);
     Log("TRDCalDCS object for EOR created.");
+    //    printf("globalnumberoftimebins %d \n",fCalDCSObjEOR->GetGlobalNumberOfTimeBins());
   }
 
+
+
   // store the DCS calib data in the CDB
   AliCDBMetaData metaData1;
   metaData1.SetBeamPeriod(0);
   metaData1.SetResponsible("Frederick Kramer");
   metaData1.SetComment("DCS configuration data in two AliTRDCalDCS objects in one TObjArray (0:SOR, 1:EOR).");
-  if (!Store("Calib", "DCS", fCalObjArray, &metaData1, 0, kTRUE)) {
+  if (!Store("Calib", "DCS", calObjArray, &metaData1, 0, kTRUE)) {
     Log("problems while storing DCS config data object");
     return 16;
   } else {
     Log("DCS config data object stored.");
   }
 
-  //delete fCalObjArray;
+  //delete calObjArray;
 
   Log("SUCCESS: Processing of the DCS config summary file DONE.");  
   return 0;
 }
 
+
+
+