CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes
PixelCPEGeneric Class Reference

#include <PixelCPEGeneric.h>

Inheritance diagram for PixelCPEGeneric:
PixelCPEGenericBase PixelCPEBase PixelClusterParameterEstimator

Public Member Functions

 PixelCPEGeneric (edm::ParameterSet const &conf, const MagneticField *, const TrackerGeometry &, const TrackerTopology &, const SiPixelLorentzAngle *, const SiPixelGenErrorDBObject *, const SiPixelLorentzAngle *)
 The constructor. More...
 
 ~PixelCPEGeneric () override=default
 
- Public Member Functions inherited from PixelCPEGenericBase
 PixelCPEGenericBase (edm::ParameterSet const &conf, const MagneticField *mag, const TrackerGeometry &geom, const TrackerTopology &ttopo, const SiPixelLorentzAngle *lorentzAngle, const SiPixelGenErrorDBObject *genErrorDBObject, const SiPixelLorentzAngle *lorentzAngleWidth)
 
 ~PixelCPEGenericBase () override=default
 
- Public Member Functions inherited from PixelCPEBase
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)
 
- Static Public Member Functions inherited from PixelCPEGenericBase
static void fillPSetDescription (edm::ParameterSetDescription &desc)
 
- Static Public Member Functions inherited from PixelCPEBase
static void fillPSetDescription (edm::ParameterSetDescription &desc)
 

Protected Member Functions

float err2X (bool &, int &) const
 
float err2Y (bool &, int &) const
 
LocalError localError (DetParam const &theDetParam, ClusterParam &theClusterParam) const override
 
LocalPoint localPosition (DetParam const &theDetParam, ClusterParam &theClusterParam) const override
 
- Protected Member Functions inherited from PixelCPEGenericBase
std::unique_ptr< ClusterParamcreateClusterParam (const SiPixelCluster &cl) const override
 
void initializeLocalErrorVariables (float &xerr, float &yerr, bool &edgex, bool &edgey, bool &bigInX, bool &bigInY, int &maxPixelCol, int &maxPixelRow, int &minPixelCol, int &minPixelRow, uint &sizex, uint &sizey, DetParam const &theDetParam, ClusterParamGeneric const &theClusterParam) const
 
void setXYErrors (float &xerr, float &yerr, const bool edgex, const bool edgey, const unsigned int sizex, const unsigned int sizey, const bool bigInX, const bool bigInY, const bool useTemplateErrors, DetParam const &theDetParam, ClusterParamGeneric const &theClusterParam) const
 
- Protected Member Functions inherited from PixelCPEBase
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 DoCosmics_
 
bool inflate_all_errors_no_trk_angle
 
bool inflate_errors
 
bool IrradiationBiasCorrection_
 
bool isPhase2_
 
bool NoTemplateErrorsWhenNoTrkAngles_
 
float the_eff_charge_cut_highX
 
float the_eff_charge_cut_highY
 
float the_eff_charge_cut_lowX
 
float the_eff_charge_cut_lowY
 
float the_size_cutX
 
float the_size_cutY
 
std::vector< SiPixelGenErrorStorethePixelGenError_
 
- Protected Attributes inherited from PixelCPEGenericBase
const float edgeClusterErrorX_
 
const float edgeClusterErrorY_
 
const bool truncatePixelCharge_
 
bool useErrorsFromTemplates_
 
const std::vector< float > xerr_barrel_l1_
 
const float xerr_barrel_l1_def_
 
const std::vector< float > xerr_barrel_ln_
 
const float xerr_barrel_ln_def_
 
const std::vector< float > xerr_endcap_
 
const float xerr_endcap_def_
 
const std::vector< float > yerr_barrel_l1_
 
const float yerr_barrel_l1_def_
 
const std::vector< float > yerr_barrel_ln_
 
const float yerr_barrel_ln_def_
 
const std::vector< float > yerr_endcap_
 
const float yerr_endcap_def_
 
- Protected Attributes inherited from PixelCPEBase
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_
 

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
 
- Protected Types inherited from PixelCPEBase
using DetParams = std::vector< DetParam >
 
typedef GloballyPositioned< double > Frame
 
- Static Protected Member Functions inherited from PixelCPEGenericBase
static void collect_edge_charges (ClusterParam &theClusterParam, int &q_f_X, int &q_l_X, int &q_f_Y, int &q_l_Y, bool truncate)
 
- Static Protected Attributes inherited from PixelCPEBase
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
 

Detailed Description

Definition at line 51 of file PixelCPEGeneric.h.

Constructor & Destructor Documentation

◆ PixelCPEGeneric()

