ROOT logo
// 
// This class collects the event histograms into single histograms, 
// one for each ring in each vertex bin.  
//
// Input:
//   - AliESDFMD object possibly corrected for sharing
//
// Output:
//   - 5 RingHistos objects - each with a number of vertex dependent 
//     2D histograms of the inclusive charge particle density 
// 
// HistCollector used: 
//   - AliFMDCorrSecondaryMap
//
#include "AliFMDHistCollector.h"
#include <AliESDFMD.h>
#include <TAxis.h>
#include <TList.h>
#include <TMath.h>
#include "AliForwardCorrectionManager.h"
#include "AliFMDCorrSecondaryMap.h"
#include "AliLog.h"
#include <TH2D.h>
#include <TH3D.h>
#include <TH1I.h>
#include <TProfile.h>
#include <TProfile2D.h>
#include <TObjArray.h>
#include <TArrayI.h>
#include <TROOT.h>
#include <iostream>
#include <iomanip>

ClassImp(AliFMDHistCollector)
#if 0
; // For Emacs
#endif 

//____________________________________________________________________
AliFMDHistCollector::AliFMDHistCollector()
  : fNCutBins(0), 
    fCorrectionCut(0), 
    fDebug(0),
    fList(0),
    fSumRings(0),
    fCoverage(0),
    fSkipped(0),
    fMergeMethod(kStraightMean),
    fFiducialMethod(kByCut),
    fSkipFMDRings(0),
    fBgAndHitMaps(false),
    fVtxList(0), 
    fByCent(0),
    fDoByCent(false)
{
  DGUARD(fDebug, 3, "Default CTOR of AliFMDHistCollector");
}

//____________________________________________________________________
AliFMDHistCollector::AliFMDHistCollector(const char* title)
  : TNamed("fmdHistCollector", title), 
    fNCutBins(2), 
    fCorrectionCut(0.5), 
    fDebug(0),
    fList(0),
    fSumRings(0),
    fCoverage(0),
    fSkipped(0),
    fMergeMethod(kStraightMean),
    fFiducialMethod(kByCut),
    fSkipFMDRings(0),
    fBgAndHitMaps(false),
    fVtxList(0), 
    fByCent(0),
    fDoByCent(false)
{
  DGUARD(fDebug, 3, "Named CTOR of AliFMDHistCollector: %s", title);
}
//____________________________________________________________________
AliFMDHistCollector::AliFMDHistCollector(const AliFMDHistCollector& o)
  : TNamed(o), 
    fNCutBins(o.fNCutBins), 
    fCorrectionCut(o.fCorrectionCut),
    fDebug(o.fDebug),
    fList(o.fList),
    fSumRings(o.fSumRings),
    fCoverage(o.fCoverage),
    fSkipped(o.fSkipped),
    fMergeMethod(o.fMergeMethod),
    fFiducialMethod(o.fFiducialMethod),
    fSkipFMDRings(o.fSkipFMDRings),
    fBgAndHitMaps(o.fBgAndHitMaps),
    fVtxList(o.fVtxList), 
    fByCent(o.fByCent),
    fDoByCent(o.fDoByCent)
{
  DGUARD(fDebug, 3, "Copy CTOR of AliFMDHistCollector");
}

//____________________________________________________________________
AliFMDHistCollector::~AliFMDHistCollector()
{ 
  DGUARD(fDebug, 3, "DTOR of AliFMDHistCollector");
  // if (fList) delete fList;
}
//____________________________________________________________________
AliFMDHistCollector&
AliFMDHistCollector::operator=(const AliFMDHistCollector& o)
{
  // 
  // Assignement operator
  // 
  // Parameters:
  //    o Object to assign from 
  //
  // Return:
  //    Reference to this object
  //
  DGUARD(fDebug, 3, "Assignment of AliFMDHistCollector");
  if (&o == this) return *this; 
  TNamed::operator=(o);

  fNCutBins       = o.fNCutBins;
  fCorrectionCut  = o.fCorrectionCut;
  fDebug          = o.fDebug;
  fList           = o.fList;
  fSumRings       = o.fSumRings;
  fCoverage       = o.fCoverage;
  fSkipped        = o.fSkipped;
  fMergeMethod    = o.fMergeMethod;
  fFiducialMethod = o.fFiducialMethod;
  fSkipFMDRings   = o.fSkipFMDRings;
  fBgAndHitMaps   = o.fBgAndHitMaps;
  fVtxList        = o.fVtxList; 
  fByCent         = o.fByCent;  
  fDoByCent       = o.fDoByCent;
  return *this;
}

//____________________________________________________________________
void
AliFMDHistCollector::SetupForData(const TAxis& vtxAxis,
				  const TAxis& etaAxis)
{
  // 
  // Intialise 
  // 
  // Parameters:
  //    vtxAxis  Vertex axis 
  //  
  DGUARD(fDebug, 1, "Initialization of AliFMDHistCollector");

  // AliForwardCorrectionManager& fcm = AliForwardCorrectionManager::Instance();

  fSumRings = new TH2D("sumRings", "Sum in individual rings",
		       etaAxis.GetNbins(), etaAxis.GetXmin(), etaAxis.GetXmax(),
		       5, 1, 6);
  fSumRings->Sumw2();
  fSumRings->SetDirectory(0);
  fSumRings->SetXTitle("#eta");
  fSumRings->GetYaxis()->SetBinLabel(1,"FMD1i");
  fSumRings->GetYaxis()->SetBinLabel(2,"FMD2i");
  fSumRings->GetYaxis()->SetBinLabel(3,"FMD2o");
  fSumRings->GetYaxis()->SetBinLabel(4,"FMD3i");
  fSumRings->GetYaxis()->SetBinLabel(5,"FMD3o");
  fList->Add(fSumRings);

  fCoverage = new TH2D("coverage", "#eta coverage per v_{z}", 
		       etaAxis.GetNbins(),etaAxis.GetXmin(),etaAxis.GetXmax(),
		       vtxAxis.GetNbins(),vtxAxis.GetXmin(),vtxAxis.GetXmax());
  fCoverage->SetDirectory(0);
  fCoverage->SetXTitle("#eta");
  fCoverage->SetYTitle("v_{z} [cm]");
  fCoverage->SetZTitle("n_{bins}");
  fList->Add(fCoverage);
		       
  fSkipped = new TH1D("skipped", "Rings skipped", 5, 1, 6);
  fSkipped->SetDirectory(0);
  fSkipped->SetFillColor(kRed+1);
  fSkipped->SetFillStyle(3001);
  fSkipped->SetYTitle("Events");
  fSkipped->GetXaxis()->SetBinLabel(1,"FMD1i");
  fSkipped->GetXaxis()->SetBinLabel(2,"FMD2i");
  fSkipped->GetXaxis()->SetBinLabel(3,"FMD2o");
  fSkipped->GetXaxis()->SetBinLabel(4,"FMD3i");
  fSkipped->GetXaxis()->SetBinLabel(5,"FMD3o");
  fList->Add(fSkipped);

  // --- Add parameters to output ------------------------------------
  fList->Add(AliForwardUtil::MakeParameter("nCutBins",fNCutBins));
  fList->Add(AliForwardUtil::MakeParameter("skipRings",fSkipFMDRings));
  fList->Add(AliForwardUtil::MakeParameter("bgAndHits",fBgAndHitMaps));
  fList->Add(AliForwardUtil::MakeParameter("fiducial",Int_t(fFiducialMethod)));
  fList->Add(AliForwardUtil::MakeParameter("fiducialCut",fCorrectionCut));
  fList->Add(AliForwardUtil::MakeParameter("merge",Int_t(fMergeMethod)));

  UShort_t nVz = vtxAxis.GetNbins();
  fVtxList = new TObjArray(nVz, 1);
  fVtxList->SetName("histCollectorVtxBins");
  fVtxList->SetOwner();
  
  // Find the eta bin ranges 
  for (UShort_t iVz = 1; iVz <= nVz; iVz++) {
    Double_t vMin    = vtxAxis.GetBinLowEdge(iVz);
    Double_t vMax    = vtxAxis.GetBinUpEdge(iVz);
    VtxBin*  bin     = new VtxBin(iVz, vMin, vMax, fNCutBins);
    fVtxList->AddAt(bin, iVz);

    bin->SetupForData(fCoverage, fSkipFMDRings, fFiducialMethod, 
		      fCorrectionCut, fList, etaAxis, 
		      fBgAndHitMaps, fBgAndHitMaps);
  }

  if (!fDoByCent) return;

  fByCent = new TList;
  fByCent->SetName("byCentrality");
  fByCent->SetOwner();
  fList->Add(fByCent);

  Int_t    nCent   = 101;
  Double_t minCent = -.5;
  Double_t maxCent = 100.5;
  for (Int_t i = 0; i < 5; i++) { 
    UShort_t d;
    Char_t   r;
    GetDetRing(i, d, r);
    
    TH3* h = new TH3D(Form("FMD%d%c", d, r),
		      Form("dN/d#eta per centrality for FMD%d%c", d, r),
		      etaAxis.GetNbins(), etaAxis.GetXmin(), etaAxis.GetXmax(), 
		      nCent, minCent, maxCent, 1, 0, 1);
    h->SetXTitle("#eta");
    h->SetYTitle("Centrality [%]");
    h->SetZTitle("dN/d#eta");
    h->SetDirectory(0);
    h->SetMarkerColor(AliForwardUtil::RingColor(d, r));
    h->SetMarkerStyle(20);
    fByCent->Add(h);
  }
}
//____________________________________________________________________
Bool_t
AliFMDHistCollector::CheckCorrection(FiducialMethod m, 
				     Double_t       cut, 
				     const TH2D*    bg, 
				     Int_t          ie, 
				     Int_t          ip) 
{
  // 
  // Check if we should include the bin in the data range 
  // 
  // Parameters:
  //    bg Secondary map histogram
  //    ie Eta bin
  //    ip Phi bin
  // 
  // Return:
  //    True if to be used
  //
  Double_t c = bg->GetBinContent(ie,ip);
  switch (m) { 
  case kByCut:
    return c >= cut;
  case kDistance: 
    if (2 * c < bg->GetBinContent(ie+1,ip) ||
	2 * c < bg->GetBinContent(ie-1,ip)) return false;
    return true;
  default: 
    AliErrorClass("No fiducal cut method defined");
  }
  return false;
}
    
