CMS 3D CMS Logo

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

#include <DTTTrigSyncFromDB.h>

Inheritance diagram for DTTTrigSyncFromDB:
DTTTrigBaseSync

Public Member Functions

 DTTTrigSyncFromDB (const edm::ParameterSet &config)
 Constructor. More...
 
double emulatorOffset (const DTWireId &wireId, double &tTrig, double &t0cell) const override
 
double offset (const DTLayer *layer, const DTWireId &wireId, const GlobalPoint &globPos, double &tTrig, double &wirePropCorr, double &tofCorr) const override
 
double offset (const DTWireId &wireId) const override
 
void setES (const edm::EventSetup &setup) override
 Pass the Event Setup to the algo at each event. More...
 
 ~DTTTrigSyncFromDB () override
 Destructor. More...
 
- Public Member Functions inherited from DTTTrigBaseSync
 DTTTrigBaseSync ()
 Constructor. More...
 
virtual double emulatorOffset (const DTWireId &wireId) const
 
double offset (const DTLayer *layer, const DTWireId &wireId, const GlobalPoint &globalPos) const
 
virtual ~DTTTrigBaseSync ()
 Destructor. More...
 

Private Attributes

const bool debug
 
bool doT0Correction
 
bool doTOFCorrection
 
bool doWirePropCorrection
 
double theBXspace
 
int theTOFCorrType
 
std::string thetTrigLabel
 
double theVPropWire
 
int theWirePropCorrType
 
const DTTtrigtTrigMap
 
const DTT0tZeroMap
 

Detailed Description

Concrete implementation of a DTTTrigBaseSync. This class define the offset for RecHit building of data and simulation. The offset is computes as:
offset = t0 + tTrig + wirePropCorr - tofCorr
where:

The emulatorOffset is computed as:
offset = int(ttrig/BXspace)*BXspace + t0
where:

NOTE: this should approximate what is seen online by the BTI

Author
G. Cerminara - INFN Torino

Definition at line 52 of file DTTTrigSyncFromDB.h.

Constructor & Destructor Documentation

◆ DTTTrigSyncFromDB()

DTTTrigSyncFromDB::DTTTrigSyncFromDB ( const edm::ParameterSet config)

Constructor.

Definition at line 25 of file DTTTrigSyncFromDB.cc.

26  : debug(config.getUntrackedParameter<bool>("debug")),
27  // The velocity of signal propagation along the wire (cm/ns)
28  theVPropWire(config.getParameter<double>("vPropWire")),
29  // Switch on/off the T0 correction from pulses
30  doT0Correction(config.getParameter<bool>("doT0Correction")),
31  // Switch on/off the TOF correction for particles from IP
32  doTOFCorrection(config.getParameter<bool>("doTOFCorrection")),
33  theTOFCorrType(config.getParameter<int>("tofCorrType")),
34  // Switch on/off the correction for the signal propagation along the wire
35  doWirePropCorrection(config.getParameter<bool>("doWirePropCorrection")),
36  theWirePropCorrType(config.getParameter<int>("wirePropCorrType")),
37  // spacing of BX in ns
38  theBXspace(config.getUntrackedParameter<double>("bxSpace", 25.)),
39  thetTrigLabel(config.getParameter<string>("tTrigLabel")) {}

◆ ~DTTTrigSyncFromDB()

DTTTrigSyncFromDB::~DTTTrigSyncFromDB ( )
override

Destructor.

Definition at line 41 of file DTTTrigSyncFromDB.cc.

41 {}

Member Function Documentation

◆ emulatorOffset()

double DTTTrigSyncFromDB::emulatorOffset ( const DTWireId wireId,
double &  tTrig,
double &  t0cell 
) const
overridevirtual

Time (ns) to be subtracted to the digi time for emulation purposes It does not take into account TOF and signal propagation along the wire It also returns the different contributions separately:

  • tTrig is the offset (t_trig)
  • t0cell is the t0 from pulses

Implements DTTTrigBaseSync.

