ROOT logo
#ifndef ALITOFSDIGITIZER_H
#define ALITOFSDIGITIZER_H

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

//__________________________________________//
//                                          //
//       Class for making SDigits in TOF    // 
//                                          //
//-- Authors: F. Pierella, A. De Caro       //
//                                          //
//__________________________________________//

/* $Id$ */

#include "TNamed.h"

class TF1;
class TString;

class AliLoader;
class AliRunLoader;

class AliTOFcalib;

class AliTOFSDigitizer: public TNamed {

public:
  AliTOFSDigitizer() ;          // ctor
  //AliTOFSDigitizer(const char* HeaderFile) ; // par ctor
  AliTOFSDigitizer(const char* HeaderFile, Int_t evNumber1=-1, Int_t nEvents=0) ; // par ctor

  AliTOFSDigitizer(const AliTOFSDigitizer &source); // copy constructor
  AliTOFSDigitizer& operator=(const AliTOFSDigitizer &/*source*/); // ass. op.

  virtual ~AliTOFSDigitizer() ; // dtor

  //static Float_t WidthTdcBin() {return fgkTdcBin;};

  virtual void  Digitize(Option_t *verboseOption); 
  void SetSDigitsFile(char * /*file*/ ) const {;}
  
  void InitParameters();
  virtual void PrintParameters() const ;
  virtual void SimulateDetectorResponse(Float_t z0, Float_t x0, Float_t geantTime, Int_t& nActivatedPads, Int_t& nFiredPads, Bool_t* isFired, Int_t* nPlace, Float_t* qInduced, Float_t* tofTime, Float_t& averageTime);
  virtual void SimulateDetectorResponseOLD(Float_t z0, Float_t x0, Float_t geantTime, Int_t& nActivatedPads, Int_t& nFiredPads, Bool_t* isFired, Int_t* nPlace, Float_t* qInduced, Float_t* tofTime, Float_t& averageTime);
  virtual void Print(Option_t* opt) const ;
  void  SetFirstEvent(Int_t event1)      {fEvent1 = event1;}
  void  SetSecondEvent(Int_t event2)     {fEvent2 = event2;}
  Int_t GetFirstEvent()  const {return fEvent1;}
  Int_t GetSecondEvent() const {return fEvent2;}
  Int_t GetNEvents() const {return (fEvent2-fEvent1);}
  void  SelectSectorAndPlate(Int_t sector, Int_t plate);

  // setters and getters for detector simulation
  // it summarizes all it is known about TOF strip 
  void  SetPadefficiency(Float_t padefficiency)      {fpadefficiency=padefficiency;}
  void  SetEdgeEffect(Int_t   edgeEffect)            {fEdgeEffect=edgeEffect;}
  void  SetEdgeTails(Int_t   edgeTails)              {fEdgeTails=edgeTails;}
  void  SetHparameter(Float_t hparameter)            {fHparameter=hparameter;}
  void  SetH2parameter(Float_t h2parameter)          {fH2parameter=h2parameter;}
  void  SetKparameter(Float_t kparameter)            {fKparameter=kparameter;}
  void  SetK2parameter(Float_t k2parameter)          {fK2parameter=k2parameter;}
  void  SetEffCenter(Float_t effCenter)              {fEffCenter=effCenter;}
  void  SetEffBoundary(Float_t effBoundary)          {fEffBoundary=effBoundary;}
  void  SetEff2Boundary(Float_t eff2Boundary)        {fEff2Boundary=eff2Boundary;}
  void  SetEff3Boundary(Float_t eff3Boundary)        {fEff3Boundary=eff3Boundary;}
  void  SetAddTRes(Float_t addTRes)                  {fAddTRes=addTRes;}
  void  SetResCenter (Float_t resCenter)             {fResCenter=resCenter;}
  void  SetResBoundary(Float_t resBoundary)          {fResBoundary=resBoundary;}
  void  SetResSlope(Float_t resSlope)                {fResSlope=resSlope;}
  void  SetTimeWalkCenter(Float_t timeWalkCenter)    {fTimeWalkCenter=timeWalkCenter;}
  void  SetTimeWalkBoundary(Float_t timeWalkBoundary){fTimeWalkBoundary=timeWalkBoundary;}
  void  SetTimeWalkSlope(Float_t timeWalkSlope)      {fTimeWalkSlope=timeWalkSlope;}

