CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Private Member Functions | Private Attributes
PixelCPEClusterRepair Class Reference

#include <PixelCPEClusterRepair.h>

Inheritance diagram for PixelCPEClusterRepair:
PixelCPEBase PixelClusterParameterEstimator

Classes

struct  ClusterParamTemplate
 
class  Rule
 

Public Member Functions

 PixelCPEClusterRepair (edm::ParameterSet const &conf, const MagneticField *, const TrackerGeometry &, const TrackerTopology &, const SiPixelLorentzAngle *, const SiPixelTemplateDBObject *, const SiPixel2DTemplateDBObject *)
 
 ~PixelCPEClusterRepair () override
 
- Public Member Functions inherited from PixelCPEBase
ReturnType getParameters (const SiPixelCluster &cl, const GeomDetUnit &det) const override
 
ReturnType getParameters (const SiPixelCluster &cl, const GeomDetUnit &det, const LocalTrajectoryParameters &ltp) const override
 
 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 ()
 

Private Member Functions

void callTempReco1D (DetParam const &theDetParam, ClusterParamTemplate &theClusterParam, SiPixelTemplateReco::ClusMatrix &clusterPayload, int ID, LocalPoint &lp) const
 
void callTempReco2D (DetParam const &theDetParam, ClusterParamTemplate &theClusterParam, SiPixelTemplateReco2D::ClusMatrix &clusterPayload, int ID, LocalPoint &lp) const
 
void checkRecommend2D (DetParam const &theDetParam, ClusterParamTemplate &theClusterParam, SiPixelTemplateReco::ClusMatrix &clusterPayload, int ID) const
 
ClusterParamcreateClusterParam (const SiPixelCluster &cl) const override
 
void fill2DTemplIDs ()
 
LocalError localError (DetParam const &theDetParam, ClusterParam &theClusterParam) const override
 
LocalPoint localPosition (DetParam const &theDetParam, ClusterParam &theClusterParam) const override
 

Private Attributes

int barrelTemplateID_
 
int forwardTemplateID_
 
float maxSizeMismatchInY_
 
float minChargeRatio_
 
std::vector< Rulerecommend2D_
 
bool runDamagedClusters_
 
int speed_
 
const SiPixel2DTemplateDBObjecttemplateDBobject2D_
 
std::string templateDir_
 
std::vector< SiPixelTemplateStore2DthePixelTemp2D_
 
std::vector< SiPixelTemplateStorethePixelTemp_
 
bool UseClusterSplitter_
 

Additional Inherited Members

- Public Types inherited from PixelClusterParameterEstimator
typedef std::pair< LocalPoint, LocalErrorLocalValues
 
using ReturnType = std::tuple< LocalPoint, LocalError, SiPixelRecHitQuality::QualWordType >
 
typedef std::vector< LocalValuesVLocalValues
 
- Protected Types inherited from PixelCPEBase
using DetParams = std::vector< DetParam >
 
typedef GloballyPositioned< double > Frame
 
- Protected Member Functions inherited from PixelCPEBase
void computeAnglesFromDetPosition (DetParam const &theDetParam, ClusterParam &theClusterParam) const
 
void computeAnglesFromTrajectory (DetParam const &theDetParam, ClusterParam &theClusterParam, const LocalTrajectoryParameters &ltp) const
 
void computeLorentzShifts (DetParam &) const
 
DetParam const & detParam (const GeomDetUnit &det) const
 
LocalVector driftDirection (DetParam &theDetParam, GlobalVector bfield) const
 
LocalVector driftDirection (DetParam &theDetParam, LocalVector bfield) const
 
void setTheClu (DetParam const &, ClusterParam &theClusterParam) const
 
- Protected Attributes inherited from PixelCPEBase
bool alpha2Order
 
bool DoLorentz_
 
const SiPixelGenErrorDBObjectgenErrorDBObject_
 
const TrackerGeometrygeom_
 
float lAOffset_
 
float lAWidthBPix_
 
float lAWidthFPix_
 
bool LoadTemplatesFromDB_
 
const SiPixelLorentzAnglelorentzAngle_
 
const SiPixelLorentzAnglelorentzAngleWidth_
 
DetParams m_DetParams =DetParams(1440)
 
const MagneticFieldmagfield_
 
const SiPixelTemplateDBObjecttemplateDBobject_
 
int theFlag_
 
int theVerboseLevel
 
const TrackerTopologyttopo_
 
bool useLAOffsetFromConfig_
 
bool useLAWidthFromConfig_
 
bool useLAWidthFromDB_
 
- Protected Attributes inherited from PixelClusterParameterEstimator
unsigned int clusterProbComputationFlag_
 

Detailed Description

Definition at line 35 of file PixelCPEClusterRepair.h.

Constructor & Destructor Documentation

PixelCPEClusterRepair::PixelCPEClusterRepair ( edm::ParameterSet const &  conf,
const MagneticField mag,
const TrackerGeometry geom,
const TrackerTopology ttopo,
const SiPixelLorentzAngle lorentzAngle,
const SiPixelTemplateDBObject templateDBobject,
const SiPixel2DTemplateDBObject templateDBobject2D 
)

Definition at line 40 of file PixelCPEClusterRepair.cc.

References barrelTemplateID_, Exception, fill2DTemplIDs(), forwardTemplateID_, edm::ParameterSet::getParameter(), PixelCPEBase::LoadTemplatesFromDB_, LogDebug, maxSizeMismatchInY_, minChargeRatio_, SiPixelTemplate2D::pushfile(), SiPixelTemplate::pushfile(), recommend2D_, runDamagedClusters_, speed_, str, templateDBobject2D_, PixelCPEBase::templateDBobject_, templateDir_, thePixelTemp2D_, thePixelTemp_, and UseClusterSplitter_.

