Now the TPC preprocessor has been updated to read pedestal entries from the DAQ FXS...
authorcvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 28 Jun 2007 16:41:17 +0000 (16:41 +0000)
committercvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 28 Jun 2007 16:41:17 +0000 (16:41 +0000)
TPC/AliTPCCalibPedestal.h
TPC/AliTPCPreprocessor.cxx
TPC/AliTPCPreprocessor.h

index 4ab27cb..9ffc185 100644 (file)
@@ -13,6 +13,7 @@ class TTreeSRedirector;
 class AliTPCROC;
 class AliTPCCalROC;
 class AliRawReader;
+class AliTPCRawStream;
 struct eventHeaderStruct;
 
 
@@ -37,7 +38,10 @@ public:
   AliTPCCalROC* GetCalRocRMS(Int_t sector, Bool_t force=kFALSE);        // get calibration object - sector
   const TObjArray* GetCalPadPedestal (){return &fCalRocArrayPedestal;}  // get calibration object
   const TObjArray* GetCalPadRMS(){return &fCalRocArrayRMS;}             // get calibration object
-  
+  void SetCalRocPedestal (AliTPCCalROC *roc, Int_t sector)
+                                     { fCalRocArrayPedestal.RemoveAt(sector);
+                                      fCalRocArrayPedestal.AddAt(roc,sector); }
+
   TH2F* GetHistoPedestal  (Int_t sector, Bool_t force=kFALSE);          // get refernce histogram
   void  DumpToFile(const Char_t *filename, const Char_t *dir="", const Bool_t append=kFALSE);
   //
@@ -55,23 +59,23 @@ public:
 private:
   Int_t fFirstTimeBin;              //  First Time bin needed for analysis
   Int_t fLastTimeBin;               //  Last Time bin needed for analysis
-  
+
   Int_t fAdcMin;                    //  min adc channel of pedestal value
   Int_t fAdcMax;                    //  max adc channel of pedestal value
-  
+
   AliTPCROC *fROC;                  //! ROC information
-  
+
   TObjArray fCalRocArrayPedestal;   //  Array of AliTPCCalROC class for Time0 calibration
   TObjArray fCalRocArrayRMS;        //  Array of AliTPCCalROC class for signal width calibration
-  
+
   TObjArray fHistoPedestalArray;    //  Calibration histograms for Pedestal distribution
-  
-  
-  
+
+
+
   TH2F* GetHisto(Int_t sector, TObjArray *arr,
                 Int_t nbinsY, Float_t ymin, Float_t ymax,
                 Char_t *type, Bool_t force);
-    
+
   AliTPCCalROC* GetCalRoc(Int_t sector, TObjArray* arr, Bool_t force);
 
 public:
index 80959ca..1f1aac9 100644 (file)
 
 
 #include "AliTPCPreprocessor.h"
+#include "AliShuttleInterface.h"
 
 #include "AliCDBMetaData.h"
 #include "AliDCSValue.h"
 #include "AliLog.h"
 #include "AliTPCSensorTempArray.h"
 #include "AliTPCDBPressure.h"
+#include "AliTPCROC.h"
+#include "AliTPCCalROC.h"
+#include "AliTPCCalPad.h"
+#include "AliTPCCalibPedestal.h"
 
 #include <TTimeStamp.h>
 
-const Int_t kValCutTemp = 100;         // discard temperatures > 100 degrees
-const Int_t kDiffCutTemp = 5;     // discard temperature differences > 5 degrees
+const Int_t kValCutTemp = 100;               // discard temperatures > 100 degrees
+const Int_t kDiffCutTemp = 5;               // discard temperature differences > 5 degrees
+const TString kPedestalRunType = "PEDESTAL_RUN";  // pedestal run identifier
 
 //
 // This class is the SHUTTLE preprocessor for the TPC detector.
@@ -38,9 +44,10 @@ ClassImp(AliTPCPreprocessor)
 //______________________________________________________________________________________________
 AliTPCPreprocessor::AliTPCPreprocessor(AliShuttleInterface* shuttle) :
   AliPreprocessor("TPC",shuttle),
