00001 #include "SimCalorimetry/CastorSim/src/CastorShape.h" 00002 #include <cmath> 00003 00004 CastorShape::CastorShape() 00005 : nbin_(256), 00006 nt_(nbin_, 0.) 00007 { 00008 setTpeak(2.0); 00009 computeShapeCastor(); 00010 } 00011 00012 00013 CastorShape::CastorShape(const CastorShape&d) 00014 : CaloVShape(d), 00015 nbin_(d.nbin_), 00016 nt_(d.nt_) 00017 { 00018 setTpeak(2.0); 00019 } 00020 00021 00022 void CastorShape::computeShapeCastor() 00023 { 00024 00025 // cout << endl << " ===== computeShapeCastor !!! " << endl << endl; 00026 00027 const float ts = 3.0; // time constant in t * exp(-(t/ts)**2) 00028 00029 00030 int j; 00031 float norm; 00032 00033 // HF SHAPE 00034 norm = 0.0; 00035 for( j = 0; j < 3 * ts && j < nbin_; j++){ 00036 //nt_[j] = ((float)j)*exp(-((float)(j*j))/(ts*ts)); 00037 nt_[j] = j * exp(-(j*j)/(ts*ts)); 00038 norm += nt_[j]; 00039 } 00040 // normalize pulse area to 1.0 00041 for( j = 0; j < 3 * ts && j < nbin_; j++){ 00042 nt_[j] /= norm; 00043 } 00044 } 00045 00046 double CastorShape::operator () (double time) const 00047 { 00048 00049 // return pulse amplitude for request time in ns 00050 int jtime; 00051 jtime = static_cast<int>(time+0.5); 00052 00053 if(jtime >= 0 && jtime < nbin_) 00054 return nt_[jtime]; 00055 else 00056 return 0.0; 00057 } 00058 00059 double CastorShape::derivative (double time) const 00060 { 00061 return 0.0; 00062 } 00063