Adding stuff to follow gain dependence on rate for LHC13d-e-f periods
authorcoppedis <coppedis@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 10 Feb 2013 10:18:49 +0000 (10:18 +0000)
committercoppedis <coppedis@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 10 Feb 2013 10:18:49 +0000 (10:18 +0000)
OCDB/ZDC/Calib/SaturationCalib/Run0_999999999_v0_s0.root [new file with mode: 0644]
ZDC/AliZDCReconstructor.cxx
ZDC/AliZDCReconstructor.h
ZDC/AliZDCSaturationCalib.cxx [new file with mode: 0644]
ZDC/AliZDCSaturationCalib.h [new file with mode: 0644]
ZDC/CMakelibZDCbase.pkg
ZDC/ZDCbaseLinkDef.h

diff --git a/OCDB/ZDC/Calib/SaturationCalib/Run0_999999999_v0_s0.root b/OCDB/ZDC/Calib/SaturationCalib/Run0_999999999_v0_s0.root
new file mode 100644 (file)
index 0000000..eb4d89e
Binary files /dev/null and b/OCDB/ZDC/Calib/SaturationCalib/Run0_999999999_v0_s0.root differ
index 81c5f2f..f5db66a 100644 (file)
@@ -41,6 +41,7 @@
 #include "AliZDCReconstructor.h"
 #include "AliZDCPedestals.h"
 #include "AliZDCEnCalib.h"
+#include "AliZDCSaturationCalib.h"
 #include "AliZDCTowerCalib.h"
 #include "AliZDCMBCalib.h"
 #include "AliZDCTDCCalib.h"
@@ -59,6 +60,7 @@ AliZDCMBCalib *AliZDCReconstructor::fgMBCalibData=0;  //calibration parameters f
 AliZDCReconstructor:: AliZDCReconstructor() :
   fPedData(GetPedestalData()),
   fEnCalibData(GetEnergyCalibData()),
+  fSatCalibData(GetSaturationCalibData()),
   fTowCalibData(GetTowerCalibData()),
   fTDCCalibData(GetTDCCalibData()),
   fRecoMode(0),
@@ -81,6 +83,7 @@ AliZDCReconstructor::~AliZDCReconstructor()
 //   if(fgRecoParam)    delete fgRecoParam;
    if(fPedData)      delete fPedData;    
    if(fEnCalibData)  delete fEnCalibData;
+   if(fSatCalibData)  delete fSatCalibData;
    if(fTowCalibData) delete fTowCalibData;
    if(fgMBCalibData) delete fgMBCalibData;
    if(fESDZDC)       delete fESDZDC;
@@ -734,10 +737,14 @@ void AliZDCReconstructor::ReconstructEventpp(TTree *clustersTree,
      equalCoeffZP2[ji] = fTowCalibData->GetZP2EqualCoeff(ji); 
   }
   // --- Energy calibration factors ------------------------------------
-  Float_t calibEne[6];
+  Float_t calibEne[6], calibSatZNA[4], calibSatZNC[4];
   // **** Energy calibration coefficient set to 1 
   // **** (no trivial way to calibrate in p-p runs)
   for(Int_t ij=0; ij<6; ij++) calibEne[ij] = fEnCalibData->GetEnCalib(ij);
+  for(Int_t ij=0; ij<4; ij++){
+    calibSatZNA[ij] = fSatCalibData->GetZNASatCalib(ij);
+    calibSatZNC[ij] = fSatCalibData->GetZNCSatCalib(ij);
+  }
   
   // ******    Equalization of detector responses
   Float_t equalTowZN1[10], equalTowZN2[10], equalTowZP1[10], equalTowZP2[10];
@@ -756,7 +763,7 @@ void AliZDCReconstructor::ReconstructEventpp(TTree *clustersTree,
      }
   }
   // Ch. debug
