fT0Fill(NULL),
fRunParams(NULL),
fResponseParams(NULL),
+ fReadoutEfficiency(NULL),
fInitFlag(kFALSE),
fRemoveMeanT0(kTRUE),
fCalibrateTOFsignal(kTRUE),
fT0Fill(NULL),
fRunParams(NULL),
fResponseParams(NULL),
+ fReadoutEfficiency(NULL),
fInitFlag(calib.fInitFlag),
fRemoveMeanT0(calib.fRemoveMeanT0),
fCalibrateTOFsignal(calib.fCalibrateTOFsignal),
if (calib.fT0Fill) fT0Fill = new AliTOFT0Fill(*calib.fT0Fill);
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 (fResponseParams) *fResponseParams = *calib.fResponseParams;
else fResponseParams = new AliTOFResponseParams(*calib.fResponseParams);
}
+ if (calib.fReadoutEfficiency) {
+ if (fReadoutEfficiency) *fReadoutEfficiency = *calib.fReadoutEfficiency;
+ else fReadoutEfficiency = new TH1F(*calib.fReadoutEfficiency);
+ }
fInitFlag = calib.fInitFlag;
fRemoveMeanT0 = calib.fRemoveMeanT0;
fCalibrateTOFsignal = calib.fCalibrateTOFsignal;
if (fCTPLatency) delete fCTPLatency;
if (fT0Fill) delete fT0Fill;
if (fRunParams) delete fRunParams;
+ if (fResponseParams) delete fResponseParams;
+ if (fReadoutEfficiency) delete fReadoutEfficiency;
}
if (fTree!=0x0) delete fTree;
if (fChain!=0x0) delete fChain;
//----------------------------------------------------------------------------
+void
+AliTOFcalib::WriteReadoutEfficiencyOnCDB(const Char_t *sel , Int_t minrun, Int_t maxrun)
+{
+ /*
+ * write readout efficiency on CDB
+ */
+
+ if (!fReadoutEfficiency) return;
+ AliCDBId id(Form("%s/ReadoutEfficiency", sel), minrun, maxrun);
+ AliCDBMetaData *md = new AliCDBMetaData();
+ md->SetResponsible("Roberto Preghenella");
+ AliCDBManager *man = AliCDBManager::Instance();
+ man->Put(fReadoutEfficiency, id, md);
+ AliDebug(2,Form("ReadoutEfficiency 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::ReadReadoutEfficiencyFromCDB(const Char_t *sel , Int_t nrun)
+{
+ /*
+ * read readout efficiency from CDB
+ */
+
+ AliCDBManager *man = AliCDBManager::Instance();
+ AliCDBEntry *entry = man->Get(Form("%s/ReadoutEfficiency", sel),nrun);
+ if (!entry) {
+ AliFatal("No ReadoutEfficiency entry found in CDB");
+ exit(0);
+ }
+ fReadoutEfficiency = (TH1F *)entry->GetObject();
+ if(!fReadoutEfficiency){
+ AliFatal("No ReadoutEfficiency object found in CDB entry");
+ exit(0);
+ }
+ return kTRUE;
+}
+
+//----------------------------------------------------------------------------
+
Bool_t
AliTOFcalib::Init(Int_t run)
{
AliError("cannot get \"RunParams\" object from OCDB");
return kFALSE;
}
+ /* get readout efficiency obj */
+ if (!ReadReadoutEfficiencyFromCDB("TOF/Calib", run)) {
+ AliError("cannot get \"ReadoutEfficiency\" object from OCDB");
+ return kFALSE;
+ }
/* get response params */
TFile *responseFile = TFile::Open("$ALICE_ROOT/TOF/data/AliTOFresponsePar.root");
if (!responseFile || !responseFile->IsOpen()) {
//----------------------------------------------------------------------------
Bool_t
-AliTOFcalib::IsChannelEnabled(Int_t index)
+AliTOFcalib::IsChannelEnabled(Int_t index, Bool_t checkEfficiency)
{
/*
* is channel enabled
if (fStatus->GetPulserStatus(index) == AliTOFChannelOnlineStatusArray::kTOFPulserBad) return kFALSE;
if (fStatus->GetNoiseStatus(index) == AliTOFChannelOnlineStatusArray::kTOFNoiseBad) return kFALSE;
if (fStatus->GetHWStatus(index) == AliTOFChannelOnlineStatusArray::kTOFHWBad) return kFALSE;
+ if (checkEfficiency && !IsChannelEfficient(index)) return kFALSE;
/* good status */
return kTRUE;
//----------------------------------------------------------------------------
+Bool_t
+AliTOFcalib::IsChannelEfficient(Int_t index)
+{
+ /*
+ * is channel efficient
+ */
+
+ if (!fInitFlag) {
+ AliError("class not yet initialized. Initialize it before.");
+ return kTRUE;
+ }
+
+ /* check efficiency */
+ if (fReadoutEfficiency->GetBinContent(index + 1) < 0.95) return kFALSE;
+ return kTRUE;
+
+}
+
+//----------------------------------------------------------------------------
+
void
AliTOFcalib::CalibrateTExp(AliESDEvent *event) const
{
void WriteCTPLatencyOnCDB(const Char_t *sel, Int_t minrun, Int_t maxrun);
void WriteT0FillOnCDB(const Char_t *sel, Int_t minrun, Int_t maxrun);
void WriteRunParamsOnCDB(const Char_t *sel, Int_t minrun, Int_t maxrun);
+ void WriteReadoutEfficiencyOnCDB(const Char_t *sel, Int_t minrun, Int_t maxrun);
// reading
Bool_t ReadSimHistoFromCDB(const Char_t *sel, Int_t nrun);
Bool_t ReadCTPLatencyFromCDB(const Char_t *sel, Int_t nrun);
Bool_t ReadT0FillFromCDB(const Char_t *sel, Int_t nrun);
Bool_t ReadRunParamsFromCDB(const Char_t *sel, Int_t nrun);
+ Bool_t ReadReadoutEfficiencyFromCDB(const Char_t *sel, Int_t nrun);
Bool_t Init(Int_t run = -1); // init
Double_t GetTimeCorrection(Int_t index, Double_t tot, Int_t deltaBC, Int_t l0l1, UInt_t timestamp); // get time correction
void SetRemoveMeanT0(Bool_t value) {fRemoveMeanT0 = value;}; // setter
void SetCalibrateTOFsignal(Bool_t value) {fCalibrateTOFsignal = value;}; // setter
void SetCorrectTExp(Bool_t value) {fCorrectTExp = value;}; // setter
- Bool_t IsChannelEnabled(Int_t index); // is channel enabled
+ Bool_t IsChannelEnabled(Int_t index, Bool_t checkEfficiency = kTRUE); // is channel enabled
+ Bool_t IsChannelEfficient(Int_t index); // is channel efficient
private:
Int_t fNChannels; // number of TOF channels
AliTOFT0Fill *fT0Fill; // T0 fill
AliTOFRunParams *fRunParams; // run params
AliTOFResponseParams *fResponseParams; // run params
+ TH1F *fReadoutEfficiency; // readout efficiency
Bool_t fInitFlag; // init flag
Bool_t fRemoveMeanT0; // remove mean T0
--- /dev/null
+CheckReadoutEfficiency(Int_t run)
+{
+
+ TGrid::Connect("alien");
+ AliCDBManager *cdb = AliCDBManager::Instance();
+ cdb->SetDefaultStorage("raw://");
+ cdb->SetRun(run);
+ AliCDBEntry *cdbe = cdb->Get("TOF/Calib/ReadoutEfficiency");
+ CheckReadoutEfficiency(cdbe);
+
+}
+
+CheckReadoutEfficiency(const Char_t *fileName)
+{
+
+ TFile *file = TFile::Open(fileName);
+ AliCDBEntry *cdbe = (AliCDBEntry *)file->Get("AliCDBEntry");
+ CheckReadoutEfficiency(cdbe);
+}
+
+CheckReadoutEfficiency(AliCDBEntry *cdbe)
+{
+
+ if (!cdbe) {
+ printf("invalid CDB entry\n");
+ return;
+ }
+
+ TH1F *data = (TH1F *)cdbe->GetObject();
+
+ TH2F *hEfficiencyMap = new TH2F("hEfficiencyMap", "Readout efficiency map;sector;strip", 72, 0., 18., 91, 0., 91.);
+
+ AliTOFcalibHisto calib;
+ calib.LoadCalibHisto();
+ calib.LoadCalibStat(); /* temp */
+
+ Int_t sector, sectorStrip, padx, fea;
+ Float_t efficiency, hitmapx, hitmapy;
+ for (Int_t i = 0; i < data->GetNbinsX(); i++) {
+ efficiency = data->GetBinContent(i + 1);
+ sector = calib.GetCalibMap(AliTOFcalibHisto::kSector, i);
+ sectorStrip = calib.GetCalibMap(AliTOFcalibHisto::kSectorStrip, i);
+ padx = calib.GetCalibMap(AliTOFcalibHisto::kPadX, i);
+ fea = padx / 12;
+ hitmapx = sector + ((Double_t)(3 - fea) + 0.5) / 4.;
+ hitmapy = sectorStrip;
+
+ hEfficiencyMap->Fill(hitmapx, hitmapy, efficiency / 24.);
+ }
+
+ TFile *fout = TFile::Open("CheckReadoutEfficiency.root", "RECREATE");
+ hEfficiencyMap->Write();
+ fout->Close();
+
+}
--- /dev/null
+MakeCDBEntryReadoutEfficiency(Int_t startRun = 0, Int_t endRun = AliCDBRunRange::Infinity())
+{
+
+ /* create object */
+ TH1F *obj = new TH1F("hReadoutEfficiency", "", 157248, 0., 157248.);
+ for (Int_t i = 0; i < 157248; i++)
+ obj->SetBinContent(i + 1, 1.);
+
+ /* create cdb info */
+ AliCDBId id("TOF/Calib/ReadoutEfficiency", startRun, endRun);
+ AliCDBMetaData *md = new AliCDBMetaData();
+ md->SetResponsible("Roberto Preghenella");
+ md->SetComment("ReadoutEfficiency");
+ md->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
+ md->SetBeamPeriod(0);
+
+ /* put object in cdb */
+ AliCDBManager *cdb = AliCDBManager::Instance();
+ cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
+ cdb->GetDefaultStorage()->Put(obj, id, md);
+
+}