ROOT logo
//
// Class to do the sharing correction.  That is, a filter that merges 
// adjacent strip signals presumably originating from a single particle 
// that impinges on the detector in such a way that it deposite energy 
// into two or more strips. 
//
// Input: 
//    - AliESDFMD object  - from reconstruction
//
// Output: 
//    - AliESDFMD object  - copy of input, but with signals merged 
//
// Corrections used: 
//    - AliFMDCorrELossFit
//
// Histograms: 
//    - For each ring (FMD1i, FMD2i, FMD2o, FMD3i, FMD3o) the distribution of 
//      signals before and after the filter.  
//    - For each ring (see above), an array of distributions of number of 
//      hit strips for each vertex bin (if enabled - see Init method)
// 
//
//
#include "AliFMDSharingFilter.h"
#include "AliFMDStripIndex.h"
#include <AliESDFMD.h>
#include <TAxis.h>
#include <TList.h>
#include <TH1.h>
#include <TMath.h>
#include "AliForwardCorrectionManager.h"
#include "AliFMDCorrELossFit.h"
#include <AliLog.h>
#include <TROOT.h>
#include <THStack.h>
#include <TParameter.h>
#include <iostream>
#include <iomanip>

ClassImp(AliFMDSharingFilter)
#if 0
; // This is for Emacs
#endif 

#define DBG(L,M)							\
  do { if (L>fDebug)break; std::cout << (M) << std::flush;} while(false) 
#define DBGL(L,M)							\
  do { if (L>fDebug)break; std::cout << (M) << std::endl;} while(false) 
			      


//____________________________________________________________________
AliFMDSharingFilter::AliFMDSharingFilter()
  : TNamed(), 
    fRingHistos(),
    fCorrectAngles(kFALSE), 
    // fSummed(0),
    fHighCuts(0),
    fLowCuts(0),
    // fOper(0),
    fDebug(0),
    fZeroSharedHitsBelowThreshold(false),
    fLCuts(),
    fHCuts(),
    fUseSimpleMerging(false),
    fThreeStripSharing(true),
    fMergingDisabled(false),
    fIgnoreESDForAngleCorrection(false)
{
  // 
  // Default Constructor - do not use 
  //
  DGUARD(fDebug,1, "Default CTOR for AliFMDSharingFilter");
}

//____________________________________________________________________
AliFMDSharingFilter::AliFMDSharingFilter(const char* title)
  : TNamed("fmdSharingFilter", title), 
    fRingHistos(), 
    fCorrectAngles(kFALSE), 
    // fSummed(0),
    fHighCuts(0),
    fLowCuts(0),
    // fOper(0),
    fDebug(0),
    fZeroSharedHitsBelowThreshold(false),
    fLCuts(),
    fHCuts(),
    fUseSimpleMerging(false),
    fThreeStripSharing(true),
    fMergingDisabled(false),
    fIgnoreESDForAngleCorrection(false)
{
  // 
  // Constructor 
  // 
  // Parameters:
  //    title Title of object  - not significant 
  //
  DGUARD(fDebug,1, "Named CTOR for AliFMDSharingFilter: %s", title);
  fRingHistos.SetName(GetName());
  fRingHistos.SetOwner();
  
  fRingHistos.Add(new RingHistos(1, 'I'));
  fRingHistos.Add(new RingHistos(2, 'I'));
  fRingHistos.Add(new RingHistos(2, 'O'));
  fRingHistos.Add(new RingHistos(3, 'I'));
  fRingHistos.Add(new RingHistos(3, 'O'));

  fHCuts.Set(AliFMDMultCuts::kLandauSigmaWidth, 1);
  fLCuts.Set(AliFMDMultCuts::kFixed, .15);

  // fExtraDead.Reset(-1);
}

//____________________________________________________________________
AliFMDSharingFilter::~AliFMDSharingFilter()
{
  // 
  // Destructor
  //
  DGUARD(fDebug,3, "DTOR for AliFMDSharingFilter");
  // fRingHistos.Delete();
}

//____________________________________________________________________
AliFMDSharingFilter::RingHistos*
AliFMDSharingFilter::GetRingHistos(UShort_t d, Char_t r) const
{
  // 
  // Get the ring histogram container 
  // 
  // Parameters:
  //    d Detector
  //    r Ring 
  // 
  // Return:
  //    Ring histogram container 
  //
  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;
  }
  if (idx < 0 || idx >= fRingHistos.GetEntries()) return 0;
  
  return static_cast<RingHistos*>(fRingHistos.At(idx));
}