PixelCPEGeneric::PixelCPEGeneric ( edm::ParameterSet const &  conf,
const MagneticField mag,
const TrackerGeometry geom,
const TrackerTopology ttopo,
const SiPixelLorentzAngle lorentzAngle,
const SiPixelGenErrorDBObject genErrorDBObject,
const SiPixelLorentzAngle lorentzAngleWidth = nullptr 
)

The constructor.

Definition at line 28 of file PixelCPEGeneric.cc.

References gather_cfg::cout, DoCosmics_, Exception, PixelCPEBase::genErrorDBObject_, edm::ParameterSet::getParameter(), inflate_all_errors_no_trk_angle, inflate_errors, createfilelist::int, IrradiationBiasCorrection_, isPhase2_, PixelCPEBase::LoadTemplatesFromDB_, LogDebug, NoTemplateErrorsWhenNoTrkAngles_, SiPixelGenError::pushfile(), the_eff_charge_cut_highX, the_eff_charge_cut_highY, the_eff_charge_cut_lowX, the_eff_charge_cut_lowY, the_size_cutX, the_size_cutY, thePixelGenError_, PixelCPEBase::theVerboseLevel, PixelCPEGenericBase::truncatePixelCharge_, and PixelCPEGenericBase::useErrorsFromTemplates_.

35  : PixelCPEGenericBase(conf, mag, geom, ttopo, lorentzAngle, genErrorDBObject, lorentzAngleWidth) {
36  if (theVerboseLevel > 0)
37  LogDebug("PixelCPEGeneric") << " constructing a generic algorithm for ideal pixel detector.\n"
38  << " CPEGeneric:: VerboseLevel = " << theVerboseLevel;
39 
40  // Externally settable cuts
41  the_eff_charge_cut_lowX = conf.getParameter<double>("eff_charge_cut_lowX");
42  the_eff_charge_cut_lowY = conf.getParameter<double>("eff_charge_cut_lowY");
43  the_eff_charge_cut_highX = conf.getParameter<double>("eff_charge_cut_highX");
44  the_eff_charge_cut_highY = conf.getParameter<double>("eff_charge_cut_highY");
45  the_size_cutX = conf.getParameter<double>("size_cutX");
46  the_size_cutY = conf.getParameter<double>("size_cutY");
47 
48  // Externally settable flags to inflate errors
49  inflate_errors = conf.getParameter<bool>("inflate_errors");
50  inflate_all_errors_no_trk_angle = conf.getParameter<bool>("inflate_all_errors_no_trk_angle");
51 
52  NoTemplateErrorsWhenNoTrkAngles_ = conf.getParameter<bool>("NoTemplateErrorsWhenNoTrkAngles");
53  IrradiationBiasCorrection_ = conf.getParameter<bool>("IrradiationBiasCorrection");
54  DoCosmics_ = conf.getParameter<bool>("DoCosmics");
55 
56  isPhase2_ = conf.getParameter<bool>("isPhase2");
57 
58  // For cosmics force the use of simple errors
59  if ((DoCosmics_))
61 
63  throw cms::Exception("PixelCPEGeneric::PixelCPEGeneric: ")
64  << "\nERROR: useErrorsFromTemplates_ is set to False in PixelCPEGeneric_cfi.py. "
65  << " In this case it does not make sense to set any of the following to True: "
66  << " truncatePixelCharge_, IrradiationBiasCorrection_, DoCosmics_, LoadTemplatesFromDB_ !!!"
67  << "\n\n";
68  }
69 
70  // Use errors from templates or from GenError
72  if (LoadTemplatesFromDB_) { // From DB
74  throw cms::Exception("InvalidCalibrationLoaded")
75  << "ERROR: GenErrors not filled correctly. Check the sqlite file. Using SiPixelTemplateDBObject version "
76  << (*genErrorDBObject_).version();
77  LogDebug("PixelCPEGeneric") << "Loaded genErrorDBObject v" << (*genErrorDBObject_).version();
78  } else { // From file
80  throw cms::Exception("InvalidCalibrationLoaded")
81  << "ERROR: GenErrors not loaded correctly from text file. Reconstruction will fail.";
82  } // if load from DB
83 
84  } else {
85 #ifdef EDM_ML_DEBUG
86  cout << " Use simple parametrised errors " << endl;
87 #endif
88  } // if ( useErrorsFromTemplates_ )
89 
90 #ifdef EDM_ML_DEBUG
91  cout << "From PixelCPEGeneric::PixelCPEGeneric(...)" << endl;
92  cout << "(int)useErrorsFromTemplates_ = " << (int)useErrorsFromTemplates_ << endl;
93  cout << "truncatePixelCharge_ = " << (int)truncatePixelCharge_ << endl;
94  cout << "IrradiationBiasCorrection_ = " << (int)IrradiationBiasCorrection_ << endl;
95  cout << "(int)DoCosmics_ = " << (int)DoCosmics_ << endl;
96  cout << "(int)LoadTemplatesFromDB_ = " << (int)LoadTemplatesFromDB_ << endl;
97 #endif
98 }
static bool pushfile(int filenum, std::vector< SiPixelGenErrorStore > &pixelTemp, std::string dir="")
float the_eff_charge_cut_highY
std::vector< SiPixelGenErrorStore > thePixelGenError_
bool IrradiationBiasCorrection_
bool NoTemplateErrorsWhenNoTrkAngles_
bool LoadTemplatesFromDB_
Definition: PixelCPEBase.h:241
float the_eff_charge_cut_lowX
bool inflate_all_errors_no_trk_angle
PixelCPEGenericBase(edm::ParameterSet const &conf, const MagneticField *mag, const TrackerGeometry &geom, const TrackerTopology &ttopo, const SiPixelLorentzAngle *lorentzAngle, const SiPixelGenErrorDBObject *genErrorDBObject, const SiPixelLorentzAngle *lorentzAngleWidth)
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
const SiPixelGenErrorDBObject * genErrorDBObject_
Definition: PixelCPEBase.h:234
float the_eff_charge_cut_lowY
#define LogDebug(id)
float the_eff_charge_cut_highX

