CMS 3D CMS Logo

List of all members | Public Member Functions | Private Attributes
RPCSynchronizer Class Reference

#include <RPCSynchronizer.h>

Public Member Functions

double getExactTime () const
 
RPCSimSetUpgetRPCSimSetUp ()
 
int getSimHitBx (const PSimHit *, CLHEP::HepRandomEngine *)
 
int getSimHitBxAndTimingForIRPC (const PSimHit *, CLHEP::HepRandomEngine *)
 
double getSmearedTime () const
 
 RPCSynchronizer (const edm::ParameterSet &config)
 
void setRPCSimSetUp (RPCSimSetUp *simsetup)
 
 ~RPCSynchronizer ()
 

Private Attributes

double cosmicPar
 
bool cosmics
 
double cspeed
 
double dtimCs
 
double irpc_electronics_jitter
 
double irpc_timing_res
 
double lbGate
 
double lbGateNew
 
double LHCGate
 
int N_BX
 
double resEle
 
double resRPC
 
double sspeed
 
double the_exact_time
 
double the_smeared_time
 
RPCSimSetUptheSimSetUp
 
double timOff
 

Detailed Description

Class for the RPC strip response simulation based on a parametrized model (ORCA-based)

Author
Raffaello Trentadue – INFN Bari

Definition at line 36 of file RPCSynchronizer.h.

Constructor & Destructor Documentation

◆ RPCSynchronizer()

RPCSynchronizer::RPCSynchronizer ( const edm::ParameterSet config)

Definition at line 34 of file RPCSynchronizer.cc.

34  {
35  resRPC = config.getParameter<double>("timeResolution");
36  timOff = config.getParameter<double>("timingRPCOffset");
37  dtimCs = config.getParameter<double>("deltatimeAdjacentStrip");
38  resEle = config.getParameter<double>("timeJitter");
39  sspeed = config.getParameter<double>("signalPropagationSpeed");
40  lbGate = config.getParameter<double>("linkGateWidth");
41  LHCGate = config.getParameter<double>("Gate");
42  cosmics = config.getParameter<bool>("cosmics");
43  irpc_timing_res = config.getParameter<double>("IRPC_time_resolution");
44  irpc_electronics_jitter = config.getParameter<double>("IRPC_electronics_jitter");
45  N_BX = config.getParameter<int>("BX_range");
46  //"magic" parameter for cosmics
47  cosmicPar = 37.62;
48 
49  double c = 299792458; // [m/s]
50  //light speed in [cm/ns]
51  cspeed = c * 1e+2 * 1e-9;
52  //signal propagation speed [cm/ns]
53  sspeed = sspeed * cspeed;
54 }

References HltBtagPostValidation_cff::c, GlobalTrackerMuonAlignment_cfi::cosmics, MillePedeFileConverter_cfg::e, and lumi::N_BX.

◆ ~RPCSynchronizer()

RPCSynchronizer::~RPCSynchronizer ( )

Definition at line 56 of file RPCSynchronizer.cc.

56 {}

Member Function Documentation

◆ getExactTime()

double RPCSynchronizer::getExactTime ( ) const
inline

Definition at line 45 of file RPCSynchronizer.h.

45 { return the_exact_time; }

References the_exact_time.

◆ getRPCSimSetUp()

RPCSimSetUp* RPCSynchronizer::getRPCSimSetUp ( )
inline

Definition at line 44 of file RPCSynchronizer.h.

44 { return theSimSetUp; }

References theSimSetUp.

◆ getSimHitBx()

int RPCSynchronizer::getSimHitBx ( const PSimHit simhit,
CLHEP::HepRandomEngine *  engine 
)

Definition at line 58 of file RPCSynchronizer.cc.