  void  SetTimeDelayFlag(Int_t timeDelayFlag)        {fTimeDelayFlag=timeDelayFlag;}
  void  SetPulseHeightSlope(Float_t pulseHeightSlope){fPulseHeightSlope=pulseHeightSlope;}
  void  SetTimeDelaySlope(Float_t timeDelaySlope)    {fTimeDelaySlope=timeDelaySlope;}
  void  SetMinimumCharge(Float_t minimumCharge)      {fMinimumCharge=minimumCharge;}
  void  SetChargeSmearing(Float_t chargeSmearing)    {fChargeSmearing=chargeSmearing;}
  void  SetLogChargeSmearing(Float_t logChargeSmearing){fLogChargeSmearing=logChargeSmearing;}
  void  SetTimeSmearing(Float_t timeSmearing)        {fTimeSmearing=timeSmearing;}
  void  SetAverageTimeFlag(Int_t averageTimeFlag)    {fAverageTimeFlag=averageTimeFlag;}

  void  SetAdcBin(Float_t adcBin)                    {fAdcBin=adcBin;}
  void  SetAdcMean(Float_t adcMean)                  {fAdcMean=adcMean;}
  void  SetAdcRms(Float_t adcRms)                    {fAdcRms=adcRms;}

  void SetTimeResolution(Float_t time) {fTimeResolution=time;}

  Float_t  GetPadefficiency()    const {return fpadefficiency;}
  Int_t    GetEdgeEffect()       const {return fEdgeEffect;}
  Int_t    GetEdgeTails()        const {return fEdgeTails;}
  Float_t  GetHparameter()       const {return fHparameter;}
  Float_t  GetH2parameter()      const {return fH2parameter;}
  Float_t  GetKparameter()       const {return fKparameter;}
  Float_t  GetK2parameter()      const {return fK2parameter;}
  Float_t  GetEffCenter()        const {return fEffCenter;}
  Float_t  GetEffBoundary()      const {return fEffBoundary;}
  Float_t  GetEff2Boundary()     const {return fEff2Boundary;}
  Float_t  GetEff3Boundary()     const {return fEff3Boundary;}
  Float_t  GetAddTRes ()         const {return fAddTRes;}
  Float_t  GetResCenter ()       const {return fResCenter;}
  Float_t  GetResBoundary()      const {return fResBoundary;}
  Float_t  GetResSlope()         const {return fResSlope;}
  Float_t  GetTimeWalkCenter()   const {return fTimeWalkCenter;}
  Float_t  GetTimeWalkBoundary() const {return fTimeWalkBoundary;}
  Float_t  GetTimeWalkSlope()    const {return fTimeWalkSlope;}
  Int_t    GetTimeDelayFlag()    const {return fTimeDelayFlag;}
  Float_t  GetPulseHeightSlope() const {return fPulseHeightSlope;}
  Float_t  GetTimeDelaySlope()   const {return fTimeDelaySlope;}
  Float_t  GetMinimumCharge()    const {return fMinimumCharge;}
  Float_t  GetChargeSmearing()   const {return fChargeSmearing;}
  Float_t  GetLogChargeSmearing()const {return fLogChargeSmearing;}
  Float_t  GetTimeSmearing()     const {return fTimeSmearing;}
  Int_t    GetAverageTimeFlag()  const {return fAverageTimeFlag;}

  Float_t  GetAdcBin()           const {return fAdcBin;}
  Float_t  GetAdcMean()          const {return fAdcMean;}
  Float_t  GetAdcRms()           const {return fAdcRms;}
  