◆ ~PixelCPEGeneric()

PixelCPEGeneric::~PixelCPEGeneric ( )
overridedefault

Member Function Documentation

◆ err2X()

float PixelCPEGeneric::err2X ( bool &  ,
int &   
) const
protected

◆ err2Y()

float PixelCPEGeneric::err2Y ( bool &  ,
int &   
) const
protected

◆ fillPSetDescription()

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

Definition at line 434 of file PixelCPEGeneric.cc.

References submitPVResolutionJobs::desc, and PixelCPEGenericBase::fillPSetDescription().

Referenced by PixelCPEGenericESProducer::fillDescriptions().

434  {
436  desc.add<double>("eff_charge_cut_highX", 1.0);
437  desc.add<double>("eff_charge_cut_highY", 1.0);
438  desc.add<double>("eff_charge_cut_lowX", 0.0);
439  desc.add<double>("eff_charge_cut_lowY", 0.0);
440  desc.add<double>("size_cutX", 3.0);
441  desc.add<double>("size_cutY", 3.0);
442  desc.add<double>("EdgeClusterErrorX", 50.0);
443  desc.add<double>("EdgeClusterErrorY", 85.0);
444  desc.add<bool>("inflate_errors", false);
445  desc.add<bool>("inflate_all_errors_no_trk_angle", false);
446  desc.add<bool>("NoTemplateErrorsWhenNoTrkAngles", false);
447  desc.add<bool>("UseErrorsFromTemplates", true);
448  desc.add<bool>("TruncatePixelCharge", true);
449  desc.add<bool>("IrradiationBiasCorrection", false);
450  desc.add<bool>("DoCosmics", false);
451  desc.add<bool>("isPhase2", false);
452  desc.add<bool>("SmallPitch", false);
453 }
static void fillPSetDescription(edm::ParameterSetDescription &desc)

◆ localError()

LocalError PixelCPEGeneric::localError ( DetParam const &  theDetParam,
ClusterParam theClusterParam 
) const
overrideprotectedvirtual

Implements PixelCPEBase.

Definition at line 348 of file PixelCPEGeneric.cc.

References Exception, f, ALCARECOEcalPhiSym_cff::float, HLTSiStripMonitoring_cff::inflate_errors, PixelTopology::isItBigPixelInX(), PixelTopology::isItBigPixelInY(), LogDebug, PixelCPEBase::ClusterParam::qBin_, mathSSE::sqrt(), PixelCPEBase::DetParam::thePitchX, PixelCPEBase::DetParam::thePitchY, PixelCPEBase::DetParam::theTopol, parallelization::uint, and PixelCPEBase::ClusterParam::with_track_angle.