58  {
59  RPCSimSetUp* simsetup = this->getRPCSimSetUp();
60  const RPCGeometry* geometry = simsetup->getGeometry();
61  float timeref = simsetup->getTime(simhit->detUnitId());
62 
63  int bx = -999;
64  LocalPoint simHitPos = simhit->localPosition();
65  float tof = simhit->timeOfFlight();
66 
67  //automatic variable to prevent memory leak
68 
69  float rr_el = CLHEP::RandGaussQ::shoot(engine, 0., resEle);
70 
71  RPCDetId SimDetId(simhit->detUnitId());
72 
73  const RPCRoll* SimRoll = nullptr;
74 
75  for (TrackingGeometry::DetContainer::const_iterator it = geometry->dets().begin(); it != geometry->dets().end();
76  it++) {
77  if (dynamic_cast<const RPCChamber*>(*it) != nullptr) {
78  auto ch = dynamic_cast<const RPCChamber*>(*it);
79 
80  std::vector<const RPCRoll*> rollsRaf = (ch->rolls());
81  for (std::vector<const RPCRoll*>::iterator r = rollsRaf.begin(); r != rollsRaf.end(); ++r) {
82  if ((*r)->id() == SimDetId) {
83  SimRoll = &(*(*r));
84  break;
85  }
86  }
87  }
88  }
89 
90  if (SimRoll != nullptr) {
91  float distanceFromEdge = 0;
92  float half_stripL = 0.;
93 
94  if (SimRoll->id().region() == 0) {
95  const RectangularStripTopology* top_ = dynamic_cast<const RectangularStripTopology*>(&(SimRoll->topology()));
96  half_stripL = top_->stripLength() / 2;
97  distanceFromEdge = half_stripL + simHitPos.y();
98  } else {
99  const TrapezoidalStripTopology* top_ = dynamic_cast<const TrapezoidalStripTopology*>(&(SimRoll->topology()));
100  half_stripL = top_->stripLength() / 2;
101  distanceFromEdge = half_stripL - simHitPos.y();
102  }
103 
104  float prop_time = distanceFromEdge / sspeed;
105 
106  double rr_tim1 = CLHEP::RandGaussQ::shoot(engine, 0., resRPC);
107  double total_time = tof + prop_time + timOff + rr_tim1 + rr_el;
108 
109  // Bunch crossing assignment
110  double time_differ = 0.;
111 
112  if (cosmics) {
113  time_differ = (total_time - (timeref + ((half_stripL / sspeed) + timOff))) / cosmicPar;
114  } else if (!cosmics) {
115  time_differ = total_time - (timeref + (half_stripL / sspeed) + timOff);
116  }
117 
118  double inf_time = 0;
119  double sup_time = 0;
120 
121  for (int n = -N_BX; n <= N_BX; ++n) {
122  if (cosmics) {
123  inf_time = (-lbGate / 2 + n * LHCGate) / cosmicPar;
124  sup_time = (lbGate / 2 + n * LHCGate) / cosmicPar;
125  } else if (!cosmics) {
126  inf_time = -lbGate / 2 + n * LHCGate;
127  sup_time = lbGate / 2 + n * LHCGate;
128  }
129 
130  if (inf_time < time_differ && time_differ < sup_time) {
131  bx = n;
132  break;
133  }
134  }
135  }
136 
137  return bx;
138 }

References l1GtPatternGenerator_cfi::bx, GlobalTrackerMuonAlignment_cfi::cosmics, PSimHit::detUnitId(), RPCSimSetUp::getGeometry(), RPCSimSetUp::getTime(), PSimHit::localPosition(), dqmiodumpmetadata::n, lumi::N_BX, alignCSCRings::r, RectangularStripTopology::stripLength(), TrapezoidalStripTopology::stripLength(), PSimHit::timeOfFlight(), and PV3DBase< T, PVType, FrameType >::y().

Referenced by RPCSimSimple::simulate(), RPCSimParam::simulate(), RPCSimAverageNoise::simulate(), RPCSimAverage::simulate(), RPCSimAverageNoiseEff::simulate(), RPCSimAverageNoiseEffCls::simulate(), and RPCSimAsymmetricCls::simulate().