//____________________________________________________________________
void
AliFMDHistCollector::CreateOutputObjects(TList* dir)
{
  // 
  // Output diagnostic histograms to directory 
  // 
  // Parameters:
  //    dir List to write in
  //  
  DGUARD(fDebug, 1, "Define output of AliFMDHistCollector");
  fList = new TList;
  fList->SetOwner();
  fList->SetName(GetName());
  dir->Add(fList);

}

//____________________________________________________________________
Bool_t
AliFMDHistCollector::CheckSkip(UShort_t d, Char_t r, UShort_t skips) 
{
  UShort_t q  = (r == 'I' || r == 'i' ? 0 : 1);
  UShort_t c = 1 << (d-1);
  UShort_t t = 1 << (c+q-1);

  return (t & skips) == t;
}

//____________________________________________________________________
Int_t
AliFMDHistCollector::GetIdx(UShort_t d, Char_t r)
{
  // 
  // Get the ring index from detector number and ring identifier 
  // 
  // Parameters:
  //    d Detector
  //    r Ring identifier 
  // 
  // Return:
  //    ring index or -1 in case of problems 
  //
  Int_t idx = -1;
  switch (d) { 
  case 1: idx = 0; break;
  case 2: idx = 1 + (r == 'I' || r == 'i' ? 0 : 1); break;
  case 3: idx = 3 + (r == 'I' || r == 'i' ? 0 : 1); break;
  }
  return idx;
}
//____________________________________________________________________
void
AliFMDHistCollector::GetDetRing(Int_t idx, UShort_t& d, Char_t& r)
{
  // 
  // Get the detector and ring from the ring index 
  // 
  // Parameters:
  //    idx Ring index 
  //    d   On return, the detector or 0 in case of errors 
  //    r   On return, the ring id or '0' in case of errors 
  //
  d = 0; 
  r = '\0';
  switch (idx) { 
  case 0: d = 1; r = 'I'; break;
  case 1: d = 2; r = 'I'; break;
  case 2: d = 2; r = 'O'; break;
  case 3: d = 3; r = 'I'; break;
  case 4: d = 3; r = 'O'; break;
  }
}

//____________________________________________________________________
AliFMDHistCollector::VtxBin*
AliFMDHistCollector::GetVtxBin(Int_t ivtx)
{
  // Parameters:
  //    vtxBin   Vertex bin (1 based) 
  if (!fVtxList) return 0;
  if (ivtx < 1 || ivtx > fVtxList->GetEntriesFast()) return 0;
  VtxBin* bin = static_cast<VtxBin*>(fVtxList->At(ivtx));
  return bin;
}
//____________________________________________________________________
const AliFMDHistCollector::VtxBin*
AliFMDHistCollector::GetVtxBin(Int_t ivtx) const
{
  // Parameters:
  //    vtxBin   Vertex bin (1 based) 
  if (!fVtxList) return 0;
  if (ivtx < 1 || ivtx > fVtxList->GetEntriesFast()) return 0;
  VtxBin* bin = static_cast<VtxBin*>(fVtxList->At(ivtx));
  return bin;
}

//____________________________________________________________________
void
AliFMDHistCollector::MergeBins(MergeMethod   m,
			       Double_t c,   Double_t e, 
			       Double_t oc,  Double_t oe,
			       Double_t& rc, Double_t& re)
{
  // 
  // Merge bins accoring to set method
  // 
  // Parameters:
  //    c   Current content
  //    e   Current error
  //    oc  Old content
  //    oe  Old error
  //    rc  On return, the new content
  //    re  On return, tne new error
  //
  rc = re = 0;
  switch (m) { 
  case kStraightMean:
  case kPreferInner:  // We only get these two when there's an overlap
  case kPreferOuter:  // between like rings, and we should do a straight mean 
    // calculate the average of old value (half the original), 
    // and this value, as well as the summed squared errors 
    // of the existing content (sqrt((e_1/2)^2=sqrt(e_1^2/4)=e_1/2) 
    // and half the error of this.   
    //
    // So, on the first overlapping histogram we get 
    // 
    //    c = c_1 / 2
    //    e = sqrt((e_1 / 2)^2) = e_1/2
    // 
    // On the second we get 
    // 
    //    c' = c_2 / 2 + c = c_2 / 2 + c_1 / 2 = (c_1+c_2)/2 
    //    e' = sqrt(e^2 + (e_2/2)^2) 
    //       = sqrt(e_1^2/4 + e_2^2/4) 
    //       = sqrt(1/4 * (e_1^2+e_2^2)) 
    //       = 1/2 * sqrt(e_1^2 + e_2^2)
    rc = oc + c/2;
    re = TMath::Sqrt(oe*oe+(e*e)/4);
    break;
  case kStraightMeanNoZero:
    // If there's data in the overlapping histogram, 
    // calculate the average and add the errors in 
    // quadrature.  
    // 
    // If there's no data in the overlapping histogram, 
    // then just fill in the data 
    if (oe > 0) {
      rc = (oc + c)/2;
      re = TMath::Sqrt(oe*oe + e*e)/2;
    }
    else {
      rc = c;
      re = e;
    }	    
    break;
  case kWeightedMean: {
    // Calculate the weighted mean 
    Double_t w  = 1/(e*e);
    Double_t sc = w * c;
    Double_t sw = w;
    if (oe > 0) {
      Double_t ow =  1/(oe*oe);
      sc          += ow * oc;
      sw          += ow;
    }
    rc = sc / sw;
    re = TMath::Sqrt(1 / sw);
  }
    break;
  case kLeastError:
    if (e < oe) {
      rc = c;
      re = e;
    }
    else {
      rc = oc;
      re = oe;
    }
    break;
  case kSum:
    rc = c + oc;
    re = TMath::Sqrt(oe * oe + e * e);//Add in quadarature 
    break;
  default:
    AliErrorClass("No method for defining content of overlapping bins defined");
    return;
  }
}

//____________________________________________________________________
Bool_t
AliFMDHistCollector::Collect(const AliForwardUtil::Histos& hists,
			     AliForwardUtil::Histos& sums,
			     UShort_t                vtxbin, 
			     TH2D&                   out,
			     Double_t 		     cent,
			     Bool_t                  eta2phi,
			     Bool_t                  add)
{
  // 
  // Do the calculations 
  // 
  // Parameters:
  //    hists    Cache of histograms 
  //    vtxBin   Vertex bin (1 based)
  //    out      Output histogram
  // 
  // Return:
  //    true on successs 
  //
  DGUARD(fDebug, 1, "Collect final histogram of AliFMDHistCollector");
  // AliForwardCorrectionManager& fcm = AliForwardCorrectionManager::Instance();
  // const TAxis* vtxAxis = fcm.GetVertexAxis();
  // Double_t vMin    = vtxAxis->GetBinLowEdge(vtxbin);
  // Double_t vMax    = vtxAxis->GetBinUpEdge(vtxbin);
  VtxBin*  bin     = GetVtxBin(vtxbin);
  if (!bin) return false;
  Bool_t   ret     = bin->Collect(hists, sums, out, fSumRings, fSkipped, cent, 
				  fMergeMethod, fSkipFMDRings,
				  fByCent, eta2phi, add);

  return ret;
}

