ROOT logo
#ifndef ALITRDMCMSIM_H
#define ALITRDMCMSIM_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */

///////////////////////////////////////////////////////
//                                                   //
//  Multi Chip Module Simulation Class               //
//                                                   //
///////////////////////////////////////////////////////

#include <iostream>

class TObject;
class TClonesArray;
class TH2F;

class AliRunLoader;
class AliTRDfeeParam;
class AliTRDtrapConfig;
class AliTRDarrayADC;
class AliTRDarrayDictionary;
class AliTRDdigitsManager;
class TTreeSRedirector;

class AliTRDmcmSim : public TObject {
 public:
                    AliTRDmcmSim();
  virtual          ~AliTRDmcmSim();

          void      Init(Int_t det, Int_t rob, Int_t mcm, Bool_t newEvent = kFALSE);
	  // Initialize MCM by the position parameters

	  void      Reset();
	  // clears filter registers and internal data

          void      SetDebugStream(TTreeSRedirector *stream) { fDebugStream = stream; }
  TTreeSRedirector* GetDebugStream() const { return fDebugStream; }

	  Bool_t    LoadMCM(AliRunLoader* const runloader, Int_t det, Int_t rob, Int_t mcm);

	  void      NoiseTest(Int_t nsamples, Int_t mean, Int_t sigma, Int_t inputGain = 1, Int_t inputTail = 2);

	  Int_t     GetDataRaw(Int_t iadc, Int_t timebin)      const { return (fADCR[iadc][timebin] >> 2); }
	  // Get unfiltered ADC data
	  Int_t     GetDataFiltered(Int_t iadc, Int_t timebin) const { return (fADCF[iadc][timebin] >> 2); }
	  // Get filtered ADC data

          void      SetData(Int_t iadc, const Int_t* const adc);           // Set ADC data with array
          void      SetData(Int_t iadc, Int_t it, Int_t adc); // Set ADC data
	  void      SetData(AliTRDarrayADC * const adcArray,
			    AliTRDdigitsManager * const digitsManager = 0x0);         // Set ADC data from adcArray
	  void      SetDataByPad(const AliTRDarrayADC *const adcArray,
				 AliTRDdigitsManager * const digitsManager = 0x0);    // Set ADC data from adcArray
          void      SetDataPedestal(Int_t iadc);              // Fill ADC data with pedestal values

  static  Bool_t    GetApplyCut() { return fgApplyCut; }
  static  void      SetApplyCut(Bool_t applyCut) { fgApplyCut = applyCut; }

  static  Int_t     GetAddBaseline() { return fgAddBaseline; }
  static  void      SetAddBaseline(Int_t baseline) { fgAddBaseline = baseline; }
  // Additional baseline which is added for the processing
  // in the TRAP and removed when writing back the data.
  // This is needed to run with TRAP parameters set for a
  // different baseline but it will not change the baseline
  // of the output.

  static  void      SetStoreClusters(Bool_t storeClusters) { fgStoreClusters = storeClusters; }
  static  Bool_t    GetStoreClusters() { return fgStoreClusters; }

          Int_t     GetDetector() const  { return fDetector;  };     // Returns Chamber ID (0-539)
          Int_t     GetRobPos() const { return fRobPos; };           // Returns ROB position (0-7)
          Int_t     GetMcmPos() const { return fMcmPos; };           // Returns MCM position (0-17) (16,17 are mergers)
          Int_t     GetRow() const    { return fRow;    };           // Returns Row number on chamber where the MCM is sitting
	  Int_t     GetCol( Int_t iadc );                            // Get corresponding column (0-143) from for ADC channel iadc = [0:20]
	  // for the ADC/Col mapping, see: http://wiki.kip.uni-heidelberg.de/ti/TRD/index.php/Image:ROB_MCM_numbering.pdf

	  void      WriteData(AliTRDarrayADC *digits);
	  Bool_t    StoreTracklets();                          // Stores tracklets via runloader
	  TString   GetTrklBranchName() const { return fTrklBranchName; }
	  void      SetTrklBranchName(TString name) { fTrklBranchName = name; }

	  Int_t     ProduceRawStream( UInt_t *buf, Int_t bufsize, UInt_t iEv = 0 ) const; // Produce raw data stream - Real data format
	  Int_t     ProduceTrackletStream( UInt_t *buf, Int_t bufsize ); // produce the tracklet stream for this MCM