-  /*printf("\n ------------- EQUALIZATION -------------\n");
+  printf("\n ------------- EQUALIZATION -------------\n");
   printf(" ADCZN1 [%1.2f %1.2f %1.2f %1.2f %1.2f]\n",
        equalTowZN1[0],equalTowZN1[1],equalTowZN1[2],equalTowZN1[3],equalTowZN1[4]);
   printf(" ADCZP1 [%1.2f %1.2f %1.2f %1.2f %1.2f]\n",
@@ -765,7 +772,25 @@ void AliZDCReconstructor::ReconstructEventpp(TTree *clustersTree,
        equalTowZN2[0],equalTowZN2[1],equalTowZN2[2],equalTowZN2[3],equalTowZN2[4]);
   printf(" ADCZP2 [%1.2f %1.2f %1.2f %1.2f %1.2f]\n",
        equalTowZP2[0],equalTowZP2[1],equalTowZP2[2],equalTowZP2[3],equalTowZP2[4]);
-  printf(" ----------------------------------------\n");*/
+  printf(" ----------------------------------------\n");
+  
+  //  *** p-A RUN 2013 -> new calibration object
+  //      to take into account saturation in ZN PMC
+  //   -> 5th order pol. fun. to be applied BEFORE en. calibration 
+  equalTowZN1[0] = equalTowZN1[0] + calibSatZNC[0]*equalTowZN1[0]*equalTowZN1[0] +
+       calibSatZNC[1]*equalTowZN1[0]*equalTowZN1[0]*equalTowZN1[0] +
+       calibSatZNC[2]*equalTowZN1[0]*equalTowZN1[0]*equalTowZN1[0]*equalTowZN1[0] +
+       calibSatZNC[3]*equalTowZN1[0]*equalTowZN1[0]*equalTowZN1[0]*equalTowZN1[0]*equalTowZN1[0];
+  equalTowZN2[0] = equalTowZN2[0] + calibSatZNA[0]*equalTowZN2[0]*equalTowZN2[0] +
+       calibSatZNA[1]*equalTowZN2[0]*equalTowZN2[0]*equalTowZN2[0] +
+       calibSatZNA[2]*equalTowZN2[0]*equalTowZN2[0]*equalTowZN2[0]*equalTowZN2[0] +
+       calibSatZNA[3]*equalTowZN2[0]*equalTowZN2[0]*equalTowZN2[0]*equalTowZN2[0]*equalTowZN2[0];
+
+ // Ch. debug
+  printf("\n ------------- SATURATION CORRECTION -------------\n");
+  printf(" ZNC PMC %1.2f\n", equalTowZN1[0]);
+  printf(" ZNA PMC %1.2f\n", equalTowZN2[0]);
+  printf(" ----------------------------------------\n");
   
   // ******    Summed response for hadronic calorimeter (SUMMED and then CALIBRATED!)
   Float_t calibSumZN1[]={0,0}, calibSumZN2[]={0,0}, calibSumZP1[]={0,0}, calibSumZP2[]={0,0};
@@ -930,10 +955,14 @@ void AliZDCReconstructor::ReconstructEventPbPb(TTree *clustersTree,
      equalCoeffZP2[ji] = fTowCalibData->GetZP2EqualCoeff(ji); 
   }
   // --- Energy calibration factors ------------------------------------
-  Float_t calibEne[6];
-  // The energy calibration object already takes into account of E_beam 
-  // -> the value from the OCDB can be directly used (Jul 2010)
+  Float_t calibEne[6], calibSatZNA[4], calibSatZNC[4];
+  // **** Energy calibration coefficient set to 1 
+  // **** (no trivial way to calibrate in p-p runs)
   for(Int_t ij=0; ij<6; ij++) calibEne[ij] = fEnCalibData->GetEnCalib(ij);
+  for(Int_t ij=0; ij<4; ij++){
+    calibSatZNA[ij] = fSatCalibData->GetZNASatCalib(ij);
+    calibSatZNC[ij] = fSatCalibData->GetZNCSatCalib(ij);
+  }
   
   // ******    Equalization of detector responses
   Float_t equalTowZN1[10], equalTowZN2[10], equalTowZP1[10], equalTowZP2[10];
