#include "hrichdigitizer.h" |
HRichDigitizer
class description - source file - inheritance tree (.pdf)
private:
void addNoiseToCharge(HRichCalSim* calSim)
Float_t calcChargeOnWire(Int_t sector, Float_t xhit, Float_t yhit, Float_t nTrack, Float_t nFlag, Float_t ene)
Bool_t calcFeedBack(Int_t sec, Float_t xhit, Float_t yhit, Float_t& ene, Float_t& xhittFB, Float_t& yhittFB, Float_t charge)
Float_t calcIndCharge(float yCharge, float q4, int iPdaIndex, int iWireNr)
Float_t calcNoiseOnPad(Float_t sigma, Float_t floatMean)
Bool_t calcQE(const Float_t photlen, Int_t sec)
void digitiseCherenkovHits(HGeantRichPhoton* pCerHit, Int_t count)
void digitiseDirectHits(HGeantRichDirect* pDirHit)
void digitisePads()
Float_t feedBackProb(Float_t x)
Float_t GaussFun(Float_t mean, Float_t sigma)
Int_t getWireNr(Float_t xhit)
void makeNoiseOnPads()
void processPhoton(Float_t ene, Float_t xPos, Float_t yPos, Int_t track, Int_t sector)
Float_t q4Calc(float charge, float pos, float par1, float par2)
Float_t qX(float pos)
HRichPad* translateCorners(HRichPad* pPad, Float_t dx, Float_t dy)
void updateCharge(Int_t sector, HRichPad* pPad, Float_t charge, TVector* rTrack, Float_t ene)
void updateTrack(HRichCalSim* pCalSim, HLocation& loc, TVector* rTrack)
public:
HRichDigitizer()
HRichDigitizer(Text_t* name, Text_t* title, Bool_t kNoise = kFALSE, Bool_t oem = kFALSE)
HRichDigitizer(const HRichDigitizer& source)
~HRichDigitizer()
Int_t checkPad(HRichCalSim* calSim)
static TClass* Class()
virtual Int_t execute()
virtual Bool_t finalize()
HCategory* getCerInputCat()
HParSet* getDigitisationPar()
HCategory* getDirInputCat()
HParSet* getGeometryPar()
HCategory* getOutputCat()
HParSet* getRichCalPar()
HCategory* getTrackOutputCat()
virtual Bool_t init()
virtual TClass* IsA() const
HRichDigitizer& operator=(HRichDigitizer& source)
virtual Bool_t reinit()
void setCalPar(HParSet* pPar)
void setCerInputCat(HCategory* pInCat)
void setDigitisationPar(HParSet* pPar)
void setDirInputCat(HCategory* pInCat)
void setGeometryPar(HParSet* pPar)
void setOutputCat(HCategory* pOutCat)
void setTrackOutputCat(HCategory* pOutCat)
virtual void ShowMembers(TMemberInspector& insp, char* parent)
virtual void Streamer(TBuffer& b)
void StreamerNVirtual(TBuffer& b)
private:
HCategory* fCerInputCat Pointer to the raw data category
HCategory* fDirInputCat Pointer to the raw data category
HCategory* fOutputCat Pointer to the cal data category
HCategory* fTrackOutputCat Pointer to the richtrack category
HParSet* fDigitisationPar Pointer to digitisation parameters
HParSet* fGeometryPar Pointer to geometry parameters
HParSet* fCalPar Pointer to calibration parameters
HIterator* fCerIter !
HIterator* fDirIter !
HIterator* fTrackIter !
HIterator* fCalIter !
Float_t fQupper !
Float_t fChargePerChannel !
Float_t fChargeScaling !
Float_t fDigitPadMatrix[9] !
Float_t noiseCharge[1000] !
TList fChargeOnWireList !//holds charge on a wire
TList fTrackNumberList !// holds track number and flag for a hit
HLocation loc
Int_t isActiveNoise flag to switch on/off the electronic noise
Int_t isOEM flag to select oem analysis.
Int_t countNoisePad number of pads with a noise cont. above threshold.
Float_t fYShift shift on the y pad plane coordinate necessary to get the correct pad position and the correct theta.
Float_t distWirePads distance between wires and pad plane. in cm
Float_t fIncreaseNoise
Float_t fSigmaValue
Float_t fMeanPad mean value of the noise distribution
Float_t fSigmaPad sigma of the noise distribution
Float_t fFloatMean float part of the mean value
Float_t fCharge
Float_t fFactor1
Float_t fFactor2
Float_t fFactor1Sig
Float_t fFactor2Sig
Float_t fParam1
Float_t fParam2
Float_t param21
Float_t param11
Float_t fInt
Float_t a1
Float_t a2
Float_t b1
Float_t b2
TFile* output
TH1F* position
TF1* ga ! Gauss function
Int_t cont
Int_t countFBphot
Int_t countPhotSec[6] to be removed!
public:
Int_t lNrEvent
_______________________________________________________
HRichDigitizer
For each digitized pad the corresponding track numbers of the
direct hits and photons are stored in a linear category
(catRichTrack<-HRichTrack) that is made sortable by the pad address.
Each pad object of the HRichCalSim class has 2 members, nTrack1, nTrack2,
that give the indexes of the first and the last track numbers in the linear
category (catRichTrack) corresponding to a pad.
This method allows to store as many particle track numbers as the pad
" sees ".
here are listed the values of some useful variables
# means non costant value.
Each value refers to the 1 fired pad.
realID=gHades->getEmbeddingRealTrackId()
track Number Flag energy
Cheren. Phot. # 0 #
Feedback Phot. -5 0 0
Direct Hits # 1 0
Noise Hits 0 0 0
REAL Hits (embedding) realID 0 0
---------------------------------------------------------
----------------------- -------------
| HRichUnpackerCal99 | | HGeantRich |
| (embedding mode) | -------------
| | ||
----------------------- || input to digitizer
------------- read real ------------------
| HRichCalSim | ------------> | |
------------- <----------- | |
| HRichDigitizer |
------------- | |
| HRichTrack | <----------- | |
------------- ------------------
write output
In the case of TRACK EMBEDDING of simulated tracks into
experimental data the real data are written by the HRichUnpackerCal99 into
HRichCalSim category. The real hits are taken into
account by the digitizer (adding of charges, adding track numbers to HRichTrack).
The embedding mode is recognized automatically by analyzing the
gHades->getEmbeddingMode() flag.
Mode ==0 means no embedding
==1 realistic embedding (first real or sim hit makes the game)
==2 keep GEANT tracks (as 1, but GEANT track numbers will always
win against real data. besides the tracknumber the output will
be the same as in 1)
HRichDigitizer(Text_t *name, Text_t *title,Bool_t kNoise,Bool_t oem) : HReconstructor(name,title)
HRichDigitizer()
~HRichDigitizer()
Bool_t init()
Bool_t reinit()
HRichDigitizer(const HRichDigitizer& source)
dummy
Int_t execute()
Float_t GaussFun(Float_t mean, Float_t sigma)
Bool_t calcQE(const Float_t photlen, Int_t sec)
Int_t getWireNr(Float_t xhit)
Float_t calcChargeOnWire(Int_t sector, Float_t xhit, Float_t yhit, Float_t nTrack, Float_t nFlag ,Float_t ene)
this function calculates the charge on each wire and saves it in a TList
moreover, it saves the track number and the corresponding flag
(cf HRichTrack) in a second TList.
The charge is calculated according to one exponential function
obtained fitting the total charge distribution of the photon candidates
belonging to class one.
( OEM data).
That means that the so calculated charge isn't in reality the
original charge deposited on the wire but the total amount of the charge
coupled to the pads. Therefore it isn't any longer necessary to
use an additional coupling factor. ( 75%)
void digitiseCherenkovHits(HGeantRichPhoton *pCerHit,Int_t count)
for every photon hit on a pad the resulting charge on a wire
is calculated and the track number of the photon parent is stored.
(cf. calcChargeOnWire).
void processPhoton(Float_t ene,Float_t xPos,Float_t yPos,Int_t track,Int_t sector)
Bool_t calcFeedBack(Int_t sec,Float_t xhit, Float_t yhit,Float_t &ene,Float_t &xhittFB,Float_t &yhittFB,Float_t charge)
We assume that the feed back photon is produced on the anodic wire, the number of the feed back photon is proportional to the value A0.
Float_t feedBackProb(Float_t x)
void digitiseDirectHits(HGeantRichDirect *pDirHit)
for every direct hit (charge particle hitting the RICH or ionizing
the gas near the surface of the photon detector) the
resulting charge on the wires is calculated and the track number
of the charged particle hitting the pad is stored.
(cf. calcChargeOnWire)
HRichPad* translateCorners(HRichPad *pPad, Float_t dx, Float_t dy)
void makeNoiseOnPads()
Float_t calcNoiseOnPad(Float_t sigma,Float_t floatMean)
void addNoiseToCharge(HRichCalSim* calSim)
Int_t checkPad(HRichCalSim *calSim)
void digitisePads()
for each wire on which some charge has been deposited
the corresponding coupled pads are calculated.
The function updateCharge creates a HRichCalSim obj if
the charge on the pad is greater than zero.
A cut off threshold is applied to each pad in the execute func.
after the digitilasation of all the hits.
If the pad is hit twice in the same event, the charges
corresponding to the 2 different hits are added.
The particle track number is passed to the function
updateCharge, too.
Float_t calcIndCharge(float yCharge,float q4,int iPdaIndex,int iWireNr)
Float_t qX(Float_t pos)
Float_t q4Calc(float charge,float pos,float par1,float par2)
void updateCharge(Int_t sector, HRichPad* pPad, Float_t charge,TVector * rTrack, Float_t ene)
this function creates an HRichCalSim obj that corresponds
to a fired pad, it calls the function updateTrack,
that stores the corresponding track numbers.
void updateTrack(HRichCalSim *pCal,HLocation& loc,TVector * rTrack)
this function stores the track numbers of parent
particles of photons and of direct hits in a linear
category (HRichTrack). This category is set sortable.
Bool_t finalize()
Inline Functions
HRichDigitizer& operator=(HRichDigitizer& source)
HCategory* getCerInputCat()
HCategory* getDirInputCat()
HCategory* getOutputCat()
HCategory* getTrackOutputCat()
HParSet* getRichCalPar()
HParSet* getDigitisationPar()
HParSet* getGeometryPar()
void setCerInputCat(HCategory* pInCat)
void setDirInputCat(HCategory* pInCat)
void setOutputCat(HCategory* pOutCat)
void setTrackOutputCat(HCategory* pOutCat)
void setDigitisationPar(HParSet* pPar)
void setGeometryPar(HParSet* pPar)
void setCalPar(HParSet* pPar)
TClass* Class()
TClass* IsA() const
void ShowMembers(TMemberInspector& insp, char* parent)
void Streamer(TBuffer& b)
void StreamerNVirtual(TBuffer& b)
Last update: Fri Jan 26 12:26:51 2007
ROOT page - Class index - Class Hierarchy - Top of the page
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.