#include "TF1.h"
#include "TFile.h"
#include "TH1F.h"
+#include "TH1C.h"
#include "TH2F.h"
//#include "TList.h"
//#include "TROOT.h"
fRunParams(NULL),
fResponseParams(NULL),
fReadoutEfficiency(NULL),
+ fProblematic(NULL),
fInitFlag(kFALSE),
fRemoveMeanT0(kTRUE),
fCalibrateTOFsignal(kTRUE),
fRunParams(NULL),
fResponseParams(NULL),
fReadoutEfficiency(NULL),
+ fProblematic(NULL),
fInitFlag(calib.fInitFlag),
fRemoveMeanT0(calib.fRemoveMeanT0),
fCalibrateTOFsignal(calib.fCalibrateTOFsignal),
if (calib.fRunParams) fRunParams = new AliTOFRunParams(*calib.fRunParams);
if (calib.fResponseParams) fResponseParams = new AliTOFResponseParams(*calib.fResponseParams);
if (calib.fReadoutEfficiency) fReadoutEfficiency = new TH1F(*calib.fReadoutEfficiency);
+ if (calib.fProblematic) fProblematic = new TH1C(*calib.fProblematic);
gRandom->SetSeed(123456789);
}
if (fReadoutEfficiency) *fReadoutEfficiency = *calib.fReadoutEfficiency;
else fReadoutEfficiency = new TH1F(*calib.fReadoutEfficiency);
}
+ if (calib.fProblematic) {
+ if (fProblematic) *fProblematic = *calib.fProblematic;
+ else fProblematic = new TH1C(*calib.fProblematic);
+ }
fInitFlag = calib.fInitFlag;
fRemoveMeanT0 = calib.fRemoveMeanT0;
fCalibrateTOFsignal = calib.fCalibrateTOFsignal;
if (fRunParams) delete fRunParams;
if (fResponseParams) delete fResponseParams;
if (fReadoutEfficiency) delete fReadoutEfficiency;
+ if (fProblematic) delete fProblematic;
}
if (fTree!=0x0) delete fTree;
if (fChain!=0x0) delete fChain;
//----------------------------------------------------------------------------
+void
+AliTOFcalib::WriteProblematicOnCDB(const Char_t *sel , Int_t minrun, Int_t maxrun)
+{
+ /*
+ * write problematic on CDB
+ */
+
+ if (!fProblematic) return;
+ AliCDBId id(Form("%s/Problematic", sel), minrun, maxrun);
+ AliCDBMetaData *md = new AliCDBMetaData();
+ md->SetResponsible("Roberto Preghenella");
+ AliCDBManager *man = AliCDBManager::Instance();
+ man->Put(fProblematic, id, md);
+ AliDebug(2,Form("Problematic written on CDB with run range [%i, %i] ",minrun ,maxrun));
+ delete md;
+}
+
+//----------------------------------------------------------------------------
+
Bool_t
AliTOFcalib::ReadDeltaBCOffsetFromCDB(const Char_t *sel , Int_t nrun)
{
//----------------------------------------------------------------------------
+Bool_t
+AliTOFcalib::ReadProblematicFromCDB(const Char_t *sel , Int_t nrun)
+{
+ /*
+ * read problematic from CDB
+ */
+
+ AliCDBManager *man = AliCDBManager::Instance();
+ AliCDBEntry *entry = man->Get(Form("%s/Problematic", sel),nrun);
+ if (!entry) {
+ AliFatal("No Problematic entry found in CDB");
+ exit(0);
+ }
+ fProblematic = (TH1C *)entry->GetObject();
+ if(!fProblematic){
+ AliFatal("No Problematic object found in CDB entry");
+ exit(0);
+ }
+ return kTRUE;
+}
+
+//----------------------------------------------------------------------------
+
Bool_t
AliTOFcalib::Init(Int_t run)
{
AliError("cannot get \"ReadoutEfficiency\" object from OCDB");
return kFALSE;
}
+ /* get readout efficiency obj */
+ if (!ReadProblematicFromCDB("TOF/Calib", run)) {
+ AliError("cannot get \"Problematic\" object from OCDB");
+ return kFALSE;
+ }
/* get response params */
TFile *responseFile = TFile::Open("$ALICE_ROOT/TOF/data/AliTOFresponsePar.root");
if (!responseFile || !responseFile->IsOpen()) {
return 0.;
}
+ /* deal with L0-L1 orbit crossing (negative values) */
+ if (l0l1 < 0) l0l1 += 3564;
+
/* get calibration params */
AliTOFChannelOffline *parOffline = (AliTOFChannelOffline *)fTOFCalOffline->At(index);
Int_t deltaBCOffset = fDeltaBCOffset->GetDeltaBCOffset();
//----------------------------------------------------------------------------
Bool_t
-AliTOFcalib::IsChannelEnabled(Int_t index, Bool_t checkEfficiency)
+AliTOFcalib::IsChannelEnabled(Int_t index, Bool_t checkEfficiency, Bool_t checkProblematic)
{
/*
* is channel enabled
if (fStatus->GetNoiseStatus(index) == AliTOFChannelOnlineStatusArray::kTOFNoiseBad) return kFALSE;
if (fStatus->GetHWStatus(index) == AliTOFChannelOnlineStatusArray::kTOFHWBad) return kFALSE;
if (checkEfficiency && !IsChannelEfficient(index)) return kFALSE;
+ if (checkProblematic && IsChannelProblematic(index)) return kFALSE;
/* good status */
return kTRUE;
//----------------------------------------------------------------------------
+Bool_t
+AliTOFcalib::IsChannelProblematic(Int_t index)
+{
+ /*
+ * is channel problematic
+ */
+
+ if (!fInitFlag) {
+ AliError("class not yet initialized. Initialize it before.");
+ return kTRUE;
+ }
+
+ /* check problematic */
+ if (fProblematic->GetBinContent(index + 1) != 0) return kTRUE;
+ return kFALSE;
+
+}
+
+//----------------------------------------------------------------------------
+
void
AliTOFcalib::CalibrateTExp(AliESDEvent *event) const
{