deleting unused class AliEMCALCalibHistoProducer and adding new class AliEMCALCalibTe...
authordsilverm <dsilverm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 7 Nov 2010 20:20:09 +0000 (20:20 +0000)
committerdsilverm <dsilverm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 7 Nov 2010 20:20:09 +0000 (20:20 +0000)
EMCAL/AliEMCALCalibHistoProducer.cxx [deleted file]
EMCAL/AliEMCALCalibHistoProducer.h [deleted file]
EMCAL/AliEMCALCalibTempCoeff.cxx [new file with mode: 0644]
EMCAL/AliEMCALCalibTempCoeff.h [new file with mode: 0644]
EMCAL/AliEMCALCalibTimeDepCorrection.cxx
EMCAL/CMakelibEMCALbase.pkg
EMCAL/EMCALbaseLinkDef.h
EMCAL/libEMCALbase.pkg

diff --git a/EMCAL/AliEMCALCalibHistoProducer.cxx b/EMCAL/AliEMCALCalibHistoProducer.cxx
deleted file mode 100644 (file)
index 58c02b5..0000000
+++ /dev/null
@@ -1,285 +0,0 @@
-/**************************************************************************
- * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- *                                                                        *
- * Author: The ALICE Off-line Project.                                    *
- * Contributors are mentioned in the code where appropriate.              *
- *                                                                        *
- * Permission to use, copy, modify and distribute this software and its   *
- * documentation strictly for non-commercial purposes is hereby granted   *
- * without fee, provided that the above copyright notice appears in all   *
- * copies and that both the copyright notice and this permission notice   *
- * appear in the supporting documentation. The authors make no claims     *
- * about the suitability of this software for any purpose. It is          *
- * provided "as is" without express or implied warranty.                  *
- **************************************************************************/
-
-/* $Id$ */
-/* History of cvs commits:
- *
- * $Log$
- * Revision 1.1  2006/12/07 16:32:16  gustavo
- * First shuttle code, online calibration histograms producer, EMCAL preprocessor
- * 
- *
-*/
-///////////////////////////////////////////////////////////////////////////////
-// Class AliEMCALCalibHistoProducer accumulating histograms
-// with amplitudes per EMCAL channel
-// It is intended to run at DAQ computers (LDC, GDC, HLT or MOOD)
-// and it fills the histograms with amplitudes per channel.
-// Usage example see in EMCAL/macros/Shuttle/AliEMCALCalibHistoProducer.C
-//
-// Author: Boris Polichtchouk, 4 October 2006
-// Adapted for EMCAL by Gustavo Conesa Balbastre, October 2006
-///////////////////////////////////////////////////////////////////////////////
-
-#include "TH1.h"
-#include "TFile.h"
-#include "TProfile.h"
-
-
-#include "AliLog.h"
-#include "AliRawReader.h"
-#include "AliCaloRawStreamV3.h"
-#include "AliEMCALCalibHistoProducer.h"
-
-ClassImp(AliEMCALCalibHistoProducer)
-
-//-----------------------------------------------------------------------------
-AliEMCALCalibHistoProducer::AliEMCALCalibHistoProducer(AliRawReader* rawReader) : 
-  TObject(),fRawReader(rawReader),fHistoFile(0),fHistoFileName("calibEmcHisto.root"),
-  fUpdatingRate(100), fNSuperModules(12),  fNCellsEta (48),   
-  fNCellsPhi(24),  fNCellsPhiHalfSM(12)
-{
-  // Constructor
-
-  for(Int_t ism=0; ism<fNSuperModules; ism++) {
-    fAmpProf[ism] = 0;
-    fSMInstalled[ism]=kTRUE;
-    for(Int_t icol=0; icol<fNCellsEta; icol++) 
-      for(Int_t irow=0; irow<fNCellsPhi; irow++) 
-         fAmpHisto[ism][icol][irow]=0;
-  }
-
-}
-//-----------------------------------------------------------------------------
-AliEMCALCalibHistoProducer::AliEMCALCalibHistoProducer() : 
-  fRawReader(0x0),fHistoFile(0),fHistoFileName(""),
-  fUpdatingRate(0), fNSuperModules(12),  fNCellsEta (48),   
-  fNCellsPhi(24),  fNCellsPhiHalfSM(12)
-{
-  // default Constructor
-
-  for(Int_t ism=0; ism<fNSuperModules; ism++) {
-    fAmpProf[ism] = 0;
-    fSMInstalled[ism]=kTRUE;
-    for(Int_t icol=0; icol<fNCellsEta; icol++) 
-      for(Int_t irow=0; irow<fNCellsPhi; irow++) 
-         fAmpHisto[ism][icol][irow]=0;
-  }
-
-}
-
-//-----------------------------------------------------------------------------
-AliEMCALCalibHistoProducer::AliEMCALCalibHistoProducer(const AliEMCALCalibHistoProducer & copy) :
-  TObject(copy),fRawReader((AliRawReader*)copy. fRawReader->Clone()),
-  fHistoFile((TFile*)copy.fHistoFile->Clone()),fHistoFileName(copy.fHistoFileName),
-  fUpdatingRate(copy.fUpdatingRate),
-  fNSuperModules(copy.fNSuperModules), fNCellsEta (copy.fNCellsEta), 
-  fNCellsPhi(copy.fNCellsPhi), fNCellsPhiHalfSM(copy.fNCellsPhiHalfSM)
-{
-  //copy constructor
-
- for(Int_t ism=0; ism<fNSuperModules; ism++) {
-    fAmpProf[ism] = copy. fAmpProf[ism];
-    fSMInstalled[ism]= copy.fSMInstalled[ism];
-    for(Int_t icol=0; icol<fNCellsEta; icol++) 
-      for(Int_t irow=0; irow<fNCellsPhi; irow++) 
-         fAmpHisto[ism][icol][irow]= copy.fAmpHisto[ism][icol][irow];
-  }
-
-}
-
-//-----------------------------------------------------------------------------
-AliEMCALCalibHistoProducer::~AliEMCALCalibHistoProducer()
-{
-  // Destructor
-  if(fHistoFile) {
-    fHistoFile->Close();
-    delete fHistoFile;
-  }
-}
-
-//------------------------------------------------------------------------------
-//
-AliEMCALCalibHistoProducer& AliEMCALCalibHistoProducer::operator=(const AliEMCALCalibHistoProducer& copy)
-{
-       //
-       // Assignment operator.
-       // Besides copying all parameters, duplicates all collections.  
-       //
-                if (&copy == this) return *this;
-       TObject::operator=(copy);
-       fHistoFileName = copy.fHistoFileName;
-       fUpdatingRate = copy.fUpdatingRate;
-       fNSuperModules = copy.fNSuperModules;
-       fNCellsEta = copy.fNCellsEta;
-       fNCellsPhi = copy.fNCellsPhi;
-       fNCellsPhiHalfSM = copy.fNCellsPhiHalfSM;
-       
-       fRawReader  = (AliRawReader*)copy. fRawReader->Clone();
-       fHistoFile      = (TFile*)copy.fHistoFile->Clone();
-
-       for(Int_t ism=0; ism<fNSuperModules; ism++) {
-         fAmpProf[ism] = copy. fAmpProf[ism];
-         fSMInstalled[ism]= copy.fSMInstalled[ism];
-         for(Int_t icol=0; icol<fNCellsEta; icol++) 
-           for(Int_t irow=0; irow<fNCellsPhi; irow++) 
-             fAmpHisto[ism][icol][irow]= copy.fAmpHisto[ism][icol][irow];
-       }
-
-       return (*this);
-}
-//-----------------------------------------------------------------------------
-void AliEMCALCalibHistoProducer::Init()
-{
-  // initializes input data stream supplied by rawReader
-  // Checks existence of histograms which might have been left
-  // from the previous runs to continue their filling
-  fHistoFile =  new TFile(fHistoFileName,"update");
-  const Int_t buffersize = 128;
-  char hname[buffersize];
-  Int_t nRow =  fNCellsPhi ;
-
-  for(Int_t supermodule=0; supermodule<fNSuperModules; supermodule++) {
-    //Check installed supermodules
-    if(fSMInstalled[supermodule]==kFALSE) continue;
-    //Check created profiles
-    snprintf(hname,buffersize,"mod%d",supermodule);
-    TProfile* prof = (TProfile*)fHistoFile->Get(hname);
-    if(prof)
-      fAmpProf[supermodule]=prof;
-    
-    //Check created histograms
-    if(supermodule > 10) nRow = fNCellsPhiHalfSM ; //Supermodules 11 and 12 are half supermodules
-    for(Int_t column=0; column<fNCellsEta; column++) {
-      for(Int_t row=0; row<nRow; row++) {
-        snprintf(hname,buffersize,"mod%dcol%drow%d",supermodule,column,row);
-        TH1F* hist = (TH1F*)fHistoFile->Get(hname);
-        if(hist) 
-          fAmpHisto[supermodule][column][row]=hist;
-      }
-    }
-  }
-  
-}
-//-----------------------------------------------------------------------------
-void AliEMCALCalibHistoProducer::Run()
-{
-  // Reads raw data stream and fills amplitude histograms
-  // The histograms are written to file every fUpdatingRate events
-  //Also fills profiles to study the stability of supermodules during runs.
-
-  Init();
-  
-//   TH1F* gHighGain = 0;
-//   TH1F* gLowGain = 0;
-  const Int_t buffersize=128;
-  char hname[buffersize];
-  Int_t iEvent = 0;
-  Int_t runNum = 0;
-  Int_t nProfFreq = 1000; //Number of events with which a bin of the TProfile if filled
-  Int_t nEvtBins = 1000; //Total number of the profile survey bins.
-
-  AliCaloRawStreamV3 in(fRawReader,"EMCAL");
-
-  // Read raw data event by event
-
-  while (fRawReader->NextEvent()) {
-    runNum = fRawReader->GetRunNumber();
-
-    while (in.NextDDL()) {
-      while (in.NextChannel()) {
-
-       if(fSMInstalled[in.GetModule()]==kFALSE) continue;
-
-       // loop over samples
-       int nsamples = 0;
-       Int_t maxSample = 0;
-       while (in.NextBunch()) {
-         const UShort_t *sig = in.GetSignals();
-         nsamples += in.GetBunchLength();
-         for (Int_t i = 0; i < in.GetBunchLength(); i++) {
-           if (sig[i] > maxSample) maxSample = sig[i];
-         }
-       } // bunches
-
-       if (nsamples > 0) { // this check is needed for when we have zero-supp. on, but not sparse readout
-
-       // indices
-       Int_t mod = in.GetModule();
-       Int_t col = in.GetColumn();
-       Int_t row = in.GetRow();
-       Int_t evtbin = iEvent/nProfFreq;
-       Bool_t HighGainFlag = in.IsHighGain();
-       
-       //Check if histogram/profile already exist, if not create it.
-       if(!fAmpHisto[mod][col][row]) {
-         snprintf(hname,buffersize,"mod%dcol%drow%d",mod,col,row);
-         fAmpHisto[mod][col][row] = new TH1F(hname,hname,1024,-0.5,1023.);
-       }
-       if(!fAmpProf[mod]) {
-         snprintf(hname,buffersize,"mod%d",mod);
-         fAmpProf[mod] = new TProfile(hname,hname,nEvtBins,0.,nEvtBins);
-       }
-               
-       //Fill histogram/profile 
-       if(HighGainFlag) {
-         fAmpHisto[mod][col][row]->Fill(maxSample);
-         fAmpProf[mod]->Fill(evtbin, maxSample);
-       }
-
-      } // nsamples>0 check, some data found for this channel; not only trailer/header
-
-      } // channels
-    } // DDL's
-
-    // update histograms in local file every 100th event
-    if(iEvent%fUpdatingRate == 0) {
-      AliInfo(Form("Updating histo file, event %d, run %d\n",iEvent,runNum));
-      UpdateHistoFile();
-    } 
-    iEvent++;
-  }
-
-  UpdateHistoFile(); 
-  AliInfo(Form("%d events of run %d processed.",iEvent,runNum));
-}
-
-//-----------------------------------------------------------------------------
-void AliEMCALCalibHistoProducer::UpdateHistoFile()
-{
-  // Write histograms to file
-
-  if(!fHistoFile) return;
-  if(!fHistoFile->IsOpen()) return;
-
-  TH1F* hist=0;
-  TProfile* prof =0;
-  Int_t nRow =  fNCellsPhi ;
-  for(Int_t supermodule=0; supermodule<fNSuperModules; supermodule++) {
-    
-    prof = fAmpProf[supermodule]; 
-    if(prof) prof->Write(prof->GetName(),TObject::kWriteDelete);
-    
-    if(supermodule > 10)  nRow = fNCellsPhiHalfSM ; //Supermodules 11 and 12 are half supermodules
-    for(Int_t column=0; column<fNCellsEta; column++) {
-      for(Int_t row=0; row<nRow; row++) {
-       hist = fAmpHisto[supermodule][column][row]; 
-       if(hist) hist->Write(hist->GetName(),TObject::kWriteDelete);
-      }
-    }
-  }
-  
-}
diff --git a/EMCAL/AliEMCALCalibHistoProducer.h b/EMCAL/AliEMCALCalibHistoProducer.h
deleted file mode 100644 (file)
index bd894e3..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-#ifndef ALIEMCALCALIBHISTOPRODUCER_H
-#define ALIEMCALCALIBHISTOPRODUCER_H
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * See cxx source for full Copyright notice                               */
-
-/* $Id$ */
-
-/* History of cvs commits:
- *
- * $Log$
- * Revision 1.1  2006/12/07 16:32:16  gustavo
- * First shuttle code, online calibration histograms producer, EMCAL preprocessor
- * 
- *
-*/
-
-///////////////////////////////////////////////////////////////////////////////
-// Class AliEMCALCalibHistoProducer accumulating histograms
-// with amplitudes per EMCAL channel
-///////////////////////////////////////////////////////////////////////////////
-
-#include "TObject.h"
-
-class TProfile;
-class TString;
-class TH1F;
-class TFile;
-class AliRawReader;
-
-class AliEMCALCalibHistoProducer : public TObject {
-public:
-
-  AliEMCALCalibHistoProducer();
-  AliEMCALCalibHistoProducer(AliRawReader* rawReader);
-  AliEMCALCalibHistoProducer(const AliEMCALCalibHistoProducer &histoproducer);
-  AliEMCALCalibHistoProducer& operator= (const AliEMCALCalibHistoProducer &histoproducer);
-  virtual ~AliEMCALCalibHistoProducer();
-
-  void Init();
-  void Run();
-  void UpdateHistoFile();
-  void SetUpdatingRate(Int_t rate) {fUpdatingRate = rate;}
-  void SetCalibHistoFileName(Int_t name) {fHistoFileName = name;}
-  void SetSMInstalled(Int_t nsm, Bool_t bsm) {fSMInstalled[nsm] = bsm;}
-
-protected:
-
-  TH1F* fAmpHisto[12][48][24]; // amplitudes in [module][column][row].
-  TProfile *fAmpProf[12]; // one per SuperModule
-  AliRawReader* fRawReader;   // raw data reader.
-  TFile* fHistoFile;          // root file to store histograms in
-  TString fHistoFileName;          // name of root file to store histograms in
-  Int_t fUpdatingRate;        // update rate
-  Int_t fNSuperModules;          //Number of SuperModules;
-  Int_t fNCellsEta;                  //Number of Cells in Eta in a SuperModule;
-  Int_t fNCellsPhi;                   //Number of Cells in Phi in a SuperModule;
-  Int_t fNCellsPhiHalfSM;      //Number of Cells in Phi in a Half SuperModule;
-  Bool_t fSMInstalled[12];  //Check which detectors are on.
-  ClassDef(AliEMCALCalibHistoProducer,2)
-
-};
-
-#endif
diff --git a/EMCAL/AliEMCALCalibTempCoeff.cxx b/EMCAL/AliEMCALCalibTempCoeff.cxx
new file mode 100644 (file)
index 0000000..2e7ed23
--- /dev/null
@@ -0,0 +1,320 @@
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+/* $Id: $ */
+
+// Objects of this class contain temperature-dependence coefficients
+//
+
+#include <fstream>
+#include <TString.h>
+#include <TFile.h>
+#include <TTree.h>
+
+#include "AliEMCALCalibTempCoeff.h"
+
+using namespace std;
+
+ClassImp(AliEMCALCalibTempCoeff)
+
+//____________________________________________________________________________
+AliEMCALCalibTempCoeff::AliEMCALCalibTempCoeff(const int nSM) : 
+  fNSuperModule(nSM),
+  fSuperModuleData()
+{
+  //Default constructor.
+  for (int i=0; i<fNSuperModule; i++) {
+    fSuperModuleData.Add(new AliEMCALSuperModuleCalibTempCoeff(i));
+  }
+  fSuperModuleData.Compress(); // compress the TObjArray
+  fSuperModuleData.SetOwner(kTRUE); 
+}
+
+//____________________________________________________________________________
+void AliEMCALCalibTempCoeff::ReadTextCalibTempCoeffInfo(Int_t nSM, const TString &txtFileName,
+                                           Bool_t swapSides)
+{
+  //Read data from txt file. ; coordinates given on SuperModule basis
+
+  std::ifstream inputFile(txtFileName.Data());
+  if (!inputFile) {
+    printf("AliEMCALCalibTempCoeff::ReadCalibTempCoeffInfo - Cannot open the APD info file %s\n", txtFileName.Data());
+    return;
+  }
+
+  fNSuperModule = nSM;
+
+  Int_t iSM = 0; // SuperModule index
+  Int_t iCol = 0;
+  Int_t iRow = 0;
+
+  // list of values to be read
+  Int_t iSrc = 0; 
+  Float_t tempCoeff = 0; 
+  // end - all values
+
+  Int_t nAPDPerSM = AliEMCALGeoParams::fgkEMCALCols * AliEMCALGeoParams::fgkEMCALRows;
+
+  for (Int_t i = 0; i < fNSuperModule; i++) {
+    AliEMCALSuperModuleCalibTempCoeff * t = (AliEMCALSuperModuleCalibTempCoeff*) fSuperModuleData[i];
+    if (!inputFile) {
+      printf("AliEMCALCalibTempCoeff::ReadCalibTempCoeffInfo - Error while reading input file; likely EOF..\n");
+      return;
+    }
+    inputFile >> iSM;
+    t->SetSuperModuleNum(iSM);
+
+    // info for each tower
+    for (Int_t j=0; j<nAPDPerSM; j++) {
+      inputFile >> iCol >> iRow >> tempCoeff >> iSrc;
+
+      // check that input values are not out bounds
+      if (iCol<0 || iCol>(AliEMCALGeoParams::fgkEMCALCols-1) ||
+         iRow<0 || iRow>(AliEMCALGeoParams::fgkEMCALRows-1) ) {
+       printf("AliEMCALCalibTempCoeff::ReadCalibTempCoeffInfo - Error while reading input file; j %d iCol %d iRow %d\n", j, iCol, iRow);
+      return;
+      }
+
+      // assume that this info is already swapped and done for this basis?
+      if (swapSides) {
+       // C side, oriented differently than A side: swap is requested
+       iCol = AliEMCALGeoParams::fgkEMCALCols-1 - iCol;
+       iRow = AliEMCALGeoParams::fgkEMCALRows-1 - iRow;
+      }
+
+      t->SetTC(iCol, iRow, tempCoeff);
+      t->SetSrc(iCol, iRow, iSrc);
+    }
+
+  } // i, SuperModule
+
+  inputFile.close();
+
+  return;
+}
+
+//____________________________________________________________________________
+void AliEMCALCalibTempCoeff::WriteTextCalibTempCoeffInfo(const TString &txtFileName,
+                                            Bool_t swapSides)
+{
+  // write data to txt file. ; coordinates given on SuperModule basis
+
+  std::ofstream outputFile(txtFileName.Data());
+  if (!outputFile) {
+    printf("AliEMCALCalibTempCoeff::WriteCalibTempCoeffInfo - Cannot open the APD output file %s\n", txtFileName.Data());
+    return;
+  }
+
+  Int_t iCol = 0;
+  Int_t iRow = 0;
+
+  Int_t nAPDPerSM = AliEMCALGeoParams::fgkEMCALCols * AliEMCALGeoParams::fgkEMCALRows;
+  Float_t tempCoeff = 0;
+  Int_t iSrc = 0;
+
+  for (Int_t i = 0; i < fNSuperModule; i++) {
+    AliEMCALSuperModuleCalibTempCoeff * t = (AliEMCALSuperModuleCalibTempCoeff*) fSuperModuleData[i];
+
+    // info for each tower
+    for (Int_t j=0; j<nAPDPerSM; j++) {
+      iCol = j / AliEMCALGeoParams::fgkEMCALRows;
+      iRow = j % AliEMCALGeoParams::fgkEMCALRows;
+
+      tempCoeff = t->GetTC(iCol, iRow);
+      iSrc = t->GetSrc(iCol, iRow);
+
+      if (swapSides) {
+       // C side, oriented differently than A side: swap is requested
+       iCol = AliEMCALGeoParams::fgkEMCALCols-1 - iCol;
+       iRow = AliEMCALGeoParams::fgkEMCALRows-1 - iRow;
+      }
+
+      outputFile << iCol << " " << iRow 
+                << " " << tempCoeff 
+                << " " << iSrc << endl;
+    }
+
+  } // i, SuperModule
+
+  outputFile.close();
+
+  return;
+}
+
+//____________________________________________________________________________
+void AliEMCALCalibTempCoeff::ReadRootCalibTempCoeffInfo(const TString &rootFileName,
+                                           Bool_t swapSides)
+{
+  //Read data from root file. ; coordinates given on SuperModule basis
+  TFile inputFile(rootFileName, "read");  
+
+  TTree *tree = (TTree*) inputFile.Get("tree");
+
+  ReadTreeCalibTempCoeffInfo(tree, swapSides);
+
+  inputFile.Close();
+
+  return;
+}
+
+//____________________________________________________________________________
+void AliEMCALCalibTempCoeff::ReadTreeCalibTempCoeffInfo(TTree *tree,
+                                           Bool_t swapSides)
+{
+  // how many SuperModule's worth of info do we have?
+  Int_t nAPDPerSM = AliEMCALGeoParams::fgkEMCALCols * AliEMCALGeoParams::fgkEMCALRows;
+  fNSuperModule = tree->GetEntries();
+
+  Int_t iSM = 0; // SuperModule index
+  // list of values to be read
+  // info for each tower
+  Float_t tempCoeff[AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]; 
+  Int_t iSrc[AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]; 
+  // end - all values
+
+  // just to make the initializations of the arrays are done correctly, let's use memset
+  memset(tempCoeff, 0, sizeof(tempCoeff)); 
+  memset(iSrc, 0, sizeof(iSrc)); 
+
+  // declare the branches
+  tree->SetBranchAddress("iSM", &iSM);
+  tree->SetBranchAddress("TempCoeff", tempCoeff);
+  tree->SetBranchAddress("Src", iSrc);
+
+  // indices for looping over the towers
+  Int_t iCol = 0;
+  Int_t iRow = 0;
+
+  for (int ient=0; ient<tree->GetEntries(); ient++) {
+    tree->GetEntry(ient);
+
+    // assume the index SuperModules come in order: i=iSM
+    AliEMCALSuperModuleCalibTempCoeff * t = (AliEMCALSuperModuleCalibTempCoeff*) fSuperModuleData[iSM];
+
+    t->SetSuperModuleNum(iSM);
+
+    // third: info for each tower
+    for (Int_t j=0; j<nAPDPerSM; j++) {
+      iCol = j / AliEMCALGeoParams::fgkEMCALRows;
+      iRow = j % AliEMCALGeoParams::fgkEMCALRows;
+
+      // help variables: possibly modified or swapped indices
+      int iColMod = iCol;
+      int iRowMod = iRow;
+      // assume that this info is already swapped and done for this basis?
+      if (swapSides) {
+       // C side, oriented differently than A side: swap is requested
+       iColMod = AliEMCALGeoParams::fgkEMCALCols-1 - iCol;
+       iRowMod = AliEMCALGeoParams::fgkEMCALRows-1 - iRow;
+      }
+
+      t->SetTC(iColMod, iRowMod, tempCoeff[iCol][iRow]);
+      t->SetSrc(iColMod, iRowMod, iSrc[iCol][iRow]);
+    }
+
+  } // loop over entries
+
+  return;
+}
+
+//____________________________________________________________________________
+void AliEMCALCalibTempCoeff::WriteRootCalibTempCoeffInfo(const TString &rootFileName,
+                                            Bool_t swapSides)
+{
+  // write data to root file. ; coordinates given on SuperModule basis
+  TFile destFile(rootFileName, "recreate");  
+  if (destFile.IsZombie()) {
+    return;
+  }  
+  destFile.cd();
+
+  TTree *tree = new TTree("tree","");
+
+  // variables for filling the TTree
+  Int_t iSM = 0; // SuperModule index
+  // list of values to be written
+
+  Float_t tempCoeff[AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]; 
+  Int_t iSrc[AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows];   // end - all values
+
+  // just to make the initializations of the arrays are done correctly, let's use memset
+  memset(tempCoeff, 0, sizeof(tempCoeff)); 
+  memset(iSrc, 0, sizeof(iSrc)); 
+
+  Int_t nAPDPerSM = AliEMCALGeoParams::fgkEMCALCols * AliEMCALGeoParams::fgkEMCALRows;
+  // for looping over towers
+  Int_t iCol = 0;
+  Int_t iRow = 0;
+
+  // declare the branches
+  // first
+  tree->Branch("iSM", &iSM, "iSM/I");
+  // info for each tower; see if a 2D array works OK or if we'll have to use 1D arrays instead 
+  tree->Branch( "TempCoeff", &tempCoeff, Form("TempCoeff[%d][%d]/F", AliEMCALGeoParams::fgkEMCALCols, AliEMCALGeoParams::fgkEMCALRows) );
+  tree->Branch( "Src", &iSrc, Form("Src[%d][%d]/I", AliEMCALGeoParams::fgkEMCALCols, AliEMCALGeoParams::fgkEMCALRows) );
+
+  for (iSM = 0; iSM < fNSuperModule; iSM++) {
+    AliEMCALSuperModuleCalibTempCoeff * t = (AliEMCALSuperModuleCalibTempCoeff*) fSuperModuleData[iSM];
+
+    iSM = t->GetSuperModuleNum();
+
+    // info for each tower
+    for (Int_t j=0; j<nAPDPerSM; j++) {
+      iCol = j / AliEMCALGeoParams::fgkEMCALRows;
+      iRow = j % AliEMCALGeoParams::fgkEMCALRows;
+
+      // help variables: possibly modified or swapped indices
+      int iColMod = iCol;
+      int iRowMod = iRow;
+      // assume that this info is already swapped and done for this basis?
+      if (swapSides) {
+       // C side, oriented differently than A side: swap is requested
+       iColMod = AliEMCALGeoParams::fgkEMCALCols-1 - iCol;
+       iRowMod = AliEMCALGeoParams::fgkEMCALRows-1 - iRow;
+      }
+
+      tempCoeff[iColMod][iRowMod] = t->GetTC(iCol, iRow);
+      iSrc[iColMod][iRowMod] = t->GetSrc(iCol, iRow);
+    }
+
+    tree->Fill();
+  } // i, SuperModule
+
+  tree->Write();
+  destFile.Close();
+
+  return;
+}
+
+//____________________________________________________________________________
+AliEMCALCalibTempCoeff::~AliEMCALCalibTempCoeff()
+{
+  fSuperModuleData.Delete();
+}
+
+//____________________________________________________________________________
+AliEMCALSuperModuleCalibTempCoeff * AliEMCALCalibTempCoeff::GetSuperModuleCalibTempCoeffNum(Int_t supModIndex)const
+{
+  for (int i=0; i<fNSuperModule; i++) {
+    AliEMCALSuperModuleCalibTempCoeff * t = (AliEMCALSuperModuleCalibTempCoeff*) fSuperModuleData[i];
+    if (t->GetSuperModuleNum() == supModIndex) {
+      return t;
+    }
+  }
+
+  // if we arrived here, then nothing was found.. just return a NULL pointer 
+  return NULL;
+}
+
diff --git a/EMCAL/AliEMCALCalibTempCoeff.h b/EMCAL/AliEMCALCalibTempCoeff.h
new file mode 100644 (file)
index 0000000..10d73d0
--- /dev/null
@@ -0,0 +1,102 @@
+#ifndef ALIEMCALCALIBTEMPCOEFF_H
+#define ALIEMCALCALIBTEMPCOEFF_H
+
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+/* $Id: $ */
+
+#include <TObject.h>
+#include <TObjArray.h>
+#include "AliEMCALGeoParams.h"
+class TString;
+class TTree;
+
+/*
+  Objects of this class contain temperature-dependence coefficients
+*/
+
+// total calibration factor is a product of
+// a) overall calibration factor [fAbsoluteCalib]
+// b) individual gain factor per tower [fRelativeCalib]
+// c) time-dependent correction
+// In this class we store factors needed for c)
+
+// ******* internal class definition *************
+
+// 1 SuperModule's worth of info: info on where the different APDs are
+class AliEMCALSuperModuleCalibTempCoeff : public TObject {
+
+ public:
+  AliEMCALSuperModuleCalibTempCoeff(const int smNum=0) : TObject(), // just init values
+    fSuperModuleNum(smNum)
+    {
+      for (int icol=0; icol<AliEMCALGeoParams::fgkEMCALCols; icol++) {
+       for (int irow=0; irow<AliEMCALGeoParams::fgkEMCALRows; irow++) {
+         fTC[icol][irow] = 1.0;
+         fSrc[icol][irow] = 0;
+       }
+      }
+    }
+
+ public:
+
+  void SetSuperModuleNum(Int_t i) { fSuperModuleNum = i;}; // 
+  Int_t GetSuperModuleNum() const { return fSuperModuleNum;}; // 
+  void SetTC(int icol, int irow, Float_t f) { fTC[icol][irow] = f; }; //
+  Float_t GetTC(int icol, int irow) const { return fTC[icol][irow]; }; //
+  void SetSrc(int icol, int irow, Int_t i) { fSrc[icol][irow] = i; }; //
+  Int_t GetSrc(int icol, int irow) const { return fSrc[icol][irow]; }; //
+
+ private:
+  Int_t fSuperModuleNum; // which SuperModule is this?
+  // individual info for each tower
+  Float_t fTC[AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]; // Temperature Coefficient values (nominally around 2% change per deg C)
+  Int_t fSrc[AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]; // from DarkCurrent, or LED or ..
+
+  ClassDef(AliEMCALSuperModuleCalibTempCoeff, 1) // help class
+};
+// ******* end of internal class definition *************
+
+class AliEMCALCalibTempCoeff : public TObject {
+
+public:
+
+  enum kSrcType {kDarkCurrent=0, kLED=1};// code in possible sources
+
+  AliEMCALCalibTempCoeff(const int nSM = AliEMCALGeoParams::fgkEMCALModules);
+
+  // Read and Write txt I/O methods are normally not used, but are useful for 
+  // filling the object before it is saved in OCDB 
+  void ReadTextCalibTempCoeffInfo(Int_t nSM, const TString &txtFileName, Bool_t swapSides=kFALSE); // info file is for nSm=1 to 12 SuperModules
+  void WriteTextCalibTempCoeffInfo(const TString &txtFileName, Bool_t swapSides=kFALSE); // info file is for nSm=1 to 12 SuperModules
+  void ReadRootCalibTempCoeffInfo(const TString &rootFileName, Bool_t swapSides=kFALSE); // info file is for nSm=1 to 12 SuperModules
+  void ReadTreeCalibTempCoeffInfo(TTree *tree, Bool_t swapSides=kFALSE); // info file is for nSm=1 to 12 SuperModules
+  void WriteRootCalibTempCoeffInfo(const TString &rootFileName, Bool_t swapSides=kFALSE); // info file is for nSm=1 to 12 SuperModules
+
+  virtual ~AliEMCALCalibTempCoeff();
+
+  // pointer to stored info.
+  Int_t GetNSuperModule() const { return fNSuperModule; }; 
+
+  // - via the index in the stored array:
+  virtual AliEMCALSuperModuleCalibTempCoeff * GetSuperModuleCalibTempCoeffId(Int_t smIndex) const
+   { return (AliEMCALSuperModuleCalibTempCoeff*) fSuperModuleData[smIndex]; };
+
+  // - or via the actual SM number
+  virtual AliEMCALSuperModuleCalibTempCoeff * GetSuperModuleCalibTempCoeffNum(Int_t smNum) const;
+
+protected:
+
+  Int_t          fNSuperModule; // Number of supermodules.
+  TObjArray fSuperModuleData; // SuperModule data
+
+private:
+
+  AliEMCALCalibTempCoeff(const AliEMCALCalibTempCoeff &);
+  AliEMCALCalibTempCoeff &operator = (const AliEMCALCalibTempCoeff &);
+
+  ClassDef(AliEMCALCalibTempCoeff, 1) //CalibTempCoeff data info
+};
+
+#endif
index 9f210ea..1e0891a 100644 (file)
@@ -133,8 +133,9 @@ void AliEMCALCalibTimeDepCorrection::ReadTextInfo(Int_t nSM, const TString &txtF
 
       // check that input values are not out bounds
       if (iCol<0 || iCol>(AliEMCALGeoParams::fgkEMCALCols-1) ||
-         iRow<0 || iRow>(AliEMCALGeoParams::fgkEMCALRows-1) ) {
-       printf("AliEMCALCalibTimeDepCorrection::ReadTextInfo - Error while reading input file; j %d iCol %d iRow %d\n", j, iCol, iRow);
+         iRow<0 || iRow>(AliEMCALGeoParams::fgkEMCALRows-1) || 
+         nCorr<0 ) {
+       printf("AliEMCALCalibTimeDepCorrection::ReadTextInfo - Error while reading input file; j %d iCol %d iRow %d nCorr %d\n", j, iCol, iRow, nCorr);
       return;
       }
 
index 6b87210..6085f9c 100644 (file)
@@ -25,7 +25,7 @@
 # SHLIBS - Shared Libraries and objects for linking (Executables only)           #
 #--------------------------------------------------------------------------------#
 
-set ( SRCS  AliEMCALHit.cxx AliEMCALLoader.cxx AliEMCALWsuCosmicRaySetUp.cxx AliEMCALRecPoint.cxx AliEMCALSDigitizer.cxx AliEMCALDigitizer.cxx AliEMCALDigit.cxx AliEMCALCalibData.cxx AliEMCALCalibHistoProducer.cxx AliEMCALCalibTimeDep.cxx AliEMCALCalibTimeDepCorrection.cxx AliEMCALPreprocessor.cxx AliEMCALSensorTemp.cxx AliEMCALSensorTempArray.cxx AliCaloCalibPedestal.cxx AliCaloCalibSignal.cxx AliEMCALSurvey.cxx AliEMCALRecParam.cxx AliEMCALSimParam.cxx AliEMCALQAChecker.cxx AliEMCALSpaceFrame.cxx AliEMCALBiasAPD.cxx AliEMCALCalibAbs.cxx AliEMCALCalibReference.cxx AliEMCALCalibMapAPD.cxx SMcalib/AliEMCALCCUSBRawStream.cxx AliEMCALRawDigit.cxx AliEMCALTrigger.cxx AliEMCALTriggerSTURawStream.cxx AliEMCAL.cxx AliEMCALRawUtils.cxx AliCaloRawAnalyzerFastFit.cxx AliCaloRawAnalyzerPeakFinder.cxx AliEMCALTriggerDCSConfig.cxx AliEMCALTriggerTRUDCSConfig.cxx AliEMCALTriggerSTUDCSConfig.cxx AliEMCALTriggerDCSConfigDB.cxx AliEMCALTriggerRawDigitMaker.cxx AliCaloRawAnalyzerFakeALTRO.cxx AliEMCALTriggerRawDigit.cxx)
+set ( SRCS  AliEMCALHit.cxx AliEMCALLoader.cxx AliEMCALWsuCosmicRaySetUp.cxx AliEMCALRecPoint.cxx AliEMCALSDigitizer.cxx AliEMCALDigitizer.cxx AliEMCALDigit.cxx AliEMCALCalibData.cxx AliEMCALCalibTimeDep.cxx AliEMCALCalibTimeDepCorrection.cxx AliEMCALPreprocessor.cxx AliEMCALSensorTemp.cxx AliEMCALSensorTempArray.cxx AliCaloCalibPedestal.cxx AliCaloCalibSignal.cxx AliEMCALSurvey.cxx AliEMCALRecParam.cxx AliEMCALSimParam.cxx AliEMCALQAChecker.cxx AliEMCALSpaceFrame.cxx AliEMCALBiasAPD.cxx AliEMCALCalibAbs.cxx AliEMCALCalibReference.cxx AliEMCALCalibMapAPD.cxx AliEMCALCalibTempCoeff.cxx SMcalib/AliEMCALCCUSBRawStream.cxx AliEMCALRawDigit.cxx AliEMCALTrigger.cxx AliEMCALTriggerSTURawStream.cxx AliEMCAL.cxx AliEMCALRawUtils.cxx AliCaloRawAnalyzerFastFit.cxx AliCaloRawAnalyzerPeakFinder.cxx AliEMCALTriggerDCSConfig.cxx AliEMCALTriggerTRUDCSConfig.cxx AliEMCALTriggerSTUDCSConfig.cxx AliEMCALTriggerDCSConfigDB.cxx AliEMCALTriggerRawDigitMaker.cxx AliCaloRawAnalyzerFakeALTRO.cxx AliEMCALTriggerRawDigit.cxx)
 
 string (REPLACE ".cxx" ".h" HDRS "${SRCS}")
 
index 23eb469..97412f3 100644 (file)
@@ -12,7 +12,6 @@
 #pragma link C++ class AliEMCALDigitizer+;
 #pragma link C++ class AliEMCALDigit+;
 #pragma link C++ class AliEMCALCalibData+;
-#pragma link C++ class AliEMCALCalibHistoProducer+;
 #pragma link C++ class AliEMCALCalibTimeDep+;
 #pragma link C++ class AliEMCALCalibTimeDepCorrection+;
 #pragma link C++ class AliEMCALPreprocessor+;
@@ -31,6 +30,7 @@
 #pragma link C++ class AliEMCALCalibAbs+;
 #pragma link C++ class AliEMCALCalibReference+;
 #pragma link C++ class AliEMCALCalibMapAPD+;
+#pragma link C++ class AliEMCALCalibTempCoeff+;
 #pragma link C++ class AliEMCALSuperModuleBiasAPD+;
 #pragma link C++ class AliEMCALSuperModuleCalibAbs+;
 #pragma link C++ class AliEMCALCalibReferenceVal+;
index 9ecfad2..a2ddff3 100644 (file)
@@ -9,7 +9,6 @@ AliEMCALSDigitizer.cxx \
 AliEMCALDigitizer.cxx \
 AliEMCALDigit.cxx \
 AliEMCALCalibData.cxx \
-AliEMCALCalibHistoProducer.cxx \
 AliEMCALCalibTimeDep.cxx \
 AliEMCALCalibTimeDepCorrection.cxx \
 AliEMCALPreprocessor.cxx \
@@ -26,6 +25,7 @@ AliEMCALBiasAPD.cxx \
 AliEMCALCalibAbs.cxx \
 AliEMCALCalibReference.cxx \
 AliEMCALCalibMapAPD.cxx \
+AliEMCALCalibTempCoeff.cxx \
 SMcalib/AliEMCALCCUSBRawStream.cxx \
 AliEMCALRawDigit.cxx \
 AliEMCALTrigger.cxx \