CMS 3D CMS Logo

PixelCPEGeneric.cc
Go to the documentation of this file.
2 
5 
6 // Pixel templates contain the rec hit error parameterizaiton
8 
9 // The generic formula
11 
12 // Services
15 
16 #include "boost/multi_array.hpp"
17 
18 #include <iostream>
19 using namespace std;
20 
21 namespace {
22  constexpr float micronsToCm = 1.0e-4;
23 } // namespace
24 
25 //-----------------------------------------------------------------------------
27 //-----------------------------------------------------------------------------
29  const MagneticField* mag,
30  const TrackerGeometry& geom,
31  const TrackerTopology& ttopo,
32  const SiPixelLorentzAngle* lorentzAngle,
33  const SiPixelGenErrorDBObject* genErrorDBObject,
34  const SiPixelLorentzAngle* lorentzAngleWidth = nullptr)
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 }
99 
100 //-----------------------------------------------------------------------------
104 //-----------------------------------------------------------------------------
105 LocalPoint PixelCPEGeneric::localPosition(DetParam const& theDetParam, ClusterParam& theClusterParamBase) const {
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 
117  if (useErrorsFromTemplates_) {
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 
137  SiPixelGenError gtempl(thePixelGenError_);
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,
149  IrradiationBiasCorrection_,
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()),
267  the_eff_charge_cut_lowX,
268  the_eff_charge_cut_highX,
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()),
291  the_eff_charge_cut_lowY,
292  the_eff_charge_cut_highY,
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
299  if (IrradiationBiasCorrection_) {
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 }
342 
343 //============== INFLATED ERROR AND ERRORS FROM DB BELOW ================
344 
345 //-------------------------------------------------------------------------
346 // Hit error in the local frame
347 //-------------------------------------------------------------------------
348 LocalError PixelCPEGeneric::localError(DetParam const& theDetParam, ClusterParam& theClusterParamBase) const {
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 
357  initializeLocalErrorVariables(xerr,
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 }
433 
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 }
virtual float pixelFractionInX(int ixbin) const =0
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
virtual LocalPoint localPosition(const MeasurementPoint &) const =0
static bool pushfile(int filenum, std::vector< SiPixelGenErrorStore > &pixelTemp, std::string dir="")
float the_eff_charge_cut_highY
const SiPixelCluster * theCluster
Definition: PixelCPEBase.h:74
LocalPoint localPosition(DetParam const &theDetParam, ClusterParam &theClusterParam) const override
int maxPixelRow() const
int sizeY() const
std::vector< SiPixelGenErrorStore > thePixelGenError_
T x() const
Definition: PV2DBase.h:43
virtual float pixelFractionInY(int iybin) const =0
bool IrradiationBiasCorrection_
bool NoTemplateErrorsWhenNoTrkAngles_
int minPixelRow() const
T y() const
Definition: PV2DBase.h:44
int charge() const
constexpr float micronsToCm
PixelCPEGeneric(edm::ParameterSet const &conf, const MagneticField *, const TrackerGeometry &, const TrackerTopology &, const SiPixelLorentzAngle *, const SiPixelGenErrorDBObject *, const SiPixelLorentzAngle *)
The constructor.
int qbin(int id, float cotalpha, float cotbeta, float locBz, float locBx, float qclus, bool irradiationCorrections, int &pixmx, float &sigmay, float &deltay, float &sigmax, float &deltax, float &sy1, float &dy1, float &sy2, float &dy2, float &sx1, float &dx1, float &sx2, float &dx2)
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
const PixelTopology * theTopol
Definition: PixelCPEBase.h:48
bool LoadTemplatesFromDB_
Definition: PixelCPEBase.h:241
int minPixelCol() const
virtual bool isItBigPixelInX(int ixbin) const =0
float the_eff_charge_cut_lowX
T sqrt(T t)
Definition: SSEVec.h:23
bool inflate_all_errors_no_trk_angle
int maxPixelCol() const
virtual bool isItBigPixelInY(int iybin) const =0
int sizeX() const
double f[11][100]
float lorxwidth()
signed lorentz x-width (microns)
static void fillPSetDescription(edm::ParameterSetDescription &desc)
Topology::LocalTrackPred loc_trk_pred
Definition: PixelCPEBase.h:88
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
static const int theVerboseLevel
const SiPixelGenErrorDBObject * genErrorDBObject_
Definition: PixelCPEBase.h:234
float the_eff_charge_cut_lowY
float y() const
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
float lorywidth()
signed lorentz y-width (microns)
float x() const
static void fillPSetDescription(edm::ParameterSetDescription &desc)
LocalError localError(DetParam const &theDetParam, ClusterParam &theClusterParam) const override
#define LogDebug(id)
float the_eff_charge_cut_highX