#include <Geometry/CSCGeometry/interface/CSCGattiFunction.h>
Public Member Functions | |
double | binValue (double x, double stripWidth) const |
Returns the fraction of charge on a strip centered a distance of x away from the center of the shower, at zero. | |
CSCGattiFunction () | |
void | initChamberSpecs (const CSCChamberSpecs &) |
Calculates k1, k2, k3, h per chamber type, if necessary. | |
Private Attributes | |
double | h |
double | k1 |
double | k2 |
double | k3 |
double | norm |
double | sqrtk3 |
const CSCChamberSpecs * | thePreviousSpecs |
This is required in building RecHits from strips in CSCRecHit and for distributing charge over strips in CSCDigitizer.
It was ported from FORTRAN in CMSISM to C++ in ORCA and then CMSSW.
Function: describes the cathode signal using
the single-parameter Gatti formula:
1 - tanh(K_2 * lambda)**2
Gamma(lambda) = K_1 * -------------------------------
1 + K_3 * tanh (K_2 *lambda)**2
lambda = x/h, h is anode cathode spacing
K_2 = pi/2*(1 - 0.5*sqrt(K_3))
K_2*sqrt(K_3)
K_1 = -------------------
4 * atan(sqrt(K_3))
References : E.Gatti, A.Longoni, NIM 163 (1979) 82-93.
For K_3, "It is used parametrization from Fig.2 from E.Mathieson
J.S.Gordon, "Cathode charge distributions in multi-
wire chambers", NIM 227 (1984) 277-282"
(comment from GATTI3 in cmsim/src/mc_uty/.)
Definition at line 39 of file CSCGattiFunction.h.
CSCGattiFunction::CSCGattiFunction | ( | ) |
Definition at line 10 of file CSCGattiFunction.cc.
00011 : k1(0.), 00012 k2(0.), 00013 k3(0.), 00014 h(0.), 00015 norm(0.), 00016 sqrtk3(0.), 00017 thePreviousSpecs(0) 00018 { 00019 }
double CSCGattiFunction::binValue | ( | double | x, | |
double | stripWidth | |||
) | const |
Returns the fraction of charge on a strip centered a distance of x away from the center of the shower, at zero.
Note that the user is responsible for making sure the constants have been initialized using the chamber specs.
Definition at line 45 of file CSCGattiFunction.cc.
References h, k2, norm, and sqrtk3.
Referenced by CSCStripHitSim::simulate().
00045 { 00046 double tanh1 = tanh(k2 * (x+stripWidth*0.5)/h ); 00047 double tanh2 = tanh(k2 * (x-stripWidth*0.5)/h ); 00048 return norm * ( std::atan(sqrtk3*tanh1) - std::atan(sqrtk3*tanh2) ); 00049 }
void CSCGattiFunction::initChamberSpecs | ( | const CSCChamberSpecs & | chamberSpecs | ) |
Calculates k1, k2, k3, h per chamber type, if necessary.
Definition at line 22 of file CSCGattiFunction.cc.
References CSCChamberSpecs::anodeCathodeSpacing(), h, k1, k2, k3, LogTrace, M_PI_2, norm, s, funct::sqrt(), sqrtk3, thePreviousSpecs, CSCChamberSpecs::wireRadius(), and CSCChamberSpecs::wireSpacing().
Referenced by CSCStripHitSim::simulate().
00022 { 00023 if(&chamberSpecs != thePreviousSpecs) { 00024 LogTrace("CSCGattiFunction") << "CSCGattiFunction::initChamberSpecs setting new values."; 00025 h = chamberSpecs.anodeCathodeSpacing(); 00026 double s = chamberSpecs.wireSpacing(); 00027 double ra = chamberSpecs.wireRadius(); 00028 static const double parm[5] = {.1989337e-02, -.6901542e-04, .8665786, 00029 154.6177, -.6801630e-03 }; 00030 k3 = (parm[0]*s/h + parm[1]) 00031 * (parm[2]*s/ra + parm[3] + parm[4]*s*s/ra/ra); 00032 sqrtk3 = sqrt(k3); 00033 norm = 0.5 / std::atan( sqrtk3 ); 00034 k2 = M_PI_2 * (1. - sqrtk3/2.); 00035 k1 = 0.25 * k2 * sqrtk3 / std::atan(sqrtk3); 00036 thePreviousSpecs = &chamberSpecs; 00037 } 00038 00039 LogTrace("CSCGattiFunction") << "CSCGattiFunction: constants k1=" << 00040 k1 << ", k2=" << k2 << ", k3=" << k3 << 00041 ", h=" << h << ", norm=" << norm; 00042 }
double CSCGattiFunction::h [private] |
double CSCGattiFunction::k1 [private] |
double CSCGattiFunction::k2 [private] |
double CSCGattiFunction::k3 [private] |
double CSCGattiFunction::norm [private] |
double CSCGattiFunction::sqrtk3 [private] |
const CSCChamberSpecs* CSCGattiFunction::thePreviousSpecs [private] |