CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Attributes
CSCGattiFunction Class Reference

#include <CSCGattiFunction.h>

Public Member Functions

double binValue (double x, double stripWidth) const
 
 CSCGattiFunction ()
 
void initChamberSpecs (const CSCChamberSpecs &)
 Calculates k1, k2, k3, h per chamber type, if necessary. More...
 

Private Attributes

double h
 
double k1
 
double k2
 
double k3
 
double norm
 
double sqrtk3
 
const CSCChamberSpecsthePreviousSpecs
 

Detailed Description

Represent functional form of charge distribution over strips in Endcap Muon CSC's.

Author
Rick Wilkinson

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 42 of file CSCGattiFunction.h.

Constructor & Destructor Documentation

CSCGattiFunction::CSCGattiFunction ( )

Definition at line 10 of file CSCGattiFunction.cc.

11 : k1(0.),
12  k2(0.),
13  k3(0.),
14  h(0.),
15  norm(0.),
16  sqrtk3(0.),
18 {
19 }
const CSCChamberSpecs * thePreviousSpecs

Member Function Documentation

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().

45  {
46  double tanh1 = tanh(k2 * (x+stripWidth*0.5)/h );
47  double tanh2 = tanh(k2 * (x-stripWidth*0.5)/h );
48  return norm * ( std::atan(sqrtk3*tanh1) - std::atan(sqrtk3*tanh2) );
49 }
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, alignCSCRings::s, mathSSE::sqrt(), sqrtk3, thePreviousSpecs, CSCChamberSpecs::wireRadius(), and CSCChamberSpecs::wireSpacing().

Referenced by CSCStripHitSim::simulate().

22  {
23  if(&chamberSpecs != thePreviousSpecs) {
24  LogTrace("CSCGattiFunction") << "CSCGattiFunction::initChamberSpecs setting new values.";
25  h = chamberSpecs.anodeCathodeSpacing();
26  double s = chamberSpecs.wireSpacing();
27  double ra = chamberSpecs.wireRadius();
28  static const double parm[5] = {.1989337e-02, -.6901542e-04, .8665786,
29  154.6177, -.6801630e-03 };
30  k3 = (parm[0]*s/h + parm[1])
31  * (parm[2]*s/ra + parm[3] + parm[4]*s*s/ra/ra);
32  sqrtk3 = sqrt(k3);
33  norm = 0.5 / std::atan( sqrtk3 );
34  k2 = M_PI_2 * (1. - sqrtk3/2.);
35  k1 = 0.25 * k2 * sqrtk3 / std::atan(sqrtk3);
36  thePreviousSpecs = &chamberSpecs;
37  }
38 
39  LogTrace("CSCGattiFunction") << "CSCGattiFunction: constants k1=" <<
40  k1 << ", k2=" << k2 << ", k3=" << k3 <<
41  ", h=" << h << ", norm=" << norm;
42 }
#define M_PI_2
float wireRadius() const
T sqrt(T t)
Definition: SSEVec.h:48
const CSCChamberSpecs * thePreviousSpecs
float wireSpacing() const
#define LogTrace(id)
float anodeCathodeSpacing() const

Member Data Documentation

double CSCGattiFunction::h
private

Definition at line 57 of file CSCGattiFunction.h.

Referenced by binValue(), and initChamberSpecs().

double CSCGattiFunction::k1
private

Definition at line 57 of file CSCGattiFunction.h.

Referenced by initChamberSpecs().

double CSCGattiFunction::k2
private

Definition at line 57 of file CSCGattiFunction.h.

Referenced by binValue(), and initChamberSpecs().

double CSCGattiFunction::k3
private

Definition at line 57 of file CSCGattiFunction.h.

Referenced by initChamberSpecs().

double CSCGattiFunction::norm
private

Definition at line 58 of file CSCGattiFunction.h.

Referenced by binValue(), and initChamberSpecs().

double CSCGattiFunction::sqrtk3
private

Definition at line 58 of file CSCGattiFunction.h.

Referenced by binValue(), and initChamberSpecs().

const CSCChamberSpecs* CSCGattiFunction::thePreviousSpecs
private

Definition at line 60 of file CSCGattiFunction.h.

Referenced by initChamberSpecs().