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

/* $Id$ */

// The class which simulates the pulse shape from the PHOS FEE shaper,
// make sampled amplitudes, digitize them.
// The shape is described by the function RawResponseFunction
// The input parameters for the shape function (time and aplitude) are passed
// to the class via constructor.
// Other parameters related to the shaper are hard-coded in this class

#include <Rtypes.h>

class AliPHOSPulseGenerator : public TObject
{
public:
  AliPHOSPulseGenerator(Double_t a=0, Double_t t0=0);
  virtual  ~AliPHOSPulseGenerator();

  void      AddBaseline(Double_t baselineLevel);
  void      AddNoise   (Double_t sigma);
  void      AddNoise   (Double_t *sigma, Double_t cutoff);
  void      AddPretriggerSamples(Int_t nPresamples);
  void      GetSamples(Int_t *adcHG, Int_t *adcLG) const;
  Bool_t    MakeSamples();
  void      Digitize();
  Bool_t    GetDigitize() {return fDigitize;}
  void      SetDigitise (Bool_t flag) {fDigitize  = flag;}
  void      SetAmplitude(Double_t  a) {fAmplitude = a   ; Reset();}
  void      SetTZero    (Double_t t0) {fTZero     = t0  ; Reset();}
  void      SetHG2LGRatio(Double_t r=16.){fHG2LGratio = r ;}
  void      SetTimeStep(Double_t step=100.e-9){fgTimeTrigger=step ;} 
  void      Reset();

  // Raw Read Out
  Int_t           GetRawFormatOrder()       const { return fgOrder ; }
  static Int_t    GetRawFormatTimeBins()          { return fkTimeBins ; }
  static Double_t GetRawFormatTimeMax()           { return fgTimeTrigger*fkTimeBins ; }
  Double_t        GetRawFormatTimePeak()    const { return fgTimePeak ; }
  Double_t        GetRawFormatTimeTrigger() const { return fgTimeTrigger ; }
  static Double_t RawResponseFunction   (Double_t *x, Double_t *par) ;

  virtual void Print(Option_t*) const;
  virtual void Draw (Option_t* opt = "all");

private:
  AliPHOSPulseGenerator(const AliPHOSPulseGenerator & pulse);
  AliPHOSPulseGenerator& operator = (const AliPHOSPulseGenerator &) {return *this;}

private:
  static Int_t    fgOrder ;             // order of the gamma function

  static const Int_t fkTimeBins = 100 ; // number of sampling bins

  static Double_t fgTimeMax ;           // maximum sampled time
  static Double_t fgTimePeak ;          // peaking time
  static Double_t fgTimeTrigger ;       // time of the trigger for the RO signal 
  
private:
  Double_t  fAmplitude;    // signal amplitude in GeV
  Double_t  fTZero;        // signal start time in ns
  Double_t  fHG2LGratio ;  // HG/LG ratio for given channel
  Double_t *fDataHG;       // samples array for high gain
  Double_t *fDataLG;       // samples array for low  gain
  Bool_t    fDigitize;     // true is samples should be rounded to integers
  
  ClassDef(AliPHOSPulseGenerator,1)

};

#endif

 AliPHOSPulseGenerator.h:1
 AliPHOSPulseGenerator.h:2
 AliPHOSPulseGenerator.h:3
 AliPHOSPulseGenerator.h:4
 AliPHOSPulseGenerator.h:5
 AliPHOSPulseGenerator.h:6
 AliPHOSPulseGenerator.h:7
 AliPHOSPulseGenerator.h:8
 AliPHOSPulseGenerator.h:9
 AliPHOSPulseGenerator.h:10
 AliPHOSPulseGenerator.h:11
 AliPHOSPulseGenerator.h:12
 AliPHOSPulseGenerator.h:13
 AliPHOSPulseGenerator.h:14
 AliPHOSPulseGenerator.h:15
 AliPHOSPulseGenerator.h:16
 AliPHOSPulseGenerator.h:17
 AliPHOSPulseGenerator.h:18
 AliPHOSPulseGenerator.h:19
 AliPHOSPulseGenerator.h:20
 AliPHOSPulseGenerator.h:21
 AliPHOSPulseGenerator.h:22
 AliPHOSPulseGenerator.h:23
 AliPHOSPulseGenerator.h:24
 AliPHOSPulseGenerator.h:25
 AliPHOSPulseGenerator.h:26
 AliPHOSPulseGenerator.h:27
 AliPHOSPulseGenerator.h:28
 AliPHOSPulseGenerator.h:29
 AliPHOSPulseGenerator.h:30
 AliPHOSPulseGenerator.h:31
 AliPHOSPulseGenerator.h:32
 AliPHOSPulseGenerator.h:33
 AliPHOSPulseGenerator.h:34
 AliPHOSPulseGenerator.h:35
 AliPHOSPulseGenerator.h:36
 AliPHOSPulseGenerator.h:37
 AliPHOSPulseGenerator.h:38
 AliPHOSPulseGenerator.h:39
 AliPHOSPulseGenerator.h:40
 AliPHOSPulseGenerator.h:41
 AliPHOSPulseGenerator.h:42
 AliPHOSPulseGenerator.h:43
 AliPHOSPulseGenerator.h:44
 AliPHOSPulseGenerator.h:45
 AliPHOSPulseGenerator.h:46
 AliPHOSPulseGenerator.h:47
 AliPHOSPulseGenerator.h:48
 AliPHOSPulseGenerator.h:49
 AliPHOSPulseGenerator.h:50
 AliPHOSPulseGenerator.h:51
 AliPHOSPulseGenerator.h:52
 AliPHOSPulseGenerator.h:53
 AliPHOSPulseGenerator.h:54
 AliPHOSPulseGenerator.h:55
 AliPHOSPulseGenerator.h:56
 AliPHOSPulseGenerator.h:57
 AliPHOSPulseGenerator.h:58
 AliPHOSPulseGenerator.h:59
 AliPHOSPulseGenerator.h:60
 AliPHOSPulseGenerator.h:61
 AliPHOSPulseGenerator.h:62
 AliPHOSPulseGenerator.h:63
 AliPHOSPulseGenerator.h:64
 AliPHOSPulseGenerator.h:65
 AliPHOSPulseGenerator.h:66
 AliPHOSPulseGenerator.h:67
 AliPHOSPulseGenerator.h:68
 AliPHOSPulseGenerator.h:69
 AliPHOSPulseGenerator.h:70
 AliPHOSPulseGenerator.h:71
 AliPHOSPulseGenerator.h:72
 AliPHOSPulseGenerator.h:73
 AliPHOSPulseGenerator.h:74
 AliPHOSPulseGenerator.h:75