CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
PixelCPEFastParamsHost< TrackerTraits > Class Template Reference

#include <PixelCPEFastParamsHost.h>

Inheritance diagram for PixelCPEFastParamsHost< TrackerTraits >:
PixelCPEGenericBase PixelCPEBase PixelClusterParameterEstimator

Public Types

using Buffer = cms::alpakatools::host_buffer< pixelCPEforDevice::ParamsOnDeviceT< TrackerTraits > >
 
using ConstBuffer = cms::alpakatools::const_host_buffer< pixelCPEforDevice::ParamsOnDeviceT< TrackerTraits > >
 
- Public Types inherited from PixelClusterParameterEstimator
typedef std::pair< LocalPoint, LocalErrorLocalValues
 
using ReturnType = std::tuple< LocalPoint, LocalError, SiPixelRecHitQuality::QualWordType >
 
typedef std::vector< LocalValuesVLocalValues
 

Public Member Functions

Buffer buffer ()
 
ConstBuffer buffer () const
 
ConstBuffer const_buffer () const
 
pixelCPEforDevice::ParamsOnDeviceT< TrackerTraits > const * data () const
 
PixelCPEFastParamsHostoperator= (PixelCPEFastParamsHost const &)=delete
 
PixelCPEFastParamsHostoperator= (PixelCPEFastParamsHost &&)=default
 
 PixelCPEFastParamsHost (edm::ParameterSet const &conf, const MagneticField *mag, const TrackerGeometry &geom, const TrackerTopology &ttopo, const SiPixelLorentzAngle *lorentzAngle, const SiPixelGenErrorDBObject *genErrorDBObject, const SiPixelLorentzAngle *lorentzAngleWidth)
 The constructor. More...
 
 PixelCPEFastParamsHost (PixelCPEFastParamsHost const &)=delete
 
 PixelCPEFastParamsHost (PixelCPEFastParamsHost &&)=default
 
auto size () const
 
 ~PixelCPEFastParamsHost () 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)
 

Private Member Functions

void errorFromTemplates (DetParam const &theDetParam, ClusterParamGeneric &theClusterParam, float qclus) const
 
void fillParamsForDevice ()
 
LocalError localError (DetParam const &theDetParam, ClusterParam &theClusterParam) const override
 
LocalPoint localPosition (DetParam const &theDetParam, ClusterParam &theClusterParam) const override
 

Private Attributes

Buffer buffer_
 
std::vector< SiPixelGenErrorStorethePixelGenError_
 

Additional Inherited Members

- Protected Types inherited from PixelCPEBase
using DetParams = std::vector< DetParam >
 
typedef GloballyPositioned< double > Frame
 
- 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
 
- 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)
 
- 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_
 
- 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

template<typename TrackerTraits>
class PixelCPEFastParamsHost< TrackerTraits >

Definition at line 18 of file PixelCPEFastParamsHost.h.

Member Typedef Documentation

◆ Buffer

template<typename TrackerTraits>
using PixelCPEFastParamsHost< TrackerTraits >::Buffer = cms::alpakatools::host_buffer<pixelCPEforDevice::ParamsOnDeviceT<TrackerTraits> >

Definition at line 20 of file PixelCPEFastParamsHost.h.

◆ ConstBuffer

template<typename TrackerTraits>
using PixelCPEFastParamsHost< TrackerTraits >::ConstBuffer = cms::alpakatools::const_host_buffer<pixelCPEforDevice::ParamsOnDeviceT<TrackerTraits> >

Definition at line 21 of file PixelCPEFastParamsHost.h.

Constructor & Destructor Documentation

◆ PixelCPEFastParamsHost() [1/3]

template<typename TrackerTraits >
PixelCPEFastParamsHost< TrackerTraits >::PixelCPEFastParamsHost ( edm::ParameterSet const &  conf,
const MagneticField mag,
const TrackerGeometry geom,
const TrackerTopology ttopo,
const SiPixelLorentzAngle lorentzAngle,
const SiPixelGenErrorDBObject genErrorDBObject,
const SiPixelLorentzAngle lorentzAngleWidth 
)

The constructor.

Definition at line 17 of file PixelCPEFastParamsHost.cc.

References Exception, PixelCPEFastParamsHost< TrackerTraits >::fillParamsForDevice(), PixelCPEBase::genErrorDBObject_, SiPixelGenError::pushfile(), PixelCPEFastParamsHost< TrackerTraits >::thePixelGenError_, and PixelCPEGenericBase::useErrorsFromTemplates_.

