#include "Cal/AliTRDCalChamberStatus.h"
#include "Cal/AliTRDCalPadStatus.h"
#include "Cal/AliTRDCalSingleChamberStatus.h"
+#include "Cal/AliTRDCalTrkAttach.h"
ClassImp(AliTRDcalibDB)
,fPRFhi(0)
,fPRFwid(0)
,fPRFpad(0)
+ ,fPIDResponse(NULL)
{
//
// Default constructor
,fPRFhi(0)
,fPRFwid(0)
,fPRFpad(0)
+ ,fPIDResponse(NULL)
{
//
// Copy constructor (not that it make any sense for a singleton...)
delete [] fPRFsmp;
fPRFsmp = 0;
}
+ if(fPIDResponse) delete fPIDResponse;
Invalidate();
return CacheCDBEntry(kIDFEE ,"TRD/Calib/FEE");
break;
case kIDDCS :
- if (GetCDBEntry("TRD/Calib/DCSv2"))
- return CacheCDBEntry(kIDDCS ,"TRD/Calib/DCSv2");
- else
- return CacheCDBEntry(kIDDCS ,"TRD/Calib/DCS");
+ return CacheCDBEntry(kIDDCS ,"TRD/Calib/DCS");
break;
case kIDPIDNN :
return CacheCDBEntry(kIDPIDNN ,"TRD/Calib/PIDNN");
case kIDPIDLQ :
return CacheCDBEntry(kIDPIDLQ ,"TRD/Calib/PIDLQ");
break;
+ case kIDPIDLQ1D:
+ return CacheCDBEntry(kIDPIDLQ1D ,"TRD/Calib/PIDLQ1D");
+ break;
case kIDRecoParam :
- return CacheCDBEntry(kIDRecoParam ,"TRD/Calib/RecoParam");
+ return CacheCDBEntry(kIDRecoParam ,"TRD/Calib/RecoParam");
+ break;
+ case kIDAttach :
+ return CacheCDBEntry(kIDAttach ,"TRD/Calib/TrkAttach");
break;
-
}
return 0;
//
// Caches the entry <id> with cdb path <cdbPath>
//
-
+
if (!fCDBCache[id]) {
fCDBEntries[id] = GetCDBEntry(cdbPath);
if (fCDBEntries[id]) {
fCDBCache[id] = fCDBEntries[id]->GetObject();
}
- }
-
+ }
+
return fCDBCache[id];
-
}
//_____________________________________________________________________________
Int_t nUndef = -1; // default value - has not been set!
Int_t nTbSor = nUndef;
Int_t nTbEor = nUndef;
+ Int_t calver = 0; // Check CalDCS version
const TObjArray *dcsArr = dynamic_cast<const TObjArray *>(GetCachedCDBObject(kIDDCS));
-
if (!dcsArr) {
AliError("No DCS object found!");
return nUndef;
}
- if (GetCDBEntry("TRD/Calib/DCSv2")) {
- // if there is a DCSv2 object
- const AliTRDCalDCSv2 *calDCSsorv2 = dynamic_cast<const AliTRDCalDCSv2 *>(dcsArr->At(0));
- const AliTRDCalDCSv2 *calDCSeorv2 = dynamic_cast<const AliTRDCalDCSv2 *>(dcsArr->At(1));
-
- if (!calDCSsorv2) {
- // the SOR file is mandatory
- AliError("NO SOR AliTRDCalDCSv2 object found in CDB file!");
- return nUndef;
- }
-
- if (!calDCSeorv2) {
- // this can happen if the run is shorter than a couple of seconds.
- AliWarning("NO EOR AliTRDCalDCSv2 object found in CDB file.");
- }
+ if (!strcmp(dcsArr->At(0)->ClassName(),"AliTRDCalDCS")) calver = 1;
+ if (!strcmp(dcsArr->At(0)->ClassName(),"AliTRDCalDCSv2")) calver = 2;
- // get the numbers
- nTbSor = calDCSsorv2->GetGlobalNumberOfTimeBins();
- if (calDCSeorv2) nTbEor = calDCSeorv2->GetGlobalNumberOfTimeBins();
- } else {
- // if there is a DCS object
+ if (calver == 1) {
+ // DCS object
const AliTRDCalDCS *calDCSsor = dynamic_cast<const AliTRDCalDCS *>(dcsArr->At(0));
const AliTRDCalDCS *calDCSeor = dynamic_cast<const AliTRDCalDCS *>(dcsArr->At(1));
-
if (!calDCSsor) {
// the SOR file is mandatory
AliError("NO SOR AliTRDCalDCS object found in CDB file!");
return nUndef;
}
-
if (!calDCSeor) {
// this can happen if the run is shorter than a couple of seconds.
AliWarning("NO EOR AliTRDCalDCS object found in CDB file.");
// get the numbers
nTbSor = calDCSsor->GetGlobalNumberOfTimeBins();
if (calDCSeor) nTbEor = calDCSeor->GetGlobalNumberOfTimeBins();
- }
+
+ } else if (calver == 2) {
+ // DCSv2 object
+ const AliTRDCalDCSv2 *calDCSsorv2 = dynamic_cast<const AliTRDCalDCSv2 *>(dcsArr->At(0));
+ const AliTRDCalDCSv2 *calDCSeorv2 = dynamic_cast<const AliTRDCalDCSv2 *>(dcsArr->At(1));
+ if (!calDCSsorv2) {
+ // the SOR file is mandatory
+ AliError("NO SOR AliTRDCalDCSv2 object found in CDB file!");
+ return nUndef;
+ }
+ if (!calDCSeorv2) {
+ // this can happen if the run is shorter than a couple of seconds.
+ AliWarning("NO EOR AliTRDCalDCSv2 object found in CDB file.");
+ }
+
+ // get the numbers
+ nTbSor = calDCSsorv2->GetGlobalNumberOfTimeBins();
+ if (calDCSeorv2) nTbEor = calDCSeorv2->GetGlobalNumberOfTimeBins();
+
+ } else AliError("NO DCS/DCSv2 OCDB entry found!");
// if they're the same return the value
// -2 means mixed, -1: no data, >= 0: good number of time bins
AliWarning("Inconsistent number of time bins found!");
return nMixed;
}
-
+
// one is undefined, the other ok -> return that one
if (nTbSor == nUndef) return nTbEor;
if (nTbEor == nUndef) return nTbSor;
filterType = "";
return;
}
- if (GetCDBEntry("TRD/Calib/DCSv2")) {
- const AliTRDCalDCSv2 *calDCSv2 = dynamic_cast<const AliTRDCalDCSv2 *>(dcsArr->At(0)); // Take SOR
- if(!calDCSv2){
- filterType = "";
- return;
- }
- filterType = calDCSv2->GetGlobalFilterType();
- } else {
- const AliTRDCalDCS *calDCS = dynamic_cast<const AliTRDCalDCS *>(dcsArr->At(0)); // Take SOR
+ 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<const AliTRDCalDCS *>(dcsArr->At(esor));
if(!calDCS){
filterType = "";
return;
}
filterType = calDCS->GetGlobalFilterType();
- }
+ } else if (calver == 2) {
+ // DCSv2 object
+ const AliTRDCalDCSv2 *calDCSv2 = dynamic_cast<const AliTRDCalDCSv2 *>(dcsArr->At(esor));
+ if(!calDCSv2){
+ filterType = "";
+ return;
+ }
+ filterType = calDCSv2->GetGlobalFilterType();
+ } else AliError("NO DCS/DCSv2 OCDB entry found!");
+
}
//_____________________________________________________________________________
//
// Get Configuration from the DCS
//
+
const TObjArray *dcsArr = dynamic_cast<const TObjArray *>(GetCachedCDBObject(kIDDCS));
if(!dcsArr){
config = "";
return;
}
- if (GetCDBEntry("TRD/Calib/DCSv2")) {
- const AliTRDCalDCSv2 *calDCSv2 = dynamic_cast<const AliTRDCalDCSv2 *>(dcsArr->At(0)); // Take SOR
+ 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(!calDCSv2){
+ if (calver == 1) {
+ // DCS object
+ const AliTRDCalDCS *calDCS = dynamic_cast<const AliTRDCalDCS *>(dcsArr->At(esor));
+ if(!calDCS){
config = "";
return;
}
- config = calDCSv2->GetGlobalConfigName();
- } else {
- const AliTRDCalDCS *calDCS = dynamic_cast<const AliTRDCalDCS *>(dcsArr->At(0)); // Take SOR
-
- if(!calDCS){
+ config = calDCS->GetGlobalConfigName();
+ } else if (calver == 2) {
+ // DCSv2 object
+ const AliTRDCalDCSv2 *calDCSv2 = dynamic_cast<const AliTRDCalDCSv2 *>(dcsArr->At(esor));
+ if(!calDCSv2){
config = "";
return;
}
- config = calDCS->GetGlobalConfigName();
- }
+ config = calDCSv2->GetGlobalConfigName();
+ } else AliError("NO DCS/DCSv2 OCDB entry found!");
+
}
//_____________________________________________________________________________
}
+//_____________________________________________________________________________
+AliTRDPIDResponse *AliTRDcalibDB::GetPIDResponse(AliTRDPIDResponse::ETRDPIDMethod method){
+ if(!fPIDResponse){
+ fPIDResponse = new AliTRDPIDResponse;
+ // Load Reference Histos from OCDB
+ fPIDResponse->SetPIDmethod(method);
+ fPIDResponse->Load(dynamic_cast<const TObjArray *>(GetCachedCDBObject(kIDPIDLQ1D)));
+ }
+ return fPIDResponse;
+}
+
+//_____________________________________________________________________________
+const AliTRDCalTrkAttach* AliTRDcalibDB::GetAttachObject()
+{
+ //
+ // Returns the object storing likelihood distributions for cluster to track attachment
+ //
+ return dynamic_cast<const AliTRDCalTrkAttach*>(GetCachedCDBObject(kIDAttach));
+}
+
+
//_____________________________________________________________________________
const AliTRDCalMonitoring *AliTRDcalibDB::GetMonitoringObject()
{