CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Classes | Public Member Functions | Static Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Static Protected Attributes | Private Member Functions
PixelCPEBase Class Referenceabstract

#include <PixelCPEBase.h>

Inheritance diagram for PixelCPEBase:
PixelClusterParameterEstimator PixelCPEClusterRepair PixelCPEGenericBase PixelCPETemplateReco PixelCPEFast PixelCPEGeneric PixelCPEGenericForBricked

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 doLorentzFromAlignment_
 
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 useLAFromDB_
 
bool useLAOffsetFromConfig_
 
bool useLAWidthFromConfig_
 
bool useLAWidthFromDB_
 
- Protected Attributes inherited from PixelClusterParameterEstimator
unsigned int clusterProbComputationFlag_
 

Static Protected Attributes

static constexpr float bothEdgeXError_ = 31.0f
 
static constexpr float bothEdgeYError_ = 90.0f
 
static constexpr float clusterSplitMaxError_ = 7777.7f
 
static constexpr float xEdgeXError_ = 23.0f
 
static constexpr float xEdgeYError_ = 39.0f
 
static constexpr float yEdgeXError_ = 24.0f
 
static constexpr float yEdgeYError_ = 96.0f
 

Private Member Functions

virtual std::unique_ptr
< ClusterParam
createClusterParam (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,
LocalError
LocalValues
 
using ReturnType = std::tuple< LocalPoint, LocalError, SiPixelRecHitQuality::QualWordType >
 
typedef std::vector< LocalValuesVLocalValues
 

Detailed Description

Definition at line 43 of file PixelCPEBase.h.

Member Typedef Documentation

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

Definition at line 279 of file PixelCPEBase.h.

typedef GloballyPositioned<double> PixelCPEBase::Frame
protected

Definition at line 203 of file PixelCPEBase.h.

Constructor & Destructor Documentation

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.

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

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 }
const SiPixelLorentzAngle * lorentzAngleWidth_
Definition: PixelCPEBase.h:233
void fillDetParams()
bool doLorentzFromAlignment_
Definition: PixelCPEBase.h:241
bool useLAWidthFromDB_
Definition: PixelCPEBase.h:222
float lAWidthBPix_
Definition: PixelCPEBase.h:217
bool useLAWidthFromConfig_
Definition: PixelCPEBase.h:221
bool LoadTemplatesFromDB_
Definition: PixelCPEBase.h:242
const SiPixelTemplateDBObject * templateDBobject_
Definition: PixelCPEBase.h:236
const MagneticField * magfield_
Definition: PixelCPEBase.h:228
const TrackerTopology & ttopo_
Definition: PixelCPEBase.h:230
const SiPixelLorentzAngle * lorentzAngle_
Definition: PixelCPEBase.h:232
const SiPixelGenErrorDBObject * genErrorDBObject_
Definition: PixelCPEBase.h:235
bool useLAOffsetFromConfig_
Definition: PixelCPEBase.h:220
const TrackerGeometry & geom_
Definition: PixelCPEBase.h:229
float lAWidthFPix_
Definition: PixelCPEBase.h:218
#define LogDebug(id)

Member Function Documentation

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

Definition at line 291 of file PixelCPEBase.cc.

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().

291  {
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 }
T y() const
Definition: PV3DBase.h:60
Measurement2DPoint MeasurementPoint
Measurement points are two-dimensional by default.
T x() const
Definition: PV3DBase.h:59
void PixelCPEBase::computeAnglesFromTrajectory ( DetParam const &  theDetParam,
ClusterParam theClusterParam,
const LocalTrajectoryParameters ltp 
) const
protected

Definition at line 257 of file PixelCPEBase.cc.

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().

259  {
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 }
LocalPoint position() const
Local x and y position coordinates.
T y() const
Definition: PV3DBase.h:60
T x() const
Definition: PV3DBase.h:59
void PixelCPEBase::computeLorentzShifts ( DetParam theDetParam) const
protected

Definition at line 423 of file PixelCPEBase.cc.

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().

423  {
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 }
#define LogDebug(id)
virtual std::unique_ptr<ClusterParam> PixelCPEBase::createClusterParam ( const SiPixelCluster cl) const
privatepure virtual
PixelCPEBase::DetParam const & PixelCPEBase::detParam ( const GeomDetUnit det) const
protected

Definition at line 322 of file PixelCPEBase.cc.

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

Referenced by getParameters().

322  {
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 }
DetParams m_DetParams
Definition: PixelCPEBase.h:281
assert(be >=bs)
int index() const
Definition: GeomDet.h:83
LocalVector PixelCPEBase::driftDirection ( DetParam theDetParam,
GlobalVector  bfield 
) const
protected