24  : PixelCPEGenericBase(conf, mag, geom, ttopo, lorentzAngle, genErrorDBObject, lorentzAngleWidth),
26  // Use errors from templates or from GenError
29  throw cms::Exception("InvalidCalibrationLoaded")
30  << "ERROR: GenErrors not filled correctly. Check the sqlite file. Using SiPixelTemplateDBObject version "
31  << (*genErrorDBObject_).version();
32  }
33 
35 }
static bool pushfile(int filenum, std::vector< SiPixelGenErrorStore > &pixelTemp, std::string dir="")
std::vector< SiPixelGenErrorStore > thePixelGenError_
std::enable_if_t< not std::is_array_v< T >, host_buffer< T > > make_host_buffer()
Definition: memory.h:65
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

◆ PixelCPEFastParamsHost() [2/3]

template<typename TrackerTraits>
PixelCPEFastParamsHost< TrackerTraits >::PixelCPEFastParamsHost ( PixelCPEFastParamsHost< TrackerTraits > const &  )
delete

◆ PixelCPEFastParamsHost() [3/3]

template<typename TrackerTraits>
PixelCPEFastParamsHost< TrackerTraits >::PixelCPEFastParamsHost ( PixelCPEFastParamsHost< TrackerTraits > &&  )
default

◆ ~PixelCPEFastParamsHost()

template<typename TrackerTraits>
PixelCPEFastParamsHost< TrackerTraits >::~PixelCPEFastParamsHost ( )
overridedefault

Member Function Documentation

◆ buffer() [1/2]

template<typename TrackerTraits>
Buffer PixelCPEFastParamsHost< TrackerTraits >::buffer ( )
inline

◆ buffer() [2/2]

template<typename TrackerTraits>
ConstBuffer PixelCPEFastParamsHost< TrackerTraits >::buffer ( ) const
inline

◆ const_buffer()

template<typename TrackerTraits>
ConstBuffer PixelCPEFastParamsHost< TrackerTraits >::const_buffer ( ) const
inline

◆ data()

template<typename TrackerTraits>
pixelCPEforDevice::ParamsOnDeviceT<TrackerTraits> const* PixelCPEFastParamsHost< TrackerTraits >::data ( ) const
inline

Definition at line 49 of file PixelCPEFastParamsHost.h.

References PixelCPEFastParamsHost< TrackerTraits >::buffer_.

49 { return buffer_.data(); }

◆ errorFromTemplates()

template<typename TrackerTraits >
void PixelCPEFastParamsHost< TrackerTraits >::errorFromTemplates ( DetParam const &  theDetParam,
ClusterParamGeneric theClusterParam,
float  qclus 
) const
private

Definition at line 366 of file PixelCPEFastParamsHost.cc.

References PixelCPEBase::DetParam::bx, PixelCPEBase::DetParam::bz, PixelCPEBase::ClusterParam::cotalpha, PixelCPEBase::ClusterParam::cotbeta, PixelCPEBase::DetParam::detTemplateId, LogDebug, WZElectronSkims53X_cff::max, pixelCPEforDevice::micronsToCm, PixelCPEGenericBase::ClusterParamGeneric::pixmx, SiPixelGenError::qbin(), PixelCPEBase::ClusterParam::qBin_, PixelCPEGenericBase::ClusterParamGeneric::sigmax, PixelCPEGenericBase::ClusterParamGeneric::sigmay, PixelCPEGenericBase::ClusterParamGeneric::sx1, PixelCPEGenericBase::ClusterParamGeneric::sx2, PixelCPEGenericBase::ClusterParamGeneric::sy1, and PixelCPEGenericBase::ClusterParamGeneric::sy2.

368  {
369  float locBz = theDetParam.bz;
370  float locBx = theDetParam.bx;
371  LogDebug("PixelCPEFastParamsHost") << "PixelCPEFastParamsHost::localPosition(...) : locBz = " << locBz;
372 
373  theClusterParam.pixmx = std::numeric_limits<int>::max(); // max pixel charge for truncation of 2-D cluster
374 
375  theClusterParam.sigmay = -999.9; // CPE Generic y-error for multi-pixel cluster
376  theClusterParam.sigmax = -999.9; // CPE Generic x-error for multi-pixel cluster
377  theClusterParam.sy1 = -999.9; // CPE Generic y-error for single single-pixel
378  theClusterParam.sy2 = -999.9; // CPE Generic y-error for single double-pixel cluster
379  theClusterParam.sx1 = -999.9; // CPE Generic x-error for single single-pixel cluster
380  theClusterParam.sx2 = -999.9; // CPE Generic x-error for single double-pixel cluster
381 
382  float dummy;
383 
384  SiPixelGenError gtempl(this->thePixelGenError_);
385  int gtemplID = theDetParam.detTemplateId;
386 
387  theClusterParam.qBin_ = gtempl.qbin(gtemplID,
388  theClusterParam.cotalpha,
389  theClusterParam.cotbeta,
390  locBz,
391  locBx,
392  qclus,
393  false,
394  theClusterParam.pixmx,
395  theClusterParam.sigmay,
396  dummy,
397  theClusterParam.sigmax,
398  dummy,
399  theClusterParam.sy1,
400  dummy,
401  theClusterParam.sy2,
402  dummy,
403  theClusterParam.sx1,
404  dummy,
405  theClusterParam.sx2,
406  dummy);
407 
408  theClusterParam.sigmax = theClusterParam.sigmax * pixelCPEforDevice::micronsToCm;
409  theClusterParam.sx1 = theClusterParam.sx1 * pixelCPEforDevice::micronsToCm;
410  theClusterParam.sx2 = theClusterParam.sx2 * pixelCPEforDevice::micronsToCm;
411 
412  theClusterParam.sigmay = theClusterParam.sigmay * pixelCPEforDevice::micronsToCm;
413  theClusterParam.sy1 = theClusterParam.sy1 * pixelCPEforDevice::micronsToCm;
414  theClusterParam.sy2 = theClusterParam.sy2 * pixelCPEforDevice::micronsToCm;
415 }
std::vector< SiPixelGenErrorStore > thePixelGenError_
constexpr float micronsToCm
#define LogDebug(id)

