X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TRD%2FAliTRDcalibDB.cxx;h=04c25de3d3696b29a99751213a578318b28a7286;hb=bc67657651087fa94385e6b15c8b55b9c252121c;hp=c558283dd6c074b7fe3517530cfb863175f7fa8b;hpb=51a0ce2598beaccb57bcaf5821301bb0ba580f56;p=u%2Fmrichter%2FAliRoot.git diff --git a/TRD/AliTRDcalibDB.cxx b/TRD/AliTRDcalibDB.cxx index c558283dd6c..04c25de3d36 100644 --- a/TRD/AliTRDcalibDB.cxx +++ b/TRD/AliTRDcalibDB.cxx @@ -37,18 +37,21 @@ #include "AliTRDPIDReference.h" #include "AliTRDcalibDB.h" +#include "AliTRDCommonParam.h" #include "Cal/AliTRDCalROC.h" #include "Cal/AliTRDCalPad.h" #include "Cal/AliTRDCalDet.h" #include "Cal/AliTRDCalDCS.h" #include "Cal/AliTRDCalDCSv2.h" +#include "Cal/AliTRDCalDCSFEEv2.h" #include "Cal/AliTRDCalPID.h" #include "Cal/AliTRDCalMonitoring.h" #include "Cal/AliTRDCalChamberStatus.h" #include "Cal/AliTRDCalPadStatus.h" #include "Cal/AliTRDCalSingleChamberStatus.h" #include "Cal/AliTRDCalTrkAttach.h" +#include "Cal/AliTRDCalOnlineGainTable.h" ClassImp(AliTRDcalibDB) @@ -105,6 +108,7 @@ AliTRDcalibDB::AliTRDcalibDB() ,fPRFwid(0) ,fPRFpad(0) ,fPIDResponse(NULL) + ,fOnlineGainTableID(0) { // // Default constructor @@ -135,6 +139,7 @@ AliTRDcalibDB::AliTRDcalibDB(const AliTRDcalibDB &c) ,fPRFwid(0) ,fPRFpad(0) ,fPIDResponse(NULL) + ,fOnlineGainTableID(0) { // // Copy constructor (not that it make any sense for a singleton...) @@ -176,7 +181,11 @@ AliTRDcalibDB::~AliTRDcalibDB() delete [] fPRFsmp; fPRFsmp = 0; } - if(fPIDResponse) delete fPIDResponse; + + if (fPIDResponse) { + delete fPIDResponse; + fPIDResponse = 0x0; + } Invalidate(); @@ -213,6 +222,9 @@ const TObject *AliTRDcalibDB::GetCachedCDBObject(Int_t id) case kIDVdriftChamber : return CacheCDBEntry(kIDVdriftChamber ,"TRD/Calib/ChamberVdrift"); break; + case kIDExBChamber : + return CacheCDBEntry(kIDExBChamber ,"TRD/Calib/ChamberExB"); + break; case kIDT0Pad : return CacheCDBEntry(kIDT0Pad ,"TRD/Calib/LocalT0"); break; @@ -225,14 +237,40 @@ const TObject *AliTRDcalibDB::GetCachedCDBObject(Int_t id) case kIDGainFactorChamber : return CacheCDBEntry(kIDGainFactorChamber ,"TRD/Calib/ChamberGainFactor"); break; + + case kIDOnlineGainFactor : + switch(GetOnlineGainTableID()) { + case 0: + // For testing purposes only !!! + AliInfo("No gain table name from OCDB. Use default table!"); + return CacheCDBEntry(kIDOnlineGainFactor ,"TRD/Calib/Krypton_2011-01"); + break; + case 1: + // Online gain table ID 1 + return CacheCDBEntry(kIDOnlineGainFactor ,"TRD/Calib/Krypton_2011-01"); + break; + case 2: + // Online gain table ID 2 + return CacheCDBEntry(kIDOnlineGainFactor ,"TRD/Calib/Gaintbl_Uniform_FGAN0_2011-01"); + break; + case 3: + // Online gain table ID 3 + return CacheCDBEntry(kIDOnlineGainFactor ,"TRD/Calib/Gaintbl_Uniform_FGAN8_2011-01"); + break; + case 4: + // Online gain table ID 4 + return CacheCDBEntry(kIDOnlineGainFactor ,"TRD/Calib/Krypton_2011-02"); + break; + } + break; + case kIDNoiseChamber : - return CacheCDBEntry(kIDNoiseChamber ,"TRD/Calib/DetNoise"); + return CacheCDBEntry(kIDNoiseChamber ,"TRD/Calib/DetNoise"); break; case kIDNoisePad : - return CacheCDBEntry(kIDNoisePad ,"TRD/Calib/PadNoise"); + return CacheCDBEntry(kIDNoisePad ,"TRD/Calib/PadNoise"); break; - // Parameters defined per pad case kIDPRFWidth : return CacheCDBEntry(kIDPRFWidth ,"TRD/Calib/PRFWidth"); @@ -258,6 +296,7 @@ const TObject *AliTRDcalibDB::GetCachedCDBObject(Int_t id) break; case kIDPIDNN : return CacheCDBEntry(kIDPIDNN ,"TRD/Calib/PIDNN"); + break; case kIDPIDLQ : return CacheCDBEntry(kIDPIDLQ ,"TRD/Calib/PIDLQ"); break; @@ -308,6 +347,7 @@ const TObject *AliTRDcalibDB::CacheCDBEntry(Int_t id, const char *cdbPath) } return fCDBCache[id]; + } //_____________________________________________________________________________ @@ -349,7 +389,10 @@ void AliTRDcalibDB::Invalidate() } } + fOnlineGainTableID = 0; + } + //_____________________________________________________________________________ Float_t AliTRDcalibDB::GetNoise(Int_t det, Int_t col, Int_t row) { @@ -508,7 +551,38 @@ Float_t AliTRDcalibDB::GetVdriftAverage(Int_t det) return calDet->GetValue(det); } +//_____________________________________________________________________________ +const AliTRDCalDet *AliTRDcalibDB::GetExBDet() +{ + // + // Returns the exB calibration object + // containing one number per detector + // + + const AliTRDCalDet *calChamber = dynamic_cast (GetCachedCDBObject(kIDExBChamber)); + + Double_t meanexb = 100.0; + if (calChamber) meanexb = calChamber->GetMean(); + //printf("mean %f\n",meanexb); + + if ((!calChamber) || (meanexb > 70.0)) { + + const AliTRDCalDet *calChambervdrift = dynamic_cast + (GetCachedCDBObject(kIDVdriftChamber)); + if (!calChambervdrift) { + return 0; + } + else { + AliTRDCalDet *calDetExB = new AliTRDCalDet("lorentz angle tan","lorentz angle tan (detector value)"); + for(Int_t k = 0; k < 540; k++){ + calDetExB->SetValue(k,AliTRDCommonParam::Instance()->GetOmegaTau(calChambervdrift->GetValue(k))); + } + return calDetExB; + } + } + else return calChamber; +} //_____________________________________________________________________________ Float_t AliTRDcalibDB::GetT0(Int_t det, Int_t col, Int_t row) { @@ -642,6 +716,42 @@ Float_t AliTRDcalibDB::GetGainFactor(Int_t det, Int_t col, Int_t row) } +//_____________________________________________________________________________ +AliTRDCalOnlineGainTableROC* AliTRDcalibDB::GetOnlineGainTableROC(Int_t det) +{ + // + // Returns the online gain factor table for a given ROC. + // + + const AliTRDCalOnlineGainTable *calOnline + = dynamic_cast + (GetCachedCDBObject(kIDOnlineGainFactor)); + if (!calOnline) { + return 0x0; + } + + return calOnline->GetGainTableROC(det); + +} + +//_____________________________________________________________________________ +Float_t AliTRDcalibDB::GetOnlineGainFactor(Int_t det, Int_t col, Int_t row) +{ + // + // Returns the online gain factor for the given pad. + // + + const AliTRDCalOnlineGainTable *calOnline + = dynamic_cast + (GetCachedCDBObject(kIDOnlineGainFactor)); + if (!calOnline) { + return -1; + } + + return calOnline->GetGainCorrectionFactor(det,row,col); + +} + //_____________________________________________________________________________ AliTRDCalROC *AliTRDcalibDB::GetGainFactorROC(Int_t det) { @@ -823,6 +933,7 @@ Int_t AliTRDcalibDB::GetNumberOfTimeBinsDCS() // only remains: two different numbers >= 0 return nMixed; + } //_____________________________________________________________________________ @@ -843,7 +954,8 @@ void AliTRDcalibDB::GetFilterType(TString &filterType) if (!strcmp(dcsArr->At(0)->ClassName(),"AliTRDCalDCS")) calver = 1; if (!strcmp(dcsArr->At(0)->ClassName(),"AliTRDCalDCSv2")) calver = 2; - if (calver == 1) { + if (calver == 1) { + // DCS object const AliTRDCalDCS *calDCS = dynamic_cast(dcsArr->At(esor)); if(!calDCS){ @@ -851,7 +963,10 @@ void AliTRDcalibDB::GetFilterType(TString &filterType) return; } filterType = calDCS->GetGlobalFilterType(); - } else if (calver == 2) { + + } + else if (calver == 2) { + // DCSv2 object const AliTRDCalDCSv2 *calDCSv2 = dynamic_cast(dcsArr->At(esor)); if(!calDCSv2){ @@ -859,12 +974,91 @@ void AliTRDcalibDB::GetFilterType(TString &filterType) return; } filterType = calDCSv2->GetGlobalFilterType(); - } else AliError("NO DCS/DCSv2 OCDB entry found!"); + + } + else { + + AliError("NO DCS/DCSv2 OCDB entry found!"); + + } } //_____________________________________________________________________________ -void AliTRDcalibDB::GetGlobalConfiguration(TString &config){ +Int_t AliTRDcalibDB::GetOnlineGainTableID() +{ + // + // Get the gain table ID from the DCS + // + + if (fOnlineGainTableID > 0) { + return fOnlineGainTableID; + } + + const TObjArray *dcsArr = dynamic_cast(GetCachedCDBObject(kIDDCS)); + if (!dcsArr){ + return -1; + } + + Int_t esor = 0; // Take SOR + Int_t calver = 0; // Check CalDCS version + if (!strcmp(dcsArr->At(0)->ClassName(),"AliTRDCalDCS")) calver = 1; + if (!strcmp(dcsArr->At(0)->ClassName(),"AliTRDCalDCSv2")) calver = 2; + + if (calver == 1) { + + // No data for old DCS object available, anyway + return -1; + + } + else if (calver == 2) { + + // DCSv2 object + const AliTRDCalDCSv2 *calDCSv2 = dynamic_cast(dcsArr->At(esor)); + if(!calDCSv2){ + return -1; + } + + TString tableName = ""; + for (Int_t i = 0; i < 540; i++) { + const AliTRDCalDCSFEEv2 *calDCSFEEv2 = calDCSv2->GetCalDCSFEEObj(0); + tableName = calDCSFEEv2->GetGainTableName(); + if (tableName.Length() > 0) { + break; + } + } + if (tableName.CompareTo("Krypton_2011-01") == 0) { + fOnlineGainTableID = 1; + return fOnlineGainTableID; + } + if (tableName.CompareTo("Gaintbl_Uniform_FGAN0_2011-01") == 0) { + fOnlineGainTableID = 2; + return fOnlineGainTableID; + } + if (tableName.CompareTo("Gaintbl_Uniform_FGAN8_2011-01") == 0) { + fOnlineGainTableID = 3; + return fOnlineGainTableID; + } + if (tableName.CompareTo("Krypton_2011-02") == 0) { + fOnlineGainTableID = 4; + return fOnlineGainTableID; + } + + } + else { + + AliError("NO DCS/DCSv2 OCDB entry found!"); + return -1; + + } + + return -1; + +} + +//_____________________________________________________________________________ +void AliTRDcalibDB::GetGlobalConfiguration(TString &config) +{ // // Get Configuration from the DCS // @@ -880,15 +1074,19 @@ void AliTRDcalibDB::GetGlobalConfiguration(TString &config){ if (!strcmp(dcsArr->At(0)->ClassName(),"AliTRDCalDCS")) calver = 1; if (!strcmp(dcsArr->At(0)->ClassName(),"AliTRDCalDCSv2")) calver = 2; - if (calver == 1) { + if (calver == 1) { + // DCS object - const AliTRDCalDCS *calDCS = dynamic_cast(dcsArr->At(esor)); + const AliTRDCalDCS *calDCS = dynamic_cast(dcsArr->At(esor)); if(!calDCS){ config = ""; return; } config = calDCS->GetGlobalConfigName(); - } else if (calver == 2) { + + } + else if (calver == 2) { + // DCSv2 object const AliTRDCalDCSv2 *calDCSv2 = dynamic_cast(dcsArr->At(esor)); if(!calDCSv2){ @@ -896,7 +1094,61 @@ void AliTRDcalibDB::GetGlobalConfiguration(TString &config){ return; } config = calDCSv2->GetGlobalConfigName(); - } else AliError("NO DCS/DCSv2 OCDB entry found!"); + + } + else { + + AliError("NO DCS/DCSv2 OCDB entry found!"); + + } + +} + +//_____________________________________________________________________________ +void AliTRDcalibDB::GetGlobalConfigurationVersion(TString &version) +{ + // + // Get Version of Configuration from the DCS + // + + const TObjArray *dcsArr = dynamic_cast(GetCachedCDBObject(kIDDCS)); + if(!dcsArr){ + version = ""; + return; + } + + Int_t esor = 0; // Take SOR + Int_t calver = 0; // Check CalDCS version + if (!strcmp(dcsArr->At(0)->ClassName(),"AliTRDCalDCS")) calver = 1; + if (!strcmp(dcsArr->At(0)->ClassName(),"AliTRDCalDCSv2")) calver = 2; + + if (calver == 1) { + + // DCS object + const AliTRDCalDCS *calDCS = dynamic_cast(dcsArr->At(esor)); + if(!calDCS){ + version = ""; + return; + } + version = calDCS->GetGlobalConfigVersion(); + + } + else if (calver == 2) { + + // DCSv2 object + const AliTRDCalDCSv2 *calDCSv2 = dynamic_cast(dcsArr->At(esor)); + if(!calDCSv2){ + version = ""; + return; + } + version = calDCSv2->GetGlobalConfigVersion(); + + } + else { + + AliError("NO DCS/DCSv2 OCDB entry found!"); + + } } @@ -906,41 +1158,58 @@ Bool_t AliTRDcalibDB::HasOnlineFilterPedestal() // // Checks whether pedestal filter was applied online // + TString cname; + // Temporary: Get the filter config from the configuration name GetGlobalConfiguration(cname); TString filterconfig = cname(cname.First("_") + 1, cname.First("-") - cname.First("_") - 1); + // TString filterconfig; //GetFilterType(filterconfig); + return filterconfig.Contains("p"); + } //_____________________________________________________________________________ -Bool_t AliTRDcalibDB::HasOnlineFilterGain(){ +Bool_t AliTRDcalibDB::HasOnlineFilterGain() +{ // // Checks whether online gain filter was applied // + TString cname; + // Temporary: Get the filter config from the configuration name GetGlobalConfiguration(cname); TString filterconfig = cname(cname.First("_") + 1, cname.First("-") - cname.First("_") - 1); + //TString filterconfig; //GetFilterType(filterconfig); + return filterconfig.Contains("g"); + } //_____________________________________________________________________________ -Bool_t AliTRDcalibDB::HasOnlineTailCancellation(){ +Bool_t AliTRDcalibDB::HasOnlineTailCancellation() +{ // // Checks whether online tail cancellation was applied // + TString cname; + // Temporary: Get the filter config from the configuration name GetGlobalConfiguration(cname); TString filterconfig = cname(cname.First("_") + 1, cname.First("-") - cname.First("_") - 1); + //TString filterconfig; //GetFilterType(filterconfig); + return filterconfig.Contains("t"); + } //_____________________________________________________________________________ @@ -1018,7 +1287,7 @@ AliTRDrecoParam* AliTRDcalibDB::GetRecoParam(Int_t */*eventtype*/) // calculate entry based on event type info Int_t n = 0; //f(eventtype[0], eventtype[1], ....) - return (AliTRDrecoParam*)recos->UncheckedAt(n); + return (AliTRDrecoParam *) recos->UncheckedAt(n); } @@ -1091,7 +1360,7 @@ Bool_t AliTRDcalibDB::IsPadNotConnected(Int_t det, Int_t col, Int_t row) } //_____________________________________________________________________________ -Bool_t AliTRDcalibDB::IsChamberInstalled(Int_t det) +Bool_t AliTRDcalibDB::IsChamberGood(Int_t det) { // // Returns status, see name of functions for details ;-) @@ -1103,12 +1372,12 @@ Bool_t AliTRDcalibDB::IsChamberInstalled(Int_t det) return -1; } - return cal->IsInstalled(det); + return cal->IsGood(det); } //_____________________________________________________________________________ -Bool_t AliTRDcalibDB::IsChamberMasked(Int_t det) +Bool_t AliTRDcalibDB::IsChamberNoData(Int_t det) { // // Returns status, see name of functions for details ;-) @@ -1120,11 +1389,13 @@ Bool_t AliTRDcalibDB::IsChamberMasked(Int_t det) return -1; } - return cal->IsMasked(det); + return cal->IsNoData(det); } + //_____________________________________________________________________________ -Bool_t AliTRDcalibDB::IsHalfChamberMasked(Int_t det, Int_t side){ +Bool_t AliTRDcalibDB::IsHalfChamberNoData(Int_t det, Int_t side) +{ // // Returns status, see name of functions for details ;-) // @@ -1135,9 +1406,27 @@ Bool_t AliTRDcalibDB::IsHalfChamberMasked(Int_t det, Int_t side){ return -1; } - return side > 0 ? cal->IsHalfChamberSideBMasked(det) : cal->IsHalfChamberSideAMasked(det); + return side > 0 ? cal->IsNoDataSideB(det) : cal->IsNoDataSideA(det); } + +//_____________________________________________________________________________ +Bool_t AliTRDcalibDB::IsChamberBadCalibrated(Int_t det) +{ + // + // Returns status, see name of functions for details ;-) + // + + const AliTRDCalChamberStatus * cal = dynamic_cast + (GetCachedCDBObject(kIDChamberStatus)); + if (!cal) { + return -1; + } + + return cal->IsBadCalibrated(det); + +} + //_____________________________________________________________________________ const AliTRDCalPID *AliTRDcalibDB::GetPIDObject(AliTRDpidUtil::ETRDPIDMethod method) { @@ -1159,26 +1448,40 @@ const AliTRDCalPID *AliTRDcalibDB::GetPIDObject(AliTRDpidUtil::ETRDPIDMethod met } //_____________________________________________________________________________ -AliTRDPIDResponse *AliTRDcalibDB::GetPIDResponse(AliTRDPIDResponse::ETRDPIDMethod method){ - if(!fPIDResponse){ +AliTRDPIDResponse *AliTRDcalibDB::GetPIDResponse(AliTRDPIDResponse::ETRDPIDMethod method) +{ + // + // Returns the PID response object for 1D-LQ + // + + if (!fPIDResponse) { + fPIDResponse = new AliTRDPIDResponse; + // Load Reference Histos from OCDB fPIDResponse->SetPIDmethod(method); const TObjArray *references = dynamic_cast(GetCachedCDBObject(kIDPIDLQ1D)); + TIter refs(references); TObject *obj = NULL; AliTRDPIDReference *ref = NULL; Bool_t hasReference = kFALSE; - while((obj = refs())){ - if((ref = dynamic_cast(obj))){ - fPIDResponse->Load(ref); - hasReference = kTRUE; - break; - } + while ((obj = refs())){ + if ((ref = dynamic_cast(obj))){ + fPIDResponse->Load(ref); + hasReference = kTRUE; + break; + } + } + + if (!hasReference) { + AliError("Reference histograms not found in the OCDB"); } - if(!hasReference) AliError("Reference histograms not found in the OCDB"); + } + return fPIDResponse; + } //_____________________________________________________________________________ @@ -1187,9 +1490,10 @@ const AliTRDCalTrkAttach* AliTRDcalibDB::GetAttachObject() // // Returns the object storing likelihood distributions for cluster to track attachment // + return dynamic_cast(GetCachedCDBObject(kIDAttach)); -} +} //_____________________________________________________________________________ const AliTRDCalMonitoring *AliTRDcalibDB::GetMonitoringObject()