Definition at line 338 of file PixelCPEBase.cc.

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

Referenced by fillDetParams().

338  {
339  Frame detFrame(theDetParam.theDet->surface().position(), theDetParam.theDet->surface().rotation());
340  LocalVector Bfield = detFrame.toLocal(bfield);
341  return driftDirection(theDetParam, Bfield);
342 }
LocalVector driftDirection(DetParam &theDetParam, GlobalVector bfield) const
constexpr float Bfield
Definition: Config.h:88
GloballyPositioned< double > Frame
Definition: PixelCPEBase.h:203
LocalVector PixelCPEBase::driftDirection ( DetParam theDetParam,
LocalVector  bfield 
) const
protected

Definition at line 344 of file PixelCPEBase.cc.

References funct::abs(), alpha2Order, createTree::dd, validate-o2o-wbm::f, GeomDet::geographicalId(), SiPixelLorentzAngle::getLorentzAngle(), GeomDetEnumerators::isBarrel(), GeomDetEnumerators::isTrackerPixel(), lAOffset_, lAWidthBPix_, lAWidthFPix_, LogDebug, lorentzAngle_, lorentzAngleWidth_, DetId::rawId(), pileupReCalc_HLTpaths::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().

344  {
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;
380  if (GeomDetEnumerators::isTrackerPixel(theDetParam.thePart) && GeomDetEnumerators::isBarrel(theDetParam.thePart))
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 }
const SiPixelLorentzAngle * lorentzAngleWidth_
Definition: PixelCPEBase.h:233
bool isBarrel(GeomDetEnumerators::SubDetector m)
bool useLAWidthFromDB_
Definition: PixelCPEBase.h:222
float lAWidthBPix_
Definition: PixelCPEBase.h:217
bool useLAWidthFromConfig_
Definition: PixelCPEBase.h:221
constexpr float Bfield
Definition: Config.h:88
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const SiPixelLorentzAngle * lorentzAngle_
Definition: PixelCPEBase.h:232
bool useLAOffsetFromConfig_
Definition: PixelCPEBase.h:220
float getLorentzAngle(const uint32_t &) const
bool isTrackerPixel(GeomDetEnumerators::SubDetector m)
float lAWidthFPix_
Definition: PixelCPEBase.h:218
#define LogDebug(id)
void PixelCPEBase::fillDetParams ( )
private

Definition at line 121 of file PixelCPEBase.cc.

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

Referenced by PixelCPEBase().

121  {
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) {
138  m_detectors = geom_.offsetDU(GeomDetEnumerators::tkDetEnum[i]);
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 }
LocalVector driftDirection(DetParam &theDetParam, GlobalVector bfield) const
short getTemplateID(const uint32_t &detid) const
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
DetParams m_DetParams
Definition: PixelCPEBase.h:281
const DetContainer & detUnits() const override
Returm a vector of all GeomDet.
short getGenErrorID(const uint32_t &detid) const
bool doLorentzFromAlignment_
Definition: PixelCPEBase.h:241
assert(be >=bs)
bool LoadTemplatesFromDB_
Definition: PixelCPEBase.h:242
unsigned int offsetDU(SubDetector sid) const
T z() const
Definition: PV3DBase.h:61
void computeLorentzShifts(DetParam &) const
constexpr float Bfield
Definition: Config.h:88
const SiPixelTemplateDBObject * templateDBobject_
Definition: PixelCPEBase.h:236
const MagneticField * magfield_
Definition: PixelCPEBase.h:228
const SiPixelGenErrorDBObject * genErrorDBObject_
Definition: PixelCPEBase.h:235
const TrackerGeometry & geom_
Definition: PixelCPEBase.h:229
T x() const
Definition: PV3DBase.h:59
constexpr SubDetector tkDetEnum[8]
#define LogDebug(id)
void PixelCPEBase::fillPSetDescription ( edm::ParameterSetDescription desc)
static

Definition at line 467 of file PixelCPEBase.cc.

References edm::ParameterSetDescription::add().

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

467  {
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 }
ParameterDescriptionBase * add(U const &iLabel, T const &value)
ReturnType PixelCPEBase::getParameters ( const SiPixelCluster cl,
const GeomDetUnit det 
) const
inlineoverridevirtual

Implements PixelClusterParameterEstimator.

Definition at line 133 of file PixelCPEBase.h.

References computeAnglesFromDetPosition(), createClusterParam(), detParam(), localError(), localPosition(), LogDebug, rawQualityWord(), setTheClu(), PV3DBase< T, PVType, FrameType >::x(), and PV3DBase< T, PVType, FrameType >::y().

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