◆ fillParamsForDevice()

template<typename TrackerTraits >
void PixelCPEFastParamsHost< TrackerTraits >::fillParamsForDevice ( )
private

Definition at line 38 of file PixelCPEFastParamsHost.cc.

References funct::abs(), cms::cuda::assert(), ALPAKA_ACCELERATOR_NAMESPACE::brokenline::constexpr(), CommonMethods::cp(), f, ALCARECOEcalPhiSym_cff::float, g, mps_fire::i, createfilelist::int, GeomDetEnumerators::isBarrel(), ALPAKA_ACCELERATOR_NAMESPACE::ecal::reconstruction::internal::endcap::ix(), ALPAKA_ACCELERATOR_NAMESPACE::ecal::reconstruction::internal::endcap::iy(), isotrackApplyRegressor::k, pixelCPEforDevice::kGenErrorQBins, GetRecoTauVFromDQM_MC_cff::kk, pixelCPEforDevice::kNumErrorBins, PVValHelper::ladder, phase1PixelTopology::layerStart, LogDebug, visualization-live-secondInstance_cfg::m, WZElectronSkims53X_cff::max, SiStripPI::min, MuonTCMETValueMapProducer_cff::nLayers, phase1PixelTopology::numberOfLayers, phase1PixelTopology::numberOfModules, AlCaHLTBitMon_ParallelJobs::p, findQualityFiles::rr, mathSSE::sqrt(), ppsPixelTopologyESSourceRun2_cfi::thickness, mitigatedMETSequence_cff::U, x, relval_data_highstats::y, ctppsOpticalFunctions_non_DB_cff::z, and SOAFrame< T >::z().

Referenced by PixelCPEFastParamsHost< TrackerTraits >::PixelCPEFastParamsHost().