348  {
349  ClusterParamGeneric& theClusterParam = static_cast<ClusterParamGeneric&>(theClusterParamBase);
350 
351  // local variables
352  float xerr, yerr;
353  bool edgex, edgey, bigInX, bigInY;
354  int maxPixelCol, maxPixelRow, minPixelCol, minPixelRow;
355  uint sizex, sizey;
356 
358  yerr,
359  edgex,
360  edgey,
361  bigInX,
362  bigInY,
363  maxPixelCol,
364  maxPixelRow,
365  minPixelCol,
366  minPixelRow,
367  sizex,
368  sizey,
369  theDetParam,
370  theClusterParam);
371 
372  bool useTempErrors =
373  useErrorsFromTemplates_ && (!NoTemplateErrorsWhenNoTrkAngles_ || theClusterParam.with_track_angle);
374 
375  if (int(sizex) != (maxPixelRow - minPixelRow + 1))
376  LogDebug("PixelCPEGeneric") << " wrong x";
377  if (int(sizey) != (maxPixelCol - minPixelCol + 1))
378  LogDebug("PixelCPEGeneric") << " wrong y";
379 
380  LogDebug("PixelCPEGeneric") << " edge clus " << xerr << " " << yerr; //dk
381  if (bigInX || bigInY)
382  LogDebug("PixelCPEGeneric") << " big " << bigInX << " " << bigInY;
383  if (edgex || edgey)
384  LogDebug("PixelCPEGeneric") << " edge " << edgex << " " << edgey;
385  LogDebug("PixelCPEGeneric") << " before if " << useErrorsFromTemplates_ << " " << theClusterParam.qBin_;
386  if (theClusterParam.qBin_ == 0)
387  LogDebug("PixelCPEGeneric") << " qbin 0! " << edgex << " " << edgey << " " << bigInX << " " << bigInY << " "
388  << sizex << " " << sizey;
389 
390  // from PixelCPEGenericBase
391  setXYErrors(xerr, yerr, edgex, edgey, sizex, sizey, bigInX, bigInY, useTempErrors, theDetParam, theClusterParam);
392 
393  if (!useTempErrors) {
394  LogDebug("PixelCPEGeneric") << "Track angles are not known.\n"
395  << "Default angle estimation which assumes track from PV (0,0,0) does not work.";
396  }
397 
398  if (!useTempErrors && inflate_errors) {
399  int n_bigx = 0;
400  int n_bigy = 0;
401 
402  for (int irow = 0; irow < 7; ++irow) {
403  if (theDetParam.theTopol->isItBigPixelInX(irow + minPixelRow))
404  ++n_bigx;
405  }
406 
407  for (int icol = 0; icol < 21; ++icol) {
408  if (theDetParam.theTopol->isItBigPixelInY(icol + minPixelCol))
409  ++n_bigy;
410  }
411 
412  xerr = (float)(sizex + n_bigx) * theDetParam.thePitchX / std::sqrt(12.0f);
413  yerr = (float)(sizey + n_bigy) * theDetParam.thePitchY / std::sqrt(12.0f);
414  }
415 
416 #ifdef EDM_ML_DEBUG
417  if (!(xerr > 0.0))
418  throw cms::Exception("PixelCPEGeneric::localError") << "\nERROR: Negative pixel error xerr = " << xerr << "\n\n";
419 
420  if (!(yerr > 0.0))
421  throw cms::Exception("PixelCPEGeneric::localError") << "\nERROR: Negative pixel error yerr = " << yerr << "\n\n";
422 #endif
423 
424  LogDebug("PixelCPEGeneric") << " errors " << xerr << " " << yerr; //dk
425  if (theClusterParam.qBin_ == 0)
426  LogDebug("PixelCPEGeneric") << " qbin 0 " << xerr << " " << yerr;
427 
428  auto xerr_sq = xerr * xerr;
429  auto yerr_sq = yerr * yerr;
430 
431  return LocalError(xerr_sq, 0, yerr_sq);
432 }
bool NoTemplateErrorsWhenNoTrkAngles_
T sqrt(T t)
Definition: SSEVec.h:23
double f[11][100]
void setXYErrors(float &xerr, float &yerr, const bool edgex, const bool edgey, const unsigned int sizex, const unsigned int sizey, const bool bigInX, const bool bigInY, const bool useTemplateErrors, DetParam const &theDetParam, ClusterParamGeneric const &theClusterParam) const
void initializeLocalErrorVariables(float &xerr, float &yerr, bool &edgex, bool &edgey, bool &bigInX, bool &bigInY, int &maxPixelCol, int &maxPixelRow, int &minPixelCol, int &minPixelRow, uint &sizex, uint &sizey, DetParam const &theDetParam, ClusterParamGeneric const &theClusterParam) const
#define LogDebug(id)

◆ localPosition()

LocalPoint PixelCPEGeneric::localPosition ( DetParam const &  theDetParam,
ClusterParam theClusterParamBase 
) const
overrideprotectedvirtual

Hit position in the local frame (in cm). Unlike other CPE's, this one converts everything from the measurement frame (in channel numbers) into the local frame (in centimeters).

< Q of the first pixel in X

< Q of the last pixel in X

< Q of the first pixel in Y

< Q of the last pixel in Y

Implements PixelCPEBase.

Definition at line 105 of file PixelCPEGeneric.cc.

