ROOT logo
#ifndef HRICHDIGITISER_H
#define HRICHDIGITISER_H

#include "TArrayF.h"
#include "TVector.h"

#include "hlocation.h"
#include "hreconstructor.h"

#include <map>
#include <vector>
using namespace std;

class TF1;
class TList;
class TRandom3;

class HCategory;
class HGeantRichDirect;
class HGeantRichPhoton;
class HIterator;
class HLocation;
class HParSet;
class HRichCalPar;
class HRichCalSim;
class HRichDigitisationPar;
class HRichGeometryPar;
class HRichPad;
class HRichTrack;
class HGeantKine;

class HRichDigitizer : public HReconstructor {

private:

   // Input / output categories
   HCategory* catRichPhoton;        //! Pointer to the geant rich photon category
   HCategory* catRichDirect;        //! Pointer to the geant rich direct hits category
   HCategory* catTrack;             //! Pointer to the cal data category
   HCategory* catCal;               //! Pointer to the richtrack category
   HCategory* catKine;              //! Pointer to the kine category

   // Iterators
   HIterator* iterRichPhoton;       //! Iterator over the geant rich photon category
   HIterator* iterRichDirect;       //! Iterator over the geant rich direct hits category
   HIterator* iterRichTrack;        //! Iterator over the carRichTrack category
   HIterator* iterRichCal;          //!

   // Parameters
   HRichDigitisationPar* pDigitisationPar;     //! Pointer to digitisation parameters
   HRichGeometryPar*     pGeometryPar;         //! Pointer to geometry parameters
   HRichCalPar*          pCalPar;              //! Pointer to calibration parameters

   TF1*       ga;                   //! Gauss function

   TList      fChargeOnWireList;    //! holds charge on a wire
   TList      fTrackNumberList;     //! holds track number and flag for a hit
   HLocation  loc;                  //!
   HLocation  loc1;                 //!
   HLocation  locat;                //!


   static const Float_t noiseCharge[1000];//!


   Bool_t isActiveNoise;            //! flag to switch on/off the electronic noise
   Bool_t isOEM;                    //! flag to select oem analysis.

   Int_t countFBphot;               //! counter for feedback photons
   Int_t countNoisePad;             //! number of pads with a noise cont. above threshold.


   // Geometry parameters
   Int_t   fWiresNr;                //!
   Float_t fWiresDist;              //!
   Float_t distWirePads;            //! distance between wires and pad plane. in cm
   Float_t fYShift;                 //! shift on the y pad plane coordinate necessary to
   //! get the correct pad position and the correct theta.

   // Digitization parameters
   Int_t   binsQE;                  //!
   Float_t fChargePerChannel;       //!
   Float_t fChargeScaling;          //!
   Float_t fElectronsNr;            //!
   Float_t fFactor1;                //!
   Float_t fFactor1Sig;             //!
   Float_t fFactor2;                //!
   Float_t fFactor2Sig;             //!
   Float_t fIncreaseNoise;          //!
   Float_t fParam1;                 //!
   Float_t fParam2;                 //!
   Float_t fQupper;                 //!
   Float_t fSigmaValue;             //!
   Float_t fSlopeCorrection;        //!
   TArrayF fExpSlope;               //!
   TArrayF correction[6];           //!
   TArrayF photeffic;               //!
   TArrayF photlength;              //!


   Float_t noiseProb;               //!
   Float_t fDigitPadMatrix[9];      //!

   Bool_t   useDeltaElectrons;      //! switch for use/not use delta electron time smearing
   Bool_t   useDeltaMomSelection;   //! switch for use/not use momentum below momMaxDeltaElecCut for primary electrons to identify delta electrons
   Int_t    ionID;                  //! beam ion (au ==109)
   Float_t  momMaxDeltaElecCut;     //! delta electron smearing : primary electrons below this mom are considdered to be delta electrons  [MeV/c]
   Float_t  momMinDeltaCut[6];      //! min mom cut per sector (account for different mirror materials) [MeV/c]
   Float_t  probDeltaAccepted;      //! 0 - 1 probability to accept a delta electron (yield adjustment)
   map<HGeantKine*,Float_t> mDeltaTrackProb;  //! map delta electron candidates to prob
   map<HGeantKine*,Float_t>::iterator itDelta;//! map delta electron candidates to prob

