CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Static Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Private Member Functions
PixelCPEBase Class Referenceabstract

#include <PixelCPEBase.h>

Inheritance diagram for PixelCPEBase:
PixelClusterParameterEstimator PixelCPEClusterRepair PixelCPEGeneric PixelCPETemplateReco

Classes

struct  ClusterParam
 
struct  DetParam
 

Public Member Functions

ReturnType getParameters (const SiPixelCluster &cl, const GeomDetUnit &det) const override
 
ReturnType getParameters (const SiPixelCluster &cl, const GeomDetUnit &det, const LocalTrajectoryParameters &ltp) const override
 
 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)
 
- Public Member Functions inherited from PixelClusterParameterEstimator
unsigned int clusterProbComputationFlag () const
 
virtual ReturnType getParameters (const SiPixelCluster &cl, const GeomDetUnit &det, const TrajectoryStateOnSurface &tsos) const
 
virtual VLocalValues localParametersV (const SiPixelCluster &cluster, const GeomDetUnit &gd) const
 
virtual VLocalValues localParametersV (const SiPixelCluster &cluster, const GeomDetUnit &gd, TrajectoryStateOnSurface &tsos) const
 
 PixelClusterParameterEstimator ()
 
virtual ~PixelClusterParameterEstimator ()
 

Static Public Member Functions

static void fillPSetDescription (edm::ParameterSetDescription &desc)
 

Protected Types

using DetParams = std::vector< DetParam >
 
typedef GloballyPositioned< double > Frame
 

Protected Member Functions

void computeAnglesFromDetPosition (DetParam const &theDetParam, ClusterParam &theClusterParam) const
 
void computeAnglesFromTrajectory (DetParam const &theDetParam, ClusterParam &theClusterParam, const LocalTrajectoryParameters &ltp) const
 
void computeLorentzShifts (DetParam &) const
 
DetParam const & detParam (const GeomDetUnit &det) const
 
LocalVector driftDirection (DetParam &theDetParam, GlobalVector bfield) const
 
LocalVector driftDirection (DetParam &theDetParam, LocalVector bfield) const
 
void setTheClu (DetParam const &, ClusterParam &theClusterParam) const
 

Protected Attributes

bool alpha2Order
 
bool DoLorentz_
 
const SiPixelGenErrorDBObjectgenErrorDBObject_
 
const TrackerGeometrygeom_
 
float lAOffset_
 
float lAWidthBPix_
 
float lAWidthFPix_
 
bool LoadTemplatesFromDB_
 
const SiPixelLorentzAnglelorentzAngle_
 
const SiPixelLorentzAnglelorentzAngleWidth_
 
DetParams m_DetParams = DetParams(1440)
 
const MagneticFieldmagfield_
 
const SiPixelTemplateDBObjecttemplateDBobject_
 
int theFlag_
 
int theVerboseLevel
 
const TrackerTopologyttopo_
 
bool useLAOffsetFromConfig_
 
bool useLAWidthFromConfig_
 
bool useLAWidthFromDB_
 
- Protected Attributes inherited from PixelClusterParameterEstimator
unsigned int clusterProbComputationFlag_
 

Private Member Functions

virtual std::unique_ptr< ClusterParamcreateClusterParam (const SiPixelCluster &cl) const =0
 
void fillDetParams ()
 
virtual LocalError localError (DetParam const &theDetParam, ClusterParam &theClusterParam) const =0
 
virtual LocalPoint localPosition (DetParam const &theDetParam, ClusterParam &theClusterParam) const =0
 
SiPixelRecHitQuality::QualWordType rawQualityWord (ClusterParam &theClusterParam) const
 

Additional Inherited Members

- Public Types inherited from PixelClusterParameterEstimator
typedef std::pair< LocalPoint, LocalErrorLocalValues
 
using ReturnType = std::tuple< LocalPoint, LocalError, SiPixelRecHitQuality::QualWordType >
 
typedef std::vector< LocalValuesVLocalValues
 

Detailed Description

Definition at line 54 of file PixelCPEBase.h.

Member Typedef Documentation

◆ DetParams

using PixelCPEBase::DetParams = std::vector<DetParam>
protected

Definition at line 276 of file PixelCPEBase.h.

◆ Frame

typedef GloballyPositioned<double> PixelCPEBase::Frame
protected

Definition at line 213 of file PixelCPEBase.h.

Constructor & Destructor Documentation

◆ PixelCPEBase()

PixelCPEBase::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 at line 30 of file PixelCPEBase.cc.

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 (different from SiPixelCPEGenericErrorParm) 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  DoLorentz_ = conf.getParameter<bool>("DoLorentz");
110 
111  LogDebug("PixelCPEBase") << " LA constants - " << lAOffset_ << " " << lAWidthBPix_ << " " << lAWidthFPix_
112  << endl; //dk
113 
114  fillDetParams();
115 }

References alpha2Order, PixelClusterParameterEstimator::clusterProbComputationFlag_, DoLorentz_, fillDetParams(), genErrorDBObject_, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), createfilelist::int, lAOffset_, lAWidthBPix_, lAWidthFPix_, LoadTemplatesFromDB_, LogDebug, lorentzAngle_, lorentzAngleWidth_, templateDBobject_, theFlag_, theVerboseLevel, useLAOffsetFromConfig_, useLAWidthFromConfig_, and useLAWidthFromDB_.

Member Function Documentation

◆ computeAnglesFromDetPosition()

void PixelCPEBase::computeAnglesFromDetPosition ( DetParam const &  theDetParam,
ClusterParam theClusterParam 
) const
protected

Definition at line 289 of file PixelCPEBase.cc.

