Split DAQ DA into two tasks
[u/mrichter/AliRoot.git] / TRD / AliTRDPreprocessor.cxx
index 74ab4f872b44b099e5eb91f128461e3288af9ab5..20d455d65188b53bfeed10bcdcd518f001d94b23 100644 (file)
@@ -55,7 +55,9 @@ ClassImp(AliTRDPreprocessor)
 
 //______________________________________________________________________________________________
 AliTRDPreprocessor::AliTRDPreprocessor(AliShuttleInterface *shuttle)
-                   :AliPreprocessor("TRD", shuttle)
+  :AliPreprocessor("TRD", shuttle),
+  fResult(0),
+  fVdriftHLT(0)
 {
   //
   // Constructor
@@ -90,12 +92,42 @@ UInt_t AliTRDPreprocessor::Process(TMap* dcsAliasMap)
   // Process DCS and calibration part for HLT
   //
 
-  UInt_t result = 0;
+  fResult = 0;
 
   //
   // DCS
   //
   
+  ProcessDCS(dcsAliasMap);
+
+  //
+  // Process the calibration data for the HLT and DAQ part
+  //
+
+  TString runType = GetRunType();
+  printf("runtype %s\n",(const char*)runType);
+
+
+  if (strcmp(runType, "PEDESTAL") == 0){
+    ExtractPedestals();
+  }
+  
+  if (strcmp(runType, "PHYSICS") == 0){
+    printf("test\n");
+    //if(GetRunParameter("HLTStatus")==1) ExtractHLT();
+    ExtractHLT();
+    ExtractDriftVelocityDAQ();
+  }
+  printf("result is %d\n",fResult);  
+  return fResult;  
+  
+}
+
+
+//______________________________________________________________________________
+void AliTRDPreprocessor::ProcessDCS(TMap * dcsAliasMap)
+{
+
   AliCDBMetaData metaData;
   metaData.SetBeamPeriod(0);
   metaData.SetResponsible("Wilfried Monange/Raphaelle Bailhache");
@@ -107,435 +139,490 @@ UInt_t AliTRDPreprocessor::Process(TMap* dcsAliasMap)
   TObjArray * list = AliTRDSensorArray::GetList ();
        
   if (list == 0x0) {
-         Log ("Error during AliTRDSensorArray::GetList");
-         Log ("DCS will not be processing");
-  }else { 
-       
-       Int_t nEntries = list->GetEntries ();
-       Log (Form ("%d alias loaded", nEntries));
+    Log ("Error during AliTRDSensorArray::GetList");
+    Log ("DCS will not be processing");
+    return;
+  }
+
+  Int_t nEntries = list->GetEntries ();
+  Log (Form ("%d alias loaded", nEntries));
                
-       Bool_t * results = new Bool_t [nEntries];
-       Int_t  * nGraph = new Int_t [nEntries];
+  Bool_t * results=new Bool_t [nEntries];
+  Int_t  * nGraph=new Int_t [nEntries];
                
-       for (Int_t iAlias = 0; iAlias < nEntries; iAlias++) {
+  for (Int_t iAlias = 0; iAlias < nEntries; iAlias++) {
                        
-               AliTRDSensorArray * oneTRDDCS = (AliTRDSensorArray *)list->At (iAlias);
+    AliTRDSensorArray * oneTRDDCS = (AliTRDSensorArray *)list->At (iAlias);
                        
-               oneTRDDCS->SetStartTime (TTimeStamp (fStartTime));
-               oneTRDDCS->SetEndTime (TTimeStamp (fEndTime));
+    oneTRDDCS->SetStartTime (TTimeStamp (fStartTime));
+    oneTRDDCS->SetEndTime (TTimeStamp (fEndTime));
                        
-               Log (Form("Processing DCS : \"%s\"", 
-                       oneTRDDCS->GetStoreName ().Data ()));
+    Log (Form("Processing DCS : \"%s\"", oneTRDDCS->GetStoreName ().Data ()));
                        
-               TMap * map = oneTRDDCS->ExtractDCS (dcsAliasMap);
+    TMap * map;
+
+    map=oneTRDDCS->ExtractDCS (dcsAliasMap);
                
-               nGraph [iAlias] = map->GetEntries ();
+    nGraph [iAlias] = map->GetEntries ();
                
-               if (nGraph [iAlias] == 0) {
-                       Log("No TGraph for this dcsDatapointAlias : not stored");
-                       results [iAlias] = kFALSE;
-                       result |= kEStoreRefDCS;
-                       continue;
-               }
+    if (nGraph [iAlias] == 0) {
+      Log("No TGraph for this dcsDatapointAlias : not stored");
+      results [iAlias] = kFALSE;
+      continue;
+    }
                
-               oneTRDDCS->SetGraph (map);
-
-               results [iAlias] = Store("Calib", 
-                                                                oneTRDDCS->GetStoreName ().Data (), 
-                                                                oneTRDDCS,  
-                                                                &metaData,
-                                                                0, 
-                                                                kTRUE); 
+    oneTRDDCS->SetGraph(map);
+    results[iAlias]=Store("Calib", oneTRDDCS->GetStoreName().Data(), oneTRDDCS, &metaData, 0, kTRUE); 
+    delete map;                
+
+    //results [iAlias] = StoreReferenceData("Calib", oneTRDDCS->GetStoreName ().Data (), oneTRDDCS, &metaData); 
+
+
+    if (!results[iAlias]) {
+      AliError("Problem during StoreRef DCS"); 
+      fResult|=kEStore;
+    }
+
+
+    //BEGIN TEST (should not be removed ...)
+    /*
+    oneTRDDCS->ClearGraph();
+    oneTRDDCS->ClearFit();
+    oneTRDDCS->SetDiffCut2 (0.1);
+    map=oneTRDDCS->ExtractDCS (dcsAliasMap);
+    oneTRDDCS->SetGraph (map);
+    Store("Calib", ("cut_"+oneTRDDCS->GetStoreName()).Data(), oneTRDDCS, &metaData, 0, kTRUE); 
+    delete map;
+
+
+    if(iAlias==1 || iAlias==19) continue;
+    
+    oneTRDDCS->ClearGraph();
+    oneTRDDCS->ClearFit();
+    oneTRDDCS->SetDiffCut2(0);
+    map=oneTRDDCS->ExtractDCS(dcsAliasMap);
+    oneTRDDCS->MakeSplineFit(map);
+    Store("Calib", ("fit_"+oneTRDDCS->GetStoreName()).Data() , oneTRDDCS, &metaData, 0, kTRUE); 
+    delete map;
+
+     
+    oneTRDDCS->ClearGraph(); 
+    oneTRDDCS->ClearFit();
+    oneTRDDCS->SetDiffCut2 (0.1);
+    map=oneTRDDCS->ExtractDCS (dcsAliasMap);
+    oneTRDDCS->MakeSplineFit(map);
+    Store("Calib", ("cutfit_"+oneTRDDCS->GetStoreName()).Data() , oneTRDDCS, &metaData, 0, kTRUE); 
+    delete map;
+    */    
+    //END TEST
+
+      
+      
+  }
                
-               /*      
-               results [iAlias] = StoreReferenceData("Calib", 
-                                                                                               oneTRDDCS->GetStoreName ().Data (), 
-                                                                                               oneTRDDCS, 
-                                                                                               &metaData); 
-               */
-               if (!results [iAlias]) {
-                       AliError("Problem during StoreRef DCS"); 
-                       result |= kEStoreRefDCS;
-               }
-                       
-               delete map;
-                       
-               /*
-                       //BEGIN TEST
-               oneTRDDCS->SetDiffCut2 (0.1);
-               map = oneTRDDCS->ExtractDCS (dcsAliasMap);
-               oneTRDDCS->SetGraph (map);
-                       
-               StoreReferenceData("Calib", 
-                                                       (oneTRDDCS->GetStoreName ()+"Cut").Data(), 
-                                                       oneTRDDCS, &metaData); 
-               delete map;
-                       //END TEST
-               */
+  Log ("         Summury of DCS :\n");
+  Log (Form("%30s %10s %10s", "dcsDatapointAlias", "Stored ?", "# graph"));
+  for (Int_t iAlias = 0; iAlias < nEntries; iAlias++) {
+    AliTRDSensorArray * oneTRDDCS = (AliTRDSensorArray *)list->At (iAlias);
+    Log (Form ("%30s %10s %4d", 
+              oneTRDDCS->GetStoreName ().Data (),
+              results[iAlias] ? "ok" : "X",
+              nGraph [iAlias]));
+  }
+  Log ("*********** End of DCS **********");
+  
+  delete results;
+  delete nGraph;
+
+
+}
+
+//______________________________________________________________________________________________
+void AliTRDPreprocessor::ExtractPedestals()
+{
+  //
+  // Pedestal running on LDCs at the DAQ
+  //
+
+  // Init a AliTRDCalibPadStatus
+  AliTRDCalibPadStatus calPedSum = AliTRDCalibPadStatus();
+
+  AliCDBMetaData metaData;
+  metaData.SetBeamPeriod(0);
+  metaData.SetResponsible("Raphaelle Bailhache");
+  metaData.SetComment("TRD calib test");
+  
+  // Sum the contributions of the LDCs
+  TList * listpad = GetFileSources(kDAQ,"PADSTATUS");
+  if (listpad) {
+    
+    // loop through all files from LDCs
+
+    UInt_t index = 0;
+    while (listpad->At(index)!=NULL) {
+      TObjString* fileNameEntry = (TObjString*) listpad->At(index);
+      if (fileNameEntry != NULL) {
+        TString fileName = GetFile(kDAQ, "PADSTATUS",
+                                  fileNameEntry->GetString().Data());
+       if(fileName.Length() !=0){
+         TFile *f = TFile::Open(fileName);
+         AliTRDCalibPadStatus *calPed;
+         f->GetObject("calibpadstatus",calPed);
+         
+         if(calPed){
+
+           // analyse
+           calPed->AnalyseHisto();
+           
+           // store as reference data
+           TString name("PadStatus");
+           name += (Int_t)index;
+           if(!StoreReferenceData("DAQData",(const char *)name,(TObject *) calPed,&metaData)){
+             Log(Form("Error storing AliTRDCalibPadStatus object %d as reference data",(Int_t)index));
+             fResult |= kEStore;
+           }
+           
+              
+           // Add to the calPedSum
+           for (Int_t idet=0; idet<540; idet++) {
+             AliTRDCalROC *rocMean  = calPed->GetCalRocMean(idet, kFALSE);
+             if ( rocMean )  calPedSum.SetCalRocMean(rocMean,idet);
+             AliTRDCalROC *rocRMS = calPed->GetCalRocRMS(idet, kFALSE);
+             if ( rocRMS )  calPedSum.SetCalRocRMS(rocRMS,idet);
+           }// det loop
+           
+         } // calPed
        }
-               
-       Log ("         Summury of DCS :\n");
-       Log (Form("%30s %10s %10s", "dcsDatapointAlias", "Stored ?", "# graph"));
-       for (Int_t iAlias = 0; iAlias < nEntries; iAlias++) {
-               AliTRDSensorArray * oneTRDDCS = (AliTRDSensorArray *)list->At (iAlias);
-               Log (Form ("%30s %10s %4d", 
-                       oneTRDDCS->GetStoreName ().Data (),
-                       results[iAlias] ? "ok" : "X",
-                       nGraph [iAlias]));
+       else{
+         Log(Form("Error by retrieving the file %d for the pedestal",(Int_t)index));
+         fResult |= kEGetFileDAQ;  
        }
-       Log ("*********** End of DCS **********");
-       
-       delete results;
-       delete nGraph;
+      }// fileNameEntry length
+      ++index;
+    }// while (list)
+    Log(Form("%d elements found in the list for the pedestal",(Int_t)index));
+    if(index==0){
+      fResult |= kEEmptyListDAQ;
+    }
+    //
+    // Store pedestal entry to OCDB
+    //
+
+
+    // Create Pad Status
+    AliTRDCalPadStatus *calPadStatus = calPedSum.CreateCalPadStatus();
+    AliCDBMetaData md3; 
+    md3.SetObjectClassName("AliTRDCalPadStatus");
+    md3.SetResponsible("Raphaelle Bailhache");
+    md3.SetBeamPeriod(1);
+    md3.SetComment("TRD calib test");
+    if(!Store("Calib","PadStatus"    ,(TObject *)calPadStatus, &md3, 0, kTRUE)){
+      Log("Error storing the pedestal");
+      fResult |= kEStore;    
+    }
+    delete listpad;
+  }
+  else {
+    Log("No list found for the PEDESTRAL Run");
+    fResult |= kEGetFileDAQ;    
   }
+  
 
+}
+//______________________________________________________________________________________________
+void AliTRDPreprocessor::ExtractDriftVelocityDAQ()
+{
   //
-  // Process the calibration data for the HLT part
+  // Drift velocity DA running on monitoring servers at the DAQ
   //
 
- // Objects for HLT and DAQ zusammen
+
+  // Objects for HLT and DAQ zusammen
   AliTRDCalibraFit *calibra = AliTRDCalibraFit::Instance();
-  Bool_t hltVdrifthisto = kFALSE;
+  AliCDBMetaData metaData;
+  metaData.SetBeamPeriod(0);
+  metaData.SetResponsible("Raphaelle Bailhache");
+  metaData.SetComment("TRD calib test");
   // Store the infos for the detector
-  AliCDBMetaData *md1= new AliCDBMetaData()
-  md1->SetObjectClassName("AliTRDCalDet");
-  md1->SetResponsible("Raphaelle Bailhache");
-  md1->SetBeamPeriod(0);
-  md1->SetComment("TRD calib test");
+  AliCDBMetaData md1
+  md1.SetObjectClassName("AliTRDCalDet");
+  md1.SetResponsible("Raphaelle Bailhache");
+  md1.SetBeamPeriod(0);
+  md1.SetComment("TRD calib test");
   // Store the infos for the pads
-  AliCDBMetaData *md2= new AliCDBMetaData(); 
-  md2->SetObjectClassName("AliTRDCalPad");
-  md2->SetResponsible("Raphaelle Bailhache");
-  md2->SetBeamPeriod(0);
-  md2->SetComment("TRD calib test");
-  //
-  // Process the calibration data for the HLT part
-  //
+  AliCDBMetaData md2; 
+  md2.SetObjectClassName("AliTRDCalPad");
+  md2.SetResponsible("Raphaelle Bailhache");
+  md2.SetBeamPeriod(0);
+  md2.SetComment("TRD calib test");
 
-  // How long does it take for the HLT part?
-  TStopwatch timer;
-  timer.Start();
 
-  //Run type
-  TString runType = GetRunType();
-  Log(Form("Run type for run %d: %s", fRun, runType.Data()));
-  if (strcmp(runType, "PHYSICS") != 0){
-    Log("Nothing to do for HLT!");
-  }
-  else{
-    // note that the parameters are returned as character strings!
-    const char* nEvents = GetRunParameter("totalEvents");
-    if (nEvents) {
-      Log(Form("Number of events for run %d: %s",fRun, nEvents));
-    } else {
-      Log(Form("Number of events not put in logbook!"));
-    }
 
-    // Take the file from the HLT file exchange server
-    TList *filesourceshlt = GetFileSources(kHLT,"GAINDRIFTPRF");
-    if (!filesourceshlt) {
-      Log(Form("No sources found for GAINDRIFTPRF for run %d !",fRun));
-      result |= kEListFileHLT;
-    }
-    else{
-      if (filesourceshlt->GetSize() != 1) {
-       Log(Form("More than one source found for GAINDRIFTPRF for run %d!",fRun));
-       filesourceshlt->Print();
-       result |= kEListFileHLT;
-      }
-      else {
-
-       //Debug mode
-       //calibra->SetDebugLevel(2);       //Debug
-
-       // Loop over the files taken from the HLT
-       TIter iter(filesourceshlt);
-       TObjString *sourcehlt;
-       while ((sourcehlt = dynamic_cast<TObjString *> (iter.Next()))) {
-    
-         TString filenamehlt = GetFile(kHLT,"GAINDRIFTPRF",sourcehlt->GetName());
-         if (filenamehlt.Length() == 0) {
-           Log(Form("Error retrieving file from source %d failed!", sourcehlt->GetName()));
-           result |= kEOpenFileHLT;
-         }
-         else{
-
-           // Init some things
-           TH2I         *histogain           = 0x0; // Histogram taken from HLT for gain factor
-           TProfile2D   *histodriftvelocity  = 0x0; // Profile taken from HLT for drift velocity and time0
-           TProfile2D   *histoprf            = 0x0; // Profile taken from HLT for prf
-
-
-           // Take the histos
-           TFile *filehlt = TFile::Open(filenamehlt);
-           histogain = (TH2I *) filehlt->Get("CH2d");
-           histogain->SetDirectory(0);
-           if (!histogain) {
-             Log("Error retrieving 2D histos for gain failed!");
-             result |= kETakeHistoHLT;
-           }
-           histodriftvelocity = (TProfile2D *) filehlt->Get("PH2d");
-           histodriftvelocity->SetDirectory(0);
-           if (!histodriftvelocity) {
-             Log("Error retrieving 2D Profile for average pulse height failed!");
-             result |= kETakeHistoHLT;
-           }
-           histoprf = (TProfile2D *) filehlt->Get("PRF2d");
-           histoprf->SetDirectory(0);
-           if (!histoprf) {
-             Log("Error retrieving 2D Profile for Pad Response Function failed!");
-             result |= kETakeHistoHLT;
-           }
-           filehlt->Close();
+
+  // Take the file from the DAQ file exchange server
+  TList *listdaq = GetFileSources(kDAQ,"VDRIFT");
+  if (listdaq) {
+    if(listdaq->GetSize() ==1){
+      TObjString* fileNameEntry = (TObjString*) listdaq->At(0);
+      if(fileNameEntry != NULL){
+       TString fileName = GetFile(kDAQ, "VDRIFT",
+                                  fileNameEntry->GetString().Data());
+       if(fileName.Length() !=0){
+         TFile *filedaq = TFile::Open(fileName);
+         TProfile2D *histodriftvelocity = (TProfile2D *) filedaq->Get("PH2d");
+         if (histodriftvelocity) {
            
-           // try to fit them and store
-           if (histogain) {
-             if(!StoreReferenceData("HLTData","Gain",(TObject *) histogain,&metaData)){
-               Log("Error storing 2D histos for gain as reference data");
-               result |= kEStoreHistoHLT;
-             }
-             Log("Take the CH reference data. Now we will try to fit\n");
-             calibra->SetMinEntries(100); // If there is less than 100 entries in the histo: no fit
-             calibra->AnalyseCH(histogain);
-             Int_t nbtg = 6*4*18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb0(0))
-               + 6*  18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb2(0));
-             Int_t nbfit       = calibra->GetNumberFit();
-             Int_t nbE         = calibra->GetNumberEnt();
-             if ((nbtg >                  0) && 
-                 (nbfit        >= 0.95*nbE)) {
-               TObjArray object             = calibra->GetVectorFit();
-               AliTRDCalDet *objgaindet   = calibra->CreateDetObjectGain(&object,calibra->GetScaleFitFactor(),kTRUE);
-               TObject *objgainpad        = calibra->CreatePadObjectGain();
-               if(!Store("Calib","ChamberGainFactor",(TObject *) objgaindet         ,md1,0,kTRUE)){
-                 Log("Error storing the calibration object for the chamber gain");
-                 result |= kEStoreCalHLT;
-               }
-               if(!Store("Calib","LocalGainFactor"  ,(TObject *) objgainpad         ,md2,0,kTRUE)){
-                 Log("Error storing the calibration object for the local gain factor");
-                 result |= kEStoreCalHLT;
-               }
-             }
-             else{
-               Log("Not enough statistics for the gain");
-               result |= kEFitHistoHLT;
-             }
-             calibra->ResetVectorFit();
+           // store as reference data
+           if(!StoreReferenceData("DAQData","VdriftT0",(TObject *) histodriftvelocity,&metaData)){
+             Log("Error storing 2D Profile for vdrift from the DAQ");
+             fResult |= kEStore;
            }
-    
-           if (histodriftvelocity) {
-             if(!StoreReferenceData("HLTData","VdriftT0",(TObject *) histodriftvelocity,&metaData)){
-               Log("Error storing 2D Profile for average pulse height as reference data");
-               result |= kEStoreHistoHLT;
-             }
+           
+           // analyse
+           if(!fVdriftHLT){
              Log("Take the PH reference data. Now we will try to fit\n");
-             calibra->SetMinEntries(100*20); // If there is less than 2000
+             calibra->SetMinEntries(2000); // If there is less than 2000
              calibra->AnalysePH(histodriftvelocity);
+             
              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 nbE          = calibra->GetNumberEnt();
+             Int_t nbE        = calibra->GetNumberEnt();
+             
+             // if enough statistics store the results
              if ((nbtg >                  0) && 
                  (nbfit        >= 0.95*nbE)) {
-               TObjArray object  = calibra->GetVectorFit();
+               // create the cal objects
+               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();
-               if(!Store("Calib","ChamberVdrift"    ,(TObject *) objdriftvelocitydet,md1,0,kTRUE)){
-                 Log("Error storing the calibration object for the chamber vdrift");
-                 result |= kEStoreCalHLT;    
-               }
-               if(!Store("Calib","ChamberT0"        ,(TObject *) objtime0det        ,md1,0,kTRUE)){
-                 Log("Error storing the calibration object for the chamber t0");
-                 result |= kEStoreCalHLT;    
+               AliTRDCalDet *objtime0det         = calibra->CreateDetObjectT0(&object,kTRUE);
+               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)");
+                 fResult |= kEStore;    
                }
-               if(!Store("Calib","LocalVdrift"      ,(TObject *) objdriftvelocitypad,md2,0,kTRUE)){
-                 Log("Error storing the calibration object for the local drift velocity");
-                 result |= kEStoreCalHLT;
+               if(!Store("Calib","ChamberT0"        ,(TObject *) objtime0det        ,&md1,0,kTRUE)){
+                 Log("Error storing the calibration object for the chamber t0 (DAQ)");
+                 fResult |= kEStore;    
                }
-               if(!Store("Calib","LocalT0"          ,(TObject *) objtime0pad        ,md2,0,kTRUE)){
-                 Log("Error storing the calibration object for the local time0");
-                 result |= kEStoreCalHLT;
+               if(!Store("Calib","LocalVdrift"      ,(TObject *) objdriftvelocitypad,&md2,0,kTRUE)){
+                 Log("Error storing the calibration object for the local drift velocity (DAQ)");
+                 fResult |= kEStore;
                }
-               hltVdrifthisto = kTRUE;
-             }
-             else{
-               Log("Not enough statistics for the average pulse height");
-               result |= kEFitHistoHLT;
-             }      
-             calibra->ResetVectorFit();
-           }
-           
-           if (histoprf) {
-             if(!StoreReferenceData("HLTData","PRF",(TObject *) histoprf,&metaData)){
-               Log("Error storing the 2D Profile for Pad Response Function as reference data");
-               result |= kEStoreHistoHLT;
-             }
-             Log("Take the PRF reference data. Now we will try to fit\n");
-             calibra->SetMinEntries(100*20); // If there is less than 2000
-             calibra->AnalysePRFMarianFit(histoprf);
-             Int_t nbtg = 6*4*18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb0(2))
-               + 6*  18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb2(2));
-             Int_t nbfit        = calibra->GetNumberFit();
-             Int_t nbE          = calibra->GetNumberEnt();
-             if ((nbtg >                  0) && 
-                 (nbfit        >= 0.95*nbE)) {
-               TObjArray object              = calibra->GetVectorFit();
-               TObject *objPRFpad          = calibra->CreatePadObjectPRF(&object);
-               if(!Store("Calib","PRFWidth"         ,(TObject *) objPRFpad          ,md2,0,kTRUE)){
-                 Log("Error storing the calibration object for the Pad Response Function");
-                 result |= kEStoreCalHLT;
+               if(!Store("Calib","LocalT0"          ,(TObject *) objtime0pad        ,&md2,0,kTRUE)){
+                 Log("Error storing the calibration object for the local time0 (DAQ)");
+                 fResult |= kEStore;
                }
              }
              else{
-               Log("Not enough statistics for the Pad Response Function");
-               result |= kEFitHistoHLT;
+               Log("Not enough statistics for the average pulse height (DAQ)");
              }
-             calibra->ResetVectorFit();
-           }
-         } // if HLT openfile
-       } // while iter list
-      } // if HLT size of tlist
-    } //if HLT tlist
-    delete filesourceshlt;
-  } //if run type physics
-  // time
-  timer.Stop();
-  timer.Print();
-
+           } // analyse
+         } // histo here
+       }
+       else{
+         Log("Error retrieving the file vdrift (DAQ)");
+         if(!fVdriftHLT) fResult |= kEGetFileDAQ;
+       }
+      }// if fileNameEntry
+    } // size DAQ list
+    else{
+      Log(Form("Problem on the size of the list: %d (DAQ)",listdaq->GetSize()));
+      if(!fVdriftHLT) fResult |= kEEmptyListDAQ;
+    }
+    delete listdaq; 
+  } 
+  else{
+    Log("No list found for vdrift (DAQ)");
+    if(!fVdriftHLT){
+      fResult |= kEGetFileDAQ;
+    }
+  }
+   
+}
+//______________________________________________________________________________________________
+void AliTRDPreprocessor::ExtractHLT()
+{
   //
-  // Process the calibration data for the DAQ part
+  // Gain, vdrift and PRF calibration running on HLT
+  // return kFALSE if NULL pointer to the list
   //
 
-  // How long does it take for the DAQ part?
-  timer.Reset();
-  timer.Start();
-  
-  // Take the file from the DAQ file exchange server
-  TList *filesourcesdaq = GetFileSources(kDAQ,"PADSTATUSVDRIFT");
-  if (!filesourcesdaq) {
-    Log(Form("No sources found for GAINDRIFTPRF for run %d !",fRun));
-    result |= kEListFileDAQ;
-  }
-  else{
-    if (filesourcesdaq->GetSize() != 1) {
-      Log(Form("More than one source found for PADSTATUSVDRIFT for run %d!",fRun));
-      filesourcesdaq->Print();
-      result |= kEListFileDAQ;
-    }
-    else{
-      // Loop over the files taken from the DAQ
-      TIter iter(filesourcesdaq);
-      TObjString *sourcedaq;
-      while ((sourcedaq = dynamic_cast<TObjString *> (iter.Next()))) {
-    
-       TString filenamedaq = GetFile(kDAQ,"PADSTATUSVDRIFT",sourcedaq->GetName());
-       if (filenamedaq.Length() == 0) {
-         Log(Form("Error retrieving file from source %d failed!", sourcedaq->GetName()));
-         result |= kEOpenFileDAQ;
-       }
-       else {
+  // Objects for HLT and DAQ zusammen
+  AliTRDCalibraFit *calibra = AliTRDCalibraFit::Instance();
+  AliCDBMetaData metaData;
+  metaData.SetBeamPeriod(0);
+  metaData.SetResponsible("Raphaelle Bailhache");
+  metaData.SetComment("TRD calib test");
+  // Store the infos for the detector
+  AliCDBMetaData md1; 
+  md1.SetObjectClassName("AliTRDCalDet");
+  md1.SetResponsible("Raphaelle Bailhache");
+  md1.SetBeamPeriod(0);
+  md1.SetComment("TRD calib test");
+  // Store the infos for the pads
+  AliCDBMetaData md2; 
+  md2.SetObjectClassName("AliTRDCalPad");
+  md2.SetResponsible("Raphaelle Bailhache");
+  md2.SetBeamPeriod(0);
+  md2.SetComment("TRD calib test");
 
-         // Init some things
-         TProfile2D   *histodriftvelocity  = 0x0; // Profile taken from DAQ for drift velocity and time0
-         AliTRDCalibPadStatus *calibpadstatus = 0x0; // AliTRDCalibPadStatus from DAQ for pad status
+  
+  // Take the file from the HLT file exchange server
+  TList *listhlt = GetFileSources(kHLT,"GAINDRIFTPRF");
+  if (listhlt) {
+    if (listhlt->GetSize() == 1) {
+      TObjString* fileNameEntry = (TObjString*) listhlt->At(0);
+      if(fileNameEntry != NULL){
+       TString fileName = GetFile(kHLT, "GAINDRIFTPRF",
+                                  fileNameEntry->GetString().Data());
+       if(fileName.Length() !=0){
+         // Take the file
+         TFile *filehlt = TFile::Open(fileName);
+         
          
-         // Take the histos
-         Bool_t something = kFALSE;
-         TFile *filedaq = TFile::Open(filenamedaq);
-         calibpadstatus = (AliTRDCalibPadStatus *) filedaq->Get("calibpadstatus");
-         if (!calibpadstatus) {
-           Log("No pedetral run!");
-         }
-         else something = kTRUE;
-         histodriftvelocity = (TProfile2D *) filedaq->Get("PH2d");
-         if (!histodriftvelocity) {
-           Log("No Vdrift TProfile2D!");
-         }
-         else{
-           histodriftvelocity->SetDirectory(0);
-         }
-         if(histodriftvelocity) something = kTRUE;
-         if(!something){
-           Log("Error DAQ, nothing in the file!");
-           result |= kETakeObjectDAQ;
-         }
-                 
-         // try to fit and store reference data
-         if(calibpadstatus){
-           calibpadstatus->AnalyseHisto();
-           if(!StoreReferenceData("DAQData","PadStatus",(TObject *) calibpadstatus,&metaData)){
-             Log("Error storing AliTRDCalibPadStatus object as reference data");
-             result |= kEStoreRefDAQ;
+         // gain
+         TH2I *histogain = (TH2I *) filehlt->Get("CH2d");
+         histogain->SetDirectory(0);
+         if (histogain) {
+           // store the reference data
+           if(!StoreReferenceData("HLTData","Gain",(TObject *) histogain,&metaData)){
+             Log("Error storing 2D histos for gain");
+             fResult |= kEStore;
            }
-           AliTRDCalPadStatus *calPadStatus = calibpadstatus->CreateCalPadStatus();
-           AliCDBMetaData *md3= new AliCDBMetaData(); 
-           md3->SetObjectClassName("AliTRDCalPadStatus");
-           md3->SetResponsible("Raphaelle Bailhache");
-           md3->SetBeamPeriod(1);
-                   md3->SetComment("TRD calib test");
-           if(!Store("Calib","PadStatus"    ,(TObject *)calPadStatus, md3, 0, kTRUE)){
-             Log("Error storing the calibration object for the chamber vdrift");
-             result |= kEStoreCalDAQ;    
+           // analyse
+           Log("Take the CH reference data. Now we will try to fit\n");
+           calibra->SetMinEntries(1000); // If there is less than 1000 entries in the histo: no fit
+           calibra->AnalyseCH(histogain);
+           Int_t nbtg = 6*4*18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb0(0))
+             + 6*  18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb2(0));
+           Int_t nbfit       = calibra->GetNumberFit();
+           Int_t nbE         = calibra->GetNumberEnt();
+           // enough statistics
+           if ((nbtg >                  0) && 
+               (nbfit        >= 0.95*nbE)) {
+             // create the cal objects
+             TObjArray object           = calibra->GetVectorFit();
+             AliTRDCalDet *objgaindet   = calibra->CreateDetObjectGain(&object,calibra->GetScaleFitFactor(),kTRUE);
+             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");
+               fResult |= kEStore;
+             }
+             if(!Store("Calib","LocalGainFactor"  ,(TObject *) objgainpad         ,&md2,0,kTRUE)){
+               Log("Error storing the calibration object for the local gain factor");
+               fResult |= kEStore;
+             }
            }
-         }
+           calibra->ResetVectorFit();
+         }// if histogain
+         
+         
+         
+         // vdrift
+         fVdriftHLT = kFALSE;
+         TProfile2D *histodriftvelocity = (TProfile2D *) filehlt->Get("PH2d");
+         histodriftvelocity->SetDirectory(0);
          if (histodriftvelocity) {
-           if(!StoreReferenceData("DAQData","VdriftT0",(TObject *) histodriftvelocity,&metaData)){
-             Log("Error storing 2D Profile for average pulse height as reference data");
-             result |= kEStoreRefDAQ;
+           // store the reference data
+           if(!StoreReferenceData("HLTData","VdriftT0",(TObject *) histodriftvelocity,&metaData)){
+             Log("Error storing 2D Profile for average pulse height (HLT)");
+             fResult |= kEStore;
            }
-           if(!hltVdrifthisto){
-             Log("Take the PH reference data. Now we will try to fit\n");
-             calibra->SetMinEntries(100*20); // If there is less than 2000
-             calibra->AnalysePH(histodriftvelocity);
-             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 nbE        = calibra->GetNumberEnt();
-             if ((nbtg >                  0) && 
-                 (nbfit        >= 0.95*nbE)) {
-               TObjArray object      = calibra->GetVectorFit();
-               AliTRDCalDet *objdriftvelocitydet = calibra->CreateDetObjectVdrift(&object,kTRUE);
-               TObject *objdriftvelocitypad = calibra->CreatePadObjectVdrift();
-               object              = calibra->GetVectorFit2();
-               AliTRDCalDet *objtime0det         = calibra->CreateDetObjectT0(&object,kTRUE);
-               TObject *objtime0pad         = calibra->CreatePadObjectT0();
-               calibra->ResetVectorFit();
-               if(!Store("Calib","ChamberVdrift"    ,(TObject *) objdriftvelocitydet,md1,0,kTRUE)){
-                 Log("Error storing the calibration object for the chamber vdrift");
-                 result |= kEStoreCalDAQ;    
-               }
-               if(!Store("Calib","ChamberT0"        ,(TObject *) objtime0det        ,md1,0,kTRUE)){
-                 Log("Error storing the calibration object for the chamber t0");
-                 result |= kEStoreCalDAQ;    
-               }
-               if(!Store("Calib","LocalVdrift"      ,(TObject *) objdriftvelocitypad,md2,0,kTRUE)){
-                 Log("Error storing the calibration object for the local drift velocity");
-                 result |= kEStoreCalDAQ;
-               }
-               if(!Store("Calib","LocalT0"          ,(TObject *) objtime0pad        ,md2,0,kTRUE)){
-                 Log("Error storing the calibration object for the local time0");
-                 result |= kEStoreCalDAQ;
-               }
+           // analyse
+           Log("Take the PH reference data. Now we will try to fit\n");
+           calibra->SetMinEntries(1000*20); // If there is less than 20000
+           calibra->AnalysePH(histodriftvelocity);
+           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 nbE          = calibra->GetNumberEnt();
+           // enough statistics
+           if ((nbtg >                  0) && 
+               (nbfit        >= 0.95*nbE)) {
+             // create the cal objects
+             TObjArray object  = calibra->GetVectorFit();
+             AliTRDCalDet *objdriftvelocitydet = calibra->CreateDetObjectVdrift(&object,kTRUE);
+             TObject *objdriftvelocitypad      = calibra->CreatePadObjectVdrift();
+             object              = calibra->GetVectorFit2();
+             AliTRDCalDet *objtime0det  = calibra->CreateDetObjectT0(&object,kTRUE);
+             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)");
+               fResult |= kEStore;    
              }
-             else{
-               Log("Not enough statistics for the average pulse height");
-               result |= kEFitObjectDAQ;
+             if(!Store("Calib","ChamberT0"        ,(TObject *) objtime0det        ,&md1,0,kTRUE)){
+               Log("Error storing the calibration object for the chamber t0 (HLT)");
+               fResult |= kEStore;    
              }
+             if(!Store("Calib","LocalVdrift"      ,(TObject *) objdriftvelocitypad,&md2,0,kTRUE)){
+               Log("Error storing the calibration object for the local drift velocity (HLT)");
+               fResult |= kEStore;
+             }
+             if(!Store("Calib","LocalT0"          ,(TObject *) objtime0pad        ,&md2,0,kTRUE)){
+               Log("Error storing the calibration object for the local time0 (HLT)");
+               fResult |= kEStore;
+             }
+             fVdriftHLT = kTRUE;
            }
-         }
-         filedaq->Close();
-       }// if DAQ open file
-      } // while iter DAQ list
-    } // size DAQ list
-  } // tlist
-  delete filesourcesdaq;
-  // time
-  timer.Stop();
-  timer.Print();
+           calibra->ResetVectorFit();
+         }// if TProfile2D
+         
+         
+         // prf
+         TProfile2D *histoprf = (TProfile2D *) filehlt->Get("PRF2d");
+         histoprf->SetDirectory(0);
+         if (histoprf) {
+           // store reference data
+           if(!StoreReferenceData("HLTData","PRF",(TObject *) histoprf,&metaData)){
+             Log("Error storing the 2D Profile for Pad Response Function");
+             fResult |= kEStore;
+           }
+           // analyse
+           Log("Take the PRF reference data. Now we will try to fit\n");
+           calibra->SetMinEntries(600); // If there is less than 20000
+           calibra->AnalysePRFMarianFit(histoprf);
+           Int_t nbtg = 6*4*18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb0(2))
+             + 6*  18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb2(2));
+           Int_t nbfit        = calibra->GetNumberFit();
+           Int_t nbE          = calibra->GetNumberEnt();
+           // enough statistics
+           if ((nbtg >                  0) && 
+               (nbfit        >= 0.95*nbE)) {
+             // create cal pad objects 
+             TObjArray object            = calibra->GetVectorFit();
+             TObject *objPRFpad          = calibra->CreatePadObjectPRF(&object);
+             // store them
+             if(!Store("Calib","PRFWidth"         ,(TObject *) objPRFpad          ,&md2,0,kTRUE)){
+               Log("Error storing the calibration object for the Pad Response Function");
+               fResult |= kEStore;
+             }
+           }
+           calibra->ResetVectorFit();
+         }// if PRF
+       }
+       else{
+         Log("Error retrieving the file (HLT)");
+         fResult |= kEGetFileHLT;
+       } 
+      } // fileNameEntry
+    } // if HLT size of tlist
+    else{
+      Log(Form("Problem on the size of the list: %d (HLT)",listhlt->GetSize()));
+      fResult |= kEEmptyListHLT;
+    }
+    delete listhlt;
+  } //if HLT tlist
+  else{
+    Log("No list found for the HLT");
+    fResult |= kEGetFileHLT;
+  }
   
-  return result;  
-
 }