◆ getSimHitBxAndTimingForIRPC()

int RPCSynchronizer::getSimHitBxAndTimingForIRPC ( const PSimHit simhit,
CLHEP::HepRandomEngine *  engine 
)

Definition at line 140 of file RPCSynchronizer.cc.

140  {
141  RPCSimSetUp* simsetup = this->getRPCSimSetUp();
142  const RPCGeometry* geometry = simsetup->getGeometry();
143  float timeref = simsetup->getTime(simhit->detUnitId());
144 
145  int bx = -999;
146  LocalPoint simHitPos = simhit->localPosition();
147  float tof = simhit->timeOfFlight();
148 
149  //automatic variable to prevent memory leak
150 
151  // float rr_el = CLHEP::RandGaussQ::shoot(engine, 0.,resEle);
152  float rr_el = CLHEP::RandGaussQ::shoot(engine, 0., irpc_electronics_jitter);
153 
154  RPCDetId SimDetId(simhit->detUnitId());
155 
156  const RPCRoll* SimRoll = nullptr;
157 
158  for (TrackingGeometry::DetContainer::const_iterator it = geometry->dets().begin(); it != geometry->dets().end();
159  it++) {
160  if (dynamic_cast<const RPCChamber*>(*it) != nullptr) {
161  auto ch = dynamic_cast<const RPCChamber*>(*it);
162 
163  std::vector<const RPCRoll*> rollsRaf = (ch->rolls());
164  for (std::vector<const RPCRoll*>::iterator r = rollsRaf.begin(); r != rollsRaf.end(); ++r) {
165  if ((*r)->id() == SimDetId) {
166  SimRoll = &(*(*r));
167  break;
168  }
169  }
170  }
171  }
172 
173  if (SimRoll != nullptr) {
174  float distanceFromEdge = 0;
175  float half_stripL = 0.;
176 
177  if (SimRoll->id().region() == 0) {
178  const RectangularStripTopology* top_ = dynamic_cast<const RectangularStripTopology*>(&(SimRoll->topology()));
179  half_stripL = top_->stripLength() / 2;
180  distanceFromEdge = half_stripL + simHitPos.y();
181  } else {
182  const TrapezoidalStripTopology* top_ = dynamic_cast<const TrapezoidalStripTopology*>(&(SimRoll->topology()));
183  half_stripL = top_->stripLength() / 2;
184  distanceFromEdge = half_stripL - simHitPos.y();
185  }
186 
187  float prop_time = distanceFromEdge / sspeed;
188 
189  // double rr_tim1 = CLHEP::RandGaussQ::shoot(engine, 0.,resRPC);
190  double rr_tim1 = CLHEP::RandGaussQ::shoot(engine, 0., irpc_timing_res);
191 
192  double total_time = tof + prop_time + timOff + rr_tim1 + rr_el;
193 
194  // Bunch crossing assignment
195  double time_differ = 0.;
196 
197  if (cosmics) {
198  time_differ = (total_time - (timeref + ((half_stripL / sspeed) + timOff))) / cosmicPar;
199  } else if (!cosmics) {
200  time_differ = total_time - (timeref + (half_stripL / sspeed) + timOff);
201  }
202 
203  double exact_total_time = tof + prop_time + timOff;
204  double exact_time_differ = 0.;
205 
206  if (cosmics) {
207  exact_time_differ = (exact_total_time - (timeref + ((half_stripL / sspeed) + timOff))) / cosmicPar;
208  } else if (!cosmics) {
209  exact_time_differ = exact_total_time - (timeref + (half_stripL / sspeed) + timOff);
210  }
211 
212  double inf_time = 0;
213  double sup_time = 0;
214 
215  for (int n = -N_BX; n <= N_BX; ++n) {
216  if (cosmics) {
217  inf_time = (-lbGate / 2 + n * LHCGate) / cosmicPar;
218  sup_time = (lbGate / 2 + n * LHCGate) / cosmicPar;
219  } else if (!cosmics) {
220  inf_time = -lbGate / 2 + n * LHCGate;
221  sup_time = lbGate / 2 + n * LHCGate;
222  }
223 
224  if (inf_time < time_differ && time_differ < sup_time) {
225  bx = n;
226  the_exact_time = exact_time_differ;
227  the_smeared_time = time_differ;
228 
229  //cout<<"Debug\t"<<inf_time<<'\t'<<sup_time<<endl;
231  // cout<<"Bingo\t"<<time_differ<<'\t'<<bx<<'\t'<<exact_time_differ<<'\t'<<exact_time_differ-time_differ<<'\t'<<exact_time_differ-bx*25.<<endl;
232  break;
233  }
234  }
235  }
236  return bx;
237 }

