]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TOF/AliTOFcalibHisto.cxx
Muon correction calculation added, kAnyINT changed to kAny.
[u/mrichter/AliRoot.git] / TOF / AliTOFcalibHisto.cxx
index 4a0b3c59c473e75e0ad60c9191621d3725e45eb8..26452c4e8935e7dec682b4f8cb3a94db6f4025dd 100644 (file)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-/*************************************************************************
- *
- * AliTOFcalibHisto - class to handle TOF calibration histograms,
- *                    map histograms and more
- *
- *
- * autors:   Roberto Preghenella (R+)
- * concacts: preghenella@bo.infn.it
- *
- *************************************************************************/
+/*
+// *
+// * AliTOFcalibHisto - class to handle TOF calibration histograms,
+// *                    map histograms and more
+// *
+// *
+// * autors:   Roberto Preghenella (R+)
+// * concacts: preghenella@bo.infn.it
+// *
+// *
 
 #include "AliTOFcalibHisto.h"
 #include "AliLog.h"
@@ -41,11 +41,13 @@ ClassImp(AliTOFcalibHisto)
 
 TFile *AliTOFcalibHisto::fgCalibHistoFile = NULL;
 TFile *AliTOFcalibHisto::fgCalibParFile = NULL;
+TFile *AliTOFcalibHisto::fgCalibStatFile = NULL;
 
 //__________________________________________________________________________
 
 TString AliTOFcalibHisto::fgCalibHistoFileName = "$ALICE_ROOT/TOF/data/AliTOFcalibHisto.root";
 TString AliTOFcalibHisto::fgCalibParFileName = "$ALICE_ROOT/TOF/data/AliTOFcalibPar.root";
+TString AliTOFcalibHisto::fgCalibStatFileName = "$ALICE_ROOT/TOF/data/AliTOFcalibStat.root";
 
 //__________________________________________________________________________
 
@@ -100,6 +102,12 @@ const TString AliTOFcalibHisto::fgkCalibParName[kNcalibPars] = {
 
 //__________________________________________________________________________
 
+const TString AliTOFcalibHisto::fgkCalibStatName[kNcalibStats] = {
+  "hStripStat"
+};
+
+//__________________________________________________________________________
+
 /* LHC clock period [ns] */
 const Double_t AliTOFcalibHisto::fgkLHCperiod = (24.4e-3 * 1024); /* ns */
 
@@ -212,11 +220,126 @@ Bool_t AliTOFcalibHisto::fgFullCorrectionFlag[kNcorrections] = {
 
 //__________________________________________________________________________
 
+const Int_t AliTOFcalibHisto::fgkStripStat[18][91] = {
+
+  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S00 */
+  
+  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S01 */
+
+  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S02 */
+  
+  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S03 */
+  
+  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S04 */
+
+  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S05 */
+
+  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S06 */
+  
+  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S07 */
+  
+  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S08 */
+  
+  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S09 */
+  
+  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S10 */
+  
+  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S11 */
+  
+  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+   1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S12 */
+
+  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S13 */
+
+  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+   0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S14 */
+  
+  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S15 */
+
+  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* S16 */
+  
+  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}  /* S17 */
+
+};
+
+//__________________________________________________________________________
+
 AliTOFcalibHisto::AliTOFcalibHisto() :
   TObject(),
   fCalibConst(),
   fCalibMap(),
-  fCalibPar()
+  fCalibPar(),
+  fCalibStat()
 {
   /* default constructor */
 }
@@ -231,7 +354,7 @@ AliTOFcalibHisto::~AliTOFcalibHisto()
 //__________________________________________________________________________
 
 void 
