CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Classes | Public Member Functions | Protected Types | Protected Attributes | Private Types | Private Member Functions | Private Attributes
PixelCPEBase Class Referenceabstract

#include <PixelCPEBase.h>

Inheritance diagram for PixelCPEBase:
PixelClusterParameterEstimator PixelCPEGeneric PixelCPETemplateReco

Classes

struct  ClusterParam
 
struct  DetParam
 

Public Member Functions

ReturnType getParameters (const SiPixelCluster &cl, const GeomDetUnit &det) const
 
ReturnType getParameters (const SiPixelCluster &cl, const GeomDetUnit &det, const LocalTrajectoryParameters &ltp) const
 
 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 ()
 

Protected Types

typedef GloballyPositioned
< double > 
Frame
 

Protected Attributes

bool alpha2Order
 
bool DoLorentz_
 
const SiPixelGenErrorDBObjectgenErrorDBObject_
 
const TrackerGeometrygeom_
 
float lAOffset_
 
float lAWidthBPix_
 
float lAWidthFPix_
 
bool LoadTemplatesFromDB_
 
const SiPixelLorentzAnglelorentzAngle_
 
const SiPixelLorentzAnglelorentzAngleWidth_
 
const MagneticFieldmagfield_
 
const SiPixelTemplateDBObjecttemplateDBobject_
 
int theFlag_
 
int theVerboseLevel
 
const TrackerTopologyttopo_
 
bool useLAOffsetFromConfig_
 
bool useLAWidthFromConfig_
 
bool useLAWidthFromDB_
 
- Protected Attributes inherited from PixelClusterParameterEstimator
unsigned int clusterProbComputationFlag_
 

Private Types

using DetParams = std::vector< DetParam >
 

Private Member Functions

void computeAnglesFromDetPosition (DetParam const &theDetParam, ClusterParam &theClusterParam) const
 
void computeAnglesFromTrajectory (DetParam const &theDetParam, ClusterParam &theClusterParam, const LocalTrajectoryParameters &ltp) const
 
void computeLorentzShifts (DetParam &) const
 
virtual ClusterParamcreateClusterParam (const SiPixelCluster &cl) const =0
 
DetParam const & detParam (const GeomDetUnit &det) const
 
LocalVector driftDirection (DetParam &theDetParam, GlobalVector bfield) const
 
LocalVector driftDirection (DetParam &theDetParam, LocalVector bfield) const
 
void fillDetParams ()
 
bool isFlipped (DetParam const &theDetParam) const
 
virtual LocalError localError (DetParam const &theDetParam, ClusterParam &theClusterParam) const =0
 
virtual LocalPoint localPosition (DetParam const &theDetParam, ClusterParam &theClusterParam) const =0
 
SiPixelRecHitQuality::QualWordType rawQualityWord (ClusterParam &theClusterParam) const
 
void setTheClu (DetParam const &, ClusterParam &theClusterParam) const
 

Private Attributes

DetParams m_DetParams =DetParams(1440)
 

Additional Inherited Members

- Public Types inherited from PixelClusterParameterEstimator
typedef std::pair< LocalPoint,
LocalError
LocalValues
 
using ReturnType = std::tuple< LocalPoint, LocalError, SiPixelRecHitQuality::QualWordType >
 
typedef std::vector< LocalValuesVLocalValues
 

Detailed Description

Definition at line 54 of file PixelCPEBase.h.

Member Typedef Documentation

using PixelCPEBase::DetParams = std::vector<DetParam>
private

Definition at line 280 of file PixelCPEBase.h.

typedef GloballyPositioned<double> PixelCPEBase::Frame
protected

Definition at line 216 of file PixelCPEBase.h.

Constructor & Destructor Documentation

PixelCPEBase::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 at line 41 of file PixelCPEBase.cc.

References alpha2Order, PixelClusterParameterEstimator::clusterProbComputationFlag_, DoLorentz_, edm::ParameterSet::existsAs(), fillDetParams(), genErrorDBObject_, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), lAOffset_, lAWidthBPix_, lAWidthFPix_, LoadTemplatesFromDB_, LogDebug, lorentzAngle_, lorentzAngleWidth_, templateDBobject_, theFlag_, theVerboseLevel, useLAOffsetFromConfig_, useLAWidthFromConfig_, and useLAWidthFromDB_.

Referenced by PixelCPEGeneric::PixelCPEGeneric().