289  {
290  LocalPoint lp = theDetParam.theTopol->localPosition(
291  MeasurementPoint(theClusterParam.theCluster->x(), theClusterParam.theCluster->y()));
292  auto gvx = lp.x() - theDetParam.theOrigin.x();
293  auto gvy = lp.y() - theDetParam.theOrigin.y();
294  auto gvz = -1.f / theDetParam.theOrigin.z();
295  //--- Note that the normalization is not required as only the ratio used
296 
297  //theClusterParam.zneg = (gvz < 0); // Not used, AH
298 
299  // calculate angles
300  theClusterParam.cotalpha = gvx * gvz;
301  theClusterParam.cotbeta = gvy * gvz;
302 
303  theClusterParam.with_track_angle = false;
304 
305  /*
306  // used only in dberror param...
307  auto alpha = HALF_PI - std::atan(cotalpha_);
308  auto beta = HALF_PI - std::atan(cotbeta_);
309  if (zneg) { beta -=PI; alpha -=PI;}
310 
311  auto alpha_ = atan2( gv_dot_gvz, gv_dot_gvx );
312  auto beta_ = atan2( gv_dot_gvz, gv_dot_gvy );
313 
314  assert(std::abs(std::round(alpha*10000.f)-std::round(alpha_*10000.f))<2);
315  assert(std::abs(std::round(beta*10000.f)-std::round(beta_*10000.f))<2);
316  */
317 }

References PixelCPEBase::ClusterParam::cotalpha, PixelCPEBase::ClusterParam::cotbeta, Topology::localPosition(), PixelCPEBase::ClusterParam::theCluster, PixelCPEBase::DetParam::theOrigin, PixelCPEBase::DetParam::theTopol, PixelCPEBase::ClusterParam::with_track_angle, PV3DBase< T, PVType, FrameType >::x(), SiPixelCluster::x(), PV3DBase< T, PVType, FrameType >::y(), SiPixelCluster::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by getParameters().

◆ computeAnglesFromTrajectory()

void PixelCPEBase::computeAnglesFromTrajectory ( DetParam const &  theDetParam,
ClusterParam theClusterParam,
const LocalTrajectoryParameters ltp 
) const
protected

Definition at line 255 of file PixelCPEBase.cc.

257  {
258  theClusterParam.cotalpha = ltp.dxdz();
259  theClusterParam.cotbeta = ltp.dydz();
260 
261  LocalPoint trk_lp = ltp.position();
262  theClusterParam.trk_lp_x = trk_lp.x();
263  theClusterParam.trk_lp_y = trk_lp.y();
264 
265  theClusterParam.with_track_angle = true;
266 
267  // GG: needed to correct for bows/kinks
268  theClusterParam.loc_trk_pred = Topology::LocalTrackPred(
269  theClusterParam.trk_lp_x, theClusterParam.trk_lp_y, theClusterParam.cotalpha, theClusterParam.cotbeta);
270 }

References PixelCPEBase::ClusterParam::cotalpha, PixelCPEBase::ClusterParam::cotbeta, LocalTrajectoryParameters::dxdz(), LocalTrajectoryParameters::dydz(), PixelCPEBase::ClusterParam::loc_trk_pred, LocalTrajectoryParameters::position(), PixelCPEBase::ClusterParam::trk_lp_x, PixelCPEBase::ClusterParam::trk_lp_y, PixelCPEBase::ClusterParam::with_track_angle, PV3DBase< T, PVType, FrameType >::x(), and PV3DBase< T, PVType, FrameType >::y().

Referenced by getParameters().

◆ computeLorentzShifts()

void PixelCPEBase::computeLorentzShifts ( DetParam theDetParam) const
protected

Definition at line 421 of file PixelCPEBase.cc.

421  {
422  // Max shift (at the other side of the sensor) in cm
423  theDetParam.lorentzShiftInCmX =
424  theDetParam.driftDirection.x() / theDetParam.driftDirection.z() * theDetParam.theThickness; //
425  theDetParam.lorentzShiftInCmY =
426  theDetParam.driftDirection.y() / theDetParam.driftDirection.z() * theDetParam.theThickness; //
427 
428  LogDebug("PixelCPEBase::computeLorentzShifts()")
429  << " lorentzShiftsInCmX,Y = " << theDetParam.lorentzShiftInCmX << " " << theDetParam.lorentzShiftInCmY << " "
430  << theDetParam.driftDirection;
431 }

References PixelCPEBase::DetParam::driftDirection, LogDebug, PixelCPEBase::DetParam::lorentzShiftInCmX, PixelCPEBase::DetParam::lorentzShiftInCmY, PixelCPEBase::DetParam::theThickness, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by fillDetParams().

◆ createClusterParam()

virtual std::unique_ptr<ClusterParam> PixelCPEBase::createClusterParam ( const SiPixelCluster cl) const
privatepure virtual

◆ detParam()

PixelCPEBase::DetParam const & PixelCPEBase::detParam ( const GeomDetUnit det) const
protected

Definition at line 320 of file PixelCPEBase.cc.

320  {
321  auto i = det.index();
322  //cout << "get parameters of detector " << i << endl;
323  assert(i < int(m_DetParams.size()));
324  //if (i>=int(m_DetParams.size())) m_DetParams.resize(i+1); // should never happen!
325  const DetParam& p = m_DetParams[i];
326  return p;
327 }

References cms::cuda::assert(), mps_fire::i, GeomDet::index(), m_DetParams, and AlCaHLTBitMon_ParallelJobs::p.

Referenced by getParameters().

◆ driftDirection() [1/2]

LocalVector PixelCPEBase::driftDirection ( DetParam theDetParam,
GlobalVector  bfield 
) const
protected

