CMS 3D CMS Logo

DTTTrigSyncFromDB.cc
Go to the documentation of this file.
1 /*
2  * See header file for a description of this class.
3  *
4  * \author G. Cerminara - INFN Torino
5  */
6 
7 #include "DTTTrigSyncFromDB.h"
8 
19 
20 #include <iostream>
21 
22 using namespace std;
23 using namespace edm;
24 
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")),
40  thet0Label(config.getParameter<string>("t0Label")) {}
41 
43 
45  if (doT0Correction) {
46  // Get the map of t0 from pulses from the Setup
47  ESHandle<DTT0> t0Handle;
48  setup.get<DTT0Rcd>().get(thet0Label, t0Handle);
49  tZeroMap = &*t0Handle;
50  if (debug) {
51  cout << "[DTTTrigSyncFromDB] t0 version: " << tZeroMap->version() << endl;
52  }
53  }
54 
55  // Get the map of ttrig from the Setup
56  ESHandle<DTTtrig> ttrigHandle;
57  setup.get<DTTtrigRcd>().get(thetTrigLabel, ttrigHandle);
58  tTrigMap = &*ttrigHandle;
59  if (debug) {
60  cout << "[DTTTrigSyncFromDB] ttrig version: " << tTrigMap->version() << endl;
61  }
62 }
63 
65  const DTWireId& wireId,
66  const GlobalPoint& globPos,
67  double& tTrig,
68  double& wirePropCorr,
69  double& tofCorr) const {
70  // Correction for the float to int conversion while writeing the ttrig in ns into an int variable
71  // (half a bin on average)
72  // FIXME: this should disappear as soon as the ttrig object will become a float
73  // static const float f2i_convCorr = (25./64.); // ns //FIXME: check how the conversion is performed
74 
75  tTrig = offset(wireId);
76 
77  // Compute the time spent in signal propagation along wire.
78  // NOTE: the FE is always at y>0
79  wirePropCorr = 0;
81  switch (theWirePropCorrType) {
82  // The ttrig computed from the timebox accounts on average for the signal propagation time
83  // from the center of the wire to the frontend. Here we just have to correct for
84  // the distance of the hit from the wire center.
85  case 0: {
86  float wireCoord = layer->toLocal(globPos).y();
87  wirePropCorr = -wireCoord / theVPropWire;
88  break;
89  // FIXME: What if hits used for the time box are not distributed uniformly along the wire?
90  }
91  //On simulated data you need to subtract the total propagation time
92  case 1: {
93  float halfL = layer->specificTopology().cellLenght() / 2;
94  float wireCoord = layer->toLocal(globPos).y();
95  float propgL = halfL - wireCoord;
96  wirePropCorr = propgL / theVPropWire;
97  break;
98  }
99  default: {
100  throw cms::Exception("[DTTTrigSyncFromDB]")
101  << " Invalid parameter: wirePropCorrType = " << theWirePropCorrType << std::endl;
102  break;
103  }
104  }
105  }
106 
107  // Compute TOF correction:
108  tofCorr = 0.;
109  // TOF Correction can be switched off with appropriate parameter
110  if (doTOFCorrection) {
111  float flightToHit = globPos.mag();
112  static const float cSpeed = 29.9792458; // cm/ns
113  switch (theTOFCorrType) {
114  case 0: {
115  // The ttrig computed from the real data accounts on average for the TOF correction
116  // Depending on the granularity used for the ttrig computation we just have to correct for the
117  // TOF from the center of the chamber, SL, layer or wire to the hit position.
118  // At the moment only SL granularity is considered
119  // Correction for TOF from the center of the SL to hit position
120  const DTSuperLayer* sl = layer->superLayer();
121  double flightToSL = sl->surface().position().mag();
122  tofCorr = (flightToSL - flightToHit) / cSpeed;
123  break;
124  }
125  case 1: {
126  // On simulated data you need to consider only the TOF from 3D center of the wire to hit position
127  // (because the TOF from the IP to the wire has been already subtracted in the digitization:
128  // SimMuon/DTDigitizer/DTDigiSyncTOFCorr.cc corrType=2)
129  float flightToWire =
130  layer->toGlobal(LocalPoint(layer->specificTopology().wirePosition(wireId.wire()), 0., 0.)).mag();
131  tofCorr = (flightToWire - flightToHit) / cSpeed;
132  break;
133  }
134  default: {
135  throw cms::Exception("[DTTTrigSyncFromDB]")
136  << " Invalid parameter: tofCorrType = " << theTOFCorrType << std::endl;
137  break;
138  }
139  }
140  }
141 
142  if (debug) {
143  cout << "[DTTTrigSyncFromDB] Channel: " << wireId << endl
144  << " Offset (ns): " << tTrig + wirePropCorr - tofCorr << endl
145  << " various contributions are: " << endl
146  << " tTrig + t0 (ns): " << tTrig
147  << endl
148  //<< " tZero (ns): " << t0 << endl
149  << " Propagation along wire delay (ns): " << wirePropCorr << endl
150  << " TOF correction (ns): " << tofCorr << endl
151  << endl;
152  }
153  //The global offset is the sum of various contributions
154  return tTrig + wirePropCorr - tofCorr;
155 }
156 
157 double DTTTrigSyncFromDB::offset(const DTWireId& wireId) const {
158  float t0 = 0;
159  float t0rms = 0;
160  if (doT0Correction) {
161  // Read the t0 from pulses for this wire (ns)
162  tZeroMap->get(wireId, t0, t0rms, DTTimeUnits::ns);
163  }
164 
165  // Read the ttrig for this wire
166  float ttrigMean = 0;
167  float ttrigSigma = 0;
168  float kFactor = 0;
169  // FIXME: should check the return value of the DTTtrigRcd::get(..) method
170  if (tTrigMap->get(wireId.superlayerId(), ttrigMean, ttrigSigma, kFactor, DTTimeUnits::ns) != 0) {
171  cout << "[DTTTrigSyncFromDB]*Error: ttrig not found for SL: " << wireId.superlayerId() << endl;
172  // FIXME: LogError.....
173  }
174 
175  return t0 + ttrigMean + kFactor * ttrigSigma;
176 }
177 
178 double DTTTrigSyncFromDB::emulatorOffset(const DTWireId& wireId, double& tTrig, double& t0cell) const {
179  float t0 = 0;
180  float t0rms = 0;
181  if (doT0Correction) {
182  // Read the t0 from pulses for this wire (ns)
183  tZeroMap->get(wireId, t0, t0rms, DTTimeUnits::ns);
184  }
185 
186  // Read the ttrig for this wire
187  float ttrigMean = 0;
188  float ttrigSigma = 0;
189  float kFactor = 0;
190  // FIXME: should check the return value of the DTTtrigRcd::get(..) method
191  if (tTrigMap->get(wireId.superlayerId(), ttrigMean, ttrigSigma, kFactor, DTTimeUnits::ns) != 0) {
192  cout << "[DTTTrigSyncFromDB]*Error: ttrig not found for SL: " << wireId.superlayerId() << endl;
193  // FIXME: LogError.....
194  }
195 
196  tTrig = ttrigMean + kFactor * ttrigSigma;
197  t0cell = t0;
198 
199  return int(tTrig / theBXspace) * theBXspace + t0cell;
200 }
DTTTrigSyncFromDB::DTTTrigSyncFromDB
DTTTrigSyncFromDB(const edm::ParameterSet &config)
Constructor.
Definition: DTTTrigSyncFromDB.cc:25
dtTriggerSynchTask_cfi.doTOFCorrection
doTOFCorrection
Definition: dtTriggerSynchTask_cfi.py:18
DTTTrigSyncFromDB::doTOFCorrection
bool doTOFCorrection
Definition: DTTTrigSyncFromDB.h:97
DTWireId::wire
int wire() const
Return the wire number.
Definition: DTWireId.h:42
electrons_cff.bool
bool
Definition: electrons_cff.py:366
DTTtrigRcd.h
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::setES
void setES(const edm::EventSetup &setup) override
Pass the Event Setup to the algo at each event.
Definition: DTTTrigSyncFromDB.cc:44
ESHandle.h
DTTTrigSyncFromDB::debug
const bool debug
Definition: DTTTrigSyncFromDB.h:91
DTTtrigRcd
Definition: DTTtrigRcd.h:5
DTTTrigSyncFromDB::~DTTTrigSyncFromDB
~DTTTrigSyncFromDB() override
Destructor.
Definition: DTTTrigSyncFromDB.cc:42
edm
HLT enums.
Definition: AlignableModifier.h:19
dttriganalyzer_cfi.tTrig
tTrig
Definition: dttriganalyzer_cfi.py:11
DTT0.h
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
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
debug
#define debug
Definition: HDRShower.cc:19
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
DTWireId
Definition: DTWireId.h:12
FrontierCondition_GT_autoExpress_cfi.t0
t0
Definition: FrontierCondition_GT_autoExpress_cfi.py:149
DTTimeUnits::ns
Definition: DTTimeUnits.h:32
edm::ESHandle
Definition: DTSurvey.h:22
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
Point3DBase< float, GlobalTag >
DTLayer.h
phase1PixelTopology::layer
constexpr std::array< uint8_t, layerIndexSize > layer
Definition: phase1PixelTopology.h:99
edm::ParameterSet
Definition: ParameterSet.h:47
DTTTrigSyncFromDB::thet0Label
std::string thet0Label
Definition: DTTTrigSyncFromDB.h:106
dtTriggerSynchTask_cfi.doWirePropCorrection
doWirePropCorrection
Definition: dtTriggerSynchTask_cfi.py:21
DTT0Rcd.h
createfilelist.int
int
Definition: createfilelist.py:10
edm::EventSetup
Definition: EventSetup.h:58
DTTtrig.h
get
#define get
AlCaHLTBitMon_QueryRunRegistry.string
string string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
DTLayer
Definition: DTLayer.h:25
DTTTrigSyncFromDB::doT0Correction
bool doT0Correction
Definition: DTTTrigSyncFromDB.h:95
DTTTrigSyncFromDB.h
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
std
Definition: JetResolutionObject.h:76
DTTTrigSyncFromDB::theBXspace
double theBXspace
Definition: DTTTrigSyncFromDB.h:103
dttriganalyzer_cfi.kFactor
kFactor
Definition: dttriganalyzer_cfi.py:7
DTWireId.h
DTTTrigSyncFromDB::thetTrigLabel
std::string thetTrigLabel
Definition: DTTTrigSyncFromDB.h:105
Exception
Definition: hltDiff.cc:245
DTLayerId::superlayerId
DTSuperLayerId superlayerId() const
Return the corresponding SuperLayerId.
Definition: DTLayerId.h:45
DTTTrigSyncFromDB::emulatorOffset
double emulatorOffset(const DTWireId &wireId, double &tTrig, double &t0cell) const override
Definition: DTTTrigSyncFromDB.cc:178
EventSetup.h
dtTriggerSynchTask_cfi.doT0Correction
doT0Correction
Definition: dtTriggerSynchTask_cfi.py:22
ParameterSet.h
DTSuperLayer.h
DTTTrigSyncFromDB::offset
double offset(const DTLayer *layer, const DTWireId &wireId, const GlobalPoint &globPos, double &tTrig, double &wirePropCorr, double &tofCorr) const override
Definition: DTTTrigSyncFromDB.cc:64