47 : PixelCPEBase(conf, mag, geom, ttopo, lorentzAngle, nullptr, templateDBobject, nullptr,1)
48 {
49  LogDebug("PixelCPEClusterRepair::(constructor)") << endl;
50 
51  //--- Parameter to decide between DB or text file template access
53  {
54  // Initialize template store to the selected ID [Morris, 6/25/08]
56  throw cms::Exception("PixelCPEClusterRepair")
57  << "\nERROR: Templates not filled correctly. Check the sqlite file. Using SiPixelTemplateDBObject version "
58  << (*templateDBobject_).version() << "\n\n";
59 
60  // Initialize template store to the selected ID [Morris, 6/25/08]
61  if ( !SiPixelTemplate2D::pushfile( *templateDBobject2D , thePixelTemp2D_) )
62  throw cms::Exception("PixelCPEClusterRepair")
63  << "\nERROR: Templates not filled correctly. Check the sqlite file. Using SiPixelTemplateDBObject2D version "
64  << (*templateDBobject2D).version() << "\n\n";
65  }
66  else
67  {
68  LogDebug("PixelCPEClusterRepair") << "Loading templates for barrel and forward from ASCII files." << endl;
69  //--- (Archaic) Get configurable template IDs. This code executes only if we loading pixels from ASCII
70  // files, and then they are mandatory.
71  barrelTemplateID_ = conf.getParameter<int>( "barrelTemplateID" );
72  forwardTemplateID_ = conf.getParameter<int>( "forwardTemplateID" );
73  templateDir_ = conf.getParameter<int>( "directoryWithTemplates" );
74 
76  throw cms::Exception("PixelCPEClusterRepair")
77  << "\nERROR: Template ID " << barrelTemplateID_ << " not loaded correctly from text file. Reconstruction will fail.\n\n";
78 
79  if ( !SiPixelTemplate::pushfile( forwardTemplateID_ , thePixelTemp_ , templateDir_ ) )
80  throw cms::Exception("PixelCPEClusterRepair")
81  << "\nERROR: Template ID " << forwardTemplateID_ << " not loaded correctly from text file. Reconstruction will fail.\n\n";
82  }
83 
84  templateDBobject2D_ = templateDBobject2D;
86  speed_ = conf.getParameter<int>( "speed");
87  LogDebug("PixelCPEClusterRepair::PixelCPEClusterRepair:") <<
88  "Template speed = " << speed_ << "\n";
89 
90  UseClusterSplitter_ = conf.getParameter<bool>("UseClusterSplitter");
91 
92 
93 
94  maxSizeMismatchInY_ = conf.getParameter<double>("MaxSizeMismatchInY");
95  minChargeRatio_ = conf.getParameter<double>("MinChargeRatio");
96 
97  // read sub-detectors and apply rule to recommend 2D
98  // can be:
99  // XYX (XYZ = PXB, PXE)
100  // XYZ n (XYZ as above, n = layer, wheel or disk = 1 .. 6 ;)
101  std::vector<std::string> str_recommend2D = conf.getParameter<std::vector<std::string> >("Recommend2D");
102  recommend2D_.reserve(str_recommend2D.size());
103  for (auto & str: str_recommend2D){
104  recommend2D_.push_back(str);
105  }
106 
107  // run CR on damaged clusters (and not only on edge hits)
108  runDamagedClusters_ = conf.getParameter<bool>("RunDamagedClusters");
109 }
#define LogDebug(id)
std::vector< SiPixelTemplateStore > thePixelTemp_
std::vector< Rule > recommend2D_
bool LoadTemplatesFromDB_
Definition: PixelCPEBase.h:258
const SiPixel2DTemplateDBObject * templateDBobject2D_
const SiPixelTemplateDBObject * templateDBobject_
Definition: PixelCPEBase.h:254
std::vector< SiPixelTemplateStore2D > thePixelTemp2D_
static bool pushfile(int filenum, std::vector< SiPixelTemplateStore2D > &pixelTemp, std::string dir="")
static bool pushfile(int filenum, std::vector< SiPixelTemplateStore > &pixelTemp, std::string dir="CalibTracker/SiPixelESProducers/data/")
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
#define str(s)
PixelCPEClusterRepair::~PixelCPEClusterRepair ( )
override

Definition at line 153 of file PixelCPEClusterRepair.cc.

References thePixelTemp2D_, thePixelTemp_, and x.

154 {
155  for (auto x : thePixelTemp_) x.destroy();
156  for (auto x : thePixelTemp2D_) x.destroy();
157 }
std::vector< SiPixelTemplateStore > thePixelTemp_
std::vector< SiPixelTemplateStore2D > thePixelTemp2D_

Member Function Documentation

void PixelCPEClusterRepair::callTempReco1D ( DetParam const &  theDetParam,
ClusterParamTemplate theClusterParam,
SiPixelTemplateReco::ClusMatrix clusterPayload,
int  ID,
LocalPoint lp 
) const
private

Definition at line 326 of file PixelCPEClusterRepair.cc.

References PixelCPEBase::DetParam::bx, PixelCPEBase::DetParam::bz, PixelCPEBase::ClusterParam::cotalpha, PixelCPEBase::ClusterParam::cotbeta, PixelCPEBase::ClusterParam::hasFilledProb_, PixelCPEClusterRepair::ClusterParamTemplate::ierr, GeomDetEnumerators::isEndcap(), PixelCPEBase::ClusterParam::loc_trk_pred, PixelTopology::localX(), PixelTopology::localY(), LogDebug, SiPixelTemplateReco::PixelTempReco1D(), PixelCPEBase::ClusterParam::probabilityQ_, PixelCPEBase::ClusterParam::probabilityX_, PixelCPEBase::ClusterParam::probabilityY_, PixelCPEBase::ClusterParam::qBin_, speed_, PixelCPEClusterRepair::ClusterParamTemplate::templSigmaX_, PixelCPEClusterRepair::ClusterParamTemplate::templSigmaY_, PixelCPEClusterRepair::ClusterParamTemplate::templXrec_, PixelCPEClusterRepair::ClusterParamTemplate::templYrec_, PixelCPEBase::ClusterParam::theCluster, PixelCPEBase::DetParam::thePart, thePixelTemp_, PixelCPEBase::DetParam::theTopol, UNLIKELY, PixelCPEBase::ClusterParam::with_track_angle, PV3DBase< T, PVType, FrameType >::x(), SiPixelCluster::x(), PV3DBase< T, PVType, FrameType >::y(), and SiPixelCluster::y().

Referenced by localPosition().

