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 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
 
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 53 of file PixelCPEBase.h.

Member Typedef Documentation

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

Definition at line 278 of file PixelCPEBase.h.

typedef GloballyPositioned<double> PixelCPEBase::Frame
protected

Definition at line 215 of file PixelCPEBase.h.

Constructor & Destructor Documentation

PixelCPEBase::PixelCPEBase ( edm::ParameterSet const &  conf,
const MagneticField mag,
const TrackerGeometry geom,
const SiPixelLorentzAngle lorentzAngle,
const SiPixelGenErrorDBObject genErrorDBObject,
const SiPixelTemplateDBObject templateDBobject,
const SiPixelLorentzAngle lorentzAngleWidth,
int  flag = 0 
)

Definition at line 44 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_.

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

Member Function Documentation

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

Definition at line 333 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().

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

273 {
274  //cout<<" in PixelCPEBase:computeAnglesFromTrajectory - "<<endl; //dk
275 
276  //theClusterParam.loc_traj_param = ltp;
277 
278  LocalVector localDir = ltp.momentum();
279 
280 
281  float locx = localDir.x();
282  float locy = localDir.y();
283  float locz = localDir.z();
284 
285  /*
286  // Danek's definition
287  alpha_ = acos(locx/sqrt(locx*locx+locz*locz));
288  if ( isFlipped() ) // &&& check for FPIX !!!
289  alpha_ = PI - alpha_ ;
290  beta_ = acos(locy/sqrt(locy*locy+locz*locz));
291  */
292 
293 
294  theClusterParam.cotalpha = locx/locz;
295  theClusterParam.cotbeta = locy/locz;
296  //theClusterParam.zneg = (locz < 0); // Not used, AH
297 
298 
299  LocalPoint trk_lp = ltp.position();
300  theClusterParam.trk_lp_x = trk_lp.x();
301  theClusterParam.trk_lp_y = trk_lp.y();
302 
303  theClusterParam.with_track_angle = true;
304 
305 
306  // ggiurgiu@jhu.edu 12/09/2010 : needed to correct for bows/kinks
307  AlgebraicVector5 vec_trk_parameters = ltp.mixedFormatVector();
308  theClusterParam.loc_trk_pred = Topology::LocalTrackPred( vec_trk_parameters );
309 
310 }
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 552 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().

552  {
553 
554  //cout<<" in PixelCPEBase:computeLorentzShifts - "<<driftDirection_<<endl; //dk
555 
556  // Max shift (at the other side of the sensor) in cm
557  theDetParam.lorentzShiftInCmX = theDetParam.driftDirection.x()/theDetParam.driftDirection.z() * theDetParam.theThickness; //
558  theDetParam.lorentzShiftInCmY = theDetParam.driftDirection.y()/theDetParam.driftDirection.z() * theDetParam.theThickness; //
559 
560  //cout<<" in PixelCPEBase:computeLorentzShifts - "
561  //<<lorentzShiftInCmX_<<" "
562  //<<lorentzShiftInCmY_<<" "
563  //<<endl; //dk
564 
565  LogDebug("PixelCPEBase") << " The drift direction in local coordinate is "
566  << theDetParam.driftDirection ;
567 }
#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 444 of file PixelCPEBase.cc.

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

Referenced by getParameters().

444  {
445  auto i = det.index();
446  //cout << "get parameters of detector " << i << endl;
447  assert(i<int(m_DetParams.size()));
448  //if (i>=int(m_DetParams.size())) m_DetParams.resize(i+1); // should never happen!
449  const DetParam & p = m_DetParams[i];
450  return p;
451 }
int i
Definition: DBlmapReader.cc:9
DetParams m_DetParams
Definition: PixelCPEBase.h:280
int index() const
Definition: GeomDet.h:92
LocalVector PixelCPEBase::driftDirection ( DetParam theDetParam,
GlobalVector  bfield 
) const
private

