#include <CSCDriftSim.h>
Public Member Functions | |
CSCDriftSim () | |
CSCDetectorHit | getWireHit (const Local3DPoint &ionClusterPosition, const CSCLayer *, int wire, const PSimHit &simHit) |
void | setMagneticField (const MagneticField *field) |
void | setRandomEngine (CLHEP::HepRandomEngine &engine) |
~CSCDriftSim () | |
Private Member Functions | |
double | avalancheCharge () |
double | avgDrift () const |
double | avgDriftTimeHighB () |
double | avgDriftTimeLowB () |
double | avgPathLengthHighB () |
double | avgPathLengthLowB () |
double | driftSigma () const |
double | driftTimeSigmaHighB () |
double | driftTimeSigmaLowB () |
double | gasGain (const CSCDetId &id) const |
double | pathSigmaHighB () |
double | pathSigmaLowB () |
Private Attributes | |
float | bz |
std::vector< double > | dNdEIntegral |
const double | ELECTRON_DIFFUSION_COEFF |
const double | STEP_SIZE |
const MagneticField * | theMagneticField |
CLHEP::RandFlat * | theRandFlat |
CLHEP::RandGaussQ * | theRandGaussQ |
double | ycell |
double | zcell |
Simulate drift of electrons through CSC gas.
Someday this class will be subclassed into fast and slow sims, Now it's just slow, according to the rest of the ORCA developers...
Last mod:
30-Jun-00 ptc Doxygenate.
Bug-fix in ctor: first bin of integral was 'nan'.
Bug-trap in avalancheCharge(): very rarely could attempt access outside std::vector.
01-08/00 vin use binary search in avalancheCharge()
Definition at line 30 of file CSCDriftSim.h.
CSCDriftSim::CSCDriftSim | ( | ) |
Definition at line 20 of file CSCDriftSim.cc.
References dNdEIntegral, create_public_lumi_plots::exp, i, N_INTEGRAL_STEPS, funct::pow(), and STEP_SIZE.
: bz(0.), // should make these local variables ycell(0.), zcell(0.), dNdEIntegral(N_INTEGRAL_STEPS, 0.), STEP_SIZE(0.01), ELECTRON_DIFFUSION_COEFF(0.0161), theMagneticField(0), theRandGaussQ(0), theRandFlat(0) { // just initialize avalanche sim. There has to be a better // way to take the integral of a function! double sum = 0.; int i; for(i = 0; i < N_INTEGRAL_STEPS; ++i) { if(i > 1) { double xx = STEP_SIZE * (double(i) - 0.5 ); double dNdE = pow( xx, 0.38) * exp(-1.38*xx); sum += dNdE; } // store this value in the map dNdEIntegral[i] = sum; } // now normalize the whole map for(i = 0; i < N_INTEGRAL_STEPS; ++i) { dNdEIntegral[i] /= sum; } }
CSCDriftSim::~CSCDriftSim | ( | ) |
Definition at line 53 of file CSCDriftSim.cc.
References theRandFlat, and theRandGaussQ.
{ delete theRandGaussQ; delete theRandFlat; }
double CSCDriftSim::avalancheCharge | ( | ) | [private] |
Definition at line 144 of file CSCDriftSim.cc.
References dNdEIntegral, i, LogTrace, AlCaHLTBitMon_ParallelJobs::p, STEP_SIZE, theRandFlat, and x.
Referenced by getWireHit().
{ double returnVal = 0.; // pick a random value along the dNdE integral double x = theRandFlat->fire(); size_t i; size_t isiz = dNdEIntegral.size(); /* for(i = 0; i < isiz-1; ++i) { if(dNdEIntegral[i] > x) break; } */ // return position of first element with a value >= x std::vector<double>::const_iterator p=lower_bound(dNdEIntegral.begin(),dNdEIntegral.end(),x); if (p==dNdEIntegral.end()) i=isiz-1; else i = p-dNdEIntegral.begin(); // now extrapolate between values if( i == isiz-1 ) { //edm::LogInfo("CSCDriftSim") << "Funky integral in CSCDriftSim " << x; returnVal = STEP_SIZE * double(i) * dNdEIntegral[i]; } else { double x1 = dNdEIntegral[i]; double x2 = dNdEIntegral[i+1]; returnVal = STEP_SIZE * (double(i) + (x-x1)/(x2-x1)); } LogTrace("CSCDriftSim") << "CSCDriftSim: avalanche fluc " << returnVal << " " << x ; return returnVal; }
double CSCDriftSim::avgDrift | ( | ) | const [private] |
Definition at line 8 of file CSCDriftParam.cc.
Referenced by getWireHit().
{ /* Initialized data */ static const double coeff[6] = { -.08618265,-.0020471805,-7.7771331e-4, -.0058433565,-5.0241491e-4,.0010223353 }; /* ! Parameterization of Lorentz drift in CSCs */ /* *********************************************************************** * DOC MC_ALL_BDFT * * * * DOC Function : Parameterization of the Lorentz drift of electrons * * DOC in the muon endcap CSCs. * * * * DOC References : None * * * * DOC Arguments : BZ - z componant of the local magnetic * * field in kgauss * * DOC ZCELL - distance from the anode wire in the wire * * plane coordinate normalized to one * * DOC Errors : None * * * * DOC Returns : Drift distance along the anode wire * * * * DOC Created : 15-OCT-1996 Author : Jeff Rowe * * *********************************************************************** */ const double x10 = 1.; const double x11 = bz / 40.; const double x12 = x11 * 2. * x11 - x10; const double x13 = x11 * 2. * x12 - x11; const double x14 = x11 * 2. * x13 - x12; const double x15 = x11 * 2. * x14 - x13; const double x16 = x11 * 2. * x15 - x14; const double x17 = x11 * 2. * x16 - x15; const double x18 = x11 * 2. * x17 - x16; const double x19 = x11 * 2. * x18 - x17; const double x20 = 1.; const double x21 = zcell; const double x22 = x21 * 2. * x21 - x20; const double x23 = x21 * 2. * x22 - x21; const double x24 = x21 * 2. * x23 - x22; const double x25 = x21 * 2. * x24 - x23; const double x26 = x21 * 2. * x25 - x24; const double x27 = x21 * 2. * x26 - x25; // not sure why we need a minus sign for avgDrift, but we think the // parametrization has a wrong sign. For the +z endcap, bz should // be negative in local coord, so it should drift to the right // if drifting up (neg zcell), and to the left if it drifts down. It doesn't. // the first-order term here is -0.08 * bz/40 * zcell return -1 * (coeff[0] * x11 * x21 + coeff[1] * x17 * x21 + coeff[2] * x21 + coeff[3] * x11 * x27 + coeff[4] * x22 + coeff[5] * x19); }
double CSCDriftSim::avgDriftTimeHighB | ( | ) | [private] |
Definition at line 157 of file CSCDriftParamHighB.cc.
Referenced by getWireHit().
{ /* Initialized data */ static const double coeff[27] = { 22.384492,10.562894,14.032961,7.06233, 3.5523289,-5.0176704,1.999075,1.0635552,-3.2770096,-2.7384958, .98411495,-2.0963696,-1.4006525,-.47542728,.64179451,-.80308436, .42964647,-.4153324,.50423068,.35049792,-.42595896,-.30947641, .16671267,-.21336584,.22979164,.23481052,.32550435 }; /* System generated locals */ float ret_val; /* Local variables */ double x10, x11, x12, x13, x14, x15, x16, x17, x20, x21, x22, x23, x24, x25, x26, x27; /* ! Parameterization of drift time - high field chambers */ /* *********************************************************************** */ /* DOC MC_BHGH_TIME * */ /* * */ /* DOC Function : Parameterization of the drift time * */ /* DOC in the muon endcap CSCs. * */ /* * */ /* DOC References : None * */ /* * */ /* DOC Arguments : YCELL - distance from the anode wire in the * */ /* anode-cathode coordinate plane * */ /* (ycell=1 > d_acat) * */ /* DOC ZCELL - distance from the anode wire in the wire * */ /* plane coordinate (zcell=1 > d_anod/2.) * */ /* DOC Errors : None * */ /* * */ /* DOC Returns : Drift time for high field CSC chambers * */ /* * */ /* DOC Created : 15-OCT-1996 Author : Jeff Rowe * */ /* *********************************************************************** */ x10 = 1.; x11 = fabs(ycell) * 2. - 1.; x12 = x11 * 2. * x11 - x10; x13 = x11 * 2. * x12 - x11; x14 = x11 * 2. * x13 - x12; x15 = x11 * 2. * x14 - x13; x16 = x11 * 2. * x15 - x14; x17 = x11 * 2. * x16 - x15; x20 = 1.; x21 = fabs(zcell) * 2. - 1.; x22 = x21 * 2. * x21 - x20; x23 = x21 * 2. * x22 - x21; x24 = x21 * 2. * x23 - x22; x25 = x21 * 2. * x24 - x23; x26 = x21 * 2. * x25 - x24; x27 = x21 * 2. * x26 - x25; ret_val = coeff[0] + coeff[1] * x11 + coeff[2] * x21 + coeff[3] * x22 + coeff[4] * x23 + coeff[5] * x11 * x21 + coeff[6] * x24 + coeff[7] * x12 + coeff[8] * x11 * x22 + coeff[9] * x11 * x23 + coeff[10] * x25 + coeff[11] * x11 * x24 + coeff[12] * x11 * x25 + coeff[13] * x13 + coeff[14] * x12 * x21 + coeff[15] * x11 * x26 + coeff[16] * x26 + coeff[17] * x11 * x27 + coeff[18] * x17 * x21 + coeff[19] * x15 * x21 + coeff[20] * x12 * x22 + coeff[21] * x12 * x23 + coeff[ 22] * x27 + coeff[23] * x14 * x22 + coeff[24] * x16 * x21 + coeff[ 25] * x17 + coeff[26] * x17 * x22; return ret_val; }
double CSCDriftSim::avgDriftTimeLowB | ( | ) | [private] |
Definition at line 155 of file CSCDriftParamLowB.cc.
Referenced by getWireHit().
{ /* Initialized data */ static const double coeff[20] = { 42.981588,25.732805,26.539129,16.719016, 10.862044,7.4859085,5.0353142,3.3620548,1.9057762,2.2207695, -2.6787582,1.2977292,-.8358091,1.2452612,.74813469,-.57581194, .32705275,-.85426489,-.55688158,-.38384903 }; /* System generated locals */ float ret_val; /* Local variables */ double x10, x11, x12, x13, x14, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29; /* ! Parameterization of drift time - low field chambers */ /* *********************************************************************** */ /* DOC MC_BLOW_TIME * */ /* * */ /* DOC Function : Parameterization of the drift time * */ /* DOC in the muon endcap CSCs. * */ /* * */ /* DOC References : None * */ /* * */ /* DOC Arguments : YCELL - distance from the anode wire in the * */ /* anode-cathode coordinate plane * */ /* (ycell=1 > d_acat) * */ /* DOC ZCELL - distance from the anode wire in the wire * */ /* plane coordinate (zcell=1 > d_anod/2.) * */ /* DOC Errors : None * */ /* * */ /* DOC Returns : Drift time for low field CSC chambers * */ /* * */ /* DOC Created : 15-OCT-1996 Author : Jeff Rowe * */ /* *********************************************************************** */ x10 = 1.; x11 = fabs(ycell) * 2. - 1.; x12 = x11 * 2. * x11 - x10; x13 = x11 * 2. * x12 - x11; x14 = x11 * 2. * x13 - x12; x20 = 1.; x21 = fabs(zcell) * 2. - 1.; x22 = x21 * 2. * x21 - x20; x23 = x21 * 2. * x22 - x21; x24 = x21 * 2. * x23 - x22; x25 = x21 * 2. * x24 - x23; x26 = x21 * 2. * x25 - x24; x27 = x21 * 2. * x26 - x25; x28 = x21 * 2. * x27 - x26; x29 = x21 * 2. * x28 - x27; ret_val = coeff[0] + coeff[1] * x11 + coeff[2] * x21 + coeff[3] * x22 + coeff[4] * x23 + coeff[5] * x24 + coeff[6] * x25 + coeff[7] * x26 + coeff[8] * x12 + coeff[9] * x27 + coeff[10] * x11 * x21 + coeff[ 11] * x28 + coeff[12] * x13 + coeff[13] * x12 * x21 + coeff[14] * x29 + coeff[15] * x13 * x21 + coeff[16] * x14 + coeff[17] * x11 * x22 + coeff[18] * x11 * x23 + coeff[19] * x11 * x24; return ret_val; }
double CSCDriftSim::avgPathLengthHighB | ( | ) | [private] |
Definition at line 4 of file CSCDriftParamHighB.cc.
Referenced by getWireHit().
{ /* Initialized data */ static const double coeff[18] = { .16916627,.11057547,.054287448,.01179527, .0062073273,-.013570915,-.0027121772,-.0053792764,-.0027452986, -.0020556715,.0021511659,.0011376412,.0026183373,.0017980602, -.0012975418,-.0010798782,-.0012322628,-8.3635924e-4 }; /* Local variables */ double x10, x11, x12, x13, x14, x20, x21, x22, x23, x24, x25; /* ! Parameterization of drift path length - high field chambers */ /* *********************************************************************** */ /* DOC MC_BHGH_SLEN * */ /* * */ /* DOC Function : Parameterization of the drift path length * */ /* DOC in the muon endcap CSCs. * */ /* * */ /* DOC References : None * */ /* * */ /* DOC Arguments : YCELL - distance from the anode wire in the * */ /* anode-cathode coordinate plane * */ /* DOC ZCELL - distance from the anode wire in the wire * */ /* plane coordinate * */ /* DOC Errors : None * */ /* * */ /* DOC Returns : Drift path length for high field CSC chambers * */ /* * */ /* DOC Created : 15-OCT-1996 Author : Jeff Rowe * */ /* *********************************************************************** */ x10 = 1.; x11 = fabs(ycell) * 2. - 1.; x12 = x11 * 2. * x11 - x10; x13 = x11 * 2. * x12 - x11; x14 = x11 * 2. * x13 - x12; x20 = 1.; x21 = fabs(zcell) * 2. - 1.; x22 = x21 * 2. * x21 - x20; x23 = x21 * 2. * x22 - x21; x24 = x21 * 2. * x23 - x22; x25 = x21 * 2. * x24 - x23; return coeff[0] + coeff[1] * x11 + coeff[2] * x21 + coeff[3] * x22 + coeff[4] * x12 + coeff[5] * x11 * x21 + coeff[6] * x13 + coeff[7] * x12 * x22 + coeff[8] * x12 * x23 + coeff[9] * x11 * x24 + coeff[ 10] * x12 * x21 + coeff[11] * x14 + coeff[12] * x11 * x22 + coeff[ 13] * x13 * x22 + coeff[14] * x13 * x21 + coeff[15] * x12 * x24 + coeff[16] * x11 * x25 + coeff[17] * x11 * x23; }
double CSCDriftSim::avgPathLengthLowB | ( | ) | [private] |
Definition at line 7 of file CSCDriftParamLowB.cc.
Referenced by getWireHit().
{ static const double coeff[7] = { .28872209,.21705601,.063908389,-.012224924, .012901814,-.0089355058,-.015769145 }; // System generated locals float ret_val; // Local variables double x10, x11, x12, x13, x20, x21, x22; /* ! Parameterization of drift path length - low field chambers */ /* *********************************************************************** */ /* DOC MC_BHGH_SLEN * */ /* * */ /* DOC Function : Parameterization of the drift path length * */ /* DOC in the muon endcap CSCs. * */ /* * */ /* DOC References : None * */ /* * */ /* DOC Arguments : YCELL - distance from the anode wire in the * */ /* anode-cathode coordinate plane * */ /* DOC ZCELL - distance from the anode wire in the wire * */ /* plane coordinate * */ /* DOC Errors : None * */ /* * */ /* DOC Returns : Drift path length for low field CSC chambers * */ /* * */ /* DOC Created : 15-OCT-1996 Author : Jeff Rowe * */ /* *********************************************************************** */ x10 = 1.; x11 = fabs(ycell) * 2. - 1.; x12 = x11 * 2. * x11 - x10; x13 = x11 * 2. * x12 - x11; x20 = 1.; x21 = fabs(zcell) * 2. - 1.; x22 = x21 * 2. * x21 - x20; ret_val = coeff[0] + coeff[1] * x11 + coeff[2] * x21 + coeff[3] * x12 * x22 + coeff[4] * x22 + coeff[5] * x13 + coeff[6] * x11 * x21; return ret_val; }
double CSCDriftSim::driftSigma | ( | ) | const [private] |
Definition at line 69 of file CSCDriftParam.cc.
Referenced by getWireHit().
{ // Initialized data static const double coeff[3] = { .01069525,.010364504,.0021662697 }; /* ! Parameterization of Lorentz drift error in CSCs */ /************************************************************************* * DOC MC_ALL_BSIG * * * * DOC Function : Parameterization of the dispersion in Lorentz Drift* * DOC in the muon endcap CSCs. * * * * DOC References : None * * * * DOC Arguments : BZ - z componant of the local magnetic * * DOC ZCELL - distance from the anode wire in the wire * * plane coordinate normalized to 1 * * DOC Errors : None * * * * DOC Returns : Dispersion in Lorentz drift along anode wire * * * * DOC Created : 15-OCT-1996 Author : Jeff Rowe * * *********************************************************************** */ const double x11 = bz / 40.; const double x20 = 1.; const double x21 = zcell; const double x22 = x21 * 2. * x21 - x20; return coeff[0] + coeff[1] * x11 * x21 + coeff[2] * x22; }
double CSCDriftSim::driftTimeSigmaHighB | ( | ) | [private] |
Definition at line 245 of file CSCDriftParamHighB.cc.
Referenced by getWireHit().
{ /* Initialized data */ static const double coeff[17] = { 5.5533465,3.3733352,3.776603,2.2673355, 1.3401485,.84209333,-.71621378,.57572407,-.52313936,-.78790514, -.71786066,.43370011,.29223306,-.37791975,.21121024,.31513644, .25382701 }; /* System generated locals */ float ret_val; /* Local variables */ double x10, x11, x12, x13, x14, x15, x16, x17, x18, /*x19,*/ x20, x21, x22, x23, x24, x25, x26, x27, x28, x29; /* ! Parameterization of drift time dispersion- high field chambers */ /* *********************************************************************** */ /* DOC MC_BHGH_TSIG * */ /* * */ /* DOC Function : Parameterization of the drift time dispersion * */ /* DOC in the muon endcap CSCs. * */ /* * */ /* DOC References : None * */ /* * */ /* DOC Arguments : YCELL - distance from the anode wire in the * */ /* anode-cathode coordinate plane * */ /* (ycell=1 > d_acat) * */ /* DOC ZCELL - distance from the anode wire in the wire * */ /* plane coordinate (zcell=1 > d_anod/2.) * */ /* DOC Errors : None * */ /* * */ /* DOC Returns : Drift time dispersion for high field CSC chambers * */ /* * */ /* DOC Created : 15-OCT-1996 Author : Jeff Rowe * */ /* *********************************************************************** */ x10 = 1.; x11 = fabs(ycell) * 2. - 1.; x12 = x11 * 2. * x11 - x10; x13 = x11 * 2. * x12 - x11; x14 = x11 * 2. * x13 - x12; x15 = x11 * 2. * x14 - x13; x16 = x11 * 2. * x15 - x14; x17 = x11 * 2. * x16 - x15; x18 = x11 * 2. * x17 - x16; //x19 = x11 * 2. * x18 - x17; //not used later x20 = 1.; x21 = fabs(zcell) * 2. - 1.; x22 = x21 * 2. * x21 - x20; x23 = x21 * 2. * x22 - x21; x24 = x21 * 2. * x23 - x22; x25 = x21 * 2. * x24 - x23; x26 = x21 * 2. * x25 - x24; x27 = x21 * 2. * x26 - x25; x28 = x21 * 2. * x27 - x26; x29 = x21 * 2. * x28 - x27; ret_val = coeff[0] * x21 + coeff[1] + coeff[2] * x22 + coeff[3] * x23 + coeff[4] * x24 + coeff[5] * x25 + coeff[6] * x11 * x23 + coeff[7] * x26 + coeff[8] * x11 * x25 + coeff[9] * x11 * x24 + coeff[10] * x11 * x22 + coeff[11] * x27 + coeff[12] * x28 + coeff[13] * x11 * x26 + coeff[14] * x29 + coeff[15] * x16 * x21 + coeff[16] * x18 * x21; return ret_val; }
double CSCDriftSim::driftTimeSigmaLowB | ( | ) | [private] |
Definition at line 239 of file CSCDriftParamLowB.cc.
Referenced by getWireHit().
{ /* Initialized data */ static const double coeff[19] = { 6.2681223,3.5916437,5.5425809,4.6974052, 3.8472392,3.1019155,2.4323913,1.8695623,1.3909068,.99056625, .52066638,.64671229,.68023389,.40512251,.40202738,.23908531, -.41245784,-.32196924,-.29890696 }; /* Local variables */ double /*x10,*/ x11, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x210, x211, x212; /* ! Parameterization of drift time dispersion- low field chambers */ /* *********************************************************************** */ /* DOC MC_BHGH_TSIG * */ /* * */ /* DOC Function : Parameterization of the drift time dispersion * */ /* DOC in the muon endcap CSCs. * */ /* * */ /* DOC References : None * */ /* * */ /* DOC Arguments : YCELL - distance from the anode wire in the * */ /* anode-cathode coordinate plane * */ /* (ycell=1 > d_acat) * */ /* DOC ZCELL - distance from the anode wire in the wire * */ /* plane coordinate (zcell=1 > d_anod/2.) * */ /* DOC Errors : None * */ /* * */ /* DOC Returns : Drift time dispersion for low field CSC chambers * */ /* * */ /* DOC Created : 15-OCT-1996 Author : Jeff Rowe * */ /* *********************************************************************** */ //x10 = 1.; //not used x11 = fabs(ycell) * 2. - 1.; x20 = 1.; x21 = fabs(zcell) * 2. - 1.; x22 = x21 * 2. * x21 - x20; x23 = x21 * 2. * x22 - x21; x24 = x21 * 2. * x23 - x22; x25 = x21 * 2. * x24 - x23; x26 = x21 * 2. * x25 - x24; x27 = x21 * 2. * x26 - x25; x28 = x21 * 2. * x27 - x26; x29 = x21 * 2. * x28 - x27; x210 = x21 * 2. * x29 - x28; x211 = x21 * 2. * x210 - x29; x212 = x21 * 2. * x211 - x210; return coeff[0] * x21 + coeff[1] + coeff[2] * x22 + coeff[3] * x23 + coeff[4] * x24 + coeff[5] * x25 + coeff[6] * x26 + coeff[7] * x27 + coeff[8] * x28 + coeff[9] * x29 + coeff[10] * x11 + coeff[11] * x11 * x21 + coeff[12] * x210 + coeff[13] * x11 * x22 + coeff[14] * x211 + coeff[15] * x212 + coeff[16] * x11 * x25 + coeff[17] * x11 * x27 + coeff[18] * x11 * x26; }
double CSCDriftSim::gasGain | ( | const CSCDetId & | id | ) | const [private] |
Definition at line 177 of file CSCDriftSim.cc.
References query::result, CSCDetId::ring(), relativeConstraints::ring, and CSCDetId::station().
Referenced by getWireHit().
CSCDetectorHit CSCDriftSim::getWireHit | ( | const Local3DPoint & | ionClusterPosition, |
const CSCLayer * | layer, | ||
int | wire, | ||
const PSimHit & | simHit | ||
) |
takes a point, and creates a signal on the wire
Definition at line 68 of file CSCDriftSim.cc.
References CSCChamberSpecs::anodeCathodeSpacing(), avalancheCharge(), avgDrift(), avgDriftTimeHighB(), avgDriftTimeLowB(), avgPathLengthHighB(), avgPathLengthLowB(), bz, CSCLayer::chamber(), DeDxDiscriminatorTools::charge(), driftSigma(), driftTimeSigmaHighB(), driftTimeSigmaLowB(), e_SI, ELECTRON_DIFFUSION_COEFF, gasGain(), relativeConstraints::geom, CSCLayer::geometry(), CSCLayer::id(), MagneticField::inKGauss(), LogTrace, max(), pathSigmaHighB(), pathSigmaLowB(), pos, idealTransformation::rotation, CSCChamber::specs(), mathSSE::sqrt(), GeomDet::surface(), lumiQTWidget::t, theMagneticField, theRandGaussQ, PSimHit::tof(), Surface::toGlobal(), GeomDet::toLocal(), CSCLayerGeometry::wireAngle(), CSCChamberSpecs::wireSpacing(), PV3DBase< T, PVType, FrameType >::x(), x, PV3DBase< T, PVType, FrameType >::y(), ycell, CSCLayerGeometry::yOfWire(), PV3DBase< T, PVType, FrameType >::z(), z, and zcell.
Referenced by CSCWireHitSim::simulate().
{ const CSCChamberSpecs * specs = layer->chamber()->specs(); const CSCLayerGeometry * geom = layer->geometry(); math::LocalPoint clusterPos(pos.x(), pos.y(), pos.z()); LogTrace("CSCDriftSim") << "CSCDriftSim: ionization cluster at: " << pos; // set the coordinate system with the x-axis along the nearest wire, // with the origin in the center of the chamber, on that wire. math::LocalVector yShift(0, -1.*geom->yOfWire(nearestWire), 0.); ROOT::Math::RotationZ rotation(-1.*geom->wireAngle()); clusterPos = yShift + clusterPos; clusterPos = rotation * clusterPos; GlobalPoint globalPosition = layer->surface().toGlobal(pos); assert(theMagneticField != 0); // bz = theMagneticField->inTesla(globalPosition).z() * 10.; // We need magnetic field in _local_ coordinates // Interface now allows access in kGauss directly. bz = layer->toLocal( theMagneticField->inKGauss( globalPosition ) ).z(); // these subroutines label the coordinates in GEANT coords... ycell = clusterPos.z() / specs->anodeCathodeSpacing(); zcell = 2.*clusterPos.y() / specs->wireSpacing(); LogTrace("CSCDriftSim") << "CSCDriftSim: bz " << bz <<" avgDrift " << avgDrift() << " wireAngle " << geom->wireAngle() << " ycell " << ycell << " zcell " << zcell; double avgPathLength, pathSigma, avgDriftTime, driftTimeSigma; static const float B_FIELD_CUT = 15.f; if(fabs(bz) < B_FIELD_CUT) { avgPathLength = avgPathLengthLowB(); pathSigma = pathSigmaLowB(); avgDriftTime = avgDriftTimeLowB(); driftTimeSigma = driftTimeSigmaLowB(); } else { avgPathLength = avgPathLengthHighB(); pathSigma = pathSigmaHighB(); avgDriftTime = avgDriftTimeHighB(); driftTimeSigma = driftTimeSigmaHighB(); } // electron drift path length double pathLength = std::max(theRandGaussQ->fire(avgPathLength, pathSigma), 0.); // electron drift distance along the anode wire, including diffusion double diffusionSigma = ELECTRON_DIFFUSION_COEFF * sqrt(pathLength); double x = clusterPos.x() + theRandGaussQ->fire(avgDrift(), driftSigma()) + theRandGaussQ->fire(0., diffusionSigma); // electron drift time double driftTime = std::max(theRandGaussQ->fire(avgDriftTime, driftTimeSigma), 0.); //@@ Parameters which should be defined outside the code // f_att is the fraction of drift electrons lost due to attachment //static const double f_att = 0.5; static const double f_collected = 0.82; // Avalanche charge, with fluctuation ('avalancheCharge()' is the fluctuation generator!) //double charge = avalancheCharge() * f_att * f_collected * gasGain(layer->id()) * e_SI * 1.e15; // doing fattachment by random chance of killing double charge = avalancheCharge() * f_collected * gasGain(layer->id()) * e_SI * 1.e15; float t = simHit.tof() + driftTime; LogTrace("CSCDriftSim") << "CSCDriftSim: tof = " << simHit.tof() << " driftTime = " << driftTime << " MEDH = " << CSCDetectorHit(nearestWire, charge, x, t, &simHit); return CSCDetectorHit(nearestWire, charge, x, t, &simHit); }
double CSCDriftSim::pathSigmaHighB | ( | ) | [private] |
Definition at line 76 of file CSCDriftParamHighB.cc.
Referenced by getWireHit().
{ /* Initialized data */ static const double coeff[9] = { .0049089564,.0091482062,.0024036507, .0065285652,.0041487742,-.0038102526,-.0043923587,.0019230151, .0013543258 }; /* System generated locals */ float ret_val; /* Local variables */ double /*x10,*/ x11, x12, x13, x14, x15, x16, /*x20,*/ x21, x22, x23, x24, x25, x26, x27, x28, x29; /* ! Parameterization of path length dispersion- high field chambers */ /* *********************************************************************** */ /* DOC MC_BHGH_SSIG * */ /* * */ /* DOC Function : Parameterization of the drift path length * */ /* DOC dispersion in the muon endcap CSCs. * */ /* * */ /* DOC References : None * */ /* * */ /* DOC Arguments : YCELL - distance from the anode wire in the * */ /* anode-cathode coordinate plane * */ /* DOC ZCELL - distance from the anode wire in the wire * */ /* plane coordinate * */ /* **NOTE** Both distances normalize to cell dim=1x1 * */ /* DOC Errors : None * */ /* * */ /* DOC Returns : Path length dispersion for high field CSC chambers * */ /* * */ /* DOC Created : 15-OCT-1996 Author : Jeff Rowe * */ /* *********************************************************************** */ //x10 = 1.; //not used later x11 = fabs(ycell) * 2. - 1.; x12 = x11 * x11; x13 = x11 * x12; x14 = x11 * x13; x15 = x11 * x14; x16 = x11 * x15; //x20 = 1.; //not used later x21 = fabs(zcell) * 2. - 1.; x22 = x21 * x21; x23 = x21 * x22; x24 = x21 * x23; x25 = x21 * x24; x26 = x21 * x25; x27 = x21 * x26; x28 = x21 * x27; x29 = x21 * x28; ret_val = coeff[0] + coeff[1] * x21 + coeff[2] * x11 + coeff[3] * x22 + coeff[4] * x11 * x21 + coeff[5] * x16 * x22 + coeff[6] * x16 * x23 + coeff[7] * x11 * x22 + coeff[8] * x29; return ret_val; }
double CSCDriftSim::pathSigmaLowB | ( | ) | [private] |
Definition at line 70 of file CSCDriftParamLowB.cc.
Referenced by getWireHit().
{ /* Initialized data */ static const double coeff[12] = { .002854441,8.701339e-4,.0053064193, .0012356508,9.8627318e-4,.0013802449,-5.4633755e-4,.0026078648, .0044171026,6.2029063e-4,.0011392474,-.0056275595 }; /* System generated locals */ float ret_val; /* Local variables */ double /*x10,*/ x11, x12, x13, x14, x15, x16, /*x20,*/ x21, x22, x23, x24, x25, x26, x27, x28, x29, x210, x211, x212, x213; /* ! Parameterization of path length dispersion- low field chambers */ /* *********************************************************************** */ /* DOC MC_BHGH_SSIG * */ /* * */ /* DOC Function : Parameterization of the drift path length * */ /* DOC dispersion in the muon endcap CSCs. * */ /* * */ /* DOC References : None * */ /* * */ /* DOC Arguments : YCELL - distance from the anode wire in the * */ /* anode-cathode coordinate plane * */ /* DOC ZCELL - distance from the anode wire in the wire * */ /* plane coordinate * */ /* **NOTE** Both distances normalize to cell dim=1x1 * */ /* DOC Errors : None * */ /* * */ /* DOC Returns : Path length dispersion for low field CSC chambers * */ /* * */ /* DOC Created : 15-OCT-1996 Author : Jeff Rowe * */ /* *********************************************************************** */ //x10 = 1.; //not used later x11 = fabs(ycell) * 2. - 1.; x12 = x11 * x11; x13 = x11 * x12; x14 = x11 * x13; x15 = x11 * x14; x16 = x11 * x15; //x20 = 1.; //not used later x21 = fabs(zcell) * 2. - 1.; x22 = x21 * x21; x23 = x21 * x22; x24 = x21 * x23; x25 = x21 * x24; x26 = x21 * x25; x27 = x21 * x26; x28 = x21 * x27; x29 = x21 * x28; x210 = x21 * x29; x211 = x21 * x210; x212 = x21 * x211; x213 = x21 * x212; ret_val = coeff[0] + coeff[1] * x23 + coeff[2] * x24 + coeff[3] * x13 + coeff[4] * x11 * x21 + coeff[5] * x11 * x22 + coeff[6] * x16 + coeff[7] * x213 + coeff[8] * x212 + coeff[9] * x21 + coeff[10] * x11 * x23 + coeff[11] * x26; return ret_val; }
void CSCDriftSim::setMagneticField | ( | const MagneticField * | field | ) | [inline] |
Definition at line 43 of file CSCDriftSim.h.
References theMagneticField.
Referenced by CSCDigitizer::setMagneticField().
{theMagneticField = field;}
void CSCDriftSim::setRandomEngine | ( | CLHEP::HepRandomEngine & | engine | ) |
Definition at line 60 of file CSCDriftSim.cc.
References theRandFlat, and theRandGaussQ.
Referenced by CSCWireHitSim::setRandomEngine().
{ theRandGaussQ = new CLHEP::RandGaussQ(engine); theRandFlat = new CLHEP::RandFlat(engine); }
float CSCDriftSim::bz [private] |
Definition at line 63 of file CSCDriftSim.h.
Referenced by avgDrift(), driftSigma(), and getWireHit().
std::vector<double> CSCDriftSim::dNdEIntegral [private] |
Definition at line 67 of file CSCDriftSim.h.
Referenced by avalancheCharge(), and CSCDriftSim().
const double CSCDriftSim::ELECTRON_DIFFUSION_COEFF [private] |
Definition at line 70 of file CSCDriftSim.h.
Referenced by getWireHit().
const double CSCDriftSim::STEP_SIZE [private] |
Definition at line 68 of file CSCDriftSim.h.
Referenced by avalancheCharge(), and CSCDriftSim().
const MagneticField* CSCDriftSim::theMagneticField [private] |
Definition at line 72 of file CSCDriftSim.h.
Referenced by getWireHit(), and setMagneticField().
CLHEP::RandFlat* CSCDriftSim::theRandFlat [private] |
Definition at line 75 of file CSCDriftSim.h.
Referenced by avalancheCharge(), setRandomEngine(), and ~CSCDriftSim().
CLHEP::RandGaussQ* CSCDriftSim::theRandGaussQ [private] |
Definition at line 74 of file CSCDriftSim.h.
Referenced by getWireHit(), setRandomEngine(), and ~CSCDriftSim().
double CSCDriftSim::ycell [private] |
Definition at line 65 of file CSCDriftSim.h.
Referenced by avgDriftTimeHighB(), avgDriftTimeLowB(), avgPathLengthHighB(), avgPathLengthLowB(), driftTimeSigmaHighB(), driftTimeSigmaLowB(), getWireHit(), pathSigmaHighB(), and pathSigmaLowB().
double CSCDriftSim::zcell [private] |
Definition at line 65 of file CSCDriftSim.h.
Referenced by avgDrift(), avgDriftTimeHighB(), avgDriftTimeLowB(), avgPathLengthHighB(), avgPathLengthLowB(), driftSigma(), driftTimeSigmaHighB(), driftTimeSigmaLowB(), getWireHit(), pathSigmaHighB(), and pathSigmaLowB().