ROOT logo
#include "AliFMDMCTrackDensity.h"
#include "AliESDFMD.h"
#include "AliTrackReference.h"
#include <TMath.h>
#include "AliFMDStripIndex.h"
#include "AliLog.h"
#include <TH2D.h>
#include <TH1D.h>
#include <TList.h>
#include <TROOT.h>
#include <iostream>

//____________________________________________________________________
void
AliFMDMCTrackDensity::State::Clear(Bool_t alsoCount)
{
  angle       = 0;
  oldDetector = 0;
  oldRing     = '\0';
  oldSector   = 1024;
  oldStrip    = 1024;
  startStrip  = 1024;
  nRefs       = 0;
  nStrips     = 0;
  longest     = 0x0;
  if (alsoCount) count = 0;
}

//____________________________________________________________________
AliFMDMCTrackDensity::State&
AliFMDMCTrackDensity::State::operator=(const State& o)
{
  if (&o == this) return *this;
  angle          = o.angle;
  oldDetector    = o.oldDetector;
  oldRing        = o.oldRing;
  oldSector      = o.oldSector;
  oldStrip       = o.oldStrip;
  startStrip     = o.startStrip;
  nRefs          = o.nRefs;
  nStrips        = o.nStrips;
  count          = o.count;
  longest        = o.longest;
  return *this;
}

//____________________________________________________________________
AliFMDMCTrackDensity::AliFMDMCTrackDensity()
  : AliBaseMCTrackDensity(), 
    fState(),
    fMaxConsequtiveStrips(3), 
    fNr(0), 
    fNt(0), 
    fNc(0),
    fNcr(0),
    fOutput(0)
{
  // Default constructor 
}

//____________________________________________________________________
AliFMDMCTrackDensity::AliFMDMCTrackDensity(const char*)
  : AliBaseMCTrackDensity("fmdMCTrackDensity"), 
    fState(),
    fMaxConsequtiveStrips(3), 
    fNr(0), 
    fNt(0), 
    fNc(0),
    fNcr(0),
    fOutput(0)
{
  // Normal constructor constructor 
}

//____________________________________________________________________
AliFMDMCTrackDensity::AliFMDMCTrackDensity(const AliFMDMCTrackDensity& o)
  : AliBaseMCTrackDensity(o),
    fState(o.fState),
    fMaxConsequtiveStrips(o.fMaxConsequtiveStrips), 
    fNr(o.fNr), 
    fNt(o.fNt), 
    fNc(o.fNc),
    fNcr(o.fNcr),
    fOutput(o.fOutput)
{
  // Normal constructor constructor 
}

//____________________________________________________________________
AliFMDMCTrackDensity&
AliFMDMCTrackDensity::operator=(const AliFMDMCTrackDensity& o)
{
  // Assignment operator 
  if (&o == this) return *this; 
  AliBaseMCTrackDensity::operator=(o);
  fMaxConsequtiveStrips = o.fMaxConsequtiveStrips;
  fNr                   = o.fNr;
  fNt                   = o.fNt;
  fNc                   = o.fNc;
  fNcr                  = o.fNcr;
  fState                = o.fState;
  fOutput               = o.fOutput;

  return *this;
}

//____________________________________________________________________
void
AliFMDMCTrackDensity::CreateOutputObjects(TList* l)
{
  AliBaseMCTrackDensity::CreateOutputObjects(l);
  TList* ll = static_cast<TList*>(l->FindObject(GetTitle()));
  if (!ll) ll = l;

  fNr = new TH1D("clusterRefs", "# track references per cluster",
		 21, -.5, 20.5);
  fNr->SetXTitle("# of track references/cluster");
  fNr->SetFillColor(kRed+1);
  fNr->SetFillStyle(3001);
  fNr->SetDirectory(0);
  ll->Add(fNr);

  fNt = new TH1D("clusterSize", "cluster length in strips", 21, -.5, 20.5);
  fNt->SetXTitle("Cluster size [strips]");
  fNt->SetFillColor(kBlue+1);
  fNt->SetFillStyle(3001);
  fNt->SetDirectory(0);
  ll->Add(fNt);

  fNc = new TH1D("nClusters", "# clusters per track", 21, -.5, 20.5);
  fNc->SetXTitle("# clusters");
  fNc->SetFillColor(kGreen+1);
  fNc->SetFillStyle(3001);
  fNc->SetDirectory(0);
  ll->Add(fNc);

  fNcr = new TH2D("clusterVsRefs", "# clusters vs. # refs", 
		  21, -.5, 20.5, 21, -.5, 20.5);
  fNcr->SetXTitle("# References");
  fNcr->SetYTitle("# Clusters");
  fNcr->SetOption("COLZ");
  fNcr->SetDirectory(0);
  ll->Add(fNcr);
  
		  
}
//____________________________________________________________________
Int_t
AliFMDMCTrackDensity::GetDetectorId() const
{
  return AliTrackReference::kFMD;
}