#define PF(N,V,...)					\
  AliForwardUtil::PrintField(N,V, ## __VA_ARGS__)
#define PFB(N,FLAG)				\
  do {									\
    AliForwardUtil::PrintName(N);					\
    std::cout << std::boolalpha << (FLAG) << std::noboolalpha << std::endl; \
  } while(false)
#define PFV(N,VALUE)					\
  do {							\
    AliForwardUtil::PrintName(N);			\
    std::cout << (VALUE) << std::endl; } while(false)

//____________________________________________________________________
void
AliFMDHistCollector::Print(Option_t* /* option */) const
{
  // 
  // Print information 
  // 
  // Parameters:
  //    option Not used
  //
  TString merge("unknown");
  switch (fMergeMethod) {
  case kStraightMean:       merge = "straight mean"; break;
  case kStraightMeanNoZero: merge = "straight mean (no zeros)"; break;
  case kWeightedMean:       merge = "weighted mean"; break;
  case kLeastError:         merge = "least error"; break;
  case kSum:                merge = "straight sum"; break;
  case kPreferInner:        merge = "prefer inners"; break;
  case kPreferOuter:        merge = "prefer outers"; break;
  }

  AliForwardUtil::PrintTask(*this);
  gROOT->IncreaseDirLevel();
  PFV("# of cut bins",	fNCutBins );
  PFV("Fiducal method", (fFiducialMethod == kByCut ? "cut" : "distance"));
  PFV("Fiducial cut",	fCorrectionCut );
  PFV("Merge method",   merge);
    
  if (!fVtxList) {
    gROOT->DecreaseDirLevel();
    return;
  }
  char ind[64];
  for (Int_t i = 0; i < gROOT->GetDirLevel(); i++) ind[i] = ' ';
  ind[gROOT->GetDirLevel()] = '\0';

  std::cout << ind << "Bin ranges:\n" << ind << "  rings   |   Range  ";
  Int_t nVz = fVtxList->GetEntriesFast();
  for (Int_t iIdx = 0; iIdx < 5; iIdx++) {
    UShort_t d = 0;
    Char_t   r = 0;
    GetDetRing(iIdx, d, r);
    std::cout << ind << " | FMD" << d << r << " ";
  }
  std::cout << '\n' << ind << "  /vz_bin |-----------";
  for (Int_t iIdx = 0; iIdx < 5; iIdx++) 
    std::cout << "-+--------";
  std::cout << std::endl;

  for (UShort_t iVz = 1; iVz <= nVz; iVz++) {
    const VtxBin* bin = GetVtxBin(iVz);
    if (!bin) continue;
    std::cout << "    " << std::right << std::setw(6) << iVz << " | "
	      << std::setw(3) << bin->fLow << " - " << std::left 
	      << std::setw(3) << bin->fHigh << " ";
    for (Int_t iIdx = 0; iIdx < 5; iIdx++) {
      Int_t first, last;
      bin->GetFirstAndLast(iIdx, first, last);
      std::cout << " | " << std::setw(3) << first << "-" 
		<< std::setw(3) << last;
    }
    std::cout << std::endl;
  }
    gROOT->DecreaseDirLevel();
}

//____________________________________________________________________
AliFMDHistCollector::VtxBin::VtxBin(Int_t idx, Double_t minIpZ, Double_t maxIpZ,
				    Int_t nCutBins)
  : fIndex(idx), 
    fLow(minIpZ), 
    fHigh(maxIpZ),
    fHitMap(0), 
    fFirstBin(1), 
    fLastBin(1), 
    fNCutBins(nCutBins)
{
}
//____________________________________________________________________
AliFMDHistCollector::VtxBin::VtxBin(const VtxBin& o)
  : TObject(o), 
    fIndex(o.fIndex), 
    fLow(o.fLow), 
    fHigh(o.fHigh),
    fHitMap(o.fHitMap), 
    fFirstBin(o.fFirstBin), 
    fLastBin(o.fLastBin),
    fNCutBins(o.fNCutBins)
{
}
//____________________________________________________________________
AliFMDHistCollector::VtxBin&
AliFMDHistCollector::VtxBin::operator=(const VtxBin& o)
{
  if (&o == this) return *this;
  fIndex    = o.fIndex;
  fLow      = o.fLow;
  fHigh     = o.fHigh;
  fHitMap   = o.fHitMap;
  fFirstBin = o.fFirstBin;
  fLastBin  = o.fLastBin;
  fNCutBins = o.fNCutBins;
  return *this;
}
//____________________________________________________________________
const Char_t*
AliFMDHistCollector::VtxBin::GetName() const
{
  return Form("%c%03d_%c%03d", 
	      (fLow >= 0 ? 'p' : 'm'), Int_t(TMath::Abs(fLow)), 
	      (fHigh >= 0 ? 'p' : 'm'), Int_t(TMath::Abs(fHigh)));
}
//____________________________________________________________________
void
AliFMDHistCollector::VtxBin::SetupForData(TH2*           coverage,
					  UShort_t       skips,
					  FiducialMethod fiducial, 
					  Double_t       cut,
					  TList*         l,
					  const TAxis&   etaAxis,
					  Bool_t         doHitMaps, 
					  Bool_t         storeSecMap)
{
  TList* out = 0;
  if (doHitMaps || storeSecMap) {
    out = new TList;
    out->SetName(GetName());
    out->SetOwner();
    l->Add(out);
  }
  if (doHitMaps) { 
    fHitMap = new AliForwardUtil::Histos();
    fHitMap->Init(etaAxis);
  }
  fFirstBin.Set(5);
  fLastBin.Set(5);

  AliForwardCorrectionManager& fcm = AliForwardCorrectionManager::Instance();
  
  for (Int_t iIdx = 0; iIdx < 5; iIdx++) {
    UShort_t d = 0;
    Char_t   r = 0;
    GetDetRing(iIdx, d, r);
    
    // Skipping selected FMD rings 
    if (CheckSkip(d, r, skips)) continue;

    // Get the background object 
    TH2D* bg    = fcm.GetSecondaryMap()->GetCorrection(d,r,UShort_t(fIndex));
    Int_t nEta  = bg->GetNbinsX();
    Int_t first = nEta+1;
    Int_t last  = 0;
    
    // Loop over the eta bins 
    for (Int_t ie = 1; ie <= nEta; ie++) { 
      // Loop over the phi bins to make sure that we 
      // do not have holes in the coverage 
      bool ok = true;
      for (Int_t ip = 1; ip <= bg->GetNbinsY(); ip++) { 
	if (!CheckCorrection(fiducial, cut, bg, ie, ip)) {
	  ok = false;
	  continue;
	}
      }
      if (!ok) continue;
      
      first = TMath::Min(ie, first);
      last  = TMath::Max(ie, last);      
    }
    // Store result of first/last bin for this ring
    fFirstBin[iIdx] = first;
    fLastBin[iIdx]  = last;

    if (fHitMap) { 
      TH2* h = fHitMap->Get(d, r);
      h->SetDirectory(0);
      h->SetName(Form("hitMapFMD%d%c", d, r));
      // if (r == 'O') h->RebinY(2);
      out->Add(h);
    }

    TH2D* obg=0;
    if(storeSecMap) {
      obg = static_cast<TH2D*>(bg->Clone(Form("secMapFMD%d%c", d, r)));
      obg->SetDirectory(0);
      obg->Reset();
      out->Add(obg);
    }
    // Fill diagnostics histograms 
    for (Int_t ie = first+fNCutBins; ie <= last-fNCutBins; ie++) {
      Double_t old = coverage->GetBinContent(ie, fIndex);
      coverage->SetBinContent(ie, fIndex, old+1);
      if(obg) {
	for (Int_t ip = 1; ip <= bg->GetNbinsY(); ip++) {
	  obg->SetBinContent(ie, ip, bg->GetBinContent(ie, ip));
	  obg->SetBinError(ie, ip, bg->GetBinError(ie, ip));
	} // for (ip)
      } // if (doSecHits)
    } // for (ie)
  } // for (iIdx)  
}
  
//____________________________________________________________________
void
AliFMDHistCollector::VtxBin::GetFirstAndLast(Int_t  idx, 
					     Int_t& first, 
					     Int_t& last) const
{
  // Get the first and last eta bin to use for a given ring and vertex 
  // 
  // Parameters:
  //    idx      Ring index as given by GetIdx
  //    first    On return, the first eta bin to use 
  //    last     On return, the last eta bin to use 
  //
  first = 0; 
  last  = 0;
  
  if (idx < 0 || idx >= fFirstBin.GetSize()) return;
  
  first = fFirstBin.At(idx)+fNCutBins;  
  last  = fLastBin.At(idx)-fNCutBins;
}
//____________________________________________________________________
Int_t
AliFMDHistCollector::VtxBin::GetFirst(Int_t  idx) const
{
  Int_t first, last;
  GetFirstAndLast(idx, first , last);
  return first;
}
//____________________________________________________________________
Int_t
AliFMDHistCollector::VtxBin::GetLast(Int_t  idx) const
{
  Int_t first, last;
  GetFirstAndLast(idx, first , last);
  return last;
}

#define PRINT_OVERFLOW(D,R,T,H) do {					\
  printf("Content of FMD%d%c overflow %s rebinning", D, R, T);		\
  Int_t i = 0;								\
  for (Int_t ix = 1; ix <= t->GetNbinsX(); ix++) {			\
  Double_t c = t->GetBinContent(ix, t->GetNbinsY()+1);			\
  if (c <= 1e-9) continue;						\
  if ((i % 10) == 0) printf("\n  ");					\
  printf("%3d: %5.2f ", ix, c);						\
  i++;									\
  }									\
  printf("\n");								\
  } while (false)

