class AliTPCROC;
class AliTPCCalROC;
class AliRawReader;
+class AliTPCRawStream;
struct eventHeaderStruct;
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);
//
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:
#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.
//______________________________________________________________________________________________
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) :
AliTPCPreprocessor::~AliTPCPreprocessor()
{
// destructor
-
+
delete fTemp;
delete fPressure;
}
// 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"));
{
// 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
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");
//
// const char* fileNameHLT = GetFile(AliShuttleInterface::kHLT, "calib", "LDC1");
+ if(runType == kPedestalRunType) {
+ UInt_t pedestalResult = ExtractPedestals();
+ result += pedestalResult;
+ }
+
+
return result;
}
//______________________________________________________________________________________________
}
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;
}
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;
+}