//____________________________________________________________________
void
AliFMDMCTrackDensity::BeginTrackRefs()
{
  fState.Clear(true);
}

//____________________________________________________________________
void
AliFMDMCTrackDensity::EndTrackRefs(Int_t nRefs)
{
  fNc->Fill(fState.count);
  fNcr->Fill(nRefs, fState.count);
  fState.Clear(true);
}
  
//____________________________________________________________________
AliTrackReference*
AliFMDMCTrackDensity::ProcessRef(AliMCParticle*       particle,
				 const AliMCParticle* mother,
				 AliTrackReference*   ref)
{
  // Get the detector coordinates 
  UShort_t d, s, t;
  Char_t r;
  AliFMDStripIndex::Unpack(ref->UserId(), d, r, s, t);
    
  // Calculate distance of previous reference to base of cluster 
  UShort_t nT = TMath::Abs(t - fState.startStrip) + 1;

  // Now check if we should flush to output 
  Bool_t used = false;

  // If this is a new detector/ring, then reset the other one 
  // Check if we have a valid old detectorm ring, and sector 
  if (fState.oldDetector >  0 && 
      fState.oldRing     != '\0' && 
      fState.oldSector   != 1024) {
    // New detector, new ring, or new sector 
    if (d != fState.oldDetector   || 
	r != fState.oldRing       || 
	s != fState.oldSector) {
      if (fDebug) Info("Process", "New because new sector");
      used = true;
    }
    else if (nT > fMaxConsequtiveStrips) {
      if (fDebug) Info("Process", "New because too long: %d (%d,%d,%d)", 
		       fState.nStrips, t, fState.oldStrip, fState.startStrip);
      used = true;
    }
  }
  if (used) {
    if (fDebug) 
      Info("Process", "I=%p L=%p D=%d (was %d), R=%c (was %c), "
	   "S=%2d (was %2d) t=%3d (was %3d) nT=%3d/%4d",
	   ref, fState.longest, 
	   d, fState.oldDetector, 
	   r, fState.oldRing, 
	   s, fState.oldSector, 
	   t, fState.oldStrip, 
	   fState.nStrips, fMaxConsequtiveStrips);
    // Int_t nnT   = TMath::Abs(fState.oldStrip - fState.startStrip) + 1;
    StoreParticle(particle, mother, fState.longest);
    fState.Clear(false);
  }

  // If base of cluster not set, set it here. 
  if (fState.startStrip == 1024) fState.startStrip = t;
  
  // Calculate distance of previous reference to base of cluster 
  fState.nStrips = TMath::Abs(t - fState.startStrip) + 1;

  // Count number of track refs in this sector 
  fState.nRefs++;

  fState.oldDetector = d;
  fState.oldRing     = r;
  fState.oldSector   = s;
  fState.oldStrip    = t;

  // Debug output 
  if (fDebug) {
    if (t == fState.startStrip) 
      Info("Process", "New cluster starting at FMD%d%c[%2d,%3d]", 
	   d, r, s, t);
    else 
      Info("Process", "Adding to cluster starting at FMD%d%c[%2d,%3d], "
	   "length=%3d (now in %3d, previous %3d)", 
	   d, r, s, fState.startStrip, fState.nStrips, t, fState.oldStrip);
  }
    
  // The longest passage is determined through the angle 
  Double_t ang  = GetTrackRefTheta(ref);
  if (ang > fState.angle) {
    fState.longest = ref;
    fState.angle   = ang;
  }

  return fState.longest;
}

