ROOT logo
#ifndef AliHMPIDHit_h
#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 <AliHit.h>           //base class
#include <TVector3.h>         //ctor
#include "AliHMPIDDigit.h"    //QdcTot() 

#include <TRandom.h>

class AliHMPIDHit : public AliHit //   TObject-AliHit-AliHMPIDHit
{
public:
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
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 *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
         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  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
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
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
 AliHMPIDHit.h:1
 AliHMPIDHit.h:2
 AliHMPIDHit.h:3
 AliHMPIDHit.h:4
 AliHMPIDHit.h:5
 AliHMPIDHit.h:6
 AliHMPIDHit.h:7
 AliHMPIDHit.h:8
 AliHMPIDHit.h:9
 AliHMPIDHit.h:10
 AliHMPIDHit.h:11
 AliHMPIDHit.h:12
 AliHMPIDHit.h:13
 AliHMPIDHit.h:14
 AliHMPIDHit.h:15
 AliHMPIDHit.h:16
 AliHMPIDHit.h:17
 AliHMPIDHit.h:18
 AliHMPIDHit.h:19
 AliHMPIDHit.h:20
 AliHMPIDHit.h:21
 AliHMPIDHit.h:22
 AliHMPIDHit.h:23
 AliHMPIDHit.h:24
 AliHMPIDHit.h:25
 AliHMPIDHit.h:26
 AliHMPIDHit.h:27
 AliHMPIDHit.h:28
 AliHMPIDHit.h:29
 AliHMPIDHit.h:30
 AliHMPIDHit.h:31
 AliHMPIDHit.h:32
 AliHMPIDHit.h:33
 AliHMPIDHit.h:34
 AliHMPIDHit.h:35
 AliHMPIDHit.h:36
 AliHMPIDHit.h:37
 AliHMPIDHit.h:38
 AliHMPIDHit.h:39
 AliHMPIDHit.h:40
 AliHMPIDHit.h:41
 AliHMPIDHit.h:42
 AliHMPIDHit.h:43
 AliHMPIDHit.h:44
 AliHMPIDHit.h:45
 AliHMPIDHit.h:46
 AliHMPIDHit.h:47
 AliHMPIDHit.h:48
 AliHMPIDHit.h:49
 AliHMPIDHit.h:50
 AliHMPIDHit.h:51
 AliHMPIDHit.h:52
 AliHMPIDHit.h:53
 AliHMPIDHit.h:54
 AliHMPIDHit.h:55
 AliHMPIDHit.h:56
 AliHMPIDHit.h:57
 AliHMPIDHit.h:58
 AliHMPIDHit.h:59
 AliHMPIDHit.h:60
 AliHMPIDHit.h:61
 AliHMPIDHit.h:62
 AliHMPIDHit.h:63
 AliHMPIDHit.h:64
 AliHMPIDHit.h:65
 AliHMPIDHit.h:66
 AliHMPIDHit.h:67
 AliHMPIDHit.h:68
 AliHMPIDHit.h:69
 AliHMPIDHit.h:70
 AliHMPIDHit.h:71
 AliHMPIDHit.h:72
 AliHMPIDHit.h:73
 AliHMPIDHit.h:74
 AliHMPIDHit.h:75
 AliHMPIDHit.h:76
 AliHMPIDHit.h:77
 AliHMPIDHit.h:78
 AliHMPIDHit.h:79
 AliHMPIDHit.h:80
 AliHMPIDHit.h:81
 AliHMPIDHit.h:82
 AliHMPIDHit.h:83
 AliHMPIDHit.h:84
 AliHMPIDHit.h:85
 AliHMPIDHit.h:86
 AliHMPIDHit.h:87
 AliHMPIDHit.h:88
 AliHMPIDHit.h:89
 AliHMPIDHit.h:90
 AliHMPIDHit.h:91
 AliHMPIDHit.h:92
 AliHMPIDHit.h:93
 AliHMPIDHit.h:94
 AliHMPIDHit.h:95
 AliHMPIDHit.h:96
 AliHMPIDHit.h:97
 AliHMPIDHit.h:98
 AliHMPIDHit.h:99
 AliHMPIDHit.h:100
 AliHMPIDHit.h:101
 AliHMPIDHit.h:102
 AliHMPIDHit.h:103
 AliHMPIDHit.h:104
 AliHMPIDHit.h:105
 AliHMPIDHit.h:106
 AliHMPIDHit.h:107
 AliHMPIDHit.h:108
 AliHMPIDHit.h:109
 AliHMPIDHit.h:110
 AliHMPIDHit.h:111
 AliHMPIDHit.h:112
 AliHMPIDHit.h:113
 AliHMPIDHit.h:114
 AliHMPIDHit.h:115
 AliHMPIDHit.h:116
 AliHMPIDHit.h:117
 AliHMPIDHit.h:118
 AliHMPIDHit.h:119
 AliHMPIDHit.h:120
 AliHMPIDHit.h:121
 AliHMPIDHit.h:122
 AliHMPIDHit.h:123
 AliHMPIDHit.h:124
 AliHMPIDHit.h:125
 AliHMPIDHit.h:126
 AliHMPIDHit.h:127
 AliHMPIDHit.h:128
 AliHMPIDHit.h:129
 AliHMPIDHit.h:130