133  {
134 #ifdef EDM_ML_DEBUG
135  nRecHitsTotal_++;
136  LogDebug("PixelCPEBase") << " in PixelCPEBase:localParameters(all) - " << nRecHitsTotal_;
137 #endif
138 
139  DetParam const& theDetParam = detParam(det);
140  std::unique_ptr<ClusterParam> theClusterParam = createClusterParam(cl);
141  setTheClu(theDetParam, *theClusterParam);
142  computeAnglesFromDetPosition(theDetParam, *theClusterParam);
143 
144  // localPosition( cl, det ) must be called before localError( cl, det ) !!!
145  LocalPoint lp = localPosition(theDetParam, *theClusterParam);
146  LocalError le = localError(theDetParam, *theClusterParam);
147  SiPixelRecHitQuality::QualWordType rqw = rawQualityWord(*theClusterParam);
148  auto tuple = std::make_tuple(lp, le, rqw);
149 
150  LogDebug("PixelCPEBase") << " in PixelCPEBase:localParameters(all) - " << lp.x() << " " << lp.y();
151  return tuple;
152  }
T y() const
Definition: PV3DBase.h:60
virtual LocalPoint localPosition(DetParam const &theDetParam, ClusterParam &theClusterParam) const =0
void computeAnglesFromDetPosition(DetParam const &theDetParam, ClusterParam &theClusterParam) const
SiPixelRecHitQuality::QualWordType rawQualityWord(ClusterParam &theClusterParam) const
virtual std::unique_ptr< ClusterParam > createClusterParam(const SiPixelCluster &cl) const =0
void setTheClu(DetParam const &, ClusterParam &theClusterParam) const
virtual LocalError localError(DetParam const &theDetParam, ClusterParam &theClusterParam) const =0
T x() const
Definition: PV3DBase.h:59
#define LogDebug(id)
DetParam const & detParam(const GeomDetUnit &det) const
ReturnType PixelCPEBase::getParameters ( const SiPixelCluster cl,
const GeomDetUnit det,
const LocalTrajectoryParameters ltp 
) const
inlineoverridevirtual

Implements PixelClusterParameterEstimator.

Definition at line 157 of file PixelCPEBase.h.

References computeAnglesFromTrajectory(), createClusterParam(), detParam(), localError(), localPosition(), LogDebug, rawQualityWord(), setTheClu(), PV3DBase< T, PVType, FrameType >::x(), and PV3DBase< T, PVType, FrameType >::y().

159  {
160 #ifdef EDM_ML_DEBUG
161  nRecHitsTotal_++;
162  LogDebug("PixelCPEBase") << " in PixelCPEBase:localParameters(on track) - " << nRecHitsTotal_;
163 #endif
164 
165  DetParam const& theDetParam = detParam(det);
166  std::unique_ptr<ClusterParam> theClusterParam = createClusterParam(cl);
167  setTheClu(theDetParam, *theClusterParam);
168  computeAnglesFromTrajectory(theDetParam, *theClusterParam, ltp);
169 
170  // localPosition( cl, det ) must be called before localError( cl, det ) !!!
171  LocalPoint lp = localPosition(theDetParam, *theClusterParam);
172  LocalError le = localError(theDetParam, *theClusterParam);
173  SiPixelRecHitQuality::QualWordType rqw = rawQualityWord(*theClusterParam);
174  auto tuple = std::make_tuple(lp, le, rqw);
175 
176  LogDebug("PixelCPEBase") << " in PixelCPEBase:localParameters(on track) - " << lp.x() << " " << lp.y();
177  return tuple;
178  }
T y() const
Definition: PV3DBase.h:60
void computeAnglesFromTrajectory(DetParam const &theDetParam, ClusterParam &theClusterParam, const LocalTrajectoryParameters &ltp) const
virtual LocalPoint localPosition(DetParam const &theDetParam, ClusterParam &theClusterParam) const =0
SiPixelRecHitQuality::QualWordType rawQualityWord(ClusterParam &theClusterParam) const
virtual std::unique_ptr< ClusterParam > createClusterParam(const SiPixelCluster &cl) const =0
void setTheClu(DetParam const &, ClusterParam &theClusterParam) const
virtual LocalError localError(DetParam const &theDetParam, ClusterParam &theClusterParam) const =0
T x() const
Definition: PV3DBase.h:59
#define LogDebug(id)
DetParam const & detParam(const GeomDetUnit &det) const
virtual LocalError PixelCPEBase::localError ( DetParam const &  theDetParam,
ClusterParam theClusterParam 
) const
privatepure virtual
virtual LocalPoint PixelCPEBase::localPosition ( DetParam const &  theDetParam,
ClusterParam theClusterParam 
) const
privatepure virtual
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 441 of file PixelCPEBase.cc.