References PixelCPEBase::DetParam::bx, PixelCPEBase::DetParam::bz, SiPixelCluster::charge(), PixelCPEBase::ClusterParam::cotalpha, PixelCPEBase::ClusterParam::cotbeta, gather_cfg::cout, PixelCPEGenericBase::ClusterParamGeneric::deltax, PixelCPEGenericBase::ClusterParamGeneric::deltay, PixelCPEBase::DetParam::detTemplateId, PixelCPEGenericBase::ClusterParamGeneric::dx1, PixelCPEGenericBase::ClusterParamGeneric::dx2, PixelCPEGenericBase::ClusterParamGeneric::dy1, PixelCPEGenericBase::ClusterParamGeneric::dy2, siPixelUtils::generic_position_formula(), PixelTopology::isItBigPixelInX(), PixelTopology::isItBigPixelInY(), PixelCPEBase::ClusterParam::loc_trk_pred, Topology::localPosition(), LogDebug, PixelCPEBase::DetParam::lorentzShiftInCmX, PixelCPEBase::DetParam::lorentzShiftInCmY, SiPixelGenError::lorxwidth(), SiPixelGenError::lorywidth(), SiPixelCluster::maxPixelCol(), SiPixelCluster::maxPixelRow(), pixelCPEforDevice::micronsToCm, SiPixelCluster::minPixelCol(), SiPixelCluster::minPixelRow(), PixelTopology::pixelFractionInX(), PixelTopology::pixelFractionInY(), PixelCPEGenericBase::ClusterParamGeneric::pixmx, SiPixelGenError::qbin(), PixelCPEBase::ClusterParam::qBin_, PixelCPEGenericBase::ClusterParamGeneric::sigmax, PixelCPEGenericBase::ClusterParamGeneric::sigmay, SiPixelCluster::sizeX(), SiPixelCluster::sizeY(), PixelCPEGenericBase::ClusterParamGeneric::sx1, PixelCPEGenericBase::ClusterParamGeneric::sx2, PixelCPEGenericBase::ClusterParamGeneric::sy1, PixelCPEGenericBase::ClusterParamGeneric::sy2, PixelCPEBase::ClusterParam::theCluster, PixelCPEBase::DetParam::thePitchX, PixelCPEBase::DetParam::thePitchY, PixelCPEBase::DetParam::theThickness, PixelCPEBase::DetParam::theTopol, theVerboseLevel, PixelCPEBase::DetParam::widthLAFractionX, PixelCPEBase::DetParam::widthLAFractionY, PixelCPEBase::ClusterParam::with_track_angle, PV2DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::x(), SiPixelCluster::x(), PV2DBase< T, PVType, FrameType >::y(), PV3DBase< T, PVType, FrameType >::y(), and SiPixelCluster::y().