51  : useLAOffsetFromConfig_(false),
53  magfield_(mag), geom_(geom), ttopo_(ttopo)
54 {
55 
56 #ifdef EDM_ML_DEBUG
57  nRecHitsTotal_=0;
58  nRecHitsUsedEdge_=0,
59 #endif
60 
61  //--- Lorentz angle tangent per Tesla
62  lorentzAngle_ = lorentzAngle;
63  lorentzAngleWidth_ = lorentzAngleWidth;
64 
65  //-- GenError Calibration Object (different from SiPixelCPEGenericErrorParm) from DB
66  genErrorDBObject_ = genErrorDBObject;
67  //cout<<" new errors "<<genErrorDBObject<<" "<<genErrorDBObject_<<endl;
68 
69  //-- Template Calibration Object from DB
70 #ifdef NEW_CPEERROR
71  if(theFlag_!=0) templateDBobject_ = templateDBobject;
72 #else
73  templateDBobject_ = templateDBobject;
74 #endif
75 
76  // Configurables
77  // For both templates & generic
78 
79  // Read templates and/or generic errors from DB
80  LoadTemplatesFromDB_ = conf.getParameter<bool>("LoadTemplatesFromDB");
81 
82  //--- Algorithm's verbosity
84  conf.getUntrackedParameter<int>("VerboseLevel",0);
85 
86  //-- Switch on/off E.B
87  alpha2Order = conf.getParameter<bool>("Alpha2Order");
88 
89  //--- A flag that could be used to change the behavior of
90  //--- clusterProbability() in TSiPixelRecHit (the *transient* one).
91  //--- The problem is that the transient hits are made after the CPE runs
92  //--- and they don't get the access to the PSet, so we pass it via the
93  //--- CPE itself...
94  //
96  = (unsigned int) conf.getParameter<int>("ClusterProbComputationFlag");
97 
98  // This LA related parameters are only relevant for the Generic algo
99  // They still have to be used in Base since the LA computation is in Base
100 
101  // Use LA-width from DB.
102  // If both (this and from config) are false LA-width is calcuated from LA-offset
103  useLAWidthFromDB_ = conf.existsAs<bool>("useLAWidthFromDB")?
104  conf.getParameter<bool>("useLAWidthFromDB"):false;
105 
106  // Use Alignment LA-offset in generic
107  //useLAAlignmentOffsets_ = conf.existsAs<bool>("useLAAlignmentOffsets")?
108  //conf.getParameter<bool>("useLAAlignmentOffsets"):false;
109 
110 
111  // Used only for testing
112  lAOffset_ = conf.existsAs<double>("lAOffset")? // fixed LA value
113  conf.getParameter<double>("lAOffset"):0.0;
114  lAWidthBPix_ = conf.existsAs<double>("lAWidthBPix")? // fixed LA width
115  conf.getParameter<double>("lAWidthBPix"):0.0;
116  lAWidthFPix_ = conf.existsAs<double>("lAWidthFPix")? // fixed LA width
117  conf.getParameter<double>("lAWidthFPix"):0.0;
118 
119  // Use LA-offset from config, for testing only
120  if(lAOffset_>0.0) useLAOffsetFromConfig_ = true;
121  // Use LA-width from config, split into fpix & bpix, for testing only
122  if(lAWidthBPix_>0.0 || lAWidthFPix_>0.0) useLAWidthFromConfig_ = true;
123 
124 
125  // For Templates only
126  // Compute the Lorentz shifts for this detector element for templates (from Alignment)
127  DoLorentz_ = conf.existsAs<bool>("DoLorentz")?conf.getParameter<bool>("DoLorentz"):false;
128 
129  LogDebug("PixelCPEBase") <<" LA constants - "
130  <<lAOffset_<<" "<<lAWidthBPix_<<" "<<lAWidthFPix_<<endl; //dk
131 
132  fillDetParams();
133 
134 }
#define LogDebug(id)
const SiPixelLorentzAngle * lorentzAngleWidth_
Definition: PixelCPEBase.h:246
void fillDetParams()
bool useLAWidthFromDB_
Definition: PixelCPEBase.h:235
float lAWidthBPix_
Definition: PixelCPEBase.h:230
bool useLAWidthFromConfig_
Definition: PixelCPEBase.h:234
bool LoadTemplatesFromDB_
Definition: PixelCPEBase.h:255
const SiPixelTemplateDBObject * templateDBobject_
Definition: PixelCPEBase.h:251
const MagneticField * magfield_
Definition: PixelCPEBase.h:241
tuple conf
Definition: dbtoconf.py:185
const TrackerTopology & ttopo_
Definition: PixelCPEBase.h:243
const SiPixelLorentzAngle * lorentzAngle_
Definition: PixelCPEBase.h:245
const SiPixelGenErrorDBObject * genErrorDBObject_
Definition: PixelCPEBase.h:248
bool useLAOffsetFromConfig_
Definition: PixelCPEBase.h:233
const TrackerGeometry & geom_
Definition: PixelCPEBase.h:242
float lAWidthFPix_
Definition: PixelCPEBase.h:231

Member Function Documentation

void PixelCPEBase::computeAnglesFromDetPosition ( DetParam const &  theDetParam,
ClusterParam theClusterParam 
) const
private

Definition at line 343 of file PixelCPEBase.cc.

References PixelCPEBase::ClusterParam::cotalpha, PixelCPEBase::ClusterParam::cotbeta, Topology::localPosition(), PixelCPEBase::ClusterParam::theCluster, PixelCPEBase::DetParam::theOrigin, PixelCPEBase::DetParam::theTopol, PixelCPEBase::ClusterParam::with_track_angle, PV3DBase< T, PVType, FrameType >::x(), SiPixelCluster::x(), PV3DBase< T, PVType, FrameType >::y(), SiPixelCluster::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by getParameters().

