CMS 3D CMS Logo

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

#include <FastSimulation/CTPPSRecHitProducer/plugins/CTPPSRecHitProducer.cc>

Inheritance diagram for CTPPSRecHitProducer:
edm::stream::EDProducer<>

Public Member Functions

 CTPPSRecHitProducer (const edm::ParameterSet &)
 
 ~CTPPSRecHitProducer () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Private Types

typedef std::vector< PSimHitPSimHitContainer
 

Private Member Functions

void beginStream (edm::StreamID) override
 
void endStream () override
 
void produce (edm::Event &, const edm::EventSetup &) override
 

Private Attributes

edm::EDGetTokenT
< CrossingFrame< PSimHit > > 
cf_token
 
double fBeamXRMS_ToF
 
double fBeamXRMS_Trk1
 
double fBeamXRMS_Trk2
 
double fHitSigmaX
 
double fHitSigmaY
 
double fHitSigmaZ
 
double fTimeSigma
 
double fToFCellHeight
 
std::vector< double > fToFCellWidth
 
double fToFInsertion
 
int fToFNCellX
 
int fToFNCellY
 
double fToFPitchX
 
double fToFPitchY
 
double fToFXOffset
 
double fTrackerHeight
 
double fTrackerInsertion
 
double fTrackerWidth
 
double fTrk1XOffset
 
double fTrk2XOffset
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
using CacheTypes = CacheContexts< T...>
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T...>
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 

Detailed Description

Description: [one line class summary]

Implementation: [Notes on implementation]

Definition at line 67 of file CTPPSRecHitProducer.cc.

Member Typedef Documentation

typedef std::vector<PSimHit> CTPPSRecHitProducer::PSimHitContainer
private

Definition at line 78 of file CTPPSRecHitProducer.cc.

Constructor & Destructor Documentation

CTPPSRecHitProducer::CTPPSRecHitProducer ( const edm::ParameterSet iConfig)
explicit

Definition at line 93 of file CTPPSRecHitProducer.cc.

References cf_token, Exception, fBeamXRMS_ToF, fBeamXRMS_Trk1, fBeamXRMS_Trk2, fHitSigmaX, fHitSigmaY, fHitSigmaZ, fTimeSigma, fToFCellHeight, fToFCellWidth, fToFInsertion, fToFNCellX, fToFNCellY, fToFPitchX, fToFPitchY, fToFXOffset, fTrackerHeight, fTrackerInsertion, fTrackerWidth, fTrk1XOffset, fTrk2XOffset, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), HLT_FULL_cff::InputTag, and AlCaHLTBitMon_QueryRunRegistry::string.

93  {
94  produces<edm::CTPPSFastRecHitContainer>("CTPPSFastRecHits");
95 
96  //Name of Collection use for create the XF
97  std::string mix_ = iConfig.getParameter<std::string>("mixLabel");
98  std::string collection_for_XF = iConfig.getParameter<std::string>("InputCollection");
99  cf_token = consumes<CrossingFrame<PSimHit> >(edm::InputTag(mix_, collection_for_XF));
100 
101  // Read the detector parameters
102  fTrackerWidth = iConfig.getParameter<double>("TrackerWidth");
103  fTrackerHeight = iConfig.getParameter<double>("TrackerHeight");
104  fTrackerInsertion = iConfig.getParameter<double>("TrackerInsertion");
105  fBeamXRMS_Trk1 = iConfig.getParameter<double>("BeamXRMS_Trk1");
106  fBeamXRMS_Trk2 = iConfig.getParameter<double>("BeamXRMS_Trk2");
107  fTrk1XOffset = iConfig.getParameter<double>("Trk1XOffset");
108  fTrk2XOffset = iConfig.getParameter<double>("Trk2XOffset");
109  fHitSigmaX = iConfig.getParameter<double>("HitSigmaX");
110  fHitSigmaY = iConfig.getParameter<double>("HitSigmaY");
111  fHitSigmaZ = iConfig.getParameter<double>("HitSigmaZ");
112  fToFCellWidth = iConfig.getUntrackedParameter<std::vector<double> >("ToFCellWidth");
113  fToFCellHeight = iConfig.getParameter<double>("ToFCellHeight");
114  fToFPitchX = iConfig.getParameter<double>("ToFPitchX");
115  fToFPitchY = iConfig.getParameter<double>("ToFPitchY");
116  fToFNCellX = iConfig.getParameter<int>("ToFNCellX");
117  fToFNCellY = iConfig.getParameter<int>("ToFNCellY");
118  fToFInsertion = iConfig.getParameter<double>("ToFInsertion");
119  fBeamXRMS_ToF = iConfig.getParameter<double>("BeamXRMS_ToF");
120  fToFXOffset = iConfig.getParameter<double>("ToFXOffset");
121  fTimeSigma = iConfig.getParameter<double>("TimeSigma");
122 
124  if (!rng.isAvailable()) {
125  throw cms::Exception("Configuration")
126  << "CTPPSRecHitProducer requires the RandomNumberGeneratorService\n"
127  "which is not present in the configuration file. You must add the service\n"
128  "in the configuration file or remove the modules that require it.";
129  }
130 }
T getUntrackedParameter(std::string const &, T const &) const
edm::EDGetTokenT< CrossingFrame< PSimHit > > cf_token
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
std::vector< double > fToFCellWidth
CTPPSRecHitProducer::~CTPPSRecHitProducer ( )
override