105  {
106  ClusterParamGeneric& theClusterParam = static_cast<ClusterParamGeneric&>(theClusterParamBase);
107 
108  //cout<<" in PixelCPEGeneric:localPosition - "<<endl; //dk
109 
110  float chargeWidthX = (theDetParam.lorentzShiftInCmX * theDetParam.widthLAFractionX);
111  float chargeWidthY = (theDetParam.lorentzShiftInCmY * theDetParam.widthLAFractionY);
112  float shiftX = 0.5f * theDetParam.lorentzShiftInCmX;
113  float shiftY = 0.5f * theDetParam.lorentzShiftInCmY;
114 
115  //cout<<" main la width "<<chargeWidthX<<" "<<chargeWidthY<<endl;
116 
118  float qclus = theClusterParam.theCluster->charge();
119  float locBz = theDetParam.bz;
120  float locBx = theDetParam.bx;
121  //cout << "PixelCPEGeneric::localPosition(...) : locBz = " << locBz << endl;
122 
123  theClusterParam.pixmx = -999; // max pixel charge for truncation of 2-D cluster
124  theClusterParam.sigmay = -999.9; // CPE Generic y-error for multi-pixel cluster
125  theClusterParam.deltay = -999.9; // CPE Generic y-bias for multi-pixel cluster
126  theClusterParam.sigmax = -999.9; // CPE Generic x-error for multi-pixel cluster
127  theClusterParam.deltax = -999.9; // CPE Generic x-bias for multi-pixel cluster
128  theClusterParam.sy1 = -999.9; // CPE Generic y-error for single single-pixel
129  theClusterParam.dy1 = -999.9; // CPE Generic y-bias for single single-pixel cluster
130  theClusterParam.sy2 = -999.9; // CPE Generic y-error for single double-pixel cluster
131  theClusterParam.dy2 = -999.9; // CPE Generic y-bias for single double-pixel cluster
132  theClusterParam.sx1 = -999.9; // CPE Generic x-error for single single-pixel cluster
133  theClusterParam.dx1 = -999.9; // CPE Generic x-bias for single single-pixel cluster
134  theClusterParam.sx2 = -999.9; // CPE Generic x-error for single double-pixel cluster
135  theClusterParam.dx2 = -999.9; // CPE Generic x-bias for single double-pixel cluster
136 
138  int gtemplID_ = theDetParam.detTemplateId;
139 
140  //int gtemplID0 = genErrorDBObject_->getGenErrorID(theDetParam.theDet->geographicalId().rawId());
141  //if(gtemplID0!=gtemplID_) cout<<" different id "<< gtemplID_<<" "<<gtemplID0<<endl;
142 
143  theClusterParam.qBin_ = gtempl.qbin(gtemplID_,
144  theClusterParam.cotalpha,
145  theClusterParam.cotbeta,
146  locBz,
147  locBx,
148  qclus,
150  theClusterParam.pixmx,
151  theClusterParam.sigmay,
152  theClusterParam.deltay,
153  theClusterParam.sigmax,
154  theClusterParam.deltax,
155  theClusterParam.sy1,
156  theClusterParam.dy1,
157  theClusterParam.sy2,
158  theClusterParam.dy2,
159  theClusterParam.sx1,
160  theClusterParam.dx1,
161  theClusterParam.sx2,
162  theClusterParam.dx2);
163 
164  // now use the charge widths stored in the new generic template headers (change to the
165  // incorrect sign convention of the base class)
166  bool useLAWidthFromGenError = false;
167  if (useLAWidthFromGenError) {
168  chargeWidthX = (-micronsToCm * gtempl.lorxwidth());
169  chargeWidthY = (-micronsToCm * gtempl.lorywidth());
170  LogDebug("PixelCPE localPosition():") << "redefine la width (gen-error)" << chargeWidthX << chargeWidthY;
171  }
172  LogDebug("PixelCPE localPosition():") << "GenError:" << gtemplID_;
173 
174  // These numbers come in microns from the qbin(...) call. Transform them to cm.
175  theClusterParam.deltax = theClusterParam.deltax * micronsToCm;
176  theClusterParam.dx1 = theClusterParam.dx1 * micronsToCm;
177  theClusterParam.dx2 = theClusterParam.dx2 * micronsToCm;
178 
179  theClusterParam.deltay = theClusterParam.deltay * micronsToCm;
180  theClusterParam.dy1 = theClusterParam.dy1 * micronsToCm;
181  theClusterParam.dy2 = theClusterParam.dy2 * micronsToCm;
182 
183  theClusterParam.sigmax = theClusterParam.sigmax * micronsToCm;
184  theClusterParam.sx1 = theClusterParam.sx1 * micronsToCm;
185  theClusterParam.sx2 = theClusterParam.sx2 * micronsToCm;
186 
187  theClusterParam.sigmay = theClusterParam.sigmay * micronsToCm;
188  theClusterParam.sy1 = theClusterParam.sy1 * micronsToCm;
189  theClusterParam.sy2 = theClusterParam.sy2 * micronsToCm;
190 
191  } // if ( useErrorsFromTemplates_ )
192  else {
193  theClusterParam.qBin_ = 0;
194  }
195 
196  int q_f_X;
197  int q_l_X;
198  int q_f_Y;
199  int q_l_Y;
200  collect_edge_charges(theClusterParam, q_f_X, q_l_X, q_f_Y, q_l_Y, useErrorsFromTemplates_ && truncatePixelCharge_);
201 
202  //--- Find the inner widths along X and Y in one shot. We
203  //--- compute the upper right corner of the inner pixels
204  //--- (== lower left corner of upper right pixel) and
205  //--- the lower left corner of the inner pixels
206  //--- (== upper right corner of lower left pixel), and then
207  //--- subtract these two points in the formula.
208 
209  //--- Upper Right corner of Lower Left pixel -- in measurement frame
210  MeasurementPoint meas_URcorn_LLpix(theClusterParam.theCluster->minPixelRow() + 1.0,
211  theClusterParam.theCluster->minPixelCol() + 1.0);
212 
213  //--- Lower Left corner of Upper Right pixel -- in measurement frame
214  MeasurementPoint meas_LLcorn_URpix(theClusterParam.theCluster->maxPixelRow(),
215  theClusterParam.theCluster->maxPixelCol());
216 
217  //--- These two now converted into the local
218  LocalPoint local_URcorn_LLpix;
219  LocalPoint local_LLcorn_URpix;
220 
221  // PixelCPEGeneric can be used with or without track angles
222  // If PixelCPEGeneric is called with track angles, use them to correct for bows/kinks:
223  if (theClusterParam.with_track_angle) {
224  local_URcorn_LLpix = theDetParam.theTopol->localPosition(meas_URcorn_LLpix, theClusterParam.loc_trk_pred);
225  local_LLcorn_URpix = theDetParam.theTopol->localPosition(meas_LLcorn_URpix, theClusterParam.loc_trk_pred);
226  } else {
227  local_URcorn_LLpix = theDetParam.theTopol->localPosition(meas_URcorn_LLpix);
228  local_LLcorn_URpix = theDetParam.theTopol->localPosition(meas_LLcorn_URpix);
229  }
230 
231 #ifdef EDM_ML_DEBUG
232  if (theVerboseLevel > 20) {
233  cout << "\n\t >>> theClusterParam.theCluster->x = " << theClusterParam.theCluster->x()
234  << "\n\t >>> theClusterParam.theCluster->y = " << theClusterParam.theCluster->y()
235  << "\n\t >>> cluster: minRow = " << theClusterParam.theCluster->minPixelRow()
236  << " minCol = " << theClusterParam.theCluster->minPixelCol()
237  << "\n\t >>> cluster: maxRow = " << theClusterParam.theCluster->maxPixelRow()
238  << " maxCol = " << theClusterParam.theCluster->maxPixelCol()
239  << "\n\t >>> meas: inner lower left = " << meas_URcorn_LLpix.x() << "," << meas_URcorn_LLpix.y()
240  << "\n\t >>> meas: inner upper right = " << meas_LLcorn_URpix.x() << "," << meas_LLcorn_URpix.y() << endl;
241  }
242 #endif
243 
244  //--- &&& Note that the cuts below should not be hardcoded (like in Orca and
245  //--- &&& CPEFromDetPosition/PixelCPEInitial), but rather be
246  //--- &&& externally settable (but tracked) parameters.
247 
248  //--- Position, including the half lorentz shift
249 
250 #ifdef EDM_ML_DEBUG
251  if (theVerboseLevel > 20)
252  cout << "\t >>> Generic:: processing X" << endl;
253 #endif
254 
256  theClusterParam.theCluster->sizeX(),
257  q_f_X,
258  q_l_X,
259  local_URcorn_LLpix.x(),
260  local_LLcorn_URpix.x(),
261  chargeWidthX, // lorentz shift in cm
262  theDetParam.theThickness,
263  theClusterParam.cotalpha,
264  theDetParam.thePitchX,
265  theDetParam.theTopol->pixelFractionInX(theClusterParam.theCluster->minPixelRow()),
266  theDetParam.theTopol->pixelFractionInX(theClusterParam.theCluster->maxPixelRow()),
269  the_size_cutX); // cut for eff charge width &&&
270 
271  // apply the lorentz offset correction
272  xPos = xPos + shiftX;
273 
274 #ifdef EDM_ML_DEBUG
275  if (theVerboseLevel > 20)
276  cout << "\t >>> Generic:: processing Y" << endl;
277 #endif
278 
280  theClusterParam.theCluster->sizeY(),
281  q_f_Y,
282  q_l_Y,
283  local_URcorn_LLpix.y(),
284  local_LLcorn_URpix.y(),
285  chargeWidthY, // lorentz shift in cm
286  theDetParam.theThickness,
287  theClusterParam.cotbeta,
288  theDetParam.thePitchY,
289  theDetParam.theTopol->pixelFractionInY(theClusterParam.theCluster->minPixelCol()),
290  theDetParam.theTopol->pixelFractionInY(theClusterParam.theCluster->maxPixelCol()),
293  the_size_cutY); // cut for eff charge width &&&
294 
295  // apply the lorentz offset correction
296  yPos = yPos + shiftY;
297 
298  // Apply irradiation corrections
300  if (theClusterParam.theCluster->sizeX() == 1) { // size=1
301  // ggiurgiu@jhu.edu, 02/03/09 : for size = 1, the Lorentz shift is already accounted by the irradiation correction
302  //float tmp1 = (0.5 * theDetParam.lorentzShiftInCmX);
303  //cout << "Apply correction correction_dx1 = " << theClusterParam.dx1 << " to xPos = " << xPos;
304  xPos = xPos - (0.5f * theDetParam.lorentzShiftInCmX);
305  // Find if pixel is double (big).
306  bool bigInX = theDetParam.theTopol->isItBigPixelInX(theClusterParam.theCluster->maxPixelRow());
307  if (!bigInX)
308  xPos -= theClusterParam.dx1;
309  else
310  xPos -= theClusterParam.dx2;
311  //cout<<" to "<<xPos<<" "<<(tmp1+theClusterParam.dx1)<<endl;
312  } else { // size>1
313  //cout << "Apply correction correction_deltax = " << theClusterParam.deltax << " to xPos = " << xPos;
314  xPos -= theClusterParam.deltax;
315  //cout<<" to "<<xPos<<endl;
316  }
317 
318  if (theClusterParam.theCluster->sizeY() == 1) {
319  // ggiurgiu@jhu.edu, 02/03/09 : for size = 1, the Lorentz shift is already accounted by the irradiation correction
320  yPos = yPos - (0.5f * theDetParam.lorentzShiftInCmY);
321 
322  // Find if pixel is double (big).
323  bool bigInY = theDetParam.theTopol->isItBigPixelInY(theClusterParam.theCluster->maxPixelCol());
324  if (!bigInY)
325  yPos -= theClusterParam.dy1;
326  else
327  yPos -= theClusterParam.dy2;
328 
329  } else {
330  //cout << "Apply correction correction_deltay = " << theClusterParam.deltay << " to yPos = " << yPos << endl;
331  yPos -= theClusterParam.deltay;
332  }
333 
334  } // if ( IrradiationBiasCorrection_ )
335 
336  //cout<<" in PixelCPEGeneric:localPosition - pos = "<<xPos<<" "<<yPos<<endl; //dk
337 
338  //--- Now put the two together
339  LocalPoint pos_in_local(xPos, yPos);
340  return pos_in_local;
341 }
float the_eff_charge_cut_highY
static void collect_edge_charges(ClusterParam &theClusterParam, int &q_f_X, int &q_l_X, int &q_f_Y, int &q_l_Y, bool truncate)
std::vector< SiPixelGenErrorStore > thePixelGenError_
bool IrradiationBiasCorrection_
constexpr float micronsToCm
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
float the_eff_charge_cut_lowX
float the_eff_charge_cut_lowY
float generic_position_formula(int size, int q_f, int q_l, float upper_edge_first_pix, float lower_edge_last_pix, float lorentz_shift, float theThickness, float cot_angle, float pitch, float pitchfraction_first, float pitchfraction_last, float eff_charge_cut_low, float eff_charge_cut_high, float size_cut)
Definition: SiPixelUtils.cc:16
#define LogDebug(id)
float the_eff_charge_cut_highX