-AliTOFcalibHisto::LoadHisto(TFile* file, TH1D **histo, const Char_t *name) 
+AliTOFcalibHisto::LoadHisto(TFile * const file, TH1D **histo, const Char_t *name) 
 {
   /* load histo */
   *histo = (TH1D *)file->Get(name);
@@ -298,8 +421,10 @@ AliTOFcalibHisto::LoadCalibHisto()
 
   /* open input file */
   TFile *fileIn = TFile::Open(GetCalibHistoFileName());
-  if (!fileIn || !fileIn->IsOpen())
+  if (!fileIn || !fileIn->IsOpen()) {
     AliFatal(Form("cannot open input file %s", GetCalibHistoFileName()));
+    return;
+  }
 
   /* set calib histo file */
   fgCalibHistoFile = fileIn;
@@ -327,8 +452,10 @@ AliTOFcalibHisto::LoadCalibPar()
 
   /* open input file */
   TFile *fileIn = TFile::Open(GetCalibParFileName());
-  if (!fileIn || !fileIn->IsOpen())
+  if (!fileIn || !fileIn->IsOpen()) {
     AliError(Form("cannot open input file %s", GetCalibParFileName()));
+    return;
+  }
 
   /* set calib par file */
   fgCalibParFile = fileIn;
@@ -341,6 +468,35 @@ AliTOFcalibHisto::LoadCalibPar()
 
 //__________________________________________________________________________
 
+void
+AliTOFcalibHisto::LoadCalibStat()
+{
+  /* load calib stat */
+
+  if (fgCalibStatFile && fgCalibStatFile->IsOpen())
+    AliWarning("calib par file already open: reloading"); 
+
+  /* load calib histo */
+  LoadCalibHisto();
+
+  /* open input file */
+  TFile *fileIn = TFile::Open(GetCalibStatFileName());
+  if (!fileIn || !fileIn->IsOpen()) {
+    AliError(Form("cannot open input file %s", GetCalibStatFileName()));
+    return;
+  }
+
+  /* set calib par file */
+  fgCalibStatFile = fileIn;
+
+  /* load pars */
+  for (Int_t i = 0; i < kNcalibStats; i++)
+    LoadHisto(fileIn, &fCalibStat[i], fgkCalibStatName[i].Data());
+
+}
+
+//__________________________________________________________________________
+
 void
 AliTOFcalibHisto::WriteCalibHisto()
 {
@@ -348,8 +504,10 @@ AliTOFcalibHisto::WriteCalibHisto()
 
   /* open output file */
   TFile *fileOut = TFile::Open(GetCalibHistoFileName(), "RECREATE");
-  if (!fileOut || !fileOut->IsOpen())
+  if (!fileOut || !fileOut->IsOpen()) {
     AliFatal(Form("cannot open output file %s", GetCalibHistoFileName()));
+    return;
+  }
 
   /* create consts */
   for (Int_t iConst = 0; iConst < kNcalibConsts; iConst++)
@@ -396,7 +554,7 @@ AliTOFcalibHisto::WriteCalibHisto()
            dummy = det[3]; det[3] = det[4]; det[4] = dummy;
            
            /* check detector indices */
-           if (det[0] < 0 || det[0] > 71 ||
+           if (det[0] < 0 || det[0] > 17 ||
                det[1] < 0 || det[1] > 4 ||
                det[2] < 0 || det[2] > 18 ||
                det[3] < 0 || det[3] > 1 ||
@@ -459,6 +617,47 @@ AliTOFcalibHisto::WriteCalibHisto()
 
 //__________________________________________________________________________
 
+void
+AliTOFcalibHisto::WriteCalibStat()
+{
+  /* write calib stat */
+
+  /* open output file */
+  TFile *fileOut = TFile::Open(GetCalibStatFileName(), "RECREATE");
+  if (!fileOut || !fileOut->IsOpen()) {
+    AliFatal(Form("cannot open output file %s", GetCalibStatFileName()));
+    return;
+  }
+
+  /* create stats */
+  for (Int_t iStat = 0; iStat < kNcalibStats; iStat++)
+    CreateHisto(&fCalibStat[iStat], fgkCalibStatName[iStat].Data(), fgkNchannels);
+
+  /***  SETUP STATS  ***/
+
+  Int_t sector, sectorStrip;
+
+  /* load calib histo */
+  LoadCalibHisto();
+
+  /* loop over channels */
+  for (Int_t index = 0; index < fgkNchannels; index++) {
+    sector = (Int_t)GetCalibMap(kSector, index);
+    sectorStrip = (Int_t)GetCalibMap(kSectorStrip, index);
+    /* strip stat */
+    SetHisto(fCalibStat[kStripStat], index, (Double_t)fgkStripStat[sector][sectorStrip]);
+  } /* loop over channels */
+
+  /* write stats */
+  for (Int_t iStat = 0; iStat < kNcalibStats; iStat++)
+    WriteHisto(fileOut, fCalibStat[iStat]);
+
+  /* close output file */
+  fileOut->Close();
+}
+
+//__________________________________________________________________________
+
 Double_t
 AliTOFcalibHisto::GetCorrection(Int_t corr, Int_t index, Double_t tot)
 {
@@ -578,3 +777,17 @@ AliTOFcalibHisto::GetFullCorrection(Int_t index, Double_t tot)
   return corr;
 }
 
+//__________________________________________________________________________
+
+Bool_t
+AliTOFcalibHisto::GetStatus(Int_t index)
+{
+  /* get status */
+
+  Bool_t status = kTRUE;
+
+  for (Int_t iStat = 0; iStat < kNcalibStats; iStat++)
+    status &= GetCalibStat(iStat, index);
+
+  return status;
+}