References PixelCPEBase::ClusterParam::filled_from_2d, PixelCPEBase::ClusterParam::hasBadPixels_, PixelCPEBase::ClusterParam::hasFilledProb_, PixelCPEBase::ClusterParam::isOnEdge_, 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().

441  {
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 
452  SiPixelRecHitQuality::thePacking.setProbabilityQ(theClusterParam.probabilityQ_, qualWord);
453  }
454  SiPixelRecHitQuality::thePacking.setQBin(theClusterParam.qBin_, qualWord);
455 
456  SiPixelRecHitQuality::thePacking.setIsOnEdge(theClusterParam.isOnEdge_, qualWord);
457 
458  SiPixelRecHitQuality::thePacking.setHasBadPixels(theClusterParam.hasBadPixels_, qualWord);
459 
460  SiPixelRecHitQuality::thePacking.setSpansTwoROCs(theClusterParam.spansTwoROCs_, qualWord);
461 
462  SiPixelRecHitQuality::thePacking.setHasFilledProb(theClusterParam.hasFilledProb_, qualWord);
463 
464  return qualWord;
465 }
void setProbabilityXY(float prob, QualWordType &qualWord) const
static const Packing thePacking
static std::vector< std::string > checklist log
void setHasBadPixels(bool flag, QualWordType &qualWord) const
void setProbabilityQ(float prob, QualWordType &qualWord) const
void setSpansTwoROCs(bool flag, QualWordType &qualWord) const
void setIsOnEdge(bool flag, QualWordType &qualWord) const
void setHasFilledProb(bool flag, QualWordType &qualWord) const
void setQBin(int qbin, QualWordType &qualWord) const
void PixelCPEBase::setTheClu ( DetParam const &  theDetParam,
ClusterParam theClusterParam 
) const
protected

Definition at line 214 of file PixelCPEBase.cc.

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().

214  {
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 }

Member Data Documentation

bool PixelCPEBase::alpha2Order
protected

Definition at line 237 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

constexpr float PixelCPEBase::bothEdgeXError_ = 31.0f
staticprotected
constexpr float PixelCPEBase::bothEdgeYError_ = 90.0f
staticprotected
constexpr float PixelCPEBase::clusterSplitMaxError_ = 7777.7f
staticprotected
bool PixelCPEBase::doLorentzFromAlignment_
protected
const SiPixelGenErrorDBObject* PixelCPEBase::genErrorDBObject_
protected
const TrackerGeometry& PixelCPEBase::geom_
protected

Definition at line 229 of file PixelCPEBase.h.

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

float PixelCPEBase::lAOffset_
protected

Definition at line 216 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

float PixelCPEBase::lAWidthBPix_
protected

Definition at line 217 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

float PixelCPEBase::lAWidthFPix_
protected

Definition at line 218 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

bool PixelCPEBase::LoadTemplatesFromDB_
protected
const SiPixelLorentzAngle* PixelCPEBase::lorentzAngle_
protected

Definition at line 232 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

const SiPixelLorentzAngle* PixelCPEBase::lorentzAngleWidth_
protected

Definition at line 233 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

DetParams PixelCPEBase::m_DetParams = DetParams(1440)
protected
const MagneticField* PixelCPEBase::magfield_
protected

Definition at line 228 of file PixelCPEBase.h.

Referenced by fillDetParams().

const SiPixelTemplateDBObject* PixelCPEBase::templateDBobject_
protected
int PixelCPEBase::theFlag_
protected

Definition at line 226 of file PixelCPEBase.h.

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

int PixelCPEBase::theVerboseLevel
protected
const TrackerTopology& PixelCPEBase::ttopo_
protected
bool PixelCPEBase::useLAFromDB_
protected

Definition at line 239 of file PixelCPEBase.h.

Referenced by fillDetParams(), and PixelCPEBase().

bool PixelCPEBase::useLAOffsetFromConfig_
protected

Definition at line 220 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

bool PixelCPEBase::useLAWidthFromConfig_
protected

Definition at line 221 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

bool PixelCPEBase::useLAWidthFromDB_
protected

Definition at line 222 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

constexpr float PixelCPEBase::xEdgeXError_ = 23.0f
staticprotected
constexpr float PixelCPEBase::xEdgeYError_ = 39.0f
staticprotected
constexpr float PixelCPEBase::yEdgeXError_ = 24.0f
staticprotected
constexpr float PixelCPEBase::yEdgeYError_ = 96.0f
staticprotected