	  // different stages of processing in the TRAP
	  void      Filter();                                  // Apply digital filters for existing data (according to configuration)
	  void      ZSMapping();                               // Do ZS mapping for existing data
	  void      Tracklet();                                // Run tracklet preprocessor and perform tracklet fit

	  // apply individual filters to all channels and timebins
	  void      FilterPedestal();                   // Apply pedestal filter
	  void      FilterGain();                       // Apply gain filter
	  void      FilterTail();                       // Apply tail filter

	  // filter initialization (resets internal registers)
	  void      FilterPedestalInit(Int_t baseline = 10);
	  void      FilterGainInit();
	  void      FilterTailInit(Int_t baseline = -1);

	  // feed single sample to individual filter
	  // this changes the internal registers
	  // all filters operate on (10+2)-bit values!
	  UShort_t  FilterPedestalNextSample(Int_t adc, Int_t timebin, UShort_t value);
	  UShort_t  FilterGainNextSample(Int_t adc, UShort_t value);
	  UShort_t  FilterTailNextSample(Int_t adc, UShort_t value);

	  // tracklet calculation
	  void      AddHitToFitreg(Int_t adc, UShort_t timebin, UShort_t qtot, Short_t ypos, Int_t label[]);
	  void      CalcFitreg();
	  void      TrackletSelection();
	  void      FitTracklet();

	  Int_t         GetNHits() const { return fNHits; }
	  Bool_t        GetHit(Int_t index, Int_t &channel, Int_t &timebin, Int_t &qtot, Int_t &ypos, Float_t &y, Int_t &label) const;
	  TClonesArray* GetTrackletArray() const { return fTrackletArray; }

	  // data display
	  void      Print(Option_t* const option="") const;   // print stored data to stdout
	  void      Draw(Option_t* const option ="");         // draw data (ADC data, hits and tracklets)

  friend  std::ostream& operator<<(std::ostream &os, const AliTRDmcmSim &mcm); // data output using ostream (e.g. cout << mcm;)
  static  ostream&  Cfdat(ostream &os);                       // manipulator to activate cfdat output
  static  ostream&  Raw  (ostream &os);                       // manipulator to activate raw output
  static  ostream&  Text (ostream &os);                       // manipulator to activate text output

	  // PID
	  Int_t GetPID(Int_t q0, Int_t q1);
	  void PrintPidLutHuman();

	  // I/O
	  void PrintFitRegXml(ostream& os) const;
	  void PrintTrackletsXml(ostream& os) const;
	  void PrintAdcDatTxt(ostream& os) const;
	  void PrintAdcDatHuman(ostream& os) const;
	  void PrintAdcDatXml(ostream& os) const;
	  void PrintAdcDatDatx(ostream& os, Bool_t broadcast=kFALSE, Int_t timeBinOffset = -1) const;

  static  Bool_t ReadPackedConfig(AliTRDtrapConfig *cfg, Int_t hc, UInt_t *data, Int_t size);

  // DMEM addresses
  static const Int_t fgkDmemAddrLUTcor0       = 0xC02A;
  static const Int_t fgkDmemAddrLUTcor1       = 0xC028;
  static const Int_t fgkDmemAddrLUTnbins      = 0xC029;

  static const Int_t fgkDmemAddrLUTStart      = 0xC100; // LUT start address
  static const Int_t fgkDmemAddrLUTEnd        = 0xC3FF; // maximum possible end address for the LUT table
  static const Int_t fgkDmemAddrLUTLength     = 0xC02B; // address where real size of the LUT table is stored

  static const Int_t fgkDmemAddrTrackletStart = 0xC0E0; // Storage area for tracklets, start address
  static const Int_t fgkDmemAddrTrackletEnd   = 0xC0E3; // Storage area for tracklets, end address

  static const Int_t fgkDmemAddrDeflCorr      = 0xc022; // DMEM address of deflection correction
  static const Int_t fgkDmemAddrNdrift        = 0xc025; // DMEM address of Ndrift
  static const Int_t fgkDmemAddrDeflCutStart  = 0xc030; // DMEM start address of deflection cut
  static const Int_t fgkDmemAddrDeflCutEnd    = 0xc055; // DMEM end address of deflection cut