Definition at line 177 of file DTTTrigSyncFromDB.cc.

177  {
178  float t0 = 0;
179  float t0rms = 0;
180  if (doT0Correction) {
181  // Read the t0 from pulses for this wire (ns)
182  tZeroMap->get(wireId, t0, t0rms, DTTimeUnits::ns);
183  }
184 
185  // Read the ttrig for this wire
186  float ttrigMean = 0;
187  float ttrigSigma = 0;
188  float kFactor = 0;
189  // FIXME: should check the return value of the DTTtrigRcd::get(..) method
190  if (tTrigMap->get(wireId.superlayerId(), ttrigMean, ttrigSigma, kFactor, DTTimeUnits::ns) != 0) {
191  cout << "[DTTTrigSyncFromDB]*Error: ttrig not found for SL: " << wireId.superlayerId() << endl;
192  // FIXME: LogError.....
193  }
194 
195  tTrig = ttrigMean + kFactor * ttrigSigma;
196  t0cell = t0;
197 
198  return int(tTrig / theBXspace) * theBXspace + t0cell;
199 }

References gather_cfg::cout, doT0Correction, DTT0::get(), DTTtrig::get(), createfilelist::int, dttriganalyzer_cfi::kFactor, DTTimeUnits::ns, DTLayerId::superlayerId(), FrontierCondition_GT_autoExpress_cfi::t0, theBXspace, dttriganalyzer_cfi::tTrig, tTrigMap, and tZeroMap.

◆ offset() [1/2]

double DTTTrigSyncFromDB::offset ( const DTLayer layer,
const DTWireId wireId,
const GlobalPoint globPos,
double &  tTrig,
double &  wirePropCorr,
double &  tofCorr 
) const
overridevirtual

Time (ns) to be subtracted to the digi time, Parameters are the layer and the wireId to which the digi is referred and the estimation of the 3D hit position (globPos)

Implements DTTTrigBaseSync.

Definition at line 63 of file DTTTrigSyncFromDB.cc.

68  {
69  // Correction for the float to int conversion while writeing the ttrig in ns into an int variable
70  // (half a bin on average)
71  // FIXME: this should disappear as soon as the ttrig object will become a float
72  // static const float f2i_convCorr = (25./64.); // ns //FIXME: check how the conversion is performed
73 
74  tTrig = offset(wireId);
75 
76  // Compute the time spent in signal propagation along wire.
77  // NOTE: the FE is always at y>0
78  wirePropCorr = 0;
80  switch (theWirePropCorrType) {
81  // The ttrig computed from the timebox accounts on average for the signal propagation time
82  // from the center of the wire to the frontend. Here we just have to correct for
83  // the distance of the hit from the wire center.
84  case 0: {
85  float wireCoord = layer->toLocal(globPos).y();
86  wirePropCorr = -wireCoord / theVPropWire;
87  break;
88  // FIXME: What if hits used for the time box are not distributed uniformly along the wire?
89  }
90  //On simulated data you need to subtract the total propagation time
91  case 1: {
92  float halfL = layer->specificTopology().cellLenght() / 2;
93  float wireCoord = layer->toLocal(globPos).y();
94  float propgL = halfL - wireCoord;
95  wirePropCorr = propgL / theVPropWire;
96  break;
97  }
98  default: {
99  throw cms::Exception("[DTTTrigSyncFromDB]")
100  << " Invalid parameter: wirePropCorrType = " << theWirePropCorrType << std::endl;
101  break;
102  }
103  }
104  }
105 
106  // Compute TOF correction:
107  tofCorr = 0.;
108  // TOF Correction can be switched off with appropriate parameter
109  if (doTOFCorrection) {
110  float flightToHit = globPos.mag();
111  static const float cSpeed = 29.9792458; // cm/ns
112  switch (theTOFCorrType) {
113  case 0: {
114  // The ttrig computed from the real data accounts on average for the TOF correction
115  // Depending on the granularity used for the ttrig computation we just have to correct for the
116  // TOF from the center of the chamber, SL, layer or wire to the hit position.
117  // At the moment only SL granularity is considered
118  // Correction for TOF from the center of the SL to hit position
119  const DTSuperLayer* sl = layer->superLayer();
120  double flightToSL = sl->surface().position().mag();
121  tofCorr = (flightToSL - flightToHit) / cSpeed;
122  break;
123  }
124  case 1: {
125  // On simulated data you need to consider only the TOF from 3D center of the wire to hit position
126  // (because the TOF from the IP to the wire has been already subtracted in the digitization:
127  // SimMuon/DTDigitizer/DTDigiSyncTOFCorr.cc corrType=2)
128  float flightToWire =
129  layer->toGlobal(LocalPoint(layer->specificTopology().wirePosition(wireId.wire()), 0., 0.)).mag();
130  tofCorr = (flightToWire - flightToHit) / cSpeed;
131  break;
132  }
133  default: {
134  throw cms::Exception("[DTTTrigSyncFromDB]")
135  << " Invalid parameter: tofCorrType = " << theTOFCorrType << std::endl;
136  break;
137  }
138  }
139  }
140 
141  if (debug) {
142  cout << "[DTTTrigSyncFromDB] Channel: " << wireId << endl
143  << " Offset (ns): " << tTrig + wirePropCorr - tofCorr << endl
144  << " various contributions are: " << endl
145  << " tTrig + t0 (ns): " << tTrig
146  << endl
147  //<< " tZero (ns): " << t0 << endl
148  << " Propagation along wire delay (ns): " << wirePropCorr << endl
149  << " TOF correction (ns): " << tofCorr << endl
150  << endl;
151  }
152  //The global offset is the sum of various contributions
153  return tTrig + wirePropCorr - tofCorr;
154 }

