Renamed AliFMDCorrDeadChannels to AliFMDCorrAcceptance
authorcholm <cholm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 19 Jan 2011 10:39:38 +0000 (10:39 +0000)
committercholm <cholm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 19 Jan 2011 10:39:38 +0000 (10:39 +0000)
PWG2/FORWARD/analysis2/AliFMDCorrAcceptance.cxx [moved from PWG2/FORWARD/analysis2/AliFMDCorrDeadChannels.cxx with 81% similarity]
PWG2/FORWARD/analysis2/AliFMDCorrAcceptance.h [moved from PWG2/FORWARD/analysis2/AliFMDCorrDeadChannels.h with 78% similarity]
PWG2/FORWARD/analysis2/scripts/MakeAcceptanceCorrection.C [new file with mode: 0644]
PWG2/FORWARD/analysis2/scripts/MakeDeadChannelCorrection.C [deleted file]

@@ -1,15 +1,15 @@
 //
-// This class contains the dead channels correction 
+// This class contains the acceptance correction due to dead channels 
 // 
 //
-#include "AliFMDCorrDeadChannels.h"
+#include "AliFMDCorrAcceptance.h"
 #include <TBrowser.h>
 #include <TH2D.h>
 #include <AliLog.h>
 #include <iostream>
 
 //____________________________________________________________________
-AliFMDCorrDeadChannels::AliFMDCorrDeadChannels()
+AliFMDCorrAcceptance::AliFMDCorrAcceptance()
   : fRingArray(), 
     fVertexAxis(0,0,0)
 {
@@ -23,8 +23,8 @@ AliFMDCorrDeadChannels::AliFMDCorrDeadChannels()
   
 }
 //____________________________________________________________________