  Float_t  GetTimeResolution()  const {return fTimeResolution;}


protected:


private:
  Int_t   fEvent1;          // lower bound for events to sdigitize
  Int_t   fEvent2;          // upper bound for events to sdigitize
  TF1     *ftail;           // pointer to formula for time with tail
  TString fHeadersFile;     // input file
  AliRunLoader* fRunLoader; //! Run Loader
  AliLoader* fTOFLoader;    //! Loader

  Int_t fSelectedSector;    // sector number for sdigitization
  Int_t fSelectedPlate ;    // plate  number for sdigitization

  // detector response simulation
  // Intrisic MRPC time resolution and pad (edge effect) parameters
  Float_t fTimeResolution;   // time resolution (ps)
  Float_t fpadefficiency;   // intrinsic pad efficiency, used if fEdgeEffect==0
  Int_t   fEdgeEffect;      // edge effects option
  Int_t   fEdgeTails;       // edge tails option
  Float_t fHparameter;      // sensitive edge (to produce hits on the neighbouring pads)
                            //                 0.7 cm (old); 0.4 cm (new)
  Float_t fH2parameter;     // parameter to fit the efficiency
  Float_t fKparameter;      // sensitive edge (going ahead towards the center
                            // no delay effects are suffered) 1.0 cm (old); 0.5 cm (new)
  Float_t fK2parameter;     // parameter to fit the efficiency
  // Pad Efficiency and Resolution parameters
  Float_t fEffCenter;       // efficiency in the central region of the pad
  Float_t fEffBoundary;     // efficiency at the boundary of the pad
  Float_t fEff2Boundary;    // efficiency value at H2parameter
  Float_t fEff3Boundary;    // efficiency value at K2parameter
  Float_t fAddTRes;         // additional contribution to 
                            // the intrinsic MRPC time resolution (ps)
  Float_t fResCenter;       // resolution (ps) in the central region of the pad
  Float_t fResBoundary;     // resolution (ps)  at the boundary of the pad
  Float_t fResSlope;        // slope (ps/K) for neighbouring pad
  // Time Walk parameters
  Float_t fTimeWalkCenter;  // time walk (ps) in the central region of the pad
  Float_t fTimeWalkBoundary;// time walk (ps) at the boundary of the pad
  Float_t fTimeWalkSlope;   // slope (ps/K) for neighbouring pad
  Int_t   fTimeDelayFlag;   // flag for delay due to the PulseHeightEffect
  Float_t fPulseHeightSlope;// It determines the charge amount induced
  // due to edge effect, using the formula
  // qInduced=exp(-PulseHeightSlope*x)
  Float_t fTimeDelaySlope;  // It determines the time delay. This is the slope
  // in the T1-T2 vs log(q1/q2) plot
  // ADC-TDC correlation parameters
  Float_t fMinimumCharge;   // Minimum charge amount which could be induced
  Float_t fChargeSmearing;  // Smearing in charge in (q1/q2) vs x plot
  Float_t fLogChargeSmearing;// Smearing in log of charge ratio
  Float_t fTimeSmearing;    // Smearing in time in time vs log(q1/q2) plot
  Int_t   fAverageTimeFlag; // flag (see the setter for details)

  Float_t fAdcBin;      // charge-window for the ADC bins [pC]
  Float_t fAdcMean;     // mean value for the ADC spectrum [bins]
  Float_t fAdcRms;      // rms value for the ADC spectrum [bins]

  AliTOFcalib * fCalib; //! calibration object

  ClassDef(AliTOFSDigitizer,5)  // creates TOF SDigits

};