//____________________________________________________________________
void
AliFMDSharingFilter::SetupForData(const TAxis& axis)
{
  // Initialise - called on first event
  DGUARD(fDebug,1, "Initialize for AliFMDSharingFilter");
  AliForwardCorrectionManager& fcm  = AliForwardCorrectionManager::Instance();
  const AliFMDCorrELossFit*    fits = fcm.GetELossFit();

  // Get the high cut.  The high cut is defined as the 
  // most-probably-value peak found from the energy distributions, minus 
  // 2 times the width of the corresponding Landau.
  
  TAxis eAxis(axis.GetNbins(),
	      axis.GetXmin(),
	      axis.GetXmax());
  if(fits) 
    eAxis.Set(fits->GetEtaAxis().GetNbins(), 
	      fits->GetEtaAxis().GetXmin(),
	      fits->GetEtaAxis().GetXmax());

  UShort_t nEta = eAxis.GetNbins();
	
  fHighCuts->SetBins(nEta, eAxis.GetXmin(), eAxis.GetXmax(), 5, .5, 5.5);
  fHighCuts->GetYaxis()->SetBinLabel(1, "FMD1i");
  fHighCuts->GetYaxis()->SetBinLabel(2, "FMD2i");
  fHighCuts->GetYaxis()->SetBinLabel(3, "FMD2o");
  fHighCuts->GetYaxis()->SetBinLabel(4, "FMD3i");
  fHighCuts->GetYaxis()->SetBinLabel(5, "FMD3o");

  fLowCuts->SetBins(nEta, eAxis.GetXmin(), eAxis.GetXmax(), 5, .5, 5.5);
  fLowCuts->GetYaxis()->SetBinLabel(1, "FMD1i");
  fLowCuts->GetYaxis()->SetBinLabel(2, "FMD2i");
  fLowCuts->GetYaxis()->SetBinLabel(3, "FMD2o");
  fLowCuts->GetYaxis()->SetBinLabel(4, "FMD3i");
  fLowCuts->GetYaxis()->SetBinLabel(5, "FMD3o");

  // Cache our cuts in histograms 
  fLCuts.FillHistogram(fLowCuts);
  fHCuts.FillHistogram(fHighCuts);
}

//____________________________________________________________________
#define ETA2COS(ETA)						\
  TMath::Cos(2*TMath::ATan(TMath::Exp(-TMath::Abs(ETA))))

