From 5b7ccf04ebc5cdb23c0056c4423da6625330461f Mon Sep 17 00:00:00 2001 From: cblume Date: Fri, 1 Jun 2012 14:34:42 +0000 Subject: [PATCH 1/1] Parsing of the DCS configuration name into parameters (e.g. number of time bins) with options is moved from online DCS routines to AliTRDcalibDB. Also the data members of the DCS OCDB objects are now filled during XML parsing using the same functions. --- TRD/AliTRDSaxHandler.cxx | 72 +++++++++++++++++----- TRD/AliTRDSaxHandler.h | 4 +- TRD/AliTRDcalibDB.cxx | 108 ++++++++++++++++++++------------- TRD/AliTRDcalibDB.h | 5 +- TRD/Macros/AliTRDcheckConfig.C | 6 +- 5 files changed, 133 insertions(+), 62 deletions(-) diff --git a/TRD/AliTRDSaxHandler.cxx b/TRD/AliTRDSaxHandler.cxx index 488ce8f1574..30acf532b14 100644 --- a/TRD/AliTRDSaxHandler.cxx +++ b/TRD/AliTRDSaxHandler.cxx @@ -36,6 +36,7 @@ #include #include "AliTRDSaxHandler.h" #include "AliTRDgeometry.h" +#include "AliTRDcalibDB.h" #include "Cal/AliTRDCalDCSv2.h" #include "Cal/AliTRDCalDCSFEEv2.h" #include "Cal/AliTRDCalDCSGTU.h" @@ -141,12 +142,63 @@ AliTRDSaxHandler::~AliTRDSaxHandler() AliTRDCalDCSv2* AliTRDSaxHandler::GetCalDCSObj() { // put the arrays in the global calibration object and return this + fCalDCSObj->SetFEEArr(fFEEArr); fCalDCSObj->SetPTRArr(fPTRArr); fCalDCSObj->SetGTUObj(fDCSGTUObj); return fCalDCSObj; } +//_____________________________________________________________________________ +void AliTRDSaxHandler::ParseConfigName(TString cfgname) const +{ + // Evaluate the config name and set the individual parameters + + // protect + if (!AliTRDcalibDB::Instance()) { + AliError("Could not create an instance of AliTRDcalibDB!"); + return; + } + + TString cfg = "", par = "", pars = ""; + Int_t nPar = AliTRDcalibDB::Instance()->GetNumberOfParsDCS(cfgname); + if (nPar == 0) return; + + for (Int_t i=1; i<=nPar; i++) { + // Get the configuration parameter + AliTRDcalibDB::Instance()->GetDCSConfigParOption(cfgname, i, 0, cfg); + + // Set Parameters accordingly + if (i == AliTRDcalibDB::kFltrSet) fDCSFEEObj->SetFilterType(cfg); + if (i == AliTRDcalibDB::kTrigSet) fDCSFEEObj->SetTriggerSetup(cfg); + if (i == AliTRDcalibDB::kAddOpti) fDCSFEEObj->SetAddOptions(cfg); + if (i == AliTRDcalibDB::kTimebin) fDCSFEEObj->SetNumberOfTimeBins(AliTRDcalibDB::Instance()->ExtractTimeBinsFromString(cfg)); + if (i == AliTRDcalibDB::kReadout) fDCSFEEObj->SetReadoutParam(cfg); + if (i == AliTRDcalibDB::kTrkMode) fDCSFEEObj->SetTrackletMode(cfg); + + // Set options of parameters accordingly + Int_t nOpt = AliTRDcalibDB::Instance()->GetNumberOfOptsDCS(cfgname, i); + if (nOpt == 0) continue; + + for (Int_t j=1; j<=nOpt; j++) { + // Get the parameter option + AliTRDcalibDB::Instance()->GetDCSConfigParOption(cfgname, i, j, par); + + if (i == AliTRDcalibDB::kReadout) { + if (par.EqualTo("stat")) fDCSFEEObj->SetFastStatNoise(1); + } + if (i == AliTRDcalibDB::kTrkMode) { + if ((j > 1) && (par.Length() != 0)) pars += "-"; + pars += par; + } + // SetTCFilterWeight, SetTCFilterShortDecPar, SetTCFilterLongDecPar might be filled here, too + // SetSingleHitThres, SetThreePadClustThres, SetSelectiveNoZS, SetTestPattern might be filled here, too + } + + fDCSFEEObj->SetTrackletDef(pars); + } +} + //_____________________________________________________________________________ void AliTRDSaxHandler::OnStartDocument() const { @@ -392,27 +444,15 @@ void AliTRDSaxHandler::OnEndElement(const char *name) // store informations of the FEE DCS-Board if (fSystem == kInsideFEE) { if (CompareString(tagName, "DNR")) fDCSFEEObj->SetStatusBit(fContent.Atoi()); - if (CompareString(tagName, "CFGNME")) fDCSFEEObj->SetConfigName(fContent); if (CompareString(tagName, "CFGTAG")) fDCSFEEObj->SetConfigTag(fContent.Atoi()); if (CompareString(tagName, "CFGVRSN")) fDCSFEEObj->SetConfigVersion(fContent); - if (CompareString(tagName, "NTB")) fDCSFEEObj->SetNumberOfTimeBins(fContent.Atoi()); if (CompareString(tagName, "SM-ID")) fDCSFEEObj->SetSM(fContent.Atoi()); if (CompareString(tagName, "STACK-ID")) fDCSFEEObj->SetStack(fContent.Atoi()); if (CompareString(tagName, "LAYER-ID")) fDCSFEEObj->SetLayer(fContent.Atoi()); - if (CompareString(tagName, "SINGLEHITTHRES")) fDCSFEEObj->SetSingleHitThres(fContent.Atoi()); - if (CompareString(tagName, "THRPADCLSTHRS")) fDCSFEEObj->SetThreePadClustThres(fContent.Atoi()); - if (CompareString(tagName, "SELNOZS")) fDCSFEEObj->SetSelectiveNoZS(fContent.Atoi()); - if (CompareString(tagName, "FASTSTATNOISE")) fDCSFEEObj->SetFastStatNoise(fContent.Atoi()); - if (CompareString(tagName, "FILTWEIGHT")) fDCSFEEObj->SetTCFilterWeight(fContent.Atoi()); - if (CompareString(tagName, "FILTSHRTDCYPRM")) fDCSFEEObj->SetTCFilterShortDecPar(fContent.Atoi()); - if (CompareString(tagName, "FILTLNGDCYPRM")) fDCSFEEObj->SetTCFilterLongDecPar(fContent.Atoi()); - if (CompareString(tagName, "FLTR")) fDCSFEEObj->SetFilterType(fContent); - if (CompareString(tagName, "READOUTPAR")) fDCSFEEObj->SetReadoutParam(fContent); - if (CompareString(tagName, "TESTPATTERN")) fDCSFEEObj->SetTestPattern(fContent); - if (CompareString(tagName, "TRCKLTMODE")) fDCSFEEObj->SetTrackletMode(fContent); - if (CompareString(tagName, "TRCKLTDEF")) fDCSFEEObj->SetTrackletDef(fContent); - if (CompareString(tagName, "TRIGGERSETUP")) fDCSFEEObj->SetTriggerSetup(fContent); - if (CompareString(tagName, "ADDOPTIONS")) fDCSFEEObj->SetAddOptions(fContent); + if (CompareString(tagName, "CFGNME")) { + fDCSFEEObj->SetConfigName(fContent); + ParseConfigName(fContent); + } if (CompareString(tagName, "gaintbl")) { fLevel1Tag = kInsideNone; fCurrentROB = -1; diff --git a/TRD/AliTRDSaxHandler.h b/TRD/AliTRDSaxHandler.h index deef0623fdf..b37409d40ee 100644 --- a/TRD/AliTRDSaxHandler.h +++ b/TRD/AliTRDSaxHandler.h @@ -15,7 +15,7 @@ //////////////////////////////////////////////////////////////////////////// -#include "TObject.h" +#include #include "Cal/AliTRDCalDCSGTUCtpOpc.h" #include "Cal/AliTRDCalDCSGTUBoardInfo.h" #include "Cal/AliTRDCalDCSGTUSegment.h" @@ -55,6 +55,8 @@ public: TObjArray* GetDCSFEEDataArray() const { return fFEEArr; } TObjArray* GetDCSPTRDataArray() const { return fPTRArr; } AliTRDCalDCSv2* GetCalDCSObj(); // to be called by the preprocessor + void ParseConfigName(TString cfgname) const; + Int_t GetHandlerStatus() const { return fHandlerStatus; } diff --git a/TRD/AliTRDcalibDB.cxx b/TRD/AliTRDcalibDB.cxx index 2559f83c24c..8e501ee6a4b 100644 --- a/TRD/AliTRDcalibDB.cxx +++ b/TRD/AliTRDcalibDB.cxx @@ -902,19 +902,11 @@ Float_t AliTRDcalibDB::GetPRFWidth(Int_t det, Int_t col, Int_t row) } //_____________________________________________________________________________ -Int_t AliTRDcalibDB::GetNumberOfTimeBinsDCS() +Int_t AliTRDcalibDB::ExtractTimeBinsFromString(TString tbstr) { - // - // Returns number of time bins from the DCS - // - // default value - has not been set Int_t nUndef = -1; - // Get the corresponding parameter - TString tbstr = ""; - GetDCSConfigParOption(kTimebin, 0, tbstr); - // Check if there is any content in the string first if (tbstr.Length() == 0) { AliError("Parameter for number of timebins is empty!"); @@ -936,10 +928,23 @@ Int_t AliTRDcalibDB::GetNumberOfTimeBinsDCS() return nUndef; } - Int_t ntb = tbstr.Atoi(); - AliInfo(Form("Number of timebins from CDB: %d", ntb)); + return tbstr.Atoi(); - return ntb; +} + +//_____________________________________________________________________________ +Int_t AliTRDcalibDB::GetNumberOfTimeBinsDCS() +{ + // + // Returns number of time bins from the DCS + // + + // Get the corresponding parameter + TString cfgstr = "", cfgname = ""; + GetGlobalConfiguration(cfgname); + GetDCSConfigParOption(cfgname, kTimebin, 0, cfgstr); + + return ExtractTimeBinsFromString(cfgstr); } @@ -950,7 +955,9 @@ void AliTRDcalibDB::GetFilterType(TString &filterType) // Returns the filter type // - GetDCSConfigParOption(kFltrSet, 0, filterType); + TString cfgname = ""; + GetGlobalConfiguration(cfgname); + GetDCSConfigParOption(cfgname, kFltrSet, 0, filterType); } @@ -1163,7 +1170,41 @@ void AliTRDcalibDB::GetGlobalConfigurationVersion(TString &version) } //_____________________________________________________________________________ -void AliTRDcalibDB::GetDCSConfigParOption(Int_t cfgType, Int_t option, TString &cfgo) +Int_t AliTRDcalibDB::GetNumberOfParsDCS(TString cname) +{ + // Get the number of configuration parameters from the DCS config + + TString cdelim = "_"; + TObjArray *carr = cname.Tokenize(cdelim); + return carr->GetEntries() - 1; // -1 for the "cf" + +} + +//_____________________________________________________________________________ +Int_t AliTRDcalibDB::GetNumberOfOptsDCS(TString cname, Int_t cfgType) +{ + // Get the number of options of a given configuration parameter from DCS + + TString cdelim = "_"; + TString odelim = "-"; + + TObjArray *carr = cname.Tokenize(cdelim); + Int_t nconfig = carr->GetEntries(); + + // protect + if ((nconfig == 0) || ((nconfig-1) < cfgType)) { + AliError("Not enough parameters in DCS configuration name!"); + return 0; + } + + TString fullcfg = ((TObjString*)carr->At(cfgType))->GetString(); + TObjArray *oarr = fullcfg.Tokenize(odelim); + return oarr->GetEntries() -1; // -1 for the parameter name + +} + +//_____________________________________________________________________________ +void AliTRDcalibDB::GetDCSConfigParOption(TString cname, Int_t cfgType, Int_t option, TString &cfgo) { // // Get a configuration (see enum in header file) or the options of a configuration @@ -1175,52 +1216,33 @@ void AliTRDcalibDB::GetDCSConfigParOption(Int_t cfgType, Int_t option, TString & TString cdelim = "_"; TString odelim = "-"; - // get the full configuration name - TString cname; - GetGlobalConfiguration(cname); TObjArray *carr = cname.Tokenize(cdelim); Int_t nconfig = carr->GetEntries(); // protect if (nconfig == 0) { - AliError("Bad DCS configuration name!"); + AliError("DCS configuration name empty!"); cfgo = ""; return; } else if ((nconfig-1) < cfgType) { - AliError("Not enough DCS configuration parameters!"); + AliError("Not enough parameters in DCS configuration name!"); cfgo = ""; return; } TString fullcfg = ((TObjString*)carr->At(cfgType))->GetString(); + TObjArray *oarr = fullcfg.Tokenize(odelim); + Int_t noptions = oarr->GetEntries(); - if (fullcfg.Contains(odelim)) { - - TObjArray *oarr = fullcfg.Tokenize(odelim); - Int_t noptions = oarr->GetEntries(); - - // protect - if ((noptions-1) < option) { - AliError("Not enough DCS configuration options defined!"); - cfgo = ""; - return; - } - - cfgo = ((TObjString*)oarr->At(option))->GetString(); + // protect + if ((noptions-1) < option) { + AliError("Not enough options in DCS configuration name!"); + cfgo = ""; return; - } - else { - if (option != 0) { - AliError("Not enough DCS configuration options defined!"); - cfgo = ""; - return; - } - cfgo = fullcfg; - return; - - } + cfgo = ((TObjString*)oarr->At(option))->GetString(); + return; } diff --git a/TRD/AliTRDcalibDB.h b/TRD/AliTRDcalibDB.h index a3d440c6e00..c1a7028aad7 100644 --- a/TRD/AliTRDcalibDB.h +++ b/TRD/AliTRDcalibDB.h @@ -93,11 +93,14 @@ class AliTRDcalibDB : public TObject { Float_t GetPRFlo() const { return fPRFlo; }; Float_t GetPRFhi() const { return fPRFhi; }; + Int_t ExtractTimeBinsFromString(TString tbstr); Int_t GetNumberOfTimeBinsDCS(); void GetFilterType(TString &filterType); void GetGlobalConfiguration(TString &config); void GetGlobalConfigurationVersion(TString &version); - void GetDCSConfigParOption(Int_t cfgType, Int_t option, TString &cfgo); + Int_t GetNumberOfParsDCS(TString cname); + Int_t GetNumberOfOptsDCS(TString cname, Int_t cfgType); + void GetDCSConfigParOption(TString cname, Int_t cfgType, Int_t option, TString &cfgo); Int_t GetOnlineGainTableID(); diff --git a/TRD/Macros/AliTRDcheckConfig.C b/TRD/Macros/AliTRDcheckConfig.C index 53daf408808..688518b1da6 100644 --- a/TRD/Macros/AliTRDcheckConfig.C +++ b/TRD/Macros/AliTRDcheckConfig.C @@ -292,6 +292,10 @@ void AliTRDcheckConfig(Int_t runNr=0, char *pathfile="nopathgiven"){ return; } + Bool_t hasSOR = (objArrayCDB->At(0)); + Bool_t hasEOR = (objArrayCDB->At(1)); + printf("SOR entry: %d, EOR entry: %d\n", hasSOR, hasEOR); + if (!strcmp(objArrayCDB->At(iesor)->ClassName(),"AliTRDCalDCS")) calVer = 1; else if (!strcmp(objArrayCDB->At(iesor)->ClassName(),"AliTRDCalDCSv2")) calVer = 2; else { @@ -460,7 +464,7 @@ void AliTRDcheckConfig(Int_t runNr=0, char *pathfile="nopathgiven"){ if (gsz != -1) cout<<"Global selective ZS (every i'th event).............: "<< gsz << endl; if (gfw != -1) cout<<"Global tail cancellation filter weight.............: "<< gfs << endl; if (gfs != -1) cout<<"Global tail cancellat. filter short decay parameter: "<< gfs << endl; - if (gfl != -1) cout<<"Global tail cancellation filt. long decay parameter: "<< gsn << endl; + if (gfl != -1) cout<<"Global tail cancellation filt. long decay parameter: "<< gfl << endl; if (gsn != -1) cout<<"Global fast statistics mode?.......................: "<< gsn << endl; if (gcv != "") cout<<"Global configuration tag version...................: "<< gcv << endl; if (gcn != "") cout<<"Global configuration tag name......................: "<< gcn << endl; -- 2.43.0