344 {
345 
346 
347  /*
348  // get cluster center of gravity (of charge)
349  float xcenter = cl.x();
350  float ycenter = cl.y();
351 
352  // get the cluster position in local coordinates (cm)
353 
354  // ggiurgiu@jhu.edu 12/09/2010 : This function is called without track info, therefore there are no track
355  // angles to provide here. Call the default localPosition (without track info)
356  LocalPoint lp = theTopol->localPosition( MeasurementPoint(xcenter, ycenter) );
357 
358 
359  // get the cluster position in global coordinates (cm)
360  GlobalPoint gp = theDet->surface().toGlobal( lp );
361  float gp_mod = sqrt( gp.x()*gp.x() + gp.y()*gp.y() + gp.z()*gp.z() );
362 
363  // normalize
364  float gpx = gp.x()/gp_mod;
365  float gpy = gp.y()/gp_mod;
366  float gpz = gp.z()/gp_mod;
367 
368  // make a global vector out of the global point; this vector will point from the
369  // origin of the detector to the cluster
370  GlobalVector gv(gpx, gpy, gpz);
371 
372  // make local unit vector along local X axis
373  const Local3DVector lvx(1.0, 0.0, 0.0);
374 
375  // get the unit X vector in global coordinates/
376  GlobalVector gvx = theDet->surface().toGlobal( lvx );
377 
378  // make local unit vector along local Y axis
379  const Local3DVector lvy(0.0, 1.0, 0.0);
380 
381  // get the unit Y vector in global coordinates
382  GlobalVector gvy = theDet->surface().toGlobal( lvy );
383 
384  // make local unit vector along local Z axis
385  const Local3DVector lvz(0.0, 0.0, 1.0);
386 
387  // get the unit Z vector in global coordinates
388  GlobalVector gvz = theDet->surface().toGlobal( lvz );
389 
390  // calculate the components of gv (the unit vector pointing to the cluster)
391  // in the local coordinate system given by the basis {gvx, gvy, gvz}
392  // note that both gv and the basis {gvx, gvy, gvz} are given in global coordinates
393  float gv_dot_gvx = gv.x()*gvx.x() + gv.y()*gvx.y() + gv.z()*gvx.z();
394  float gv_dot_gvy = gv.x()*gvy.x() + gv.y()*gvy.y() + gv.z()*gvy.z();
395  float gv_dot_gvz = gv.x()*gvz.x() + gv.y()*gvz.y() + gv.z()*gvz.z();
396  */
397 
398  // all the above is equivalent to
399  LocalPoint lp = theDetParam.theTopol->localPosition( MeasurementPoint(theClusterParam.theCluster->x(), theClusterParam.theCluster->y()) );
400  auto gvx = lp.x()-theDetParam.theOrigin.x();
401  auto gvy = lp.y()-theDetParam.theOrigin.y();
402  auto gvz = -1.f/theDetParam.theOrigin.z();
403  // normalization not required as only ratio used...
404 
405 
406  //theClusterParam.zneg = (gvz < 0); // Not used, AH
407 
408  // calculate angles
409  theClusterParam.cotalpha = gvx*gvz;
410  theClusterParam.cotbeta = gvy*gvz;
411 
412  theClusterParam.with_track_angle = false;
413 
414 
415  /*
416  // used only in dberror param...
417  auto alpha = HALF_PI - std::atan(cotalpha_);
418  auto beta = HALF_PI - std::atan(cotbeta_);
419  if (zneg) { beta -=PI; alpha -=PI;}
420 
421  auto alpha_ = atan2( gv_dot_gvz, gv_dot_gvx );
422  auto beta_ = atan2( gv_dot_gvz, gv_dot_gvy );
423 
424  assert(std::abs(std::round(alpha*10000.f)-std::round(alpha_*10000.f))<2);
425  assert(std::abs(std::round(beta*10000.f)-std::round(beta_*10000.f))<2);
426  */
427 
428 }
T y() const
Definition: PV3DBase.h:63
Measurement2DPoint MeasurementPoint
Measurement points are two-dimensional by default.
T x() const
Definition: PV3DBase.h:62
void PixelCPEBase::computeAnglesFromTrajectory ( DetParam const &  theDetParam,
ClusterParam theClusterParam,
const LocalTrajectoryParameters ltp 
) const
private

Definition at line 281 of file PixelCPEBase.cc.

References PixelCPEBase::ClusterParam::cotalpha, PixelCPEBase::ClusterParam::cotbeta, PixelCPEBase::ClusterParam::loc_trk_pred, LocalTrajectoryParameters::mixedFormatVector(), LocalTrajectoryParameters::momentum(), LocalTrajectoryParameters::position(), PixelCPEBase::ClusterParam::trk_lp_x, PixelCPEBase::ClusterParam::trk_lp_y, PixelCPEBase::ClusterParam::with_track_angle, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by getParameters().

283 {
284  //cout<<" in PixelCPEBase:computeAnglesFromTrajectory - "<<endl; //dk
285 
286  //theClusterParam.loc_traj_param = ltp;
287 
288  LocalVector localDir = ltp.momentum();
289 
290 
291  float locx = localDir.x();
292  float locy = localDir.y();
293  float locz = localDir.z();
294 
295  /*
296  // Danek's definition
297  alpha_ = acos(locx/sqrt(locx*locx+locz*locz));
298  if ( isFlipped() ) // &&& check for FPIX !!!
299  alpha_ = PI - alpha_ ;
300  beta_ = acos(locy/sqrt(locy*locy+locz*locz));
301  */
302 
303 
304  theClusterParam.cotalpha = locx/locz;
305  theClusterParam.cotbeta = locy/locz;
306  //theClusterParam.zneg = (locz < 0); // Not used, AH
307 
308 
309  LocalPoint trk_lp = ltp.position();
310  theClusterParam.trk_lp_x = trk_lp.x();
311  theClusterParam.trk_lp_y = trk_lp.y();
312 
313  theClusterParam.with_track_angle = true;
314 
315 
316  // ggiurgiu@jhu.edu 12/09/2010 : needed to correct for bows/kinks
317  AlgebraicVector5 vec_trk_parameters = ltp.mixedFormatVector();
318  theClusterParam.loc_trk_pred = Topology::LocalTrackPred( vec_trk_parameters );
319 
320 }
LocalPoint position() const
Local x and y position coordinates.
T y() const
Definition: PV3DBase.h:63
T z() const
Definition: PV3DBase.h:64
LocalVector momentum() const
Momentum vector in the local frame.
ROOT::Math::SVector< double, 5 > AlgebraicVector5
AlgebraicVector5 mixedFormatVector() const
T x() const
Definition: PV3DBase.h:62
void PixelCPEBase::computeLorentzShifts ( DetParam theDetParam) const
private

Definition at line 562 of file PixelCPEBase.cc.

References PixelCPEBase::DetParam::driftDirection, LogDebug, PixelCPEBase::DetParam::lorentzShiftInCmX, PixelCPEBase::DetParam::lorentzShiftInCmY, PixelCPEBase::DetParam::theThickness, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by fillDetParams().