Bool_t
AliFMDSharingFilter::Filter(const AliESDFMD& input, 
			    Bool_t           /*lowFlux*/,
			    AliESDFMD&       output, 
			    Double_t         /*zvtx*/)
{
  // 
  // Filter the input AliESDFMD object
  // 
  // Parameters:
  //    input     Input 
  //    lowFlux   If this is a low-flux event 
  //    output    Output AliESDFMD object 
  // 
  // Return:
  //    True on success, false otherwise 
  //
  DGUARD(fDebug,1, "Filter event in AliFMDSharingFilter");
  output.Clear();
  TIter    next(&fRingHistos);
  RingHistos* o      = 0;
  while ((o = static_cast<RingHistos*>(next()))) o->Clear();

  Int_t nSingle    = 0;
  Int_t nDouble    = 0;
  Int_t nTriple    = 0;

  for(UShort_t d = 1; d <= 3; d++) {
    Int_t nRings = (d == 1 ? 1 : 2);
    for (UShort_t q = 0; q < nRings; q++) {
      Char_t      r      = (q == 0 ? 'I' : 'O');
      UShort_t    nsec   = (q == 0 ?  20 :  40);
      UShort_t    nstr   = (q == 0 ? 512 : 256);
      RingHistos* histos = GetRingHistos(d, r);
      
      for(UShort_t s = 0; s < nsec;  s++) {	
	// `used' flags if the _current_ strip was used by _previous_ 
	// iteration. 
	Bool_t   used            = kFALSE;
	// `eTotal' contains the current sum of merged signals so far 
	Double_t eTotal          = -1;
	// Int_t    nDistanceBefore = -1;
	// Int_t    nDistanceAfter  = -1;
	// `twoLow' flags if we saw two consequtive strips with a 
	// signal between the two cuts. 
	Bool_t   twoLow          = kFALSE;
        Int_t    nStripsAboveCut = 0;
	
	for(UShort_t t = 0; t < nstr; t++) {
	  // nDistanceBefore++;
	  // nDistanceAfter++;

	  output.SetMultiplicity(d,r,s,t,0.);
	  Float_t mult         = SignalInStrip(input,d,r,s,t);
	  Float_t multNext     = (t<nstr-1) ? SignalInStrip(input,d,r,s,t+1) :0;
	  Float_t multNextNext = (t<nstr-2) ? SignalInStrip(input,d,r,s,t+2) :0;
	  if (multNext     ==  AliESDFMD::kInvalidMult) multNext     = 0;
	  if (multNextNext ==  AliESDFMD::kInvalidMult) multNextNext = 0;
	  if(!fThreeStripSharing) multNextNext = 0;

	  // Get the pseudo-rapidity 
	  Double_t eta = input.Eta(d,r,s,t);
	  Double_t phi = input.Phi(d,r,s,t) * TMath::Pi() / 180.;
	  if (s == 0) output.SetEta(d,r,s,t,eta);
	  
	  // Keep dead-channel information - either from the ESD (but
	  // see above for older data) or from the settings in the
	  // ForwardAODConfig.C file.
	  if (mult == AliESDFMD::kInvalidMult) {
	    output.SetMultiplicity(d,r,s,t,AliESDFMD::kInvalidMult);
	    histos->fBefore->Fill(-1);
	    mult = AliESDFMD::kInvalidMult;
	  }
	  
	  Double_t lowCut  = GetLowCut(d, r, eta);
	  Double_t highCut = GetHighCut(d, r, eta, false);
	  if (mult != AliESDFMD::kInvalidMult && mult > lowCut) {
	    // Always fill the ESD sum histogram 
	    histos->fSumESD->Fill(eta, phi, mult);
	  }

	  // If no signal or dead strip, go on. 
	  if (mult == AliESDFMD::kInvalidMult || mult == 0) {
	    if (mult == 0) histos->fSum->Fill(eta,phi,mult);
	    // Flush a possible signal 
	    if (eTotal > 0 && t > 0) 
	      output.SetMultiplicity(d,r,s,t-1,eTotal);
	    // Reset states so we do not try to merge over a dead strip. 
	    eTotal = -1;
	    used   = false;
	    twoLow = false;
	    if (t > 0)	
	      histos->fNConsecutive->Fill(nStripsAboveCut);
	    if (mult == AliESDFMD::kInvalidMult)
	      // Why not fill immidiately here? 
	      nStripsAboveCut = -1;
	    else
	      // Why not fill immidiately here? 
	      nStripsAboveCut = 0;	
	    continue;
	  }

	  // Fill the diagnostics histogram 
	  histos->fBefore->Fill(mult);

	  Double_t mergedEnergy = mult;
	  // it seems to me that this logic could be condensed a bit
          if(mult > lowCut) {		  
	    if(nStripsAboveCut < 1) {
	      if(t > 0)
		histos->fNConsecutive->Fill(nStripsAboveCut);
	      nStripsAboveCut=0;
	    }
	    nStripsAboveCut++;
	  }	
	  else {
	    if (t > 0)
	      histos->fNConsecutive->Fill(nStripsAboveCut);
	    nStripsAboveCut=0;
	  }		

	  if (!fMergingDisabled) {
	    mergedEnergy = 0;

	    // The current sum
	    Float_t etot = 0;
	  
	    // Fill in neighbor information
	    if (t < nstr-1) histos->fNeighborsBefore->Fill(mult,multNext);

	    Bool_t thisValid = mult     > lowCut;
	    Bool_t nextValid = multNext > lowCut;
	    Bool_t thisSmall = mult     < highCut;
	    Bool_t nextSmall = multNext < highCut;
	  
	    // If this strips signal is above the high cut, reset distance
	    // if (!thisSmall) {
	    //    histos->fDistanceBefore->Fill(nDistanceBefore);
	    //    nDistanceBefore = -1;
	    // }
	  
	    // If the total signal in the past 1 or 2 strips are non-zero
	    // we need to check 
	    if (eTotal > 0) {
	      // Here, we have already flagged one strip as a candidate 
	    
	      // If 3-strip merging is enabled, then check the next 
	      // strip to see that it falls within cut, or if we have 
	      // two low signals 
	      if (fThreeStripSharing && nextValid && (nextSmall || twoLow)) {
		eTotal = eTotal + multNext;
		used = kTRUE;
		histos->fTriple->Fill(eTotal);
		nTriple++;
		twoLow = kFALSE;
	      }
	      // Otherwise, we got a double hit before, and that 
	      // should be stored. 
	      else {
		used = kFALSE;
		histos->fDouble->Fill(eTotal);
		nDouble++;
	      }
	      // Store energy loss and reset sum 
	      etot   = eTotal;
	      eTotal = -1;
	    } // if (eTotal>0)
	    else {
	      // If we have no current sum 
	    
	      // Check if this is marked as used, and if so, continue
	      if (used) {used = kFALSE; continue; }
	    
	      // If the signal is abvoe the cut, set current
	      if (thisValid) etot = mult;
	    
	      // If the signal is abiove the cut, and so is the next 
	      // signal and either of them are below the high cut, 
	      if (thisValid  && nextValid  && (thisSmall || nextSmall)) {
	      
		// If this is below the high cut, and the next is too, then 
		// we have two low signals 
		if (thisSmall && nextSmall) twoLow = kTRUE;
	      
		// If this signal is bigger than the next, and the 
		// one after that is below the low-cut, then update 
		// the sum
		if (mult>multNext && multNextNext < lowCut) {
		  etot = mult + multNext;
		  used = kTRUE;
		  histos->fDouble->Fill(etot);
		  nDouble++;
		}
		// Otherwise, we may need to merge with a third strip
		else {
		  etot   = 0;
		  eTotal = mult + multNext;
		}
	      }
	      // This is a signle hit 
	      else if(etot > 0) {
		histos->fSingle->Fill(etot);
		histos->fSinglePerStrip->Fill(etot,t);
		nSingle++;
	      }
	    } // else if (etotal >= 0)
	  
	    mergedEnergy = etot;
	    // if (mergedEnergy > GetHighCut(d, r, eta ,false)) {
	    //   histos->fDistanceAfter->Fill(nDistanceAfter);
	    //   nDistanceAfter    = -1;
	    // }
	    //if(mult>0 && multNext >0)
	    //  std::cout<<mult<<"  "<<multNext<<"  "<<mergedEnergy<<std::endl;
	  } // if (!fMergingDisabled)

	  if (!fCorrectAngles)
	    mergedEnergy = AngleCorrect(mergedEnergy, eta);
	  // if (mergedEnergy > 0) histos->Incr();
	  
	  if (t != 0) 
	    histos->fNeighborsAfter->Fill(output.Multiplicity(d,r,s,t-1), 
					  mergedEnergy);
	  histos->fBeforeAfter->Fill(mult, mergedEnergy);
	  if(mergedEnergy > 0)
	    histos->fAfter->Fill(mergedEnergy);
	  histos->fSum->Fill(eta,phi,mergedEnergy);
	  
	  output.SetMultiplicity(d,r,s,t,mergedEnergy);
	} // for strip
	histos->fNConsecutive->Fill(nStripsAboveCut); // fill the last sector 
      } // for sector
    } // for ring 
  } // for detector
  DMSG(fDebug, 3,"single=%9d, double=%9d, triple=%9d", 
       nSingle, nDouble, nTriple);
  next.Reset();
  // while ((o = static_cast<RingHistos*>(next()))) o->Finish();

  return kTRUE;
}

