TOF readout efficiency measurements added to TOF reconstruction (both data and MC...
authorrpreghen <rpreghen@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 9 Dec 2010 16:42:56 +0000 (16:42 +0000)
committerrpreghen <rpreghen@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 9 Dec 2010 16:42:56 +0000 (16:42 +0000)
OCDB/TOF/Calib/ReadoutEfficiency/Run0_999999999_v0_s0.root [new file with mode: 0644]
TOF/AliTOFcalib.cxx
TOF/AliTOFcalib.h
TOF/CheckReadoutEfficiency.C [new file with mode: 0644]
TOF/MakeCDBEntryReadoutEfficiency.C [new file with mode: 0644]

diff --git a/OCDB/TOF/Calib/ReadoutEfficiency/Run0_999999999_v0_s0.root b/OCDB/TOF/Calib/ReadoutEfficiency/Run0_999999999_v0_s0.root
new file mode 100644 (file)
index 0000000..45d4d5d
Binary files /dev/null and b/OCDB/TOF/Calib/ReadoutEfficiency/Run0_999999999_v0_s0.root differ
index a59815f..37b9dd3 100644 (file)
@@ -153,6 +153,7 @@ AliTOFcalib::AliTOFcalib():
   fT0Fill(NULL),
   fRunParams(NULL),
   fResponseParams(NULL),
+  fReadoutEfficiency(NULL),
   fInitFlag(kFALSE),
   fRemoveMeanT0(kTRUE),
   fCalibrateTOFsignal(kTRUE),
@@ -186,6 +187,7 @@ AliTOFcalib::AliTOFcalib(const AliTOFcalib & calib):
   fT0Fill(NULL),
   fRunParams(NULL),
   fResponseParams(NULL),
+  fReadoutEfficiency(NULL),
   fInitFlag(calib.fInitFlag),
   fRemoveMeanT0(calib.fRemoveMeanT0),
   fCalibrateTOFsignal(calib.fCalibrateTOFsignal),
@@ -222,6 +224,7 @@ AliTOFcalib::AliTOFcalib(const AliTOFcalib & calib):
   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);
 }
 
 //____________________________________________________________________________ 
@@ -279,6 +282,10 @@ AliTOFcalib& AliTOFcalib::operator=(const AliTOFcalib &calib)
     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;
@@ -321,6 +328,8 @@ AliTOFcalib::~AliTOFcalib()
     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;
@@ -2003,6 +2012,25 @@ AliTOFcalib::WriteRunParamsOnCDB(const Char_t *sel , Int_t minrun, Int_t maxrun)
 
 //----------------------------------------------------------------------------
 
+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)
 {
@@ -2095,6 +2123,29 @@ AliTOFcalib::ReadRunParamsFromCDB(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)
 {
@@ -2132,6 +2183,11 @@ 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()) {
@@ -2259,7 +2315,7 @@ AliTOFcalib::CalibrateESD(AliESDEvent *event)
 //----------------------------------------------------------------------------
 
 Bool_t
-AliTOFcalib::IsChannelEnabled(Int_t index)
+AliTOFcalib::IsChannelEnabled(Int_t index, Bool_t checkEfficiency)
 {
   /*
    * is channel enabled
@@ -2274,6 +2330,7 @@ AliTOFcalib::IsChannelEnabled(Int_t index)
   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;
@@ -2282,6 +2339,26 @@ AliTOFcalib::IsChannelEnabled(Int_t index)
 
 //----------------------------------------------------------------------------
 
+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
 {
index 904c530..7f9d81d 100644 (file)
@@ -107,6 +107,7 @@ public:
   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);
@@ -145,6 +146,7 @@ public:
   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
@@ -153,7 +155,8 @@ public:
   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
@@ -183,6 +186,7 @@ private:
   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
diff --git a/TOF/CheckReadoutEfficiency.C b/TOF/CheckReadoutEfficiency.C
new file mode 100644 (file)
index 0000000..90ed4e3
--- /dev/null
@@ -0,0 +1,55 @@
+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();
+
+}
diff --git a/TOF/MakeCDBEntryReadoutEfficiency.C b/TOF/MakeCDBEntryReadoutEfficiency.C
new file mode 100644 (file)
index 0000000..8f51106
--- /dev/null
@@ -0,0 +1,22 @@
+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);
+
+}