330 {
332 
333  // Output:
334  float nonsense = -99999.9f; // nonsense init value
335  theClusterParam.templXrec_ = theClusterParam.templYrec_ = theClusterParam.templSigmaX_ = theClusterParam.templSigmaY_ = nonsense;
336  // If the template recontruction fails, we want to return 1.0 for now
337  theClusterParam.probabilityX_ = theClusterParam.probabilityY_ = theClusterParam.probabilityQ_ = 1.f;
338  theClusterParam.qBin_ = 0;
339  // We have a boolean denoting whether the reco failed or not
340  theClusterParam.hasFilledProb_ = false;
341 
342  // ******************************************************************
343  //--- Call normal TemplateReco
344  //
345  float locBz = theDetParam.bz;
346  float locBx = theDetParam.bx;
347  //
348  const bool deadpix = false;
349  std::vector<std::pair<int, int> > zeropix;
350  int nypix =0, nxpix = 0;
351  //
352  theClusterParam.ierr =
353  PixelTempReco1D( ID, theClusterParam.cotalpha, theClusterParam.cotbeta,
354  locBz, locBx,
355  clusterPayload,
356  templ,
357  theClusterParam.templYrec_, theClusterParam.templSigmaY_, theClusterParam.probabilityY_,
358  theClusterParam.templXrec_, theClusterParam.templSigmaX_, theClusterParam.probabilityX_,
359  theClusterParam.qBin_,
360  speed_, deadpix, zeropix,
361  theClusterParam.probabilityQ_, nypix, nxpix
362  );
363  // ******************************************************************
364 
365  //--- Check exit status
366  if UNLIKELY( theClusterParam.ierr != 0 )
367  {
368  LogDebug("PixelCPEClusterRepair::localPosition") <<
369  "reconstruction failed with error " << theClusterParam.ierr << "\n";
370 
371  theClusterParam.probabilityX_ = theClusterParam.probabilityY_ = theClusterParam.probabilityQ_ = 0.f;
372  theClusterParam.qBin_ = 0;
373 
374  // Gavril: what do we do in this case ? For now, just return the cluster center of gravity in microns
375  // In the x case, apply a rough Lorentz drift average correction
376  // To do: call PixelCPEGeneric whenever PixelTempReco1D fails
377  float lorentz_drift = -999.9;
378  if ( ! GeomDetEnumerators::isEndcap(theDetParam.thePart) )
379  lorentz_drift = 60.0f; // in microns
380  else
381  lorentz_drift = 10.0f; // in microns
382  // GG: trk angles needed to correct for bows/kinks
383  if ( theClusterParam.with_track_angle )
384  {
385  theClusterParam.templXrec_ = theDetParam.theTopol->localX( theClusterParam.theCluster->x(), theClusterParam.loc_trk_pred ) - lorentz_drift * micronsToCm; // rough Lorentz drift correction
386  theClusterParam.templYrec_ = theDetParam.theTopol->localY( theClusterParam.theCluster->y(), theClusterParam.loc_trk_pred );
387  }
388  else
389  {
390  edm::LogError("PixelCPEClusterRepair")
391  << "@SUB = PixelCPEClusterRepair::localPosition"
392  << "Should never be here. PixelCPEClusterRepair should always be called with track angles. This is a bad error !!! ";
393 
394  theClusterParam.templXrec_ = theDetParam.theTopol->localX( theClusterParam.theCluster->x() ) - lorentz_drift * micronsToCm; // rough Lorentz drift correction
395  theClusterParam.templYrec_ = theDetParam.theTopol->localY( theClusterParam.theCluster->y() );
396  }
397  }
398  else
399  {
400  //--- Template Reco succeeded. The probabilities are filled.
401  theClusterParam.hasFilledProb_ = true;
402 
403 
404 
405  //--- Go from microns to centimeters
406  theClusterParam.templXrec_ *= micronsToCm;
407  theClusterParam.templYrec_ *= micronsToCm;
408 
409  //--- Go back to the module coordinate system
410  theClusterParam.templXrec_ += lp.x();
411  theClusterParam.templYrec_ += lp.y();
412 
413  }
414  return;
415 }
#define LogDebug(id)
std::vector< SiPixelTemplateStore > thePixelTemp_
uint32_t ID
Definition: Definitions.h:26
T y() const
Definition: PV3DBase.h:63
int PixelTempReco1D(int id, float cotalpha, float cotbeta, float locBz, float locBx, ClusMatrix &cluster, SiPixelTemplate &templ, float &yrec, float &sigmay, float &proby, float &xrec, float &sigmax, float &probx, int &qbin, int speed, bool deadpix, std::vector< std::pair< int, int > > &zeropix, float &probQ, int &nypix, int &nxpix)
bool isEndcap(GeomDetEnumerators::SubDetector m)
#define UNLIKELY(x)
Definition: Likely.h:21
T x() const
Definition: PV3DBase.h:62
void PixelCPEClusterRepair::callTempReco2D ( DetParam const &  theDetParam,
ClusterParamTemplate theClusterParam,
SiPixelTemplateReco2D::ClusMatrix clusterPayload,
int  ID,
LocalPoint lp 
) const
private

Definition at line 424 of file PixelCPEClusterRepair.cc.

References PixelCPEBase::DetParam::bx, PixelCPEBase::DetParam::bz, PixelCPEBase::ClusterParam::cotalpha, PixelCPEBase::ClusterParam::cotbeta, PixelCPEBase::ClusterParam::edgeTypeX_, PixelCPEBase::ClusterParam::edgeTypeY_, PixelCPEBase::ClusterParam::hasFilledProb_, PixelCPEClusterRepair::ClusterParamTemplate::ierr2, GeomDetEnumerators::isEndcap(), PixelCPEBase::ClusterParam::loc_trk_pred, PixelTopology::localX(), PixelTopology::localY(), LogDebug, SiPixelTemplateReco2D::ClusMatrix::mrow, SiPixelTemplateReco2D::PixelTempReco2D(), PixelCPEBase::ClusterParam::probabilityQ_, PixelCPEBase::ClusterParam::probabilityX_, PixelCPEBase::ClusterParam::probabilityY_, PixelCPEBase::ClusterParam::qBin_, PixelCPEClusterRepair::ClusterParamTemplate::templProbXY_, PixelCPEClusterRepair::ClusterParamTemplate::templSigmaX_, PixelCPEClusterRepair::ClusterParamTemplate::templSigmaY_, PixelCPEClusterRepair::ClusterParamTemplate::templXrec_, PixelCPEClusterRepair::ClusterParamTemplate::templYrec_, PixelCPEBase::ClusterParam::theCluster, PixelCPEBase::DetParam::thePart, thePixelTemp2D_, PixelCPEBase::DetParam::theTopol, UNLIKELY, PixelCPEBase::ClusterParam::with_track_angle, PV3DBase< T, PVType, FrameType >::x(), SiPixelCluster::x(), PV3DBase< T, PVType, FrameType >::y(), and SiPixelCluster::y().

Referenced by localPosition().