Definition at line 336 of file PixelCPEBase.cc.

336  {
337  Frame detFrame(theDetParam.theDet->surface().position(), theDetParam.theDet->surface().rotation());
338  LocalVector Bfield = detFrame.toLocal(bfield);
339  return driftDirection(theDetParam, Bfield);
340 }

References GloballyPositioned< T >::position(), GloballyPositioned< T >::rotation(), GeomDet::surface(), and PixelCPEBase::DetParam::theDet.

Referenced by fillDetParams().

◆ driftDirection() [2/2]

LocalVector PixelCPEBase::driftDirection ( DetParam theDetParam,
LocalVector  bfield 
) const
protected

Definition at line 342 of file PixelCPEBase.cc.

342  {
343  // Use LA from DB or from config
344  float langle = 0.;
345  if (!useLAOffsetFromConfig_) { // get it from DB
346  if (lorentzAngle_ != nullptr) { // a real LA object
347  langle = lorentzAngle_->getLorentzAngle(theDetParam.theDet->geographicalId().rawId());
348  LogDebug("PixelCPEBase::driftDirection()")
349  << " la " << langle << " " << theDetParam.theDet->geographicalId().rawId() << endl;
350  } else { // no LA, unused
351  langle = 0; // set to a fake value
352  LogDebug("PixelCPEBase::driftDirection()") << " LA object is NULL, assume LA = 0" << endl; //dk
353  }
354  LogDebug("PixelCPEBase::driftDirection()") << " Will use LA Offset from DB " << langle << endl;
355  } else { // from config file
356  langle = lAOffset_;
357  LogDebug("PixelCPEBase::driftDirection()") << " Will use LA Offset from config " << langle << endl;
358  }
359 
360  // Now do the LA width stuff
361  theDetParam.widthLAFractionX = 1.; // predefine to 1 (default) if things fail
362  theDetParam.widthLAFractionY = 1.;
363 
364  // Compute the charge width, generic only
365  if (theFlag_ == 0) {
366  if (useLAWidthFromDB_ && (lorentzAngleWidth_ != nullptr)) {
367  // take it from a separate, special LA DB object (forWidth)
368 
369  auto langleWidth = lorentzAngleWidth_->getLorentzAngle(theDetParam.theDet->geographicalId().rawId());
370  if (langleWidth != 0.0)
371  theDetParam.widthLAFractionX = std::abs(langleWidth / langle);
372  // leave the widthLAFractionY=1.
373  //cout<<" LAWidth lorentz width "<<theDetParam.widthLAFractionX<<" "<<theDetParam.widthLAFractionY<<endl;
374 
375  } else if (useLAWidthFromConfig_) { // get from config
376 
377  double lAWidth = 0;
378  if (GeomDetEnumerators::isTrackerPixel(theDetParam.thePart) && GeomDetEnumerators::isBarrel(theDetParam.thePart))
379  lAWidth = lAWidthBPix_; // barrel
380  else
381  lAWidth = lAWidthFPix_;
382 
383  if (langle != 0.0)
384  theDetParam.widthLAFractionX = std::abs(lAWidth / langle);
385  // fix the FractionY at 1
386 
387  //cout<<" Lorentz width from config "<<theDetParam.widthLAFractionX<<" "<<theDetParam.widthLAFractionY<<endl;
388 
389  } else { // get if from the offset LA (old method used until 2013)
390  // do nothing
391  //cout<<" Old default LA width method "<<theDetParam.widthLAFractionX<<" "<<theDetParam.widthLAFractionY<<endl;
392  }
393 
394  //cout<<" Final LA fraction "<<theDetParam.widthLAFractionX<<" "<<theDetParam.widthLAFractionY<<endl;
395 
396  } // if flag
397 
398  float alpha2 = alpha2Order ? langle * langle : 0; //
399 
400  // **********************************************************************
401  // Our convention is the following:
402  // +x is defined by the direction of the Lorentz drift!
403  // +z is defined by the direction of E field (so electrons always go into -z!)
404  // +y is defined by +x and +z, and it turns out to be always opposite to the +B field.
405  // **********************************************************************
406 
407  float dir_x = -(langle * Bfield.y() + alpha2 * Bfield.z() * Bfield.x());
408  float dir_y = (langle * Bfield.x() - alpha2 * Bfield.z() * Bfield.y());
409  float dir_z = -(1.f + alpha2 * Bfield.z() * Bfield.z());
410  auto scale = 1.f / std::abs(dir_z); // same as 1 + alpha2*Bfield.z()*Bfield.z()
411  LocalVector dd(dir_x * scale, dir_y * scale, -1.f); // last is -1 !
412 
413  LogDebug("PixelCPEBase") << " The drift direction in local coordinate is " << dd;
414 
415  return dd;
416 }

References funct::abs(), alpha2Order, createTree::dd, f, GeomDet::geographicalId(), SiPixelLorentzAngle::getLorentzAngle(), GeomDetEnumerators::isBarrel(), GeomDetEnumerators::isTrackerPixel(), lAOffset_, lAWidthBPix_, lAWidthFPix_, LogDebug, lorentzAngle_, lorentzAngleWidth_, DetId::rawId(), Scenarios_cff::scale, PixelCPEBase::DetParam::theDet, theFlag_, PixelCPEBase::DetParam::thePart, useLAOffsetFromConfig_, useLAWidthFromConfig_, useLAWidthFromDB_, PixelCPEBase::DetParam::widthLAFractionX, PixelCPEBase::DetParam::widthLAFractionY, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

◆ fillDetParams()

void PixelCPEBase::fillDetParams ( )
private

Definition at line 120 of file PixelCPEBase.cc.