562  {
563 
564  //cout<<" in PixelCPEBase:computeLorentzShifts - "<<driftDirection_<<endl; //dk
565 
566  // Max shift (at the other side of the sensor) in cm
567  theDetParam.lorentzShiftInCmX = theDetParam.driftDirection.x()/theDetParam.driftDirection.z() * theDetParam.theThickness; //
568  theDetParam.lorentzShiftInCmY = theDetParam.driftDirection.y()/theDetParam.driftDirection.z() * theDetParam.theThickness; //
569 
570  //cout<<" in PixelCPEBase:computeLorentzShifts - "
571  //<<lorentzShiftInCmX_<<" "
572  //<<lorentzShiftInCmY_<<" "
573  //<<endl; //dk
574 
575  LogDebug("PixelCPEBase") << " The drift direction in local coordinate is "
576  << theDetParam.driftDirection ;
577 }
#define LogDebug(id)
virtual ClusterParam* PixelCPEBase::createClusterParam ( const SiPixelCluster cl) const
privatepure virtual

Implemented in PixelCPEGeneric, and PixelCPETemplateReco.

Referenced by getParameters().

PixelCPEBase::DetParam const & PixelCPEBase::detParam ( const GeomDetUnit det) const
private

Definition at line 454 of file PixelCPEBase.cc.

References assert(), i, GeomDet::index(), m_DetParams, and AlCaHLTBitMon_ParallelJobs::p.

Referenced by getParameters().

454  {
455  auto i = det.index();
456  //cout << "get parameters of detector " << i << endl;
457  assert(i<int(m_DetParams.size()));
458  //if (i>=int(m_DetParams.size())) m_DetParams.resize(i+1); // should never happen!
459  const DetParam & p = m_DetParams[i];
460  return p;
461 }
int i
Definition: DBlmapReader.cc:9
assert(m_qm.get())
DetParams m_DetParams
Definition: PixelCPEBase.h:282
int index() const
Definition: GeomDet.h:97
LocalVector PixelCPEBase::driftDirection ( DetParam theDetParam,
GlobalVector  bfield 
) const
private

Definition at line 471 of file PixelCPEBase.cc.

References GloballyPositioned< T >::position(), GloballyPositioned< T >::rotation(), GeomDet::surface(), and PixelCPEBase::DetParam::theDet.

Referenced by fillDetParams().

471  {
472 
473  Frame detFrame(theDetParam.theDet->surface().position(), theDetParam.theDet->surface().rotation());
474  LocalVector Bfield = detFrame.toLocal(bfield);
475  return driftDirection(theDetParam,Bfield);
476 
477 }
LocalVector driftDirection(DetParam &theDetParam, GlobalVector bfield) const
GloballyPositioned< double > Frame
Definition: PixelCPEBase.h:216
LocalVector PixelCPEBase::driftDirection ( DetParam theDetParam,
LocalVector  bfield 
) const
private

Definition at line 480 of file PixelCPEBase.cc.

References funct::abs(), alpha2Order, gather_cfg::cout, createTree::dd, f, GeomDet::geographicalId(), SiPixelLorentzAngle::getLorentzAngle(), GeomDetEnumerators::isBarrel(), GeomDetEnumerators::isTrackerPixel(), lAOffset_, lAWidthBPix_, lAWidthFPix_, LogDebug, lorentzAngle_, lorentzAngleWidth_, NULL, DetId::rawId(), pileupReCalc_HLTpaths::scale, PixelCPEBase::DetParam::theDet, theFlag_, PixelCPEBase::DetParam::thePart, useLAOffsetFromConfig_, useLAWidthFromConfig_, useLAWidthFromDB_, PixelCPEBase::DetParam::widthLAFractionX, PixelCPEBase::DetParam::widthLAFractionY, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

480  {
481  const bool LocalPrint = false;
482 
483  // Use LA from DB or from config
484  float langle = 0.;
485  if( !useLAOffsetFromConfig_ ) { // get it from DB
486  if(lorentzAngle_ != NULL) { // a real LA object
487  langle = lorentzAngle_->getLorentzAngle(theDetParam.theDet->geographicalId().rawId());
488  //cout<<" la "<<langle<<" "<< theDetParam.theDet->geographicalId().rawId() <<endl;
489  } else { // no LA, unused
490  //cout<<" LA object is NULL, assume LA = 0"<<endl; //dk
491  langle = 0; // set to a fake value
492  }
493  if(LocalPrint) cout<<" Will use LA Offset from DB "<<langle<<endl;
494  } else { // from config file
495  langle = lAOffset_;
496  if(LocalPrint) cout<<" Will use LA Offset from config "<<langle<<endl;
497  }
498 
499  // Now do the LA width stuff
500  theDetParam.widthLAFractionX = 1.; // predefine to 1 (default) if things fail
501  theDetParam.widthLAFractionY = 1.;
502 
503  // Compute the charge width, generic only
504  if(theFlag_==0) {
505 
507  // take it from a seperate, special LA DB object (forWidth)
508 
509  auto langleWidth = lorentzAngleWidth_->getLorentzAngle(theDetParam.theDet->geographicalId().rawId());
510  if(langleWidth!=0.0) theDetParam.widthLAFractionX = std::abs(langleWidth/langle);
511  // leave the widthLAFractionY=1.
512  //cout<<" LAWidth lorentz width "<<theDetParam.widthLAFractionX<<" "<<theDetParam.widthLAFractionY<<endl;
513 
514  } else if(useLAWidthFromConfig_) { // get from config
515 
516  double lAWidth=0;
517  if( GeomDetEnumerators::isTrackerPixel(theDetParam.thePart) && GeomDetEnumerators::isBarrel(theDetParam.thePart) ) lAWidth = lAWidthBPix_; // barrel
518  else lAWidth = lAWidthFPix_;
519 
520  if(langle!=0.0) theDetParam.widthLAFractionX = std::abs(lAWidth/langle);
521  // fix the FractionY at 1
522 
523  //cout<<" Lorentz width from config "<<theDetParam.widthLAFractionX<<" "<<theDetParam.widthLAFractionY<<endl;
524 
525  } else { // get if from the offset LA (old method used until 2013)
526  // do nothing
527  //cout<<" Old default LA width method "<<theDetParam.widthLAFractionX<<" "<<theDetParam.widthLAFractionY<<endl;
528 
529  }
530 
531  //cout<<" Final LA fraction "<<theDetParam.widthLAFractionX<<" "<<theDetParam.widthLAFractionY<<endl;
532 
533  } // if flag
534 
535 
536  if(LocalPrint) cout<<" in PixelCPEBase:driftDirection - "<<langle<<" "<<Bfield<<endl; //dk
537 
538  float alpha2 = alpha2Order ? langle*langle : 0; //
539 
540  // **********************************************************************
541  // Our convention is the following:
542  // +x is defined by the direction of the Lorentz drift!
543  // +z is defined by the direction of E field (so electrons always go into -z!)
544  // +y is defined by +x and +z, and it turns out to be always opposite to the +B field.
545  // **********************************************************************
546 
547  float dir_x = -( langle * Bfield.y() + alpha2* Bfield.z()* Bfield.x() );
548  float dir_y = ( langle * Bfield.x() - alpha2* Bfield.z()* Bfield.y() );
549  float dir_z = -( 1.f + alpha2* Bfield.z()*Bfield.z() );
550  auto scale = 1.f/std::abs( dir_z ); // same as 1 + alpha2*Bfield.z()*Bfield.z()
551  LocalVector dd(dir_x*scale, dir_y*scale, -1.f ); // last is -1 !
552 
553  LogDebug("PixelCPEBase") << " The drift direction in local coordinate is " << dd ;
554 
555  return dd;
556 }
#define LogDebug(id)
const SiPixelLorentzAngle * lorentzAngleWidth_
Definition: PixelCPEBase.h:246
bool isBarrel(GeomDetEnumerators::SubDetector m)
#define NULL
Definition: scimark2.h:8
bool useLAWidthFromDB_
Definition: PixelCPEBase.h:235
float lAWidthBPix_
Definition: PixelCPEBase.h:230
bool useLAWidthFromConfig_
Definition: PixelCPEBase.h:234
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double f[11][100]
const SiPixelLorentzAngle * lorentzAngle_
Definition: PixelCPEBase.h:245
bool isTrackerPixel(const GeomDetEnumerators::SubDetector m)
bool useLAOffsetFromConfig_
Definition: PixelCPEBase.h:233
float getLorentzAngle(const uint32_t &) const
tuple cout
Definition: gather_cfg.py:121
float lAWidthFPix_
Definition: PixelCPEBase.h:231
void PixelCPEBase::fillDetParams ( )
private