Definition at line 132 of file CTPPSRecHitProducer.cc.

132 {}

Member Function Documentation

void CTPPSRecHitProducer::beginStream ( edm::StreamID  )
overrideprivate

Definition at line 259 of file CTPPSRecHitProducer.cc.

259 {}
void CTPPSRecHitProducer::endStream ( )
overrideprivate

Definition at line 262 of file CTPPSRecHitProducer.cc.

262 {}
void CTPPSRecHitProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivate

Definition at line 134 of file CTPPSRecHitProducer.cc.

References cf_token, PSimHit::detUnitId(), PSimHit::entryPoint(), Exception, fBeamXRMS_ToF, fBeamXRMS_Trk1, fBeamXRMS_Trk2, fHitSigmaX, fHitSigmaY, CTPPSToFDetector::findCellId(), fTimeSigma, fToFCellHeight, fToFCellWidth, fToFInsertion, fToFNCellX, fToFNCellY, fToFPitchX, fToFPitchY, fToFXOffset, fTrackerHeight, fTrackerInsertion, fTrackerWidth, fTrk1XOffset, fTrk2XOffset, CTPPSToFDetector::get_CellCenter(), edm::Event::getByToken(), edm::RandomNumberGenerator::getEngine(), mps_fire::i, eostools::move(), dqmiodumpmetadata::n, edm::Event::put(), CTPPSFastRecHit::setCellId(), CTPPSFastRecHit::setDetUnitId(), CTPPSFastRecHit::setLocal3DPoint(), CTPPSFastRecHit::setTof(), trackerHits::simHits, edm::Event::streamID(), submitPVValidationJobs::t, PSimHit::tof(), um_to_mm, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