428 {
430 
431  // Output:
432  float nonsense = -99999.9f; // nonsense init value
433  theClusterParam.templXrec_ = theClusterParam.templYrec_ = theClusterParam.templSigmaX_ = theClusterParam.templSigmaY_ = nonsense;
434  // If the template recontruction fails, we want to return 1.0 for now
435  theClusterParam.probabilityX_ = theClusterParam.probabilityY_ = theClusterParam.probabilityQ_ = 1.f;
436  theClusterParam.qBin_ = 0;
437  // We have a boolean denoting whether the reco failed or not
438  theClusterParam.hasFilledProb_ = false;
439 
440  // ******************************************************************
441  //--- Call 2D TemplateReco
442  //
443  float locBz = theDetParam.bz;
444  float locBx = theDetParam.bx;
445 
446  //--- Input:
447  // edgeflagy - (input) flag to indicate the present of edges in y:
448  // 0=none (or interior gap),1=edge at small y, 2=edge at large y, 3=edge at either end
449  //
450  // edgeflagx - (input) flag to indicate the present of edges in x:
451  // 0=none, 1=edge at small x, 2=edge at large x
452  //
453  // These two variables are calculated in setTheClu() and stored in edgeTypeX_ and edgeTypeY_
454  //
455  //--- Output:
456  // deltay - (output) template y-length - cluster length [when > 0, possibly missing end]
457  // npixels - ??? &&& Ask Morris
458 
459 
460  float deltay = 0; // return param
461  int npixels = 0; // return param
462 
463 
464  //For now, turn off edgeX_ flags
465  theClusterParam.edgeTypeX_ = 0;
466 
467  if(clusterPayload.mrow > 4){
468  // The cluster is too big, the 2D reco will perform horribly.
469  // Better to return immediately in error
470  theClusterParam.ierr2 = 8;
471 
472  }
473  else{
474  theClusterParam.ierr2 =
475  PixelTempReco2D( ID, theClusterParam.cotalpha, theClusterParam.cotbeta,
476  locBz, locBx,
477  theClusterParam.edgeTypeY_ , theClusterParam.edgeTypeX_ ,
478  clusterPayload,
479  templ2d,
480  theClusterParam.templYrec_, theClusterParam.templSigmaY_,
481  theClusterParam.templXrec_, theClusterParam.templSigmaX_,
482  theClusterParam.templProbXY_,
483  theClusterParam.probabilityQ_,
484  theClusterParam.qBin_,
485  deltay, npixels
486  );
487  }
488  // ******************************************************************
489 
490  //--- Check exit status
491  if UNLIKELY( theClusterParam.ierr2 != 0 )
492  {
493  LogDebug("PixelCPEClusterRepair::localPosition") <<
494  "2D reconstruction failed with error " << theClusterParam.ierr2 << "\n";
495 
496  theClusterParam.probabilityX_ = theClusterParam.probabilityY_ = theClusterParam.probabilityQ_ = 0.f;
497  theClusterParam.qBin_ = 0;
498  // GG: what do we do in this case? For now, just return the cluster center of gravity in microns
499  // In the x case, apply a rough Lorentz drift average correction
500  float lorentz_drift = -999.9;
501  if ( ! GeomDetEnumerators::isEndcap(theDetParam.thePart) )
502  lorentz_drift = 60.0f; // in microns // &&& replace with a constant (globally)
503  else
504  lorentz_drift = 10.0f; // in microns
505  // GG: trk angles needed to correct for bows/kinks
506  if ( theClusterParam.with_track_angle )
507  {
508  theClusterParam.templXrec_ = theDetParam.theTopol->localX( theClusterParam.theCluster->x(), theClusterParam.loc_trk_pred ) - lorentz_drift * micronsToCm; // rough Lorentz drift correction
509  theClusterParam.templYrec_ = theDetParam.theTopol->localY( theClusterParam.theCluster->y(), theClusterParam.loc_trk_pred );
510  }
511  else
512  {
513  edm::LogError("PixelCPEClusterRepair")
514  << "@SUB = PixelCPEClusterRepair::localPosition"
515  << "Should never be here. PixelCPEClusterRepair should always be called with track angles. This is a bad error !!! ";
516 
517  theClusterParam.templXrec_ = theDetParam.theTopol->localX( theClusterParam.theCluster->x() ) - lorentz_drift * micronsToCm; // rough Lorentz drift correction
518  theClusterParam.templYrec_ = theDetParam.theTopol->localY( theClusterParam.theCluster->y() );
519  }
520  }
521  else
522  {
523  //--- Template Reco succeeded.
524  theClusterParam.hasFilledProb_ = true;
525 
526  //--- Go from microns to centimeters
527  theClusterParam.templXrec_ *= micronsToCm;
528  theClusterParam.templYrec_ *= micronsToCm;
529 
530  //--- Go back to the module coordinate system
531  theClusterParam.templXrec_ += lp.x();
532  theClusterParam.templYrec_ += lp.y();
533  }
534  return;
535 }
#define LogDebug(id)
int PixelTempReco2D(int id, float cotalpha, float cotbeta, float locBz, float locBx, int edgeflagy, int edgeflagx, ClusMatrix &cluster, SiPixelTemplate2D &templ, float &yrec, float &sigmay, float &xrec, float &sigmax, float &probxy, float &probQ, int &qbin, float &deltay, int &npixel)
uint32_t ID
Definition: Definitions.h:26
T y() const
Definition: PV3DBase.h:63
std::vector< SiPixelTemplateStore2D > thePixelTemp2D_
bool isEndcap(GeomDetEnumerators::SubDetector m)
#define UNLIKELY(x)
Definition: Likely.h:21
T x() const
Definition: PV3DBase.h:62
void PixelCPEClusterRepair::checkRecommend2D ( DetParam const &  theDetParam,
ClusterParamTemplate theClusterParam,
SiPixelTemplateReco::ClusMatrix clusterPayload,
int  ID 
) const
private

Definition at line 540 of file PixelCPEClusterRepair.cc.