//_____________________________________________________________________
Double_t 
AliFMDSharingFilter::SignalInStrip(const AliESDFMD& input, 
				   UShort_t         d,
				   Char_t           r,
				   UShort_t         s,
				   UShort_t         t) const
{
  // 
  // Get the signal in a strip 
  // 
  // Parameters:
  //    fmd   ESD object
  //    d     Detector
  //    r     Ring 
  //    s     Sector 
  //    t     Strip
  // 
  // Return:
  //    The energy signal 
  //
  Double_t mult = input.Multiplicity(d,r,s,t);
  // In case of 
  //  - bad value (invalid or 0) 
  //  - we want angle corrected and data is 
  //  - we don't want angle corrected and data isn't 
  // just return read value  
  if (mult == AliESDFMD::kInvalidMult               || 
      mult == 0                                     ||
      (fCorrectAngles && (fIgnoreESDForAngleCorrection || input.IsAngleCorrected())) || 
      (!fCorrectAngles && !fIgnoreESDForAngleCorrection && !input.IsAngleCorrected()))
    return mult;

  // If we want angle corrected data, correct it, 
  // otherwise de-correct it 
  if (fCorrectAngles) mult = AngleCorrect(mult, input.Eta(d,r,s,t));
  else                mult = DeAngleCorrect(mult, input.Eta(d,r,s,t));
  return mult;
}

namespace {
  Double_t Rng2Cut(UShort_t d, Char_t r, Double_t eta, TH2* h) {
    Double_t ret = 1024;
    Int_t ybin = 0;							
    switch(d) {								
    case 1: ybin = 1; break;						
    case 2: ybin = (r=='i' || r=='I') ? 2 : 3; break;			
    case 3: ybin = (r=='i' || r=='I') ? 4 : 5; break;			
    default: return ret;
    }									
    Int_t xbin = h->GetXaxis()->FindBin(eta);				
    if (xbin < 1 && xbin > h->GetXaxis()->GetNbins()) return ret;
    ret = h->GetBinContent(xbin,ybin);					
    return ret;
  }
}
    
  //_____________________________________________________________________
Double_t 
AliFMDSharingFilter::GetLowCut(UShort_t d, Char_t r, Double_t eta) const
{
  //
  // Get the low cut.  Normally, the low cut is taken to be the lower
  // value of the fit range used when generating the energy loss fits.
  // However, if fLowCut is set (using SetLowCit) to a value greater
  // than 0, then that value is used.
  //
  return Rng2Cut(d, r, eta, fLowCuts);
  // return fLCuts.GetMultCut(d,r,eta,false);
}
			
//_____________________________________________________________________
Double_t 
AliFMDSharingFilter::GetHighCut(UShort_t d, Char_t r, 
				Double_t eta, Bool_t /*errors*/) const
{
  //
  // Get the high cut.  The high cut is defined as the 
  // most-probably-value peak found from the energy distributions, minus 
  // 2 times the width of the corresponding Landau.
  //
  return Rng2Cut(d, r, eta, fHighCuts);
  // return fHCuts.GetMultCut(d,r,eta,errors); 
}

//____________________________________________________________________
Double_t
AliFMDSharingFilter::AngleCorrect(Double_t mult, Double_t eta) const
{
  // 
  // Angle correct the signal 
  // 
  // Parameters:
  //    mult Angle Un-corrected Signal 
  //    eta  Pseudo-rapidity 
  // 
  // Return:
  //    Angle corrected signal 
  //
  Double_t theta =  2 * TMath::ATan(TMath::Exp(-eta));
  if (eta < 0) theta -= TMath::Pi();
  return mult * TMath::Cos(theta);
}
//____________________________________________________________________
Double_t
AliFMDSharingFilter::DeAngleCorrect(Double_t mult, Double_t eta) const
{
  // 
  // Angle de-correct the signal 
  // 
  // Parameters:
  //    mult Angle corrected Signal 
  //    eta  Pseudo-rapidity 
  // 
  // Return:
  //    Angle un-corrected signal 
  //
  Double_t theta =  2 * TMath::ATan(TMath::Exp(-eta));
  if (eta < 0) theta -= TMath::Pi();
  return mult / TMath::Cos(theta);
}