References l1GtPatternGenerator_cfi::bx, GlobalTrackerMuonAlignment_cfi::cosmics, PSimHit::detUnitId(), RPCSimSetUp::getGeometry(), RPCSimSetUp::getTime(), PSimHit::localPosition(), dqmiodumpmetadata::n, lumi::N_BX, alignCSCRings::r, RectangularStripTopology::stripLength(), TrapezoidalStripTopology::stripLength(), PSimHit::timeOfFlight(), and PV3DBase< T, PVType, FrameType >::y().

Referenced by RPCSimModelTiming::simulate().

◆ getSmearedTime()

double RPCSynchronizer::getSmearedTime ( ) const
inline

Definition at line 46 of file RPCSynchronizer.h.

46 { return the_smeared_time; }

References the_smeared_time.

Referenced by RPCSimModelTiming::simulate().

◆ setRPCSimSetUp()

void RPCSynchronizer::setRPCSimSetUp ( RPCSimSetUp simsetup)
inline

Member Data Documentation

◆ cosmicPar

double RPCSynchronizer::cosmicPar
private

Definition at line 57 of file RPCSynchronizer.h.

◆ cosmics

bool RPCSynchronizer::cosmics
private

Definition at line 59 of file RPCSynchronizer.h.

◆ cspeed

double RPCSynchronizer::cspeed
private

Definition at line 54 of file RPCSynchronizer.h.

◆ dtimCs

double RPCSynchronizer::dtimCs
private

Definition at line 51 of file RPCSynchronizer.h.

◆ irpc_electronics_jitter

double RPCSynchronizer::irpc_electronics_jitter
private

Definition at line 61 of file RPCSynchronizer.h.

◆ irpc_timing_res

double RPCSynchronizer::irpc_timing_res
private

Definition at line 60 of file RPCSynchronizer.h.

◆ lbGate

double RPCSynchronizer::lbGate
private

Definition at line 55 of file RPCSynchronizer.h.

◆ lbGateNew

double RPCSynchronizer::lbGateNew
private

Definition at line 56 of file RPCSynchronizer.h.

◆ LHCGate

double RPCSynchronizer::LHCGate
private

Definition at line 58 of file RPCSynchronizer.h.

◆ N_BX

int RPCSynchronizer::N_BX
private

Definition at line 65 of file RPCSynchronizer.h.

◆ resEle

double RPCSynchronizer::resEle
private

Definition at line 52 of file RPCSynchronizer.h.

◆ resRPC

double RPCSynchronizer::resRPC
private

Definition at line 49 of file RPCSynchronizer.h.

◆ sspeed

double RPCSynchronizer::sspeed
private

Definition at line 53 of file RPCSynchronizer.h.

◆ the_exact_time

double RPCSynchronizer::the_exact_time
private

Definition at line 62 of file RPCSynchronizer.h.

Referenced by getExactTime().

◆ the_smeared_time

double RPCSynchronizer::the_smeared_time
private

Definition at line 63 of file RPCSynchronizer.h.

Referenced by getSmearedTime().

◆ theSimSetUp

