CMS 3D CMS Logo

Public Member Functions | Private Attributes

CSCGattiFunction Class Reference

#include <CSCGattiFunction.h>

List of all members.

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.

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.

: k1(0.), 
  k2(0.), 
  k3(0.), 
  h(0.),
  norm(0.),
  sqrtk3(0.),
  thePreviousSpecs(0)
{
}

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

                                                                    {
  double tanh1 = tanh(k2 * (x+stripWidth*0.5)/h );
  double tanh2 = tanh(k2 * (x-stripWidth*0.5)/h );
  return norm * ( std::atan(sqrtk3*tanh1) - std::atan(sqrtk3*tanh2) );
}
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().

                                                                            {
  if(&chamberSpecs != thePreviousSpecs) {
    LogTrace("CSCGattiFunction") << "CSCGattiFunction::initChamberSpecs setting new values.";
    h = chamberSpecs.anodeCathodeSpacing();
    double s = chamberSpecs.wireSpacing();
    double ra = chamberSpecs.wireRadius();
    static const double parm[5] = {.1989337e-02, -.6901542e-04,  .8665786, 
                                   154.6177, -.6801630e-03 };
    k3 = (parm[0]*s/h + parm[1]) 
           * (parm[2]*s/ra + parm[3] + parm[4]*s*s/ra/ra);
    sqrtk3 = sqrt(k3);
    norm = 0.5 / std::atan( sqrtk3 );
    k2 = M_PI_2 * (1. - sqrtk3/2.);
    k1 = 0.25 * k2 * sqrtk3 / std::atan(sqrtk3);
    thePreviousSpecs = &chamberSpecs;
  }

  LogTrace("CSCGattiFunction")  << "CSCGattiFunction: constants k1=" << 
      k1 << ", k2=" << k2 << ", k3=" << k3 << 
      ", h=" << h << ", norm=" << norm;
}

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

Definition at line 60 of file CSCGattiFunction.h.

Referenced by initChamberSpecs().