-AliFMDCorrDeadChannels::AliFMDCorrDeadChannels(const 
-                                              AliFMDCorrDeadChannels& o)
+AliFMDCorrAcceptance::AliFMDCorrAcceptance(const 
+                                              AliFMDCorrAcceptance& o)
   : TObject(o), 
     fRingArray(o.fRingArray), 
     fVertexAxis(o.fVertexAxis.GetNbins(), o.fVertexAxis.GetXmin(), 
@@ -40,7 +40,7 @@ AliFMDCorrDeadChannels::AliFMDCorrDeadChannels(const
   fVertexAxis.SetTitle("v_{z} [cm]");
 }
 //____________________________________________________________________
-AliFMDCorrDeadChannels::~AliFMDCorrDeadChannels()
+AliFMDCorrAcceptance::~AliFMDCorrAcceptance()
 {
   //
   // Destructor 
@@ -49,8 +49,8 @@ AliFMDCorrDeadChannels::~AliFMDCorrDeadChannels()
   fRingArray.Clear();
 }
 //____________________________________________________________________
-AliFMDCorrDeadChannels&
-AliFMDCorrDeadChannels::operator=(const AliFMDCorrDeadChannels& o)
+AliFMDCorrAcceptance&
+AliFMDCorrAcceptance::operator=(const AliFMDCorrAcceptance& o)
 {
   // 
   // Assignment operator 
@@ -68,10 +68,10 @@ AliFMDCorrDeadChannels::operator=(const AliFMDCorrDeadChannels& o)
 }
 //____________________________________________________________________
 TH2D*
-AliFMDCorrDeadChannels::GetCorrection(UShort_t d, Char_t r, Double_t v) const
+AliFMDCorrAcceptance::GetCorrection(UShort_t d, Char_t r, Double_t v) const
 {
   // 
-  // Get the dead channels correction @f$ c_{r,v}@f$ 
+  // Get the acceptance correction @f$ a_{r,v}@f$ 
   // 
   // Parameters:
   //    d  Detector number (1-3)
@@ -79,7 +79,7 @@ AliFMDCorrDeadChannels::GetCorrection(UShort_t d, Char_t r, Double_t v) const
   //    v  Primary interaction point @f$z@f$ coordinate
   // 
   // Return:
-  //    The correction @f$ c_{r,v}@f$ 
+  //    The correction @f$ a_{r,v}@f$ 
   //
   Int_t b = FindVertexBin(v);
   if (b <= 0) return 0;
@@ -87,10 +87,10 @@ AliFMDCorrDeadChannels::GetCorrection(UShort_t d, Char_t r, Double_t v) const
 }
 //____________________________________________________________________
 TH2D*
-AliFMDCorrDeadChannels::GetCorrection(UShort_t d, Char_t r, UShort_t b) const
+AliFMDCorrAcceptance::GetCorrection(UShort_t d, Char_t r, UShort_t b) const
 {
   // 
-  // Get the dead channels correction @f$ c_{r,v}@f$ 
+  // Get the acceptance correction @f$ a_{r,v}@f$ 
   // 
   // Parameters:
   //    d  Detector number (1-3)
@@ -99,7 +99,7 @@ AliFMDCorrDeadChannels::GetCorrection(UShort_t d, Char_t r, UShort_t b) const
   //           @f$z@f$ coordinate (1 based)
   // 
   // Return:
-  //    The correction @f$ c_{r,v}@f$ 
+  //    The correction @f$ a_{r,v}@f$ 
   //
   TObjArray* ringArray = GetRingArray(d, r);
   if (!ringArray) return 0;
@@ -121,7 +121,7 @@ AliFMDCorrDeadChannels::GetCorrection(UShort_t d, Char_t r, UShort_t b) const
   
 //____________________________________________________________________
 Int_t
-AliFMDCorrDeadChannels::FindVertexBin(Double_t v) const
+AliFMDCorrAcceptance::FindVertexBin(Double_t v) const
 {
   // 
   // Find the vertex bin that corresponds to the passed vertex 
@@ -147,7 +147,7 @@ AliFMDCorrDeadChannels::FindVertexBin(Double_t v) const
 }
 //____________________________________________________________________
 Int_t
-AliFMDCorrDeadChannels::GetRingIndex(UShort_t d, Char_t r) const
+AliFMDCorrAcceptance::GetRingIndex(UShort_t d, Char_t r) const
 {
   // 
   // Get the index corresponding to the given ring 
@@ -169,7 +169,7 @@ AliFMDCorrDeadChannels::GetRingIndex(UShort_t d, Char_t r) const
 }
 //____________________________________________________________________
 TObjArray*
-AliFMDCorrDeadChannels::GetRingArray(UShort_t d, Char_t r) const
+AliFMDCorrAcceptance::GetRingArray(UShort_t d, Char_t r) const
 {
   // 
   // Get the ring array corresponding to the specified ring
@@ -194,7 +194,7 @@ AliFMDCorrDeadChannels::GetRingArray(UShort_t d, Char_t r) const
 }
 //____________________________________________________________________
 TObjArray*
-AliFMDCorrDeadChannels::GetOrMakeRingArray(UShort_t d, Char_t r)
+AliFMDCorrAcceptance::GetOrMakeRingArray(UShort_t d, Char_t r)
 {
   // 
   // Get the ring array corresponding to the specified ring
@@ -223,11 +223,11 @@ AliFMDCorrDeadChannels::GetOrMakeRingArray(UShort_t d, Char_t r)
 
 //____________________________________________________________________
 Bool_t
-AliFMDCorrDeadChannels::SetCorrection(UShort_t d, Char_t r, 
-                                          UShort_t b, TH2D*  h) 
+AliFMDCorrAcceptance::SetCorrection(UShort_t d, Char_t r, 
+                                   UShort_t b, TH2D*  h) 
 {
   // 
-  // Set the dead channels map correction @f$ m_{r,v}(\eta)@f$ 
+  // Set the acceptance correction @f$ a_{r,v}(\eta)@f$ 
   // Note, that the object takes ownership of the passed pointer.
   // 
   // Parameters:
@@ -235,7 +235,7 @@ AliFMDCorrDeadChannels::SetCorrection(UShort_t d, Char_t r,
   //    r    Ring identifier (I or O)
   //    b    Bin corresponding to the primary interaction point 
   //             @f$z@f$ coordinate  (1 based)
-  //    h    @f$ m_{r,v}(\eta)@f$ 
+  //    h    @f$ a_{r,v}(\eta)@f$ 
   // 
   // Return:
   //    true if operation succeeded 
@@ -249,7 +249,7 @@ AliFMDCorrDeadChannels::SetCorrection(UShort_t d, Char_t r,
     return false;
   }
   h->SetName(Form("FMD%d%c_vtxbin%03d", d, r, b));
-  h->SetTitle(Form("Dead Channels correction for FMD%d%c "
+  h->SetTitle(Form("Acceptance correction for FMD%d%c "
                   "in vertex bin %d [%+8.4f,%+8.4f]", 
                   d, r, b, fVertexAxis.GetBinLowEdge(b), 
                   fVertexAxis.GetBinUpEdge(b)));
@@ -263,18 +263,18 @@ AliFMDCorrDeadChannels::SetCorrection(UShort_t d, Char_t r,
 }
 //____________________________________________________________________
 Bool_t
-AliFMDCorrDeadChannels::SetCorrection(UShort_t d, Char_t r, 
-                                          Double_t v, TH2D*  h) 
+AliFMDCorrAcceptance::SetCorrection(UShort_t d, Char_t r, 
+                                   Double_t v, TH2D*  h) 
 {
   // 
-  // Set the dead channels map correction @f$ m_{r,v}(\eta)@f$.
+  // Set the acceptance correction @f$ a_{r,v}(\eta)@f$.
   // Note, that the object takes ownership of the passed pointer.
   // 
   // Parameters:
   //    d    Detector number (1-3)
   //    r    Ring identifier (I or O)
   //    v    Primary interaction point @f$z@f$ coordinate  
-  //    h    @f$ m_{r,v}(\eta)@f$ 
+  //    h    @f$ a_{r,v}(\eta)@f$ 
   // 
   // Return:
   //    true if operation succeeded 
@@ -289,7 +289,7 @@ AliFMDCorrDeadChannels::SetCorrection(UShort_t d, Char_t r,
 }
 //____________________________________________________________________
 void
-AliFMDCorrDeadChannels::Browse(TBrowser* b)
+AliFMDCorrAcceptance::Browse(TBrowser* b)
 {
   // 
   // Browse this object in the browser
@@ -302,7 +302,7 @@ AliFMDCorrDeadChannels::Browse(TBrowser* b)
 }
 //____________________________________________________________________
 void
-AliFMDCorrDeadChannels::Print(Option_t* option) const
+AliFMDCorrAcceptance::Print(Option_t* option) const
 {
   // 
   // Print this object 
@@ -310,7 +310,7 @@ AliFMDCorrDeadChannels::Print(Option_t* option) const
   // Parameters:
   //    option 
   //  
-  std::cout << "Merging efficiency correction" << std::endl;
+  std::cout << "Acceptance correction due to dead channels" << std::endl;
   fRingArray.Print(option);
   fVertexAxis.Print(option);
 }
@@ -1,44 +1,39 @@
 //
-// This class contains the dead channel correction 
+// This class contains the acceptance correction due to dead channels
 //
 //
-#ifndef ALIFMDCORRDEADCHANNELS_H
-#define ALIFMDCORRDEADCHANNELS_H
+#ifndef ALIFMDCORRACCEPTANCE_H
+#define ALIFMDCORRACCEPTANCE_H
 #include <TObject.h>
 #include <TObjArray.h>
 #include <TAxis.h>
 class TH2D;
 
 /**
- * This class contains the merging efficiency correction.
+ * This class contains the acceptance correction due to dead channels
  *
- * The secondary correction is given by 
- * @f[
- *   m_{r,v}(\eta) = 
- * @f]
- *
- * These are generated from Monte-Carlo truth and ESD information. 
+ * These are generated from the on-line dead channel calculations 
  *
  * @ingroup pwg2_forward_corr
  */
-class AliFMDCorrDeadChannels : public TObject 
+class AliFMDCorrAcceptance : public TObject 
 {
 public:
   /** 
    * Default constructor 
    */
-  AliFMDCorrDeadChannels();
+  AliFMDCorrAcceptance();
   /** 
    * Copy constructor 
    * 
    * @param o Object to copy from 
    */
-  AliFMDCorrDeadChannels(const AliFMDCorrDeadChannels& o);
+  AliFMDCorrAcceptance(const AliFMDCorrAcceptance& o);
   /**
    * Destructor 
    * 
    */
-  virtual ~AliFMDCorrDeadChannels();
+  virtual ~AliFMDCorrAcceptance();
   /** 
    * @{ 
    * @name Get corrections and parameters 
@@ -50,26 +45,26 @@ public:
    * 
    * @return Reference to this object 
    */
-  AliFMDCorrDeadChannels& operator=(const AliFMDCorrDeadChannels& o);
+  AliFMDCorrAcceptance& operator=(const AliFMDCorrAcceptance& o);
   /** 
-   * Get the secondary correction @f$ c_{r,v}@f$ 
+   * Get the acceptance correction @f$ a_{r,v}@f$ 
    *
    * @param d  Detector number (1-3)
    * @param r  Ring identifier (I or O)
    * @param v  Primary interaction point @f$z@f$ coordinate
    * 
-   * @return The correction @f$ c_{r,v}@f$ 
+   * @return The correction @f$ a_{r,v}@f$ 
    */
   TH2D* GetCorrection(UShort_t d, Char_t r, Double_t v) const;
   /** 
-   * Get the secondary correction @f$ c_{r,v}@f$ 
+   * Get the acceptance correction @f$ a_{r,v}@f$ 
    *
    * @param d  Detector number (1-3)
    * @param r  Ring identifier (I or O)
    * @param b  Bin corresponding to the primary interaction point 
    *           @f$z@f$ coordinate (1 based)
    * 
-   * @return The correction @f$ c_{r,v}@f$ 
+   * @return The correction @f$ a_{r,v}@f$ 
    */
   TH2D* GetCorrection(UShort_t d, Char_t r, UShort_t b) const;
   /** 
@@ -85,26 +80,26 @@ public:
    * @name Set corrections and parameters 
    */
   /** 
-   * Set the secondary map correction @f$ m_{r,v}(\eta)@f$.
+   * Set the acceptance correction @f$ a_{r,v}(\eta)@f$.
    * Note, that the object takes ownership of the passed pointer.
    * 
    * @param d    Detector number (1-3)
    * @param r    Ring identifier (I or O)
    * @param v    Primary interaction point @f$z@f$ coordinate  
-   * @param h    @f$ m_{r,v}(\eta)@f$ 
+   * @param h    @f$ a_{r,v}(\eta)@f$ 
    * 
    * @return true if operation succeeded 
    */
   Bool_t SetCorrection(UShort_t d, Char_t r, Double_t v, TH2D* h);
   /** 
-   * Set the secondary map correction @f$ m_{r,v}(\eta)@f$ 
+   * Set the acceptance correction @f$ a_{r,v}(\eta)@f$ 
    * Note, that the object takes ownership of the passed pointer.
    * 
    * @param d    Detector number (1-3)
    * @param r    Ring identifier (I or O)
    * @param b    Bin corresponding to the primary interaction point 
    *             @f$z@f$ coordinate  (1 based)
-   * @param h    @f$ m_{r,v}(\eta)@f$ 
+   * @param h    @f$ a_{r,v}(\eta)@f$ 
    * 
    * @return true if operation succeeded 
    */
@@ -188,19 +183,19 @@ protected:
 
   TObjArray fRingArray;      // Array of per-ring, per-vertex 2nd map
   TAxis     fVertexAxis;     // The vertex axis 
-  ClassDef(AliFMDCorrDeadChannels,1); // 
+  ClassDef(AliFMDCorrAcceptance,1); // Acceptance correction due to dead areas
 };
 
 //____________________________________________________________________
 inline void 
-AliFMDCorrDeadChannels::SetVertexAxis(Int_t nBins, Double_t min, 
+AliFMDCorrAcceptance::SetVertexAxis(Int_t nBins, Double_t min, 
                                           Double_t max)
 {
   fVertexAxis.Set(nBins, min, max);
 }
 //____________________________________________________________________
 inline void 
-AliFMDCorrDeadChannels::SetVertexAxis(const TAxis& e)
+AliFMDCorrAcceptance::SetVertexAxis(const TAxis& e)
 {
   fVertexAxis.Set(e.GetNbins(), e.GetXmin(), e.GetXmax());
 }
diff --git a/PWG2/FORWARD/analysis2/scripts/MakeAcceptanceCorrection.C b/PWG2/FORWARD/analysis2/scripts/MakeAcceptanceCorrection.C
new file mode 100644 (file)
index 0000000..6d3ad45
--- /dev/null
@@ -0,0 +1,111 @@
+//_____________________________________________________________________
+TH2* MakeOneRing(UShort_t d, Char_t r, Float_t vz, Int_t& nDead)
+{
+  AliFMDGeometry*   geom = AliFMDGeometry::Instance();
+  AliFMDParameters* pars = AliFMDParameters::Instance();
+
+  UShort_t nS = (r == 'I' || r == 'i' ?  20 :  40);
+  UShort_t nT = (r == 'I' || r == 'i' ? 512 : 256);
+  
+  // Make our two histograms 
+  TH2* hAll = new TH2D("all","All",200,-4,6,nS,0,2*TMath::Pi());
+  hAll->SetXTitle("#eta");
+  hAll->SetYTitle("#phi");
+  hAll->Sumw2();
+  hAll->SetDirectory(0);
+  TH2* hOK  = static_cast<TH2*>(hAll->Clone());
+  hOK->SetDirectory(0);
+  
+  // Loop over all sectors and strips in this ring 
+  for (UShort_t s = 0; s < nS; s++) { 
+    for (UShort_t t = 0; t < nT; t++) { 
+      // Get eta,phi by quering the geometry (first for (x,y,z), then
+      // correcting for the vertex position, and then calculating 
+      // (eta, phi))
+      Double_t x, y, z;
+      geom->Detector2XYZ(d, r, s, t, x, y, z);
+      z -= vz;
+      Double_t q, eta, phi, theta;
+      AliFMDGeometry::XYZ2REtaPhiTheta(x, y, z, q, eta, phi, theta);
+
+      // Check if this is a dead channel or not 
+      Bool_t isDead = pars->IsDead(d, r, s, t);
+      hAll->Fill(eta, phi);
+      if (!isDead) hOK->Fill(eta, phi);
+      else         nDead++;
+    }
+  }
+  // Divide out the efficiency. 
+  hOK->Divide(hOK,hAll,1,1,"B");
+
+  // Clean up
+  delete hAll;
+
+  // Return result 
+  return hOK;
+}
+
+//_____________________________________________________________________
+void MakeAcceptanceCorrection(Int_t   runNo, 
+                             Int_t   nVtxBins=10, 
+                             Float_t vtxLow=-10, 
+                             Float_t vtxHigh=10){
+  
+  gSystem->Load("libANALYSIS");
+  gSystem->Load("libANALYSISalice");
+  gSystem->Load("libPWG2forward2");
+  
+  // Float_t delta = (vtxHigh - vtxLow) / (Float_t)nVtxBins;
+  
+  //TGrid::Connect("alien://",0,0,"t");
+  // --- Initialisations ------------------------------------------
+  //Set up CDB manager
+  AliCDBManager* cdb = AliCDBManager::Instance();
+  //cdb->SetDefaultStorage("alien://Folder=/alice/data/2010/OCDB");
+  cdb->SetDefaultStorage("local:///home/canute/ALICE/AliRoot/OCDB");
+  cdb->SetRun(runNo);
+  
+  // Get an initialize parameters 
+  AliFMDParameters* pars = AliFMDParameters::Instance();
+  pars->Init();
+
+  // Get an initialise geometry 
+  AliFMDGeometry* geom = AliFMDGeometry::Instance();
+  geom->Init();
+  geom->InitTransforms();
+
+  // --- Output object -----------------------------------------------
+  // Make our correction object 
+  AliFMDCorrAcceptance* corr = new AliFMDCorrAcceptance();
+  corr->SetVertexAxis(nVtxBins, vtxLow, vtxHigh);
+
+  // --- Loop over verticies and rings -------------------------------
+  Int_t nDead = 0;
+  Float_t dV = (vtxHigh - vtxLow) / nVtxBins;
+  for (Float_t v = vtxLow+dV/2; v < vtxHigh; v += dV) { 
+    for(UShort_t d = 1; d <= 3;d++) { 
+      UShort_t nR = (d == 1 ? 1 : 2);
+      for (UShort_t q = 0; q < nR; q++) { 
+       Char_t   r  = (q == 0 ? 'I' : 'O');
+
+       // Delegate to other function 
+       TH2* ratio = MakeOneRing(d, r, v, nDead);
+       if (!ratio) continue;
+
+       // Set the correction 
+       corr->SetCorrection(d, r, v, ratio);
+      }
+    }
+  }
+
+  // Write to a file 
+  TFile* out = TFile::Open(Form("acceptance_%d.root", runNo), "RECREATE");
+  corr->Write("acceptance");
+  out->Write();
+  out->Close();
+}
+
+//
+// EOF
+//
+
diff --git a/PWG2/FORWARD/analysis2/scripts/MakeDeadChannelCorrection.C b/PWG2/FORWARD/analysis2/scripts/MakeDeadChannelCorrection.C
deleted file mode 100644 (file)
index d89faaf..0000000
+++ /dev/null
@@ -1,231 +0,0 @@
-//_____________________________________________________________________
-Float_t GetMaxR(Char_t ring) const {
-  //Get max R of ring
-  Float_t radius = 0;
-  if(ring == 'I')
-    radius = 17.2;
-  else if(ring == 'O')
-    radius = 28.0;
-  else
-    AliWarning("Unknown ring - must be I or O!");
-  
-  return radius;
-}
-//_____________________________________________________________________
-Float_t GetMinR(Char_t ring) const{
-  //Get min R of ring
-  Float_t radius = 0;
-  if(ring == 'I')
-    radius = 4.5213;
-  else if(ring == 'O')
-    radius = 15.4;
-  else
-    AliWarning("Unknown ring - must be I or O!");
-  
-  return radius;
-
-}
-//_____________________________________________________________________
-Float_t GetEtaFromStrip(UShort_t det, Char_t ring, UShort_t sec, UShort_t strip, Float_t zvtx)
-{
-  //Calculate eta from strip with vertex (redundant with AliESDFMD::Eta)
-  Float_t   rad       = GetMaxR(ring)-GetMinR(ring);
-  Float_t   nStrips   = (ring == 'I' ? 512 : 256);
-  Float_t   segment   = rad / nStrips;
-  Float_t   r         = GetMinR(ring) + segment*strip;
-  Float_t   z         = 0;
-  Int_t hybrid = sec / 2;
-  
-  if(det == 1) {
-    if(!(hybrid%2)) z = 320.266; else z = 319.766;
-  }
-  if(det == 2 && ring == 'I' ) {
-    if(!(hybrid%2)) z = 83.666; else z = 83.166;
-  }
-  if(det == 2 && ring == 'O' ) {
-    if(!(hybrid%2)) z = 74.966; else z = 75.466;
-  }
-  if(det == 3 && ring == 'I' ) {
-    if(!(hybrid%2)) z = -63.066; else z = -62.566;
-  }
-  if(det == 3 && ring == 'O' ) {
-    if(!(hybrid%2)) z = -74.966; else z = -75.466;
-  }
-  
-  Float_t   theta = TMath::ATan2(r,z-zvtx);
-  Float_t   eta   = -1*TMath::Log(TMath::Tan(0.5*theta));
-  
-  return eta;
-}
-//_____________________________________________________________________
-Float_t GetPhiFromSector(UShort_t det, Char_t ring, UShort_t sec) 
-{
-  //Get phi from sector
-  Int_t nsec = (ring == 'I' ? 20 : 40);
-  Float_t basephi = 0;
-  if(det == 1) 
-    basephi = 1.72787594; 
-  if(det == 2 && ring == 'I')
-    basephi = 0.15707963;
-  if(det == 2 && ring == 'O')
-    basephi = 0.078539818;
-  if(det == 3 && ring == 'I')
-    basephi = 2.984513044;
-  if(det == 3 && ring == 'O')
-    basephi = 3.06305289;
-  
-  Float_t step = 2*TMath::Pi() / nsec;
-  Float_t phi = 0;
-  if(det == 3)
-    phi = basephi - sec*step;
-  else
-    phi = basephi + sec*step;
-  
-  if(phi < 0) 
-    phi = phi +2*TMath::Pi();
-  if(phi > 2*TMath::Pi() )
-    phi = phi - 2*TMath::Pi();
-  
-  return phi;
-}
-//_____________________________________________________________________
-void MakeDeadChannelCorrection(Int_t runnumber, Int_t nVtxBins=10, Float_t vtxLow=-10, Float_t vtxHigh=10){
-  
-  gSystem->Load("libANALYSIS");
-  gSystem->Load("libANALYSISalice");
-  gSystem->Load("libPWG2forward2");
-  
-  Float_t delta = (vtxHigh - vtxLow) / (Float_t)nVtxBins;
-  
-  //TGrid::Connect("alien://",0,0,"t");
-  AliCDBManager* cdb = AliCDBManager::Instance();
-  //cdb->SetDefaultStorage("alien://Folder=/alice/data/2010/OCDB");
-  cdb->SetDefaultStorage("local:///home/canute/ALICE/AliRoot/OCDB");
-  cdb->SetRun(runnumber);
-  
-  TObjArray* fReadArray = new TObjArray();
-  fReadArray->SetName("DeadChannels");
-  TObjArray* fAllArray = new TObjArray();
-  fAllArray->SetName("AllChannels");
-  
-  TH2D* hRead = 0; 
-  TH2D* hAll = 0; 
-  for(Int_t det =1; det<=3;det++)
-    {
-      TObjArray* detReadArray = new TObjArray();
-      detReadArray->SetName(Form("FMD%d_Read",det));
-      fReadArray->AddAtAndExpand(detReadArray,det);
-      
-      TObjArray* detArray = new TObjArray();
-      detArray->SetName(Form("FMD%d_All",det));
-      fAllArray->AddAtAndExpand(detArray,det);
-      
-      UShort_t nRings = (det==1 ? 1 : 2);
-      for(Int_t ring = 0;ring<nRings;ring++)
-       {
-         TObjArray* vtxArray = new TObjArray();
-         detArray->AddAtAndExpand(vtxArray,ring);
-         
-         TObjArray* vtxReadArray = new TObjArray();
-         detReadArray->AddAtAndExpand(vtxReadArray,ring);
-         
-         
-         Char_t ringChar = (ring == 0 ? 'I' : 'O');
-         Int_t nSec = (ringChar == 'I' ? 20 : 40);
-         
-         for(Int_t v=0; v<nVtxBins; v++) {
-           hRead = new TH2D(Form("Read_FMD%d%c_vtxbin%d",det,ringChar,v),Form("Read_FMD%d%c_vtxbin%d",det,ringChar,v),200,-4,6,nSec,0,2*TMath::Pi());
-           hAll  = new TH2D(Form("All_FMD%d%c_vtxbin%d",det,ringChar,v),Form("All_FMD%d%c_vtxbin%d",det,ringChar,v),200,-4,6,nSec,0,2*TMath::Pi());
-           hRead->Sumw2();
-           hAll->Sumw2();
-           vtxArray->AddAtAndExpand(hAll,v);
-           vtxReadArray->AddAtAndExpand(hRead,v);
-           
-         }
-         
-         
-       }
-    }
-  
-  
-  
-  
-  AliFMDParameters* pars = AliFMDParameters::Instance();
-  pars->Init();
-  Int_t nDead = 0;
-  
-  for(UShort_t d=1;d<=1;d++) {
-    UShort_t nRings = (d==1 ? 1 : 2);
-    for (UShort_t ir = 0; ir < nRings; ir++) {
-      
-      Char_t   ringChar = (ir == 0 ? 'I' : 'O');
-      UShort_t nsec     = (ir == 0 ? 20  : 40);
-      UShort_t nstr     = (ir == 0 ? 512 : 256);
-      
-      std::cout<<Form("Now in FMD%d%c", d, ringChar)<<std::endl;
-      for(Int_t v = 0; v<nVtxBins ; v++) { 
-           
-           TObjArray* detReadArray = (TObjArray*)fReadArray->At(d);
-           TObjArray* vtxReadArray = (TObjArray*)detReadArray->At(ir);
-           TH2D*      hRead        = (TH2D*)vtxReadArray->At(v);
-           
-           TObjArray* detArray = (TObjArray*)fAllArray->At(d);
-           TObjArray* vtxArray = (TObjArray*)detArray->At(ir);
-           TH2D*      hAll        = (TH2D*)vtxArray->At(v);
-           
-           Float_t vtxMean = (v+0.5)*delta-vtxHigh;
-           for(UShort_t sec =0; sec < nsec;  sec++) {
-       
-             for(UShort_t strip = 0; strip < nstr; strip++) {
-         
-         
-               if(pars->IsDead(d,ringChar,sec,strip)) {
-                 nDead++;
-               }
-               else hRead->Fill(GetEtaFromStrip(d,ringChar,sec,strip,vtxMean),GetPhiFromSector(d,ringChar,sec));
-           
-               hAll->Fill(GetEtaFromStrip(d,ringChar,sec,strip,vtxMean),GetPhiFromSector(d,ringChar,sec));
-           
-           
-         }
-       }
-      }
-    }
-  }
-  
-  Float_t reldead = (Float_t)nDead / 51200.;
-  
-  std::cout<<Form("Found %d dead channels or %f percent",nDead,100*reldead)<<std::endl;
-  
-  AliFMDCorrDeadChannels* deadObject = new AliFMDCorrDeadChannels();
-  deadObject->SetVertexAxis(nVtxBins, vtxLow, vtxHigh);
-  
-  for(UShort_t d=1;d<=3;d++) {
-    UShort_t nRings = (d==1 ? 1 : 2);
-    for (UShort_t ir = 0; ir < nRings; ir++) {
-      
-      Char_t   ringChar = (ir == 0 ? 'I' : 'O');
-      UShort_t nsec     = (ir == 0 ? 20  : 40);
-      UShort_t nstr     = (ir == 0 ? 512 : 256);
-      
-      std::cout<<Form("Now saving in FMD%d%c", d, ringChar)<<std::endl;
-      
-      for(UShort_t vv = 0; vv<nVtxBins ; vv++) { 
-       
-       TObjArray* detReadArray = (TObjArray*)fReadArray->At(d);
-       TObjArray* vtxReadArray = (TObjArray*)detReadArray->At(ir);
-       TH2D*      hRead        = (TH2D*)vtxReadArray->At(vv);
-       
-       TObjArray* detArray = (TObjArray*)fAllArray->At(d);
-       TObjArray* vtxArray = (TObjArray*)detArray->At(ir);
-       TH2D*      hAll        = (TH2D*)vtxArray->At(vv);
-       
-       hRead->Divide(hRead,hAll,1,1,"B");
-       UShort_t vtxbin = vv+1;
-       deadObject->SetCorrection(d,ringChar,vtxbin,hRead);
-       
-      }
-    }
-  }
-  
-}