Definition at line 461 of file PixelCPEBase.cc.

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

Referenced by fillDetParams().

461  {
462 
463  Frame detFrame(theDetParam.theDet->surface().position(), theDetParam.theDet->surface().rotation());
464  LocalVector Bfield = detFrame.toLocal(bfield);
465  return driftDirection(theDetParam,Bfield);
466 
467 }
LocalVector driftDirection(DetParam &theDetParam, GlobalVector bfield) const
GloballyPositioned< double > Frame
Definition: PixelCPEBase.h:215
LocalVector PixelCPEBase::driftDirection ( DetParam theDetParam,
LocalVector  bfield 
) const
private

Definition at line 470 of file PixelCPEBase.cc.

References funct::abs(), alpha2Order, gather_cfg::cout, createTree::dd, f, GeomDet::geographicalId(), SiPixelLorentzAngle::getLorentzAngle(), lAOffset_, lAWidthBPix_, lAWidthFPix_, LogDebug, lorentzAngle_, lorentzAngleWidth_, NULL, GeomDetEnumerators::PixelBarrel, 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().

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

Definition at line 141 of file PixelCPEBase.cc.

References 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::TIB, unlikely, and PV3DBase< T, PVType, FrameType >::z().

Referenced by PixelCPEBase().

142 {
143  //cout<<" in fillDetParams "<<theFlag_<<endl;
144 
145  const unsigned m_detectors = geom_.offsetDU(GeomDetEnumerators::TIB); //first non-pixel detector unit
146  auto const & dus = geom_.detUnits();
147  m_DetParams.resize(m_detectors);
148  //cout<<"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  //cout<<" in PixelCPEBase - in det "<<thePart<<endl; //dk
161 
162  //--- The location in of this DetUnit in a cyllindrical coord system (R,Z)
163  //--- The call goes via BoundSurface, returned by p.theDet->surface(), but
164  //--- position() is implemented in GloballyPositioned<> template
165  //--- ( BoundSurface : Surface : GloballyPositioned<float> )
166  //p.theDetR = p.theDet->surface().position().perp(); //Not used, AH
167  //p.theDetZ = p.theDet->surface().position().z(); //Not used, AH
168  //--- Define parameters for chargewidth calculation
169 
170  //--- bounds() is implemented in BoundSurface itself.
171  p.theThickness = p.theDet->surface().bounds().thickness();
172 
173  // Cache the det id for templates and generic erros
174 
175  if(theFlag_==0) { // for generic
176 #ifdef NEW_CPEERROR
177  p.detTemplateId = genErrorDBObject_->getGenErrorID(p.theDet->geographicalId().rawId());
178 #else
179  if(useNewSimplerErrors)
180  p.detTemplateId = genErrorDBObject_->getGenErrorID(p.theDet->geographicalId().rawId());
181  else
182  p.detTemplateId = templateDBobject_->getTemplateID(p.theDet->geographicalId().rawId());
183 #endif
184  } else { // for templates
185  p.detTemplateId = templateDBobject_->getTemplateID(p.theDet->geographicalId());
186  }
187 
188  // just for testing
189  //int i1 = 0;
190  //if(theFlag_==0) i1 = genErrorDBObject_->getGenErrorID(p.theDet->geographicalId().rawId());
191  //int i2= templateDBobject_->getTemplateID(p.theDet->geographicalId().rawId());
192  //int i3= templateDBobject_->getTemplateID(p.theDet->geographicalId());
193  //if(i2!=i3) cout<<i2<<" != "<<i3<<endl;
194  //cout<<i<<" "<<p.detTemplateId<<" "<<i1<<" "<<i2<<" "<<i3<<endl;
195 
196  auto topol = &(p.theDet->specificTopology());
197  if unlikely(topol!=p.theTopol) { // there is ONE topology!)
198  p.theTopol=topol;
199  auto const proxyT = dynamic_cast<const ProxyPixelTopology*>(p.theTopol);
200  if (proxyT) p.theRecTopol = dynamic_cast<const RectangularPixelTopology*>(&(proxyT->specificTopology()));
201  else p.theRecTopol = dynamic_cast<const RectangularPixelTopology*>(p.theTopol);
202  assert(p.theRecTopol);
203 
204  //---- The geometrical description of one module/plaquette
205  //p.theNumOfRow = p.theRecTopol->nrows(); // rows in x //Not used, AH
206  //p.theNumOfCol = p.theRecTopol->ncolumns(); // cols in y //Not used, AH
207  std::pair<float,float> pitchxy = p.theRecTopol->pitch();
208  p.thePitchX = pitchxy.first; // pitch along x
209  p.thePitchY = pitchxy.second; // pitch along y
210  }
211 
212  //p.theSign = isFlipped(&p) ? -1 : 1; //Not used, AH
213 
214  LocalVector Bfield = p.theDet->surface().toLocal(magfield_->inTesla(p.theDet->surface().position()));
215  p.bz = Bfield.z();
216 
217 
218  // Compute the Lorentz shifts for this detector element
219  if ( (theFlag_==0) || DoLorentz_ ) { // do always for generic and if(DOLorentz) for templates
220  p.driftDirection = driftDirection(p, Bfield );
222  }
223 
224 
225  LogDebug("PixelCPEBase") << "***** PIXEL LAYOUT *****"
226  << " thePart = " << p.thePart
227  << " theThickness = " << p.theThickness
228  << " thePitchX = " << p.thePitchX
229  << " thePitchY = " << p.thePitchY;
230  // << " theLShiftX = " << p.theLShiftX;
231 
232 
233  }
234 }
#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.
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
DetParams m_DetParams
Definition: PixelCPEBase.h:280
short getGenErrorID(const uint32_t &detid) const
#define unlikely(x)
Definition: Likely.h:21
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:249
const MagneticField * magfield_
Definition: PixelCPEBase.h:240
const SiPixelGenErrorDBObject * genErrorDBObject_
Definition: PixelCPEBase.h:246
const TrackerGeometry & geom_
Definition: PixelCPEBase.h:241
ReturnType PixelCPEBase::getParameters ( const SiPixelCluster cl,
const GeomDetUnit det 
) const
inlinevirtual