References PixelCPEBase::DetParam::bx, PixelCPEBase::DetParam::bz, SiPixelCluster::charge(), SiPixelTemplate::clsleny(), PixelCPEBase::ClusterParam::cotalpha, PixelCPEBase::ClusterParam::cotbeta, PixelCPEBase::ClusterParam::edgeTypeY_, GeomDet::geographicalId(), PixelCPEBase::ClusterParam::hasBadPixels_, mps_fire::i, SiPixelTemplate::interpolate(), maxSizeMismatchInY_, SiPixelTemplateReco::ClusMatrix::mcol, minChargeRatio_, SiPixelCluster::minPixelCol(), SiPixelTemplate::qavg(), recommend2D_, PixelCPEClusterRepair::ClusterParamTemplate::recommended2D_, runDamagedClusters_, SiPixelCluster::sizeY(), PixelCPEBase::ClusterParam::theCluster, PixelCPEBase::DetParam::theDet, thePixelTemp_, PixelCPEBase::ttopo_, and SiPixelTemplateReco::ClusMatrix::ydouble.

Referenced by localPosition().

543 {
544  // recommend2D is false by default
545  theClusterParam.recommended2D_ = false;
546 
547  DetId id = (theDetParam.theDet->geographicalId());
548 
549  bool recommend = false;
550  for (auto & rec: recommend2D_){
551  recommend = rec.recommend(id, ttopo_);
552  if(recommend) break;
553  }
554 
555  // only run on those layers recommended by configuration
556  if(!recommend) {
557  theClusterParam.recommended2D_ = false;
558  return;
559  }
560 
561  if(theClusterParam.edgeTypeY_){
562  // For clusters that have edges in Y, run 2d reco.
563  // Flags already set by CPEBase
564  theClusterParam.recommended2D_ = true;
565  return;
566  }
567  // The 1d pixel template
569  if(!templ.interpolate(ID, theClusterParam.cotalpha, theClusterParam.cotbeta, theDetParam.bz, theDetParam.bx)){
570  //error setting up template, return false
571  theClusterParam.recommended2D_ = false;
572  return;
573  }
574 
575 
576  //length of the cluster taking into account double sized pixels
577  float nypix = clusterPayload.mcol;
578  for(int i=0; i<clusterPayload.mcol; i++){
579  if(clusterPayload.ydouble[i]) nypix+=1.;
580  }
581 
582  // templ.clsleny() is the expected length of the cluster along y axis.
583  // templ.qavg() is the expected total charge of the cluster
584  // theClusterParam.theCluster->charge() is the total charge of this cluster
585  float nydiff = templ.clsleny() - nypix;
586  float qratio = theClusterParam.theCluster->charge()/templ.qavg();
587 
588  if ( nydiff > maxSizeMismatchInY_ && qratio < minChargeRatio_){
589  // If the cluster is shorter than expected and has less charge, likely
590  // due to truncated cluster, try 2D reco
591 
592  theClusterParam.recommended2D_ = true;
593  theClusterParam.hasBadPixels_ = true;
594 
595  // if not RunDamagedClusters flag, don't try to fix any clusters
596  if(!runDamagedClusters_) {
597  theClusterParam.recommended2D_ = false;
598  }
599 
600  // Figure out what edge flags to set for truncated cluster
601  // Truncated clusters usually come from dead double columns
602  //
603  // If cluster is of even length, either both of or neither of beginning and ending
604  // edge are on a double column, so we cannot figure out the likely edge of
605  // truncation, let the 2D algorithm try extending on both sides (option 3)
606  if(theClusterParam.theCluster->sizeY() % 2 == 0) theClusterParam.edgeTypeY_ = 3;
607  else{
608  //If the cluster is of odd length, only one of the edges can end on
609  //a double column, this is the likely edge of truncation
610  //Double columns always start on even indexes
611  int min_col = theClusterParam.theCluster->minPixelCol();
612  if(min_col %2 ==0){
613  //begining edge is at a double column (end edge cannot be,
614  //because odd length) so likely truncated at small y (option 1)
615  theClusterParam.edgeTypeY_ = 1;
616  }
617  else{
618  //end edge is at a double column (beginning edge cannot be,
619  //because odd length) so likely truncated at large y (option 2)
620  theClusterParam.edgeTypeY_ = 2;
621  }
622  }
623  }
624 }
std::vector< SiPixelTemplateStore > thePixelTemp_
uint32_t ID
Definition: Definitions.h:26
std::vector< Rule > recommend2D_
Definition: DetId.h:18
const TrackerTopology & ttopo_
Definition: PixelCPEBase.h:246
PixelCPEBase::ClusterParam * PixelCPEClusterRepair::createClusterParam ( const SiPixelCluster cl) const
overrideprivatevirtual

Implements PixelCPEBase.

Definition at line 159 of file PixelCPEClusterRepair.cc.

160 {
161  return new ClusterParamTemplate(cl);
162 }
void PixelCPEClusterRepair::fill2DTemplIDs ( )
private

Definition at line 114 of file PixelCPEClusterRepair.cc.

References TrackerGeometry::detUnits(), PixelCPEBase::geom_, SiPixel2DTemplateDBObject::getTemplateID(), mps_fire::i, LogDebug, PixelCPEBase::m_DetParams, TrackerGeometry::offsetDU(), AlCaHLTBitMon_ParallelJobs::p, templateDBobject2D_, and GeomDetEnumerators::tkDetEnum.

Referenced by PixelCPEClusterRepair().

115 {
116  auto const & dus = geom_.detUnits();
117  unsigned m_detectors = dus.size();
118  for(unsigned int i=1;i<7;++i) {
119  LogDebug("PixelCPEClusterRepair:: LookingForFirstStrip") << "Subdetector " << i
120  << " GeomDetEnumerator " << GeomDetEnumerators::tkDetEnum[i]
121  << " offset " << geom_.offsetDU(GeomDetEnumerators::tkDetEnum[i])
122  << " is it strip? " << (geom_.offsetDU(GeomDetEnumerators::tkDetEnum[i]) != dus.size() ?
123  dus[geom_.offsetDU(GeomDetEnumerators::tkDetEnum[i])]->type().isTrackerStrip() : false);
124  if(geom_.offsetDU(GeomDetEnumerators::tkDetEnum[i]) != dus.size() &&
125  dus[geom_.offsetDU(GeomDetEnumerators::tkDetEnum[i])]->type().isTrackerStrip()) {
127  }
128  }
129  LogDebug("LookingForFirstStrip") << " Chosen offset: " << m_detectors;
130 
131 
132  m_DetParams.resize(m_detectors);
133  LogDebug("PixelCPEClusterRepair::fillDetParams():") <<"caching "<<m_detectors<<" pixel detectors"<<endl;
134  //Loop through detectors and store 2D template ID
135  bool printed_info = false;
136  for (unsigned i=0; i!=m_detectors;++i) {
137  auto & p=m_DetParams[i];
138 
139  p.detTemplateId2D = templateDBobject2D_->getTemplateID(p.theDet->geographicalId());
140  if(p.detTemplateId != p.detTemplateId2D && !printed_info){
141  edm::LogWarning("PixelCPEClusterRepair") << "different template ID between 1D and 2D " << p.detTemplateId << " " << p.detTemplateId2D << endl;
142  printed_info = true;
143  }
144  }
145 
146 }
#define LogDebug(id)
const DetContainer & detUnits() const override
Returm a vector of all GeomDet.
DetParams m_DetParams
Definition: PixelCPEBase.h:284
const SiPixel2DTemplateDBObject * templateDBobject2D_
unsigned int offsetDU(SubDetector sid) const
SubDetector tkDetEnum[8]
short getTemplateID(const uint32_t &detid) const
const TrackerGeometry & geom_
Definition: PixelCPEBase.h:245
LocalError PixelCPEClusterRepair::localError ( DetParam const &  theDetParam,
ClusterParam theClusterParam 
) const
overrideprivatevirtual