 protected:
	  Bool_t    CheckInitialized() const;           // Check whether the class is initialized

	  void      SetNTimebins(Int_t ntimebins);      // allocate data arrays corr. to the no. of timebins

 static const Int_t fgkFormatIndex;                     // index for format settings in stream

 static const Int_t fgkMaxTracklets = 4;                // maximum number of tracklet-words submitted per MCM (one per CPU)
 static const Int_t fgkAddDigits = 2;                   // additional digits used for internal representation of ADC data
	                                                // all internal data as after data control block (i.e. 12 bit), s. TRAP manual
 static const Int_t fgkNCPU = 4;                        // Number of CPUs in the TRAP
 static const Int_t fgkNHitsMC = 100;                   // maximum number of hits for which MC information is kept

 static const UShort_t fgkFPshifts[4];                  // shifts for pedestal filter

	  Bool_t    fInitialized;                       // memory is allocated if initialized
	  Int_t     fDetector;                          // Chamber ID
	  Int_t     fRobPos;                            // ROB Position on chamber
	  Int_t     fMcmPos;                            // MCM Position on chamber
	  Int_t     fRow;                               // Pad row number (0-11 or 0-15) of the MCM on chamber
	  Int_t     fNTimeBin;                          // Number of timebins currently allocated
	  Int_t   **fADCR;                              // Array with MCM ADC values (Raw, 12 bit)
	  Int_t   **fADCF;                              // Array with MCM ADC values (Filtered, 12 bit)
	  UInt_t   *fMCMT;                              // tracklet word for one mcm/trap-chip
	  TClonesArray *fTrackletArray;                 // Array of AliTRDtrackletMCM which contains MC information in addition to the tracklet word
	  Int_t    *fZSMap;                             // Zero suppression map (1 dimensional projection)

	  Int_t     fFitPtr[fgkNCPU];                   // pointer to the tracklet to be calculated by CPU i

          TString   fTrklBranchName;   	                // name of the tracklet branch to right to

	  // Parameter classes
	  AliTRDfeeParam    *fFeeParam;                 // FEE parameters
	  AliTRDtrapConfig  *fTrapConfig;               // TRAP config

	  AliTRDdigitsManager *fDigitsManager;          // pointer to digits manager used for MC label calculation
	  AliTRDarrayDictionary* fDict[3];              // pointers to label dictionaries


	  // internal filter registers
	  UInt_t*   fPedAcc;                            // Accumulator for pedestal filter
	  UInt_t*   fGainCounterA;                      // Counter for values above FGTA in the gain filter
	  UInt_t*   fGainCounterB;                      // Counter for values above FGTB in the gain filter
 	  UShort_t* fTailAmplLong;                      // Amplitude of the long component in the tail filter
 	  UShort_t* fTailAmplShort;                     // Amplitude of the short component in the tail filter

	  // hit detection
	  // individual hits can be stored as MC info
	  struct Hit_t {                                // Array of detected hits (only available in MC)
	  Hit_t() : fChannel(0), fTimebin(0), fQtot(0), fYpos(0) { fLabel[0] = 0; fLabel[1] = 0; fLabel[2] = 0; }
	    Int_t fChannel;                             // ADC channel of the hit
	    Int_t fTimebin;                             // timebin of the hit
	    Int_t fQtot;                                // total charge of the hit
	    Int_t fYpos;                                // calculated y-position
	    Int_t fLabel[3];                            // up to 3 labels (only in MC)
	  } fHits[fgkNHitsMC];
	  Int_t fNHits;                                 // Number of detected hits

	  // tracklet calculation
	  struct FitReg_t {                             // pointer to the 18 fit registers
	    Int_t  fNhits;                              // number of hits
	    UInt_t fQ0;                                 // charge accumulated in first window
	    UInt_t fQ1;                                 // charge accumulated in second window
	    UInt_t fSumX;                               // sum x
	    Int_t  fSumY;                               // sum y
	    UInt_t fSumX2;                              // sum x**2
	    UInt_t fSumY2;                              // sum y**2
	    Int_t  fSumXY;                              // sum x*y
	  } *fFitReg;