#endif // AliTOFSDIGITIZER_H
 AliTOFSDigitizer.h:1
 AliTOFSDigitizer.h:2
 AliTOFSDigitizer.h:3
 AliTOFSDigitizer.h:4
 AliTOFSDigitizer.h:5
 AliTOFSDigitizer.h:6
 AliTOFSDigitizer.h:7
 AliTOFSDigitizer.h:8
 AliTOFSDigitizer.h:9
 AliTOFSDigitizer.h:10
 AliTOFSDigitizer.h:11
 AliTOFSDigitizer.h:12
 AliTOFSDigitizer.h:13
 AliTOFSDigitizer.h:14
 AliTOFSDigitizer.h:15
 AliTOFSDigitizer.h:16
 AliTOFSDigitizer.h:17
 AliTOFSDigitizer.h:18
 AliTOFSDigitizer.h:19
 AliTOFSDigitizer.h:20
 AliTOFSDigitizer.h:21
 AliTOFSDigitizer.h:22
 AliTOFSDigitizer.h:23
 AliTOFSDigitizer.h:24
 AliTOFSDigitizer.h:25
 AliTOFSDigitizer.h:26
 AliTOFSDigitizer.h:27
 AliTOFSDigitizer.h:28
 AliTOFSDigitizer.h:29
 AliTOFSDigitizer.h:30
 AliTOFSDigitizer.h:31
 AliTOFSDigitizer.h:32
 AliTOFSDigitizer.h:33
 AliTOFSDigitizer.h:34
 AliTOFSDigitizer.h:35
 AliTOFSDigitizer.h:36
 AliTOFSDigitizer.h:37
 AliTOFSDigitizer.h:38
 AliTOFSDigitizer.h:39
 AliTOFSDigitizer.h:40
 AliTOFSDigitizer.h:41
 AliTOFSDigitizer.h:42
 AliTOFSDigitizer.h:43
 AliTOFSDigitizer.h:44
 AliTOFSDigitizer.h:45
 AliTOFSDigitizer.h:46
 AliTOFSDigitizer.h:47
 AliTOFSDigitizer.h:48
 AliTOFSDigitizer.h:49
 AliTOFSDigitizer.h:50
 AliTOFSDigitizer.h:51
 AliTOFSDigitizer.h:52
 AliTOFSDigitizer.h:53
 AliTOFSDigitizer.h:54
 AliTOFSDigitizer.h:55
 AliTOFSDigitizer.h:56
 AliTOFSDigitizer.h:57
 AliTOFSDigitizer.h:58
 AliTOFSDigitizer.h:59
 AliTOFSDigitizer.h:60
 AliTOFSDigitizer.h:61
 AliTOFSDigitizer.h:62
 AliTOFSDigitizer.h:63
 AliTOFSDigitizer.h:64
 AliTOFSDigitizer.h:65
 AliTOFSDigitizer.h:66
 AliTOFSDigitizer.h:67
 AliTOFSDigitizer.h:68
 AliTOFSDigitizer.h:69
 AliTOFSDigitizer.h:70
 AliTOFSDigitizer.h:71
 AliTOFSDigitizer.h:72
 AliTOFSDigitizer.h:73
 AliTOFSDigitizer.h:74
 AliTOFSDigitizer.h:75
 AliTOFSDigitizer.h:76
 AliTOFSDigitizer.h:77
 AliTOFSDigitizer.h:78
 AliTOFSDigitizer.h:79
 AliTOFSDigitizer.h:80
 AliTOFSDigitizer.h:81
 AliTOFSDigitizer.h:82
 AliTOFSDigitizer.h:83
 AliTOFSDigitizer.h:84
 AliTOFSDigitizer.h:85
 AliTOFSDigitizer.h:86
 AliTOFSDigitizer.h:87
 AliTOFSDigitizer.h:88
 AliTOFSDigitizer.h:89
 AliTOFSDigitizer.h:90
 AliTOFSDigitizer.h:91
 AliTOFSDigitizer.h:92
 AliTOFSDigitizer.h:93
 AliTOFSDigitizer.h:94
 AliTOFSDigitizer.h:95
 AliTOFSDigitizer.h:96
 AliTOFSDigitizer.h:97
 AliTOFSDigitizer.h:98
 AliTOFSDigitizer.h:99
 AliTOFSDigitizer.h:100
 AliTOFSDigitizer.h:101
 AliTOFSDigitizer.h:102
 AliTOFSDigitizer.h:103
 AliTOFSDigitizer.h:104
 AliTOFSDigitizer.h:105
 AliTOFSDigitizer.h:106
 AliTOFSDigitizer.h:107
 AliTOFSDigitizer.h:108
 AliTOFSDigitizer.h:109
 AliTOFSDigitizer.h:110
 AliTOFSDigitizer.h:111
 AliTOFSDigitizer.h:112
 AliTOFSDigitizer.h:113
 AliTOFSDigitizer.h:114
 AliTOFSDigitizer.h:115
 AliTOFSDigitizer.h:116
 AliTOFSDigitizer.h:117
 AliTOFSDigitizer.h:118
 AliTOFSDigitizer.h:119
 AliTOFSDigitizer.h:120
 AliTOFSDigitizer.h:121
 AliTOFSDigitizer.h:122
 AliTOFSDigitizer.h:123
 AliTOFSDigitizer.h:124
 AliTOFSDigitizer.h:125
 AliTOFSDigitizer.h:126
 AliTOFSDigitizer.h:127
 AliTOFSDigitizer.h:128
 AliTOFSDigitizer.h:129
 AliTOFSDigitizer.h:130
 AliTOFSDigitizer.h:131
 AliTOFSDigitizer.h:132
 AliTOFSDigitizer.h:133
 AliTOFSDigitizer.h:134
 AliTOFSDigitizer.h:135
 AliTOFSDigitizer.h:136
 AliTOFSDigitizer.h:137
 AliTOFSDigitizer.h:138
 AliTOFSDigitizer.h:139
 AliTOFSDigitizer.h:140
 AliTOFSDigitizer.h:141
 AliTOFSDigitizer.h:142
 AliTOFSDigitizer.h:143
 AliTOFSDigitizer.h:144
 AliTOFSDigitizer.h:145
 AliTOFSDigitizer.h:146
 AliTOFSDigitizer.h:147
 AliTOFSDigitizer.h:148
 AliTOFSDigitizer.h:149
 AliTOFSDigitizer.h:150
 AliTOFSDigitizer.h:151
 AliTOFSDigitizer.h:152
 AliTOFSDigitizer.h:153
 AliTOFSDigitizer.h:154
 AliTOFSDigitizer.h:155
 AliTOFSDigitizer.h:156
 AliTOFSDigitizer.h:157
 AliTOFSDigitizer.h:158
 AliTOFSDigitizer.h:159
 AliTOFSDigitizer.h:160
 AliTOFSDigitizer.h:161
 AliTOFSDigitizer.h:162
 AliTOFSDigitizer.h:163
 AliTOFSDigitizer.h:164
 AliTOFSDigitizer.h:165
 AliTOFSDigitizer.h:166
 AliTOFSDigitizer.h:167
 AliTOFSDigitizer.h:168
 AliTOFSDigitizer.h:169
 AliTOFSDigitizer.h:170
 AliTOFSDigitizer.h:171
 AliTOFSDigitizer.h:172
 AliTOFSDigitizer.h:173
 AliTOFSDigitizer.h:174
 AliTOFSDigitizer.h:175
 AliTOFSDigitizer.h:176
 AliTOFSDigitizer.h:177
 AliTOFSDigitizer.h:178
 AliTOFSDigitizer.h:179
 AliTOFSDigitizer.h:180
 AliTOFSDigitizer.h:181
 AliTOFSDigitizer.h:182
 AliTOFSDigitizer.h:183
 AliTOFSDigitizer.h:184
 AliTOFSDigitizer.h:185
 AliTOFSDigitizer.h:186
 AliTOFSDigitizer.h:187
 AliTOFSDigitizer.h:188
 AliTOFSDigitizer.h:189