Implements PixelCPEBase.

Definition at line 633 of file PixelCPEClusterRepair.cc.

References PixelCPEBase::ClusterParam::edgeTypeX_, PixelCPEBase::ClusterParam::edgeTypeY_, Exception, f, PixelCPEClusterRepair::ClusterParamTemplate::ierr, PixelCPEClusterRepair::ClusterParamTemplate::ierr2, GeomDetEnumerators::isBarrel(), GeomDetEnumerators::isTrackerPixel(), LogDebug, SiPixelCluster::sizeX(), SiPixelCluster::sizeY(), PixelCPEClusterRepair::ClusterParamTemplate::templSigmaX_, PixelCPEClusterRepair::ClusterParamTemplate::templSigmaY_, PixelCPEBase::ClusterParam::theCluster, PixelCPEBase::DetParam::thePart, PixelCPEBase::theVerboseLevel, and UNLIKELY.

634 {
635 
636  ClusterParamTemplate & theClusterParam = static_cast<ClusterParamTemplate &>(theClusterParamBase);
637 
638  //--- Default is the maximum error used for edge clusters.
639  //--- (never used, in fact: let comment it out, shut up the complains of the static analyzer, and save a few CPU cycles)
640  float xerr = 0.0f, yerr = 0.0f;
641 
642  //--- Check status of both template calls.
643  if UNLIKELY ( (theClusterParam.ierr !=0) || (theClusterParam.ierr2 !=0) ) {
644  // If reconstruction fails the hit position is calculated from cluster center of gravity
645  // corrected in x by average Lorentz drift. Assign huge errors.
646  //
647  if UNLIKELY (!GeomDetEnumerators::isTrackerPixel(theDetParam.thePart))
649  << "A non-pixel detector type in here?";
650 
651  // Assign better errors based on the residuals for failed template cases
652  if ( GeomDetEnumerators::isBarrel(theDetParam.thePart)) {
653  xerr = 55.0f * micronsToCm; // &&& get errors from elsewhere?
654  yerr = 36.0f * micronsToCm;
655  }
656  else {
657  xerr = 42.0f * micronsToCm;
658  yerr = 39.0f * micronsToCm;
659  }
660  }
661  // Leave commented for now, until we study the interplay of failure modes
662  // of 1D template reco and edges. For edge hits we run 2D reco by default!
663  //
664  // else if ( theClusterParam.edgeTypeX_ || theClusterParam.edgeTypeY_ ) {
665  // // for edge pixels assign errors according to observed residual RMS
666  // if ( theClusterParam.edgeTypeX_ && !theClusterParam.edgeTypeY_ ) {
667  // xerr = 23.0f * micronsToCm;
668  // yerr = 39.0f * micronsToCm;
669  // }
670  // else if ( !theClusterParam.edgeTypeX_ && theClusterParam.edgeTypeY_ ) {
671  // xerr = 24.0f * micronsToCm;
672  // yerr = 96.0f * micronsToCm;
673  // }
674  // else if ( theClusterParam.edgeTypeX_ && theClusterParam.edgeTypeY_ ) {
675  // xerr = 31.0f * micronsToCm;
676  // yerr = 90.0f * micronsToCm;
677  // }
678  // }
679  else {
680  xerr = theClusterParam.templSigmaX_ * micronsToCm;
681  yerr = theClusterParam.templSigmaY_ * micronsToCm;
682  // &&& should also check ierr (saved as class variable) and return
683  // &&& nonsense (another class static) if the template fit failed.
684  }
685 
686  if (theVerboseLevel > 9) {
687  LogDebug("PixelCPEClusterRepair")
688  << " Sizex = " << theClusterParam.theCluster->sizeX()
689  << " Sizey = " << theClusterParam.theCluster->sizeY()
690  << " Edgex = " << theClusterParam.edgeTypeX_
691  << " Edgey = " << theClusterParam.edgeTypeY_
692  << " ErrX = " << xerr << " ErrY = " << yerr;
693  }
694 
695 
696  if ( !(xerr > 0.0f) )
697  throw cms::Exception("PixelCPEClusterRepair::localError")
698  << "\nERROR: Negative pixel error xerr = " << xerr << "\n\n";
699 
700  if ( !(yerr > 0.0f) )
701  throw cms::Exception("PixelCPEClusterRepair::localError")
702  << "\nERROR: Negative pixel error yerr = " << yerr << "\n\n";
703 
704  return LocalError(xerr*xerr, 0, yerr*yerr);
705 }
#define LogDebug(id)
type
Definition: HCALResponse.h:21
bool isBarrel(GeomDetEnumerators::SubDetector m)
double f[11][100]
Namespace of DDCMS conversion namespace.
#define UNLIKELY(x)
Definition: Likely.h:21
bool isTrackerPixel(GeomDetEnumerators::SubDetector m)
LocalPoint localPosition(DetParam const &theDetParam, ClusterParam &theClusterParam) const override
LocalPoint PixelCPEClusterRepair::localPosition ( DetParam const &  theDetParam,
ClusterParam theClusterParam 
) const
overrideprivatevirtual

Implements PixelCPEBase.

Definition at line 174 of file PixelCPEClusterRepair.cc.