Member Data Documentation

◆ DoCosmics_

bool PixelCPEGeneric::DoCosmics_
protected

Definition at line 88 of file PixelCPEGeneric.h.

Referenced by PixelCPEGeneric().

◆ inflate_all_errors_no_trk_angle

bool PixelCPEGeneric::inflate_all_errors_no_trk_angle
protected

Definition at line 86 of file PixelCPEGeneric.h.

Referenced by PixelCPEGeneric().

◆ inflate_errors

bool PixelCPEGeneric::inflate_errors
protected

Definition at line 85 of file PixelCPEGeneric.h.

Referenced by PixelCPEGeneric().

◆ IrradiationBiasCorrection_

bool PixelCPEGeneric::IrradiationBiasCorrection_
protected

Definition at line 89 of file PixelCPEGeneric.h.

Referenced by PixelCPEGeneric().

◆ isPhase2_

bool PixelCPEGeneric::isPhase2_
protected

Definition at line 90 of file PixelCPEGeneric.h.

Referenced by PixelCPEGeneric().

◆ NoTemplateErrorsWhenNoTrkAngles_

bool PixelCPEGeneric::NoTemplateErrorsWhenNoTrkAngles_
protected

Definition at line 91 of file PixelCPEGeneric.h.

Referenced by PixelCPEGeneric().