	  // Sort functions as in TRAP
	  void Sort2(UShort_t  idx1i, UShort_t  idx2i, UShort_t  val1i, UShort_t  val2i,
		     UShort_t * const idx1o, UShort_t * const idx2o, UShort_t * const val1o, UShort_t * const val2o) const;
	  void Sort3(UShort_t  idx1i, UShort_t  idx2i, UShort_t  idx3i,
		     UShort_t  val1i, UShort_t  val2i, UShort_t  val3i,
		     UShort_t * const idx1o, UShort_t * const idx2o, UShort_t * const idx3o,
		     UShort_t * const val1o, UShort_t * const val2o, UShort_t * const val3o);
	  void Sort6To4(UShort_t  idx1i, UShort_t  idx2i, UShort_t  idx3i, UShort_t  idx4i, UShort_t  idx5i, UShort_t  idx6i,
			UShort_t  val1i, UShort_t  val2i, UShort_t  val3i, UShort_t  val4i, UShort_t  val5i, UShort_t  val6i,
			UShort_t * const idx1o, UShort_t * const idx2o, UShort_t * const idx3o, UShort_t * const idx4o,
			UShort_t * const val1o, UShort_t * const val2o, UShort_t * const val3o, UShort_t * const val4o);
	  void Sort6To2Worst(UShort_t  idx1i, UShort_t  idx2i, UShort_t  idx3i, UShort_t  idx4i, UShort_t  idx5i, UShort_t  idx6i,
			     UShort_t  val1i, UShort_t  val2i, UShort_t  val3i, UShort_t  val4i, UShort_t  val5i, UShort_t  val6i,
			     UShort_t * const idx5o, UShort_t * const idx6o);

	  UInt_t AddUintClipping(UInt_t a, UInt_t b, UInt_t nbits) const;
	  // Add a and b (unsigned) with clipping to the maximum value representable by nbits

  TTreeSRedirector *fDebugStream;

 private:
	  AliTRDmcmSim(const AliTRDmcmSim &m);             // not implemented
	  AliTRDmcmSim &operator=(const AliTRDmcmSim &m);  // not implemented

  static Bool_t fgApplyCut;               // apply cut on deflection length

  static Int_t fgAddBaseline;             // add baseline to the ADC values

  static Bool_t fgStoreClusters;          // whether to store all clusters in the tracklets

  ClassDef(AliTRDmcmSim,7)
};

std::ostream& operator<<(std::ostream& os, const AliTRDmcmSim& mcm);

