]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TOF/AliTOFcalib.cxx
fix in TOF calibration to deal with L0-L1 orbit-crossing (negative values)
[u/mrichter/AliRoot.git] / TOF / AliTOFcalib.cxx
index c323f5eb7646180749488506133f27c4621445c8..e3b9dd6c1eafedf5dcbf3127c8d0c083df1d5d22 100644 (file)
@@ -84,6 +84,7 @@ author: Chiara Zampolli, zampolli@bo.infn.it
 #include "TF1.h"
 #include "TFile.h"
 #include "TH1F.h"
+#include "TH1C.h"
 #include "TH2F.h"
 //#include "TList.h"
 //#include "TROOT.h"
@@ -155,6 +156,7 @@ AliTOFcalib::AliTOFcalib():
   fRunParams(NULL),
   fResponseParams(NULL),
   fReadoutEfficiency(NULL),
+  fProblematic(NULL),
   fInitFlag(kFALSE),
   fRemoveMeanT0(kTRUE),
   fCalibrateTOFsignal(kTRUE),
@@ -191,6 +193,7 @@ AliTOFcalib::AliTOFcalib(const AliTOFcalib & calib):
   fRunParams(NULL),
   fResponseParams(NULL),
   fReadoutEfficiency(NULL),
+  fProblematic(NULL),
   fInitFlag(calib.fInitFlag),
   fRemoveMeanT0(calib.fRemoveMeanT0),
   fCalibrateTOFsignal(calib.fCalibrateTOFsignal),
@@ -228,6 +231,7 @@ AliTOFcalib::AliTOFcalib(const AliTOFcalib & calib):
   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);
 }
@@ -291,6 +295,10 @@ AliTOFcalib& AliTOFcalib::operator=(const AliTOFcalib &calib)
     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;
@@ -335,6 +343,7 @@ AliTOFcalib::~AliTOFcalib()
     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;
@@ -2036,6 +2045,25 @@ AliTOFcalib::WriteReadoutEfficiencyOnCDB(const Char_t *sel , Int_t minrun, Int_t
 
 //----------------------------------------------------------------------------
 
+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)
 {
@@ -2151,6 +2179,29 @@ AliTOFcalib::ReadReadoutEfficiencyFromCDB(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)
 {
@@ -2193,6 +2244,11 @@ 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()) {
@@ -2226,6 +2282,9 @@ AliTOFcalib::GetTimeCorrection(Int_t index, Double_t tot, Int_t deltaBC, Int_t l
     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();
@@ -2320,7 +2379,7 @@ AliTOFcalib::CalibrateESD(AliESDEvent *event)
 //----------------------------------------------------------------------------
 
 Bool_t
-AliTOFcalib::IsChannelEnabled(Int_t index, Bool_t checkEfficiency)
+AliTOFcalib::IsChannelEnabled(Int_t index, Bool_t checkEfficiency, Bool_t checkProblematic)
 {
   /*
    * is channel enabled
@@ -2336,6 +2395,7 @@ AliTOFcalib::IsChannelEnabled(Int_t index, Bool_t checkEfficiency)
   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;
@@ -2364,6 +2424,26 @@ AliTOFcalib::IsChannelEfficient(Int_t index)
 
 //----------------------------------------------------------------------------
 
+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
 {