//____________________________________________________________________
void
AliFMDSharingFilter::Terminate(const TList* dir, TList* output, Int_t nEvents)
{
  // 
  // Scale the histograms to the total number of events 
  // 
  // Parameters:
  //    dir     Where the output is 
  //    nEvents Number of events 
  //
  DGUARD(fDebug,1, "Scale histograms in AliFMDSharingFilter");
  if (nEvents <= 0) return;
  TList* d = static_cast<TList*>(dir->FindObject(GetName()));
  if (!d) return;

  TList* out = new TList;
  out->SetName(d->GetName());
  out->SetOwner();

  TParameter<int>* nFiles = 
    static_cast<TParameter<int>*>(d->FindObject("nFiles"));

  TH2* lowCuts  = static_cast<TH2*>(d->FindObject("lowCuts"));
  TH2* highCuts = static_cast<TH2*>(d->FindObject("highCuts"));
  if (lowCuts && nFiles) {
    TH1* oh = static_cast<TH1*>(lowCuts->Clone());
    oh->Scale(1. / nFiles->GetVal());	
    oh->SetBit(BIT(20));
    out->Add(oh);
  }
  else 
    AliWarning("low cuts histogram not found in input list");
  if (highCuts && nFiles) {
    TH1* oh = static_cast<TH1*>(highCuts->Clone());
    oh->Scale(1. / nFiles->GetVal());
    oh->SetBit(BIT(20));
    out->Add(oh);
  }
  else 
    AliWarning("high cuts histogram not found in input list");
  
  TIter    next(&fRingHistos);
  RingHistos* o = 0;
  THStack* sums = new THStack("sums", "Sum of ring signals");
  THStack* sumsESD = new THStack("sumsESD", "Sum of ring ESD signals");
  while ((o = static_cast<RingHistos*>(next()))) {
    o->Terminate(d, nEvents);
    if (!o->fSum) { 
      Warning("Terminate", "No sum histogram found for ring %s", o->GetName());
      continue;
    }
    TH1D* sum = o->fSum->ProjectionX(o->GetName(), 1, o->fSum->GetNbinsY(),"e");
    sum->Scale(1., "width");
    sum->SetTitle(o->GetName());
    sum->SetDirectory(0);
    sum->SetYTitle("#sum_{c} #Delta/#Delta_{mip}");
    sums->Add(sum);


    if (o->fSumESD) { 
      sum = o->fSumESD->ProjectionX(o->GetName(), 1, o->fSumESD->GetNbinsY(),"e");
      sum->Scale(1., "width");
      sum->SetTitle(o->GetName());
      sum->SetDirectory(0);
      sum->SetYTitle("#sum_{s} #Delta/#Delta_{mip}");
      sumsESD->Add(sum);
    }
  }
  out->Add(sums);
  out->Add(sumsESD);
  output->Add(out);
}

//____________________________________________________________________
void
AliFMDSharingFilter::CreateOutputObjects(TList* dir)
{
  // 
  // Define the output histograms.  These are put in a sub list of the
  // passed list.   The histograms are merged before the parent task calls 
  // AliAnalysisTaskSE::Terminate 
  // 
  // Parameters:
  //    dir Directory to add to 
  //
  DGUARD(fDebug,1, "Define output in AliFMDSharingFilter");
  TList* d = new TList;
  d->SetName(GetName());
  dir->Add(d);

#if 0
  fSummed = new TH2I("operations", "Strip operations", 
		     kMergedInto, kNone-.5, kMergedInto+.5,
		     51201, -.5, 51200.5);
  fSummed->SetXTitle("Operation");
  fSummed->SetYTitle("# of strips");
  fSummed->SetZTitle("Events");
  fSummed->GetXaxis()->SetBinLabel(kNone,            "None");
  fSummed->GetXaxis()->SetBinLabel(kCandidate,       "Candidate");
  fSummed->GetXaxis()->SetBinLabel(kMergedWithOther, "Merged w/other");
  fSummed->GetXaxis()->SetBinLabel(kMergedInto,      "Merged into");
  fSummed->SetDirectory(0);
  d->Add(fSummed);
#endif

  fHighCuts = new TH2D("highCuts", "High cuts used", 1,0,1, 1,0,1);
  fHighCuts->SetXTitle("#eta");
  fHighCuts->SetDirectory(0);
  d->Add(fHighCuts);

  fLowCuts = new TH2D("lowCuts", "Low cuts used", 1,0,1, 1,0,1);
  fLowCuts->SetXTitle("#eta");
  fLowCuts->SetDirectory(0);
  d->Add(fLowCuts);

  // d->Add(lowCut);
  // d->Add(nXi);
  // d->Add(sigma);
  d->Add(AliForwardUtil::MakeParameter("angle", fCorrectAngles));
  d->Add(AliForwardUtil::MakeParameter("lowSignal", 
				       fZeroSharedHitsBelowThreshold));
  d->Add(AliForwardUtil::MakeParameter("simple", fUseSimpleMerging));
  d->Add(AliForwardUtil::MakeParameter("sumThree", fThreeStripSharing));
  d->Add(AliForwardUtil::MakeParameter("disabled", fMergingDisabled));
  TParameter<int>* nFiles = new TParameter<int>("nFiles", 1);
  nFiles->SetMergeMode('+');
  d->Add(nFiles);

  fLCuts.Output(d,"lCuts");
  fHCuts.Output(d,"hCuts");

  TIter    next(&fRingHistos);
  RingHistos* o = 0;
  while ((o = static_cast<RingHistos*>(next()))) {
    o->CreateOutputObjects(d);
  }
}
#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
AliFMDSharingFilter::Print(Option_t* /*option*/) const
{
  // 
  // Print information
  // 
  // Parameters:
  //    option Not used 
  //
  AliForwardUtil::PrintTask(*this);
  gROOT->IncreaseDirLevel();

  PFB("Use corrected angles",  fCorrectAngles);
  PFB("Zero below threshold",  fZeroSharedHitsBelowThreshold);
  PFB("Use simple sharing",    fUseSimpleMerging);
  PFB("Allow 3 strip merging", fThreeStripSharing);
  PF("Low cuts",	"");
  fLCuts.Print();
  PF("High cuts",	"");
  fHCuts.Print();
  gROOT->DecreaseDirLevel();
}
  