38  {
39  // this code executes only once per job, computation inefficiency is not an issue
40  // many code blocks are repeated: better keep the computation local and self consistent as blocks may in future move around, be deleted ...
41  // It is valid only for Phase1 and the version of GenError in DB used in late 2018 and in 2021
42 
43  buffer_->commonParams().theThicknessB = m_DetParams.front().theThickness;
44  buffer_->commonParams().theThicknessE = m_DetParams.back().theThickness;
45  buffer_->commonParams().numberOfLaddersInBarrel = TrackerTraits::numberOfLaddersInBarrel;
46 
47  LogDebug("PixelCPEFastParamsHost") << "thickness " << buffer_->commonParams().theThicknessB << ' '
48  << buffer_->commonParams().theThicknessE;
49 
50  // zero average geometry
51  memset(&buffer_->averageGeometry(), 0, sizeof(pixelTopology::AverageGeometryT<TrackerTraits>));
52  // zero layer geometry
53  memset(&buffer_->layerGeometry(), 0, sizeof(pixelCPEforDevice::LayerGeometryT<TrackerTraits>));
54 
55  uint32_t nLayers = 0;
56  uint32_t oldLayer = 0;
57  uint32_t oldLadder = 0;
58  float rl = 0;
59  float zl = 0;
60  float miz = 500, mxz = 0;
61  float pl = 0;
62  int nl = 0;
63 
65 
66  for (auto i = 0U; i < m_DetParams.size(); ++i) {
67  auto& p = m_DetParams[i];
68  auto& g = buffer_->detParams(i);
69 
70  g.nRowsRoc = p.theDet->specificTopology().rowsperroc();
71  g.nColsRoc = p.theDet->specificTopology().colsperroc();
72  g.nRows = p.theDet->specificTopology().rocsX() * g.nRowsRoc;
73  g.nCols = p.theDet->specificTopology().rocsY() * g.nColsRoc;
74 
75  g.numPixsInModule = g.nRows * g.nCols;
76 
77  assert(p.theDet->index() == int(i));
78 
79  g.isBarrel = GeomDetEnumerators::isBarrel(p.thePart);
80  g.isPosZ = p.theDet->surface().position().z() > 0;
81  g.layer = ttopo_.layer(p.theDet->geographicalId());
82  g.index = i; // better be!
83  g.rawId = p.theDet->geographicalId();
84  auto thickness = g.isBarrel ? buffer_->commonParams().theThicknessB : buffer_->commonParams().theThicknessE;
85  assert(thickness == p.theThickness);
86 
87  auto ladder = ttopo_.pxbLadder(p.theDet->geographicalId());
88  if (oldLayer != g.layer) {
89  oldLayer = g.layer;
90  LogDebug("PixelCPEFastParamsHost") << "new layer at " << i << (g.isBarrel ? " B " : (g.isPosZ ? " E+ " : " E- "))
91  << g.layer << " starting at " << g.rawId << '\n'
92  << "old layer had " << nl << " ladders";
93  nl = 0;
94 
96  buffer_->layerGeometry().layerStart[nLayers] = i;
97  ++nLayers;
98  }
99  if (oldLadder != ladder) {
100  oldLadder = ladder;
101  LogDebug("PixelCPEFastParamsHost") << "new ladder at " << i
102  << (g.isBarrel ? " B " : (g.isPosZ ? " E+ " : " E- ")) << ladder
103  << " starting at " << g.rawId << '\n'
104  << "old ladder ave z,r,p mz " << zl / 8.f << " " << rl / 8.f << " " << pl / 8.f
105  << ' ' << miz << ' ' << mxz;
106  rl = 0;
107  zl = 0;
108  pl = 0;
109  miz = 500;
110  mxz = 0;
111  nl++;
112  }
113 
114  g.shiftX = 0.5f * p.lorentzShiftInCmX;
115  g.shiftY = 0.5f * p.lorentzShiftInCmY;
116  g.chargeWidthX = p.lorentzShiftInCmX * p.widthLAFractionX;
117  g.chargeWidthY = p.lorentzShiftInCmY * p.widthLAFractionY;
118 
119  g.x0 = p.theOrigin.x();
120  g.y0 = p.theOrigin.y();
121  g.z0 = p.theOrigin.z();
122 
123  g.thePitchX = p.thePitchX;
124  g.thePitchY = p.thePitchY;
125 
126  auto vv = p.theDet->surface().position();
127  auto rr = pixelCPEforDevice::Rotation(p.theDet->surface().rotation());
128  g.frame = pixelCPEforDevice::Frame(vv.x(), vv.y(), vv.z(), rr);
129 
130  zl += vv.z();
131  miz = std::min(miz, std::abs(vv.z()));
132  mxz = std::max(mxz, std::abs(vv.z()));
133  rl += vv.perp();
134  pl += vv.phi(); // (not obvious)
135 
136  // errors .....
137  ClusterParamGeneric cp;
138 
139  cp.with_track_angle = false;
140 
141  auto lape = p.theDet->localAlignmentError();
142  if (lape.invalid())
143  lape = LocalError(); // zero....
144 
145  g.apeXX = lape.xx();
146  g.apeYY = lape.yy();
147 
148  auto toMicron = [&](float x) { return std::min(511, int(x * 1.e4f + 0.5f)); };
149 
150  // average angle
151  auto gvx = p.theOrigin.x() + 40.f * p.thePitchX;
152  auto gvy = p.theOrigin.y();
153  auto gvz = 1.f / p.theOrigin.z();
154  //--- Note that the normalization is not required as only the ratio used
155 
156  {
157  // calculate angles (fed into errorFromTemplates)
158  cp.cotalpha = gvx * gvz;
159  cp.cotbeta = gvy * gvz;
160 
161  errorFromTemplates(p, cp, 20000.);
162  }
163 
164 #ifdef EDM_ML_DEBUG
165  auto m = 10000.f;
166  for (float qclus = 15000; qclus < 35000; qclus += 15000) {
167  errorFromTemplates(p, cp, qclus);
168  LogDebug("PixelCPEFastParamsHost") << i << ' ' << qclus << ' ' << cp.pixmx << ' ' << m * cp.sigmax << ' '
169  << m * cp.sx1 << ' ' << m * cp.sx2 << ' ' << m * cp.sigmay << ' ' << m * cp.sy1
170  << ' ' << m * cp.sy2;
171  }
172  LogDebug("PixelCPEFastParamsHost") << i << ' ' << m * std::sqrt(lape.xx()) << ' ' << m * std::sqrt(lape.yy());
173 #endif // EDM_ML_DEBUG
174 
175  g.pixmx = std::max(0, cp.pixmx);
176  g.sx2 = toMicron(cp.sx2);
177  g.sy1 = std::max(21, toMicron(cp.sy1)); // for some angles sy1 is very small
178  g.sy2 = std::max(55, toMicron(cp.sy2)); // sometimes sy2 is smaller than others (due to angle?)
179 
180  //sample xerr as function of position
181  // moduleOffsetX is the definition of TrackerTraits::xOffset,
182  // needs to be calculated because for Phase2 the modules are not uniform
183  float moduleOffsetX = -(0.5f * float(g.nRows) + TrackerTraits::bigPixXCorrection);
184  auto const xoff = moduleOffsetX * g.thePitchX;
185 
186  for (int ix = 0; ix < pixelCPEforDevice::kNumErrorBins; ++ix) {
187  auto x = xoff * (1.f - (0.5f + float(ix)) / 8.f);
188  auto gvx = p.theOrigin.x() - x;
189  auto gvy = p.theOrigin.y();
190  auto gvz = 1.f / p.theOrigin.z();
191  cp.cotbeta = gvy * gvz;
192  cp.cotalpha = gvx * gvz;
193  errorFromTemplates(p, cp, 20000.f);
194  g.sigmax[ix] = toMicron(cp.sigmax);
195  g.sigmax1[ix] = toMicron(cp.sx1);
196  LogDebug("PixelCPEFastParamsHost") << "sigmax vs x " << i << ' ' << x << ' ' << cp.cotalpha << ' '
197  << int(g.sigmax[ix]) << ' ' << int(g.sigmax1[ix]) << ' ' << 10000.f * cp.sigmay
198  << std::endl;
199  }
200 #ifdef EDM_ML_DEBUG
201  // sample yerr as function of position
202  // moduleOffsetY is the definition of TrackerTraits::yOffset (removed)
203  float moduleOffsetY = 0.5f * float(g.nCols) + TrackerTraits::bigPixYCorrection;
204  auto const yoff = -moduleOffsetY * p.thePitchY;
205 
206  for (int ix = 0; ix < pixelCPEforDevice::kNumErrorBins; ++ix) {
207  auto y = yoff * (1.f - (0.5f + float(ix)) / 8.f);
208  auto gvx = p.theOrigin.x() + 40.f * p.thePitchY;
209  auto gvy = p.theOrigin.y() - y;
210  auto gvz = 1.f / p.theOrigin.z();
211  cp.cotbeta = gvy * gvz;
212  cp.cotalpha = gvx * gvz;
213  errorFromTemplates(p, cp, 20000.f);
214  LogDebug("PixelCPEFastParamsHost") << "sigmay vs y " << i << ' ' << y << ' ' << cp.cotbeta << ' '
215  << 10000.f * cp.sigmay << std::endl;
216  }
217 #endif // EDM_ML_DEBUG
218 
219  // calculate angles (repeated)
220  cp.cotalpha = gvx * gvz;
221  cp.cotbeta = gvy * gvz;
222  auto aveCB = cp.cotbeta;
223 
224  // sample x by charge
225  int qbin = pixelCPEforDevice::kGenErrorQBins; // low charge
226  int k = 0;
227  int qClusIncrement = 100;
228  for (int qclus = 100; k < pixelCPEforDevice::kGenErrorQBins; qclus += qClusIncrement) {
229  errorFromTemplates(p, cp, qclus);
230  if (cp.qBin_ == qbin) {
231  continue;
232  }
233 
234  // Check if we have skipped a qBin
235  if (cp.qBin_ < qbin - 1) {
236  //qBin=4 (second lowest charge) sometimes may get skipped
237  //In that case, set its threshold at halfway to threshold of qBin=3 and fill with sigmax/y values of qBin=5
238  //In reality, it does not really matter because we will not encounter this qBin for any cluster (otherwise we would not have skipped it)
239  qbin += 1;
240  qclus -= qClusIncrement;
241  errorFromTemplates(p, cp, qclus);
242  g.xfact[k] = cp.sigmax;
243  g.yfact[k] = cp.sigmay;
244  g.minCh[k++] = qclus / 2;
245  continue;
246  }
247 
248  qbin = cp.qBin_;
249 
250  //The difference in charge between first two qBins is small, so for other steps we can have a larger increment
252  qClusIncrement = 1000;
253  }
254 
255  g.xfact[k] = cp.sigmax;
256  g.yfact[k] = cp.sigmay;
257  g.minCh[k++] = qclus;
258 #ifdef EDM_ML_DEBUG
259  LogDebug("PixelCPEFastParamsHost") << i << ' ' << g.rawId << ' ' << cp.cotalpha << ' ' << qclus << ' ' << cp.qBin_
260  << ' ' << cp.pixmx << ' ' << m * cp.sigmax << ' ' << m * cp.sx1 << ' '
261  << m * cp.sx2 << ' ' << m * cp.sigmay << ' ' << m * cp.sy1 << ' ' << m * cp.sy2
262  << std::endl;
263 #endif // EDM_ML_DEBUG
264  } //for (int qclus = 100; k < pixelCPEforDevice::kGenErrorQBins; qclus += qClusIncrement) {
265 
267 
268  // fill the rest (sometimes bin 4 is missing)
269  for (int kk = k; kk < pixelCPEforDevice::kGenErrorQBins; ++kk) {
270  g.xfact[kk] = g.xfact[k - 1];
271  g.yfact[kk] = g.yfact[k - 1];
272  g.minCh[kk] = g.minCh[k - 1];
273  }
274  auto detx = 1.f / g.xfact[0];
275  auto dety = 1.f / g.yfact[0];
276  for (int kk = 0; kk < pixelCPEforDevice::kGenErrorQBins; ++kk) {
277  g.xfact[kk] *= detx;
278  g.yfact[kk] *= dety;
279  }
280  // sample y in "angle" (estimated from cluster size)
281  float ys = 8.f - 4.f; // apperent bias of half pixel (see plot)
282  // plot: https://indico.cern.ch/event/934821/contributions/3974619/attachments/2091853/3515041/DigilessReco.pdf page 25
283  // sample yerr as function of "size"
284  for (int iy = 0; iy < pixelCPEforDevice::kNumErrorBins; ++iy) {
285  ys += 1.f; // first bin 0 is for size 9 (and size is in fixed point 2^3)
287  ys += 8.f; // last bin for "overflow"
288  // cp.cotalpha = ys*(g.thePitchX/(8.f*thickness)); // use this to print sampling in "x" (and comment the line below)
289  cp.cotbeta = std::copysign(ys * (g.thePitchY / (8.f * thickness)), aveCB);
290  errorFromTemplates(p, cp, 20000.f);
291  g.sigmay[iy] = toMicron(cp.sigmay);
292  LogDebug("PixelCPEFastParamsHost") << "sigmax/sigmay " << i << ' ' << (ys + 4.f) / 8.f << ' ' << cp.cotalpha
293  << '/' << cp.cotbeta << ' ' << 10000.f * cp.sigmax << '/' << int(g.sigmay[iy])
294  << std::endl;
295  }
296  } // loop over det
297 
298  // store last module
299  buffer_->layerGeometry().layerStart[nLayers] = m_DetParams.size();
300 
301  constexpr int numberOfModulesInLadder = TrackerTraits::numberOfModulesInLadder;
302  constexpr int numberOfLaddersInBarrel = TrackerTraits::numberOfLaddersInBarrel;
303  constexpr int numberOfModulesInBarrel = TrackerTraits::numberOfModulesInBarrel;
304 
305  constexpr float ladderFactor = 1.f / float(numberOfModulesInLadder);
306 
307  constexpr int firstEndcapPos = TrackerTraits::firstEndcapPos;
308  constexpr int firstEndcapNeg = TrackerTraits::firstEndcapNeg;
309 
310  // compute ladder baricenter (only in global z) for the barrel
311  //
312  auto& aveGeom = buffer_->averageGeometry();
313  int il = 0;
314  for (int im = 0, nm = numberOfModulesInBarrel; im < nm; ++im) {
315  auto const& g = buffer_->detParams(im);
316  il = im / numberOfModulesInLadder;
317  assert(il < int(numberOfLaddersInBarrel));
318  auto z = g.frame.z();
319  aveGeom.ladderZ[il] += ladderFactor * z;
320  aveGeom.ladderMinZ[il] = std::min(aveGeom.ladderMinZ[il], z);
321  aveGeom.ladderMaxZ[il] = std::max(aveGeom.ladderMaxZ[il], z);
322  aveGeom.ladderX[il] += ladderFactor * g.frame.x();
323  aveGeom.ladderY[il] += ladderFactor * g.frame.y();
324  aveGeom.ladderR[il] += ladderFactor * sqrt(g.frame.x() * g.frame.x() + g.frame.y() * g.frame.y());
325  }
326  assert(il + 1 == int(numberOfLaddersInBarrel));
327  // add half_module and tollerance
328  constexpr float moduleLength = TrackerTraits::moduleLength;
329  constexpr float module_tolerance = 0.2f;
330  for (int il = 0, nl = numberOfLaddersInBarrel; il < nl; ++il) {
331  aveGeom.ladderMinZ[il] -= (0.5f * moduleLength - module_tolerance);
332  aveGeom.ladderMaxZ[il] += (0.5f * moduleLength - module_tolerance);
333  }
334 
335  // compute "max z" for first layer in endcap (should we restrict to the outermost ring?)
336  for (auto im = TrackerTraits::layerStart[firstEndcapPos]; im < TrackerTraits::layerStart[firstEndcapPos + 1]; ++im) {
337  auto const& g = buffer_->detParams(im);
338  aveGeom.endCapZ[0] = std::max(aveGeom.endCapZ[0], g.frame.z());
339  }
340  for (auto im = TrackerTraits::layerStart[firstEndcapNeg]; im < TrackerTraits::layerStart[firstEndcapNeg + 1]; ++im) {
341  auto const& g = buffer_->detParams(im);
342  aveGeom.endCapZ[1] = std::min(aveGeom.endCapZ[1], g.frame.z());
343  }
344  // correct for outer ring being closer
345  aveGeom.endCapZ[0] -= TrackerTraits::endcapCorrection;
346  aveGeom.endCapZ[1] += TrackerTraits::endcapCorrection;
347 #ifdef EDM_ML_DEBUG
348  for (int jl = 0, nl = numberOfLaddersInBarrel; jl < nl; ++jl) {
349  LogDebug("PixelCPEFastParamsHost") << jl << ':' << aveGeom.ladderR[jl] << '/'
350  << std::sqrt(aveGeom.ladderX[jl] * aveGeom.ladderX[jl] +
351  aveGeom.ladderY[jl] * aveGeom.ladderY[jl])
352  << ',' << aveGeom.ladderZ[jl] << ',' << aveGeom.ladderMinZ[jl] << ','
353  << aveGeom.ladderMaxZ[jl] << '\n';
354  }
355  LogDebug("PixelCPEFastParamsHost") << aveGeom.endCapZ[0] << ' ' << aveGeom.endCapZ[1];
356 #endif // EDM_ML_DEBUG
357 
358  // fill ladders geometry
359  memcpy(buffer_->layerGeometry().layer,
360  pixelTopology::layer<TrackerTraits>.data(),
361  pixelTopology::layer<TrackerTraits>.size());
362  buffer_->layerGeometry().maxModuleStride = pixelTopology::maxModuleStride<TrackerTraits>;
363 }
constexpr uint32_t numberOfLayers
bool isBarrel(GeomDetEnumerators::SubDetector m)
DetParams m_DetParams
Definition: PixelCPEBase.h:280
unsigned int pxbLadder(const DetId &id) const
assert(be >=bs)
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
Definition: Activities.doc:4
constexpr uint16_t numberOfModules
unsigned int layer(const DetId &id) const
constexpr int kNumErrorBins
T sqrt(T t)
Definition: SSEVec.h:23
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
constexpr T z() const
Definition: SOARotation.h:133
double f[11][100]
void errorFromTemplates(DetParam const &theDetParam, ClusterParamGeneric &theClusterParam, float qclus) const
ALPAKA_FN_ACC ALPAKA_FN_INLINE uint32_t ix(uint32_t id)
constexpr int kGenErrorQBins
const TrackerTopology & ttopo_
Definition: PixelCPEBase.h:229
SOAFrame< float > Frame
static constexpr uint32_t layerStart[numberOfLayers+1]
ALPAKA_FN_ACC ALPAKA_FN_INLINE uint32_t iy(uint32_t id)
def cp(fromDir, toDir, listOfFiles, overwrite=False, smallList=False)
SOARotation< float > Rotation
#define LogDebug(id)

