CMS 3D CMS Logo

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

#include <CSCStripHitSim.h>

Public Member Functions

std::vector< CSCDetectorHit > & simulate (const CSCLayer *layer, const std::vector< CSCDetectorHit > &wireHits)
 

Private Attributes

std::vector< CSCDetectorHitnewStripHits
 
CSCGattiFunction theGattiFunction
 

Detailed Description

Class which builds simulated strip hits from wire hits during digitization of Endcap Muon CSCs.

Author
Rick Wilkinson

Definition at line 21 of file CSCStripHitSim.h.

Member Function Documentation

◆ simulate()

std::vector< CSCDetectorHit > & CSCStripHitSim::simulate ( const CSCLayer layer,
const std::vector< CSCDetectorHit > &  wireHits 
)

Definition at line 10 of file CSCStripHitSim.cc.

11  {
12  // make sure the gatti function is initialized
13  const CSCChamberSpecs *chamberSpecs = layer->chamber()->specs();
14  const CSCLayerGeometry *geom = layer->geometry();
15  theGattiFunction.initChamberSpecs(*chamberSpecs);
16  const int nNodes = chamberSpecs->nNodes();
17 
18  // for every wire hit, induce a Gatti-distributed charge on the
19  // cathode strips
20  newStripHits.clear();
21  newStripHits.reserve((2 * nNodes + 1) * wireHits.size());
22  std::vector<CSCDetectorHit>::const_iterator wireHitI;
23  for (wireHitI = wireHits.begin(); wireHitI != wireHits.end(); ++wireHitI) {
24  int wire = (*wireHitI).getElement();
25  float wireCharge = (*wireHitI).getCharge();
26  float wireHitTime = (*wireHitI).getTime();
27  // The wire hit position is _along the wire_, measured from where
28  // the wire intersects local y axis, so convert to local x...
29  float hitX = (*wireHitI).getPosition() * cos(geom->wireAngle());
30  float hitY = geom->yOfWire(wire, hitX);
31  const LocalPoint wireHitPos(hitX, hitY);
32 
33  int centerStrip = geom->nearestStrip(wireHitPos);
34  int firstStrip = std::max(centerStrip - nNodes, 1);
35  int lastStrip = std::min(centerStrip + nNodes, geom->numberOfStrips());
36  for (int istrip = firstStrip; istrip <= lastStrip; istrip++) {
37  float offset = hitX - geom->xOfStrip(istrip, hitY);
38  float stripWidth = geom->stripPitch(wireHitPos);
39  float binValue = theGattiFunction.binValue(offset, stripWidth);
40  // we divide by 2 because charge goes on either cathode.
41  // if you're following the TDR, we already multiplied the
42  // charge by 0.82 in the WireHitSim (well, DriftSim), so that explains
43  // their f_ind=0.41.
44 
45  // this seems to be folded in the Amp response, which peaks
46  // around 0.14. The difference may be because the amp response
47  // convolutes in different drift times.
48  // float collectionFraction = 0.19;
49  const float igain = 1. / 0.9; // mv/fC
50  float stripCharge = wireCharge * binValue * igain * 0.5;
51  float stripTime = wireHitTime;
52  float position = hitY / sin(geom->stripAngle(istrip));
53  CSCDetectorHit newStripHit(istrip, stripCharge, position, stripTime, (*wireHitI).getSimHit());
54  newStripHits.push_back(newStripHit);
55  }
56  } // loop over wire hits
57  return newStripHits;
58 }

References CSCGattiFunction::binValue(), funct::cos(), relativeConstraints::geom, CSCGattiFunction::initChamberSpecs(), phase1PixelTopology::layer, SiStripPI::max, min(), newStripHits, CSCChamberSpecs::nNodes(), hltrates_dqm_sourceclient-live_cfg::offset, position, funct::sin(), and theGattiFunction.

Referenced by CSCDigitizer::doAction().

Member Data Documentation

◆ newStripHits

std::vector<CSCDetectorHit> CSCStripHitSim::newStripHits
private

Definition at line 28 of file CSCStripHitSim.h.

Referenced by simulate().

◆ theGattiFunction

CSCGattiFunction CSCStripHitSim::theGattiFunction
private

Definition at line 27 of file CSCStripHitSim.h.

Referenced by simulate().

CSCGattiFunction::binValue
double binValue(double x, double stripWidth) const
Definition: CSCGattiFunction.cc:30
min
T min(T a, T b)
Definition: MathUtil.h:58
CSCChamberSpecs
Definition: CSCChamberSpecs.h:39
CSCStripHitSim::newStripHits
std::vector< CSCDetectorHit > newStripHits
Definition: CSCStripHitSim.h:28
CSCDetectorHit
Definition: CSCDetectorHit.h:16
funct::sin
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
funct::cos
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
CSCLayerGeometry
Definition: CSCLayerGeometry.h:25
relativeConstraints.geom
geom
Definition: relativeConstraints.py:72
Point3DBase< float, LocalTag >
phase1PixelTopology::layer
constexpr std::array< uint8_t, layerIndexSize > layer
Definition: phase1PixelTopology.h:99
CSCChamberSpecs::nNodes
int nNodes() const
Definition: CSCChamberSpecs.h:113
CSCStripHitSim::theGattiFunction
CSCGattiFunction theGattiFunction
Definition: CSCStripHitSim.h:27
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
position
static int position[264][3]
Definition: ReadPGInfo.cc:289
CSCGattiFunction::initChamberSpecs
void initChamberSpecs(const CSCChamberSpecs &)
Calculates k1, k2, k3, h per chamber type, if necessary.
Definition: CSCGattiFunction.cc:11
hltrates_dqm_sourceclient-live_cfg.offset
offset
Definition: hltrates_dqm_sourceclient-live_cfg.py:82