//====================================================================
AliFMDSharingFilter::RingHistos::RingHistos()
  : AliForwardUtil::RingHistos(), 
    fBefore(0), 
    fAfter(0), 
    fSingle(0),
    fDouble(0),
    fTriple(0),
    fSinglePerStrip(0),
    // fDistanceBefore(0),
    // fDistanceAfter(0),
    fBeforeAfter(0),
    fNeighborsBefore(0),
    fNeighborsAfter(0),
    fSumESD(0),
    fSum(0),
    fNConsecutive(0)	
     // ,
    // fHits(0),
    // fNHits(0)
{
  // 
  // Default CTOR
  //

}

//____________________________________________________________________
AliFMDSharingFilter::RingHistos::RingHistos(UShort_t d, Char_t r)
  : AliForwardUtil::RingHistos(d,r), 
    fBefore(0), 
    fAfter(0),
    fSingle(0),
    fDouble(0),
    fTriple(0),    
    fSinglePerStrip(0),
    // fDistanceBefore(0),
    // fDistanceAfter(0),
    fBeforeAfter(0),
    fNeighborsBefore(0),
    fNeighborsAfter(0),
    fSumESD(0),
    fSum(0),
    fNConsecutive(0)	
     //,
    // fHits(0),
    // fNHits(0)
{
  // 
  // Constructor
  // 
  // Parameters:
  //    d detector
  //    r ring 
  //
  fBefore = new TH1D("esdEloss", Form("Energy loss in %s (reconstruction)", 
				      GetName()), 640, -1, 15);
  fBefore->SetXTitle("#Delta E/#Delta E_{mip}");
  fBefore->SetYTitle("P(#Delta E/#Delta E_{mip})");
  fBefore->SetFillColor(Color());
  fBefore->SetFillStyle(3001);
  fBefore->SetLineColor(kBlack);
  fBefore->SetLineStyle(2);
  fBefore->SetDirectory(0);

  fAfter  = static_cast<TH1D*>(fBefore->Clone("anaEloss"));
  fAfter->SetTitle(Form("Energy loss in %s (sharing corrected)", GetName()));
  fAfter->SetFillColor(Color()+2);
  fAfter->SetLineStyle(1);
  fAfter->SetDirectory(0);
  
  fSingle = new TH1D("singleEloss", "Energy loss (single strips)", 
		     600, 0, 15);
  fSingle->SetXTitle("#Delta/#Delta_{mip}");
  fSingle->SetYTitle("P(#Delta/#Delta_{mip})");
  fSingle->SetFillColor(Color());
  fSingle->SetFillStyle(3001);
  fSingle->SetLineColor(kBlack);
  fSingle->SetLineStyle(2);
  fSingle->SetDirectory(0);

  fDouble = static_cast<TH1D*>(fSingle->Clone("doubleEloss"));
  fDouble->SetTitle("Energy loss (two strips)");
  fDouble->SetFillColor(Color()+1);
  fDouble->SetDirectory(0);
  
  fTriple = static_cast<TH1D*>(fSingle->Clone("tripleEloss"));
  fTriple->SetTitle("Energy loss (three strips)"); 
  fTriple->SetFillColor(Color()+2);
  fTriple->SetDirectory(0);
  
  //Int_t nBinsForInner = (r == 'I' ? 32 : 16);
  Int_t nBinsForInner = (r == 'I' ? 512 : 256);
  Int_t nStrips       = (r == 'I' ? 512 : 256);
  
  fSinglePerStrip = new TH2D("singlePerStrip", "SinglePerStrip", 
			     600,0,15, nBinsForInner,0,nStrips);
  fSinglePerStrip->SetXTitle("#Delta/#Delta_{mip}");
  fSinglePerStrip->SetYTitle("Strip #");
  fSinglePerStrip->SetZTitle("Counts");
  fSinglePerStrip->SetDirectory(0);

#if 0
  fDistanceBefore = new TH1D("distanceBefore", "Distance before sharing", 
			     nStrips , 0,nStrips );
  fDistanceBefore->SetXTitle("Distance");
  fDistanceBefore->SetYTitle("Counts");
  fDistanceBefore->SetFillColor(kGreen+2);
  fDistanceBefore->SetFillStyle(3001);
  fDistanceBefore->SetLineColor(kBlack);
  fDistanceBefore->SetLineStyle(2);
  fDistanceBefore->SetDirectory(0);

  fDistanceAfter = static_cast<TH1D*>(fDistanceBefore->Clone("distanceAfter"));
  fDistanceAfter->SetTitle("Distance after sharing"); 
  fDistanceAfter->SetFillColor(kGreen+1);
  fDistanceAfter->SetDirectory(0);
#endif
  
  Double_t max = 15;
  Double_t min = -1;
  Int_t    n   = int((max-min) / (max / 300));
  fBeforeAfter = new TH2D("beforeAfter", "Before and after correlation", 
			  n, min, max, n, min, max);
  fBeforeAfter->SetXTitle("#Delta E/#Delta E_{mip} before");
  fBeforeAfter->SetYTitle("#Delta E/#Delta E_{mip} after");
  fBeforeAfter->SetZTitle("Correlation");
  fBeforeAfter->SetDirectory(0);

  fNeighborsBefore = static_cast<TH2D*>(fBeforeAfter->Clone("neighborsBefore"));
  fNeighborsBefore->SetTitle("Correlation of neighbors before");
  fNeighborsBefore->SetXTitle("#Delta E_{i}/#Delta E_{mip}");
  fNeighborsBefore->SetYTitle("#Delta E_{i+1}/#Delta E_{mip}");
  fNeighborsBefore->SetDirectory(0);
  
  fNeighborsAfter = 
    static_cast<TH2D*>(fNeighborsBefore->Clone("neighborsAfter"));
  fNeighborsAfter->SetTitle("Correlation of neighbors after");
  fNeighborsAfter->SetDirectory(0);

  fSumESD = new TH2D("summedESD", "Summed ESD signal", 200, -4, 6, 
		  NSector(), 0, 2*TMath::Pi());
  fSumESD->SetDirectory(0);
  fSumESD->Sumw2();
  fSumESD->SetMarkerColor(Color());
  // fSum->SetFillColor(Color());
  fSumESD->SetXTitle("#eta");
  fSumESD->SetYTitle("#varphi [radians]");
  fSumESD->SetZTitle("#sum_{strip} #Delta/#Delta_{mip}(#eta,#varphi) ");

  fSum = static_cast<TH2D*>(fSumESD->Clone("summed"));
  fSum->SetTitle("Summed cluster signal");
  fSum->SetZTitle("#sum_{cluster} #Delta/#Delta_{mip}(#eta,#varphi) ");
  fSum->SetDirectory(0);
 
  // Perhaps we need to ensure that this histogram has enough range to
  // accommondate all possible ranges - that is, from -1 to the number
  // of strips in this ring(-type) - i.e., NStrips().  Perhaps the
  // axis should be defined with increasin bin size - e.g.,
  //
  //   -1.5,-.5,.5,1.5,...,100.5,128.5,192.5,...,NStrips()
  // 
  fNConsecutive = new TH1D("nConsecutive","# consecutive strips above low cut",
			   201,-1.5,199.5);
  fNConsecutive->SetXTitle("N_{strips}");
  fNConsecutive->SetYTitle("N_{entries}");
  fNConsecutive->SetFillColor(kYellow+2);
  fNConsecutive->SetFillStyle(3001); 
  fNConsecutive->SetDirectory(0);
  
 
#if 0  
  fHits = new TH1D("hits", "Number of hits", 200, 0, 200000);
  fHits->SetDirectory(0);
  fHits->SetXTitle("# of hits");
  fHits->SetFillColor(kGreen+1);
#endif
}
//____________________________________________________________________
AliFMDSharingFilter::RingHistos::RingHistos(const RingHistos& o)
  : AliForwardUtil::RingHistos(o), 
    fBefore(o.fBefore), 
    fAfter(o.fAfter),
    fSingle(o.fSingle),
    fDouble(o.fDouble),
    fTriple(o.fTriple),
    fSinglePerStrip(o.fSinglePerStrip),
    // fDistanceBefore(o.fDistanceBefore),
    // fDistanceAfter(o.fDistanceAfter),    
    fBeforeAfter(o.fBeforeAfter),
    fNeighborsBefore(o.fNeighborsBefore),
    fNeighborsAfter(o.fNeighborsAfter),
    fSumESD(o.fSumESD), //,
    fSum(o.fSum),
    fNConsecutive(o.fNConsecutive)
     //,
    // fHits(o.fHits),
    // fNHits(o.fNHits)
{
  // 
  // Copy constructor 
  // 
  // Parameters:
  //    o Object to copy from 
  //
}

