CMS 3D CMS Logo

CTPPSDiamondRecHitProducerAlgorithm.cc
Go to the documentation of this file.
1 /****************************************************************************
2 *
3 * This is a part of PPS offline software.
4 * Authors:
5 * Laurent Forthomme (laurent.forthomme@cern.ch)
6 *
7 ****************************************************************************/
8 
9 #include <memory>
10 
13 
14 //----------------------------------------------------------------------------------------------------
15 
17  : ts_to_ns_(iConfig.getParameter<double>("timeSliceNs")),
18  apply_calib_(iConfig.getParameter<bool>("applyCalibration")) {}
19 
21  calib_ = calib;
22  calib_fct_ = std::make_unique<reco::FormulaEvaluator>(calib_.formula());
23 }
24 
28  for (const auto& vec : input) {
29  const CTPPSDiamondDetId detid(vec.detId());
30 
31  if (detid.channel() > MAX_CHANNEL) // VFAT-like information, to be ignored
32  continue;
33 
34  // retrieve the geometry element associated to this DetID
35  const DetGeomDesc* det = geom.sensor(detid);
36 
37  const float x_pos = det->translation().x(), y_pos = det->translation().y();
38  float z_pos = 0.;
39  z_pos = det->parentZPosition(); // retrieve the plane position;
40 
41  // parameters stand for half the size
42  const auto& diamondDimensions = det->getDiamondDimensions();
43  const float x_width = 2.0 * diamondDimensions.xHalfWidth;
44  const float y_width = 2.0 * diamondDimensions.yHalfWidth;
45  const float z_width = 2.0 * diamondDimensions.zHalfWidth;
46 
47  // retrieve the timing calibration part for this channel
48  const int sector = detid.arm(), station = detid.station(), plane = detid.plane(), channel = detid.channel();
49  const auto& ch_params = (apply_calib_) ? calib_.parameters(sector, station, plane, channel) : std::vector<double>{};
50  // default values for offset + time precision if calibration object not found
51  const double ch_t_offset = (apply_calib_) ? calib_.timeOffset(sector, station, plane, channel) : 0.;
52  const double ch_t_precis = (apply_calib_) ? calib_.timePrecision(sector, station, plane, channel) : 0.;
53 
54  edm::DetSet<CTPPSDiamondRecHit>& rec_hits = output.find_or_insert(detid);
55 
56  for (const auto& digi : vec) {
57  const int t_lead = digi.leadingEdge(), t_trail = digi.trailingEdge();
58  // skip invalid digis
59  if (t_lead == 0 && t_trail == 0)
60  continue;
61 
62  double tot = -1., ch_t_twc = 0.;
63  if (t_lead != 0 && t_trail != 0) {
64  tot = (t_trail - t_lead) * ts_to_ns_; // in ns
65  if (calib_fct_ && apply_calib_) {
66  // compute the time-walk correction
67  ch_t_twc = calib_fct_->evaluate(std::vector<double>{tot}, ch_params);
68  if (edm::isNotFinite(ch_t_twc))
69  ch_t_twc = 0.;
70  }
71  }
72 
73  const int time_slice =
74  (t_lead != 0) ? (t_lead - ch_t_offset / ts_to_ns_) / 1024 : CTPPSDiamondRecHit::TIMESLICE_WITHOUT_LEADING;
75 
76  // calibrated time of arrival
77  const double t0 = (t_lead % 1024) * ts_to_ns_ - ch_t_twc;
78 
79  rec_hits.emplace_back(
80  // spatial information
81  x_pos,
82  x_width,
83  y_pos,
84  y_width,
85  z_pos,
86  z_width,
87  // timing information
88  t0,
89  tot,
90  ch_t_precis,
91  time_slice,
92  // readout information
93  digi.hptdcErrorFlags(),
94  digi.multipleHit());
95  }
96  }
97 }
CTPPSDiamondRecHitProducerAlgorithm::calib_
PPSTimingCalibration calib_
Definition: CTPPSDiamondRecHitProducerAlgorithm.h:43
edm::DetSetVector
Definition: DetSetVector.h:61
electrons_cff.bool
bool
Definition: electrons_cff.py:393
input
static const std::string input
Definition: EdmProvDump.cc:48
CTPPSGeometry
The manager class for TOTEM RP geometry.
Definition: CTPPSGeometry.h:29
DetGeomDesc::translation
const Translation & translation() const
Definition: DetGeomDesc.h:73
edm::isNotFinite
constexpr bool isNotFinite(T x)
Definition: isFinite.h:9
edm::DetSet
Definition: DetSet.h:23
convertSQLitetoXML_cfg.output
output
Definition: convertSQLitetoXML_cfg.py:72
relativeConstraints.station
station
Definition: relativeConstraints.py:67
CTPPSDiamondRecHitProducerAlgorithm::build
void build(const CTPPSGeometry &, const edm::DetSetVector< CTPPSDiamondDigi > &, edm::DetSetVector< CTPPSDiamondRecHit > &)
Definition: CTPPSDiamondRecHitProducerAlgorithm.cc:24
DetGeomDesc::parentZPosition
float parentZPosition() const
Definition: DetGeomDesc.h:98
PPSTimingCalibration::formula
const std::string & formula() const
Definition: PPSTimingCalibration.h:46
CTPPSDiamondRecHitProducerAlgorithm::ts_to_ns_
double ts_to_ns_
Conversion constant between HPTDC time slice and absolute time (in ns)
Definition: CTPPSDiamondRecHitProducerAlgorithm.h:40
CTPPSDiamondRecHitProducerAlgorithm::apply_calib_
bool apply_calib_
Switch on/off the timing calibration.
Definition: CTPPSDiamondRecHitProducerAlgorithm.h:42
CTPPSDiamondRecHitProducerAlgorithm::MAX_CHANNEL
static constexpr unsigned short MAX_CHANNEL
Definition: CTPPSDiamondRecHitProducerAlgorithm.h:38
PPSTimingCalibration::timeOffset
double timeOffset(int key1, int key2, int key3, int key4=-1) const
Definition: PPSTimingCalibration.cc:40
FrontierCondition_GT_autoExpress_cfi.t0
t0
Definition: FrontierCondition_GT_autoExpress_cfi.py:148
CTPPSDiamondRecHitProducerAlgorithm.h
DetGeomDesc::getDiamondDimensions
const DiamondDimensions & getDiamondDimensions() const
Definition: DetGeomDesc.h:82
PPSTimingCalibration::timePrecision
double timePrecision(int key1, int key2, int key3, int key4=-1) const
Definition: PPSTimingCalibration.cc:48
relativeConstraints.geom
geom
Definition: relativeConstraints.py:72
DiamondDimensions::xHalfWidth
double xHalfWidth
Definition: DetGeomDesc.h:44
calib
Definition: CalibElectron.h:12
PPSTimingCalibration::parameters
std::vector< double > parameters(int key1, int key2, int key3, int key4) const
Definition: PPSTimingCalibration.cc:32
CTPPSDiamondDetId
Detector ID class for CTPPS Timing Diamond detectors. Bits [19:31] : Assigend in CTPPSDetId Calss Bit...
Definition: CTPPSDiamondDetId.h:24
edm::ParameterSet
Definition: ParameterSet.h:47
CTPPSDiamondRecHitProducerAlgorithm::setCalibration
void setCalibration(const PPSTimingCalibration &)
Definition: CTPPSDiamondRecHitProducerAlgorithm.cc:19
edm::DetSet::emplace_back
decltype(auto) emplace_back(Args &&... args)
Definition: DetSet.h:68
CTPPSDiamondRecHit::TIMESLICE_WITHOUT_LEADING
static constexpr int TIMESLICE_WITHOUT_LEADING
Definition: CTPPSDiamondRecHit.h:44
DetGeomDesc
Definition: DetGeomDesc.h:49
CTPPSDiamondRecHitProducerAlgorithm::CTPPSDiamondRecHitProducerAlgorithm
CTPPSDiamondRecHitProducerAlgorithm(const edm::ParameterSet &conf)
Definition: CTPPSDiamondRecHitProducerAlgorithm.cc:15
L1EGammaCrystalsEmulatorProducer_cfi.calib
calib
Definition: L1EGammaCrystalsEmulatorProducer_cfi.py:6
CTPPSDiamondRecHitProducerAlgorithm::calib_fct_
std::unique_ptr< reco::FormulaEvaluator > calib_fct_
Definition: CTPPSDiamondRecHitProducerAlgorithm.h:44
isFinite.h
PPSTimingCalibration
Definition: PPSTimingCalibration.h:17