◆ fillPSetDescription()

template<typename TrackerTraits >
void PixelCPEFastParamsHost< TrackerTraits >::fillPSetDescription ( edm::ParameterSetDescription desc)
static

Definition at line 494 of file PixelCPEFastParamsHost.cc.

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

Referenced by ALPAKA_ACCELERATOR_NAMESPACE::PixelCPEFastParamsESProducerAlpaka< TrackerTraits >::fillDescriptions().

494  {
495  // call PixelCPEGenericBase fillPSetDescription to add common rechit errors
497 }
static void fillPSetDescription(edm::ParameterSetDescription &desc)

◆ localError()

template<typename TrackerTraits >
LocalError PixelCPEFastParamsHost< TrackerTraits >::localError ( DetParam const &  theDetParam,
ClusterParam theClusterParam 
) const
overrideprivatevirtual

Implements PixelCPEBase.

Definition at line 478 of file PixelCPEFastParamsHost.cc.

References LogDebug, PixelCPEGenericBase::ClusterParamGeneric::sigmax, and PixelCPEGenericBase::ClusterParamGeneric::sigmay.

479  {
480  ClusterParamGeneric& theClusterParam = static_cast<ClusterParamGeneric&>(theClusterParamBase);
481 
482  auto xerr = theClusterParam.sigmax;
483  auto yerr = theClusterParam.sigmay;
484 
485  LogDebug("PixelCPEFastParamsHost") << " errors " << xerr << " " << yerr;
486 
487  auto xerr_sq = xerr * xerr;
488  auto yerr_sq = yerr * yerr;
489 
490  return LocalError(xerr_sq, 0, yerr_sq);
491 }
#define LogDebug(id)