-  fTemp(0), fPressure(0), fConfigOK(kTRUE)
+  fTemp(0), fPressure(0), fConfigOK(kTRUE), fROC(0)
 {
   // constructor
+  fROC = AliTPCROC::Instance();
 }
 //______________________________________________________________________________________________
 // AliTPCPreprocessor::AliTPCPreprocessor(const AliTPCPreprocessor& org) :
@@ -59,7 +66,7 @@ AliTPCPreprocessor::AliTPCPreprocessor(AliShuttleInterface* shuttle) :
 AliTPCPreprocessor::~AliTPCPreprocessor()
 {
   // destructor
-  
+
   delete fTemp;
   delete fPressure;
 }
@@ -100,9 +107,9 @@ void AliTPCPreprocessor::Initialize(Int_t run, UInt_t startTime,
 
   // Pressure sensors
 
-       confTree=0;
+        confTree=0;
        entry=0;
-        entry = GetFromOCDB("Config", "Pressure");
+       entry = GetFromOCDB("Config", "Pressure");
         if (entry) confTree = (TTree*) entry->GetObject();
         if ( confTree==0 ) {
            AliError(Form("Pressure Config OCDB entry missing.\n"));
@@ -119,11 +126,13 @@ UInt_t AliTPCPreprocessor::Process(TMap* dcsAliasMap)
 {
   // Fills data into TPC calibrations objects
 
-   if (!dcsAliasMap) return 9;
-   if (!fConfigOK) return 9;
-
   // Amanda servers provide information directly through dcsAliasMap
 
+  if (!dcsAliasMap) return 9;
+  if (!fConfigOK) return 9;
+
+  TString runType = GetRunType();
+
   // Temperature sensors are processed by AliTPCCalTemp
 
 
@@ -136,7 +145,7 @@ UInt_t AliTPCPreprocessor::Process(TMap* dcsAliasMap)
   result += pressureResult;
 
   // Other calibration information will be retrieved through FXS files
-  //  examples: 
+  //  examples:
   //    TList* fileSourcesDAQ = GetFile(AliShuttleInterface::kDAQ, "pedestals");
   //    const char* fileNamePed = GetFile(AliShuttleInterface::kDAQ, "pedestals", "LDC1");
   //
@@ -144,6 +153,12 @@ UInt_t AliTPCPreprocessor::Process(TMap* dcsAliasMap)
   //    const char* fileNameHLT = GetFile(AliShuttleInterface::kHLT, "calib", "LDC1");
 
 
+  if(runType == kPedestalRunType) {
+    UInt_t pedestalResult = ExtractPedestals();
+    result += pedestalResult;
+  }
+
+
   return result;
 }
 //______________________________________________________________________________________________
@@ -164,19 +179,16 @@ UInt_t AliTPCPreprocessor::MapTemperature(TMap* dcsAliasMap)
   }
   delete map;
   // Now store the final CDB file
-  
-  if ( result == 0 ) { 
+
+  if ( result == 0 ) {
         AliCDBMetaData metaData;
        metaData.SetBeamPeriod(0);
        metaData.SetResponsible("Haavard Helstrup");
        metaData.SetComment("Preprocessor AliTPC data base entries.");
 
-       result = Store("Calib", "Temperature", fTemp, &metaData, 0, 0);
-        if ( result == 1 ) {                  
-          result = 0;
-       } else {
-         result = 1;
-       }                      // revert to new return code conventions
+       Bool_t storeOK = Store("Calib", "Temperature", fTemp, &metaData, 0, kFALSE);
+        if ( !storeOK )  result=1;
+
    }
 
    return result;
@@ -199,20 +211,74 @@ UInt_t AliTPCPreprocessor::MapPressure(TMap* dcsAliasMap)
   }
   delete map;
   // Now store the final CDB file
-  
-  if ( result == 0 ) { 
+
+  if ( result == 0 ) {
         AliCDBMetaData metaData;
        metaData.SetBeamPeriod(0);
        metaData.SetResponsible("Haavard Helstrup");
        metaData.SetComment("Preprocessor AliTPC data base entries.");
 
-       result = Store("Calib", "Pressure", fPressure, &metaData, 0, 0);
-        if ( result == 1 ) {                  
-          result = 0;
-       } else {
-         result = 1;
-       }                      // revert to new return code conventions
+       Bool_t storeOK = Store("Calib", "Pressure", fPressure, &metaData, 0, 0);
+        if ( !storeOK ) result=1;
+
    }
 
    return result;
 }
+//______________________________________________________________________________________________
+UInt_t AliTPCPreprocessor::ExtractPedestals()
+{
+ //
+ //  Read pedestal file from file exchage server
+ //  Keep original entry from OCDB in case no new pedestals are available
+ //
+ AliTPCCalPad *calPadPed=0;
+ AliCDBEntry* entry = GetFromOCDB("Calib", "Pedestals");
+ if (entry) calPadPed = (AliTPCCalPad*)entry->GetObject();
+ if ( calPadPed==NULL ) {
+     AliWarning(Form("No previous TPC pedestal entry available.\n"));
+     Log("AliTPCPreprocsessor: No previous TPC pedestal entry available.\n");
+     calPadPed = new AliTPCCalPad();
+ }
+
+ UInt_t result=0;
+
+ Int_t nSectors = fROC->GetNSectors();
+ TList* list = GetFileSources(AliShuttleInterface::kDAQ,"pedestals");
+ if (list) {
+
+//  loop through all files from LDCs
+
+    UInt_t index = 0;
+    while (list->At(index)!=NULL) {
+     TObjString* fileNameEntry = (TObjString*) list->At(index);
+     if (fileNameEntry!=NULL) {
+        TString fileName = GetFile(AliShuttleInterface::kDAQ, "pedestals",
+                                        fileNameEntry->GetString().Data());
+        TFile *f = TFile::Open(fileName);
+        AliTPCCalibPedestal *calPed;
+       f->GetObject("AliTPCCalibPedestal",calPed);
+
+        //  replace entries for the sectors available in the present file
+
+        for (Int_t sector=0; sector<=nSectors; sector++) {
+           AliTPCCalROC *roc=calPed->GetCalRocPedestal(sector, kFALSE);
+           if ( roc )  calPadPed->SetCalROC(roc,sector);
+        }
+      }
+     ++index;
+    }  // while(list)
+//
+//  Store updated pedestal entry to OCDB
+//
+    AliCDBMetaData metaData;
+    metaData.SetBeamPeriod(0);
+    metaData.SetResponsible("Haavard Helstrup");
+    metaData.SetComment("Preprocessor AliTPC data base entries.");
+
+    Bool_t storeOK = Store("Calib", "Pedestals", calPadPed, &metaData, 0, kTRUE);
+    if ( !storeOK ) result=1;
+
+  }  // if(list)
+  return result;
+}
index a038e49..3eaf0b1 100644 (file)
@@ -9,6 +9,7 @@
 class AliTestDataDCS;
 class AliTPCSensorTempArray;
 class AliDCSSensorArray;
+class AliTPCROC;
 
 class AliTPCPreprocessor : public AliPreprocessor
 {
@@ -22,12 +23,14 @@ class AliTPCPreprocessor : public AliPreprocessor
     virtual UInt_t Process(TMap* dcsAliasMap);
     UInt_t  MapTemperature(TMap* dcsAliasMap);
     UInt_t  MapPressure(TMap* dcsAliasMap);
+    UInt_t  ExtractPedestals();
     AliTPCPreprocessor& operator = (const AliTPCPreprocessor& rhs);
 
   private:
     AliTPCSensorTempArray  *fTemp;     // CDB class for temperature sensors
     AliDCSSensorArray      *fPressure; // CDB class for pressure sensors
     Bool_t                 fConfigOK;  // Identify succesful reading of OCDB Config
+    AliTPCROC              *fROC;      // TPC Read-Out configuration
 
     ClassDef(AliTPCPreprocessor, 2)
 };