CMS 3D CMS Logo

PixelCPEGeneric.cc
Go to the documentation of this file.
2 
6 
7 // Pixel templates contain the rec hit error parameterizaiton
9 
10 // The generic formula
12 
13 // Services
16 
17 #include "boost/multi_array.hpp"
18 
19 #include <iostream>
20 using namespace std;
21 
22 namespace {
23  constexpr float micronsToCm = 1.0e-4;
24 } // namespace
25 
26 //-----------------------------------------------------------------------------
28 //-----------------------------------------------------------------------------
30  const MagneticField* mag,
31  const TrackerGeometry& geom,
32  const TrackerTopology& ttopo,
33  const SiPixelLorentzAngle* lorentzAngle,
34  const SiPixelGenErrorDBObject* genErrorDBObject,
35  const SiPixelLorentzAngle* lorentzAngleWidth = nullptr)
36  : PixelCPEGenericBase(conf, mag, geom, ttopo, lorentzAngle, genErrorDBObject, lorentzAngleWidth) {
37  if (theVerboseLevel > 0)
38  LogDebug("PixelCPEGeneric") << " constructing a generic algorithm for ideal pixel detector.\n"
39  << " CPEGeneric:: VerboseLevel = " << theVerboseLevel;
40 
41  // Externally settable cuts
42  the_eff_charge_cut_lowX = conf.getParameter<double>("eff_charge_cut_lowX");
43  the_eff_charge_cut_lowY = conf.getParameter<double>("eff_charge_cut_lowY");
44  the_eff_charge_cut_highX = conf.getParameter<double>("eff_charge_cut_highX");
45  the_eff_charge_cut_highY = conf.getParameter<double>("eff_charge_cut_highY");
46  the_size_cutX = conf.getParameter<double>("size_cutX");
47  the_size_cutY = conf.getParameter<double>("size_cutY");
48 
49  // Externally settable flags to inflate errors
50  inflate_errors = conf.getParameter<bool>("inflate_errors");
51  inflate_all_errors_no_trk_angle = conf.getParameter<bool>("inflate_all_errors_no_trk_angle");
52 
53  NoTemplateErrorsWhenNoTrkAngles_ = conf.getParameter<bool>("NoTemplateErrorsWhenNoTrkAngles");
54  IrradiationBiasCorrection_ = conf.getParameter<bool>("IrradiationBiasCorrection");
55  DoCosmics_ = conf.getParameter<bool>("DoCosmics");
56 
57  isPhase2_ = conf.getParameter<bool>("isPhase2");
58 
59  // For cosmics force the use of simple errors
60  if ((DoCosmics_))
62 
64  throw cms::Exception("PixelCPEGeneric::PixelCPEGeneric: ")
65  << "\nERROR: useErrorsFromTemplates_ is set to False in PixelCPEGeneric_cfi.py. "
66  << " In this case it does not make sense to set any of the following to True: "
67  << " truncatePixelCharge_, IrradiationBiasCorrection_, DoCosmics_, LoadTemplatesFromDB_ !!!"
68  << "\n\n";
69  }
70 
71  // Use errors from templates or from GenError
73  if (LoadTemplatesFromDB_) { // From DB
75  throw cms::Exception("InvalidCalibrationLoaded")
76  << "ERROR: GenErrors not filled correctly. Check the sqlite file. Using SiPixelTemplateDBObject version "
77  << (*genErrorDBObject_).version();
78  LogDebug("PixelCPEGeneric") << "Loaded genErrorDBObject v" << (*genErrorDBObject_).version();
79  } else { // From file
81  throw cms::Exception("InvalidCalibrationLoaded")
82  << "ERROR: GenErrors not loaded correctly from text file. Reconstruction will fail.";
83  } // if load from DB
84 
85  } else {
86 #ifdef EDM_ML_DEBUG
87  cout << " Use simple parametrised errors " << endl;
88 #endif
89  } // if ( useErrorsFromTemplates_ )
90 
91 #ifdef EDM_ML_DEBUG
92  cout << "From PixelCPEGeneric::PixelCPEGeneric(...)" << endl;
93  cout << "(int)useErrorsFromTemplates_ = " << (int)useErrorsFromTemplates_ << endl;
94  cout << "truncatePixelCharge_ = " << (int)truncatePixelCharge_ << endl;
95  cout << "IrradiationBiasCorrection_ = " << (int)IrradiationBiasCorrection_ << endl;
96  cout << "(int)DoCosmics_ = " << (int)DoCosmics_ << endl;
97  cout << "(int)LoadTemplatesFromDB_ = " << (int)LoadTemplatesFromDB_ << endl;
98 #endif
99 }
100 
101 //-----------------------------------------------------------------------------
105 //-----------------------------------------------------------------------------
106 LocalPoint PixelCPEGeneric::localPosition(DetParam const& theDetParam, ClusterParam& theClusterParamBase) const {
107  ClusterParamGeneric& theClusterParam = static_cast<ClusterParamGeneric&>(theClusterParamBase);
108 
109  //cout<<" in PixelCPEGeneric:localPosition - "<<endl; //dk
110 
111  float chargeWidthX = (theDetParam.lorentzShiftInCmX * theDetParam.widthLAFractionX);
112  float chargeWidthY = (theDetParam.lorentzShiftInCmY * theDetParam.widthLAFractionY);
113  float shiftX = 0.5f * theDetParam.lorentzShiftInCmX;
114  float shiftY = 0.5f * theDetParam.lorentzShiftInCmY;
115 
116  //cout<<" main la width "<<chargeWidthX<<" "<<chargeWidthY<<endl;
117 
118  if (useErrorsFromTemplates_) {
119  float qclus = theClusterParam.theCluster->charge();
120  float locBz = theDetParam.bz;
121  float locBx = theDetParam.bx;
122  //cout << "PixelCPEGeneric::localPosition(...) : locBz = " << locBz << endl;
123 
124  theClusterParam.pixmx = -999; // max pixel charge for truncation of 2-D cluster
125  theClusterParam.sigmay = -999.9; // CPE Generic y-error for multi-pixel cluster
126  theClusterParam.deltay = -999.9; // CPE Generic y-bias for multi-pixel cluster
127  theClusterParam.sigmax = -999.9; // CPE Generic x-error for multi-pixel cluster
128  theClusterParam.deltax = -999.9; // CPE Generic x-bias for multi-pixel cluster
129  theClusterParam.sy1 = -999.9; // CPE Generic y-error for single single-pixel
130  theClusterParam.dy1 = -999.9; // CPE Generic y-bias for single single-pixel cluster
131  theClusterParam.sy2 = -999.9; // CPE Generic y-error for single double-pixel cluster
132  theClusterParam.dy2 = -999.9; // CPE Generic y-bias for single double-pixel cluster
133  theClusterParam.sx1 = -999.9; // CPE Generic x-error for single single-pixel cluster
134  theClusterParam.dx1 = -999.9; // CPE Generic x-bias for single single-pixel cluster
135  theClusterParam.sx2 = -999.9; // CPE Generic x-error for single double-pixel cluster
136  theClusterParam.dx2 = -999.9; // CPE Generic x-bias for single double-pixel cluster
137 
138  SiPixelGenError gtempl(thePixelGenError_);
139  int gtemplID_ = theDetParam.detTemplateId;
140 
141  //int gtemplID0 = genErrorDBObject_->getGenErrorID(theDetParam.theDet->geographicalId().rawId());
142  //if(gtemplID0!=gtemplID_) cout<<" different id "<< gtemplID_<<" "<<gtemplID0<<endl;
143 
144  theClusterParam.qBin_ = gtempl.qbin(gtemplID_,
145  theClusterParam.cotalpha,
146  theClusterParam.cotbeta,
147  locBz,
148  locBx,
149  qclus,
150  IrradiationBiasCorrection_,
151  theClusterParam.pixmx,
152  theClusterParam.sigmay,
153  theClusterParam.deltay,
154  theClusterParam.sigmax,
155  theClusterParam.deltax,
156  theClusterParam.sy1,
157  theClusterParam.dy1,
158  theClusterParam.sy2,
159  theClusterParam.dy2,
160  theClusterParam.sx1,
161  theClusterParam.dx1,
162  theClusterParam.sx2,
163  theClusterParam.dx2);
164 
165  // now use the charge widths stored in the new generic template headers (change to the
166  // incorrect sign convention of the base class)
167  bool useLAWidthFromGenError = false;
168  if (useLAWidthFromGenError) {
169  chargeWidthX = (-micronsToCm * gtempl.lorxwidth());
170  chargeWidthY = (-micronsToCm * gtempl.lorywidth());
171  LogDebug("PixelCPE localPosition():") << "redefine la width (gen-error)" << chargeWidthX << chargeWidthY;
172  }
173  LogDebug("PixelCPE localPosition():") << "GenError:" << gtemplID_;
174 
175  // These numbers come in microns from the qbin(...) call. Transform them to cm.
176  theClusterParam.deltax = theClusterParam.deltax * micronsToCm;
177  theClusterParam.dx1 = theClusterParam.dx1 * micronsToCm;
178  theClusterParam.dx2 = theClusterParam.dx2 * micronsToCm;
179 
180  theClusterParam.deltay = theClusterParam.deltay * micronsToCm;
181  theClusterParam.dy1 = theClusterParam.dy1 * micronsToCm;
182  theClusterParam.dy2 = theClusterParam.dy2 * micronsToCm;
183 
184  theClusterParam.sigmax = theClusterParam.sigmax * micronsToCm;
185  theClusterParam.sx1 = theClusterParam.sx1 * micronsToCm;
186  theClusterParam.sx2 = theClusterParam.sx2 * micronsToCm;
187 
188  theClusterParam.sigmay = theClusterParam.sigmay * micronsToCm;
189  theClusterParam.sy1 = theClusterParam.sy1 * micronsToCm;
190  theClusterParam.sy2 = theClusterParam.sy2 * micronsToCm;
191 
192  } // if ( useErrorsFromTemplates_ )
193  else {
194  theClusterParam.qBin_ = 0;
195  }
196 
197  int q_f_X;
198  int q_l_X;
199  int q_f_Y;
200  int q_l_Y;
201  collect_edge_charges(theClusterParam, q_f_X, q_l_X, q_f_Y, q_l_Y, useErrorsFromTemplates_ && truncatePixelCharge_);
202 
203  //--- Find the inner widths along X and Y in one shot. We
204  //--- compute the upper right corner of the inner pixels
205  //--- (== lower left corner of upper right pixel) and
206  //--- the lower left corner of the inner pixels
207  //--- (== upper right corner of lower left pixel), and then
208  //--- subtract these two points in the formula.
209 
210  //--- Upper Right corner of Lower Left pixel -- in measurement frame
211  MeasurementPoint meas_URcorn_LLpix(theClusterParam.theCluster->minPixelRow() + 1.0,
212  theClusterParam.theCluster->minPixelCol() + 1.0);
213 
214  //--- Lower Left corner of Upper Right pixel -- in measurement frame
215  MeasurementPoint meas_LLcorn_URpix(theClusterParam.theCluster->maxPixelRow(),
216  theClusterParam.theCluster->maxPixelCol());
217 
218  //--- These two now converted into the local
219  LocalPoint local_URcorn_LLpix;
220  LocalPoint local_LLcorn_URpix;
221 
222  // PixelCPEGeneric can be used with or without track angles
223  // If PixelCPEGeneric is called with track angles, use them to correct for bows/kinks:
224  if (theClusterParam.with_track_angle) {
225  local_URcorn_LLpix = theDetParam.theTopol->localPosition(meas_URcorn_LLpix, theClusterParam.loc_trk_pred);
226  local_LLcorn_URpix = theDetParam.theTopol->localPosition(meas_LLcorn_URpix, theClusterParam.loc_trk_pred);
227  } else {
228  local_URcorn_LLpix = theDetParam.theTopol->localPosition(meas_URcorn_LLpix);
229  local_LLcorn_URpix = theDetParam.theTopol->localPosition(meas_LLcorn_URpix);
230  }
231 
232 #ifdef EDM_ML_DEBUG
233  if (theVerboseLevel > 20) {
234  cout << "\n\t >>> theClusterParam.theCluster->x = " << theClusterParam.theCluster->x()
235  << "\n\t >>> theClusterParam.theCluster->y = " << theClusterParam.theCluster->y()
236  << "\n\t >>> cluster: minRow = " << theClusterParam.theCluster->minPixelRow()
237  << " minCol = " << theClusterParam.theCluster->minPixelCol()
238  << "\n\t >>> cluster: maxRow = " << theClusterParam.theCluster->maxPixelRow()
239  << " maxCol = " << theClusterParam.theCluster->maxPixelCol()
240  << "\n\t >>> meas: inner lower left = " << meas_URcorn_LLpix.x() << "," << meas_URcorn_LLpix.y()
241  << "\n\t >>> meas: inner upper right = " << meas_LLcorn_URpix.x() << "," << meas_LLcorn_URpix.y() << endl;
242  }
243 #endif
244 
245  //--- &&& Note that the cuts below should not be hardcoded (like in Orca and
246  //--- &&& CPEFromDetPosition/PixelCPEInitial), but rather be
247  //--- &&& externally settable (but tracked) parameters.
248 
249  //--- Position, including the half lorentz shift
250 
251 #ifdef EDM_ML_DEBUG
252  if (theVerboseLevel > 20)
253  cout << "\t >>> Generic:: processing X" << endl;
254 #endif
255 
257  theClusterParam.theCluster->sizeX(),
258  q_f_X,
259  q_l_X,
260  local_URcorn_LLpix.x(),
261  local_LLcorn_URpix.x(),
262  chargeWidthX, // lorentz shift in cm
263  theDetParam.theThickness,
264  theClusterParam.cotalpha,
265  theDetParam.thePitchX,
266  theDetParam.theRecTopol->isItBigPixelInX(theClusterParam.theCluster->minPixelRow()),
267  theDetParam.theRecTopol->isItBigPixelInX(theClusterParam.theCluster->maxPixelRow()),
268  the_eff_charge_cut_lowX,
269  the_eff_charge_cut_highX,
270  the_size_cutX); // cut for eff charge width &&&
271 
272  // apply the lorentz offset correction
273  xPos = xPos + shiftX;
274 
275 #ifdef EDM_ML_DEBUG
276  if (theVerboseLevel > 20)
277  cout << "\t >>> Generic:: processing Y" << endl;
278 #endif
279 
281  theClusterParam.theCluster->sizeY(),
282  q_f_Y,
283  q_l_Y,
284  local_URcorn_LLpix.y(),
285  local_LLcorn_URpix.y(),
286  chargeWidthY, // lorentz shift in cm
287  theDetParam.theThickness,
288  theClusterParam.cotbeta,
289  theDetParam.thePitchY,
290  theDetParam.theRecTopol->isItBigPixelInY(theClusterParam.theCluster->minPixelCol()),
291  theDetParam.theRecTopol->isItBigPixelInY(theClusterParam.theCluster->maxPixelCol()),
292  the_eff_charge_cut_lowY,
293  the_eff_charge_cut_highY,
294  the_size_cutY); // cut for eff charge width &&&
295 
296  // apply the lorentz offset correction
297  yPos = yPos + shiftY;
298 
299  // Apply irradiation corrections
300  if (IrradiationBiasCorrection_) {
301  if (theClusterParam.theCluster->sizeX() == 1) { // size=1
302  // ggiurgiu@jhu.edu, 02/03/09 : for size = 1, the Lorentz shift is already accounted by the irradiation correction
303  //float tmp1 = (0.5 * theDetParam.lorentzShiftInCmX);
304  //cout << "Apply correction correction_dx1 = " << theClusterParam.dx1 << " to xPos = " << xPos;
305  xPos = xPos - (0.5f * theDetParam.lorentzShiftInCmX);
306  // Find if pixel is double (big).
307  bool bigInX = theDetParam.theRecTopol->isItBigPixelInX(theClusterParam.theCluster->maxPixelRow());
308  if (!bigInX)
309  xPos -= theClusterParam.dx1;
310  else
311  xPos -= theClusterParam.dx2;
312  //cout<<" to "<<xPos<<" "<<(tmp1+theClusterParam.dx1)<<endl;
313  } else { // size>1
314  //cout << "Apply correction correction_deltax = " << theClusterParam.deltax << " to xPos = " << xPos;
315  xPos -= theClusterParam.deltax;
316  //cout<<" to "<<xPos<<endl;
317  }
318 
319  if (theClusterParam.theCluster->sizeY() == 1) {
320  // ggiurgiu@jhu.edu, 02/03/09 : for size = 1, the Lorentz shift is already accounted by the irradiation correction
321  yPos = yPos - (0.5f * theDetParam.lorentzShiftInCmY);
322 
323  // Find if pixel is double (big).
324  bool bigInY = theDetParam.theRecTopol->isItBigPixelInY(theClusterParam.theCluster->maxPixelCol());
325  if (!bigInY)
326  yPos -= theClusterParam.dy1;
327  else
328  yPos -= theClusterParam.dy2;
329 
330  } else {
331  //cout << "Apply correction correction_deltay = " << theClusterParam.deltay << " to yPos = " << yPos << endl;
332  yPos -= theClusterParam.deltay;
333  }
334 
335  } // if ( IrradiationBiasCorrection_ )
336 
337  //cout<<" in PixelCPEGeneric:localPosition - pos = "<<xPos<<" "<<yPos<<endl; //dk
338 
339  //--- Now put the two together
340  LocalPoint pos_in_local(xPos, yPos);
341  return pos_in_local;
342 }
343 
344 //============== INFLATED ERROR AND ERRORS FROM DB BELOW ================
345 
346 //-------------------------------------------------------------------------
347 // Hit error in the local frame
348 //-------------------------------------------------------------------------
349 LocalError PixelCPEGeneric::localError(DetParam const& theDetParam, ClusterParam& theClusterParamBase) const {
350  ClusterParamGeneric& theClusterParam = static_cast<ClusterParamGeneric&>(theClusterParamBase);
351 
352  // local variables
353  float xerr, yerr;
354  bool edgex, edgey, bigInX, bigInY;
355  int maxPixelCol, maxPixelRow, minPixelCol, minPixelRow;
356  uint sizex, sizey;
357 
358  initializeLocalErrorVariables(xerr,
359  yerr,
360  edgex,
361  edgey,
362  bigInX,
363  bigInY,
364  maxPixelCol,
365  maxPixelRow,
366  minPixelCol,
367  minPixelRow,
368  sizex,
369  sizey,
370  theDetParam,
371  theClusterParam);
372 
373  bool useTempErrors =
374  useErrorsFromTemplates_ && (!NoTemplateErrorsWhenNoTrkAngles_ || theClusterParam.with_track_angle);
375 
376  if (int(sizex) != (maxPixelRow - minPixelRow + 1))
377  LogDebug("PixelCPEGeneric") << " wrong x";
378  if (int(sizey) != (maxPixelCol - minPixelCol + 1))
379  LogDebug("PixelCPEGeneric") << " wrong y";
380 
381  LogDebug("PixelCPEGeneric") << " edge clus " << xerr << " " << yerr; //dk
382  if (bigInX || bigInY)
383  LogDebug("PixelCPEGeneric") << " big " << bigInX << " " << bigInY;
384  if (edgex || edgey)
385  LogDebug("PixelCPEGeneric") << " edge " << edgex << " " << edgey;
386  LogDebug("PixelCPEGeneric") << " before if " << useErrorsFromTemplates_ << " " << theClusterParam.qBin_;
387  if (theClusterParam.qBin_ == 0)
388  LogDebug("PixelCPEGeneric") << " qbin 0! " << edgex << " " << edgey << " " << bigInX << " " << bigInY << " "
389  << sizex << " " << sizey;
390 
391  // from PixelCPEGenericBase
392  setXYErrors(xerr, yerr, edgex, edgey, sizex, sizey, bigInX, bigInY, useTempErrors, theDetParam, theClusterParam);
393 
394  if (!useTempErrors) {
395  LogDebug("PixelCPEGeneric") << "Track angles are not known.\n"
396  << "Default angle estimation which assumes track from PV (0,0,0) does not work.";
397  }
398 
399  if (!useTempErrors && inflate_errors) {
400  int n_bigx = 0;
401  int n_bigy = 0;
402 
403  for (int irow = 0; irow < 7; ++irow) {
404  if (theDetParam.theRecTopol->isItBigPixelInX(irow + minPixelRow))
405  ++n_bigx;
406  }
407 
408  for (int icol = 0; icol < 21; ++icol) {
409  if (theDetParam.theRecTopol->isItBigPixelInY(icol + minPixelCol))
410  ++n_bigy;
411  }
412 
413  xerr = (float)(sizex + n_bigx) * theDetParam.thePitchX / std::sqrt(12.0f);
414  yerr = (float)(sizey + n_bigy) * theDetParam.thePitchY / std::sqrt(12.0f);
415  }
416 
417 #ifdef EDM_ML_DEBUG
418  if (!(xerr > 0.0))
419  throw cms::Exception("PixelCPEGeneric::localError") << "\nERROR: Negative pixel error xerr = " << xerr << "\n\n";
420 
421  if (!(yerr > 0.0))
422  throw cms::Exception("PixelCPEGeneric::localError") << "\nERROR: Negative pixel error yerr = " << yerr << "\n\n";
423 #endif
424 
425  LogDebug("PixelCPEGeneric") << " errors " << xerr << " " << yerr; //dk
426  if (theClusterParam.qBin_ == 0)
427  LogDebug("PixelCPEGeneric") << " qbin 0 " << xerr << " " << yerr;
428 
429  auto xerr_sq = xerr * xerr;
430  auto yerr_sq = yerr * yerr;
431 
432  return LocalError(xerr_sq, 0, yerr_sq);
433 }
434 
437  desc.add<double>("eff_charge_cut_highX", 1.0);
438  desc.add<double>("eff_charge_cut_highY", 1.0);
439  desc.add<double>("eff_charge_cut_lowX", 0.0);
440  desc.add<double>("eff_charge_cut_lowY", 0.0);
441  desc.add<double>("size_cutX", 3.0);
442  desc.add<double>("size_cutY", 3.0);
443  desc.add<double>("EdgeClusterErrorX", 50.0);
444  desc.add<double>("EdgeClusterErrorY", 85.0);
445  desc.add<bool>("inflate_errors", false);
446  desc.add<bool>("inflate_all_errors_no_trk_angle", false);
447  desc.add<bool>("NoTemplateErrorsWhenNoTrkAngles", false);
448  desc.add<bool>("UseErrorsFromTemplates", true);
449  desc.add<bool>("TruncatePixelCharge", true);
450  desc.add<bool>("IrradiationBiasCorrection", false);
451  desc.add<bool>("DoCosmics", false);
452  desc.add<bool>("isPhase2", false);
453  desc.add<bool>("SmallPitch", false);
454 }
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:76
LocalPoint localPosition(DetParam const &theDetParam, ClusterParam &theClusterParam) const override
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, bool first_is_big, bool last_is_big, float eff_charge_cut_low, float eff_charge_cut_high, float size_cut)
Definition: SiPixelUtils.cc:16
int maxPixelRow() const
int sizeY() const
std::vector< SiPixelGenErrorStore > thePixelGenError_
T x() const
Definition: PV2DBase.h:43
bool IrradiationBiasCorrection_
bool NoTemplateErrorsWhenNoTrkAngles_
const RectangularPixelTopology * theRecTopol
Definition: PixelCPEBase.h:50
int minPixelRow() const
T y() const
Definition: PV2DBase.h:44
int charge() const
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:49
bool LoadTemplatesFromDB_
Definition: PixelCPEBase.h:243
int minPixelCol() const
bool isItBigPixelInX(const int ixbin) const override
float the_eff_charge_cut_lowX
T sqrt(T t)
Definition: SSEVec.h:19
bool inflate_all_errors_no_trk_angle
int maxPixelCol() const
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:90
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
static const int theVerboseLevel
const SiPixelGenErrorDBObject * genErrorDBObject_
Definition: PixelCPEBase.h:236
float the_eff_charge_cut_lowY
float y() const
float lorywidth()
signed lorentz y-width (microns)
float x() const
bool isItBigPixelInY(const int iybin) const override
static void fillPSetDescription(edm::ParameterSetDescription &desc)
LocalError localError(DetParam const &theDetParam, ClusterParam &theClusterParam) const override
#define LogDebug(id)
float the_eff_charge_cut_highX