Definition at line 139 of file PixelCPEBase.cc.

References assert(), computeLorentzShifts(), TrackerGeometry::detUnits(), DoLorentz_, driftDirection(), genErrorDBObject_, geom_, SiPixelGenErrorDBObject::getGenErrorID(), SiPixelTemplateDBObject::getTemplateID(), i, MagneticField::inTesla(), LogDebug, m_DetParams, magfield_, TrackerGeometry::offsetDU(), AlCaHLTBitMon_ParallelJobs::p, templateDBobject_, theFlag_, GeomDetEnumerators::tkDetEnum, and PV3DBase< T, PVType, FrameType >::z().

Referenced by PixelCPEBase().

140 {
141  //cout<<" in fillDetParams "<<theFlag_<<endl;
142 
143  auto const & dus = geom_.detUnits();
144  unsigned m_detectors = dus.size();
145  for(unsigned int i=1;i<7;++i) {
146  LogDebug("LookingForFirstStrip") << "Subdetector " << i
147  << " GeomDetEnumerator " << GeomDetEnumerators::tkDetEnum[i]
148  << " offset " << geom_.offsetDU(GeomDetEnumerators::tkDetEnum[i])
149  << " is it strip? " << (geom_.offsetDU(GeomDetEnumerators::tkDetEnum[i]) != dus.size() ?
150  dus[geom_.offsetDU(GeomDetEnumerators::tkDetEnum[i])]->type().isTrackerStrip() : false);
151  if(geom_.offsetDU(GeomDetEnumerators::tkDetEnum[i]) != dus.size() &&
152  dus[geom_.offsetDU(GeomDetEnumerators::tkDetEnum[i])]->type().isTrackerStrip()) {
154  }
155  }
156  LogDebug("LookingForFirstStrip") << " Chosen offset: " << m_detectors;
157 
158 
159  m_DetParams.resize(m_detectors);
160  //cout<<"caching "<<m_detectors<<" pixel detectors"<<endl;
161  for (unsigned i=0; i!=m_detectors;++i) {
162  auto & p=m_DetParams[i];
163  p.theDet = dynamic_cast<const PixelGeomDetUnit*>(dus[i]);
164  assert(p.theDet);
165  assert(p.theDet->index()==int(i));
166 
167  p.theOrigin = p.theDet->surface().toLocal(GlobalPoint(0,0,0));
168 
169  //--- p.theDet->type() returns a GeomDetType, which implements subDetector()
170  p.thePart = p.theDet->type().subDetector();
171 
172  //cout<<" in PixelCPEBase - in det "<<thePart<<endl; //dk
173 
174  //--- The location in of this DetUnit in a cyllindrical coord system (R,Z)
175  //--- The call goes via BoundSurface, returned by p.theDet->surface(), but
176  //--- position() is implemented in GloballyPositioned<> template
177  //--- ( BoundSurface : Surface : GloballyPositioned<float> )
178  //p.theDetR = p.theDet->surface().position().perp(); //Not used, AH
179  //p.theDetZ = p.theDet->surface().position().z(); //Not used, AH
180  //--- Define parameters for chargewidth calculation
181 
182  //--- bounds() is implemented in BoundSurface itself.
183  p.theThickness = p.theDet->surface().bounds().thickness();
184 
185  // Cache the det id for templates and generic erros
186 
187  if(theFlag_==0) { // for generic
188 #ifdef NEW_CPEERROR
189  p.detTemplateId = genErrorDBObject_->getGenErrorID(p.theDet->geographicalId().rawId());
190 #else
191  if(useNewSimplerErrors)
192  p.detTemplateId = genErrorDBObject_->getGenErrorID(p.theDet->geographicalId().rawId());
193  else
194  p.detTemplateId = templateDBobject_->getTemplateID(p.theDet->geographicalId().rawId());
195 #endif
196  } else { // for templates
197  p.detTemplateId = templateDBobject_->getTemplateID(p.theDet->geographicalId());
198  }
199 
200  // just for testing
201  //int i1 = 0;
202  //if(theFlag_==0) i1 = genErrorDBObject_->getGenErrorID(p.theDet->geographicalId().rawId());
203  //int i2= templateDBobject_->getTemplateID(p.theDet->geographicalId().rawId());
204  //int i3= templateDBobject_->getTemplateID(p.theDet->geographicalId());
205  //if(i2!=i3) cout<<i2<<" != "<<i3<<endl;
206  //cout<<i<<" "<<p.detTemplateId<<" "<<i1<<" "<<i2<<" "<<i3<<endl;
207 
208  auto topol = &(p.theDet->specificTopology());
209  p.theTopol=topol;
210  auto const proxyT = dynamic_cast<const ProxyPixelTopology*>(p.theTopol);
211  if (proxyT) p.theRecTopol = dynamic_cast<const RectangularPixelTopology*>(&(proxyT->specificTopology()));
212  else p.theRecTopol = dynamic_cast<const RectangularPixelTopology*>(p.theTopol);
213  assert(p.theRecTopol);
214 
215  //---- The geometrical description of one module/plaquette
216  //p.theNumOfRow = p.theRecTopol->nrows(); // rows in x //Not used, AH
217  //p.theNumOfCol = p.theRecTopol->ncolumns(); // cols in y //Not used, AH
218  std::pair<float,float> pitchxy = p.theRecTopol->pitch();
219  p.thePitchX = pitchxy.first; // pitch along x
220  p.thePitchY = pitchxy.second; // pitch along y
221 
222  //p.theSign = isFlipped(&p) ? -1 : 1; //Not used, AH
223 
224  LocalVector Bfield = p.theDet->surface().toLocal(magfield_->inTesla(p.theDet->surface().position()));
225  p.bz = Bfield.z();
226 
227 
228  // Compute the Lorentz shifts for this detector element
229  if ( (theFlag_==0) || DoLorentz_ ) { // do always for generic and if(DOLorentz) for templates
230  p.driftDirection = driftDirection(p, Bfield );
232  }
233 
234 
235  LogDebug("PixelCPEBase") << "***** PIXEL LAYOUT *****"
236  << " thePart = " << p.thePart
237  << " theThickness = " << p.theThickness
238  << " thePitchX = " << p.thePitchX
239  << " thePitchY = " << p.thePitchY;
240  // << " theLShiftX = " << p.theLShiftX;
241 
242 
243  }
244 }
#define LogDebug(id)
int i
Definition: DBlmapReader.cc:9
LocalVector driftDirection(DetParam &theDetParam, GlobalVector bfield) const
short getTemplateID(const uint32_t &detid) const
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
assert(m_qm.get())
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
DetParams m_DetParams
Definition: PixelCPEBase.h:282
short getGenErrorID(const uint32_t &detid) const
virtual const DetUnitContainer & detUnits() const
Returm a vector of all GeomDetUnit.
unsigned int offsetDU(SubDetector sid) const
T z() const
Definition: PV3DBase.h:64
void computeLorentzShifts(DetParam &) const
const SiPixelTemplateDBObject * templateDBobject_
Definition: PixelCPEBase.h:251
const MagneticField * magfield_
Definition: PixelCPEBase.h:241
SubDetector tkDetEnum[8]
const SiPixelGenErrorDBObject * genErrorDBObject_
Definition: PixelCPEBase.h:248
const TrackerGeometry & geom_
Definition: PixelCPEBase.h:242
ReturnType PixelCPEBase::getParameters ( const SiPixelCluster cl,
const GeomDetUnit det 
) const
inlinevirtual