134  {
135  using namespace edm;
136 
138  CLHEP::HepRandomEngine* engine = &rng->getEngine(iEvent.streamID());
139  if (engine->name() != "TRandom3") {
140  throw cms::Exception("Configuration") << "The TRandom3 engine type must be used with CTPPSRecHitProducer, Random "
141  "Number Generator Service not correctly configured!";
142  }
143 
144  //Mix the PSimHits for pileup
146  iEvent.getByToken(cf_token, xFrame);
147 
148  std::unique_ptr<MixCollection<PSimHit> > simHits(new MixCollection<PSimHit>(xFrame.product()));
149 
150  std::vector<CTPPSFastRecHit> theCTPPSFastRecHit;
151 
152  for (MixCollection<PSimHit>::MixItr ihit = simHits->begin(); ihit != simHits->end(); ihit++)
153 
154  {
155  const PSimHit* simHit = &(*ihit);
156  unsigned int detlayerId = simHit->detUnitId();
157  // DetId layer codification for PSimHit
158  // 2014314496 -> Tracker1 zPositive
159  // 2014838784 -> Tracker2 zPositive
160  // 2046820352 -> Timing zPositive
161  // 2031091712 -> Tracker1 zNegative
162  // 2031616000 -> Tracker2 zNegative
163  // 2063597568 -> Timing zNegative
164  bool outside = false;
165 
166  //Make Tracker RecHits by smearing the SimHits positions and applying fiducial cuts
167  CTPPSFastRecHit rechit; // (const Local3DPoint& entry, unsigned int detId, float tof, unsigned int cellId)
168  if (detlayerId == 2014314496 || detlayerId == 2031091712) {
169  // Apply position smearing
170  float x_trk1 = simHit->entryPoint().x() + CLHEP::RandGauss::shoot(engine, 0, fHitSigmaX * um_to_mm);
171  float y_trk1 = simHit->entryPoint().y() + CLHEP::RandGauss::shoot(engine, 0, fHitSigmaY * um_to_mm);
172  float z_trk1 = simHit->entryPoint().z();
173 
174  // Apply fiducial cuts
175  double pos_trk1 = fTrackerInsertion * fBeamXRMS_Trk1 + fTrk1XOffset;
176  if (x_trk1 > 0 || fabs(x_trk1) < pos_trk1 || fabs(x_trk1) > (fTrackerWidth + pos_trk1) ||
177  fabs(y_trk1) > fTrackerHeight / 2.)
178  outside = true;
179 
180  float tof = 0.0;
181  unsigned int cellId = 1;
182  Local3DPoint xyzzy = Local3DPoint(x_trk1, y_trk1, z_trk1);
183  if (!outside) {
184  rechit.setLocal3DPoint(xyzzy);
185  rechit.setTof(tof);
186  rechit.setDetUnitId(detlayerId);
187  rechit.setCellId(cellId);
188  theCTPPSFastRecHit.push_back(rechit);
189  }
190  }
191  if (detlayerId == 2014838784 || detlayerId == 2031616000) {
192  // Apply position smearing
193  double x_trk2 = simHit->entryPoint().x() + CLHEP::RandGauss::shoot(engine, 0, fHitSigmaX * um_to_mm);
194  double y_trk2 = simHit->entryPoint().y() + CLHEP::RandGauss::shoot(engine, 0, fHitSigmaY * um_to_mm);
195  double z_trk2 = simHit->entryPoint().z();
196  // Apply fiducial cuts
197  double pos_trk2 = fTrackerInsertion * fBeamXRMS_Trk2 + fTrk2XOffset;
198  if (x_trk2 > 0 || fabs(x_trk2) < pos_trk2 || fabs(x_trk2) > (fTrackerWidth + pos_trk2) ||
199  fabs(y_trk2) > fTrackerHeight / 2.)
200  outside = true;
201 
202  float tof = 0.0;
203  unsigned int cellId = 2;
204  Local3DPoint xyzzy = Local3DPoint(x_trk2, y_trk2, z_trk2);
205  if (!outside) {
206  rechit.setLocal3DPoint(xyzzy);
207  rechit.setTof(tof);
208  rechit.setDetUnitId(detlayerId);
209  rechit.setCellId(cellId);
210  theCTPPSFastRecHit.push_back(rechit);
211  }
212  }
213  //Make Timing RecHits by smearing the SimHits time of flight and checking the cell of the hit
214  //The RecHit position is the centre of the cell
215  if (detlayerId == 2046820352 || detlayerId == 2063597568) {
216  float t = simHit->tof();
217  unsigned int cellId = 0;
218  float tof = CLHEP::RandGauss::shoot(engine, t, fTimeSigma);
219  double x_tof = simHit->entryPoint().x();
220  double y_tof = simHit->entryPoint().y();
221 
222  double pos_tof = fToFInsertion * fBeamXRMS_ToF + fToFXOffset;
223 
224  std::vector<double> vToFCellWidth;
225  vToFCellWidth.reserve(8);
226  for (int i = 0; i < 8; i++) {
227  vToFCellWidth.push_back(fToFCellWidth[i]);
228  }
229  CTPPSToFDetector* ToFDet = new CTPPSToFDetector(
230  fToFNCellX, fToFNCellY, vToFCellWidth, fToFCellHeight, fToFPitchX, fToFPitchY, pos_tof, fTimeSigma);
231  cellId = ToFDet->findCellId(x_tof, y_tof);
232  if (cellId > 0) {
233  double xc_tof = 0., yc_tof = 0.;
234  ToFDet->get_CellCenter(cellId, xc_tof, yc_tof);
235  Local3DPoint xyzzy = Local3DPoint(xc_tof, yc_tof, simHit->entryPoint().z());
236  rechit.setLocal3DPoint(xyzzy);
237  rechit.setTof(tof);
238  rechit.setDetUnitId(detlayerId);
239  rechit.setCellId(cellId);
240  theCTPPSFastRecHit.push_back(rechit);
241  }
242  }
243  }
244 
245  std::unique_ptr<CTPPSFastRecHitContainer> output_recHits(new edm::CTPPSFastRecHitContainer);
246  output_recHits->reserve(simHits->size());
247 
248  int n = 0;
249  for (std::vector<CTPPSFastRecHit>::const_iterator i = theCTPPSFastRecHit.begin(); i != theCTPPSFastRecHit.end();
250  i++) {
251  output_recHits->push_back(*i);
252  n += 1;
253  }
254 
255  iEvent.put(std::move(output_recHits), "CTPPSFastRecHits");
256 }
bool get_CellCenter(int cell_id, double &x, double &y)
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
float tof() const
deprecated name for timeOfFlight()
Definition: PSimHit.h:76
edm::EDGetTokenT< CrossingFrame< PSimHit > > cf_token
int findCellId(double x, double y)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
std::vector< CTPPSFastRecHit > CTPPSFastRecHitContainer
T y() const
Definition: PV3DBase.h:60
void setTof(float tof)
virtual CLHEP::HepRandomEngine & getEngine(StreamID const &)=0
Use this engine in event methods.
void setCellId(unsigned int cellId)
T z() const
Definition: PV3DBase.h:61
def move
Definition: eostools.py:511
void setDetUnitId(unsigned int detId)
static const double um_to_mm
tuple simHits
Definition: trackerHits.py:16
std::vector< double > fToFCellWidth
void setLocal3DPoint(const Local3DPoint &entry)
StreamID streamID() const
Definition: Event.h:98
T x() const
Definition: PV3DBase.h:59
Local3DPoint entryPoint() const
Entry point in the local Det frame.
Definition: PSimHit.h:43
unsigned int detUnitId() const
Definition: PSimHit.h:97
Point3DBase< float, LocalTag > Local3DPoint
Definition: LocalPoint.h:9