Implements PixelClusterParameterEstimator.

Definition at line 138 of file PixelCPEBase.h.

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

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

140  {
141 #ifdef EDM_ML_DEBUG
142  nRecHitsTotal_++ ;
143  //std::cout<<" in PixelCPEBase:localParameters(all) - "<<nRecHitsTotal_<<std::endl; //dk
144 #endif
145 
146  DetParam const & theDetParam = detParam(det);
147  ClusterParam * theClusterParam = createClusterParam(cl);
148  setTheClu( theDetParam, *theClusterParam );
149  computeAnglesFromDetPosition(theDetParam, *theClusterParam);
150 
151  // localPosition( cl, det ) must be called before localError( cl, det ) !!!
152  LocalPoint lp = localPosition(theDetParam, *theClusterParam);
153  LocalError le = localError(theDetParam, *theClusterParam);
154  SiPixelRecHitQuality::QualWordType rqw = rawQualityWord(*theClusterParam);
155  auto tuple = std::make_tuple(lp, le , rqw);
156  delete theClusterParam;
157 
158  //std::cout<<" in PixelCPEBase:localParameters(all) - "<<lp.x()<<" "<<lp.y()<<std::endl; //dk
159  return tuple;
160  }
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 165 of file PixelCPEBase.h.

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

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

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

435 {
436  // Check the relative position of the local +/- z in global coordinates.
437  float tmp1 = theDetParam.theDet->surface().toGlobal(Local3DPoint(0.,0.,0.)).perp2();
438  float tmp2 = theDetParam.theDet->surface().toGlobal(Local3DPoint(0.,0.,1.)).perp2();
439  //cout << " 1: " << tmp1 << " 2: " << tmp2 << endl;
440  if ( tmp2<tmp1 ) return true;
441  else return false;
442 }
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 576 of file PixelCPEBase.cc.