◆ localPosition()

template<typename TrackerTraits >
LocalPoint PixelCPEFastParamsHost< TrackerTraits >::localPosition ( DetParam const &  theDetParam,
ClusterParam theClusterParamBase 
) const
overrideprivatevirtual

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 423 of file PixelCPEFastParamsHost.cc.

References SiPixelCluster::charge(), CommonMethods::cp(), GeomDet::index(), LogDebug, SiPixelCluster::maxPixelCol(), SiPixelCluster::maxPixelRow(), SiPixelCluster::minPixelCol(), SiPixelCluster::minPixelRow(), PixelCPEBase::ClusterParam::qBin_, PixelCPEGenericBase::ClusterParamGeneric::sigmax, PixelCPEGenericBase::ClusterParamGeneric::sigmay, PixelCPEBase::ClusterParam::theCluster, and PixelCPEBase::DetParam::theDet.

424  {
425  ClusterParamGeneric& theClusterParam = static_cast<ClusterParamGeneric&>(theClusterParamBase);
426 
428  errorFromTemplates(theDetParam, theClusterParam, theClusterParam.theCluster->charge());
429  } else {
430  theClusterParam.qBin_ = 0;
431  }
432 
433  int q_f_X;
434  int q_l_X;
435  int q_f_Y;
436  int q_l_Y;
437  collect_edge_charges(theClusterParam, q_f_X, q_l_X, q_f_Y, q_l_Y, useErrorsFromTemplates_ && truncatePixelCharge_);
438 
439  // do GPU like ...
441 
442  cp.minRow[0] = theClusterParam.theCluster->minPixelRow();
443  cp.maxRow[0] = theClusterParam.theCluster->maxPixelRow();
444  cp.minCol[0] = theClusterParam.theCluster->minPixelCol();
445  cp.maxCol[0] = theClusterParam.theCluster->maxPixelCol();
446 
447  cp.q_f_X[0] = q_f_X;
448  cp.q_l_X[0] = q_l_X;
449  cp.q_f_Y[0] = q_f_Y;
450  cp.q_l_Y[0] = q_l_Y;
451 
452  cp.charge[0] = theClusterParam.theCluster->charge();
453 
454  auto ind = theDetParam.theDet->index();
455  pixelCPEforDevice::position<TrackerTraits>(buffer_->commonParams(), buffer_->detParams(ind), cp, 0);
456  auto xPos = cp.xpos[0];
457  auto yPos = cp.ypos[0];
458 
459  // set the error (mind ape....)
460  pixelCPEforDevice::errorFromDB<TrackerTraits>(buffer_->commonParams(), buffer_->detParams(ind), cp, 0);
461  theClusterParam.sigmax = cp.xerr[0];
462  theClusterParam.sigmay = cp.yerr[0];
463 
464  LogDebug("PixelCPEFastParamsHost") << " in PixelCPEFastParamsHost:localPosition - pos = " << xPos << " " << yPos
465  << " size " << cp.maxRow[0] - cp.minRow[0] << ' ' << cp.maxCol[0] - cp.minCol[0];
466 
467  //--- Now put the two together
468  LocalPoint pos_in_local(xPos, yPos);
469  return pos_in_local;
470 }
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)
void errorFromTemplates(DetParam const &theDetParam, ClusterParamGeneric &theClusterParam, float qclus) const
def cp(fromDir, toDir, listOfFiles, overwrite=False, smallList=False)
#define LogDebug(id)

◆ operator=() [1/2]

template<typename TrackerTraits>
PixelCPEFastParamsHost& PixelCPEFastParamsHost< TrackerTraits >::operator= ( PixelCPEFastParamsHost< TrackerTraits > const &  )
delete

◆ operator=() [2/2]

template<typename TrackerTraits>
PixelCPEFastParamsHost& PixelCPEFastParamsHost< TrackerTraits >::operator= ( PixelCPEFastParamsHost< TrackerTraits > &&  )
default

◆ size()

template<typename TrackerTraits>
auto PixelCPEFastParamsHost< TrackerTraits >::size ( void  ) const
inline

Member Data Documentation

◆ buffer_

template<typename TrackerTraits>
Buffer PixelCPEFastParamsHost< TrackerTraits >::buffer_
private

◆ thePixelGenError_

template<typename TrackerTraits>
std::vector<SiPixelGenErrorStore> PixelCPEFastParamsHost< TrackerTraits >::thePixelGenError_
private