@@ -965,6 +994,18 @@ void AliZDCReconstructor::ReconstructEventPbPb(TTree *clustersTree,
   printf(" ----------------------------------------\n");
 */
   
+  //  *** p-A RUN 2013 -> new calibration object
+  //      to take into account saturation in ZN PMC
+  //   -> 5th order pol. fun. to be applied BEFORE en. calibration 
+  equalTowZN1[0] = equalTowZN1[0] + calibSatZNC[0]*equalTowZN1[0]*equalTowZN1[0] +
+       calibSatZNC[1]*equalTowZN1[0]*equalTowZN1[0]*equalTowZN1[0] +
+       calibSatZNC[2]*equalTowZN1[0]*equalTowZN1[0]*equalTowZN1[0]*equalTowZN1[0] +
+       calibSatZNC[3]*equalTowZN1[0]*equalTowZN1[0]*equalTowZN1[0]*equalTowZN1[0]*equalTowZN1[0];
+  equalTowZN2[0] = equalTowZN2[0] + calibSatZNA[0]*equalTowZN2[0]*equalTowZN2[0] +
+       calibSatZNA[1]*equalTowZN2[0]*equalTowZN2[0]*equalTowZN2[0] +
+       calibSatZNA[2]*equalTowZN2[0]*equalTowZN2[0]*equalTowZN2[0]*equalTowZN2[0] +
+       calibSatZNA[3]*equalTowZN2[0]*equalTowZN2[0]*equalTowZN2[0]*equalTowZN2[0]*equalTowZN2[0];
+  
   // ******    Summed response for hadronic calorimeter (SUMMED and then CALIBRATED!)
   Float_t calibSumZN1[]={0,0}, calibSumZN2[]={0,0}, calibSumZP1[]={0,0}, calibSumZP2[]={0,0};
   for(Int_t gi=0; gi<5; gi++){
@@ -993,9 +1034,9 @@ void AliZDCReconstructor::ReconstructEventPbPb(TTree *clustersTree,
   calibSumZP2[1] = calibSumZP2[1]*calibEne[3];
   //
   Float_t sumZEM[]={0,0}, calibZEM1[]={0,0}, calibZEM2[]={0,0};
-  calibZEM1[0] = corrADCZEM1[0]*calibEne[4]*8.;
+  calibZEM1[0] = corrADCZEM1[0]*calibEne[4];
   calibZEM1[1] = corrADCZEM1[1]*calibEne[4];
-  calibZEM2[0] = corrADCZEM2[0]*calibEne[5]*8.;
+  calibZEM2[0] = corrADCZEM2[0]*calibEne[5];
   calibZEM2[1] = corrADCZEM2[1]*calibEne[5];
   for(Int_t k=0; k<2; k++) sumZEM[k] = calibZEM1[k] + calibZEM2[k];
     
@@ -1442,6 +1483,22 @@ AliZDCEnCalib* AliZDCReconstructor::GetEnergyCalibData() const
 }
 
 //_____________________________________________________________________________
+AliZDCSaturationCalib* AliZDCReconstructor::GetSaturationCalibData() const
+{
+
+  // Getting energy and equalization calibration object for ZDC set
+
+  AliCDBEntry  *entry = AliCDBManager::Instance()->Get("ZDC/Calib/SaturationCalib");
+  if(!entry) AliFatal("No calibration data loaded!");  
+  entry->SetOwner(kFALSE);
+
+  AliZDCSaturationCalib *calibdata = dynamic_cast<AliZDCSaturationCalib*> (entry->GetObject());
+  if(!calibdata)  AliFatal("Wrong calibration object in calibration  file!");
+
+  return calibdata;
+}
+
+//_____________________________________________________________________________
 AliZDCTowerCalib* AliZDCReconstructor::GetTowerCalibData() const
 {
 
index 1957f26..7c1aaee 100644 (file)
@@ -19,6 +19,7 @@ class AliCDBManager;
 class AliCDBStorage;
 class AliZDCPedestals;
 class AliZDCEnCalib;
+class AliZDCSaturationCalib;
 class AliZDCTowerCalib;
 class AliZDCMBCalib;
 class AliZDCTDCCalib;
@@ -70,6 +71,7 @@ public:
   AliCDBStorage       *SetStorage(const char* uri);
   AliZDCPedestals     *GetPedestalData() const; 
   AliZDCEnCalib       *GetEnergyCalibData() const; 
+  AliZDCSaturationCalib *GetSaturationCalibData() const; 
   AliZDCTowerCalib    *GetTowerCalibData() const; 
   AliZDCMBCalib       *GetMBCalibData() const; 
   AliZDCTDCCalib      *GetTDCCalibData() const; 
@@ -98,6 +100,7 @@ private:
   static AliZDCMBCalib   *fgMBCalibData;   //! mb calibration data
   AliZDCPedestals  *fPedData;            //! pedestal calibration data
   AliZDCEnCalib    *fEnCalibData;        //! energy calibration data
+  AliZDCSaturationCalib  *fSatCalibData;         //! energy calibration data
   AliZDCTowerCalib *fTowCalibData;       //! equalization calibration data
   AliZDCTDCCalib   *fTDCCalibData;       //! TDC offset data
   
@@ -111,7 +114,7 @@ private:
   
   AliESDZDC* fESDZDC;       // ESD output object  
 
-  ClassDef(AliZDCReconstructor, 13)   // class for the ZDC reconstruction
+  ClassDef(AliZDCReconstructor, 14)   // class for the ZDC reconstruction
 };
 
 #endif
diff --git a/ZDC/AliZDCSaturationCalib.cxx b/ZDC/AliZDCSaturationCalib.cxx
new file mode 100644 (file)
index 0000000..8946f19
--- /dev/null
@@ -0,0 +1,119 @@
+/**************************************************************************
+ * 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.                  *
+ **************************************************************************/
+
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+//             class for ZDC  calibration                                   //
+//             -> values for calibration                                    //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+
+#include "AliZDCSaturationCalib.h"
+
+ClassImp(AliZDCSaturationCalib)
+
+//________________________________________________________________
+AliZDCSaturationCalib::AliZDCSaturationCalib():
+TNamed()
+{
+  Reset();
+  for(Int_t i=0; i<4; i++){
+     fZNASatCalibration[i] = 0.;
+     fZNCSatCalibration[i] = 0.;
+  }
+}
+
+//________________________________________________________________
+AliZDCSaturationCalib::AliZDCSaturationCalib(const char* name):
+TNamed()
+{
+  // Constructor
+  TString namst = "Calib_";
+  namst += name;
+  SetName(namst.Data());
+  SetTitle(namst.Data());
+  Reset();
+  for(Int_t i=0; i<4; i++){
+     fZNASatCalibration[i] = 0.;
+     fZNCSatCalibration[i] = 0.;
+  }
+}
+
+//________________________________________________________________
+AliZDCSaturationCalib::AliZDCSaturationCalib(const AliZDCSaturationCalib& calibda) :
+  TNamed(calibda)
+{
+  // Copy constructor
+  SetName(calibda.GetName());
+  SetTitle(calibda.GetName());
+  Reset();
+  for(int i=0; i<4; i++){
+    fZNASatCalibration[i] = calibda.GetZNASatCalib(i);
+    fZNCSatCalibration[i] = calibda.GetZNCSatCalib(i);
+  }
+}
+
+//________________________________________________________________
+AliZDCSaturationCalib &AliZDCSaturationCalib::operator =(const AliZDCSaturationCalib& calibda)
+{
+// assignment operator
+  SetName(calibda.GetName());
+  SetTitle(calibda.GetName());
+  Reset();
+  for(int i=0; i<4; i++){
+     fZNASatCalibration[i] = calibda.GetZNASatCalib(i);
+     fZNCSatCalibration[i] = calibda.GetZNCSatCalib(i);
+  }
+  
+  return *this;
+}
+
+//________________________________________________________________
+AliZDCSaturationCalib::~AliZDCSaturationCalib()
+{
+}
+
+//________________________________________________________________
+void AliZDCSaturationCalib::Reset()
+{
+  // Reset
+}                                                                                       
+
+
+//________________________________________________________________
+void  AliZDCSaturationCalib::Print(Option_t *) const
+{
+   // Printing of calibration object
+   printf("\n\n ####### Parameters for ZN knee saturation coeffieicients #######       \n");
+   printf("  ZNA => %e %e %e %e \n",fZNASatCalibration[0],fZNASatCalibration[1],fZNASatCalibration[2],fZNASatCalibration[3]);
+   printf("  ZNC => %e %e %e %e \n",fZNCSatCalibration[0],fZNCSatCalibration[1],fZNCSatCalibration[2],fZNCSatCalibration[3]);
+
+} 
+
+//________________________________________________________________
+void AliZDCSaturationCalib::SetZNASatCalib(Float_t* satCalib) 
+{
+  // Set energy calibration coefficients
+  if(satCalib) for(int t=0; t<4; t++) fZNASatCalibration[t] = satCalib[t];
+  else for(int t=0; t<4; t++) fZNASatCalibration[t] = 0.;
+}
+
+//________________________________________________________________
+void AliZDCSaturationCalib::SetZNCSatCalib(Float_t* satCalib) 
+{
+  // Set energy calibration coefficients
+  if(satCalib) for(int t=0; t<4; t++) fZNCSatCalibration[t] = satCalib[t];
+  else for(int t=0; t<4; t++) fZNCSatCalibration[t] = 0.;
+}
diff --git a/ZDC/AliZDCSaturationCalib.h b/ZDC/AliZDCSaturationCalib.h
new file mode 100644 (file)
index 0000000..1a8b21b
--- /dev/null
@@ -0,0 +1,43 @@
+#ifndef ALIZDCSATURATIONCALIB_H
+#define ALIZDCSATURATIONCALIB_H
+
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+//////////////////////////////////////////////////////////
+//  class for ZDC calibration -> p-A high rate run      //
+//////////////////////////////////////////////////////////
+
+#include "TNamed.h"
+#include "AliCDBEntry.h"
+
+class AliZDC;
+
+class AliZDCSaturationCalib: public TNamed {
+
+ public:
+  AliZDCSaturationCalib();
+  AliZDCSaturationCalib(const char* name);
+  AliZDCSaturationCalib(const AliZDCSaturationCalib &calibda);
+  AliZDCSaturationCalib& operator= (const AliZDCSaturationCalib &calibda);
+  virtual ~AliZDCSaturationCalib();
+  void Reset();
+  virtual void  Print(Option_t *) const; 
+  //
+  Float_t* GetZNASatCalib()            const {return (float*)fZNASatCalibration;}
+  Float_t GetZNASatCalib(int i)        const {return fZNASatCalibration[i];}
+  void         SetZNASatCalib(Float_t* EnCalib);
+  
+  Float_t* GetZNCSatCalib()            const {return (float*)fZNCSatCalibration;}
+  Float_t GetZNCSatCalib(int i)        const {return fZNCSatCalibration[i];}
+  void         SetZNCSatCalib(Float_t* EnCalib);
+  
+ protected:
+  // 
+  Float_t  fZNASatCalibration[4];       // Coeff. for ZNA calibration
+  Float_t  fZNCSatCalibration[4];       // Coeff. for ZNC calibration
+  //
+  ClassDef(AliZDCSaturationCalib,1)    // ZDC calibration calibration data
+};
+
+#endif
index 430ad47..640051c 100644 (file)
@@ -34,6 +34,7 @@ set ( SRCS
     AliZDCPedestals.cxx 
     AliZDCLaserCalib.cxx 
     AliZDCEnCalib.cxx 
+    AliZDCSaturationCalib.cxx 
     AliZDCTowerCalib.cxx 
     AliZDCMBCalib.cxx 
     AliZDCChMap.cxx 
index efbc552..325cb3c 100644 (file)
@@ -14,6 +14,7 @@
 #pragma link C++ class  AliZDCPedestals+;
 #pragma link C++ class  AliZDCLaserCalib+;
 #pragma link C++ class  AliZDCEnCalib+;
+#pragma link C++ class  AliZDCSaturationCalib+;
 #pragma link C++ class  AliZDCTowerCalib+;
 #pragma link C++ class  AliZDCMBCalib+;
 #pragma link C++ class  AliZDCMisAligner+;