//____________________________________________________________________
Double_t
AliFMDMCTrackDensity::StoreParticle(AliMCParticle*       particle, 
				    const AliMCParticle* mother, 
				    AliTrackReference*   ref) const
{
  Double_t w = 
    AliBaseMCTrackDensity::StoreParticle(particle, mother, ref);
  if (w <= 0) return w;

  // Get the detector coordinates 
  UShort_t d, s, t;
  Char_t r;
  AliFMDStripIndex::Unpack(ref->UserId(), d, r, s, t);

  // Check if we have value already 
  Double_t old = fOutput->Multiplicity(d,r,s,t);

  // If invalid, force it valid 
  if (old == AliESDFMD::kInvalidMult) old = 0;

  // Increment count 
  fOutput->SetMultiplicity(d,r,s,t,old+w);

  // Fill histograms 
  fNr->Fill(fState.nRefs);
  fNt->Fill(fState.nStrips);

  fState.count++;

  return w;
}  

//____________________________________________________________________
Bool_t
AliFMDMCTrackDensity::Calculate(const AliESDFMD&  input, 
				const AliMCEvent& event,
				Double_t          vz,
				AliESDFMD&        output, 
				TH2D*             primary)
{
  // 
  // Filter the input kinematics and track references, using 
  // some of the ESD information
  // 
  // Parameters:
  //    input   Input ESD event
  //    event   Input MC event
  //    vz      Vertex position 
  //    output  Output ESD-like object
  //    primary Per-event histogram of primaries 
  //
  // Return:
  //    True on succes, false otherwise 
  //
  output.Clear();
  fOutput = &output;

  // Copy eta values to output 
  for (UShort_t ed = 1; ed <= 3; ed++) { 
    UShort_t nq = (ed == 1 ? 1 : 2);
    for (UShort_t eq = 0; eq < nq; eq++) {
      Char_t   er = (eq == 0 ? 'I' : 'O');
      UShort_t ns = (eq == 0 ?  20 :  40);
      UShort_t nt = (eq == 0 ? 512 : 256);
      for (UShort_t es = 0; es < ns; es++) 
	for (UShort_t et = 0; et < nt; et++) 
	  output.SetEta(ed, er, es, et, input.Eta(ed, er, es, et));
    }
  }

  return ProcessTracks(event, vz, primary);
}

#define PFV(N,VALUE)					\
  do {							\
    AliForwardUtil::PrintName(N);			\
    std::cout << (VALUE) << std::endl; } while(false)
//____________________________________________________________________
void
AliFMDMCTrackDensity::Print(Option_t* option) const 
{
  AliBaseMCTrackDensity::Print(option);
  gROOT->IncreaseDirLevel();
  PFV("Max cluster size", fMaxConsequtiveStrips);
  gROOT->DecreaseDirLevel();
}

