HMPID module
[u/mrichter/AliRoot.git] / HMPID / HMPIDbase / AliHMPIDHit.h
CommitLineData
d3da6dc4 1#ifndef AliHMPIDHit_h
2#define AliHMPIDHit_h
3/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
423554a3 5//.
6// HMPID base class to produce hits
7//.
8//.
d3da6dc4 9#include <AliHit.h> //base class
10#include <TVector3.h> //ctor
1d4857c5 11#include "AliHMPIDDigit.h" //QdcTot()
d3da6dc4 12
1b10372c 13#include <TRandom.h>
14
d3da6dc4 15class AliHMPIDHit : public AliHit // TObject-AliHit-AliHMPIDHit
16{
17public:
6d7b0e11 18//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19AliHMPIDHit():
20 AliHit(),
21 fCh(-1),
22 fPid(-1),
23 fQ(-1),
24 fLx(0),
25 fLy(0),
26 fT(0)
27 {} //default ctor
28//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
29AliHMPIDHit(Int_t c,Float_t &e,Int_t pid,Int_t tid,Float_t x,Float_t y, Float_t time, const TVector3 &p):
30 AliHit(0,tid),
31 fCh(c),
32 fPid(pid),
33 fQ(0 ),
34 fLx(x),
35 fLy(y),
36 fT(time)
37 {e=QdcTot(e,time);fX=p.X();fY=p.Y();fZ=p.Z();}
38//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
39AliHMPIDHit(Int_t c,Float_t &e,Int_t pid,Int_t tid,Float_t x,Float_t y, Float_t time):
40 AliHit(),
41 fCh(c),
42 fPid(pid),
43 fQ(0),
44 fLx(x),
45 fLy(y),
46 fT(time)
47 {e=QdcTot(e,time);fTrack=tid;}//manual ctor
48//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
49AliHMPIDHit& operator=(const AliHMPIDHit& h)
50{
51 //
52 // Assignment operator
53 //
54 if(this!=&h){
55 AliHit::operator=(h);
56 fCh = h.fCh;
57 fPid = h.fPid;
58 fQ = h.fQ;
59 fLx = h.fLx;
60 fLy = h.fLy;
61 fT = h.fT;
62 }
63 return *this;
64}
65//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
66AliHMPIDHit(const AliHMPIDHit &h):
67 AliHit(h),
68 fCh(h.fCh),
69 fPid(h.fPid),
70 fQ(h.fQ),
71 fLx(h.fLx),
72 fLy(h.fLy),
73 fT(h.fT)
74 {}//copy ctor
75//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
76virtual ~AliHMPIDHit() {}
77//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
d3da6dc4 78//framework part
1d4857c5 79 void Print(Option_t *opt="")const; //from TObject to print current status
80 void Draw (Option_t *opt=""); //from TObject to Draw this hit
d3da6dc4 81//private part
1d4857c5 82 Int_t Ch ( )const{return fCh; } //Chamber
83 void Hit2Sdi(TClonesArray *pSdiLst,Int_t n=1)const; //add sdigits of this hit to the list
84 Float_t LorsX ( )const{return fLx; } //hit X position in LORS, [cm]
85 Float_t LorsY ( )const{return fLy; } //hit Y position in LORS, [cm]
a9b5cfdf 86 Float_t HitTime( )const{return fT; } //hit formation time, [sec]
1d4857c5 87 Int_t Pid ( )const{return fPid; } //PID
88 Float_t Q ( )const{return fQ; } //total charge, [QDC]
9885d400 89 inline Float_t QdcTot (Float_t e, Float_t time ); //calculate total charge of the hit
1d4857c5 90 Int_t Tid ( )const{return fTrack; } //TID
f3bae3e2 91 void SetQ (Float_t q ) {fQ=q; } //for debugging...
1d4857c5 92protected: //AliHit has fTrack,fX,fY,fZ
d3da6dc4 93 Int_t fCh; //Chamber
94 Int_t fPid; //PID
3c6274c1 95 Float_t fQ; //total charge [QDC]
d1bf51e1 96 Float_t fLx; //hit X position in chamber LORS, [cm]
97 Float_t fLy; //hit Y position in chamber LORS, [cm]
a9b5cfdf 98 Float_t fT; //hit formation time, [sec]
3c6274c1 99 ClassDef(AliHMPIDHit,5) //HMPID hit class
d3da6dc4 100};//class AliHMPIDhit
3c6274c1 101//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
9885d400 102Float_t AliHMPIDHit::QdcTot(Float_t e, Float_t time)
3c6274c1 103{
104// Samples total charge of the hit
1d4857c5 105// Arguments: e- hit energy [GeV] for mip Eloss for photon Etot
3c6274c1 106// Returns: total QDC
1d4857c5 107 Int_t pc,px,py;
ae5a42aa 108 AliHMPIDParam::Lors2Pad(fLx,fLy,pc,px,py);
109 if(py<0) fQ=0;
110 else {
111 Float_t y=AliHMPIDParam::LorsY(pc,py);
1d4857c5 112 fLy=((y-fLy)>0)?y-0.2:y+0.2; //shift to the nearest anod wire
113
114 Float_t x=(fLx > 66.6)? fLx-66.6:fLx; //sagita is for PC (0-64) and not for chamber
3c6274c1 115 Float_t qdcEle=34.06311+0.2337070*x+5.807476e-3*x*x-2.956471e-04*x*x*x+2.310001e-06*x*x*x*x; //reparametrised from DiMauro
116
dc787dc0 117 Int_t iNele=Int_t(e/26e-9); if(iNele<1) iNele = 1; //number of electrons created by hit, if photon e=0 implies iNele=1
1d4857c5 118 fQ=0;
119 for(Int_t i=1;i<=iNele;i++){
120 Double_t rnd=gRandom->Rndm(); if(rnd==0) rnd=1e-12; //1e-12 is a protection against 0 from rndm
121 fQ-=qdcEle*TMath::Log(rnd);
122 }
ae5a42aa 123 }
9885d400 124 if(time>1.2e-6) fQ=0;
125
3c6274c1 126 return fQ;
127}
d1bf51e1 128//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1d4857c5 129
d3da6dc4 130#endif