//____________________________________________________________________
Bool_t
AliFMDHistCollector::VtxBin::Collect(const AliForwardUtil::Histos& hists, 
				     AliForwardUtil::Histos&       sums, 
				     TH2D&                         out,
				     TH2D*                         sumRings,
				     TH1D*                         skipped,
				     Double_t                      cent,
				     MergeMethod                   m,
				     UShort_t                      skips,
				     TList*                        byCent,
				     Bool_t                        eta2phi,
				     Bool_t                        add)
{
  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');
      Int_t       i = (d == 1 ? 1 : 2*d + (q == 0 ? -2 : -1));
      TH2D*       h = hists.Get(d,r);
      if (CheckSkip(d, r, skips) || !h || 
	  h->TestBit(AliForwardUtil::kSkipRing)) {
	// Skipping a ring - either because disable, not there, or
	// because of flagged (too many outliers, ...)
	skipped->Fill(i);
	continue;
      }
      TH2D*       o = sums.Get(d, r);
      TH2D*       t = static_cast<TH2D*>(h->Clone(Form("FMD%d%c_tmp",d,r)));
      
      // Get valid range 
      Int_t first = 0;
      Int_t last  = 0;
      GetFirstAndLast(d, r, first, last);
      
      // Zero outside valid range 
      Int_t nY = t->GetNbinsY();
      Int_t nX = t->GetNbinsX();
      for (Int_t iPhi = 0; iPhi <= nY+1; iPhi++) { 
	// Lower range 
	for (Int_t iEta = 1; iEta < first; iEta++) { 
	  t->SetBinContent(iEta,iPhi,0);
	  t->SetBinError(iEta,iPhi,0);
	}
	for (Int_t iEta = last+1; iEta <= nX; iEta++) {
	  t->SetBinContent(iEta,iPhi,0);
	  t->SetBinError(iEta,iPhi,0);
	}
      }
      // Fill under-flow bins with eta coverage 
      for (Int_t iEta = first; iEta <= last; iEta++) 
	t->SetBinContent(iEta,0,1);
      if (eta2phi) {
	for (Int_t iEta = first; iEta <= last; iEta++) 
	  t->SetBinContent(iEta,nY+1,1);
      }
      
      if (add) {
	// Add to our per-ring sum 
	o->Add(t);

	// If we store hit maps, update here If "eta2phi" is true,
	// then we are here for MC, and so we do not update the hit
	// maps - ever!
	if (fHitMap && !eta2phi) fHitMap->Get(d, r)->Add(t);
      

	if (byCent) { 
	  TH3* dNdetaCent = static_cast<TH3*>(byCent->At(i-1));
	  if (cent >= 0 && dNdetaCent) { 
	    Int_t iCent = dNdetaCent->GetYaxis()->FindBin(cent);
	  
	    if (iCent > 0 && iCent <= dNdetaCent->GetNbinsY()) { 
	      // Make a projection of data 
	      TH1* proj = static_cast<TH1*>(t->ProjectionX("tmp", 1, nY));
	      proj->SetDirectory(0);
	      for (Int_t iEta = 1; iEta <= nX; iEta++) {
		Double_t v1 = proj->GetBinContent(iEta);
		Double_t e1 = proj->GetBinError(iEta);
		Double_t v2 = dNdetaCent->GetBinContent(iEta, iCent, 1);
		Double_t e2 = dNdetaCent->GetBinError(iEta, iCent, 1);
		dNdetaCent->SetBinContent(iEta,iCent,1, v1+v2);
		dNdetaCent->SetBinError(iEta,iCent,1, TMath::Sqrt(e1*e1+e2*e2));
	      
		// Check under-/overflow bins
		Double_t uF = t->GetBinContent(iEta, 0);
		Double_t oF = t->GetBinContent(iEta, nY+1);
		if (uF > 0) {
		  Double_t old = dNdetaCent->GetBinContent(iEta, iCent, 0);
		  dNdetaCent->SetBinContent(iEta, iCent, 0, old + uF);
		}
		if (oF > 0) {
		  Double_t old = dNdetaCent->GetBinContent(iEta, iCent, 2);
		  dNdetaCent->SetBinContent(iEta, iCent, 2, old + oF);
		}
	      } // for(iEta)
	      delete proj;
	    } // if(iCent)
	  } // if (cent)
	} // if (byCent)
      } // if (add)

      // Outer rings have better phi segmentation - rebin to same as inner. 
      if (q == 1) {
	// PRINT_OVERFLOW(d, r, "before", t);
	t->RebinY(2);	
	// PRINT_OVERFLOW(d, r, "after", t);
      }

      nY = t->GetNbinsY();

      // Now update profile output 
      for (Int_t iEta = first; iEta <= last; iEta++) { 

	// Get the possibly overlapping histogram 
	Int_t overlap = GetOverlap(d,r,iEta);

	// Get factor 
	MergeMethod mm  = m; // Possibly override method locally
	Float_t     fac = 1;
	if (m != kSum && overlap >= 0) {
	  // Default is to average 
	  fac = 0.5;
	  if (m == kPreferInner) {
	    // Current one is an outer overlapping an inner 
	    if ((r == 'o' || r == 'O') && 
		(overlap == 0 || overlap == 1 || overlap == 3))
	      // Do not use this signal 
	      fac = 0;
	    // Current one is inner overlapping an outer
	    else if ((r == 'i' || r == 'I') && (overlap == 2 || overlap == 4))
	      // Prefer this one 
	      fac = 1;
	    else 
	      // In case of two overlapping inners 
	      mm = kStraightMean;
	  }
	  else if (m == kPreferOuter) {
	    // Current one is an inner overlapping an outer 
	    if ((r == 'i' || r == 'I') && (overlap == 2 || overlap == 4))
	      // Do not use this signal 
	      fac = 0;
	    else if ((r == 'O' || r == 'o') && 
		     (overlap == 0 || overlap == 1 || overlap == 3))
	      fac = 1;
	    else 
	      // In case of two overlapping outers
	      mm = kStraightMean;
	  }
	}

	// Fill eta acceptance for this event into the phi underflow bin
	Float_t ooc      = out.GetBinContent(iEta,0);
	out.SetBinContent(iEta, 0, ooc + fac);

	// Fill phi acceptance for this event into the phi overflow bin
	Float_t oop      = out.GetBinContent(iEta,nY+1);
	Float_t nop      = t->GetBinContent(iEta,nY+1);
#if 0
	Info("", "etaBin=%3d Setting phi acceptance to %f(%f+%f)=%f", 
	     iEta, fac, oop, nop, fac*(oop+nop));
#endif
	out.SetBinContent(iEta, nY+1, fac * nop + oop);

	// Should we loop over h or t Y bins - I think it's t
	for (Int_t iPhi = 1; iPhi <= nY; iPhi++) { 
	  Double_t c  = t->GetBinContent(iEta,iPhi);
	  Double_t e  = t->GetBinError(iEta,iPhi);
	  Double_t ee = t->GetXaxis()->GetBinCenter(iEta);
	  sumRings->Fill(ee, i, c);

	  // If there's no signal or the signal was ignored because we
	  // prefer the inners/outers, continue if (e <= 0) continue;
	  if (fac <= 0 || c <= 0 || e <= 0)     continue;
	  
	  // If there's no overlapping histogram (ring) or if we
	  // prefer inner/outer, then fill in data and continue to the
	  // next phi bin
	  if (overlap < 0 || fac >= 1) { 
	    out.SetBinContent(iEta,iPhi,c);
	    out.SetBinError(iEta,iPhi,e);
	    continue;
	  }

	  // Get the current bin content and error 
	  Double_t oc = out.GetBinContent(iEta,iPhi);
	  Double_t oe = out.GetBinError(iEta,iPhi);

	  Double_t rc, re;
	  MergeBins(mm, c, e, oc, oe, rc, re);
	  out.SetBinContent(iEta,iPhi, rc);
	  out.SetBinError(iEta,iPhi, re);
	}
      }
      // Remove temporary histogram 
      delete t;
    } // for r
  } // for d 
  return true;
}
//____________________________________________________________________
Int_t 
AliFMDHistCollector::VtxBin::GetOverlap(UShort_t d, Char_t r, 
					Int_t bin) const
{
  // 
  // Get the possibly overlapping histogram of eta bin @a e in 
  // detector and ring 
  // 
  // Parameters:
  //    d Detector
  //    r Ring 
  //    e Eta bin
  //    v Vertex bin (1 based)
  //
  // Return:
  //    Overlapping histogram index or -1
  //

  Int_t other = -1;
  if (d == 1) {
    if (bin <= GetLast(2,'I')) other = GetIdx(2,'I');
  }
  else if (d == 2 && r == 'I') {
    if      (bin <= GetLast(2,  'O')) other = GetIdx(2, 'O');
    else if (bin >= GetFirst(1, 'I')) other = GetIdx(1, 'I');
  }
  else if (d == 2 && r == 'O') {
    if (bin >= GetFirst(2, 'I'))      other = GetIdx(2,'I');
  }
  else if (d == 3 && r == 'O') {
    if (bin <= GetLast(3, 'I'))       other = GetIdx(3, 'I');
  }
  else if (d == 3 && r == 'I') {
    if (bin >= GetFirst(3, 'O'))      other = GetIdx(3, 'O');
  }
  // AliInfo(Form("FMD%d%c (%d) -> %d", d, r, GetIdx(d,r), other));
  return other;
}
  