Member Data Documentation

edm::EDGetTokenT<CrossingFrame<PSimHit> > CTPPSRecHitProducer::cf_token
private

Definition at line 83 of file CTPPSRecHitProducer.cc.

Referenced by CTPPSRecHitProducer(), and produce().

double CTPPSRecHitProducer::fBeamXRMS_ToF
private

Definition at line 90 of file CTPPSRecHitProducer.cc.

Referenced by CTPPSRecHitProducer(), and produce().

double CTPPSRecHitProducer::fBeamXRMS_Trk1
private

Definition at line 85 of file CTPPSRecHitProducer.cc.

Referenced by CTPPSRecHitProducer(), and produce().

double CTPPSRecHitProducer::fBeamXRMS_Trk2
private

Definition at line 85 of file CTPPSRecHitProducer.cc.

Referenced by CTPPSRecHitProducer(), and produce().

double CTPPSRecHitProducer::fHitSigmaX
private

Definition at line 86 of file CTPPSRecHitProducer.cc.

Referenced by CTPPSRecHitProducer(), and produce().

double CTPPSRecHitProducer::fHitSigmaY
private

Definition at line 86 of file CTPPSRecHitProducer.cc.

Referenced by CTPPSRecHitProducer(), and produce().

double CTPPSRecHitProducer::fHitSigmaZ
private

Definition at line 86 of file CTPPSRecHitProducer.cc.

Referenced by CTPPSRecHitProducer().

double CTPPSRecHitProducer::fTimeSigma
private

Definition at line 90 of file CTPPSRecHitProducer.cc.

Referenced by CTPPSRecHitProducer(), and produce().

double CTPPSRecHitProducer::fToFCellHeight
private

Definition at line 88 of file CTPPSRecHitProducer.cc.

Referenced by CTPPSRecHitProducer(), and produce().

std::vector<double> CTPPSRecHitProducer::fToFCellWidth
private

Definition at line 87 of file CTPPSRecHitProducer.cc.

Referenced by CTPPSRecHitProducer(), and produce().

double CTPPSRecHitProducer::fToFInsertion
private

Definition at line 90 of file CTPPSRecHitProducer.cc.

Referenced by CTPPSRecHitProducer(), and produce().

int CTPPSRecHitProducer::fToFNCellX
private

Definition at line 89 of file CTPPSRecHitProducer.cc.

Referenced by CTPPSRecHitProducer(), and produce().

int CTPPSRecHitProducer::fToFNCellY
private

Definition at line 89 of file CTPPSRecHitProducer.cc.

Referenced by CTPPSRecHitProducer(), and produce().

double CTPPSRecHitProducer::fToFPitchX
private

Definition at line 88 of file CTPPSRecHitProducer.cc.

Referenced by CTPPSRecHitProducer(), and produce().

double CTPPSRecHitProducer::fToFPitchY
private

Definition at line 88 of file CTPPSRecHitProducer.cc.

Referenced by CTPPSRecHitProducer(), and produce().

double CTPPSRecHitProducer::fToFXOffset
private

Definition at line 90 of file CTPPSRecHitProducer.cc.

Referenced by CTPPSRecHitProducer(), and produce().

double CTPPSRecHitProducer::fTrackerHeight
private

Definition at line 85 of file CTPPSRecHitProducer.cc.

Referenced by CTPPSRecHitProducer(), and produce().

double CTPPSRecHitProducer::fTrackerInsertion
private

Definition at line 85 of file CTPPSRecHitProducer.cc.

Referenced by CTPPSRecHitProducer(), and produce().

double CTPPSRecHitProducer::fTrackerWidth
private

Definition at line 85 of file CTPPSRecHitProducer.cc.

Referenced by CTPPSRecHitProducer(), and produce().

double CTPPSRecHitProducer::fTrk1XOffset
private

Definition at line 85 of file CTPPSRecHitProducer.cc.

Referenced by CTPPSRecHitProducer(), and produce().

double CTPPSRecHitProducer::fTrk2XOffset
private

Definition at line 85 of file CTPPSRecHitProducer.cc.

Referenced by CTPPSRecHitProducer(), and produce().