//____________________________________________________________________
//
// EOF
//
 AliFMDMCTrackDensity.cxx:1
 AliFMDMCTrackDensity.cxx:2
 AliFMDMCTrackDensity.cxx:3
 AliFMDMCTrackDensity.cxx:4
 AliFMDMCTrackDensity.cxx:5
 AliFMDMCTrackDensity.cxx:6
 AliFMDMCTrackDensity.cxx:7
 AliFMDMCTrackDensity.cxx:8
 AliFMDMCTrackDensity.cxx:9
 AliFMDMCTrackDensity.cxx:10
 AliFMDMCTrackDensity.cxx:11
 AliFMDMCTrackDensity.cxx:12
 AliFMDMCTrackDensity.cxx:13
 AliFMDMCTrackDensity.cxx:14
 AliFMDMCTrackDensity.cxx:15
 AliFMDMCTrackDensity.cxx:16
 AliFMDMCTrackDensity.cxx:17
 AliFMDMCTrackDensity.cxx:18
 AliFMDMCTrackDensity.cxx:19
 AliFMDMCTrackDensity.cxx:20
 AliFMDMCTrackDensity.cxx:21
 AliFMDMCTrackDensity.cxx:22
 AliFMDMCTrackDensity.cxx:23
 AliFMDMCTrackDensity.cxx:24
 AliFMDMCTrackDensity.cxx:25
 AliFMDMCTrackDensity.cxx:26
 AliFMDMCTrackDensity.cxx:27
 AliFMDMCTrackDensity.cxx:28
 AliFMDMCTrackDensity.cxx:29
 AliFMDMCTrackDensity.cxx:30
 AliFMDMCTrackDensity.cxx:31
 AliFMDMCTrackDensity.cxx:32
 AliFMDMCTrackDensity.cxx:33
 AliFMDMCTrackDensity.cxx:34
 AliFMDMCTrackDensity.cxx:35
 AliFMDMCTrackDensity.cxx:36
 AliFMDMCTrackDensity.cxx:37
 AliFMDMCTrackDensity.cxx:38
 AliFMDMCTrackDensity.cxx:39
 AliFMDMCTrackDensity.cxx:40
 AliFMDMCTrackDensity.cxx:41
 AliFMDMCTrackDensity.cxx:42
 AliFMDMCTrackDensity.cxx:43
 AliFMDMCTrackDensity.cxx:44
 AliFMDMCTrackDensity.cxx:45
 AliFMDMCTrackDensity.cxx:46
 AliFMDMCTrackDensity.cxx:47
 AliFMDMCTrackDensity.cxx:48
 AliFMDMCTrackDensity.cxx:49
 AliFMDMCTrackDensity.cxx:50
 AliFMDMCTrackDensity.cxx:51
 AliFMDMCTrackDensity.cxx:52
 AliFMDMCTrackDensity.cxx:53
 AliFMDMCTrackDensity.cxx:54
 AliFMDMCTrackDensity.cxx:55
 AliFMDMCTrackDensity.cxx:56
 AliFMDMCTrackDensity.cxx:57
 AliFMDMCTrackDensity.cxx:58
 AliFMDMCTrackDensity.cxx:59
 AliFMDMCTrackDensity.cxx:60
 AliFMDMCTrackDensity.cxx:61
 AliFMDMCTrackDensity.cxx:62
 AliFMDMCTrackDensity.cxx:63
 AliFMDMCTrackDensity.cxx:64
 AliFMDMCTrackDensity.cxx:65
 AliFMDMCTrackDensity.cxx:66
 AliFMDMCTrackDensity.cxx:67
 AliFMDMCTrackDensity.cxx:68
 AliFMDMCTrackDensity.cxx:69
 AliFMDMCTrackDensity.cxx:70
 AliFMDMCTrackDensity.cxx:71
 AliFMDMCTrackDensity.cxx:72
 AliFMDMCTrackDensity.cxx:73
 AliFMDMCTrackDensity.cxx:74
 AliFMDMCTrackDensity.cxx:75
 AliFMDMCTrackDensity.cxx:76
 AliFMDMCTrackDensity.cxx:77
 AliFMDMCTrackDensity.cxx:78
 AliFMDMCTrackDensity.cxx:79
 AliFMDMCTrackDensity.cxx:80
 AliFMDMCTrackDensity.cxx:81
 AliFMDMCTrackDensity.cxx:82
 AliFMDMCTrackDensity.cxx:83
 AliFMDMCTrackDensity.cxx:84
 AliFMDMCTrackDensity.cxx:85
 AliFMDMCTrackDensity.cxx:86
 AliFMDMCTrackDensity.cxx:87
 AliFMDMCTrackDensity.cxx:88
 AliFMDMCTrackDensity.cxx:89
 AliFMDMCTrackDensity.cxx:90
 AliFMDMCTrackDensity.cxx:91
 AliFMDMCTrackDensity.cxx:92
 AliFMDMCTrackDensity.cxx:93
 AliFMDMCTrackDensity.cxx:94
 AliFMDMCTrackDensity.cxx:95
 AliFMDMCTrackDensity.cxx:96
 AliFMDMCTrackDensity.cxx:97
 AliFMDMCTrackDensity.cxx:98
 AliFMDMCTrackDensity.cxx:99
 AliFMDMCTrackDensity.cxx:100
 AliFMDMCTrackDensity.cxx:101
 AliFMDMCTrackDensity.cxx:102
 AliFMDMCTrackDensity.cxx:103
 AliFMDMCTrackDensity.cxx:104
 AliFMDMCTrackDensity.cxx:105
 AliFMDMCTrackDensity.cxx:106
 AliFMDMCTrackDensity.cxx:107
 AliFMDMCTrackDensity.cxx:108
 AliFMDMCTrackDensity.cxx:109
 AliFMDMCTrackDensity.cxx:110
 AliFMDMCTrackDensity.cxx:111
 AliFMDMCTrackDensity.cxx:112
 AliFMDMCTrackDensity.cxx:113
 AliFMDMCTrackDensity.cxx:114
 AliFMDMCTrackDensity.cxx:115
 AliFMDMCTrackDensity.cxx:116
 AliFMDMCTrackDensity.cxx:117
 AliFMDMCTrackDensity.cxx:118
 AliFMDMCTrackDensity.cxx:119
 AliFMDMCTrackDensity.cxx:120
 AliFMDMCTrackDensity.cxx:121
 AliFMDMCTrackDensity.cxx:122
 AliFMDMCTrackDensity.cxx:123
 AliFMDMCTrackDensity.cxx:124
 AliFMDMCTrackDensity.cxx:125
 AliFMDMCTrackDensity.cxx:126
 AliFMDMCTrackDensity.cxx:127
 AliFMDMCTrackDensity.cxx:128
 AliFMDMCTrackDensity.cxx:129
 AliFMDMCTrackDensity.cxx:130
 AliFMDMCTrackDensity.cxx:131
 AliFMDMCTrackDensity.cxx:132
 AliFMDMCTrackDensity.cxx:133
 AliFMDMCTrackDensity.cxx:134
 AliFMDMCTrackDensity.cxx:135
 AliFMDMCTrackDensity.cxx:136
 AliFMDMCTrackDensity.cxx:137
 AliFMDMCTrackDensity.cxx:138
 AliFMDMCTrackDensity.cxx:139
 AliFMDMCTrackDensity.cxx:140
 AliFMDMCTrackDensity.cxx:141
 AliFMDMCTrackDensity.cxx:142
 AliFMDMCTrackDensity.cxx:143
 AliFMDMCTrackDensity.cxx:144
 AliFMDMCTrackDensity.cxx:145
 AliFMDMCTrackDensity.cxx:146
 AliFMDMCTrackDensity.cxx:147
 AliFMDMCTrackDensity.cxx:148
 AliFMDMCTrackDensity.cxx:149
 AliFMDMCTrackDensity.cxx:150
 AliFMDMCTrackDensity.cxx:151
 AliFMDMCTrackDensity.cxx:152
 AliFMDMCTrackDensity.cxx:153
 AliFMDMCTrackDensity.cxx:154
 AliFMDMCTrackDensity.cxx:155
 AliFMDMCTrackDensity.cxx:156
 AliFMDMCTrackDensity.cxx:157
 AliFMDMCTrackDensity.cxx:158
 AliFMDMCTrackDensity.cxx:159
 AliFMDMCTrackDensity.cxx:160
 AliFMDMCTrackDensity.cxx:161
 AliFMDMCTrackDensity.cxx:162
 AliFMDMCTrackDensity.cxx:163
 AliFMDMCTrackDensity.cxx:164
 AliFMDMCTrackDensity.cxx:165
 AliFMDMCTrackDensity.cxx:166
 AliFMDMCTrackDensity.cxx:167
 AliFMDMCTrackDensity.cxx:168
 AliFMDMCTrackDensity.cxx:169
 AliFMDMCTrackDensity.cxx:170
 AliFMDMCTrackDensity.cxx:171
 AliFMDMCTrackDensity.cxx:172
 AliFMDMCTrackDensity.cxx:173
 AliFMDMCTrackDensity.cxx:174
 AliFMDMCTrackDensity.cxx:175
 AliFMDMCTrackDensity.cxx:176
 AliFMDMCTrackDensity.cxx:177
 AliFMDMCTrackDensity.cxx:178
 AliFMDMCTrackDensity.cxx:179
 AliFMDMCTrackDensity.cxx:180
 AliFMDMCTrackDensity.cxx:181
 AliFMDMCTrackDensity.cxx:182
 AliFMDMCTrackDensity.cxx:183
 AliFMDMCTrackDensity.cxx:184
 AliFMDMCTrackDensity.cxx:185
 AliFMDMCTrackDensity.cxx:186
 AliFMDMCTrackDensity.cxx:187
 AliFMDMCTrackDensity.cxx:188
 AliFMDMCTrackDensity.cxx:189
 AliFMDMCTrackDensity.cxx:190
 AliFMDMCTrackDensity.cxx:191
 AliFMDMCTrackDensity.cxx:192
 AliFMDMCTrackDensity.cxx:193
 AliFMDMCTrackDensity.cxx:194
 AliFMDMCTrackDensity.cxx:195
 AliFMDMCTrackDensity.cxx:196
 AliFMDMCTrackDensity.cxx:197
 AliFMDMCTrackDensity.cxx:198
 AliFMDMCTrackDensity.cxx:199
 AliFMDMCTrackDensity.cxx:200
 AliFMDMCTrackDensity.cxx:201
 AliFMDMCTrackDensity.cxx:202
 AliFMDMCTrackDensity.cxx:203
 AliFMDMCTrackDensity.cxx:204
 AliFMDMCTrackDensity.cxx:205
 AliFMDMCTrackDensity.cxx:206
 AliFMDMCTrackDensity.cxx:207
 AliFMDMCTrackDensity.cxx:208
 AliFMDMCTrackDensity.cxx:209
 AliFMDMCTrackDensity.cxx:210
 AliFMDMCTrackDensity.cxx:211
 AliFMDMCTrackDensity.cxx:212
 AliFMDMCTrackDensity.cxx:213
 AliFMDMCTrackDensity.cxx:214
 AliFMDMCTrackDensity.cxx:215
 AliFMDMCTrackDensity.cxx:216
 AliFMDMCTrackDensity.cxx:217
 AliFMDMCTrackDensity.cxx:218
 AliFMDMCTrackDensity.cxx:219
 AliFMDMCTrackDensity.cxx:220
 AliFMDMCTrackDensity.cxx:221
 AliFMDMCTrackDensity.cxx:222
 AliFMDMCTrackDensity.cxx:223
 AliFMDMCTrackDensity.cxx:224
 AliFMDMCTrackDensity.cxx:225
 AliFMDMCTrackDensity.cxx:226
 AliFMDMCTrackDensity.cxx:227
 AliFMDMCTrackDensity.cxx:228
 AliFMDMCTrackDensity.cxx:229
 AliFMDMCTrackDensity.cxx:230
 AliFMDMCTrackDensity.cxx:231
 AliFMDMCTrackDensity.cxx:232
 AliFMDMCTrackDensity.cxx:233
 AliFMDMCTrackDensity.cxx:234
 AliFMDMCTrackDensity.cxx:235
 AliFMDMCTrackDensity.cxx:236
 AliFMDMCTrackDensity.cxx:237
 AliFMDMCTrackDensity.cxx:238
 AliFMDMCTrackDensity.cxx:239
 AliFMDMCTrackDensity.cxx:240
 AliFMDMCTrackDensity.cxx:241
 AliFMDMCTrackDensity.cxx:242
 AliFMDMCTrackDensity.cxx:243
 AliFMDMCTrackDensity.cxx:244
 AliFMDMCTrackDensity.cxx:245
 AliFMDMCTrackDensity.cxx:246
 AliFMDMCTrackDensity.cxx:247
 AliFMDMCTrackDensity.cxx:248
 AliFMDMCTrackDensity.cxx:249
 AliFMDMCTrackDensity.cxx:250
 AliFMDMCTrackDensity.cxx:251
 AliFMDMCTrackDensity.cxx:252
 AliFMDMCTrackDensity.cxx:253
 AliFMDMCTrackDensity.cxx:254
 AliFMDMCTrackDensity.cxx:255
 AliFMDMCTrackDensity.cxx:256
 AliFMDMCTrackDensity.cxx:257
 AliFMDMCTrackDensity.cxx:258
 AliFMDMCTrackDensity.cxx:259
 AliFMDMCTrackDensity.cxx:260
 AliFMDMCTrackDensity.cxx:261
 AliFMDMCTrackDensity.cxx:262
 AliFMDMCTrackDensity.cxx:263
 AliFMDMCTrackDensity.cxx:264
 AliFMDMCTrackDensity.cxx:265
 AliFMDMCTrackDensity.cxx:266
 AliFMDMCTrackDensity.cxx:267
 AliFMDMCTrackDensity.cxx:268
 AliFMDMCTrackDensity.cxx:269
 AliFMDMCTrackDensity.cxx:270
 AliFMDMCTrackDensity.cxx:271
 AliFMDMCTrackDensity.cxx:272
 AliFMDMCTrackDensity.cxx:273
 AliFMDMCTrackDensity.cxx:274
 AliFMDMCTrackDensity.cxx:275
 AliFMDMCTrackDensity.cxx:276
 AliFMDMCTrackDensity.cxx:277
 AliFMDMCTrackDensity.cxx:278
 AliFMDMCTrackDensity.cxx:279
 AliFMDMCTrackDensity.cxx:280
 AliFMDMCTrackDensity.cxx:281
 AliFMDMCTrackDensity.cxx:282
 AliFMDMCTrackDensity.cxx:283
 AliFMDMCTrackDensity.cxx:284
 AliFMDMCTrackDensity.cxx:285
 AliFMDMCTrackDensity.cxx:286
 AliFMDMCTrackDensity.cxx:287
 AliFMDMCTrackDensity.cxx:288
 AliFMDMCTrackDensity.cxx:289
 AliFMDMCTrackDensity.cxx:290
 AliFMDMCTrackDensity.cxx:291
 AliFMDMCTrackDensity.cxx:292
 AliFMDMCTrackDensity.cxx:293
 AliFMDMCTrackDensity.cxx:294
 AliFMDMCTrackDensity.cxx:295
 AliFMDMCTrackDensity.cxx:296
 AliFMDMCTrackDensity.cxx:297
 AliFMDMCTrackDensity.cxx:298
 AliFMDMCTrackDensity.cxx:299
 AliFMDMCTrackDensity.cxx:300
 AliFMDMCTrackDensity.cxx:301
 AliFMDMCTrackDensity.cxx:302
 AliFMDMCTrackDensity.cxx:303
 AliFMDMCTrackDensity.cxx:304
 AliFMDMCTrackDensity.cxx:305
 AliFMDMCTrackDensity.cxx:306
 AliFMDMCTrackDensity.cxx:307
 AliFMDMCTrackDensity.cxx:308
 AliFMDMCTrackDensity.cxx:309
 AliFMDMCTrackDensity.cxx:310
 AliFMDMCTrackDensity.cxx:311
 AliFMDMCTrackDensity.cxx:312
 AliFMDMCTrackDensity.cxx:313
 AliFMDMCTrackDensity.cxx:314
 AliFMDMCTrackDensity.cxx:315
 AliFMDMCTrackDensity.cxx:316
 AliFMDMCTrackDensity.cxx:317
 AliFMDMCTrackDensity.cxx:318
 AliFMDMCTrackDensity.cxx:319
 AliFMDMCTrackDensity.cxx:320
 AliFMDMCTrackDensity.cxx:321
 AliFMDMCTrackDensity.cxx:322
 AliFMDMCTrackDensity.cxx:323
 AliFMDMCTrackDensity.cxx:324
 AliFMDMCTrackDensity.cxx:325
 AliFMDMCTrackDensity.cxx:326
 AliFMDMCTrackDensity.cxx:327
 AliFMDMCTrackDensity.cxx:328
 AliFMDMCTrackDensity.cxx:329
 AliFMDMCTrackDensity.cxx:330
 AliFMDMCTrackDensity.cxx:331
 AliFMDMCTrackDensity.cxx:332
 AliFMDMCTrackDensity.cxx:333
 AliFMDMCTrackDensity.cxx:334
 AliFMDMCTrackDensity.cxx:335
 AliFMDMCTrackDensity.cxx:336
 AliFMDMCTrackDensity.cxx:337
 AliFMDMCTrackDensity.cxx:338
 AliFMDMCTrackDensity.cxx:339
 AliFMDMCTrackDensity.cxx:340
 AliFMDMCTrackDensity.cxx:341
 AliFMDMCTrackDensity.cxx:342
 AliFMDMCTrackDensity.cxx:343
 AliFMDMCTrackDensity.cxx:344
 AliFMDMCTrackDensity.cxx:345
 AliFMDMCTrackDensity.cxx:346