Implements PixelClusterParameterEstimator.

Definition at line 139 of file PixelCPEBase.h.

References computeAnglesFromDetPosition(), createClusterParam(), detParam(), asciidump::le, localError(), localPosition(), rawQualityWord(), and setTheClu().

Referenced by cms::SiPixelRecHitConverter::run().

141  {
142 #ifdef EDM_ML_DEBUG
143  nRecHitsTotal_++ ;
144  //std::cout<<" in PixelCPEBase:localParameters(all) - "<<nRecHitsTotal_<<std::endl; //dk
145 #endif
146 
147  DetParam const & theDetParam = detParam(det);
148  ClusterParam * theClusterParam = createClusterParam(cl);
149  setTheClu( theDetParam, *theClusterParam );
150  computeAnglesFromDetPosition(theDetParam, *theClusterParam);
151 
152  // localPosition( cl, det ) must be called before localError( cl, det ) !!!
153  LocalPoint lp = localPosition(theDetParam, *theClusterParam);
154  LocalError le = localError(theDetParam, *theClusterParam);
155  SiPixelRecHitQuality::QualWordType rqw = rawQualityWord(*theClusterParam);
156  auto tuple = std::make_tuple(lp, le , rqw);
157  delete theClusterParam;
158 
159  //std::cout<<" in PixelCPEBase:localParameters(all) - "<<lp.x()<<" "<<lp.y()<<std::endl; //dk
160  return tuple;
161  }
virtual ClusterParam * createClusterParam(const SiPixelCluster &cl) const =0
virtual LocalPoint localPosition(DetParam const &theDetParam, ClusterParam &theClusterParam) const =0
void computeAnglesFromDetPosition(DetParam const &theDetParam, ClusterParam &theClusterParam) const
SiPixelRecHitQuality::QualWordType rawQualityWord(ClusterParam &theClusterParam) const
void setTheClu(DetParam const &, ClusterParam &theClusterParam) const
virtual LocalError localError(DetParam const &theDetParam, ClusterParam &theClusterParam) const =0
DetParam const & detParam(const GeomDetUnit &det) const
ReturnType PixelCPEBase::getParameters ( const SiPixelCluster cl,
const GeomDetUnit det,
const LocalTrajectoryParameters ltp 
) const
inlinevirtual