References DTTopology::cellLenght(), gather_cfg::cout, debug, doTOFCorrection, doWirePropCorrection, Exception, PV3DBase< T, PVType, FrameType >::mag(), mag(), GloballyPositioned< T >::position(), DTLayer::specificTopology(), DTLayer::superLayer(), GeomDet::surface(), theTOFCorrType, theVPropWire, theWirePropCorrType, GeomDet::toGlobal(), GeomDet::toLocal(), dttriganalyzer_cfi::tTrig, DTWireId::wire(), DTTopology::wirePosition(), and PV3DBase< T, PVType, FrameType >::y().

◆ offset() [2/2]

double DTTTrigSyncFromDB::offset ( const DTWireId wireId) const
overridevirtual

Time (ns) to be subtracted to the digi time. It does not take into account TOF and signal propagation along the wire

Implements DTTTrigBaseSync.

Definition at line 156 of file DTTTrigSyncFromDB.cc.

156  {
157  float t0 = 0;
158  float t0rms = 0;
159  if (doT0Correction) {
160  // Read the t0 from pulses for this wire (ns)
161  tZeroMap->get(wireId, t0, t0rms, DTTimeUnits::ns);
162  }
163 
164  // Read the ttrig for this wire
165  float ttrigMean = 0;
166  float ttrigSigma = 0;
167  float kFactor = 0;
168  // FIXME: should check the return value of the DTTtrigRcd::get(..) method
169  if (tTrigMap->get(wireId.superlayerId(), ttrigMean, ttrigSigma, kFactor, DTTimeUnits::ns) != 0) {
170  cout << "[DTTTrigSyncFromDB]*Error: ttrig not found for SL: " << wireId.superlayerId() << endl;
171  // FIXME: LogError.....
172  }
173 
174  return t0 + ttrigMean + kFactor * ttrigSigma;
175 }

References gather_cfg::cout, doT0Correction, DTT0::get(), DTTtrig::get(), dttriganalyzer_cfi::kFactor, DTTimeUnits::ns, DTLayerId::superlayerId(), FrontierCondition_GT_autoExpress_cfi::t0, tTrigMap, and tZeroMap.

◆ setES()

void DTTTrigSyncFromDB::setES ( const edm::EventSetup setup)
overridevirtual