120  {
121  // 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
122  // the Outer Tracker (Strips in case of the Phase-0/1 detector).
123 
124  auto const& dus = geom_.detUnits();
125  unsigned m_detectors = dus.size();
126  for (unsigned int i = 1; i < 7; ++i) {
127  LogDebug("PixelCPEBase:: LookingForFirstStrip")
128  << "Subdetector " << i << " GeomDetEnumerator " << GeomDetEnumerators::tkDetEnum[i] << " offset "
129  << geom_.offsetDU(GeomDetEnumerators::tkDetEnum[i]) << " is it strip? "
130  << (geom_.offsetDU(GeomDetEnumerators::tkDetEnum[i]) != dus.size()
131  ? dus[geom_.offsetDU(GeomDetEnumerators::tkDetEnum[i])]->type().isOuterTracker()
132  : false);
133 
134  if (geom_.offsetDU(GeomDetEnumerators::tkDetEnum[i]) != dus.size() &&
135  dus[geom_.offsetDU(GeomDetEnumerators::tkDetEnum[i])]->type().isOuterTracker()) {
136  if (geom_.offsetDU(GeomDetEnumerators::tkDetEnum[i]) < m_detectors) {
138  }
139  }
140  }
141  LogDebug("LookingForFirstStrip") << " Chosen offset: " << m_detectors;
142 
143  m_DetParams.resize(m_detectors);
144  LogDebug("PixelCPEBase::fillDetParams():") << "caching " << m_detectors << " pixel detectors" << endl;
145  for (unsigned i = 0; i != m_detectors; ++i) {
146  auto& p = m_DetParams[i];
147  p.theDet = dynamic_cast<const PixelGeomDetUnit*>(dus[i]);
148  assert(p.theDet);
149  assert(p.theDet->index() == int(i));
150 
151  p.theOrigin = p.theDet->surface().toLocal(GlobalPoint(0, 0, 0));
152 
153  //--- p.theDet->type() returns a GeomDetType, which implements subDetector()
154  p.thePart = p.theDet->type().subDetector();
155 
156  //--- The location in of this DetUnit in a cyllindrical coord system (R,Z)
157  //--- The call goes via BoundSurface, returned by p.theDet->surface(), but
158  //--- position() is implemented in GloballyPositioned<> template
159  //--- ( BoundSurface : Surface : GloballyPositioned<float> )
160  //p.theDetR = p.theDet->surface().position().perp(); //Not used, AH
161  //p.theDetZ = p.theDet->surface().position().z(); //Not used, AH
162  //--- Define parameters for chargewidth calculation
163 
164  //--- bounds() is implemented in BoundSurface itself.
165  p.theThickness = p.theDet->surface().bounds().thickness();
166 
167  // Cache the det id for templates and generic erros
168 
169  if (theFlag_ == 0) { // for generic
170  if (LoadTemplatesFromDB_) // do only if genError requested
171  p.detTemplateId = genErrorDBObject_->getGenErrorID(p.theDet->geographicalId().rawId());
172  } else { // for templates
173  p.detTemplateId = templateDBobject_->getTemplateID(p.theDet->geographicalId());
174  }
175 
176  auto topol = &(p.theDet->specificTopology());
177  p.theTopol = topol;
178  auto const proxyT = dynamic_cast<const ProxyPixelTopology*>(p.theTopol);
179  if (proxyT)
180  p.theRecTopol = dynamic_cast<const RectangularPixelTopology*>(&(proxyT->specificTopology()));
181  else
182  p.theRecTopol = dynamic_cast<const RectangularPixelTopology*>(p.theTopol);
183  assert(p.theRecTopol);
184 
185  //--- The geometrical description of one module/plaquette
186  //p.theNumOfRow = p.theRecTopol->nrows(); // rows in x //Not used, AH. PM: leave commented out.
187  //p.theNumOfCol = p.theRecTopol->ncolumns(); // cols in y //Not used, AH. PM: leave commented out.
188  std::pair<float, float> pitchxy = p.theRecTopol->pitch();
189  p.thePitchX = pitchxy.first; // pitch along x
190  p.thePitchY = pitchxy.second; // pitch along y
191 
192  LocalVector Bfield = p.theDet->surface().toLocal(magfield_->inTesla(p.theDet->surface().position()));
193  p.bz = Bfield.z();
194  p.bx = Bfield.x();
195 
196  //--- Compute the Lorentz shifts for this detector element
197  if ((theFlag_ == 0) || DoLorentz_) { // do always for generic and if(DOLorentz) for templates
198  p.driftDirection = driftDirection(p, Bfield);
200  }
201 
202  LogDebug("PixelCPEBase::fillDetParams()") << "***** PIXEL LAYOUT *****"
203  << " thePart = " << p.thePart << " theThickness = " << p.theThickness
204  << " thePitchX = " << p.thePitchX << " thePitchY = " << p.thePitchY;
205  // << " theLShiftX = " << p.theLShiftX;
206  }
207 }