References PixelCPEBase::ClusterParam::hasBadPixels_, PixelCPEBase::ClusterParam::hasFilledProb_, PixelCPEBase::ClusterParam::isOnEdge_, fff_deletion::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().

577 {
579  float probabilityXY;
580  if ( theClusterParam.probabilityX_ !=0 && theClusterParam.probabilityY_ !=0 )
581  probabilityXY = theClusterParam.probabilityX_ * theClusterParam.probabilityY_ * (1.f - std::log(theClusterParam.probabilityX_ * theClusterParam.probabilityY_) ) ;
582  else
583  probabilityXY = 0;
585  qualWord );
586 
587  SiPixelRecHitQuality::thePacking.setProbabilityQ ( theClusterParam.probabilityQ_ ,
588  qualWord );
589 
590  SiPixelRecHitQuality::thePacking.setQBin ( (int)theClusterParam.qBin_,
591  qualWord );
592 
593  SiPixelRecHitQuality::thePacking.setIsOnEdge ( theClusterParam.isOnEdge_,
594  qualWord );
595 
596  SiPixelRecHitQuality::thePacking.setHasBadPixels ( theClusterParam.hasBadPixels_,
597  qualWord );
598 
599  SiPixelRecHitQuality::thePacking.setSpansTwoROCs ( theClusterParam.spansTwoROCs_,
600  qualWord );
601 
602  SiPixelRecHitQuality::thePacking.setHasFilledProb ( theClusterParam.hasFilledProb_,
603  qualWord );
604 
605  return qualWord;
606 }
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
void PixelCPEBase::setTheClu ( DetParam const &  theDetParam,
ClusterParam theClusterParam 
) const
private

Definition at line 240 of file PixelCPEBase.cc.

References PixelCPEBase::ClusterParam::isOnEdge_, SiPixelCluster::maxPixelCol(), SiPixelCluster::maxPixelRow(), SiPixelCluster::minPixelCol(), SiPixelCluster::minPixelRow(), PixelCPEBase::ClusterParam::spansTwoROCs_, PixelCPEBase::ClusterParam::theCluster, and PixelCPEBase::DetParam::theRecTopol.

Referenced by getParameters().

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

Member Data Documentation

bool PixelCPEBase::alpha2Order
protected

Definition at line 250 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

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

Definition at line 246 of file PixelCPEBase.h.

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

const TrackerGeometry& PixelCPEBase::geom_
protected

Definition at line 241 of file PixelCPEBase.h.

Referenced by fillDetParams().

float PixelCPEBase::lAOffset_
protected

Definition at line 228 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

float PixelCPEBase::lAWidthBPix_
protected

Definition at line 229 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

float PixelCPEBase::lAWidthFPix_
protected

Definition at line 230 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

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

Definition at line 243 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

const SiPixelLorentzAngle* PixelCPEBase::lorentzAngleWidth_
protected

Definition at line 244 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

DetParams PixelCPEBase::m_DetParams =DetParams(1440)
private

Definition at line 280 of file PixelCPEBase.h.

Referenced by detParam(), and fillDetParams().

const MagneticField* PixelCPEBase::magfield_
protected

Definition at line 240 of file PixelCPEBase.h.

Referenced by fillDetParams().

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

Definition at line 238 of file PixelCPEBase.h.

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

int PixelCPEBase::theVerboseLevel
protected
bool PixelCPEBase::useLAOffsetFromConfig_
protected

Definition at line 232 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

bool PixelCPEBase::useLAWidthFromConfig_
protected

Definition at line 233 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().

bool PixelCPEBase::useLAWidthFromDB_
protected

Definition at line 234 of file PixelCPEBase.h.

Referenced by driftDirection(), and PixelCPEBase().