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 
11 
12 //----------------------------------------------------------------------------------------------------
13 
15  ts_to_ns_( iConfig.getParameter<double>( "timeSliceNs" ) )
16 {}
17 
18 void
20 {
21  calib_ = calib;
23 }
24 
25 void
29 {
30  for ( const auto& vec : input ) {
31  const CTPPSDiamondDetId detid( vec.detId() );
32 
33  if ( detid.channel() > MAX_CHANNEL ) // VFAT-like information, to be ignored
34  continue;
35 
36  // retrieve the geometry element associated to this DetID
37  const DetGeomDesc* det = geom.getSensor( detid );
38 
39  const float x_pos = det->translation().x(),
40  y_pos = det->translation().y();
41  float z_pos = 0.;
42  z_pos = det->parentZPosition(); // retrieve the plane position;
43 
44  const float x_width = 2.0 * det->params().at( 0 ), // parameters stand for half the size
45  y_width = 2.0 * det->params().at( 1 ),
46  z_width = 2.0 * det->params().at( 2 );
47 
48  // retrieve the timing calibration part for this channel
49  const int sector = detid.arm(), station = detid.station(), plane = detid.plane(), channel = detid.channel();
50  const auto& ch_params = calib_.parameters( sector, station, plane, channel );
51  // offset + time precision set to 0 if not found
52  const double ch_t_offset = calib_.timeOffset( sector, station, plane, channel );
53  const double ch_t_precis = calib_.timePrecision( sector, station, plane, channel );
54 
55  edm::DetSet<CTPPSDiamondRecHit>& rec_hits = output.find_or_insert( detid );
56 
57  for ( const auto& digi : vec ) {
58  const int t_lead = digi.getLeadingEdge(), t_trail = digi.getTrailingEdge();
59  // skip invalid digis
60  if ( t_lead == 0 && t_trail == 0 )
61  continue;
62 
63  double tot = -1., ch_t_twc = 0.;
64  if ( t_lead != 0 && t_trail != 0 ) {
65  tot = ( t_trail-t_lead )*ts_to_ns_; // in ns
66  if ( calib_fct_ ) {
67  // compute the time-walk correction
68  ch_t_twc = calib_fct_->evaluate( std::vector<double>{ tot }, ch_params );
69  if ( edm::isNotFinite( ch_t_twc ) )
70  ch_t_twc = 0.;
71  }
72  }
73 
74  const int time_slice = ( t_lead != 0 )
75  ? ( t_lead-ch_t_offset/ts_to_ns_ ) / 1024
77 
78  // calibrated time of arrival
79  const double t0 = ( t_lead % 1024 )*ts_to_ns_-ch_t_twc;
80 
81  rec_hits.emplace_back(
82  // spatial information
83  x_pos, x_width, y_pos, y_width, z_pos, z_width,
84  // timing information
85  t0, tot, ch_t_precis, time_slice,
86  // readout information
87  digi.getHPTDCErrorFlags(),
88  digi.getMultipleHit()
89  );
90  }
91  }
92 }
93 
Translation translation() const
Definition: DetGeomDesc.h:66
void build(const CTPPSGeometry &, const edm::DetSetVector< CTPPSDiamondDigi > &, edm::DetSetVector< CTPPSDiamondRecHit > &)
constexpr bool isNotFinite(T x)
Definition: isFinite.h:9
const std::string & formula() const
double timeOffset(int key1, int key2, int key3, int key4=-1) const
static std::string const input
Definition: EdmProvDump.cc:48
reference find_or_insert(det_id_type id)
Definition: DetSetVector.h:254
std::vector< double > parameters(int key1, int key2, int key3, int key4) const
const DetGeomDesc * getSensor(unsigned int id) const
returns geometry of a detector performs necessary checks, returns NULL if fails
MVATrainerComputer * calib
Definition: MVATrainer.cc:64
decltype(auto) emplace_back(Args &&...args)
Definition: DetSet.h:70
double ts_to_ns_
Conversion constant between HPTDC time slice and absolute time (in ns)
Geometrical description of a sensor.
Definition: DetGeomDesc.h:35
The manager class for TOTEM RP geometry.
Definition: CTPPSGeometry.h:33
std::unique_ptr< reco::FormulaEvaluator > calib_fct_
float parentZPosition() const
Definition: DetGeomDesc.h:58
static constexpr int TIMESLICE_WITHOUT_LEADING
std::vector< double > params() const
Definition: DetGeomDesc.h:68
CTPPSDiamondRecHitProducerAlgorithm(const edm::ParameterSet &conf)
Detector ID class for CTPPS Timing Diamond detectors. Bits [19:31] : Assigend in CTPPSDetId Calss Bit...
double timePrecision(int key1, int key2, int key3, int key4=-1) const