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 
42 
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 }
62 
63 double DTTTrigSyncFromDB::offset(const DTLayer* layer,
64  const DTWireId& wireId,
65  const GlobalPoint& globPos,
66  double& tTrig,
67  double& wirePropCorr,
68  double& tofCorr) const {
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 }
155 
156 double DTTTrigSyncFromDB::offset(const DTWireId& wireId) const {
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 }
176 
177 double DTTTrigSyncFromDB::emulatorOffset(const DTWireId& wireId, double& tTrig, double& t0cell) const {
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 }
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:372
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:43
ESHandle.h
DTTTrigSyncFromDB::debug
const bool debug
Definition: DTTTrigSyncFromDB.h:91
DTTtrigRcd
Definition: DTTtrigRcd.h:5
DTTTrigSyncFromDB::~DTTTrigSyncFromDB
~DTTTrigSyncFromDB() override
Destructor.
Definition: DTTTrigSyncFromDB.cc:41
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
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
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: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
Point3DBase< float, GlobalTag >
GeomDet::toLocal
LocalPoint toLocal(const GlobalPoint &gp) const
Conversion to the R.F. of the GeomDet.
Definition: GeomDet.h:58
DTLayer.h
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
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
edm::ParameterSet
Definition: ParameterSet.h:36
dtTriggerSynchTask_cfi.doWirePropCorrection
doWirePropCorrection
Definition: dtTriggerSynchTask_cfi.py:21
DTT0Rcd.h
PV3DBase::y
T y() const
Definition: PV3DBase.h:60
createfilelist.int
int
Definition: createfilelist.py:10
edm::EventSetup
Definition: EventSetup.h:57
DTTtrig.h
get
#define get
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:246
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:177
EventSetup.h
DTLayer::specificTopology
const DTTopology & specificTopology() const
Definition: DTLayer.cc:37
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:63