//____________________________________________________________________
AliFMDSharingFilter::RingHistos&
AliFMDSharingFilter::RingHistos::operator=(const RingHistos& o)
{
  // 
  // Assignment operator 
  // 
  // Parameters:
  //    o Object to assign from 
  // 
  // Return:
  //    Reference to this 
  //
  if (&o == this) return *this;
  AliForwardUtil::RingHistos::operator=(o);
  fDet = o.fDet;
  fRing = o.fRing;
  
  if (fBefore) 	       delete  fBefore;
  if (fAfter)  	       delete  fAfter;
  if (fSingle) 	       delete  fSingle;
  if (fDouble) 	       delete  fDouble;
  if (fTriple)         delete  fTriple;
  if (fSinglePerStrip) delete  fSinglePerStrip;
  if (fNConsecutive)   delete  fNConsecutive;
  // if (fDistanceBefore) delete fDistanceBefore;
  // if (fDistanceAfter)  delete fDistanceAfter;
  // if (fHits)   	       delete fHits;
  
  
  fBefore          = static_cast<TH1D*>(o.fBefore->Clone());
  fAfter           = static_cast<TH1D*>(o.fAfter->Clone());
  fSingle          = static_cast<TH1D*>(o.fSingle->Clone());
  fDouble          = static_cast<TH1D*>(o.fDouble->Clone());
  fTriple          = static_cast<TH1D*>(o.fTriple->Clone());
  fSinglePerStrip  = static_cast<TH2D*>(o.fSinglePerStrip->Clone());
  // fDistanceBefore  = static_cast<TH1D*>(o.fDistanceBefore->Clone());
  // fDistanceAfter   = static_cast<TH1D*>(o.fDistanceAfter->Clone());
  fBeforeAfter     = static_cast<TH2D*>(o.fBeforeAfter->Clone());
  fNeighborsBefore = static_cast<TH2D*>(o.fNeighborsBefore->Clone());
  fNeighborsAfter  = static_cast<TH2D*>(o.fNeighborsAfter->Clone());
  // fHits            = static_cast<TH1D*>(o.fHits->Clone());
  fSumESD          = static_cast<TH2D*>(o.fSumESD->Clone());
  fSum             = static_cast<TH2D*>(o.fSum->Clone());
  fNConsecutive    = static_cast<TH1D*>(o.fNConsecutive->Clone());

  return *this;
}
//____________________________________________________________________
AliFMDSharingFilter::RingHistos::~RingHistos()
{
  // 
  // Destructor 
  //
}
#if 0
//____________________________________________________________________
void
AliFMDSharingFilter::RingHistos::Finish()
{
  // 
  // Finish off 
  // 
  //
  // fHits->Fill(fNHits);
}
#endif
//____________________________________________________________________
void
AliFMDSharingFilter::RingHistos::Terminate(const TList* dir, Int_t nEvents)
{
  // 
  // Scale the histograms to the total number of events 
  // 
  // Parameters:
  //    nEvents Number of events 
  //    dir     Where the output is 
  //
  TList* l = GetOutputList(dir);
  if (!l) return; 

#if 0
  TH1D* before = static_cast<TH1D*>(l->FindObject("esdEloss"));
  TH1D* after  = static_cast<TH1D*>(l->FindObject("anaEloss"));
  if (before) before->Scale(1./nEvents);
  if (after)  after->Scale(1./nEvents);
#endif

  TH2D* summed = static_cast<TH2D*>(l->FindObject("summed"));
  if (summed) summed->Scale(1./nEvents);
  fSum = summed;

  TH2D* summedESD = static_cast<TH2D*>(l->FindObject("summedESD"));
  if (summedESD) summedESD->Scale(1./nEvents);
  fSumESD = summedESD;

  TH1D* consecutive = static_cast<TH1D*>(l->FindObject("nConsecutive"));
  if (consecutive) consecutive->Scale(1./nEvents);
  fNConsecutive= consecutive;
}

//____________________________________________________________________
void
AliFMDSharingFilter::RingHistos::CreateOutputObjects(TList* dir)
{
  // 
  // Make output 
  // 
  // Parameters:
  //    dir where to store 
  //
  TList* d = DefineOutputList(dir);

  d->Add(fBefore);
  d->Add(fAfter);
  d->Add(fSingle);
  d->Add(fDouble);
  d->Add(fTriple);
  d->Add(fSinglePerStrip);
  // d->Add(fDistanceBefore);
  // d->Add(fDistanceAfter);
  d->Add(fBeforeAfter);
  d->Add(fNeighborsBefore);
  d->Add(fNeighborsAfter);
  // d->Add(fHits);
  d->Add(fSumESD);
  d->Add(fSum);
  d->Add(fNConsecutive);

  // Removed to avoid doubly adding the list which destroys 
  // the merging
  //dir->Add(d);
}

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