References barrelTemplateID_, callTempReco1D(), callTempReco2D(), checkRecommend2D(), PixelCPEBase::DetParam::detTemplateId, PixelCPEBase::DetParam::detTemplateId2D, PixelCPEBase::ClusterParam::filled_from_2d, objects.autophobj::float, forwardTemplateID_, PixelCPEBase::ClusterParam::hasBadPixels_, PixelCPEBase::ClusterParam::hasFilledProb_, mps_fire::i, PixelCPEClusterRepair::ClusterParamTemplate::ierr, PixelCPEClusterRepair::ClusterParamTemplate::ierr2, createfilelist::int, GeomDetEnumerators::isEndcap(), RectangularPixelTopology::isItBigPixelInX(), RectangularPixelTopology::isItBigPixelInY(), PixelCPEBase::ClusterParam::isOnEdge_, GeomDetEnumerators::isTrackerPixel(), PixelCPEBase::LoadTemplatesFromDB_, PixelCPEBase::ClusterParam::loc_trk_pred, Topology::localPosition(), SiStripPI::max, min(), SiPixelCluster::minPixelCol(), SiPixelCluster::minPixelRow(), SiPixelCluster::pixel(), PixelCPEBase::ClusterParam::probabilityQ_, PixelCPEBase::ClusterParam::probabilityX_, PixelCPEBase::ClusterParam::probabilityY_, PixelCPEBase::ClusterParam::qBin_, PixelCPEClusterRepair::ClusterParamTemplate::recommended2D_, SiPixelCluster::size(), PixelCPEBase::ClusterParam::spansTwoROCs_, PixelCPEClusterRepair::ClusterParamTemplate::templProbXY_, PixelCPEClusterRepair::ClusterParamTemplate::templXrec_, PixelCPEClusterRepair::ClusterParamTemplate::templYrec_, PixelCPEBase::ClusterParam::theCluster, PixelCPEBase::DetParam::thePart, PixelCPEBase::DetParam::theRecTopol, PixelCPEBase::DetParam::theTopol, create_public_lumi_plots::tmp_x, create_public_lumi_plots::tmp_y, and PixelCPEBase::ClusterParam::with_track_angle.

175 {
176 
177  ClusterParamTemplate & theClusterParam = static_cast<ClusterParamTemplate &>(theClusterParamBase);
178  bool filled_from_2d = false;
179 
180  if(!GeomDetEnumerators::isTrackerPixel(theDetParam.thePart))
181  throw cms::Exception("PixelCPEClusterRepair::localPosition :")
182  << "A non-pixel detector type in here?";
183 
184 
185  int ID1 = -9999;
186  int ID2 = -9999;
187  if ( LoadTemplatesFromDB_ ) {
188  ID1 = theDetParam.detTemplateId;
189  ID2 = theDetParam.detTemplateId2D;
190  } else { // from asci file
191  if ( ! GeomDetEnumerators::isEndcap(theDetParam.thePart) )
192  ID1 = ID2 = barrelTemplateID_ ; // barrel
193  else
194  ID1 = ID2 = forwardTemplateID_ ; // forward
195  }
196 
197  // &&& PM, note for later: PixelCPEBase calculates minInX,Y, and maxInX,Y
198  // Why can't we simply use that and save time with row_offset, col_offset
199  // and mrow = maxInX-minInX, mcol = maxInY-minInY ... Except that we
200  // also need to take into account cluster_matrix_size_x,y.
201 
202 
203  //--- Preparing to retrieve ADC counts from the SiPixeltheClusterParam.theCluster
204  // The pixels from minPixelRow() will go into clust_array_2d[0][*],
205  // and the pixels from minPixelCol() will go into clust_array_2d[*][0].
206  int row_offset = theClusterParam.theCluster->minPixelRow();
207  int col_offset = theClusterParam.theCluster->minPixelCol();
208 
209  //--- Store the coordinates of the center of the (0,0) pixel of the array that
210  // gets passed to PixelTempReco2D. Will add these values to the output of TemplReco2D
211  float tmp_x = float(row_offset) + 0.5f;
212  float tmp_y = float(col_offset) + 0.5f;
213 
214 
215  //--- Store these offsets (to be added later) in a LocalPoint after tranforming
216  // them from measurement units (pixel units) to local coordinates (cm)
217  LocalPoint lp;
218  if ( theClusterParam.with_track_angle )
219  //--- Update call with trk angles needed for bow/kink corrections // Gavril
220  lp = theDetParam.theTopol->localPosition( MeasurementPoint(tmp_x, tmp_y), theClusterParam.loc_trk_pred );
221  else
222  {
223  edm::LogError("PixelCPEClusterRepair")
224  << "@SUB = PixelCPEClusterRepair::localPosition"
225  << "Should never be here. PixelCPEClusterRepair should always be called with track angles. This is a bad error !!! ";
226  lp = theDetParam.theTopol->localPosition( MeasurementPoint(tmp_x, tmp_y) );
227  }
228 
229  //--- Compute the size of the matrix which will be passed to TemplateReco.
230  // We'll later make clustMatrix[ mrow ][ mcol ]
231  int mrow=0, mcol=0;
232  for (int i=0 ; i!=theClusterParam.theCluster->size(); ++i )
233  {
234  auto pix = theClusterParam.theCluster->pixel(i);
235  int irow = int(pix.x);
236  int icol = int(pix.y);
237  mrow = std::max(mrow,irow);
238  mcol = std::max(mcol,icol);
239  }
240  mrow -= row_offset; mrow+=1; mrow = std::min(mrow,cluster_matrix_size_x);
241  mcol -= col_offset; mcol+=1; mcol = std::min(mcol,cluster_matrix_size_y);
242  assert(mrow>0); assert(mcol>0);
243 
244 
245  //--- Make and fill the bool arrays flagging double pixels
246  bool xdouble[mrow], ydouble[mcol];
247  // x directions (shorter), rows
248  for (int irow = 0; irow < mrow; ++irow)
249  xdouble[irow] = theDetParam.theRecTopol->isItBigPixelInX( irow+row_offset );
250  //
251  // y directions (longer), columns
252  for (int icol = 0; icol < mcol; ++icol)
253  ydouble[icol] = theDetParam.theRecTopol->isItBigPixelInY( icol+col_offset );
254 
255  //--- C-style matrix. We'll need it in either case.
256  float clustMatrix[mrow][mcol];
257  float clustMatrix2[mrow][mcol];
258 
259  //--- Prepare struct that passes pointers to TemplateReco. It doesn't own anything.
260  SiPixelTemplateReco::ClusMatrix clusterPayload { &clustMatrix[0][0], xdouble, ydouble, mrow,mcol};
261  SiPixelTemplateReco2D::ClusMatrix clusterPayload2d{ &clustMatrix2[0][0], xdouble, ydouble, mrow,mcol};
262 
263 
264  //--- Copy clust's pixels (calibrated in electrons) into clustMatrix;
265  memset( clustMatrix, 0, sizeof(float)*mrow*mcol ); // Wipe it clean.
266  for (int i=0 ; i!=theClusterParam.theCluster->size(); ++i )
267  {
268  auto pix = theClusterParam.theCluster->pixel(i);
269  int irow = int(pix.x) - row_offset;
270  int icol = int(pix.y) - col_offset;
271  // &&& Do we ever get pixels that are out of bounds ??? Need to check.
272  if ( (irow<mrow) & (icol<mcol) ) clustMatrix[irow][icol] = float(pix.adc);
273  }
274  // &&& Save for later: fillClustMatrix( float * clustMatrix );
275 
276  //--- Save a copy of clustMatrix into clustMatrix2
277  memcpy( clustMatrix2, clustMatrix, sizeof(float)*mrow*mcol);
278 
279  //--- Set both return statuses, since we may call only one.
280  theClusterParam.ierr = 0;
281  theClusterParam.ierr2 = 0;
282 
283 
284 
285  //--- Should we run the 2D reco?
286  checkRecommend2D(theDetParam, theClusterParam, clusterPayload, ID1);
287  if ( theClusterParam.recommended2D_ ) {
288  //--- Call the Template Reco 2d with cluster repair
289  filled_from_2d = true;
290  callTempReco2D( theDetParam, theClusterParam, clusterPayload2d, ID2, lp );
291  }
292  else {
293  //--- Call the vanilla Template Reco
294  callTempReco1D( theDetParam, theClusterParam, clusterPayload, ID1, lp );
295  filled_from_2d = false;
296  }
297 
298  //--- Make sure cluster repair returns all info about the hit back up to caller
299  //--- Necessary because it copied the base class so it does not modify it
300  theClusterParamBase.isOnEdge_ = theClusterParam.isOnEdge_;
301  theClusterParamBase.hasBadPixels_ = theClusterParam.hasBadPixels_;
302  theClusterParamBase.spansTwoROCs_ = theClusterParam.spansTwoROCs_;
303  theClusterParamBase.hasFilledProb_ = theClusterParam.hasFilledProb_;
304  theClusterParamBase.qBin_ = theClusterParam.qBin_;
305  theClusterParamBase.probabilityQ_ = theClusterParam.probabilityQ_;
306  theClusterParamBase.filled_from_2d = filled_from_2d;
307  if(filled_from_2d){
308  theClusterParamBase.probabilityX_ = theClusterParam.templProbXY_;
309  theClusterParamBase.probabilityY_ = 0.;
310  }
311  else{
312  theClusterParamBase.probabilityX_ = theClusterParam.probabilityX_;
313  theClusterParamBase.probabilityY_ = theClusterParam.probabilityY_;
314  }
315 
316 
317 
318  return LocalPoint( theClusterParam.templXrec_, theClusterParam.templYrec_ );
319 }
Point3DBase< Scalar, LocalTag > LocalPoint
Definition: Definitions.h:32
Measurement2DPoint MeasurementPoint
Measurement points are two-dimensional by default.
bool LoadTemplatesFromDB_
Definition: PixelCPEBase.h:258
T min(T a, T b)
Definition: MathUtil.h:58
void callTempReco2D(DetParam const &theDetParam, ClusterParamTemplate &theClusterParam, SiPixelTemplateReco2D::ClusMatrix &clusterPayload, int ID, LocalPoint &lp) const
bool isEndcap(GeomDetEnumerators::SubDetector m)
void checkRecommend2D(DetParam const &theDetParam, ClusterParamTemplate &theClusterParam, SiPixelTemplateReco::ClusMatrix &clusterPayload, int ID) const
void callTempReco1D(DetParam const &theDetParam, ClusterParamTemplate &theClusterParam, SiPixelTemplateReco::ClusMatrix &clusterPayload, int ID, LocalPoint &lp) const
bool isTrackerPixel(GeomDetEnumerators::SubDetector m)

