CMS 3D CMS Logo

PixelCPEBase.cc
Go to the documentation of this file.
1 // Move geomCorrection to the concrete class. d.k. 06/06.
2 // Change drift direction. d.k. 06/06
3 // G. Giurgiu (ggiurgiu@pha.jhu.edu), 12/01/06, implemented the function:
4 // computeAnglesFromDetPosition(const SiPixelCluster & cl,
5 // change to use Lorentz angle from DB Lotte Wilke, Jan. 31st, 2008
6 // Change to use Generic error & Template calibration from DB - D.Fehling 11/08
7 
8 
12 
14 
15 #define CORRECT_FOR_BIG_PIXELS
16 
17 // MessageLogger
19 
20 // Magnetic field
22 
23 
24 #include <iostream>
25 
26 using namespace std;
27 
28 //-----------------------------------------------------------------------------
29 // A constructor run for generic and templates
30 //
31 //-----------------------------------------------------------------------------
33  const MagneticField *mag,
34  const TrackerGeometry& geom,
35  const TrackerTopology& ttopo,
36  const SiPixelLorentzAngle * lorentzAngle,
37  const SiPixelGenErrorDBObject * genErrorDBObject,
38  const SiPixelTemplateDBObject * templateDBobject,
39  const SiPixelLorentzAngle * lorentzAngleWidth,
40  int flag)
41 // : useLAAlignmentOffsets_(false), useLAOffsetFromConfig_(false),
42 : useLAOffsetFromConfig_(false),
43 useLAWidthFromConfig_(false), useLAWidthFromDB_(false), theFlag_(flag),
44 magfield_(mag), geom_(geom), ttopo_(ttopo)
45 {
46 
47 #ifdef EDM_ML_DEBUG
48  nRecHitsTotal_=0;
49  nRecHitsUsedEdge_=0,
50 #endif
51 
52  //--- Lorentz angle tangent per Tesla
53  lorentzAngle_ = lorentzAngle;
54  lorentzAngleWidth_ = lorentzAngleWidth;
55 
56  //-- GenError Calibration Object (different from SiPixelCPEGenericErrorParm) from DB
57  genErrorDBObject_ = genErrorDBObject;
58 
59  //-- Template Calibration Object from DB
60  if(theFlag_!=0) templateDBobject_ = templateDBobject; // flag to check if it is generic or templates
61 
62  // Configurables
63  // For both templates & generic
64 
65  // Read templates and/or generic errors from DB
66  LoadTemplatesFromDB_ = conf.getParameter<bool>("LoadTemplatesFromDB");
67 
68  //--- Algorithm's verbosity
70  conf.getUntrackedParameter<int>("VerboseLevel",0);
71 
72  //-- Switch on/off E.B
73  alpha2Order = conf.getParameter<bool>("Alpha2Order");
74 
75  //--- A flag that could be used to change the behavior of
76  //--- clusterProbability() in TSiPixelRecHit (the *transient* one).
77  //--- The problem is that the transient hits are made after the CPE runs
78  //--- and they don't get the access to the PSet, so we pass it via the
79  //--- CPE itself...
80  //
82  = (unsigned int) conf.getParameter<int>("ClusterProbComputationFlag");
83 
84  // This LA related parameters are only relevant for the Generic algo
85  // They still have to be used in Base since the LA computation is in Base
86 
87  // Use LA-width from DB.
88  // If both (this and from config) are false LA-width is calcuated from LA-offset
89  useLAWidthFromDB_ = conf.existsAs<bool>("useLAWidthFromDB")?
90  conf.getParameter<bool>("useLAWidthFromDB"):false;
91 
92  // Use Alignment LA-offset in generic
93  // (Experimental; leave commented out)
94  //useLAAlignmentOffsets_ = conf.existsAs<bool>("useLAAlignmentOffsets")?
95  //conf.getParameter<bool>("useLAAlignmentOffsets"):false;
96 
97  // Used only for testing
98  lAOffset_ = conf.existsAs<double>("lAOffset")? // fixed LA value
99  conf.getParameter<double>("lAOffset"):0.0;
100  lAWidthBPix_ = conf.existsAs<double>("lAWidthBPix")? // fixed LA width
101  conf.getParameter<double>("lAWidthBPix"):0.0;
102  lAWidthFPix_ = conf.existsAs<double>("lAWidthFPix")? // fixed LA width
103  conf.getParameter<double>("lAWidthFPix"):0.0;
104 
105  // Use LA-offset from config, for testing only
106  if (lAOffset_>0.0)
107  useLAOffsetFromConfig_ = true;
108  // Use LA-width from config, split into fpix & bpix, for testing only
109  if (lAWidthBPix_>0.0 || lAWidthFPix_>0.0)
110  useLAWidthFromConfig_ = true;
111 
112 
113  // For Templates only
114  // Compute the Lorentz shifts for this detector element for templates (from Alignment)
115  DoLorentz_ = conf.existsAs<bool>("DoLorentz")?conf.getParameter<bool>("DoLorentz"):false;
116 
117  LogDebug("PixelCPEBase") <<" LA constants - "
118  << lAOffset_ << " " << lAWidthBPix_ << " " <<lAWidthFPix_ << endl; //dk
119 
120  fillDetParams();
121 }
122 
123 
124 //-----------------------------------------------------------------------------
125 // Fill all variables which are constant for an event (geometry)
126 //-----------------------------------------------------------------------------
128 {
129  // &&& PM: I have no idea what this code is doing, and what it is doing here!???
130  //
131  auto const & dus = geom_.detUnits();
132  unsigned m_detectors = dus.size();
133  for(unsigned int i=1;i<7;++i) {
134  LogDebug("PixelCPEBase:: LookingForFirstStrip") << "Subdetector " << i
135  << " GeomDetEnumerator " << GeomDetEnumerators::tkDetEnum[i]
136  << " offset " << geom_.offsetDU(GeomDetEnumerators::tkDetEnum[i])
137  << " is it strip? " << (geom_.offsetDU(GeomDetEnumerators::tkDetEnum[i]) != dus.size() ?
138  dus[geom_.offsetDU(GeomDetEnumerators::tkDetEnum[i])]->type().isTrackerStrip() : false);
139  if(geom_.offsetDU(GeomDetEnumerators::tkDetEnum[i]) != dus.size() &&
140  dus[geom_.offsetDU(GeomDetEnumerators::tkDetEnum[i])]->type().isTrackerStrip()) {
142  }
143  }
144  LogDebug("LookingForFirstStrip") << " Chosen offset: " << m_detectors;
145 
146 
147  m_DetParams.resize(m_detectors);
148  LogDebug("PixelCPEBase::fillDetParams():") <<"caching "<<m_detectors<<" pixel detectors"<<endl;
149  for (unsigned i=0; i!=m_detectors;++i) {
150  auto & p=m_DetParams[i];
151  p.theDet = dynamic_cast<const PixelGeomDetUnit*>(dus[i]);
152  assert(p.theDet);
153  assert(p.theDet->index()==int(i));
154 
155  p.theOrigin = p.theDet->surface().toLocal(GlobalPoint(0,0,0));
156 
157  //--- p.theDet->type() returns a GeomDetType, which implements subDetector()
158  p.thePart = p.theDet->type().subDetector();
159 
160 
161  //--- The location in of this DetUnit in a cyllindrical coord system (R,Z)
162  //--- The call goes via BoundSurface, returned by p.theDet->surface(), but
163  //--- position() is implemented in GloballyPositioned<> template
164  //--- ( BoundSurface : Surface : GloballyPositioned<float> )
165  //p.theDetR = p.theDet->surface().position().perp(); //Not used, AH
166  //p.theDetZ = p.theDet->surface().position().z(); //Not used, AH
167  //--- Define parameters for chargewidth calculation
168 
169  //--- bounds() is implemented in BoundSurface itself.
170  p.theThickness = p.theDet->surface().bounds().thickness();
171 
172  // Cache the det id for templates and generic erros
173 
174  if(theFlag_==0) { // for generic
175  if(LoadTemplatesFromDB_ ) // do only if genError requested
176  p.detTemplateId = genErrorDBObject_->getGenErrorID(p.theDet->geographicalId().rawId());
177  } else { // for templates
178  p.detTemplateId = templateDBobject_->getTemplateID(p.theDet->geographicalId());
179  }
180 
181 
182  auto topol = &(p.theDet->specificTopology());
183  p.theTopol=topol;
184  auto const proxyT = dynamic_cast<const ProxyPixelTopology*>(p.theTopol);
185  if (proxyT) p.theRecTopol = dynamic_cast<const RectangularPixelTopology*>(&(proxyT->specificTopology()));
186  else p.theRecTopol = dynamic_cast<const RectangularPixelTopology*>(p.theTopol);
187  assert(p.theRecTopol);
188 
189  //--- The geometrical description of one module/plaquette
190  //p.theNumOfRow = p.theRecTopol->nrows(); // rows in x //Not used, AH. PM: leave commented out.
191  //p.theNumOfCol = p.theRecTopol->ncolumns(); // cols in y //Not used, AH. PM: leave commented out.
192  std::pair<float,float> pitchxy = p.theRecTopol->pitch();
193  p.thePitchX = pitchxy.first; // pitch along x
194  p.thePitchY = pitchxy.second; // pitch along y
195 
196 
197  LocalVector Bfield = p.theDet->surface().toLocal(magfield_->inTesla(p.theDet->surface().position()));
198  p.bz = Bfield.z();
199  p.bx = Bfield.x();
200 
201 
202  //--- Compute the Lorentz shifts for this detector element
203  if ( (theFlag_==0) || DoLorentz_ ) { // do always for generic and if(DOLorentz) for templates
204  p.driftDirection = driftDirection(p, Bfield );
206  }
207 
208 
209  LogDebug("PixelCPEBase::fillDetParams()") << "***** PIXEL LAYOUT *****"
210  << " thePart = " << p.thePart
211  << " theThickness = " << p.theThickness
212  << " thePitchX = " << p.thePitchX
213  << " thePitchY = " << p.thePitchY;
214  // << " theLShiftX = " << p.theLShiftX;
215 
216 
217  }
218 }
219 
220 //-----------------------------------------------------------------------------
221 // One function to cache the variables common for one DetUnit.
222 //-----------------------------------------------------------------------------
223 void
224 PixelCPEBase::setTheClu( DetParam const & theDetParam, ClusterParam & theClusterParam ) const
225 {
226 
227  //--- Geometric Quality Information
228  int minInX,minInY,maxInX,maxInY=0;
229  minInX = theClusterParam.theCluster->minPixelRow();
230  minInY = theClusterParam.theCluster->minPixelCol();
231  maxInX = theClusterParam.theCluster->maxPixelRow();
232  maxInY = theClusterParam.theCluster->maxPixelCol();
233 
234  int min_row(0), min_col(0);
235  int max_row = theDetParam.theRecTopol->nrows() - 1;
236  int max_col = theDetParam.theRecTopol->ncolumns() - 1;
237 
238  if (minInX == min_row)
239  theClusterParam.edgeTypeX_ = 1;
240  else if (maxInX == max_row)
241  theClusterParam.edgeTypeX_ = 2;
242  else
243  theClusterParam.edgeTypeX_ = 0;
244 
245  if(minInY == min_col)
246  theClusterParam.edgeTypeY_ = 1;
247  else if (maxInY == max_col)
248  theClusterParam.edgeTypeY_ = 2;
249  else
250  theClusterParam.edgeTypeY_ = 0;
251 
252  theClusterParam.isOnEdge_ = ( theClusterParam.edgeTypeX_ || theClusterParam.edgeTypeY_ );
253 
254  // &&& FOR NOW UNUSED. KEEP IT IN CASE WE WANT TO USE IT IN THE FUTURE
255  // Bad Pixels have their charge set to 0 in the clusterizer
256  //hasBadPixels_ = false;
257  //for(unsigned int i=0; i<theClusterParam.theCluster->pixelADC().size(); ++i) {
258  //if(theClusterParam.theCluster->pixelADC()[i] == 0) { hasBadPixels_ = true; break;}
259  //}
260 
261  theClusterParam.spansTwoROCs_ = theDetParam.theRecTopol->containsBigPixelInX(minInX,maxInX) |
262  theDetParam.theRecTopol->containsBigPixelInY(minInY,maxInY);
263 
264 }
265 
266 
267 //-----------------------------------------------------------------------------
268 // Compute alpha_ and beta_ from the LocalTrajectoryParameters.
269 // Note: should become const after both localParameters() become const.
270 //-----------------------------------------------------------------------------
271 void PixelCPEBase::
272 computeAnglesFromTrajectory( DetParam const & theDetParam, ClusterParam & theClusterParam,
273  const LocalTrajectoryParameters & ltp) const
274 {
275 
276  theClusterParam.cotalpha = ltp.dxdz();
277  theClusterParam.cotbeta = ltp.dydz();
278 
279 
280  LocalPoint trk_lp = ltp.position();
281  theClusterParam.trk_lp_x = trk_lp.x();
282  theClusterParam.trk_lp_y = trk_lp.y();
283 
284  theClusterParam.with_track_angle = true;
285 
286  // GG: needed to correct for bows/kinks
287  theClusterParam.loc_trk_pred =
288  Topology::LocalTrackPred(theClusterParam.trk_lp_x, theClusterParam.trk_lp_y,
289  theClusterParam.cotalpha,theClusterParam.cotbeta);
290 
291 }
292 
293 //-----------------------------------------------------------------------------
294 // Estimate theAlpha for barrel, based on the det position.
295 // &&& Needs to be consolidated from the above.
296 //-----------------------------------------------------------------------------
297 //float
298 //PixelCPEBase::estimatedAlphaForBarrel(float centerx) const
299 //{
300 // float tanalpha = theSign * (centerx-theOffsetX) * thePitchX / theDetR;
301 // return PI/2.0 - atan(tanalpha);
302 //}
303 
304 
305 
306 
307 //-----------------------------------------------------------------------------
308 // Compute alpha_ and beta_ from the position of this DetUnit.
309 // &&& DOES NOT WORK FOR NOW. d.k. 6/06
310 // The angles from dets are calculated internaly in the PixelCPEInitial class
311 //-----------------------------------------------------------------------------
312 // G. Giurgiu, 12/01/06 : implement the function
313 void PixelCPEBase::
314 computeAnglesFromDetPosition(DetParam const & theDetParam, ClusterParam & theClusterParam ) const
315 {
316 
317  LocalPoint lp = theDetParam.theTopol->localPosition( MeasurementPoint(theClusterParam.theCluster->x(), theClusterParam.theCluster->y()) );
318  auto gvx = lp.x()-theDetParam.theOrigin.x();
319  auto gvy = lp.y()-theDetParam.theOrigin.y();
320  auto gvz = -1.f/theDetParam.theOrigin.z();
321  //--- Note that the normalization is not required as only the ratio used
322 
323  //theClusterParam.zneg = (gvz < 0); // Not used, AH
324 
325  // calculate angles
326  theClusterParam.cotalpha = gvx*gvz;
327  theClusterParam.cotbeta = gvy*gvz;
328 
329  theClusterParam.with_track_angle = false;
330 
331 
332  /*
333  // used only in dberror param...
334  auto alpha = HALF_PI - std::atan(cotalpha_);
335  auto beta = HALF_PI - std::atan(cotbeta_);
336  if (zneg) { beta -=PI; alpha -=PI;}
337 
338  auto alpha_ = atan2( gv_dot_gvz, gv_dot_gvx );
339  auto beta_ = atan2( gv_dot_gvz, gv_dot_gvy );
340 
341  assert(std::abs(std::round(alpha*10000.f)-std::round(alpha_*10000.f))<2);
342  assert(std::abs(std::round(beta*10000.f)-std::round(beta_*10000.f))<2);
343  */
344 
345 }
346 
347 
348 
349 //------------------------------------------------------------------------
351 {
352  auto i = det.index();
353  //cout << "get parameters of detector " << i << endl;
354  assert(i<int(m_DetParams.size()));
355  //if (i>=int(m_DetParams.size())) m_DetParams.resize(i+1); // should never happen!
356  const DetParam & p = m_DetParams[i];
357  return p;
358 }
359 
360 //-----------------------------------------------------------------------------
361 // Drift direction.
362 // Works OK for barrel and forward.
363 // The formulas used for dir_x,y,z have to be exactly the same as the ones
364 // used in the digitizer (SiPixelDigitizerAlgorithm.cc).
365 // &&& PM: needs to be consolidated, discuss with PS.
366 //-----------------------------------------------------------------------------
368 PixelCPEBase::driftDirection(DetParam & theDetParam, GlobalVector bfield ) const
369 {
370  Frame detFrame(theDetParam.theDet->surface().position(), theDetParam.theDet->surface().rotation());
371  LocalVector Bfield = detFrame.toLocal(bfield);
372  return driftDirection(theDetParam,Bfield);
373 }
374 
375 
377 PixelCPEBase::driftDirection(DetParam & theDetParam, LocalVector Bfield ) const
378 {
379  // Use LA from DB or from config
380  float langle = 0.;
381  if( !useLAOffsetFromConfig_ ) { // get it from DB
382  if(lorentzAngle_ != nullptr) { // a real LA object
383  langle = lorentzAngle_->getLorentzAngle(theDetParam.theDet->geographicalId().rawId());
384  LogDebug("PixelCPEBase::driftDirection()")
385  <<" la "<<langle<<" "<< theDetParam.theDet->geographicalId().rawId() <<endl;
386  } else { // no LA, unused
387  langle = 0; // set to a fake value
388  LogDebug("PixelCPEBase::driftDirection()") <<" LA object is NULL, assume LA = 0"<<endl; //dk
389  }
390  LogDebug("PixelCPEBase::driftDirection()") << " Will use LA Offset from DB "<<langle<<endl;
391  } else { // from config file
392  langle = lAOffset_;
393  LogDebug("PixelCPEBase::driftDirection()") << " Will use LA Offset from config "<<langle<<endl;
394  }
395 
396  // Now do the LA width stuff
397  theDetParam.widthLAFractionX = 1.; // predefine to 1 (default) if things fail
398  theDetParam.widthLAFractionY = 1.;
399 
400  // Compute the charge width, generic only
401  if(theFlag_==0) {
402 
403  if(useLAWidthFromDB_ && (lorentzAngleWidth_ != nullptr) ) {
404  // take it from a separate, special LA DB object (forWidth)
405 
406  auto langleWidth = lorentzAngleWidth_->getLorentzAngle(theDetParam.theDet->geographicalId().rawId());
407  if(langleWidth!=0.0) theDetParam.widthLAFractionX = std::abs(langleWidth/langle);
408  // leave the widthLAFractionY=1.
409  //cout<<" LAWidth lorentz width "<<theDetParam.widthLAFractionX<<" "<<theDetParam.widthLAFractionY<<endl;
410 
411  } else if(useLAWidthFromConfig_) { // get from config
412 
413  double lAWidth=0;
414  if( GeomDetEnumerators::isTrackerPixel(theDetParam.thePart) && GeomDetEnumerators::isBarrel(theDetParam.thePart) ) lAWidth = lAWidthBPix_; // barrel
415  else lAWidth = lAWidthFPix_;
416 
417  if(langle!=0.0) theDetParam.widthLAFractionX = std::abs(lAWidth/langle);
418  // fix the FractionY at 1
419 
420  //cout<<" Lorentz width from config "<<theDetParam.widthLAFractionX<<" "<<theDetParam.widthLAFractionY<<endl;
421 
422  } else { // get if from the offset LA (old method used until 2013)
423  // do nothing
424  //cout<<" Old default LA width method "<<theDetParam.widthLAFractionX<<" "<<theDetParam.widthLAFractionY<<endl;
425 
426  }
427 
428  //cout<<" Final LA fraction "<<theDetParam.widthLAFractionX<<" "<<theDetParam.widthLAFractionY<<endl;
429 
430  } // if flag
431 
432 
433  float alpha2 = alpha2Order ? langle*langle : 0; //
434 
435  // **********************************************************************
436  // Our convention is the following:
437  // +x is defined by the direction of the Lorentz drift!
438  // +z is defined by the direction of E field (so electrons always go into -z!)
439  // +y is defined by +x and +z, and it turns out to be always opposite to the +B field.
440  // **********************************************************************
441 
442  float dir_x = -( langle * Bfield.y() + alpha2* Bfield.z()* Bfield.x() );
443  float dir_y = ( langle * Bfield.x() - alpha2* Bfield.z()* Bfield.y() );
444  float dir_z = -( 1.f + alpha2* Bfield.z()*Bfield.z() );
445  auto scale = 1.f/std::abs( dir_z ); // same as 1 + alpha2*Bfield.z()*Bfield.z()
446  LocalVector dd(dir_x*scale, dir_y*scale, -1.f ); // last is -1 !
447 
448  LogDebug("PixelCPEBase") << " The drift direction in local coordinate is " << dd ;
449 
450  return dd;
451 }
452 
453 //-----------------------------------------------------------------------------
454 // One-shot computation of the driftDirection and both lorentz shifts
455 //-----------------------------------------------------------------------------
456 void
458 {
459  // Max shift (at the other side of the sensor) in cm
460  theDetParam.lorentzShiftInCmX = theDetParam.driftDirection.x()/theDetParam.driftDirection.z() * theDetParam.theThickness; //
461  theDetParam.lorentzShiftInCmY = theDetParam.driftDirection.y()/theDetParam.driftDirection.z() * theDetParam.theThickness; //
462 
463  LogDebug("PixelCPEBase::computeLorentzShifts()") << " lorentzShiftsInCmX,Y = "
464  << theDetParam.lorentzShiftInCmX <<" "
465  << theDetParam.lorentzShiftInCmY <<" "
466  << theDetParam.driftDirection;
467 }
468 
469 //-----------------------------------------------------------------------------
474 //-----------------------------------------------------------------------------
477 {
479  if (theClusterParam.hasFilledProb_) {
480  float probabilityXY=0;
481  if(theClusterParam.filled_from_2d) probabilityXY = theClusterParam.probabilityX_;
482  else if ( theClusterParam.probabilityX_ !=0 && theClusterParam.probabilityY_ !=0 )
483  probabilityXY = theClusterParam.probabilityX_ * theClusterParam.probabilityY_ * (1.f - std::log(theClusterParam.probabilityX_ * theClusterParam.probabilityY_) ) ;
485  qualWord );
486 
488  qualWord );
489  }
491  qualWord );
492 
494  qualWord );
495 
497  qualWord );
498 
500  qualWord );
501 
503  qualWord );
504 
505  return qualWord;
506 }
#define LogDebug(id)
T getParameter(std::string const &) const
void setProbabilityXY(float prob, QualWordType &qualWord) const
T getUntrackedParameter(std::string const &, T const &) const
static const Packing thePacking
int minPixelCol() const
bool existsAs(std::string const &parameterName, bool trackiness=true) const
checks if a parameter exists as a given type
Definition: ParameterSet.h:161
Local3DPoint theOrigin
Definition: PixelCPEBase.h:66
const SiPixelLorentzAngle * lorentzAngleWidth_
Definition: PixelCPEBase.h:249
const DetContainer & detUnits() const override
Returm a vector of all GeomDet.
LocalVector driftDirection(DetParam &theDetParam, GlobalVector bfield) const
short getTemplateID(const uint32_t &detid) const
LocalPoint position() const
Local x and y position coordinates.
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
const SiPixelCluster * theCluster
Definition: PixelCPEBase.h:88
bool isBarrel(GeomDetEnumerators::SubDetector m)
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:50
T y() const
Definition: PV3DBase.h:63
DetParams m_DetParams
Definition: PixelCPEBase.h:284
void fillDetParams()
short getGenErrorID(const uint32_t &detid) const
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:42
const PixelGeomDetUnit * theDet
Definition: PixelCPEBase.h:60
GeomDetType::SubDetector thePart
Definition: PixelCPEBase.h:65
const RectangularPixelTopology * theRecTopol
Definition: PixelCPEBase.h:63
bool useLAWidthFromDB_
Definition: PixelCPEBase.h:238
float lAWidthBPix_
Definition: PixelCPEBase.h:233
int maxPixelRow() const
bool useLAWidthFromConfig_
Definition: PixelCPEBase.h:237
Measurement2DPoint MeasurementPoint
Measurement points are two-dimensional by default.
const PixelTopology * theTopol
Definition: PixelCPEBase.h:62
int minPixelRow() const
bool LoadTemplatesFromDB_
Definition: PixelCPEBase.h:258
void computeAnglesFromTrajectory(DetParam const &theDetParam, ClusterParam &theClusterParam, const LocalTrajectoryParameters &ltp) const
unsigned int offsetDU(SubDetector sid) const
T z() const
Definition: PV3DBase.h:64
void computeLorentzShifts(DetParam &) const
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const SiPixelTemplateDBObject * templateDBobject_
Definition: PixelCPEBase.h:254
void setHasBadPixels(bool flag, QualWordType &qualWord) const
DetId geographicalId() const
The label of this GeomDet.
Definition: GeomDet.h:79
double f[11][100]
const MagneticField * magfield_
Definition: PixelCPEBase.h:244
int index() const
Definition: GeomDet.h:99
void computeAnglesFromDetPosition(DetParam const &theDetParam, ClusterParam &theClusterParam) const
void setProbabilityQ(float prob, QualWordType &qualWord) const
SiPixelRecHitQuality::QualWordType rawQualityWord(ClusterParam &theClusterParam) const
SubDetector tkDetEnum[8]
void setSpansTwoROCs(bool flag, QualWordType &qualWord) const
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
Topology::LocalTrackPred loc_trk_pred
Definition: PixelCPEBase.h:102
void setIsOnEdge(bool flag, QualWordType &qualWord) const
const SiPixelLorentzAngle * lorentzAngle_
Definition: PixelCPEBase.h:248
const SiPixelGenErrorDBObject * genErrorDBObject_
Definition: PixelCPEBase.h:251
void setTheClu(DetParam const &, ClusterParam &theClusterParam) const
int maxPixelCol() const
virtual LocalPoint localPosition(const MeasurementPoint &) const =0
bool useLAOffsetFromConfig_
Definition: PixelCPEBase.h:236
const TrackerGeometry & geom_
Definition: PixelCPEBase.h:245
PixelCPEBase(edm::ParameterSet const &conf, const MagneticField *mag, const TrackerGeometry &geom, const TrackerTopology &ttopo, const SiPixelLorentzAngle *lorentzAngle, const SiPixelGenErrorDBObject *genErrorDBObject, const SiPixelTemplateDBObject *templateDBobject, const SiPixelLorentzAngle *lorentzAngleWidth, int flag=0)
Definition: PixelCPEBase.cc:32
float getLorentzAngle(const uint32_t &) const
float y() const
LocalVector driftDirection
Definition: PixelCPEBase.h:73
const RotationType & rotation() const
bool containsBigPixelInY(int iymin, int iymax) const override
bool containsBigPixelInX(int ixmin, int ixmax) const override
void setHasFilledProb(bool flag, QualWordType &qualWord) const
T x() const
Definition: PV3DBase.h:62
const PositionType & position() const
void setQBin(int qbin, QualWordType &qualWord) const
float x() const
bool isTrackerPixel(GeomDetEnumerators::SubDetector m)
float lAWidthFPix_
Definition: PixelCPEBase.h:234
DetParam const & detParam(const GeomDetUnit &det) const