Pass the Event Setup to the algo at each event.

Implements DTTTrigBaseSync.

Definition at line 43 of file DTTTrigSyncFromDB.cc.

43  {
44  if (doT0Correction) {
45  // Get the map of t0 from pulses from the Setup
46  ESHandle<DTT0> t0Handle;
47  setup.get<DTT0Rcd>().get(t0Handle);
48  tZeroMap = &*t0Handle;
49  if (debug) {
50  cout << "[DTTTrigSyncFromDB] t0 version: " << tZeroMap->version() << endl;
51  }
52  }
53 
54  // Get the map of ttrig from the Setup
55  ESHandle<DTTtrig> ttrigHandle;
56  setup.get<DTTtrigRcd>().get(thetTrigLabel, ttrigHandle);
57  tTrigMap = &*ttrigHandle;
58  if (debug) {
59  cout << "[DTTTrigSyncFromDB] ttrig version: " << tTrigMap->version() << endl;
60  }
61 }

References gather_cfg::cout, debug, doT0Correction, get, singleTopDQM_cfi::setup, thetTrigLabel, tTrigMap, tZeroMap, DTT0::version(), and DTTtrig::version().

Member Data Documentation

◆ debug

const bool DTTTrigSyncFromDB::debug
private

◆ doT0Correction

bool DTTTrigSyncFromDB::doT0Correction
private

Definition at line 95 of file DTTTrigSyncFromDB.h.

Referenced by emulatorOffset(), offset(), and setES().

◆ doTOFCorrection

bool DTTTrigSyncFromDB::doTOFCorrection
private

Definition at line 97 of file DTTTrigSyncFromDB.h.

Referenced by offset().

◆ doWirePropCorrection

bool DTTTrigSyncFromDB::doWirePropCorrection
private

Definition at line 100 of file DTTTrigSyncFromDB.h.

Referenced by offset().

◆ theBXspace

double DTTTrigSyncFromDB::theBXspace
private

Definition at line 103 of file DTTTrigSyncFromDB.h.

Referenced by emulatorOffset().

◆ theTOFCorrType

int DTTTrigSyncFromDB::theTOFCorrType
private

Definition at line 98 of file DTTTrigSyncFromDB.h.

Referenced by offset().

◆ thetTrigLabel

std::string DTTTrigSyncFromDB::thetTrigLabel
private

Definition at line 105 of file DTTTrigSyncFromDB.h.

Referenced by setES().

◆ theVPropWire

double DTTTrigSyncFromDB::theVPropWire
private

Definition at line 93 of file DTTTrigSyncFromDB.h.

Referenced by offset().

◆ theWirePropCorrType

int DTTTrigSyncFromDB::theWirePropCorrType
private

Definition at line 101 of file DTTTrigSyncFromDB.h.

Referenced by offset().

◆ tTrigMap

const DTTtrig* DTTTrigSyncFromDB::tTrigMap
private

Definition at line 89 of file DTTTrigSyncFromDB.h.

Referenced by emulatorOffset(), offset(), and setES().

◆ tZeroMap

const DTT0* DTTTrigSyncFromDB::tZeroMap
private

Definition at line 88 of file DTTTrigSyncFromDB.h.

Referenced by emulatorOffset(), offset(), and setES().