Member Data Documentation

int PixelCPEClusterRepair::barrelTemplateID_
private

Definition at line 105 of file PixelCPEClusterRepair.h.

Referenced by localPosition(), and PixelCPEClusterRepair().

int PixelCPEClusterRepair::forwardTemplateID_
private

Definition at line 106 of file PixelCPEClusterRepair.h.

Referenced by localPosition(), and PixelCPEClusterRepair().

float PixelCPEClusterRepair::maxSizeMismatchInY_
private

Definition at line 113 of file PixelCPEClusterRepair.h.

Referenced by checkRecommend2D(), and PixelCPEClusterRepair().

float PixelCPEClusterRepair::minChargeRatio_
private

Definition at line 112 of file PixelCPEClusterRepair.h.

Referenced by checkRecommend2D(), and PixelCPEClusterRepair().

std::vector<Rule> PixelCPEClusterRepair::recommend2D_
private

Definition at line 139 of file PixelCPEClusterRepair.h.

Referenced by checkRecommend2D(), and PixelCPEClusterRepair().

bool PixelCPEClusterRepair::runDamagedClusters_
private

Definition at line 142 of file PixelCPEClusterRepair.h.

Referenced by checkRecommend2D(), and PixelCPEClusterRepair().

int PixelCPEClusterRepair::speed_
private

Definition at line 100 of file PixelCPEClusterRepair.h.

Referenced by callTempReco1D(), and PixelCPEClusterRepair().

const SiPixel2DTemplateDBObject* PixelCPEClusterRepair::templateDBobject2D_
private

Definition at line 109 of file PixelCPEClusterRepair.h.

Referenced by fill2DTemplIDs(), and PixelCPEClusterRepair().

std::string PixelCPEClusterRepair::templateDir_
private

Definition at line 107 of file PixelCPEClusterRepair.h.

Referenced by PixelCPEClusterRepair().

std::vector< SiPixelTemplateStore2D > PixelCPEClusterRepair::thePixelTemp2D_
private
std::vector< SiPixelTemplateStore > PixelCPEClusterRepair::thePixelTemp_
private
bool PixelCPEClusterRepair::UseClusterSplitter_
private

Definition at line 102 of file PixelCPEClusterRepair.h.

Referenced by PixelCPEClusterRepair().