Implements PixelClusterParameterEstimator.

Definition at line 166 of file PixelCPEBase.h.

References computeAnglesFromTrajectory(), createClusterParam(), detParam(), asciidump::le, localError(), localPosition(), rawQualityWord(), and setTheClu().

169  {
170 #ifdef EDM_ML_DEBUG
171  nRecHitsTotal_++ ;
172  //std::cout<<" in PixelCPEBase:localParameters(on track) - "<<nRecHitsTotal_<<std::endl; //dk
173 #endif
174 
175  DetParam const & theDetParam = detParam(det);
176  ClusterParam * theClusterParam = createClusterParam(cl);
177  setTheClu( theDetParam, *theClusterParam );
178  computeAnglesFromTrajectory(theDetParam, *theClusterParam, ltp);
179 
180  // localPosition( cl, det ) must be called before localError( cl, det ) !!!
181  LocalPoint lp = localPosition(theDetParam, *theClusterParam);
182  LocalError le = localError(theDetParam, *theClusterParam);
183  SiPixelRecHitQuality::QualWordType rqw = rawQualityWord(*theClusterParam);
184  auto tuple = std::make_tuple(lp, le , rqw);
185  delete theClusterParam;
186 
187  //std::cout<<" in PixelCPEBase:localParameters(on track) - "<<lp.x()<<" "<<lp.y()<<std::endl; //dk
188  return tuple;
189  }
virtual ClusterParam * createClusterParam(const SiPixelCluster &cl) const =0
void computeAnglesFromTrajectory(DetParam const &theDetParam, ClusterParam &theClusterParam, const LocalTrajectoryParameters &ltp) const
virtual LocalPoint localPosition(DetParam const &theDetParam, ClusterParam &theClusterParam) const =0
SiPixelRecHitQuality::QualWordType rawQualityWord(ClusterParam &theClusterParam) const
void setTheClu(DetParam const &, ClusterParam &theClusterParam) const
virtual LocalError localError(DetParam const &theDetParam, ClusterParam &theClusterParam) const =0
DetParam const & detParam(const GeomDetUnit &det) const
bool PixelCPEBase::isFlipped ( DetParam const &  theDetParam) const
private

Definition at line 444 of file PixelCPEBase.cc.

References PV3DBase< T, PVType, FrameType >::perp2(), GeomDet::surface(), PixelCPEBase::DetParam::theDet, and Surface::toGlobal().

445 {
446  // Check the relative position of the local +/- z in global coordinates.
447  float tmp1 = theDetParam.theDet->surface().toGlobal(Local3DPoint(0.,0.,0.)).perp2();
448  float tmp2 = theDetParam.theDet->surface().toGlobal(Local3DPoint(0.,0.,1.)).perp2();
449  //cout << " 1: " << tmp1 << " 2: " << tmp2 << endl;
450  if ( tmp2<tmp1 ) return true;
451  else return false;
452 }
Point3DBase< float, LocalTag > Local3DPoint
Definition: LocalPoint.h:9
virtual LocalError PixelCPEBase::localError ( DetParam const &  theDetParam,
ClusterParam theClusterParam 
) const
privatepure virtual

Implemented in PixelCPEGeneric, and PixelCPETemplateReco.

Referenced by getParameters().

virtual LocalPoint PixelCPEBase::localPosition ( DetParam const &  theDetParam,
ClusterParam theClusterParam 
) const
privatepure virtual

Implemented in PixelCPEGeneric, and PixelCPETemplateReco.

Referenced by getParameters().

SiPixelRecHitQuality::QualWordType PixelCPEBase::rawQualityWord ( ClusterParam theClusterParam) const
private

A convenience method to fill a whole SiPixelRecHitQuality word in one shot. This way, we can keep the details of what is filled within the pixel code and not expose the Transient SiPixelRecHit to it as well. The name of this function is chosen to match the one in SiPixelRecHit.

Definition at line 586 of file PixelCPEBase.cc.

References PixelCPEBase::ClusterParam::hasBadPixels_, PixelCPEBase::ClusterParam::hasFilledProb_, PixelCPEBase::ClusterParam::isOnEdge_, cmsBatch::log, PixelCPEBase::ClusterParam::probabilityQ_, PixelCPEBase::ClusterParam::probabilityX_, PixelCPEBase::ClusterParam::probabilityY_, PixelCPEBase::ClusterParam::qBin_, SiPixelRecHitQuality::Packing::setHasBadPixels(), SiPixelRecHitQuality::Packing::setHasFilledProb(), SiPixelRecHitQuality::Packing::setIsOnEdge(), SiPixelRecHitQuality::Packing::setProbabilityQ(), SiPixelRecHitQuality::Packing::setProbabilityXY(), SiPixelRecHitQuality::Packing::setQBin(), SiPixelRecHitQuality::Packing::setSpansTwoROCs(), PixelCPEBase::ClusterParam::spansTwoROCs_, and SiPixelRecHitQuality::thePacking.

Referenced by getParameters().