References cms::cuda::assert(), computeLorentzShifts(), TrackerGeometry::detUnits(), DoLorentz_, driftDirection(), genErrorDBObject_, geom_, SiPixelGenErrorDBObject::getGenErrorID(), SiPixelTemplateDBObject::getTemplateID(), mps_fire::i, createfilelist::int, MagneticField::inTesla(), LoadTemplatesFromDB_, LogDebug, m_DetParams, magfield_, TrackerGeometry::offsetDU(), AlCaHLTBitMon_ParallelJobs::p, templateDBobject_, theFlag_, GeomDetEnumerators::tkDetEnum, PV3DBase< T, PVType, FrameType >::x(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by PixelCPEBase().

◆ fillPSetDescription()

void PixelCPEBase::fillPSetDescription ( edm::ParameterSetDescription desc)
static

Definition at line 465 of file PixelCPEBase.cc.

465  {
466  desc.add<bool>("LoadTemplatesFromDB", true);
467  desc.add<bool>("Alpha2Order", true);
468  desc.add<int>("ClusterProbComputationFlag", 0);
469  desc.add<bool>("useLAWidthFromDB", true);
470  desc.add<double>("lAOffset", 0.0);
471  desc.add<double>("lAWidthBPix", 0.0);
472  desc.add<double>("lAWidthFPix", 0.0);
473 }

References edm::ParameterSetDescription::add().

Referenced by PixelCPETemplateRecoESProducer::fillDescriptions(), PixelCPEClusterRepairESProducer::fillDescriptions(), and PixelCPEGenericESProducer::fillDescriptions().

◆ getParameters() [1/2]

ReturnType PixelCPEBase::getParameters ( const SiPixelCluster cl,
const GeomDetUnit det 
) const
inlineoverridevirtual

Implements PixelClusterParameterEstimator.

Definition at line 143 of file PixelCPEBase.h.

143  {
144 #ifdef EDM_ML_DEBUG
145  nRecHitsTotal_++;
146  //std::cout<<" in PixelCPEBase:localParameters(all) - "<<nRecHitsTotal_<<std::endl; //dk
147 #endif
148 
149  DetParam const& theDetParam = detParam(det);
150  std::unique_ptr<ClusterParam> theClusterParam = createClusterParam(cl);
151  setTheClu(theDetParam, *theClusterParam);
152  computeAnglesFromDetPosition(theDetParam, *theClusterParam);
153 
154  // localPosition( cl, det ) must be called before localError( cl, det ) !!!
155  LocalPoint lp = localPosition(theDetParam, *theClusterParam);
156  LocalError le = localError(theDetParam, *theClusterParam);
157  SiPixelRecHitQuality::QualWordType rqw = rawQualityWord(*theClusterParam);
158  auto tuple = std::make_tuple(lp, le, rqw);
159 
160  //std::cout<<" in PixelCPEBase:localParameters(all) - "<<lp.x()<<" "<<lp.y()<<std::endl; //dk
161  return tuple;
162  }

References GetRecoTauVFromDQM_MC_cff::cl, computeAnglesFromDetPosition(), createClusterParam(), detParam(), localError(), localPosition(), rawQualityWord(), and setTheClu().

Referenced by cms::SiPixelRecHitConverter::run().

◆ getParameters() [2/2]

ReturnType PixelCPEBase::getParameters ( const SiPixelCluster cl,
const GeomDetUnit det,
const LocalTrajectoryParameters ltp 
) const
inlineoverridevirtual

Implements PixelClusterParameterEstimator.

Definition at line 167 of file PixelCPEBase.h.

169  {
170 #ifdef EDM_ML_DEBUG
171  nRecHitsTotal_++;
172  //std::cout<<" in PixelCPEBase:localParameters(on track) - "<<nRecHitsTotal_<<std::endl; //dk
173 #endif
174 
175  DetParam const& theDetParam = detParam(det);
176  std::unique_ptr<ClusterParam> theClusterParam = createClusterParam(cl);
177  setTheClu(theDetParam, *theClusterParam);
178  computeAnglesFromTrajectory(theDetParam, *theClusterParam, ltp);
179 
180  // localPosition( cl, det ) must be called before localError( cl, det ) !!!
181  LocalPoint lp = localPosition(theDetParam, *theClusterParam);
182  LocalError le = localError(theDetParam, *theClusterParam);
183  SiPixelRecHitQuality::QualWordType rqw = rawQualityWord(*theClusterParam);
184  auto tuple = std::make_tuple(lp, le, rqw);
185 
186  //std::cout<<" in PixelCPEBase:localParameters(on track) - "<<lp.x()<<" "<<lp.y()<<std::endl; //dk
187  return tuple;
188  }

References GetRecoTauVFromDQM_MC_cff::cl, computeAnglesFromTrajectory(), createClusterParam(), detParam(), localError(), localPosition(), rawQualityWord(), and setTheClu().

◆ localError()

virtual LocalError PixelCPEBase::localError ( DetParam const &  theDetParam,
ClusterParam theClusterParam 
) const
privatepure virtual

◆ localPosition()

virtual LocalPoint PixelCPEBase::localPosition ( DetParam const &  theDetParam,
ClusterParam theClusterParam 
) const
privatepure virtual

◆ rawQualityWord()

SiPixelRecHitQuality::QualWordType PixelCPEBase::rawQualityWord ( ClusterParam theClusterParam) const
private

A convenience method to fill a whole SiPixelRecHitQuality word in one shot. This way, we can keep the details of what is filled within the pixel code and not expose the Transient SiPixelRecHit to it as well. The name of this function is chosen to match the one in SiPixelRecHit.

Definition at line 439 of file PixelCPEBase.cc.

439  {
441  if (theClusterParam.hasFilledProb_) {
442  float probabilityXY = 0;
443  if (theClusterParam.filled_from_2d)
444  probabilityXY = theClusterParam.probabilityX_;
445  else if (theClusterParam.probabilityX_ != 0 && theClusterParam.probabilityY_ != 0)
446  probabilityXY = theClusterParam.probabilityX_ * theClusterParam.probabilityY_ *
447  (1.f - std::log(theClusterParam.probabilityX_ * theClusterParam.probabilityY_));
448  SiPixelRecHitQuality::thePacking.setProbabilityXY(probabilityXY, qualWord);
449 
450  SiPixelRecHitQuality::thePacking.setProbabilityQ(theClusterParam.probabilityQ_, qualWord);
451  }
452  SiPixelRecHitQuality::thePacking.setQBin(theClusterParam.qBin_, qualWord);
453 
454  SiPixelRecHitQuality::thePacking.setIsOnEdge(theClusterParam.isOnEdge_, qualWord);
455 
456  SiPixelRecHitQuality::thePacking.setHasBadPixels(theClusterParam.hasBadPixels_, qualWord);
457 
458  SiPixelRecHitQuality::thePacking.setSpansTwoROCs(theClusterParam.spansTwoROCs_, qualWord);
459 
460  SiPixelRecHitQuality::thePacking.setHasFilledProb(theClusterParam.hasFilledProb_, qualWord);
461 
462  return qualWord;
463 }

References PixelCPEBase::ClusterParam::filled_from_2d, PixelCPEBase::ClusterParam::hasBadPixels_, PixelCPEBase::ClusterParam::hasFilledProb_, PixelCPEBase::ClusterParam::isOnEdge_, dqm-mbProfile::log, PixelCPEBase::ClusterParam::probabilityQ_, PixelCPEBase::ClusterParam::probabilityX_, PixelCPEBase::ClusterParam::probabilityY_, PixelCPEBase::ClusterParam::qBin_, SiPixelRecHitQuality::Packing::setHasBadPixels(), SiPixelRecHitQuality::Packing::setHasFilledProb(), SiPixelRecHitQuality::Packing::setIsOnEdge(), SiPixelRecHitQuality::Packing::setProbabilityQ(), SiPixelRecHitQuality::Packing::setProbabilityXY(), SiPixelRecHitQuality::Packing::setQBin(), SiPixelRecHitQuality::Packing::setSpansTwoROCs(), PixelCPEBase::ClusterParam::spansTwoROCs_, and SiPixelRecHitQuality::thePacking.

Referenced by getParameters().

◆ setTheClu()

void PixelCPEBase::setTheClu ( DetParam const &  theDetParam,
ClusterParam theClusterParam 
) const
protected

Definition at line 212 of file PixelCPEBase.cc.

212  {
213  //--- Geometric Quality Information
214  int minInX, minInY, maxInX, maxInY = 0;
215  minInX = theClusterParam.theCluster->minPixelRow();
216  minInY = theClusterParam.theCluster->minPixelCol();
217  maxInX = theClusterParam.theCluster->maxPixelRow();
218  maxInY = theClusterParam.theCluster->maxPixelCol();
219 
220  int min_row(0), min_col(0);
221  int max_row = theDetParam.theRecTopol->nrows() - 1;
222  int max_col = theDetParam.theRecTopol->ncolumns() - 1;
223 
224  if (minInX == min_row)
225  theClusterParam.edgeTypeX_ = 1;
226  else if (maxInX == max_row)
227  theClusterParam.edgeTypeX_ = 2;
228  else
229  theClusterParam.edgeTypeX_ = 0;
230 
231  if (minInY == min_col)
232  theClusterParam.edgeTypeY_ = 1;
233  else if (maxInY == max_col)
234  theClusterParam.edgeTypeY_ = 2;
235  else
236  theClusterParam.edgeTypeY_ = 0;
237 
238  theClusterParam.isOnEdge_ = (theClusterParam.edgeTypeX_ || theClusterParam.edgeTypeY_);
239 
240  // &&& FOR NOW UNUSED. KEEP IT IN CASE WE WANT TO USE IT IN THE FUTURE
241  // Bad Pixels have their charge set to 0 in the clusterizer
242  //hasBadPixels_ = false;
243  //for(unsigned int i=0; i<theClusterParam.theCluster->pixelADC().size(); ++i) {
244  //if(theClusterParam.theCluster->pixelADC()[i] == 0) { hasBadPixels_ = true; break;}
245  //}
246 
247  theClusterParam.spansTwoROCs_ = theDetParam.theRecTopol->containsBigPixelInX(minInX, maxInX) |
248  theDetParam.theRecTopol->containsBigPixelInY(minInY, maxInY);
249 }

References RectangularPixelTopology::containsBigPixelInX(), RectangularPixelTopology::containsBigPixelInY(), PixelCPEBase::ClusterParam::edgeTypeX_, PixelCPEBase::ClusterParam::edgeTypeY_, PixelCPEBase::ClusterParam::isOnEdge_, SiPixelCluster::maxPixelCol(), SiPixelCluster::maxPixelRow(), SiPixelCluster::minPixelCol(), SiPixelCluster::minPixelRow(), RectangularPixelTopology::ncolumns(), RectangularPixelTopology::nrows(), PixelCPEBase::ClusterParam::spansTwoROCs_, PixelCPEBase::ClusterParam::theCluster, and PixelCPEBase::DetParam::theRecTopol.

Referenced by getParameters().

Member Data Documentation

◆ alpha2Order

bool PixelCPEBase::alpha2Order
protected

Definition at line 249 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

◆ DoLorentz_

bool PixelCPEBase::DoLorentz_
protected

◆ genErrorDBObject_

const SiPixelGenErrorDBObject* PixelCPEBase::genErrorDBObject_
protected

Definition at line 245 of file PixelCPEBase.h.

Referenced by fillDetParams(), PixelCPEBase(), and PixelCPEGeneric::PixelCPEGeneric().

◆ geom_

const TrackerGeometry& PixelCPEBase::geom_
protected

Definition at line 239 of file PixelCPEBase.h.

Referenced by PixelCPEClusterRepair::fill2DTemplIDs(), and fillDetParams().

◆ lAOffset_

float PixelCPEBase::lAOffset_
protected

Definition at line 226 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

◆ lAWidthBPix_

float PixelCPEBase::lAWidthBPix_
protected

Definition at line 227 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

◆ lAWidthFPix_

float PixelCPEBase::lAWidthFPix_
protected

Definition at line 228 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

◆ LoadTemplatesFromDB_

bool PixelCPEBase::LoadTemplatesFromDB_
protected

◆ lorentzAngle_

const SiPixelLorentzAngle* PixelCPEBase::lorentzAngle_
protected

Definition at line 242 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

◆ lorentzAngleWidth_

const SiPixelLorentzAngle* PixelCPEBase::lorentzAngleWidth_
protected

Definition at line 243 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

◆ m_DetParams

DetParams PixelCPEBase::m_DetParams = DetParams(1440)
protected

Definition at line 278 of file PixelCPEBase.h.

Referenced by detParam(), PixelCPEClusterRepair::fill2DTemplIDs(), and fillDetParams().

◆ magfield_

const MagneticField* PixelCPEBase::magfield_
protected

Definition at line 238 of file PixelCPEBase.h.

Referenced by fillDetParams().

◆ templateDBobject_

const SiPixelTemplateDBObject* PixelCPEBase::templateDBobject_
protected

◆ theFlag_

int PixelCPEBase::theFlag_
protected

Definition at line 236 of file PixelCPEBase.h.

Referenced by driftDirection(), fillDetParams(), and PixelCPEBase().

◆ theVerboseLevel

int PixelCPEBase::theVerboseLevel
protected

◆ ttopo_

const TrackerTopology& PixelCPEBase::ttopo_
protected

◆ useLAOffsetFromConfig_

bool PixelCPEBase::useLAOffsetFromConfig_
protected

Definition at line 230 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

◆ useLAWidthFromConfig_

bool PixelCPEBase::useLAWidthFromConfig_
protected

Definition at line 231 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

◆ useLAWidthFromDB_

bool PixelCPEBase::useLAWidthFromDB_
protected

Definition at line 232 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

Vector3DBase< float, LocalTag >
PixelCPEBase::useLAOffsetFromConfig_
bool useLAOffsetFromConfig_
Definition: PixelCPEBase.h:230
PixelCPEBase::Frame
GloballyPositioned< double > Frame
Definition: PixelCPEBase.h:213
MagneticField::inTesla
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
PixelCPEBase::templateDBobject_
const SiPixelTemplateDBObject * templateDBobject_
Definition: PixelCPEBase.h:248
mps_fire.i
i
Definition: mps_fire.py:355
edm::ParameterSetDescription::add
ParameterDescriptionBase * add(U const &iLabel, T const &value)
Definition: ParameterSetDescription.h:95
LocalTrajectoryParameters::dxdz
float dxdz() const
Definition: LocalTrajectoryParameters.h:159
f
double f[11][100]
Definition: MuScleFitUtils.cc:78
PV3DBase::x
T x() const
Definition: PV3DBase.h:59
PixelClusterParameterEstimator::clusterProbComputationFlag_
unsigned int clusterProbComputationFlag_
Definition: PixelClusterParameterEstimator.h:68
PixelCPEBase::genErrorDBObject_
const SiPixelGenErrorDBObject * genErrorDBObject_
Definition: PixelCPEBase.h:245
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
SiPixelRecHitQuality::Packing::setSpansTwoROCs
void setSpansTwoROCs(bool flag, QualWordType &qualWord) const
Definition: SiPixelRecHitQuality.h:157
PixelCPEBase::ttopo_
const TrackerTopology & ttopo_
Definition: PixelCPEBase.h:240
PixelCPEBase::useLAWidthFromDB_
bool useLAWidthFromDB_
Definition: PixelCPEBase.h:232
LocalTrajectoryParameters::dydz
float dydz() const
Definition: LocalTrajectoryParameters.h:160
cms::cuda::assert
assert(be >=bs)
SiPixelRecHitQuality::Packing::setIsOnEdge
void setIsOnEdge(bool flag, QualWordType &qualWord) const
Definition: SiPixelRecHitQuality.h:153
PixelCPEBase::createClusterParam
virtual std::unique_ptr< ClusterParam > createClusterParam(const SiPixelCluster &cl) const =0
PixelCPEBase::driftDirection
LocalVector driftDirection(DetParam &theDetParam, GlobalVector bfield) const
Definition: PixelCPEBase.cc:336
PixelCPEBase::geom_
const TrackerGeometry & geom_
Definition: PixelCPEBase.h:239
GeomDet::index
int index() const
Definition: GeomDet.h:83
PixelCPEBase::theFlag_
int theFlag_
Definition: PixelCPEBase.h:236
PixelCPEBase::alpha2Order
bool alpha2Order
Definition: PixelCPEBase.h:249
PixelCPEBase::detParam
DetParam const & detParam(const GeomDetUnit &det) const
Definition: PixelCPEBase.cc:320
PixelCPEBase::computeAnglesFromTrajectory
void computeAnglesFromTrajectory(DetParam const &theDetParam, ClusterParam &theClusterParam, const LocalTrajectoryParameters &ltp) const
Definition: PixelCPEBase.cc:255
PV3DBase::z
T z() const
Definition: PV3DBase.h:61
SiPixelLorentzAngle::getLorentzAngle
float getLorentzAngle(const uint32_t &) const
Definition: SiPixelLorentzAngle.cc:14
GetRecoTauVFromDQM_MC_cff.cl
cl
Definition: GetRecoTauVFromDQM_MC_cff.py:38
PixelCPEBase::localError
virtual LocalError localError(DetParam const &theDetParam, ClusterParam &theClusterParam) const =0
LocalTrajectoryParameters::position
LocalPoint position() const
Local x and y position coordinates.
Definition: LocalTrajectoryParameters.h:85
SiPixelRecHitQuality::thePacking
static const Packing thePacking
Definition: SiPixelRecHitQuality.h:166
TrackerGeometry::detUnits
const DetContainer & detUnits() const override
Returm a vector of all GeomDet.
Definition: TrackerGeometry.h:61
PixelCPEBase::m_DetParams
DetParams m_DetParams
Definition: PixelCPEBase.h:278
SiPixelRecHitQuality::QualWordType
unsigned int QualWordType
Definition: SiPixelRecHitQuality.h:10
GeomDetEnumerators::tkDetEnum
constexpr SubDetector tkDetEnum[8]
Definition: GeomDetEnumerators.h:37
Topology::LocalTrackPred
Definition: Topology.h:56
relativeConstraints.geom
geom
Definition: relativeConstraints.py:72
GlobalPoint
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
SiPixelRecHitQuality::Packing::setQBin
void setQBin(int qbin, QualWordType &qualWord) const
Definition: SiPixelRecHitQuality.h:144
PixelCPEBase::useLAWidthFromConfig_
bool useLAWidthFromConfig_
Definition: PixelCPEBase.h:231
Point3DBase< float, LocalTag >
createTree.dd
string dd
Definition: createTree.py:154
SiPixelGenErrorDBObject::getGenErrorID
short getGenErrorID(const uint32_t &detid) const
Definition: SiPixelGenErrorDBObject.h:89
MeasurementPoint
Measurement2DPoint MeasurementPoint
Measurement points are two-dimensional by default.
Definition: MeasurementPoint.h:12
Scenarios_cff.scale
scale
Definition: Scenarios_cff.py:2186
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:670
PixelCPEBase::setTheClu
void setTheClu(DetParam const &, ClusterParam &theClusterParam) const
Definition: PixelCPEBase.cc:212
LocalError
Definition: LocalError.h:12
SiPixelRecHitQuality::Packing::setHasBadPixels
void setHasBadPixels(bool flag, QualWordType &qualWord) const
Definition: SiPixelRecHitQuality.h:154
PixelCPEBase::lorentzAngle_
const SiPixelLorentzAngle * lorentzAngle_
Definition: PixelCPEBase.h:242
PixelCPEBase::lAWidthFPix_
float lAWidthFPix_
Definition: PixelCPEBase.h:228
PV3DBase::y
T y() const
Definition: PV3DBase.h:60
createfilelist.int
int
Definition: createfilelist.py:10
GeomDetEnumerators::isTrackerPixel
bool isTrackerPixel(GeomDetEnumerators::SubDetector m)
Definition: GeomDetEnumerators.cc:68
PixelCPEBase::theVerboseLevel
int theVerboseLevel
Definition: PixelCPEBase.h:235
GeomDetEnumerators::isBarrel
bool isBarrel(GeomDetEnumerators::SubDetector m)
Definition: GeomDetEnumerators.cc:57
PixelCPEBase::DoLorentz_
bool DoLorentz_
Definition: PixelCPEBase.h:251
PixelCPEBase::lorentzAngleWidth_
const SiPixelLorentzAngle * lorentzAngleWidth_
Definition: PixelCPEBase.h:243
PixelCPEBase::LoadTemplatesFromDB_
bool LoadTemplatesFromDB_
Definition: PixelCPEBase.h:252
SiPixelTemplateDBObject::getTemplateID
short getTemplateID(const uint32_t &detid) const
Definition: SiPixelTemplateDBObject.h:131
PixelCPEBase::computeAnglesFromDetPosition
void computeAnglesFromDetPosition(DetParam const &theDetParam, ClusterParam &theClusterParam) const
Definition: PixelCPEBase.cc:289
PixelCPEBase::localPosition
virtual LocalPoint localPosition(DetParam const &theDetParam, ClusterParam &theClusterParam) const =0
mag
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
Definition: Basic3DVectorLD.h:127
SiPixelRecHitQuality::Packing::setProbabilityQ
void setProbabilityQ(float prob, QualWordType &qualWord) const
Definition: SiPixelRecHitQuality.h:132
PixelCPEBase::computeLorentzShifts
void computeLorentzShifts(DetParam &) const
Definition: PixelCPEBase.cc:421
dqm-mbProfile.log
log
Definition: dqm-mbProfile.py:17
PixelCPEBase::rawQualityWord
SiPixelRecHitQuality::QualWordType rawQualityWord(ClusterParam &theClusterParam) const
Definition: PixelCPEBase.cc:439
SiPixelRecHitQuality::Packing::setProbabilityXY
void setProbabilityXY(float prob, QualWordType &qualWord) const
Definition: SiPixelRecHitQuality.h:120
PixelCPEBase::lAWidthBPix_
float lAWidthBPix_
Definition: PixelCPEBase.h:227
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
PixelCPEBase::fillDetParams
void fillDetParams()
Definition: PixelCPEBase.cc:120
SiPixelRecHitQuality::Packing::setHasFilledProb
void setHasFilledProb(bool flag, QualWordType &qualWord) const
Definition: SiPixelRecHitQuality.h:160
TrackerGeometry::offsetDU
unsigned int offsetDU(SubDetector sid) const
Definition: TrackerGeometry.h:72
PixelCPEBase::magfield_
const MagneticField * magfield_
Definition: PixelCPEBase.h:238
RemoveAddSevLevel.flag
flag
Definition: RemoveAddSevLevel.py:116
PixelCPEBase::lAOffset_
float lAOffset_
Definition: PixelCPEBase.h:226