CMS 3D CMS Logo

PixelCPEBase.cc
Go to the documentation of this file.
1 // Move geomCorrection to the concrete class. d.k. 06/06.
2 // Change drift direction. d.k. 06/06
3 // G. Giurgiu (ggiurgiu@pha.jhu.edu), 12/01/06, implemented the function:
4 // computeAnglesFromDetPosition(const SiPixelCluster & cl,
5 // change to use Lorentz angle from DB Lotte Wilke, Jan. 31st, 2008
6 // Change to use Generic error & Template calibration from DB - D.Fehling 11/08
7 
11 
13 
14 #define CORRECT_FOR_BIG_PIXELS
15 
16 // MessageLogger
18 
19 // Magnetic field
21 
22 #include <iostream>
23 
24 using namespace std;
25 
26 //-----------------------------------------------------------------------------
27 // A constructor run for generic and templates
28 //
29 //-----------------------------------------------------------------------------
31  const MagneticField* mag,
32  const TrackerGeometry& geom,
33  const TrackerTopology& ttopo,
34  const SiPixelLorentzAngle* lorentzAngle,
35  const SiPixelGenErrorDBObject* genErrorDBObject,
36  const SiPixelTemplateDBObject* templateDBobject,
37  const SiPixelLorentzAngle* lorentzAngleWidth,
38  int flag)
39  // : useLAAlignmentOffsets_(false), useLAOffsetFromConfig_(false),
40  : useLAOffsetFromConfig_(false),
41  useLAWidthFromConfig_(false),
42  useLAWidthFromDB_(false),
43  theFlag_(flag),
44  magfield_(mag),
45  geom_(geom),
46  ttopo_(ttopo) {
47 #ifdef EDM_ML_DEBUG
48  nRecHitsTotal_ = 0;
49  nRecHitsUsedEdge_ = 0,
50 #endif
51 
52  //--- Lorentz angle tangent per Tesla
53  lorentzAngle_ = lorentzAngle;
54  lorentzAngleWidth_ = lorentzAngleWidth;
55 
56  //-- GenError Calibration Object from DB
57  genErrorDBObject_ = genErrorDBObject;
58 
59  //-- Template Calibration Object from DB
60  if (theFlag_ != 0)
61  templateDBobject_ = templateDBobject; // flag to check if it is generic or templates
62 
63  // Configurables
64  // For both templates & generic
65 
66  // Read templates and/or generic errors from DB
67  LoadTemplatesFromDB_ = conf.getParameter<bool>("LoadTemplatesFromDB");
68 
69  //--- Algorithm's verbosity
70  theVerboseLevel = conf.getUntrackedParameter<int>("VerboseLevel", 0);
71 
72  //-- Switch on/off E.B
73  alpha2Order = conf.getParameter<bool>("Alpha2Order");
74 
75  //--- A flag that could be used to change the behavior of
76  //--- clusterProbability() in TSiPixelRecHit (the *transient* one).
77  //--- The problem is that the transient hits are made after the CPE runs
78  //--- and they don't get the access to the PSet, so we pass it via the
79  //--- CPE itself...
80  //
81  clusterProbComputationFlag_ = (unsigned int)conf.getParameter<int>("ClusterProbComputationFlag");
82 
83  // This LA related parameters are only relevant for the Generic algo
84  // They still have to be used in Base since the LA computation is in Base
85 
86  // Use LA-width from DB.
87  // If both (this and from config) are false LA-width is calcuated from LA-offset
88  useLAWidthFromDB_ = conf.getParameter<bool>("useLAWidthFromDB");
89 
90  // Use Alignment LA-offset in generic
91  // (Experimental; leave commented out)
92  //useLAAlignmentOffsets_ = conf.existsAs<bool>("useLAAlignmentOffsets")?
93  //conf.getParameter<bool>("useLAAlignmentOffsets"):false;
94 
95  // Used only for testing
96  lAOffset_ = conf.getParameter<double>("lAOffset");
97  lAWidthBPix_ = conf.getParameter<double>("lAWidthBPix");
98  lAWidthFPix_ = conf.getParameter<double>("lAWidthFPix");
99 
100  // Use LA-offset from config, for testing only
101  if (lAOffset_ > 0.0)
102  useLAOffsetFromConfig_ = true;
103  // Use LA-width from config, split into fpix & bpix, for testing only
104  if (lAWidthBPix_ > 0.0 || lAWidthFPix_ > 0.0)
105  useLAWidthFromConfig_ = true;
106 
107  // For Templates only
108  // Compute the Lorentz shifts for this detector element for templates (from Alignment)
109  doLorentzFromAlignment_ = conf.getParameter<bool>("doLorentzFromAlignment");
110  useLAFromDB_ = conf.getParameter<bool>("useLAFromDB");
111 
112  LogDebug("PixelCPEBase") << " LA constants - " << lAOffset_ << " " << lAWidthBPix_ << " " << lAWidthFPix_
113  << endl; //dk
114 
115  fillDetParams();
116 }
117 
118 //-----------------------------------------------------------------------------
119 // Fill all variables which are constant for an event (geometry)
120 //-----------------------------------------------------------------------------
122  // MM: this code finds the last Pixel (Inner Tracker) DetUnit to loop upon when filling the det params, by looking the first detId which is from
123  // the Outer Tracker (Strips in case of the Phase-0/1 detector).
124 
125  auto const& dus = geom_.detUnits();
126  unsigned m_detectors = dus.size();
127  for (unsigned int i = 1; i < 7; ++i) {
128  LogDebug("PixelCPEBase:: LookingForFirstStrip")
129  << "Subdetector " << i << " GeomDetEnumerator " << GeomDetEnumerators::tkDetEnum[i] << " offset "
130  << geom_.offsetDU(GeomDetEnumerators::tkDetEnum[i]) << " is it strip? "
131  << (geom_.offsetDU(GeomDetEnumerators::tkDetEnum[i]) != dus.size()
132  ? dus[geom_.offsetDU(GeomDetEnumerators::tkDetEnum[i])]->type().isOuterTracker()
133  : false);
134 
135  if (geom_.offsetDU(GeomDetEnumerators::tkDetEnum[i]) != dus.size() &&
136  dus[geom_.offsetDU(GeomDetEnumerators::tkDetEnum[i])]->type().isOuterTracker()) {
137  if (geom_.offsetDU(GeomDetEnumerators::tkDetEnum[i]) < m_detectors) {
139  }
140  }
141  }
142  LogDebug("LookingForFirstStrip") << " Chosen offset: " << m_detectors;
143 
144  m_DetParams.resize(m_detectors);
145  LogDebug("PixelCPEBase::fillDetParams():") << "caching " << m_detectors << " pixel detectors" << endl;
146  for (unsigned i = 0; i != m_detectors; ++i) {
147  auto& p = m_DetParams[i];
148  p.theDet = dynamic_cast<const PixelGeomDetUnit*>(dus[i]);
149  assert(p.theDet);
150  assert(p.theDet->index() == int(i));
151 
152  p.theOrigin = p.theDet->surface().toLocal(GlobalPoint(0, 0, 0));
153 
154  //--- p.theDet->type() returns a GeomDetType, which implements subDetector()
155  p.thePart = p.theDet->type().subDetector();
156 
157  //--- The location in of this DetUnit in a cyllindrical coord system (R,Z)
158  //--- The call goes via BoundSurface, returned by p.theDet->surface(), but
159  //--- position() is implemented in GloballyPositioned<> template
160  //--- ( BoundSurface : Surface : GloballyPositioned<float> )
161  //p.theDetR = p.theDet->surface().position().perp(); //Not used, AH
162  //p.theDetZ = p.theDet->surface().position().z(); //Not used, AH
163  //--- Define parameters for chargewidth calculation
164 
165  //--- bounds() is implemented in BoundSurface itself.
166  p.theThickness = p.theDet->surface().bounds().thickness();
167 
168  // Cache the det id for templates and generic erros
169 
170  if (theFlag_ == 0) { // for generic
171  if (LoadTemplatesFromDB_) // do only if genError requested
172  p.detTemplateId = genErrorDBObject_->getGenErrorID(p.theDet->geographicalId().rawId());
173  } else { // for templates
174  p.detTemplateId = templateDBobject_->getTemplateID(p.theDet->geographicalId());
175  }
176 
177  auto topol = &(p.theDet->specificTopology());
178  p.theTopol = topol;
179  auto const proxyT = dynamic_cast<const ProxyPixelTopology*>(p.theTopol);
180  if (proxyT)
181  p.theRecTopol = dynamic_cast<const RectangularPixelTopology*>(&(proxyT->specificTopology()));
182  else
183  p.theRecTopol = dynamic_cast<const RectangularPixelTopology*>(p.theTopol);
184  assert(p.theRecTopol);
185 
186  //--- The geometrical description of one module/plaquette
187  //p.theNumOfRow = p.theRecTopol->nrows(); // rows in x //Not used, AH. PM: leave commented out.
188  //p.theNumOfCol = p.theRecTopol->ncolumns(); // cols in y //Not used, AH. PM: leave commented out.
189  std::pair<float, float> pitchxy = p.theRecTopol->pitch();
190  p.thePitchX = pitchxy.first; // pitch along x
191  p.thePitchY = pitchxy.second; // pitch along y
192 
193  LocalVector Bfield = p.theDet->surface().toLocal(magfield_->inTesla(p.theDet->surface().position()));
194  p.bz = Bfield.z();
195  p.bx = Bfield.x();
196 
197  //--- Compute the Lorentz shifts for this detector element
198  if ((theFlag_ == 0) || useLAFromDB_ ||
199  doLorentzFromAlignment_) { // do always for generic and if using LA from DB or alignment for templates
200  p.driftDirection = driftDirection(p, Bfield);
202  }
203 
204  LogDebug("PixelCPEBase::fillDetParams()") << "***** PIXEL LAYOUT *****"
205  << " thePart = " << p.thePart << " theThickness = " << p.theThickness
206  << " thePitchX = " << p.thePitchX << " thePitchY = " << p.thePitchY;
207  // << " theLShiftX = " << p.theLShiftX;
208  }
209 }
210 
211 //-----------------------------------------------------------------------------
212 // One function to cache the variables common for one DetUnit.
213 //-----------------------------------------------------------------------------
214 void PixelCPEBase::setTheClu(DetParam const& theDetParam, ClusterParam& theClusterParam) const {
215  //--- Geometric Quality Information
216  int minInX, minInY, maxInX, maxInY = 0;
217  minInX = theClusterParam.theCluster->minPixelRow();
218  minInY = theClusterParam.theCluster->minPixelCol();
219  maxInX = theClusterParam.theCluster->maxPixelRow();
220  maxInY = theClusterParam.theCluster->maxPixelCol();
221 
222  int min_row(0), min_col(0);
223  int max_row = theDetParam.theRecTopol->nrows() - 1;
224  int max_col = theDetParam.theRecTopol->ncolumns() - 1;
225 
226  if (minInX == min_row)
227  theClusterParam.edgeTypeX_ = 1;
228  else if (maxInX == max_row)
229  theClusterParam.edgeTypeX_ = 2;
230  else
231  theClusterParam.edgeTypeX_ = 0;
232 
233  if (minInY == min_col)
234  theClusterParam.edgeTypeY_ = 1;
235  else if (maxInY == max_col)
236  theClusterParam.edgeTypeY_ = 2;
237  else
238  theClusterParam.edgeTypeY_ = 0;
239 
240  theClusterParam.isOnEdge_ = (theClusterParam.edgeTypeX_ || theClusterParam.edgeTypeY_);
241 
242  // &&& FOR NOW UNUSED. KEEP IT IN CASE WE WANT TO USE IT IN THE FUTURE
243  // Bad Pixels have their charge set to 0 in the clusterizer
244  //hasBadPixels_ = false;
245  //for(unsigned int i=0; i<theClusterParam.theCluster->pixelADC().size(); ++i) {
246  //if(theClusterParam.theCluster->pixelADC()[i] == 0) { hasBadPixels_ = true; break;}
247  //}
248 
249  theClusterParam.spansTwoROCs_ = theDetParam.theRecTopol->containsBigPixelInX(minInX, maxInX) ||
250  theDetParam.theRecTopol->containsBigPixelInY(minInY, maxInY);
251 }
252 
253 //-----------------------------------------------------------------------------
254 // Compute alpha_ and beta_ from the LocalTrajectoryParameters.
255 // Note: should become const after both localParameters() become const.
256 //-----------------------------------------------------------------------------
258  ClusterParam& theClusterParam,
259  const LocalTrajectoryParameters& ltp) const {
260  theClusterParam.cotalpha = ltp.dxdz();
261  theClusterParam.cotbeta = ltp.dydz();
262 
263  LocalPoint trk_lp = ltp.position();
264  theClusterParam.trk_lp_x = trk_lp.x();
265  theClusterParam.trk_lp_y = trk_lp.y();
266 
267  theClusterParam.with_track_angle = true;
268 
269  // GG: needed to correct for bows/kinks
270  theClusterParam.loc_trk_pred = Topology::LocalTrackPred(
271  theClusterParam.trk_lp_x, theClusterParam.trk_lp_y, theClusterParam.cotalpha, theClusterParam.cotbeta);
272 }
273 
274 //-----------------------------------------------------------------------------
275 // Estimate theAlpha for barrel, based on the det position.
276 // &&& Needs to be consolidated from the above.
277 //-----------------------------------------------------------------------------
278 //float
279 //PixelCPEBase::estimatedAlphaForBarrel(float centerx) const
280 //{
281 // float tanalpha = theSign * (centerx-theOffsetX) * thePitchX / theDetR;
282 // return PI/2.0 - atan(tanalpha);
283 //}
284 
285 //-----------------------------------------------------------------------------
286 // Compute alpha_ and beta_ from the position of this DetUnit.
287 // &&& DOES NOT WORK FOR NOW. d.k. 6/06
288 // The angles from dets are calculated internaly in the PixelCPEInitial class
289 //-----------------------------------------------------------------------------
290 // G. Giurgiu, 12/01/06 : implement the function
291 void PixelCPEBase::computeAnglesFromDetPosition(DetParam const& theDetParam, ClusterParam& theClusterParam) const {
292  LocalPoint lp = theDetParam.theTopol->localPosition(
293  MeasurementPoint(theClusterParam.theCluster->x(), theClusterParam.theCluster->y()));
294  auto gvx = lp.x() - theDetParam.theOrigin.x();
295  auto gvy = lp.y() - theDetParam.theOrigin.y();
296  auto gvz = -1.f / theDetParam.theOrigin.z();
297  //--- Note that the normalization is not required as only the ratio used
298 
299  //theClusterParam.zneg = (gvz < 0); // Not used, AH
300 
301  // calculate angles
302  theClusterParam.cotalpha = gvx * gvz;
303  theClusterParam.cotbeta = gvy * gvz;
304 
305  theClusterParam.with_track_angle = false;
306 
307  /*
308  // used only in dberror param...
309  auto alpha = HALF_PI - std::atan(cotalpha_);
310  auto beta = HALF_PI - std::atan(cotbeta_);
311  if (zneg) { beta -=PI; alpha -=PI;}
312 
313  auto alpha_ = atan2( gv_dot_gvz, gv_dot_gvx );
314  auto beta_ = atan2( gv_dot_gvz, gv_dot_gvy );
315 
316  assert(std::abs(std::round(alpha*10000.f)-std::round(alpha_*10000.f))<2);
317  assert(std::abs(std::round(beta*10000.f)-std::round(beta_*10000.f))<2);
318  */
319 }
320 
321 //------------------------------------------------------------------------
323  auto i = det.index();
324  //cout << "get parameters of detector " << i << endl;
325  assert(i < int(m_DetParams.size()));
326  //if (i>=int(m_DetParams.size())) m_DetParams.resize(i+1); // should never happen!
327  const DetParam& p = m_DetParams[i];
328  return p;
329 }
330 
331 //-----------------------------------------------------------------------------
332 // Drift direction.
333 // Works OK for barrel and forward.
334 // The formulas used for dir_x,y,z have to be exactly the same as the ones
335 // used in the digitizer (SiPixelDigitizerAlgorithm.cc).
336 // &&& PM: needs to be consolidated, discuss with PS.
337 //-----------------------------------------------------------------------------
339  Frame detFrame(theDetParam.theDet->surface().position(), theDetParam.theDet->surface().rotation());
340  LocalVector Bfield = detFrame.toLocal(bfield);
341  return driftDirection(theDetParam, Bfield);
342 }
343 
345  // Use LA from DB or from config
346  float langle = 0.;
347  if (!useLAOffsetFromConfig_) { // get it from DB
348  if (lorentzAngle_ != nullptr) { // a real LA object
349  langle = lorentzAngle_->getLorentzAngle(theDetParam.theDet->geographicalId().rawId());
350  LogDebug("PixelCPEBase::driftDirection()")
351  << " la " << langle << " " << theDetParam.theDet->geographicalId().rawId() << endl;
352  } else { // no LA, unused
353  langle = 0; // set to a fake value
354  LogDebug("PixelCPEBase::driftDirection()") << " LA object is NULL, assume LA = 0" << endl; //dk
355  }
356  LogDebug("PixelCPEBase::driftDirection()") << " Will use LA Offset from DB " << langle << endl;
357  } else { // from config file
358  langle = lAOffset_;
359  LogDebug("PixelCPEBase::driftDirection()") << " Will use LA Offset from config " << langle << endl;
360  }
361 
362  // Now do the LA width stuff
363  theDetParam.widthLAFractionX = 1.; // predefine to 1 (default) if things fail
364  theDetParam.widthLAFractionY = 1.;
365 
366  // Compute the charge width, generic only
367  if (theFlag_ == 0) {
368  if (useLAWidthFromDB_ && (lorentzAngleWidth_ != nullptr)) {
369  // take it from a separate, special LA DB object (forWidth)
370 
371  auto langleWidth = lorentzAngleWidth_->getLorentzAngle(theDetParam.theDet->geographicalId().rawId());
372  if (langleWidth != 0.0)
373  theDetParam.widthLAFractionX = std::abs(langleWidth / langle);
374  // leave the widthLAFractionY=1.
375  //cout<<" LAWidth lorentz width "<<theDetParam.widthLAFractionX<<" "<<theDetParam.widthLAFractionY<<endl;
376 
377  } else if (useLAWidthFromConfig_) { // get from config
378 
379  double lAWidth = 0;
381  lAWidth = lAWidthBPix_; // barrel
382  else
383  lAWidth = lAWidthFPix_;
384 
385  if (langle != 0.0)
386  theDetParam.widthLAFractionX = std::abs(lAWidth / langle);
387  // fix the FractionY at 1
388 
389  //cout<<" Lorentz width from config "<<theDetParam.widthLAFractionX<<" "<<theDetParam.widthLAFractionY<<endl;
390 
391  } else { // get if from the offset LA (old method used until 2013)
392  // do nothing
393  //cout<<" Old default LA width method "<<theDetParam.widthLAFractionX<<" "<<theDetParam.widthLAFractionY<<endl;
394  }
395 
396  //cout<<" Final LA fraction "<<theDetParam.widthLAFractionX<<" "<<theDetParam.widthLAFractionY<<endl;
397 
398  } // if flag
399 
400  float alpha2 = alpha2Order ? langle * langle : 0; //
401 
402  // **********************************************************************
403  // Our convention is the following:
404  // +x is defined by the direction of the Lorentz drift!
405  // +z is defined by the direction of E field (so electrons always go into -z!)
406  // +y is defined by +x and +z, and it turns out to be always opposite to the +B field.
407  // **********************************************************************
408 
409  float dir_x = -(langle * Bfield.y() + alpha2 * Bfield.z() * Bfield.x());
410  float dir_y = (langle * Bfield.x() - alpha2 * Bfield.z() * Bfield.y());
411  float dir_z = -(1.f + alpha2 * Bfield.z() * Bfield.z());
412  auto scale = 1.f / std::abs(dir_z); // same as 1 + alpha2*Bfield.z()*Bfield.z()
413  LocalVector dd(dir_x * scale, dir_y * scale, -1.f); // last is -1 !
414 
415  LogDebug("PixelCPEBase") << " The drift direction in local coordinate is " << dd;
416 
417  return dd;
418 }
419 
420 //-----------------------------------------------------------------------------
421 // One-shot computation of the driftDirection and both lorentz shifts
422 //-----------------------------------------------------------------------------
424  // Max shift (at the other side of the sensor) in cm
425  theDetParam.lorentzShiftInCmX =
426  theDetParam.driftDirection.x() / theDetParam.driftDirection.z() * theDetParam.theThickness; //
427  theDetParam.lorentzShiftInCmY =
428  theDetParam.driftDirection.y() / theDetParam.driftDirection.z() * theDetParam.theThickness; //
429 
430  LogDebug("PixelCPEBase::computeLorentzShifts()")
431  << " lorentzShiftsInCmX,Y = " << theDetParam.lorentzShiftInCmX << " " << theDetParam.lorentzShiftInCmY << " "
432  << theDetParam.driftDirection;
433 }
434 
435 //-----------------------------------------------------------------------------
440 //-----------------------------------------------------------------------------
443  if (theClusterParam.hasFilledProb_) {
444  float probabilityXY = 0;
445  if (theClusterParam.filled_from_2d)
446  probabilityXY = theClusterParam.probabilityX_;
447  else if (theClusterParam.probabilityX_ != 0 && theClusterParam.probabilityY_ != 0)
448  probabilityXY = theClusterParam.probabilityX_ * theClusterParam.probabilityY_ *
449  (1.f - std::log(theClusterParam.probabilityX_ * theClusterParam.probabilityY_));
450  SiPixelRecHitQuality::thePacking.setProbabilityXY(probabilityXY, qualWord);
451 
453  }
454  SiPixelRecHitQuality::thePacking.setQBin(theClusterParam.qBin_, qualWord);
455 
456  SiPixelRecHitQuality::thePacking.setIsOnEdge(theClusterParam.isOnEdge_, qualWord);
457 
459 
461 
463 
464  return qualWord;
465 }
466 
468  desc.add<bool>("LoadTemplatesFromDB", true);
469  desc.add<bool>("Alpha2Order", true);
470  desc.add<int>("ClusterProbComputationFlag", 0);
471  desc.add<bool>("useLAWidthFromDB", true);
472  desc.add<double>("lAOffset", 0.0);
473  desc.add<double>("lAWidthBPix", 0.0);
474  desc.add<double>("lAWidthFPix", 0.0);
475  desc.add<bool>("doLorentzFromAlignment", false);
476  desc.add<bool>("useLAFromDB", true);
477 }
static const Packing thePacking
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
Local3DPoint theOrigin
Definition: PixelCPEBase.h:54
void computeAnglesFromTrajectory(DetParam const &theDetParam, ClusterParam &theClusterParam, const LocalTrajectoryParameters &ltp) const
virtual LocalPoint localPosition(const MeasurementPoint &) const =0
const SiPixelLorentzAngle * lorentzAngleWidth_
Definition: PixelCPEBase.h:234
T z() const
Definition: PV3DBase.h:61
void computeAnglesFromDetPosition(DetParam const &theDetParam, ClusterParam &theClusterParam) const
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
int index() const
Definition: GeomDet.h:83
const SiPixelCluster * theCluster
Definition: PixelCPEBase.h:76
int maxPixelRow() const
bool isBarrel(GeomDetEnumerators::SubDetector m)
unsigned int offsetDU(SubDetector sid) const
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
void setHasBadPixels(bool flag, QualWordType &qualWord) const
DetParams m_DetParams
Definition: PixelCPEBase.h:282
bool containsBigPixelInY(int iymin, int iymax) const override
static void fillPSetDescription(edm::ParameterSetDescription &desc)
const DetContainer & detUnits() const override
Returm a vector of all GeomDet.
void fillDetParams()
bool doLorentzFromAlignment_
Definition: PixelCPEBase.h:242
assert(be >=bs)
const PixelGeomDetUnit * theDet
Definition: PixelCPEBase.h:47
GeomDetType::SubDetector thePart
Definition: PixelCPEBase.h:53
string dd
Definition: createTree.py:154
const RectangularPixelTopology * theRecTopol
Definition: PixelCPEBase.h:50
bool useLAWidthFromDB_
Definition: PixelCPEBase.h:223
int minPixelRow() const
bool containsBigPixelInX(int ixmin, int ixmax) const override
void setSpansTwoROCs(bool flag, QualWordType &qualWord) const
float lAWidthBPix_
Definition: PixelCPEBase.h:218
void computeLorentzShifts(DetParam &) const
T getUntrackedParameter(std::string const &, T const &) const
bool useLAWidthFromConfig_
Definition: PixelCPEBase.h:222
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
Measurement2DPoint MeasurementPoint
Measurement points are two-dimensional by default.
const PixelTopology * theTopol
Definition: PixelCPEBase.h:49
SiPixelRecHitQuality::QualWordType rawQualityWord(ClusterParam &theClusterParam) const
void setIsOnEdge(bool flag, QualWordType &qualWord) const
bool LoadTemplatesFromDB_
Definition: PixelCPEBase.h:243
int minPixelCol() const
short getGenErrorID(const uint32_t &detid) const
int maxPixelCol() const
void setHasFilledProb(bool flag, QualWordType &qualWord) const
constexpr float Bfield
Definition: Config.h:53
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const SiPixelTemplateDBObject * templateDBobject_
Definition: PixelCPEBase.h:237
void setQBin(int qbin, QualWordType &qualWord) const
double f[11][100]
const MagneticField * magfield_
Definition: PixelCPEBase.h:229
DetId geographicalId() const
The label of this GeomDet.
Definition: GeomDet.h:64
void setProbabilityQ(float prob, QualWordType &qualWord) const
Topology::LocalTrackPred loc_trk_pred
Definition: PixelCPEBase.h:90
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
const PositionType & position() const
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
const SiPixelLorentzAngle * lorentzAngle_
Definition: PixelCPEBase.h:233
const SiPixelGenErrorDBObject * genErrorDBObject_
Definition: PixelCPEBase.h:236
short getTemplateID(const uint32_t &detid) const
LocalVector driftDirection(DetParam &theDetParam, GlobalVector bfield) const
DetParam const & detParam(const GeomDetUnit &det) const
bool useLAOffsetFromConfig_
Definition: PixelCPEBase.h:221
float y() const
const TrackerGeometry & geom_
Definition: PixelCPEBase.h:230
PixelCPEBase(edm::ParameterSet const &conf, const MagneticField *mag, const TrackerGeometry &geom, const TrackerTopology &ttopo, const SiPixelLorentzAngle *lorentzAngle, const SiPixelGenErrorDBObject *genErrorDBObject, const SiPixelTemplateDBObject *templateDBobject, const SiPixelLorentzAngle *lorentzAngleWidth, int flag=0)
Definition: PixelCPEBase.cc:30
float x() const
LocalVector driftDirection
Definition: PixelCPEBase.h:61
const RotationType & rotation() const
LocalPoint position() const
Local x and y position coordinates.
float getLorentzAngle(const uint32_t &) const
bool isTrackerPixel(GeomDetEnumerators::SubDetector m)
void setProbabilityXY(float prob, QualWordType &qualWord) const
constexpr SubDetector tkDetEnum[8]
float lAWidthFPix_
Definition: PixelCPEBase.h:219
void setTheClu(DetParam const &, ClusterParam &theClusterParam) const
#define LogDebug(id)