587 {
589  float probabilityXY;
590  if ( theClusterParam.probabilityX_ !=0 && theClusterParam.probabilityY_ !=0 )
591  probabilityXY = theClusterParam.probabilityX_ * theClusterParam.probabilityY_ * (1.f - std::log(theClusterParam.probabilityX_ * theClusterParam.probabilityY_) ) ;
592  else
593  probabilityXY = 0;
595  qualWord );
596 
597  SiPixelRecHitQuality::thePacking.setProbabilityQ ( theClusterParam.probabilityQ_ ,
598  qualWord );
599 
600  SiPixelRecHitQuality::thePacking.setQBin ( (int)theClusterParam.qBin_,
601  qualWord );
602 
603  SiPixelRecHitQuality::thePacking.setIsOnEdge ( theClusterParam.isOnEdge_,
604  qualWord );
605 
606  SiPixelRecHitQuality::thePacking.setHasBadPixels ( theClusterParam.hasBadPixels_,
607  qualWord );
608 
609  SiPixelRecHitQuality::thePacking.setSpansTwoROCs ( theClusterParam.spansTwoROCs_,
610  qualWord );
611 
612  SiPixelRecHitQuality::thePacking.setHasFilledProb ( theClusterParam.hasFilledProb_,
613  qualWord );
614 
615  return qualWord;
616 }
void setProbabilityXY(float prob, QualWordType &qualWord) const
static const Packing thePacking
void setHasBadPixels(bool flag, QualWordType &qualWord) const
void setProbabilityQ(float prob, QualWordType &qualWord) const
void setSpansTwoROCs(bool flag, QualWordType &qualWord) const
void setIsOnEdge(bool flag, QualWordType &qualWord) const
void setHasFilledProb(bool flag, QualWordType &qualWord) const
void setQBin(int qbin, QualWordType &qualWord) const
tuple log
Definition: cmsBatch.py:347
void PixelCPEBase::setTheClu ( DetParam const &  theDetParam,
ClusterParam theClusterParam 
) const
private

Definition at line 250 of file PixelCPEBase.cc.

References RectangularPixelTopology::containsBigPixelInX(), RectangularPixelTopology::containsBigPixelInY(), RectangularPixelTopology::isItEdgePixelInX(), RectangularPixelTopology::isItEdgePixelInY(), PixelCPEBase::ClusterParam::isOnEdge_, SiPixelCluster::maxPixelCol(), SiPixelCluster::maxPixelRow(), SiPixelCluster::minPixelCol(), SiPixelCluster::minPixelRow(), PixelCPEBase::ClusterParam::spansTwoROCs_, PixelCPEBase::ClusterParam::theCluster, and PixelCPEBase::DetParam::theRecTopol.

Referenced by getParameters().

251 {
252 
253  //--- Geometric Quality Information
254  int minInX,minInY,maxInX,maxInY=0;
255  minInX = theClusterParam.theCluster->minPixelRow();
256  minInY = theClusterParam.theCluster->minPixelCol();
257  maxInX = theClusterParam.theCluster->maxPixelRow();
258  maxInY = theClusterParam.theCluster->maxPixelCol();
259 
260  theClusterParam.isOnEdge_ = theDetParam.theRecTopol->isItEdgePixelInX(minInX) | theDetParam.theRecTopol->isItEdgePixelInX(maxInX) |
261  theDetParam.theRecTopol->isItEdgePixelInY(minInY) | theDetParam.theRecTopol->isItEdgePixelInY(maxInY) ;
262 
263  // FOR NOW UNUSED. KEEP IT IN CASE WE WANT TO USE IT IN THE FUTURE
264  // Bad Pixels have their charge set to 0 in the clusterizer
265  //hasBadPixels_ = false;
266  //for(unsigned int i=0; i<theClusterParam.theCluster->pixelADC().size(); ++i) {
267  //if(theClusterParam.theCluster->pixelADC()[i] == 0) { hasBadPixels_ = true; break;}
268  //}
269 
270  theClusterParam.spansTwoROCs_ = theDetParam.theRecTopol->containsBigPixelInX(minInX,maxInX) |
271  theDetParam.theRecTopol->containsBigPixelInY(minInY,maxInY);
272 
273 }

Member Data Documentation

bool PixelCPEBase::alpha2Order
protected

Definition at line 252 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

bool PixelCPEBase::DoLorentz_
protected
const SiPixelGenErrorDBObject* PixelCPEBase::genErrorDBObject_
protected

Definition at line 248 of file PixelCPEBase.h.

Referenced by fillDetParams(), PixelCPEBase(), and PixelCPEGeneric::PixelCPEGeneric().

const TrackerGeometry& PixelCPEBase::geom_
protected

Definition at line 242 of file PixelCPEBase.h.

Referenced by fillDetParams().

float PixelCPEBase::lAOffset_
protected

Definition at line 229 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

float PixelCPEBase::lAWidthBPix_
protected

Definition at line 230 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

float PixelCPEBase::lAWidthFPix_
protected

Definition at line 231 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

bool PixelCPEBase::LoadTemplatesFromDB_
protected
const SiPixelLorentzAngle* PixelCPEBase::lorentzAngle_
protected

Definition at line 245 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

const SiPixelLorentzAngle* PixelCPEBase::lorentzAngleWidth_
protected

Definition at line 246 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

DetParams PixelCPEBase::m_DetParams =DetParams(1440)
private

Definition at line 282 of file PixelCPEBase.h.

Referenced by detParam(), and fillDetParams().

const MagneticField* PixelCPEBase::magfield_
protected

Definition at line 241 of file PixelCPEBase.h.

Referenced by fillDetParams().

const SiPixelTemplateDBObject* PixelCPEBase::templateDBobject_
protected
int PixelCPEBase::theFlag_
protected

Definition at line 239 of file PixelCPEBase.h.

Referenced by driftDirection(), fillDetParams(), and PixelCPEBase().

int PixelCPEBase::theVerboseLevel
protected
const TrackerTopology& PixelCPEBase::ttopo_
protected

Definition at line 243 of file PixelCPEBase.h.

Referenced by PixelCPEGeneric::localError().

bool PixelCPEBase::useLAOffsetFromConfig_
protected

Definition at line 233 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

bool PixelCPEBase::useLAWidthFromConfig_
protected

Definition at line 234 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

bool PixelCPEBase::useLAWidthFromDB_
protected

Definition at line 235 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().