DTTTrigSyncFromDB::doTOFCorrection
bool doTOFCorrection
Definition: DTTTrigSyncFromDB.h:97
DTWireId::wire
int wire() const
Return the wire number.
Definition: DTWireId.h:42
DTTTrigSyncFromDB::doWirePropCorrection
bool doWirePropCorrection
Definition: DTTTrigSyncFromDB.h:100
DTTtrig::version
const std::string & version() const
access version
Definition: DTTtrig.cc:162
DTTTrigSyncFromDB::tTrigMap
const DTTtrig * tTrigMap
Definition: DTTTrigSyncFromDB.h:89
DTTTrigSyncFromDB::debug
const bool debug
Definition: DTTTrigSyncFromDB.h:91
DTTtrigRcd
Definition: DTTtrigRcd.h:5
dttriganalyzer_cfi.tTrig
tTrig
Definition: dttriganalyzer_cfi.py:11
gather_cfg.cout
cout
Definition: gather_cfg.py:144
DTTTrigSyncFromDB::theWirePropCorrType
int theWirePropCorrType
Definition: DTTTrigSyncFromDB.h:101
DTTTrigSyncFromDB::tZeroMap
const DTT0 * tZeroMap
Definition: DTTTrigSyncFromDB.h:88
DTT0::version
const std::string & version() const
access version
Definition: DTT0.cc:82
DTLayer::superLayer
const DTSuperLayer * superLayer() const
Definition: DTLayer.cc:43
DTSuperLayer
Definition: DTSuperLayer.h:24
align::LocalPoint
Point3DBase< Scalar, LocalTag > LocalPoint
Definition: Definitions.h:30
DTT0Rcd
Definition: DTT0Rcd.h:9
DTTTrigSyncFromDB::theVPropWire
double theVPropWire
Definition: DTTTrigSyncFromDB.h:93
singleTopDQM_cfi.setup
setup
Definition: singleTopDQM_cfi.py:37
DTTTrigSyncFromDB::theTOFCorrType
int theTOFCorrType
Definition: DTTTrigSyncFromDB.h:98
config
Definition: config.py:1
GeomDet::surface
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
DTTopology::wirePosition
float wirePosition(int wireNumber) const
Returns the x position in the layer of a given wire number.
Definition: DTTopology.cc:59
DTT0::get
int get(int wheelId, int stationId, int sectorId, int slId, int layerId, int cellId, float &t0mean, float &t0rms, DTTimeUnits::type unit) const
Definition: DTT0.cc:48
FrontierCondition_GT_autoExpress_cfi.t0
t0
Definition: FrontierCondition_GT_autoExpress_cfi.py:148
DTTimeUnits::ns
Definition: DTTimeUnits.h:32
edm::ESHandle< DTT0 >
DTTtrig::get
int get(int wheelId, int stationId, int sectorId, int slId, float &tTrig, float &tTrms, float &kFact, DTTimeUnits::type unit) const
get content
Definition: DTTtrig.cc:59
GeomDet::toLocal
LocalPoint toLocal(const GlobalPoint &gp) const
Conversion to the R.F. of the GeomDet.
Definition: GeomDet.h:58
DTTopology::cellLenght
float cellLenght() const
Definition: DTTopology.h:74
GeomDet::toGlobal
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
Definition: GeomDet.h:49
PV3DBase::y
T y() const
Definition: PV3DBase.h:60
createfilelist.int
int
Definition: createfilelist.py:10
get
#define get
DTTTrigSyncFromDB::doT0Correction
bool doT0Correction
Definition: DTTTrigSyncFromDB.h:95
PV3DBase::mag
T mag() const
Definition: PV3DBase.h:64
GloballyPositioned::position
const PositionType & position() const
Definition: GloballyPositioned.h:36
mag
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
Definition: Basic3DVectorLD.h:127
DTTTrigSyncFromDB::theBXspace
double theBXspace
Definition: DTTTrigSyncFromDB.h:103
dttriganalyzer_cfi.kFactor
kFactor
Definition: dttriganalyzer_cfi.py:7
DTTTrigSyncFromDB::thetTrigLabel
std::string thetTrigLabel
Definition: DTTTrigSyncFromDB.h:105
Exception
Definition: hltDiff.cc:246
DTLayerId::superlayerId
DTSuperLayerId superlayerId() const
Return the corresponding SuperLayerId.
Definition: DTLayerId.h:45
DTLayer::specificTopology
const DTTopology & specificTopology() const
Definition: DTLayer.cc:37
DTTTrigSyncFromDB::offset
double offset(const DTLayer *layer, const DTWireId &wireId, const GlobalPoint &globPos, double &tTrig, double &wirePropCorr, double &tofCorr) const override
Definition: DTTTrigSyncFromDB.cc:63