ROOT logo
/**************************************************************************
 * Copyright(c) 2007, ALICE Experiment at CERN, All rights reserved.      *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */

// The class which simulates the pulse shape from the PHOS FEE shaper,
// make sampled amplitudes, digitize them.
// Use case:
//   AliPHOSPulseGenerator *pulse = new AliPHOSPulseGenerator(energy,time);
//   Int_t *adcHG = new Int_t[pulse->GetRawFormatTimeBins()];
//   Int_t *adcLG= new Int_t[pulse->GetRawFormatTimeBins()];
//   pulse->AddNoise(1.);
//   pulse->MakeSamples();
//   pulse->GetSamples(adcHG, adcHG) ; 
//   pulse->Print();
//   pulse->Draw();
//
// Author: Yuri Kharlov, after Yves Schutz and Per Thomas Hille

// --- ROOT system ---

#include <TCanvas.h> 
#include <TF1.h> 
#include <TGraph.h> 
#include <TH1F.h> 
#include <TMath.h> 
#include <TRandom.h>

// --- AliRoot header files ---
#include "AliLog.h"
#include "AliPHOSPulseGenerator.h"

// --- Standard library ---
#include <cmath>
#include <iostream>

using std::cout;
using std::endl; 

ClassImp(AliPHOSPulseGenerator) 

Int_t    AliPHOSPulseGenerator::fgOrder       = 2 ;        // order of the Gamma function
Double_t AliPHOSPulseGenerator::fgTimePeak    = 2.1E-6 ;   // tau=2.1 micro seconds
Double_t AliPHOSPulseGenerator::fgTimeTrigger = 100E-9 ;   // one tick 100 ns

//-----------------------------------------------------------------------------
AliPHOSPulseGenerator::AliPHOSPulseGenerator(Double_t a, Double_t t0)
  : TObject(), fAmplitude(a), fTZero(t0), fHG2LGratio(16.), fDataHG(0), fDataLG(0), fDigitize(kTRUE)
{
  // Contruct a pulsegenrator object and initializes all necessary parameters
  // @param a digit amplitude in GeV
  // @param t0 time delay in nanoseconds of signal relative the first sample. 
  // This value should be between 0 and Ts, where Ts is the sample interval

  fDataHG = new Double_t[fkTimeBins];
  fDataLG = new Double_t[fkTimeBins];
  Reset();
}

//-----------------------------------------------------------------------------
AliPHOSPulseGenerator::~AliPHOSPulseGenerator()
{
  // Destructor: delete arrays of samples

  delete [] fDataHG;
  fDataHG=0;
  delete [] fDataLG;
  fDataLG=0;
}

//-----------------------------------------------------------------------------
void AliPHOSPulseGenerator::Reset()
{
  // Reset all sample amplitudes to 0

  for (Int_t i=0; i<fkTimeBins; i++) {
    fDataHG[i] = 0.;
    fDataLG[i] = 0.;
  }
}

//-----------------------------------------------------------------------------
void AliPHOSPulseGenerator::AddBaseline(Double_t baselineLevel)
{
  // Adds a baseline offset to the signal
  // @param baselineLevel The basline level to add
  for (Int_t i=0; i<fkTimeBins; i++) {
    fDataHG[i] += baselineLevel;
    fDataLG[i] += baselineLevel;
  }
  // Digitize floating point amplitudes to integers
  if (fDigitize) Digitize();
}

//-----------------------------------------------------------------------------
void AliPHOSPulseGenerator::AddNoise(Double_t sigma)
{
  // Adds Gaussian uncorrelated to the sample array
  // @param sigma the noise amplitude in entities of ADC levels  
  
  for (Int_t i=0; i<fkTimeBins; i++) {
    fDataHG[i] = gRandom->Gaus(0., sigma) ; 
    fDataLG[i] = gRandom->Gaus(0., sigma) ; 
  }
}

//-----------------------------------------------------------------------------
void AliPHOSPulseGenerator::AddNoise(Double_t * /* sigma */, Double_t /* cutoff */)
{
  //Adds correlated Gaussian noise with cutof frequency "cutoff"
  // @param sigma noise amplitude in entities of ADC levels
  // @param -30DB cutoff frequency of the noise in entities of sampling frequency

  AliError("not implemented yet");
}

//-----------------------------------------------------------------------------
void AliPHOSPulseGenerator::AddPretriggerSamples(Int_t nPresamples)
{
  // Adds pretrigger samples to the sample arrays and replace them
  // with concatinated and truncated arrays

  Double_t *tmpDataHG = new Double_t[fkTimeBins];
  Double_t *tmpDataLG = new Double_t[fkTimeBins];
  Int_t i;
  for (i=0; i<fkTimeBins; i++) {
    tmpDataHG[i] = fDataHG[i];
    tmpDataLG[i] = fDataLG[i];
  }
  for (i=0; i<fkTimeBins; i++) {
    if (i<nPresamples) {
      fDataHG[i] = 0.;
      fDataLG[i] = 0.;
    }
    else {
      fDataHG[i] = tmpDataHG[i-nPresamples];
      fDataLG[i] = tmpDataLG[i-nPresamples];
    }
  }
  delete [] tmpDataHG;
  delete [] tmpDataLG;
}

//-----------------------------------------------------------------------------
void AliPHOSPulseGenerator::Digitize()
{
  // Emulates ADC: rounds up to nearest integer value all amplitudes
  for (Int_t i=0; i<fkTimeBins; i++) {
    fDataHG[i] = (Int_t)(fDataHG[i]);
    fDataLG[i] = (Int_t)(fDataLG[i]);
  }
}

