CMS 3D CMS Logo

HcalShape Class Reference

shaper for Hcal (not for HF) More...

#include <SimCalorimetry/HcalSimAlgos/interface/HcalShape.h>

Inheritance diagram for HcalShape:

CaloVShape

List of all members.

Public Member Functions

void computeShape ()
double derivative (double time) const
void display () const
double getTpeak () const
 HcalShape (const HcalShape &d)
 HcalShape ()
virtual double operator() (double time) const
virtual ~HcalShape ()

Private Attributes

int nbin_
std::vector< float > nt_


Detailed Description

shaper for Hcal (not for HF)

Definition at line 15 of file HcalShape.h.


Constructor & Destructor Documentation

HcalShape::HcalShape (  ) 

Definition at line 4 of file HcalShape.cc.

References computeShape(), and CaloVShape::setTpeak().

00005 : nbin_(256),
00006   nt_(nbin_, 0.)
00007 {
00008    setTpeak(32.0);
00009    computeShape();
00010 }

HcalShape::HcalShape ( const HcalShape d  ) 

Definition at line 12 of file HcalShape.cc.

References CaloVShape::setTpeak().

00012                                      :
00013   CaloVShape(d),
00014   nbin_(d.nbin_),
00015   nt_(d.nt_)
00016 {
00017   setTpeak(32.0);
00018 }

virtual HcalShape::~HcalShape (  )  [inline, virtual]

Definition at line 23 of file HcalShape.h.

00023 {}


Member Function Documentation

void HcalShape::computeShape (  ) 

Definition at line 21 of file HcalShape.cc.

References funct::exp(), i, j, k, nbin_, norm, nt_, and tmax.

Referenced by HcalShape().

00022 {
00023 
00024   // pulse shape time constant_s in ns
00025   const float ts1  = 8.;          // scintillation time constant_s : 1,2,3
00026   const float ts2  = 10.;           
00027   const float ts3  = 29.3;         
00028   const float thpd = 4.;          // HPD current_ collection drift time
00029   const float tpre = 9.;          // preamp time constant_ (refit on TB04 data)
00030   
00031   const float wd1 = 2.;           // relative weights of decay exponent_s 
00032   const float wd2 = 0.7;
00033   const float wd3 = 1.;
00034   
00035   // pulse shape componnt_s over a range of time 0 ns to 255 ns in 1 ns steps
00036   std::vector<float> nth(nbin_,0.0);   // zeroing HPD drift shape
00037   std::vector<float> ntp(nbin_,0.0);   // zeroing Binkley preamp shape
00038   std::vector<float> ntd(nbin_,0.0);   // zeroing Scintillator decay shape
00039 
00040   int i,j,k;
00041   float norm;
00042 
00043   // HPD starts at I and rises to 2I in thpd of time
00044   norm=0.0;
00045   for(j=0;j<thpd && j<nbin_;j++){
00046     nth[j] = 1.0 + j/thpd;
00047     norm += nth[j];
00048   }
00049   // normalize integrated current_ to 1.0
00050   for(j=0;j<thpd && j<nbin_;j++){
00051     nth[j] /= norm;
00052   }
00053   
00054   // Binkley shape over 6 time constant_s
00055   norm=0.0;
00056   for(j=0;j<6*tpre && j<nbin_;j++){
00057     ntp[j] = j*exp(-(j*j)/(tpre*tpre));
00058     norm += ntp[j];
00059   }
00060   // normalize pulse area to 1.0
00061   for(j=0;j<6*tpre && j<nbin_;j++){
00062     ntp[j] /= norm;
00063   }
00064 
00065 // ignore stochastic variation of photoelectron emission
00066 // <...>
00067 
00068 // effective tile plus wave-length shifter decay time over 4 time constant_s
00069   int tmax = 6 * static_cast<int>(ts3);
00070  
00071   norm=0.0;
00072   for(j=0;j<tmax && j<nbin_;j++){
00073     ntd[j] = wd1 * exp(-j/ts1) + 
00074       wd2 * exp(-j/ts2) + 
00075       wd3 * exp(-j/ts3) ; 
00076     norm += ntd[j];
00077   }
00078   // normalize pulse area to 1.0
00079   for(j=0;j<tmax && j<nbin_;j++){
00080     ntd[j] /= norm;
00081   }
00082   
00083   int t1,t2,t3,t4;
00084   for(i=0;i<tmax && i<nbin_;i++){
00085     t1 = i;
00086     //    t2 = t1 + top*rand;
00087     // ignoring jitter from optical path length
00088     t2 = t1;
00089     for(j=0;j<thpd && j<nbin_;j++){
00090       t3 = t2 + j;
00091       for(k=0;k<4*tpre && k<nbin_;k++){       // here "4" is set deliberately,
00092  t4 = t3 + k;                         // as in test fortran toy MC ...
00093  if(t4<nbin_){                         
00094    int ntb=t4;                        
00095    nt_[ntb] += ntd[i]*nth[j]*ntp[k];
00096         }
00097       }
00098     }
00099   }
00100   
00101   // normalize for 1 GeV pulse height
00102   norm = 0.;
00103   for(i=0;i<nbin_;i++){
00104     norm += nt_[i];
00105   }
00106 
00107   //cout << " Convoluted SHAPE ==============  " << endl;
00108   for(i=0; i<nbin_; i++){
00109     nt_[i] /= norm;
00110     //  cout << " shape " << i << " = " << nt_[i] << endl;   
00111   }
00112 
00113 }

double HcalShape::derivative ( double  time  )  const

Definition at line 128 of file HcalShape.cc.

00129 {
00130   return 0.0;
00131 }

void HcalShape::display (  )  const [inline]

Definition at line 26 of file HcalShape.h.

00026 {}

double HcalShape::getTpeak (  )  const

Reimplemented from CaloVShape.

double HcalShape::operator() ( double  time  )  const [virtual]

Implements CaloVShape.

Definition at line 115 of file HcalShape.cc.

References nbin_, and nt_.

00116 {
00117 
00118   // return pulse amplitude for request time in ns
00119   int jtime = static_cast<int>(time_+0.5);
00120   if(jtime>=0 && jtime<nbin_){
00121     return nt_[jtime];
00122   } else {
00123     return 0.0;
00124   }
00125 
00126 }


Member Data Documentation

int HcalShape::nbin_ [private]

Definition at line 34 of file HcalShape.h.

Referenced by computeShape(), and operator()().

std::vector<float> HcalShape::nt_ [private]

Definition at line 35 of file HcalShape.h.

Referenced by computeShape(), and operator()().


The documentation for this class was generated from the following files:
Generated on Tue Jun 9 18:23:55 2009 for CMSSW by  doxygen 1.5.4