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