◆ the_eff_charge_cut_highX

float PixelCPEGeneric::the_eff_charge_cut_highX
protected

Definition at line 80 of file PixelCPEGeneric.h.

Referenced by PixelCPEGeneric().

◆ the_eff_charge_cut_highY

float PixelCPEGeneric::the_eff_charge_cut_highY
protected

Definition at line 81 of file PixelCPEGeneric.h.

Referenced by PixelCPEGeneric().

◆ the_eff_charge_cut_lowX

float PixelCPEGeneric::the_eff_charge_cut_lowX
protected

Definition at line 78 of file PixelCPEGeneric.h.

Referenced by PixelCPEGeneric().

◆ the_eff_charge_cut_lowY

float PixelCPEGeneric::the_eff_charge_cut_lowY
protected

Definition at line 79 of file PixelCPEGeneric.h.

Referenced by PixelCPEGeneric().

◆ the_size_cutX

float PixelCPEGeneric::the_size_cutX
protected

Definition at line 82 of file PixelCPEGeneric.h.

Referenced by PixelCPEGeneric().

◆ the_size_cutY

float PixelCPEGeneric::the_size_cutY
protected

Definition at line 83 of file PixelCPEGeneric.h.

Referenced by PixelCPEGeneric().

◆ thePixelGenError_

std::vector<SiPixelGenErrorStore> PixelCPEGeneric::thePixelGenError_
protected

Definition at line 94 of file PixelCPEGeneric.h.

Referenced by PixelCPEGeneric().