//____________________________________________________________________
//
// EOF
//
	  


 AliFMDHistCollector.cxx:1
 AliFMDHistCollector.cxx:2
 AliFMDHistCollector.cxx:3
 AliFMDHistCollector.cxx:4
 AliFMDHistCollector.cxx:5
 AliFMDHistCollector.cxx:6
 AliFMDHistCollector.cxx:7
 AliFMDHistCollector.cxx:8
 AliFMDHistCollector.cxx:9
 AliFMDHistCollector.cxx:10
 AliFMDHistCollector.cxx:11
 AliFMDHistCollector.cxx:12
 AliFMDHistCollector.cxx:13
 AliFMDHistCollector.cxx:14
 AliFMDHistCollector.cxx:15
 AliFMDHistCollector.cxx:16
 AliFMDHistCollector.cxx:17
 AliFMDHistCollector.cxx:18
 AliFMDHistCollector.cxx:19
 AliFMDHistCollector.cxx:20
 AliFMDHistCollector.cxx:21
 AliFMDHistCollector.cxx:22
 AliFMDHistCollector.cxx:23
 AliFMDHistCollector.cxx:24
 AliFMDHistCollector.cxx:25
 AliFMDHistCollector.cxx:26
 AliFMDHistCollector.cxx:27
 AliFMDHistCollector.cxx:28
 AliFMDHistCollector.cxx:29
 AliFMDHistCollector.cxx:30
 AliFMDHistCollector.cxx:31
 AliFMDHistCollector.cxx:32
 AliFMDHistCollector.cxx:33
 AliFMDHistCollector.cxx:34
 AliFMDHistCollector.cxx:35
 AliFMDHistCollector.cxx:36
 AliFMDHistCollector.cxx:37
 AliFMDHistCollector.cxx:38
 AliFMDHistCollector.cxx:39
 AliFMDHistCollector.cxx:40
 AliFMDHistCollector.cxx:41
 AliFMDHistCollector.cxx:42
 AliFMDHistCollector.cxx:43
 AliFMDHistCollector.cxx:44
 AliFMDHistCollector.cxx:45
 AliFMDHistCollector.cxx:46
 AliFMDHistCollector.cxx:47
 AliFMDHistCollector.cxx:48
 AliFMDHistCollector.cxx:49
 AliFMDHistCollector.cxx:50
 AliFMDHistCollector.cxx:51
 AliFMDHistCollector.cxx:52
 AliFMDHistCollector.cxx:53
 AliFMDHistCollector.cxx:54
 AliFMDHistCollector.cxx:55
 AliFMDHistCollector.cxx:56
 AliFMDHistCollector.cxx:57
 AliFMDHistCollector.cxx:58
 AliFMDHistCollector.cxx:59
 AliFMDHistCollector.cxx:60
 AliFMDHistCollector.cxx:61
 AliFMDHistCollector.cxx:62
 AliFMDHistCollector.cxx:63
 AliFMDHistCollector.cxx:64
 AliFMDHistCollector.cxx:65
 AliFMDHistCollector.cxx:66
 AliFMDHistCollector.cxx:67
 AliFMDHistCollector.cxx:68
 AliFMDHistCollector.cxx:69
 AliFMDHistCollector.cxx:70
 AliFMDHistCollector.cxx:71
 AliFMDHistCollector.cxx:72
 AliFMDHistCollector.cxx:73
 AliFMDHistCollector.cxx:74
 AliFMDHistCollector.cxx:75
 AliFMDHistCollector.cxx:76
 AliFMDHistCollector.cxx:77
 AliFMDHistCollector.cxx:78
 AliFMDHistCollector.cxx:79
 AliFMDHistCollector.cxx:80
 AliFMDHistCollector.cxx:81
 AliFMDHistCollector.cxx:82
 AliFMDHistCollector.cxx:83
 AliFMDHistCollector.cxx:84
 AliFMDHistCollector.cxx:85
 AliFMDHistCollector.cxx:86
 AliFMDHistCollector.cxx:87
 AliFMDHistCollector.cxx:88
 AliFMDHistCollector.cxx:89
 AliFMDHistCollector.cxx:90
 AliFMDHistCollector.cxx:91
 AliFMDHistCollector.cxx:92
 AliFMDHistCollector.cxx:93
 AliFMDHistCollector.cxx:94
 AliFMDHistCollector.cxx:95
 AliFMDHistCollector.cxx:96
 AliFMDHistCollector.cxx:97
 AliFMDHistCollector.cxx:98
 AliFMDHistCollector.cxx:99
 AliFMDHistCollector.cxx:100
 AliFMDHistCollector.cxx:101
 AliFMDHistCollector.cxx:102
 AliFMDHistCollector.cxx:103
 AliFMDHistCollector.cxx:104
 AliFMDHistCollector.cxx:105
 AliFMDHistCollector.cxx:106
 AliFMDHistCollector.cxx:107
 AliFMDHistCollector.cxx:108
 AliFMDHistCollector.cxx:109
 AliFMDHistCollector.cxx:110
 AliFMDHistCollector.cxx:111
 AliFMDHistCollector.cxx:112
 AliFMDHistCollector.cxx:113
 AliFMDHistCollector.cxx:114
 AliFMDHistCollector.cxx:115
 AliFMDHistCollector.cxx:116
 AliFMDHistCollector.cxx:117
 AliFMDHistCollector.cxx:118
 AliFMDHistCollector.cxx:119
 AliFMDHistCollector.cxx:120
 AliFMDHistCollector.cxx:121
 AliFMDHistCollector.cxx:122
 AliFMDHistCollector.cxx:123
 AliFMDHistCollector.cxx:124
 AliFMDHistCollector.cxx:125
 AliFMDHistCollector.cxx:126
 AliFMDHistCollector.cxx:127
 AliFMDHistCollector.cxx:128
 AliFMDHistCollector.cxx:129
 AliFMDHistCollector.cxx:130
 AliFMDHistCollector.cxx:131
 AliFMDHistCollector.cxx:132
 AliFMDHistCollector.cxx:133
 AliFMDHistCollector.cxx:134
 AliFMDHistCollector.cxx:135
 AliFMDHistCollector.cxx:136
 AliFMDHistCollector.cxx:137
 AliFMDHistCollector.cxx:138
 AliFMDHistCollector.cxx:139
 AliFMDHistCollector.cxx:140
 AliFMDHistCollector.cxx:141
 AliFMDHistCollector.cxx:142
 AliFMDHistCollector.cxx:143
 AliFMDHistCollector.cxx:144
 AliFMDHistCollector.cxx:145
 AliFMDHistCollector.cxx:146
 AliFMDHistCollector.cxx:147
 AliFMDHistCollector.cxx:148
 AliFMDHistCollector.cxx:149
 AliFMDHistCollector.cxx:150
 AliFMDHistCollector.cxx:151
 AliFMDHistCollector.cxx:152
 AliFMDHistCollector.cxx:153
 AliFMDHistCollector.cxx:154
 AliFMDHistCollector.cxx:155
 AliFMDHistCollector.cxx:156
 AliFMDHistCollector.cxx:157
 AliFMDHistCollector.cxx:158
 AliFMDHistCollector.cxx:159
 AliFMDHistCollector.cxx:160
 AliFMDHistCollector.cxx:161
 AliFMDHistCollector.cxx:162
 AliFMDHistCollector.cxx:163
 AliFMDHistCollector.cxx:164
 AliFMDHistCollector.cxx:165
 AliFMDHistCollector.cxx:166
 AliFMDHistCollector.cxx:167
 AliFMDHistCollector.cxx:168
 AliFMDHistCollector.cxx:169
 AliFMDHistCollector.cxx:170
 AliFMDHistCollector.cxx:171
 AliFMDHistCollector.cxx:172
 AliFMDHistCollector.cxx:173
 AliFMDHistCollector.cxx:174
 AliFMDHistCollector.cxx:175
 AliFMDHistCollector.cxx:176
 AliFMDHistCollector.cxx:177
 AliFMDHistCollector.cxx:178
 AliFMDHistCollector.cxx:179
 AliFMDHistCollector.cxx:180
 AliFMDHistCollector.cxx:181
 AliFMDHistCollector.cxx:182
 AliFMDHistCollector.cxx:183
 AliFMDHistCollector.cxx:184
 AliFMDHistCollector.cxx:185
 AliFMDHistCollector.cxx:186
 AliFMDHistCollector.cxx:187
 AliFMDHistCollector.cxx:188
 AliFMDHistCollector.cxx:189
 AliFMDHistCollector.cxx:190
 AliFMDHistCollector.cxx:191
 AliFMDHistCollector.cxx:192
 AliFMDHistCollector.cxx:193
 AliFMDHistCollector.cxx:194
 AliFMDHistCollector.cxx:195
 AliFMDHistCollector.cxx:196
 AliFMDHistCollector.cxx:197
 AliFMDHistCollector.cxx:198
 AliFMDHistCollector.cxx:199
 AliFMDHistCollector.cxx:200
 AliFMDHistCollector.cxx:201
 AliFMDHistCollector.cxx:202
 AliFMDHistCollector.cxx:203
 AliFMDHistCollector.cxx:204
 AliFMDHistCollector.cxx:205
 AliFMDHistCollector.cxx:206
 AliFMDHistCollector.cxx:207
 AliFMDHistCollector.cxx:208
 AliFMDHistCollector.cxx:209
 AliFMDHistCollector.cxx:210
 AliFMDHistCollector.cxx:211
 AliFMDHistCollector.cxx:212
 AliFMDHistCollector.cxx:213
 AliFMDHistCollector.cxx:214
 AliFMDHistCollector.cxx:215
 AliFMDHistCollector.cxx:216
 AliFMDHistCollector.cxx:217
 AliFMDHistCollector.cxx:218
 AliFMDHistCollector.cxx:219
 AliFMDHistCollector.cxx:220
 AliFMDHistCollector.cxx:221
 AliFMDHistCollector.cxx:222
 AliFMDHistCollector.cxx:223
 AliFMDHistCollector.cxx:224
 AliFMDHistCollector.cxx:225
 AliFMDHistCollector.cxx:226
 AliFMDHistCollector.cxx:227
 AliFMDHistCollector.cxx:228
 AliFMDHistCollector.cxx:229
 AliFMDHistCollector.cxx:230
 AliFMDHistCollector.cxx:231
 AliFMDHistCollector.cxx:232
 AliFMDHistCollector.cxx:233
 AliFMDHistCollector.cxx:234
 AliFMDHistCollector.cxx:235
 AliFMDHistCollector.cxx:236
 AliFMDHistCollector.cxx:237
 AliFMDHistCollector.cxx:238
 AliFMDHistCollector.cxx:239
 AliFMDHistCollector.cxx:240
 AliFMDHistCollector.cxx:241
 AliFMDHistCollector.cxx:242
 AliFMDHistCollector.cxx:243
 AliFMDHistCollector.cxx:244
 AliFMDHistCollector.cxx:245
 AliFMDHistCollector.cxx:246
 AliFMDHistCollector.cxx:247
 AliFMDHistCollector.cxx:248
 AliFMDHistCollector.cxx:249
 AliFMDHistCollector.cxx:250
 AliFMDHistCollector.cxx:251
 AliFMDHistCollector.cxx:252
 AliFMDHistCollector.cxx:253
 AliFMDHistCollector.cxx:254
 AliFMDHistCollector.cxx:255
 AliFMDHistCollector.cxx:256
 AliFMDHistCollector.cxx:257
 AliFMDHistCollector.cxx:258
 AliFMDHistCollector.cxx:259
 AliFMDHistCollector.cxx:260
 AliFMDHistCollector.cxx:261
 AliFMDHistCollector.cxx:262
 AliFMDHistCollector.cxx:263
 AliFMDHistCollector.cxx:264
 AliFMDHistCollector.cxx:265
 AliFMDHistCollector.cxx:266
 AliFMDHistCollector.cxx:267
 AliFMDHistCollector.cxx:268
 AliFMDHistCollector.cxx:269
 AliFMDHistCollector.cxx:270
 AliFMDHistCollector.cxx:271
 AliFMDHistCollector.cxx:272
 AliFMDHistCollector.cxx:273
 AliFMDHistCollector.cxx:274
 AliFMDHistCollector.cxx:275
 AliFMDHistCollector.cxx:276
 AliFMDHistCollector.cxx:277
 AliFMDHistCollector.cxx:278
 AliFMDHistCollector.cxx:279
 AliFMDHistCollector.cxx:280
 AliFMDHistCollector.cxx:281
 AliFMDHistCollector.cxx:282
 AliFMDHistCollector.cxx:283
 AliFMDHistCollector.cxx:284
 AliFMDHistCollector.cxx:285
 AliFMDHistCollector.cxx:286
 AliFMDHistCollector.cxx:287
 AliFMDHistCollector.cxx:288
 AliFMDHistCollector.cxx:289
 AliFMDHistCollector.cxx:290
 AliFMDHistCollector.cxx:291
 AliFMDHistCollector.cxx:292
 AliFMDHistCollector.cxx:293
 AliFMDHistCollector.cxx:294
 AliFMDHistCollector.cxx:295
 AliFMDHistCollector.cxx:296
 AliFMDHistCollector.cxx:297
 AliFMDHistCollector.cxx:298
 AliFMDHistCollector.cxx:299
 AliFMDHistCollector.cxx:300
 AliFMDHistCollector.cxx:301
 AliFMDHistCollector.cxx:302
 AliFMDHistCollector.cxx:303
 AliFMDHistCollector.cxx:304
 AliFMDHistCollector.cxx:305
 AliFMDHistCollector.cxx:306
 AliFMDHistCollector.cxx:307
 AliFMDHistCollector.cxx:308
 AliFMDHistCollector.cxx:309
 AliFMDHistCollector.cxx:310
 AliFMDHistCollector.cxx:311
 AliFMDHistCollector.cxx:312
 AliFMDHistCollector.cxx:313
 AliFMDHistCollector.cxx:314
 AliFMDHistCollector.cxx:315
 AliFMDHistCollector.cxx:316
 AliFMDHistCollector.cxx:317
 AliFMDHistCollector.cxx:318
 AliFMDHistCollector.cxx:319
 AliFMDHistCollector.cxx:320
 AliFMDHistCollector.cxx:321
 AliFMDHistCollector.cxx:322
 AliFMDHistCollector.cxx:323
 AliFMDHistCollector.cxx:324
 AliFMDHistCollector.cxx:325
 AliFMDHistCollector.cxx:326
 AliFMDHistCollector.cxx:327
 AliFMDHistCollector.cxx:328
 AliFMDHistCollector.cxx:329
 AliFMDHistCollector.cxx:330
 AliFMDHistCollector.cxx:331
 AliFMDHistCollector.cxx:332
 AliFMDHistCollector.cxx:333
 AliFMDHistCollector.cxx:334
 AliFMDHistCollector.cxx:335
 AliFMDHistCollector.cxx:336
 AliFMDHistCollector.cxx:337
 AliFMDHistCollector.cxx:338
 AliFMDHistCollector.cxx:339
 AliFMDHistCollector.cxx:340
 AliFMDHistCollector.cxx:341
 AliFMDHistCollector.cxx:342
 AliFMDHistCollector.cxx:343
 AliFMDHistCollector.cxx:344
 AliFMDHistCollector.cxx:345
 AliFMDHistCollector.cxx:346
 AliFMDHistCollector.cxx:347
 AliFMDHistCollector.cxx:348
 AliFMDHistCollector.cxx:349
 AliFMDHistCollector.cxx:350
 AliFMDHistCollector.cxx:351
 AliFMDHistCollector.cxx:352
 AliFMDHistCollector.cxx:353
 AliFMDHistCollector.cxx:354
 AliFMDHistCollector.cxx:355
 AliFMDHistCollector.cxx:356
 AliFMDHistCollector.cxx:357
 AliFMDHistCollector.cxx:358
 AliFMDHistCollector.cxx:359
 AliFMDHistCollector.cxx:360
 AliFMDHistCollector.cxx:361
 AliFMDHistCollector.cxx:362
 AliFMDHistCollector.cxx:363
 AliFMDHistCollector.cxx:364
 AliFMDHistCollector.cxx:365
 AliFMDHistCollector.cxx:366
 AliFMDHistCollector.cxx:367
 AliFMDHistCollector.cxx:368
 AliFMDHistCollector.cxx:369
 AliFMDHistCollector.cxx:370
 AliFMDHistCollector.cxx:371
 AliFMDHistCollector.cxx:372
 AliFMDHistCollector.cxx:373
 AliFMDHistCollector.cxx:374
 AliFMDHistCollector.cxx:375
 AliFMDHistCollector.cxx:376
 AliFMDHistCollector.cxx:377
 AliFMDHistCollector.cxx:378
 AliFMDHistCollector.cxx:379
 AliFMDHistCollector.cxx:380
 AliFMDHistCollector.cxx:381
 AliFMDHistCollector.cxx:382
 AliFMDHistCollector.cxx:383
 AliFMDHistCollector.cxx:384
 AliFMDHistCollector.cxx:385
 AliFMDHistCollector.cxx:386
 AliFMDHistCollector.cxx:387
 AliFMDHistCollector.cxx:388
 AliFMDHistCollector.cxx:389
 AliFMDHistCollector.cxx:390
 AliFMDHistCollector.cxx:391
 AliFMDHistCollector.cxx:392
 AliFMDHistCollector.cxx:393
 AliFMDHistCollector.cxx:394
 AliFMDHistCollector.cxx:395
 AliFMDHistCollector.cxx:396
 AliFMDHistCollector.cxx:397
 AliFMDHistCollector.cxx:398
 AliFMDHistCollector.cxx:399
 AliFMDHistCollector.cxx:400
 AliFMDHistCollector.cxx:401
 AliFMDHistCollector.cxx:402
 AliFMDHistCollector.cxx:403
 AliFMDHistCollector.cxx:404
 AliFMDHistCollector.cxx:405
 AliFMDHistCollector.cxx:406
 AliFMDHistCollector.cxx:407
 AliFMDHistCollector.cxx:408
 AliFMDHistCollector.cxx:409
 AliFMDHistCollector.cxx:410
 AliFMDHistCollector.cxx:411
 AliFMDHistCollector.cxx:412
 AliFMDHistCollector.cxx:413
 AliFMDHistCollector.cxx:414
 AliFMDHistCollector.cxx:415
 AliFMDHistCollector.cxx:416
 AliFMDHistCollector.cxx:417
 AliFMDHistCollector.cxx:418
 AliFMDHistCollector.cxx:419
 AliFMDHistCollector.cxx:420
 AliFMDHistCollector.cxx:421
 AliFMDHistCollector.cxx:422
 AliFMDHistCollector.cxx:423
 AliFMDHistCollector.cxx:424
 AliFMDHistCollector.cxx:425
 AliFMDHistCollector.cxx:426
 AliFMDHistCollector.cxx:427
 AliFMDHistCollector.cxx:428
 AliFMDHistCollector.cxx:429
 AliFMDHistCollector.cxx:430
 AliFMDHistCollector.cxx:431
 AliFMDHistCollector.cxx:432
 AliFMDHistCollector.cxx:433
 AliFMDHistCollector.cxx:434
 AliFMDHistCollector.cxx:435
 AliFMDHistCollector.cxx:436
 AliFMDHistCollector.cxx:437
 AliFMDHistCollector.cxx:438
 AliFMDHistCollector.cxx:439
 AliFMDHistCollector.cxx:440
 AliFMDHistCollector.cxx:441
 AliFMDHistCollector.cxx:442
 AliFMDHistCollector.cxx:443
 AliFMDHistCollector.cxx:444
 AliFMDHistCollector.cxx:445
 AliFMDHistCollector.cxx:446
 AliFMDHistCollector.cxx:447
 AliFMDHistCollector.cxx:448
 AliFMDHistCollector.cxx:449
 AliFMDHistCollector.cxx:450
 AliFMDHistCollector.cxx:451
 AliFMDHistCollector.cxx:452
 AliFMDHistCollector.cxx:453
 AliFMDHistCollector.cxx:454
 AliFMDHistCollector.cxx:455
 AliFMDHistCollector.cxx:456
 AliFMDHistCollector.cxx:457
 AliFMDHistCollector.cxx:458
 AliFMDHistCollector.cxx:459
 AliFMDHistCollector.cxx:460
 AliFMDHistCollector.cxx:461
 AliFMDHistCollector.cxx:462
 AliFMDHistCollector.cxx:463
 AliFMDHistCollector.cxx:464
 AliFMDHistCollector.cxx:465
 AliFMDHistCollector.cxx:466
 AliFMDHistCollector.cxx:467
 AliFMDHistCollector.cxx:468
 AliFMDHistCollector.cxx:469
 AliFMDHistCollector.cxx:470
 AliFMDHistCollector.cxx:471
 AliFMDHistCollector.cxx:472
 AliFMDHistCollector.cxx:473
 AliFMDHistCollector.cxx:474
 AliFMDHistCollector.cxx:475
 AliFMDHistCollector.cxx:476
 AliFMDHistCollector.cxx:477
 AliFMDHistCollector.cxx:478
 AliFMDHistCollector.cxx:479
 AliFMDHistCollector.cxx:480
 AliFMDHistCollector.cxx:481
 AliFMDHistCollector.cxx:482
 AliFMDHistCollector.cxx:483
 AliFMDHistCollector.cxx:484
 AliFMDHistCollector.cxx:485
 AliFMDHistCollector.cxx:486
 AliFMDHistCollector.cxx:487
 AliFMDHistCollector.cxx:488
 AliFMDHistCollector.cxx:489
 AliFMDHistCollector.cxx:490
 AliFMDHistCollector.cxx:491
 AliFMDHistCollector.cxx:492
 AliFMDHistCollector.cxx:493
 AliFMDHistCollector.cxx:494
 AliFMDHistCollector.cxx:495
 AliFMDHistCollector.cxx:496
 AliFMDHistCollector.cxx:497
 AliFMDHistCollector.cxx:498
 AliFMDHistCollector.cxx:499
 AliFMDHistCollector.cxx:500
 AliFMDHistCollector.cxx:501
 AliFMDHistCollector.cxx:502
 AliFMDHistCollector.cxx:503
 AliFMDHistCollector.cxx:504
 AliFMDHistCollector.cxx:505
 AliFMDHistCollector.cxx:506
 AliFMDHistCollector.cxx:507
 AliFMDHistCollector.cxx:508
 AliFMDHistCollector.cxx:509
 AliFMDHistCollector.cxx:510
 AliFMDHistCollector.cxx:511
 AliFMDHistCollector.cxx:512
 AliFMDHistCollector.cxx:513
 AliFMDHistCollector.cxx:514
 AliFMDHistCollector.cxx:515
 AliFMDHistCollector.cxx:516
 AliFMDHistCollector.cxx:517
 AliFMDHistCollector.cxx:518
 AliFMDHistCollector.cxx:519
 AliFMDHistCollector.cxx:520
 AliFMDHistCollector.cxx:521
 AliFMDHistCollector.cxx:522
 AliFMDHistCollector.cxx:523
 AliFMDHistCollector.cxx:524
 AliFMDHistCollector.cxx:525
 AliFMDHistCollector.cxx:526
 AliFMDHistCollector.cxx:527
 AliFMDHistCollector.cxx:528
 AliFMDHistCollector.cxx:529
 AliFMDHistCollector.cxx:530
 AliFMDHistCollector.cxx:531
 AliFMDHistCollector.cxx:532
 AliFMDHistCollector.cxx:533
 AliFMDHistCollector.cxx:534
 AliFMDHistCollector.cxx:535
 AliFMDHistCollector.cxx:536
 AliFMDHistCollector.cxx:537
 AliFMDHistCollector.cxx:538
 AliFMDHistCollector.cxx:539
 AliFMDHistCollector.cxx:540
 AliFMDHistCollector.cxx:541
 AliFMDHistCollector.cxx:542
 AliFMDHistCollector.cxx:543
 AliFMDHistCollector.cxx:544
 AliFMDHistCollector.cxx:545
 AliFMDHistCollector.cxx:546
 AliFMDHistCollector.cxx:547
 AliFMDHistCollector.cxx:548
 AliFMDHistCollector.cxx:549
 AliFMDHistCollector.cxx:550
 AliFMDHistCollector.cxx:551
 AliFMDHistCollector.cxx:552
 AliFMDHistCollector.cxx:553
 AliFMDHistCollector.cxx:554
 AliFMDHistCollector.cxx:555
 AliFMDHistCollector.cxx:556
 AliFMDHistCollector.cxx:557
 AliFMDHistCollector.cxx:558
 AliFMDHistCollector.cxx:559
 AliFMDHistCollector.cxx:560
 AliFMDHistCollector.cxx:561
 AliFMDHistCollector.cxx:562
 AliFMDHistCollector.cxx:563
 AliFMDHistCollector.cxx:564
 AliFMDHistCollector.cxx:565
 AliFMDHistCollector.cxx:566
 AliFMDHistCollector.cxx:567
 AliFMDHistCollector.cxx:568
 AliFMDHistCollector.cxx:569
 AliFMDHistCollector.cxx:570
 AliFMDHistCollector.cxx:571
 AliFMDHistCollector.cxx:572
 AliFMDHistCollector.cxx:573
 AliFMDHistCollector.cxx:574
 AliFMDHistCollector.cxx:575
 AliFMDHistCollector.cxx:576
 AliFMDHistCollector.cxx:577
 AliFMDHistCollector.cxx:578
 AliFMDHistCollector.cxx:579
 AliFMDHistCollector.cxx:580
 AliFMDHistCollector.cxx:581
 AliFMDHistCollector.cxx:582
 AliFMDHistCollector.cxx:583
 AliFMDHistCollector.cxx:584
 AliFMDHistCollector.cxx:585
 AliFMDHistCollector.cxx:586
 AliFMDHistCollector.cxx:587
 AliFMDHistCollector.cxx:588
 AliFMDHistCollector.cxx:589
 AliFMDHistCollector.cxx:590
 AliFMDHistCollector.cxx:591
 AliFMDHistCollector.cxx:592
 AliFMDHistCollector.cxx:593
 AliFMDHistCollector.cxx:594
 AliFMDHistCollector.cxx:595
 AliFMDHistCollector.cxx:596
 AliFMDHistCollector.cxx:597
 AliFMDHistCollector.cxx:598
 AliFMDHistCollector.cxx:599
 AliFMDHistCollector.cxx:600
 AliFMDHistCollector.cxx:601
 AliFMDHistCollector.cxx:602
 AliFMDHistCollector.cxx:603
 AliFMDHistCollector.cxx:604
 AliFMDHistCollector.cxx:605
 AliFMDHistCollector.cxx:606
 AliFMDHistCollector.cxx:607
 AliFMDHistCollector.cxx:608
 AliFMDHistCollector.cxx:609
 AliFMDHistCollector.cxx:610
 AliFMDHistCollector.cxx:611
 AliFMDHistCollector.cxx:612
 AliFMDHistCollector.cxx:613
 AliFMDHistCollector.cxx:614
 AliFMDHistCollector.cxx:615
 AliFMDHistCollector.cxx:616
 AliFMDHistCollector.cxx:617
 AliFMDHistCollector.cxx:618
 AliFMDHistCollector.cxx:619
 AliFMDHistCollector.cxx:620
 AliFMDHistCollector.cxx:621
 AliFMDHistCollector.cxx:622
 AliFMDHistCollector.cxx:623
 AliFMDHistCollector.cxx:624
 AliFMDHistCollector.cxx:625
 AliFMDHistCollector.cxx:626
 AliFMDHistCollector.cxx:627
 AliFMDHistCollector.cxx:628
 AliFMDHistCollector.cxx:629
 AliFMDHistCollector.cxx:630
 AliFMDHistCollector.cxx:631
 AliFMDHistCollector.cxx:632
 AliFMDHistCollector.cxx:633
 AliFMDHistCollector.cxx:634
 AliFMDHistCollector.cxx:635
 AliFMDHistCollector.cxx:636
 AliFMDHistCollector.cxx:637
 AliFMDHistCollector.cxx:638
 AliFMDHistCollector.cxx:639
 AliFMDHistCollector.cxx:640
 AliFMDHistCollector.cxx:641
 AliFMDHistCollector.cxx:642
 AliFMDHistCollector.cxx:643
 AliFMDHistCollector.cxx:644
 AliFMDHistCollector.cxx:645
 AliFMDHistCollector.cxx:646
 AliFMDHistCollector.cxx:647
 AliFMDHistCollector.cxx:648
 AliFMDHistCollector.cxx:649
 AliFMDHistCollector.cxx:650
 AliFMDHistCollector.cxx:651
 AliFMDHistCollector.cxx:652
 AliFMDHistCollector.cxx:653
 AliFMDHistCollector.cxx:654
 AliFMDHistCollector.cxx:655
 AliFMDHistCollector.cxx:656
 AliFMDHistCollector.cxx:657
 AliFMDHistCollector.cxx:658
 AliFMDHistCollector.cxx:659
 AliFMDHistCollector.cxx:660
 AliFMDHistCollector.cxx:661
 AliFMDHistCollector.cxx:662
 AliFMDHistCollector.cxx:663
 AliFMDHistCollector.cxx:664
 AliFMDHistCollector.cxx:665
 AliFMDHistCollector.cxx:666
 AliFMDHistCollector.cxx:667
 AliFMDHistCollector.cxx:668
 AliFMDHistCollector.cxx:669
 AliFMDHistCollector.cxx:670
 AliFMDHistCollector.cxx:671
 AliFMDHistCollector.cxx:672
 AliFMDHistCollector.cxx:673
 AliFMDHistCollector.cxx:674
 AliFMDHistCollector.cxx:675
 AliFMDHistCollector.cxx:676
 AliFMDHistCollector.cxx:677
 AliFMDHistCollector.cxx:678
 AliFMDHistCollector.cxx:679
 AliFMDHistCollector.cxx:680
 AliFMDHistCollector.cxx:681
 AliFMDHistCollector.cxx:682
 AliFMDHistCollector.cxx:683
 AliFMDHistCollector.cxx:684
 AliFMDHistCollector.cxx:685
 AliFMDHistCollector.cxx:686
 AliFMDHistCollector.cxx:687
 AliFMDHistCollector.cxx:688
 AliFMDHistCollector.cxx:689
 AliFMDHistCollector.cxx:690
 AliFMDHistCollector.cxx:691
 AliFMDHistCollector.cxx:692
 AliFMDHistCollector.cxx:693
 AliFMDHistCollector.cxx:694
 AliFMDHistCollector.cxx:695
 AliFMDHistCollector.cxx:696
 AliFMDHistCollector.cxx:697
 AliFMDHistCollector.cxx:698
 AliFMDHistCollector.cxx:699
 AliFMDHistCollector.cxx:700
 AliFMDHistCollector.cxx:701
 AliFMDHistCollector.cxx:702
 AliFMDHistCollector.cxx:703
 AliFMDHistCollector.cxx:704
 AliFMDHistCollector.cxx:705
 AliFMDHistCollector.cxx:706
 AliFMDHistCollector.cxx:707
 AliFMDHistCollector.cxx:708
 AliFMDHistCollector.cxx:709
 AliFMDHistCollector.cxx:710
 AliFMDHistCollector.cxx:711
 AliFMDHistCollector.cxx:712
 AliFMDHistCollector.cxx:713
 AliFMDHistCollector.cxx:714
 AliFMDHistCollector.cxx:715
 AliFMDHistCollector.cxx:716
 AliFMDHistCollector.cxx:717
 AliFMDHistCollector.cxx:718
 AliFMDHistCollector.cxx:719
 AliFMDHistCollector.cxx:720
 AliFMDHistCollector.cxx:721
 AliFMDHistCollector.cxx:722
 AliFMDHistCollector.cxx:723
 AliFMDHistCollector.cxx:724
 AliFMDHistCollector.cxx:725
 AliFMDHistCollector.cxx:726
 AliFMDHistCollector.cxx:727
 AliFMDHistCollector.cxx:728
 AliFMDHistCollector.cxx:729
 AliFMDHistCollector.cxx:730
 AliFMDHistCollector.cxx:731
 AliFMDHistCollector.cxx:732
 AliFMDHistCollector.cxx:733
 AliFMDHistCollector.cxx:734
 AliFMDHistCollector.cxx:735
 AliFMDHistCollector.cxx:736
 AliFMDHistCollector.cxx:737
 AliFMDHistCollector.cxx:738
 AliFMDHistCollector.cxx:739
 AliFMDHistCollector.cxx:740
 AliFMDHistCollector.cxx:741
 AliFMDHistCollector.cxx:742
 AliFMDHistCollector.cxx:743
 AliFMDHistCollector.cxx:744
 AliFMDHistCollector.cxx:745
 AliFMDHistCollector.cxx:746
 AliFMDHistCollector.cxx:747
 AliFMDHistCollector.cxx:748
 AliFMDHistCollector.cxx:749
 AliFMDHistCollector.cxx:750
 AliFMDHistCollector.cxx:751
 AliFMDHistCollector.cxx:752
 AliFMDHistCollector.cxx:753
 AliFMDHistCollector.cxx:754
 AliFMDHistCollector.cxx:755
 AliFMDHistCollector.cxx:756
 AliFMDHistCollector.cxx:757
 AliFMDHistCollector.cxx:758
 AliFMDHistCollector.cxx:759
 AliFMDHistCollector.cxx:760
 AliFMDHistCollector.cxx:761
 AliFMDHistCollector.cxx:762
 AliFMDHistCollector.cxx:763
 AliFMDHistCollector.cxx:764
 AliFMDHistCollector.cxx:765
 AliFMDHistCollector.cxx:766
 AliFMDHistCollector.cxx:767
 AliFMDHistCollector.cxx:768
 AliFMDHistCollector.cxx:769
 AliFMDHistCollector.cxx:770
 AliFMDHistCollector.cxx:771
 AliFMDHistCollector.cxx:772
 AliFMDHistCollector.cxx:773
 AliFMDHistCollector.cxx:774
 AliFMDHistCollector.cxx:775
 AliFMDHistCollector.cxx:776
 AliFMDHistCollector.cxx:777
 AliFMDHistCollector.cxx:778
 AliFMDHistCollector.cxx:779
 AliFMDHistCollector.cxx:780
 AliFMDHistCollector.cxx:781
 AliFMDHistCollector.cxx:782
 AliFMDHistCollector.cxx:783
 AliFMDHistCollector.cxx:784
 AliFMDHistCollector.cxx:785
 AliFMDHistCollector.cxx:786
 AliFMDHistCollector.cxx:787
 AliFMDHistCollector.cxx:788
 AliFMDHistCollector.cxx:789
 AliFMDHistCollector.cxx:790
 AliFMDHistCollector.cxx:791
 AliFMDHistCollector.cxx:792
 AliFMDHistCollector.cxx:793
 AliFMDHistCollector.cxx:794
 AliFMDHistCollector.cxx:795
 AliFMDHistCollector.cxx:796
 AliFMDHistCollector.cxx:797
 AliFMDHistCollector.cxx:798
 AliFMDHistCollector.cxx:799
 AliFMDHistCollector.cxx:800
 AliFMDHistCollector.cxx:801
 AliFMDHistCollector.cxx:802
 AliFMDHistCollector.cxx:803
 AliFMDHistCollector.cxx:804
 AliFMDHistCollector.cxx:805
 AliFMDHistCollector.cxx:806
 AliFMDHistCollector.cxx:807
 AliFMDHistCollector.cxx:808
 AliFMDHistCollector.cxx:809
 AliFMDHistCollector.cxx:810
 AliFMDHistCollector.cxx:811
 AliFMDHistCollector.cxx:812
 AliFMDHistCollector.cxx:813
 AliFMDHistCollector.cxx:814
 AliFMDHistCollector.cxx:815
 AliFMDHistCollector.cxx:816
 AliFMDHistCollector.cxx:817
 AliFMDHistCollector.cxx:818
 AliFMDHistCollector.cxx:819
 AliFMDHistCollector.cxx:820
 AliFMDHistCollector.cxx:821
 AliFMDHistCollector.cxx:822
 AliFMDHistCollector.cxx:823
 AliFMDHistCollector.cxx:824
 AliFMDHistCollector.cxx:825
 AliFMDHistCollector.cxx:826
 AliFMDHistCollector.cxx:827
 AliFMDHistCollector.cxx:828
 AliFMDHistCollector.cxx:829
 AliFMDHistCollector.cxx:830
 AliFMDHistCollector.cxx:831
 AliFMDHistCollector.cxx:832
 AliFMDHistCollector.cxx:833
 AliFMDHistCollector.cxx:834
 AliFMDHistCollector.cxx:835
 AliFMDHistCollector.cxx:836
 AliFMDHistCollector.cxx:837
 AliFMDHistCollector.cxx:838
 AliFMDHistCollector.cxx:839
 AliFMDHistCollector.cxx:840
 AliFMDHistCollector.cxx:841
 AliFMDHistCollector.cxx:842
 AliFMDHistCollector.cxx:843
 AliFMDHistCollector.cxx:844
 AliFMDHistCollector.cxx:845
 AliFMDHistCollector.cxx:846
 AliFMDHistCollector.cxx:847
 AliFMDHistCollector.cxx:848
 AliFMDHistCollector.cxx:849
 AliFMDHistCollector.cxx:850
 AliFMDHistCollector.cxx:851
 AliFMDHistCollector.cxx:852
 AliFMDHistCollector.cxx:853
 AliFMDHistCollector.cxx:854
 AliFMDHistCollector.cxx:855
 AliFMDHistCollector.cxx:856
 AliFMDHistCollector.cxx:857
 AliFMDHistCollector.cxx:858
 AliFMDHistCollector.cxx:859
 AliFMDHistCollector.cxx:860
 AliFMDHistCollector.cxx:861
 AliFMDHistCollector.cxx:862
 AliFMDHistCollector.cxx:863
 AliFMDHistCollector.cxx:864
 AliFMDHistCollector.cxx:865
 AliFMDHistCollector.cxx:866
 AliFMDHistCollector.cxx:867
 AliFMDHistCollector.cxx:868
 AliFMDHistCollector.cxx:869
 AliFMDHistCollector.cxx:870
 AliFMDHistCollector.cxx:871
 AliFMDHistCollector.cxx:872
 AliFMDHistCollector.cxx:873
 AliFMDHistCollector.cxx:874
 AliFMDHistCollector.cxx:875
 AliFMDHistCollector.cxx:876
 AliFMDHistCollector.cxx:877
 AliFMDHistCollector.cxx:878
 AliFMDHistCollector.cxx:879
 AliFMDHistCollector.cxx:880
 AliFMDHistCollector.cxx:881
 AliFMDHistCollector.cxx:882
 AliFMDHistCollector.cxx:883
 AliFMDHistCollector.cxx:884
 AliFMDHistCollector.cxx:885
 AliFMDHistCollector.cxx:886
 AliFMDHistCollector.cxx:887
 AliFMDHistCollector.cxx:888
 AliFMDHistCollector.cxx:889
 AliFMDHistCollector.cxx:890
 AliFMDHistCollector.cxx:891
 AliFMDHistCollector.cxx:892
 AliFMDHistCollector.cxx:893
 AliFMDHistCollector.cxx:894
 AliFMDHistCollector.cxx:895
 AliFMDHistCollector.cxx:896
 AliFMDHistCollector.cxx:897
 AliFMDHistCollector.cxx:898
 AliFMDHistCollector.cxx:899
 AliFMDHistCollector.cxx:900
 AliFMDHistCollector.cxx:901
 AliFMDHistCollector.cxx:902
 AliFMDHistCollector.cxx:903
 AliFMDHistCollector.cxx:904
 AliFMDHistCollector.cxx:905
 AliFMDHistCollector.cxx:906
 AliFMDHistCollector.cxx:907
 AliFMDHistCollector.cxx:908
 AliFMDHistCollector.cxx:909
 AliFMDHistCollector.cxx:910
 AliFMDHistCollector.cxx:911
 AliFMDHistCollector.cxx:912
 AliFMDHistCollector.cxx:913
 AliFMDHistCollector.cxx:914
 AliFMDHistCollector.cxx:915
 AliFMDHistCollector.cxx:916
 AliFMDHistCollector.cxx:917
 AliFMDHistCollector.cxx:918
 AliFMDHistCollector.cxx:919
 AliFMDHistCollector.cxx:920
 AliFMDHistCollector.cxx:921
 AliFMDHistCollector.cxx:922
 AliFMDHistCollector.cxx:923
 AliFMDHistCollector.cxx:924
 AliFMDHistCollector.cxx:925
 AliFMDHistCollector.cxx:926
 AliFMDHistCollector.cxx:927
 AliFMDHistCollector.cxx:928
 AliFMDHistCollector.cxx:929
 AliFMDHistCollector.cxx:930
 AliFMDHistCollector.cxx:931
 AliFMDHistCollector.cxx:932
 AliFMDHistCollector.cxx:933
 AliFMDHistCollector.cxx:934
 AliFMDHistCollector.cxx:935
 AliFMDHistCollector.cxx:936
 AliFMDHistCollector.cxx:937
 AliFMDHistCollector.cxx:938
 AliFMDHistCollector.cxx:939
 AliFMDHistCollector.cxx:940
 AliFMDHistCollector.cxx:941
 AliFMDHistCollector.cxx:942
 AliFMDHistCollector.cxx:943
 AliFMDHistCollector.cxx:944
 AliFMDHistCollector.cxx:945
 AliFMDHistCollector.cxx:946
 AliFMDHistCollector.cxx:947
 AliFMDHistCollector.cxx:948
 AliFMDHistCollector.cxx:949
 AliFMDHistCollector.cxx:950
 AliFMDHistCollector.cxx:951
 AliFMDHistCollector.cxx:952
 AliFMDHistCollector.cxx:953
 AliFMDHistCollector.cxx:954
 AliFMDHistCollector.cxx:955
 AliFMDHistCollector.cxx:956
 AliFMDHistCollector.cxx:957
 AliFMDHistCollector.cxx:958
 AliFMDHistCollector.cxx:959
 AliFMDHistCollector.cxx:960
 AliFMDHistCollector.cxx:961
 AliFMDHistCollector.cxx:962
 AliFMDHistCollector.cxx:963
 AliFMDHistCollector.cxx:964
 AliFMDHistCollector.cxx:965
 AliFMDHistCollector.cxx:966
 AliFMDHistCollector.cxx:967
 AliFMDHistCollector.cxx:968
 AliFMDHistCollector.cxx:969
 AliFMDHistCollector.cxx:970
 AliFMDHistCollector.cxx:971
 AliFMDHistCollector.cxx:972
 AliFMDHistCollector.cxx:973
 AliFMDHistCollector.cxx:974
 AliFMDHistCollector.cxx:975
 AliFMDHistCollector.cxx:976
 AliFMDHistCollector.cxx:977
 AliFMDHistCollector.cxx:978
 AliFMDHistCollector.cxx:979
 AliFMDHistCollector.cxx:980
 AliFMDHistCollector.cxx:981
 AliFMDHistCollector.cxx:982
 AliFMDHistCollector.cxx:983
 AliFMDHistCollector.cxx:984
 AliFMDHistCollector.cxx:985
 AliFMDHistCollector.cxx:986
 AliFMDHistCollector.cxx:987
 AliFMDHistCollector.cxx:988
 AliFMDHistCollector.cxx:989
 AliFMDHistCollector.cxx:990
 AliFMDHistCollector.cxx:991
 AliFMDHistCollector.cxx:992
 AliFMDHistCollector.cxx:993
 AliFMDHistCollector.cxx:994
 AliFMDHistCollector.cxx:995
 AliFMDHistCollector.cxx:996
 AliFMDHistCollector.cxx:997
 AliFMDHistCollector.cxx:998
 AliFMDHistCollector.cxx:999
 AliFMDHistCollector.cxx:1000
 AliFMDHistCollector.cxx:1001
 AliFMDHistCollector.cxx:1002
 AliFMDHistCollector.cxx:1003
 AliFMDHistCollector.cxx:1004
 AliFMDHistCollector.cxx:1005
 AliFMDHistCollector.cxx:1006
 AliFMDHistCollector.cxx:1007
 AliFMDHistCollector.cxx:1008
 AliFMDHistCollector.cxx:1009
 AliFMDHistCollector.cxx:1010
 AliFMDHistCollector.cxx:1011
 AliFMDHistCollector.cxx:1012