RPCSimSetUp* RPCSynchronizer::theSimSetUp
private

Definition at line 64 of file RPCSynchronizer.h.

Referenced by getRPCSimSetUp(), and setRPCSimSetUp().

◆ timOff

double RPCSynchronizer::timOff
private

Definition at line 50 of file RPCSynchronizer.h.

RPCSimSetUp::getTime
float getTime(uint32_t id)
Definition: RPCSimSetUp.cc:403
RPCRoll
Definition: RPCRoll.h:12
PSimHit::timeOfFlight
float timeOfFlight() const
Definition: PSimHit.h:73
TrapezoidalStripTopology::stripLength
float stripLength() const override
det heigth (strip length in the middle)
Definition: TrapezoidalStripTopology.h:63
RPCSynchronizer::cosmicPar
double cosmicPar
Definition: RPCSynchronizer.h:57
dqmiodumpmetadata.n
n
Definition: dqmiodumpmetadata.py:28
RPCSynchronizer::resRPC
double resRPC
Definition: RPCSynchronizer.h:49
RPCSynchronizer::cspeed
double cspeed
Definition: RPCSynchronizer.h:54
RPCSynchronizer::cosmics
bool cosmics
Definition: RPCSynchronizer.h:59
RPCSynchronizer::irpc_timing_res
double irpc_timing_res
Definition: RPCSynchronizer.h:60
RPCDetId
Definition: RPCDetId.h:16
geometry
Definition: geometry.py:1
l1GtPatternGenerator_cfi.bx
bx
Definition: l1GtPatternGenerator_cfi.py:18
RPCSimSetUp::getGeometry
const RPCGeometry * getGeometry()
Definition: RPCSimSetUp.h:49
RPCSynchronizer::getRPCSimSetUp
RPCSimSetUp * getRPCSimSetUp()
Definition: RPCSynchronizer.h:44
RPCSynchronizer::the_smeared_time
double the_smeared_time
Definition: RPCSynchronizer.h:63
PSimHit::detUnitId
unsigned int detUnitId() const
Definition: PSimHit.h:97
config
Definition: config.py:1
RPCSynchronizer::LHCGate
double LHCGate
Definition: RPCSynchronizer.h:58
RectangularStripTopology
Definition: RectangularStripTopology.h:11
TrapezoidalStripTopology
Definition: TrapezoidalStripTopology.h:21
PSimHit::localPosition
Local3DPoint localPosition() const
Definition: PSimHit.h:52
RPCSynchronizer::theSimSetUp
RPCSimSetUp * theSimSetUp
Definition: RPCSynchronizer.h:64
Point3DBase< float, LocalTag >
RectangularStripTopology::stripLength
float stripLength() const override
Definition: RectangularStripTopology.h:44
RPCSynchronizer::irpc_electronics_jitter
double irpc_electronics_jitter
Definition: RPCSynchronizer.h:61
RPCSynchronizer::sspeed
double sspeed
Definition: RPCSynchronizer.h:53
RPCSynchronizer::lbGate
double lbGate
Definition: RPCSynchronizer.h:55
PV3DBase::y
T y() const
Definition: PV3DBase.h:60
RPCSynchronizer::resEle
double resEle
Definition: RPCSynchronizer.h:52
HltBtagPostValidation_cff.c
c
Definition: HltBtagPostValidation_cff.py:31
alignCSCRings.r
r
Definition: alignCSCRings.py:93
RPCSynchronizer::N_BX
int N_BX
Definition: RPCSynchronizer.h:65
RPCSynchronizer::the_exact_time
double the_exact_time
Definition: RPCSynchronizer.h:62
RPCGeometry
Definition: RPCGeometry.h:20
RPCSimSetUp
Definition: RPCSimSetUp.h:28
RPCSynchronizer::dtimCs
double dtimCs
Definition: RPCSynchronizer.h:51
RPCSynchronizer::timOff
double timOff
Definition: RPCSynchronizer.h:50
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37