#endif
 AliTRDmcmSim.h:1
 AliTRDmcmSim.h:2
 AliTRDmcmSim.h:3
 AliTRDmcmSim.h:4
 AliTRDmcmSim.h:5
 AliTRDmcmSim.h:6
 AliTRDmcmSim.h:7
 AliTRDmcmSim.h:8
 AliTRDmcmSim.h:9
 AliTRDmcmSim.h:10
 AliTRDmcmSim.h:11
 AliTRDmcmSim.h:12
 AliTRDmcmSim.h:13
 AliTRDmcmSim.h:14
 AliTRDmcmSim.h:15
 AliTRDmcmSim.h:16
 AliTRDmcmSim.h:17
 AliTRDmcmSim.h:18
 AliTRDmcmSim.h:19
 AliTRDmcmSim.h:20
 AliTRDmcmSim.h:21
 AliTRDmcmSim.h:22
 AliTRDmcmSim.h:23
 AliTRDmcmSim.h:24
 AliTRDmcmSim.h:25
 AliTRDmcmSim.h:26
 AliTRDmcmSim.h:27
 AliTRDmcmSim.h:28
 AliTRDmcmSim.h:29
 AliTRDmcmSim.h:30
 AliTRDmcmSim.h:31
 AliTRDmcmSim.h:32
 AliTRDmcmSim.h:33
 AliTRDmcmSim.h:34
 AliTRDmcmSim.h:35
 AliTRDmcmSim.h:36
 AliTRDmcmSim.h:37
 AliTRDmcmSim.h:38
 AliTRDmcmSim.h:39
 AliTRDmcmSim.h:40
 AliTRDmcmSim.h:41
 AliTRDmcmSim.h:42
 AliTRDmcmSim.h:43
 AliTRDmcmSim.h:44
 AliTRDmcmSim.h:45
 AliTRDmcmSim.h:46
 AliTRDmcmSim.h:47
 AliTRDmcmSim.h:48
 AliTRDmcmSim.h:49
 AliTRDmcmSim.h:50
 AliTRDmcmSim.h:51
 AliTRDmcmSim.h:52
 AliTRDmcmSim.h:53
 AliTRDmcmSim.h:54
 AliTRDmcmSim.h:55
 AliTRDmcmSim.h:56
 AliTRDmcmSim.h:57
 AliTRDmcmSim.h:58
 AliTRDmcmSim.h:59
 AliTRDmcmSim.h:60
 AliTRDmcmSim.h:61
 AliTRDmcmSim.h:62
 AliTRDmcmSim.h:63
 AliTRDmcmSim.h:64
 AliTRDmcmSim.h:65
 AliTRDmcmSim.h:66
 AliTRDmcmSim.h:67
 AliTRDmcmSim.h:68
 AliTRDmcmSim.h:69
 AliTRDmcmSim.h:70
 AliTRDmcmSim.h:71
 AliTRDmcmSim.h:72
 AliTRDmcmSim.h:73
 AliTRDmcmSim.h:74
 AliTRDmcmSim.h:75
 AliTRDmcmSim.h:76
 AliTRDmcmSim.h:77
 AliTRDmcmSim.h:78
 AliTRDmcmSim.h:79
 AliTRDmcmSim.h:80
 AliTRDmcmSim.h:81
 AliTRDmcmSim.h:82
 AliTRDmcmSim.h:83
 AliTRDmcmSim.h:84
 AliTRDmcmSim.h:85
 AliTRDmcmSim.h:86
 AliTRDmcmSim.h:87
 AliTRDmcmSim.h:88
 AliTRDmcmSim.h:89
 AliTRDmcmSim.h:90
 AliTRDmcmSim.h:91
 AliTRDmcmSim.h:92
 AliTRDmcmSim.h:93
 AliTRDmcmSim.h:94
 AliTRDmcmSim.h:95
 AliTRDmcmSim.h:96
 AliTRDmcmSim.h:97
 AliTRDmcmSim.h:98
 AliTRDmcmSim.h:99
 AliTRDmcmSim.h:100
 AliTRDmcmSim.h:101
 AliTRDmcmSim.h:102
 AliTRDmcmSim.h:103
 AliTRDmcmSim.h:104
 AliTRDmcmSim.h:105
 AliTRDmcmSim.h:106
 AliTRDmcmSim.h:107
 AliTRDmcmSim.h:108
 AliTRDmcmSim.h:109
 AliTRDmcmSim.h:110
 AliTRDmcmSim.h:111
 AliTRDmcmSim.h:112
 AliTRDmcmSim.h:113
 AliTRDmcmSim.h:114
 AliTRDmcmSim.h:115
 AliTRDmcmSim.h:116
 AliTRDmcmSim.h:117
 AliTRDmcmSim.h:118
 AliTRDmcmSim.h:119
 AliTRDmcmSim.h:120
 AliTRDmcmSim.h:121
 AliTRDmcmSim.h:122
 AliTRDmcmSim.h:123
 AliTRDmcmSim.h:124
 AliTRDmcmSim.h:125
 AliTRDmcmSim.h:126
 AliTRDmcmSim.h:127
 AliTRDmcmSim.h:128
 AliTRDmcmSim.h:129
 AliTRDmcmSim.h:130
 AliTRDmcmSim.h:131
 AliTRDmcmSim.h:132
 AliTRDmcmSim.h:133
 AliTRDmcmSim.h:134
 AliTRDmcmSim.h:135
 AliTRDmcmSim.h:136
 AliTRDmcmSim.h:137
 AliTRDmcmSim.h:138
 AliTRDmcmSim.h:139
 AliTRDmcmSim.h:140
 AliTRDmcmSim.h:141
 AliTRDmcmSim.h:142
 AliTRDmcmSim.h:143
 AliTRDmcmSim.h:144
 AliTRDmcmSim.h:145
 AliTRDmcmSim.h:146
 AliTRDmcmSim.h:147
 AliTRDmcmSim.h:148
 AliTRDmcmSim.h:149
 AliTRDmcmSim.h:150
 AliTRDmcmSim.h:151
 AliTRDmcmSim.h:152
 AliTRDmcmSim.h:153
 AliTRDmcmSim.h:154
 AliTRDmcmSim.h:155
 AliTRDmcmSim.h:156
 AliTRDmcmSim.h:157
 AliTRDmcmSim.h:158
 AliTRDmcmSim.h:159
 AliTRDmcmSim.h:160
 AliTRDmcmSim.h:161
 AliTRDmcmSim.h:162
 AliTRDmcmSim.h:163
 AliTRDmcmSim.h:164
 AliTRDmcmSim.h:165
 AliTRDmcmSim.h:166
 AliTRDmcmSim.h:167
 AliTRDmcmSim.h:168
 AliTRDmcmSim.h:169
 AliTRDmcmSim.h:170
 AliTRDmcmSim.h:171
 AliTRDmcmSim.h:172
 AliTRDmcmSim.h:173
 AliTRDmcmSim.h:174
 AliTRDmcmSim.h:175
 AliTRDmcmSim.h:176
 AliTRDmcmSim.h:177
 AliTRDmcmSim.h:178
 AliTRDmcmSim.h:179
 AliTRDmcmSim.h:180
 AliTRDmcmSim.h:181
 AliTRDmcmSim.h:182
 AliTRDmcmSim.h:183
 AliTRDmcmSim.h:184
 AliTRDmcmSim.h:185
 AliTRDmcmSim.h:186
 AliTRDmcmSim.h:187
 AliTRDmcmSim.h:188
 AliTRDmcmSim.h:189
 AliTRDmcmSim.h:190
 AliTRDmcmSim.h:191
 AliTRDmcmSim.h:192
 AliTRDmcmSim.h:193
 AliTRDmcmSim.h:194
 AliTRDmcmSim.h:195
 AliTRDmcmSim.h:196
 AliTRDmcmSim.h:197
 AliTRDmcmSim.h:198
 AliTRDmcmSim.h:199
 AliTRDmcmSim.h:200
 AliTRDmcmSim.h:201
 AliTRDmcmSim.h:202
 AliTRDmcmSim.h:203
 AliTRDmcmSim.h:204
 AliTRDmcmSim.h:205
 AliTRDmcmSim.h:206
 AliTRDmcmSim.h:207
 AliTRDmcmSim.h:208
 AliTRDmcmSim.h:209
 AliTRDmcmSim.h:210
 AliTRDmcmSim.h:211
 AliTRDmcmSim.h:212
 AliTRDmcmSim.h:213
 AliTRDmcmSim.h:214
 AliTRDmcmSim.h:215
 AliTRDmcmSim.h:216
 AliTRDmcmSim.h:217
 AliTRDmcmSim.h:218
 AliTRDmcmSim.h:219
 AliTRDmcmSim.h:220
 AliTRDmcmSim.h:221
 AliTRDmcmSim.h:222
 AliTRDmcmSim.h:223
 AliTRDmcmSim.h:224
 AliTRDmcmSim.h:225
 AliTRDmcmSim.h:226
 AliTRDmcmSim.h:227
 AliTRDmcmSim.h:228
 AliTRDmcmSim.h:229
 AliTRDmcmSim.h:230
 AliTRDmcmSim.h:231
 AliTRDmcmSim.h:232
 AliTRDmcmSim.h:233
 AliTRDmcmSim.h:234
 AliTRDmcmSim.h:235
 AliTRDmcmSim.h:236
 AliTRDmcmSim.h:237
 AliTRDmcmSim.h:238
 AliTRDmcmSim.h:239
 AliTRDmcmSim.h:240
 AliTRDmcmSim.h:241
 AliTRDmcmSim.h:242
 AliTRDmcmSim.h:243
 AliTRDmcmSim.h:244
 AliTRDmcmSim.h:245
 AliTRDmcmSim.h:246
 AliTRDmcmSim.h:247
 AliTRDmcmSim.h:248
 AliTRDmcmSim.h:249
 AliTRDmcmSim.h:250
 AliTRDmcmSim.h:251
 AliTRDmcmSim.h:252
 AliTRDmcmSim.h:253
 AliTRDmcmSim.h:254
 AliTRDmcmSim.h:255
 AliTRDmcmSim.h:256
 AliTRDmcmSim.h:257
 AliTRDmcmSim.h:258
 AliTRDmcmSim.h:259
 AliTRDmcmSim.h:260
 AliTRDmcmSim.h:261
 AliTRDmcmSim.h:262
 AliTRDmcmSim.h:263
 AliTRDmcmSim.h:264
 AliTRDmcmSim.h:265