From 24938b4c192051224fc7c8ac1a0fad71ac659c03 Mon Sep 17 00:00:00 2001 From: hristov Date: Sun, 24 Jun 2007 21:58:01 +0000 Subject: [PATCH] Read Config entry from OCDB (Haavard) --- STEER/AliDCSSensorArray.cxx | 202 +++++++++++++++++++++++----------- STEER/AliDCSSensorArray.h | 13 ++- TPC/AliTPCSensorTemp.cxx | 18 ++- TPC/AliTPCSensorTemp.h | 3 +- TPC/AliTPCSensorTempArray.cxx | 77 +++++-------- TPC/AliTPCSensorTempArray.h | 12 +- 6 files changed, 192 insertions(+), 133 deletions(-) diff --git a/STEER/AliDCSSensorArray.cxx b/STEER/AliDCSSensorArray.cxx index 6336b95c714..8c94ecaf086 100644 --- a/STEER/AliDCSSensorArray.cxx +++ b/STEER/AliDCSSensorArray.cxx @@ -34,8 +34,8 @@ AliDCSSensorArray::AliDCSSensorArray():TNamed(), fIter(10), fMaxDelta(0.0), fFitReq(2), - fValCut(9999999), - fDiffCut(9999999), + fValCut(-1), + fDiffCut(-1), fStartTime (2000,1,1,0,0,0), fEndTime (2000,1,1,0,0,0), fSensors(0) @@ -46,53 +46,69 @@ AliDCSSensorArray::AliDCSSensorArray():TNamed(), } //_____________________________________________________________________________ -AliDCSSensorArray::AliDCSSensorArray(Int_t prevRun, const char* dbEntry) : +AliDCSSensorArray::AliDCSSensorArray(TClonesArray *arr):TNamed(), + fMinGraph(10), + fMinPoints(10), + fIter(10), + fMaxDelta(0.0), + fFitReq(2), + fValCut(-1), + fDiffCut(-1), + fStartTime (2000,1,1,0,0,0), + fEndTime (2000,1,1,0,0,0), + fSensors(arr) +{ + // + // AliDCSSensorArray special constructor taking TClonesArray from ReadList + // + +} +//_____________________________________________________________________________ +AliDCSSensorArray::AliDCSSensorArray(Int_t run, const char* dbEntry) : TNamed(), fMinGraph(10), fMinPoints(10), fIter(10), fMaxDelta(0.0), fFitReq(2), - fValCut(9999999), - fDiffCut(9999999), + fValCut(-1), + fDiffCut(-1), fStartTime (2000,1,1,0,0,0), fEndTime (2000,1,1,0,0,0), fSensors(0) { // - // Read positions etc. from data base entry for previous run - // Delete all fits and graphs + // Read configuration from OCDB // - AliDCSSensorArray *temp=0; - AliCDBEntry* entry = - AliCDBManager::Instance()->Get(dbEntry,prevRun); - if (entry){ - entry->SetOwner(kTRUE); - temp = (AliDCSSensorArray*)entry->GetObject(); - } - - TGraph *gr; - AliSplineFit* fit; + + AliCDBEntry *entry = AliCDBManager::Instance()->Get(dbEntry,run); + TTree *tree = (TTree*) entry->GetObject(); + fSensors = AliDCSSensor::ReadTree(tree); +} +//_____________________________________________________________________________ +AliDCSSensorArray::AliDCSSensorArray(UInt_t startTime, UInt_t endTime, + TTree* confTree) : + TNamed(), + fMinGraph(10), + fMinPoints(10), + fIter(10), + fMaxDelta(0.0), + fFitReq(2), + fValCut(-1), + fDiffCut(-1), + fStartTime (2000,1,1,0,0,0), + fEndTime (2000,1,1,0,0,0), + fSensors(0) -// Delete previous values - - Int_t nsensors = temp->fSensors->GetEntries(); - for ( Int_t isensor=0; isensorfSensors->At(isensor); - gr = entry->GetGraph(); - if ( gr != 0 ) { - delete gr; - gr = 0; - } - fit = entry->GetFit(); - if ( fit != 0 ) { - delete fit; - fit = 0; - } - } - - new (this) AliDCSSensorArray(*temp); - delete temp; +{ + // + // AliDCSSensorArray constructor for Shuttle preprocessor + // (confTree read from OCDB) + // + fSensors = AliDCSSensor::ReadTree(confTree); + fSensors->BypassStreamer(kFALSE); + fStartTime = TTimeStamp(startTime); + fEndTime = TTimeStamp(endTime); } @@ -152,36 +168,38 @@ void AliDCSSensorArray::Copy(TObject &c) const TObject::Copy(c); } //_____________________________________________________________________________ -void AliDCSSensorArray::SetGraph(TMap *map, const char *amandaString) +void AliDCSSensorArray::SetGraph(TMap *map) { // // Read graphs from DCS maps // - char dname[100]; Int_t nsensors = fSensors->GetEntries(); for ( Int_t isensor=0; isensorAt(isensor); - Int_t dcsSensor=entry->GetIdDCS(); - sprintf(dname,amandaString,dcsSensor); - TGraph *gr = (TGraph*)map->GetValue(dname); - entry->SetGraph(gr); + TString stringID = entry->GetStringID(); + TGraph *gr = (TGraph*)map->GetValue(stringID.Data()); + if ( gr !=0 ) { + entry->SetGraph((TGraph*)gr->Clone()); + } else { + entry->SetGraph(0); + } } } //_____________________________________________________________________________ -void AliDCSSensorArray::MakeSplineFit(TMap *map, const char *amandaString, - Bool_t keepMap) +void AliDCSSensorArray::MakeSplineFit(TMap *map, Bool_t keepMap) { // // Make spline fits from DCS maps // - char dname[100]; Int_t nsensors = fSensors->GetEntries(); for ( Int_t isensor=0; isensorAt(isensor); - Int_t dcsSensor=entry->GetIdDCS(); - sprintf(dname,amandaString,dcsSensor); - TGraph *gr = (TGraph*)map->GetValue(dname); - if (gr->GetN() < fMinGraph ) continue; + TString stringID = entry->GetStringID(); + TGraph *gr = (TGraph*)map->GetValue(stringID.Data()); + if (gr==0 || gr->GetN() < fMinGraph) { + entry->SetFit(0); + continue; + } AliSplineFit *fit = new AliSplineFit(); fit->InitKnots(gr,fMinPoints,fIter,fMaxDelta); fit->SplineFit(fFitReq); @@ -193,6 +211,7 @@ void AliDCSSensorArray::MakeSplineFit(TMap *map, const char *amandaString, } } + //_____________________________________________________________________________ Double_t AliDCSSensorArray::GetValue(UInt_t timeSec, Int_t sensor) { @@ -206,7 +225,7 @@ Double_t AliDCSSensorArray::GetValue(UInt_t timeSec, Int_t sensor) //_____________________________________________________________________________ -TMap* AliDCSSensorArray::ExtractDCS(TMap *dcsMap, const char *amandaString) +TMap* AliDCSSensorArray::ExtractDCS(TMap *dcsMap) { // // Extract temperature graphs from DCS maps @@ -216,12 +235,14 @@ TMap* AliDCSSensorArray::ExtractDCS(TMap *dcsMap, const char *amandaString) Int_t nsensors = fSensors->GetEntries(); for ( Int_t isensor=0; isensorAt(isensor); - Int_t dcsSensor=entry->GetIdDCS(); - TString DPname = Form (amandaString,dcsSensor); - TPair *pair = (TPair*)dcsMap->FindObject(DPname.Data()); - valueSet = (TObjArray*)pair->Value(); - TGraph *graph = MakeGraph(valueSet); - values->Add(new TObjString(DPname.Data()),graph); + TString stringID = entry->GetStringID(); + TPair *pair = (TPair*)dcsMap->FindObject(stringID.Data()); + if ( pair ) { // only try to read values + // if DCS object available + valueSet = (TObjArray*)pair->Value(); + TGraph *graph = MakeGraph(valueSet); + values->Add(new TObjString(stringID.Data()),graph); + } } return values; } @@ -233,6 +254,8 @@ TGraph* AliDCSSensorArray::MakeGraph(TObjArray* valueSet){ // (spline fit parameters will subsequently be obtained from this graph) // Int_t nentries = valueSet->GetEntriesFast(); + if ( nentries == 0 ) return 0; + Float_t *x = new Float_t[nentries]; Float_t *y = new Float_t[nentries]; Int_t time0=0; @@ -254,23 +277,25 @@ TGraph* AliDCSSensorArray::MakeGraph(TObjArray* valueSet){ value = val->GetFloat(); break; case AliDCSValue::kChar: - value = val->GetChar(); + value = static_cast(val->GetChar()); break; case AliDCSValue::kInt: - value = val->GetInt(); + value = static_cast(val->GetInt()); break; case AliDCSValue::kUInt: - value = val->GetUInt(); + value = static_cast(val->GetUInt()); break; default: continue; } - if (TMath::Abs(value)>fValCut) continue; // refuse values greater than cut - if ( out>0 && skipped<10 && TMath::Abs(value-y[out-1])>fDiffCut) { - skipped++; // refuse values changing - continue; // by > cut in one time step - } - skipped=0; + if (fValCut>0 && TMath::Abs(value)>fValCut) continue; // refuse values greater than cut + if (fDiffCut>0 ) { + if ( out>0 && skipped<10 && TMath::Abs(value-y[out-1])>fDiffCut) { + skipped++; // refuse values changing + continue; // by > cut in one time step + } + skipped=0; + } if (val->GetTimeStamp()-time0>1000000) continue; x[out] = (val->GetTimeStamp()-time0)/kSecInHour; // give times in fractions of hours y[out] = val->GetFloat(); @@ -297,6 +322,19 @@ AliDCSSensor* AliDCSSensorArray::GetSensor(Int_t IdDCS) return 0; } //_____________________________________________________________________________ +AliDCSSensor* AliDCSSensorArray::GetSensor(const TString& stringID) +{ + // + // Return sensor information for sensor specified by IdDCS + // + Int_t nsensors = fSensors->GetEntries(); + for (Int_t isensor=0; isensorAt(isensor); + if (entry->GetStringID() == stringID) return entry; + } + return 0; +} +//_____________________________________________________________________________ AliDCSSensor* AliDCSSensorArray::GetSensor(Double_t x, Double_t y, Double_t z) { // @@ -356,3 +394,37 @@ Int_t AliDCSSensorArray::GetLastIdDCS() const return 0; } } +void AliDCSSensorArray::ClearGraph() +{ + // + // Delete DCS graphs from all sensors in array + // + + Int_t nsensors = fSensors->GetEntries(); + for ( Int_t isensor=0; isensorAt(isensor); + TGraph *gr = sensor->GetGraph(); + if ( gr != 0 ) { + delete gr; + gr = 0; + } + sensor->SetGraph(0); + } +} +void AliDCSSensorArray::ClearFit() +{ + // + // Delete spline fits from all sensors in array + // + + Int_t nsensors = fSensors->GetEntries(); + for ( Int_t isensor=0; isensorAt(isensor); + AliSplineFit *fit = sensor->GetFit(); + if ( fit != 0 ) { + delete fit; + fit = 0; + } + sensor->SetFit(0); + } +} diff --git a/STEER/AliDCSSensorArray.h b/STEER/AliDCSSensorArray.h index 780b9be9206..771c79b1887 100644 --- a/STEER/AliDCSSensorArray.h +++ b/STEER/AliDCSSensorArray.h @@ -25,7 +25,9 @@ class TTimeStamp; class AliDCSSensorArray : public TNamed { public: AliDCSSensorArray(); - AliDCSSensorArray(Int_t prevRun, const char* dbEntry); + AliDCSSensorArray(TClonesArray *arr); + AliDCSSensorArray(Int_t run, const char* dbEntry); + AliDCSSensorArray(UInt_t startTime, UInt_t endTime, TTree* confTree); AliDCSSensorArray(const AliDCSSensorArray &c); virtual ~AliDCSSensorArray(); AliDCSSensorArray &operator=(const AliDCSSensorArray &c); @@ -49,13 +51,16 @@ class AliDCSSensorArray : public TNamed { void SetDiffCut(const Int_t diffCut) { fDiffCut=diffCut; } Int_t GetDiffCut() const {return fDiffCut;} - void SetGraph (TMap *map, const char* amandaString); - void MakeSplineFit(TMap *map, const char* amandaString, Bool_t keepMap=kFALSE); - TMap* ExtractDCS (TMap *dcsMap, const char* amandaString); + void SetGraph (TMap *map); + void MakeSplineFit(TMap *map, Bool_t keepMap=kFALSE); + TMap* ExtractDCS (TMap *dcsMap); TGraph* MakeGraph (TObjArray *valueSet); + void ClearGraph(); + void ClearFit(); Double_t GetValue (UInt_t timeSec, Int_t sensor); AliDCSSensor* GetSensor (Int_t IdDCS); AliDCSSensor* GetSensor (Double_t x, Double_t y, Double_t z); + AliDCSSensor* GetSensor (const TString& stringID); AliDCSSensor* GetSensorNum (Int_t ind); Int_t NumSensors() const { return fSensors->GetEntries(); } diff --git a/TPC/AliTPCSensorTemp.cxx b/TPC/AliTPCSensorTemp.cxx index 66ef6413877..e35be9f9f93 100644 --- a/TPC/AliTPCSensorTemp.cxx +++ b/TPC/AliTPCSensorTemp.cxx @@ -37,6 +37,7 @@ #include "AliTPCSensorTemp.h" ClassImp(AliTPCSensorTemp) +const char kAmandaString[] = "tpc_temp:PT_%d.Temperature"; const Float_t kASideX[18][5]={ { 99.56, 117.59, 160.82, 186.92, 213.11}, @@ -123,6 +124,7 @@ const Float_t kIFCrad[5] = {67.2, 64.4, 60.7, 64.4, 67.2}; const Float_t kTSrad[4] = {67.2, 61.5, 67.2, 61.5}; const Float_t kTSz[4] = {240.0, 90.0, 240.0, 90.0}; +//______________________________________________________________________________________________ AliTPCSensorTemp::AliTPCSensorTemp(): AliDCSSensor(), fType(0), @@ -134,6 +136,7 @@ AliTPCSensorTemp::AliTPCSensorTemp(): AliDCSSensor(), // Standard constructor // } +//______________________________________________________________________________________________ AliTPCSensorTemp::AliTPCSensorTemp(const AliTPCSensorTemp& source) : AliDCSSensor(source), @@ -146,6 +149,7 @@ AliTPCSensorTemp::AliTPCSensorTemp(const AliTPCSensorTemp& source) : // Copy constructor // { } +//______________________________________________________________________________________________ AliTPCSensorTemp& AliTPCSensorTemp::operator=(const AliTPCSensorTemp& source){ // @@ -156,8 +160,7 @@ AliTPCSensorTemp& AliTPCSensorTemp::operator=(const AliTPCSensorTemp& source){ return *this; } - - +//______________________________________________________________________________________________ TClonesArray * AliTPCSensorTemp::ReadList(const char *fname) { // @@ -165,6 +168,14 @@ TClonesArray * AliTPCSensorTemp::ReadList(const char *fname) { // TTree * tree = new TTree("asci","asci"); tree->ReadFile(fname,""); + TClonesArray *arr = ReadTree(tree); + delete tree; + return arr; +} + +//______________________________________________________________________________________________ + +TClonesArray * AliTPCSensorTemp::ReadTree(TTree *tree) { Int_t nentries = tree->GetEntries(); Int_t sensor=0; @@ -198,6 +209,8 @@ TClonesArray * AliTPCSensorTemp::ReadList(const char *fname) { tree->GetEntry(isensor); temp->SetId(sensor); temp->SetIdDCS(echa); + TString stringID = Form (kAmandaString,echa); + temp->SetStringID(stringID); if (side[0]=='C') temp->SetSide(1); temp->SetSector(sector); temp->SetNum(num); @@ -322,6 +335,5 @@ TClonesArray * AliTPCSensorTemp::ReadList(const char *fname) { } - delete tree; return array; } diff --git a/TPC/AliTPCSensorTemp.h b/TPC/AliTPCSensorTemp.h index 49913077432..3b673a9767b 100644 --- a/TPC/AliTPCSensorTemp.h +++ b/TPC/AliTPCSensorTemp.h @@ -48,6 +48,7 @@ public: static TClonesArray * ReadList(const char *fname); + static TClonesArray * ReadTree(TTree *tree); protected: Int_t fType; // Position of sensors on fieldcage @@ -64,6 +65,6 @@ protected: // fType=6(0-1) 0:input -- 1:output - ClassDef(AliTPCSensorTemp,1); + ClassDef(AliTPCSensorTemp,1) }; #endif diff --git a/TPC/AliTPCSensorTempArray.cxx b/TPC/AliTPCSensorTempArray.cxx index d21fcd91ad9..b661daedb3f 100644 --- a/TPC/AliTPCSensorTempArray.cxx +++ b/TPC/AliTPCSensorTempArray.cxx @@ -25,12 +25,9 @@ ClassImp(AliTPCSensorTempArray) -const char kFname[] = "TempSensor.txt"; -const char kAmandaString[] = "tpc_temp:PT_%d.Temperature"; //_____________________________________________________________________________ -AliTPCSensorTempArray::AliTPCSensorTempArray():AliDCSSensorArray(), - fAmandaString(kAmandaString) +AliTPCSensorTempArray::AliTPCSensorTempArray():AliDCSSensorArray() { // // AliTPCSensorTempArray default constructor @@ -38,34 +35,38 @@ AliTPCSensorTempArray::AliTPCSensorTempArray():AliDCSSensorArray(), } //_____________________________________________________________________________ -AliTPCSensorTempArray::AliTPCSensorTempArray(Int_t prevRun) : - AliDCSSensorArray(prevRun,"TPC/Calib/Temperature"), - fAmandaString(kAmandaString) +AliTPCSensorTempArray::AliTPCSensorTempArray(Int_t run) : AliDCSSensorArray() { + // + // Read configuration from OCDB + // + + + AliCDBEntry *entry = + AliCDBManager::Instance()->Get("TPC/Config/Temperature",run); + TTree *tree = (TTree*) entry->GetObject(); + fSensors = AliTPCSensorTemp::ReadTree(tree); + fSensors->BypassStreamer(kFALSE); + } //_____________________________________________________________________________ AliTPCSensorTempArray::AliTPCSensorTempArray(UInt_t startTime, UInt_t endTime, - const char *filepath) - :AliDCSSensorArray(), - fAmandaString(kAmandaString) + TTree* confTree) + :AliDCSSensorArray() { // - // AliTPCSensorTempArray default constructor + // AliTPCSensorTempArray constructor for Shuttle preprocessor + // (confTree read from OCDB) // - char *expPath = gSystem->ExpandPathName(filepath); - TString filename(expPath); - filename.Append('/'); - filename.Append(kFname); - fSensors = AliTPCSensorTemp::ReadList(filename.Data()); + fSensors = AliTPCSensorTemp::ReadTree(confTree); + fSensors->BypassStreamer(kFALSE); fStartTime = TTimeStamp(startTime); fEndTime = TTimeStamp(endTime); - delete expPath; } //_____________________________________________________________________________ AliTPCSensorTempArray::AliTPCSensorTempArray(const char *fname) : - AliDCSSensorArray(), - fAmandaString(kAmandaString) + AliDCSSensorArray() { // // AliTPCSensorTempArray constructor @@ -77,8 +78,7 @@ AliTPCSensorTempArray::AliTPCSensorTempArray(const char *fname) : //_____________________________________________________________________________ AliTPCSensorTempArray::AliTPCSensorTempArray(const AliTPCSensorTempArray &c): - AliDCSSensorArray(c), - fAmandaString(c.fAmandaString) + AliDCSSensorArray(c) { // // AliTPCSensorTempArray copy constructor @@ -116,41 +116,16 @@ void AliTPCSensorTempArray::Copy(TObject &c) const TObject::Copy(c); } //_____________________________________________________________________________ -void AliTPCSensorTempArray::ReadSensors(const char *fname) +void AliTPCSensorTempArray::ReadSensors(const char *dbEntry) { // // Read list of temperature sensors from text file // - fSensors = AliTPCSensorTemp::ReadList(fname); -} -//_____________________________________________________________________________ -void AliTPCSensorTempArray::SetGraph(TMap *map) -{ - // - // Read graphs from DCS maps - // - AliDCSSensorArray::SetGraph(map,fAmandaString.Data()); -} -//_____________________________________________________________________________ -void AliTPCSensorTempArray::MakeSplineFit(TMap *map) -{ - // - // Make spline fits from DCS maps - // - AliDCSSensorArray::MakeSplineFit(map,fAmandaString.Data()); -} - - -//_____________________________________________________________________________ -TMap* AliTPCSensorTempArray::ExtractDCS(TMap *dcsMap) -{ - // - // Extract temperature graphs from DCS maps - // + AliCDBEntry *entry = AliCDBManager::Instance()->Get(dbEntry); + TTree *tree = (TTree*) entry->GetObject(); + fSensors = AliTPCSensorTemp::ReadTree(tree); - TMap *values = AliDCSSensorArray::ExtractDCS(dcsMap,fAmandaString.Data()); - return values; -} +} //_____________________________________________________________________________ AliTPCSensorTemp* AliTPCSensorTempArray::GetSensor(Int_t type, Int_t side, Int_t sector, Int_t num) diff --git a/TPC/AliTPCSensorTempArray.h b/TPC/AliTPCSensorTempArray.h index 075d9ad4cc3..ba613a3b8ef 100644 --- a/TPC/AliTPCSensorTempArray.h +++ b/TPC/AliTPCSensorTempArray.h @@ -28,26 +28,20 @@ class AliDCSSensor; class AliTPCSensorTempArray : public AliDCSSensorArray { public: AliTPCSensorTempArray(); - AliTPCSensorTempArray(Int_t prevRun); + AliTPCSensorTempArray(Int_t run); AliTPCSensorTempArray(const char *fname); - AliTPCSensorTempArray (UInt_t startTime, UInt_t endTime, const char *filepath="."); + AliTPCSensorTempArray (UInt_t startTime, UInt_t endTime, TTree* confTree); AliTPCSensorTempArray(const AliTPCSensorTempArray &c); virtual ~AliTPCSensorTempArray(); AliTPCSensorTempArray &operator=(const AliTPCSensorTempArray &c); virtual void Copy (TObject &c) const; - void SetGraph (TMap *map); - void MakeSplineFit(TMap *map); - void ReadSensors (const char *fname); - const char* GetAmandaString() { return fAmandaString.Data(); } - void SetAmandaString(const char* string) {fAmandaString=string;} - TMap* ExtractDCS (TMap *dcsMap); + void ReadSensors (const char *dbEntry); AliTPCSensorTemp* GetSensor (Int_t type, Int_t side, Int_t sector, Int_t num); AliTPCSensorTemp* GetSensor (Int_t IdDCS); AliTPCSensorTemp* GetSensor (Double_t x, Double_t y, Double_t z); protected: - TString fAmandaString; //! Amanda string to identify temperature entries ClassDef(AliTPCSensorTempArray,1) // TPC calibration class for parameters which are saved per pad }; -- 2.43.5