//-----------------------------------------------------------------------------
Double_t AliPHOSPulseGenerator::RawResponseFunction(Double_t *x, Double_t *par) 
{
  // Shape of the electronics raw reponse:
  // It is a semi-gaussian, 2nd order Gamma function of the general form
  // v(t) = A *(t/tp)**n * exp(-n * t/tp-n) with 
  // tp : peaking time  fgTimePeak
  // n  : order of the function
  
  Double_t signal ;
  Double_t xx = x[0] - ( fgTimeTrigger + par[1] ) ; 

  if (xx < 0 || xx > GetRawFormatTimeMax()) 
    signal = 0. ;  
  else {
    signal =  par[0] * TMath::Power(xx/fgTimePeak, fgOrder) * TMath::Exp(-fgOrder*(xx/fgTimePeak-1.)) ; //normalized to par[2] at maximum
  }
  return signal ;  
}

//__________________________________________________________________
Bool_t AliPHOSPulseGenerator::MakeSamples()
{
  // for a start time fTZero and an amplitude fAmplitude given by digit, 
  // calculates the raw sampled response AliPHOSPulseGenerator::RawResponseFunction

  const Int_t kRawSignalOverflow = 0x3FF ; // decimal 1023
  Bool_t lowGain = kFALSE ; 

  TF1 signalF("signal", RawResponseFunction, 0, GetRawFormatTimeMax(), 4);

  for (Int_t iTime = 0; iTime < GetRawFormatTimeBins(); iTime++) {
    signalF.SetParameter(0, fAmplitude) ; 
    signalF.SetParameter(1, fTZero) ; 
    Double_t time = iTime * GetRawFormatTimeMax() / GetRawFormatTimeBins() ;
    Double_t signal = signalF.Eval(time) ;     
    fDataHG[iTime] += signal;
    if ( static_cast<Int_t>(fDataHG[iTime]+0.5) > kRawSignalOverflow ){  // larger than 10 bits 
      fDataHG[iTime] = kRawSignalOverflow ;
      lowGain = kTRUE ; 
    }

    Double_t aLGamp = fAmplitude/fHG2LGratio ;
    signalF.SetParameter(0, aLGamp) ;
    signal = signalF.Eval(time) ;  
    fDataLG[iTime] += signal;
    if ( static_cast<Int_t>(fDataLG[iTime]+0.5) > kRawSignalOverflow)  // larger than 10 bits 
      fDataLG[iTime] = kRawSignalOverflow ;
  }
  // Digitize floating point amplitudes to integers
  if (fDigitize) Digitize();
  return lowGain ; 
}

//__________________________________________________________________
void AliPHOSPulseGenerator::GetSamples(Int_t *adcHG, Int_t *adcLG) const
{
  // Return integer sample arrays adcHG and adcLG
  for (Int_t iTime = 0; iTime < GetRawFormatTimeBins(); iTime++) {
    adcHG[iTime] = static_cast<Int_t>(fDataHG[iTime]) ;
    adcLG[iTime] = static_cast<Int_t>(fDataLG[iTime]) ;
  }
}

//__________________________________________________________________
void AliPHOSPulseGenerator::Print(Option_t*) const
{
  // Prints sampled amplitudes to stdout
  Int_t i;
  cout << "High gain: ";
  for (i=0; i<fkTimeBins; i++)
    cout << (Int_t)fDataHG[i] << " ";
  cout << endl;

  cout << "Low  gain: ";
  for (i=0; i<fkTimeBins; i++)
    cout << (Int_t)fDataLG[i] << " ";
  cout << endl;
}

//__________________________________________________________________
void AliPHOSPulseGenerator::Draw(Option_t* opt)
{
  // Draw graphs with high and low gain samples
  // Option_t* opt="all": draw both HG and LG in one canvas
  //               "HG" : draw HG only
  //               "LG" : draw LG only

  Double_t *time = new Double_t[fkTimeBins];
  for (Int_t iTime = 0; iTime < GetRawFormatTimeBins(); iTime++) {
    time[iTime] = iTime * GetRawFormatTimeMax() / GetRawFormatTimeBins() ;
  }
  Int_t nPoints = fkTimeBins;
  TGraph *graphHG = new TGraph(nPoints,time,fDataHG);
  TGraph *graphLG = new TGraph(nPoints,time,fDataLG);
  graphHG->SetMarkerStyle(20);
  graphLG->SetMarkerStyle(20);
  graphHG->SetMarkerSize(0.4);
  graphLG->SetMarkerSize(0.4);
  graphHG->SetTitle("High gain samples");
  graphLG->SetTitle("Low gain samples");

  TCanvas *c1 = new TCanvas("c1","Raw ALTRO samples",10,10,700,500);
  c1->SetFillColor(0);

  if (strstr(opt,"all")){
    c1->Divide(2,1);
    c1->cd(1);
    gPad->SetLeftMargin(0.15);
  }
  if (strstr(opt,"LG") == 0){
    graphHG->Draw("AP");
    graphHG->GetHistogram()->SetTitleOffset(1.0,"Y");
    graphHG->GetHistogram()->SetXTitle("time, sec");
    graphHG->GetHistogram()->SetYTitle("Amplitude, ADC counts");
  }
  if (strstr(opt,"all")){
    c1->cd(2);
    gPad->SetLeftMargin(0.15);
  }
  if (strstr(opt,"HG") == 0){
    graphLG->Draw("AP");
    graphLG->GetHistogram()->SetTitleOffset(1.0,"Y");
    graphLG->GetHistogram()->SetXTitle("time, sec");
    graphLG->GetHistogram()->SetYTitle("Amplitude, ADC counts");
  }
  c1->Update();
}

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