X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=HMPID%2FAliHMPIDHit.h;h=1544cac03b55cf0d34512a2af2a2befab4a67f2d;hb=83decb5f97a9170379eec64cef3179390406e806;hp=dbf6bdd8ccfd5f6c3338abf2ac5b6894e53b1dec;hpb=cf7e313e9d1893de1e5bec72a5708c0cbc993dfa;p=u%2Fmrichter%2FAliRoot.git diff --git a/HMPID/AliHMPIDHit.h b/HMPID/AliHMPIDHit.h index dbf6bdd8ccf..1544cac03b5 100644 --- a/HMPID/AliHMPIDHit.h +++ b/HMPID/AliHMPIDHit.h @@ -2,36 +2,129 @@ #define AliHMPIDHit_h /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * * See cxx source for full Copyright notice */ - +//. +// HMPID base class to produce hits +//. +//. #include //base class #include //ctor +#include "AliHMPIDDigit.h" //QdcTot() + +#include class AliHMPIDHit : public AliHit // TObject-AliHit-AliHMPIDHit { public: - AliHMPIDHit( ):AliHit( ),fCh(-1),fPid(-1 ),fE(-1),fLorsX(-1),fLorsY(-1) {} //default ctor - AliHMPIDHit(Int_t c,Float_t e,Int_t pid,Int_t tid,Float_t xl,Float_t yl,const TVector3 &p):AliHit(0,tid),fCh(c ),fPid(pid),fE(e ),fLorsX(xl),fLorsY(yl) {fX=p.X();fY=p.Y();fZ=p.Z();} - AliHMPIDHit(Int_t c,Float_t e,Int_t pid,Int_t tid,Float_t xl,Float_t yl ): fCh(c ),fPid(pid),fE(e ),fLorsX(xl),fLorsY(yl) {fTrack=tid;} - virtual ~AliHMPIDHit() {} +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +AliHMPIDHit(): + AliHit(), + fCh(-1), + fPid(-1), + fQ(-1), + fLx(0), + fLy(0), + fT(0) + {} //default ctor +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +AliHMPIDHit(Int_t c,Float_t &e,Int_t pid,Int_t tid,Float_t x,Float_t y, Float_t time, const TVector3 &p): + AliHit(0,tid), + fCh(c), + fPid(pid), + fQ(0 ), + fLx(x), + fLy(y), + fT(time) + {e=QdcTot(e,time);fX=p.X();fY=p.Y();fZ=p.Z();} +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +AliHMPIDHit(Int_t c,Float_t &e,Int_t pid,Int_t tid,Float_t x,Float_t y, Float_t time): + AliHit(), + fCh(c), + fPid(pid), + fQ(0), + fLx(x), + fLy(y), + fT(time) + {e=QdcTot(e,time);fTrack=tid;}//manual ctor +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +AliHMPIDHit& operator=(const AliHMPIDHit& h) +{ + // + // Assignment operator + // + if(this!=&h){ + AliHit::operator=(h); + fCh = h.fCh; + fPid = h.fPid; + fQ = h.fQ; + fLx = h.fLx; + fLy = h.fLy; + fT = h.fT; + } + return *this; +} +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +AliHMPIDHit(const AliHMPIDHit &h): + AliHit(h), + fCh(h.fCh), + fPid(h.fPid), + fQ(h.fQ), + fLx(h.fLx), + fLy(h.fLy), + fT(h.fT) + {}//copy ctor +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +virtual ~AliHMPIDHit() {} +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //framework part - void Print(Option_t *option="")const; //from TObject to print current status + void Print(Option_t *opt="")const; //from TObject to print current status + void Draw (Option_t *opt=""); //from TObject to Draw this hit //private part - Int_t Ch ()const{return fCh; } //Chamber - Float_t E ()const{return fE; } //Eloss for MIP hit or Etot for photon hit, [GeV] - Float_t LorsX ()const{return fLorsX; } //hit X position in LORS, [cm] - Float_t LorsY ()const{return fLorsY; } //hit Y position in LORS, [cm] - Int_t Pid ()const{return fPid; } //PID - Int_t Tid ()const{return fTrack; } //TID - -protected: //AliHit has fTid,fX,fY,fZ + Int_t Ch ( )const{return fCh; } //Chamber + void Hit2Sdi(TClonesArray *pSdiLst,Int_t n=1)const; //add sdigits of this hit to the list + Float_t LorsX ( )const{return fLx; } //hit X position in LORS, [cm] + Float_t LorsY ( )const{return fLy; } //hit Y position in LORS, [cm] + Float_t HitTime( )const{return fT; } //hit formation time, [sec] + Int_t Pid ( )const{return fPid; } //PID + Float_t Q ( )const{return fQ; } //total charge, [QDC] + inline Float_t QdcTot (Float_t e, Float_t time ); //calculate total charge of the hit + Int_t Tid ( )const{return fTrack; } //TID + void SetQ (Float_t q ) {fQ=q; } //for debugging... +protected: //AliHit has fTrack,fX,fY,fZ Int_t fCh; //Chamber Int_t fPid; //PID - Float_t fE; //Eloss for MIP or Etot for photon [GeV] - Float_t fLorsX; //hit X position in chamber LORS, [cm] - Float_t fLorsY; //hit Y position in chamber LORS, [cm] - ClassDef(AliHMPIDHit,4) //HMPID hit class + Float_t fQ; //total charge [QDC] + Float_t fLx; //hit X position in chamber LORS, [cm] + Float_t fLy; //hit Y position in chamber LORS, [cm] + Float_t fT; //hit formation time, [sec] + ClassDef(AliHMPIDHit,5) //HMPID hit class };//class AliHMPIDhit - -typedef AliHMPIDHit AliRICHHit; // for backward compatibility - +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +Float_t AliHMPIDHit::QdcTot(Float_t e, Float_t time) +{ +// Samples total charge of the hit +// Arguments: e- hit energy [GeV] for mip Eloss for photon Etot +// Returns: total QDC + Int_t pc,px,py; + AliHMPIDParam::Lors2Pad(fLx,fLy,pc,px,py); + if(py<0) fQ=0; + else { + Float_t y=AliHMPIDParam::LorsY(pc,py); + fLy=((y-fLy)>0)?y-0.2:y+0.2; //shift to the nearest anod wire + + Float_t x=(fLx > 66.6)? fLx-66.6:fLx; //sagita is for PC (0-64) and not for chamber + 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 + + 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 + fQ=0; + for(Int_t i=1;i<=iNele;i++){ + Double_t rnd=gRandom->Rndm(); if(rnd==0) rnd=1e-12; //1e-12 is a protection against 0 from rndm + fQ-=qdcEle*TMath::Log(rnd); + } + } + if(time>1.2e-6) fQ=0; + + return fQ; +} +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + #endif