   map <Int_t, vector <HRichTrack*> > mapTracks;

   static HRichDigitizer* fDigitizer;//!


public:
   HRichDigitizer();
   HRichDigitizer(const Text_t* name,
                  const Text_t* title,
                  Bool_t  kNoise = kFALSE,
                  Float_t slope  = 1.0,
                  Bool_t  oem    = kFALSE);
   ~HRichDigitizer();

   Bool_t init();
   Bool_t reinit();
   Int_t  execute();
   Bool_t finalize();
   static  HRichDigitizer* getDigitizer() {return fDigitizer;}
  //----------- using delta electrons -----------------
  void   setDeltaElectronUse(Bool_t use, Bool_t useDeltaMomSel=kFALSE, Int_t ionId=109,Float_t momCut=20.,Float_t probDelta=2.){ probDeltaAccepted = probDelta; useDeltaElectrons = use;useDeltaMomSelection = useDeltaMomSel; ionID=ionId; momMaxDeltaElecCut = momCut; }
  Bool_t getDeltaElectronUse() { return useDeltaElectrons;}
  void   setDeltaElectronMinMomCut(Float_t s0=2.,Float_t s1=2.,Float_t s2=4.,Float_t s3=2.,Float_t s4=2.,Float_t s5=4.) { momMinDeltaCut[0]=s0; momMinDeltaCut[1]=s1; momMinDeltaCut[2]=s2;  momMinDeltaCut[3]=s3;  momMinDeltaCut[4]=s4; momMinDeltaCut[5]=s5; }

private:
   Bool_t calcQE(const Float_t photlen,
                 const Int_t sec);
   Bool_t calcFeedBack(const Int_t sec,
                       const Float_t xhit,
                       const Float_t yhit,
                       Float_t &ene,
                       Float_t &xhittFB,
                       Float_t &yhittFB,
                       const Float_t charge);

   Float_t GaussFun(const Float_t mean,
                    const Float_t sigma);
   Float_t calcIndCharge(const Float_t yCharge,
                         const Float_t q4,
                         const Int_t iPdaIndex,
                         const Int_t iWireNr,
                         const Float_t param11,
                         const Float_t param21);
   Float_t qX(const Float_t pos);
   Float_t q4Calc(const Float_t charge,
                  const Float_t pos,
                  const Float_t par1,
                  const Float_t par2);
   Float_t calcChargeOnWire(const Int_t sector,
                            const Float_t xhit,
                            const Float_t yhit,
                            const Float_t nTrack,
                            const Float_t nFlag,
                            Float_t ene);
   Float_t calcNoiseOnPad(const Float_t fSigmaPad,
                          const Float_t fFloatMean);

   Int_t getWireNr(const Float_t xhit);
   Int_t checkPad(HRichCalSim *calSim);

   void setDefaults();
   void makeNoiseOnPads();
   void addNoiseToCharge(HRichCalSim* calSim);
   void digitisePads();
   void digitiseCherenkovHits(HGeantRichPhoton *pCerHit,
                              const Int_t count);
   void digitiseDirectHits(HGeantRichDirect *pDirHit);
   void processPhoton(const Float_t ene,
                      const Float_t xPos,
                      const Float_t yPos,
                      const Int_t track,
                      const Int_t sector);
   void updateCharge(const Int_t sector,
                     HRichPad* pPad,
                     const Float_t charge,
                     TVector * rTrack,
                     const Float_t ene);

   void updateTrack(HRichCalSim *pCalSim,
                    HLocation & loc,
                    TVector * rTrack);

   HRichPad* translateCorners(HRichPad *pPad,
                              const Float_t dx,
                              const Float_t dy);


public:
   ClassDef(HRichDigitizer, 0) // Rich digitizer

};

#endif // HRICHDIGITISER_H 







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