CMS 3D CMS Logo

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

#include <RPixClusterToHit.h>

Public Member Functions

void buildHits (unsigned int detId, const std::vector< CTPPSPixelCluster > &clusters, std::vector< CTPPSPixelRecHit > &hits, const PPSPixelTopology &ppt)
 
void make_hit (CTPPSPixelCluster aCluster, std::vector< CTPPSPixelRecHit > &hits, const PPSPixelTopology &ppt)
 
 RPixClusterToHit (edm::ParameterSet const &conf)
 
 ~RPixClusterToHit ()
 

Private Attributes

int verbosity_
 

Detailed Description

Definition at line 15 of file RPixClusterToHit.h.

Constructor & Destructor Documentation

◆ RPixClusterToHit()

RPixClusterToHit::RPixClusterToHit ( edm::ParameterSet const &  conf)

Definition at line 3 of file RPixClusterToHit.cc.

References edm::ParameterSet::getUntrackedParameter(), and verbosity_.

3  {
4  verbosity_ = conf.getUntrackedParameter<int>("RPixVerbosity");
5 }

◆ ~RPixClusterToHit()

RPixClusterToHit::~RPixClusterToHit ( )

Definition at line 7 of file RPixClusterToHit.cc.

7 {}

Member Function Documentation

◆ buildHits()

void RPixClusterToHit::buildHits ( unsigned int  detId,
const std::vector< CTPPSPixelCluster > &  clusters,
std::vector< CTPPSPixelRecHit > &  hits,
const PPSPixelTopology ppt 
)

Definition at line 9 of file RPixClusterToHit.cc.

References bsc_activity_cfg::clusters, hcalRecHitTable_cff::detId, hfClusterShapes_cfi::hits, mps_fire::i, make_hit(), and verbosity_.

Referenced by CTPPSPixelRecHitProducer::run().

12  {
13  if (verbosity_)
14  edm::LogInfo("PPS") << " RPixClusterToHit " << detId << " received cluster array of size = " << clusters.size();
15  for (unsigned int i = 0; i < clusters.size(); i++) {
16  make_hit(clusters[i], hits, ppt);
17  }
18 }
Log< level::Info, false > LogInfo
void make_hit(CTPPSPixelCluster aCluster, std::vector< CTPPSPixelRecHit > &hits, const PPSPixelTopology &ppt)

◆ make_hit()

void RPixClusterToHit::make_hit ( CTPPSPixelCluster  aCluster,
std::vector< CTPPSPixelRecHit > &  hits,
const PPSPixelTopology ppt 
)

Definition at line 20 of file RPixClusterToHit.cc.

References CTPPSPixelCluster::colSpan(), CTPPSPixelIndices::getDefaultColDetSize(), CTPPSPixelIndices::getDefaultRowDetSize(), CTPPSPixelIndices::getROCId(), hfClusterShapes_cfi::hits, mps_fire::i, createfilelist::int, CTPPSPixelCluster::minPixelCol(), CTPPSPixelCluster::minPixelRow(), CTPPSPixelCluster::pixelADC(), CTPPSPixelCluster::pixelCol(), PPSPixelTopology::pixelRange(), CTPPSPixelCluster::pixelRow(), CTPPSPixelCluster::rowSpan(), CTPPSPixelCluster::size(), CTPPSPixelCluster::sizeCol(), CTPPSPixelCluster::sizeRow(), verbosity_, and hltDeepSecondaryVertexTagInfosPFPuppi_cfi::weights.

Referenced by buildHits().

22  {
23  // take a cluster, generate a rec hit and push it in the rec hit vector
24 
25  //call the numbering inside the ROC
26  CTPPSPixelIndices pxlInd;
27  // get information from the cluster
28  // get the whole cluster size and row/col size
29  unsigned int thisClusterSize = aCluster.size();
30  unsigned int thisClusterRowSize = aCluster.sizeRow();
31  unsigned int thisClusterColSize = aCluster.sizeCol();
32 
33  // get the minimum pixel row/col
34  unsigned int thisClusterMinRow = aCluster.minPixelRow();
35  unsigned int thisClusterMinCol = aCluster.minPixelCol();
36 
37  // calculate "on edge" flag
38  bool anEdgePixel = false;
39  if (aCluster.minPixelRow() == 0 || aCluster.minPixelCol() == 0 ||
40  int(aCluster.minPixelRow() + aCluster.rowSpan()) == (pxlInd.getDefaultRowDetSize() - 1) ||
41  int(aCluster.minPixelCol() + aCluster.colSpan()) == (pxlInd.getDefaultColDetSize() - 1))
42  anEdgePixel = true;
43 
44  // check for bad (ADC=0) pixels in cluster
45  bool aBadPixel = false;
46  for (unsigned int i = 0; i < thisClusterSize; i++) {
47  if (aCluster.pixelADC(i) == 0)
48  aBadPixel = true;
49  }
50 
51  // check for spanning two ROCs
52  bool twoRocs = false;
53  int currROCId = pxlInd.getROCId(aCluster.pixelCol(0), aCluster.pixelRow(0));
54 
55  for (unsigned int i = 1; i < thisClusterSize; i++) {
56  if (pxlInd.getROCId(aCluster.pixelCol(i), aCluster.pixelRow(i)) != currROCId) {
57  twoRocs = true;
58  break;
59  }
60  }
61 
62  //estimate position and error of the hit
63  double avgWLocalX = 0;
64  double avgWLocalY = 0;
65  double weights = 0;
66  double weightedVarianceX = 0.;
67  double weightedVarianceY = 0.;
68 
69  if (verbosity_)
70  edm::LogInfo("PPS") << "RPixClusterToHit "
71  << " hit pixels: ";
72 
73  for (unsigned int i = 0; i < thisClusterSize; i++) {
74  if (verbosity_)
75  edm::LogInfo("PPS") << "RPixClusterToHit " << aCluster.pixelRow(i) << " " << aCluster.pixelCol(i) << " "
76  << aCluster.pixelADC(i);
77 
78  double minPxlX = 0;
79  double minPxlY = 0;
80  double maxPxlX = 0;
81  double maxPxlY = 0;
82 
83  ppt.pixelRange(aCluster.pixelRow(i), aCluster.pixelCol(i), minPxlX, maxPxlX, minPxlY, maxPxlY);
84  double halfSizeX = (maxPxlX - minPxlX) / 2.;
85  double halfSizeY = (maxPxlY - minPxlY) / 2.;
86  double avgPxlX = minPxlX + halfSizeX;
87  double avgPxlY = minPxlY + halfSizeY;
88  //error propagation
89  weightedVarianceX += aCluster.pixelADC(i) * aCluster.pixelADC(i) * halfSizeX * halfSizeX / 3.;
90  weightedVarianceY += aCluster.pixelADC(i) * aCluster.pixelADC(i) * halfSizeY * halfSizeY / 3.;
91 
92  avgWLocalX += avgPxlX * aCluster.pixelADC(i);
93  avgWLocalY += avgPxlY * aCluster.pixelADC(i);
94  weights += aCluster.pixelADC(i);
95  }
96 
97  if (weights == 0) {
98  edm::LogError("RPixClusterToHit") << " unexpected weights = 0 for cluster (Row_min, Row_max, Col_min, Col_max) = ("
99  << aCluster.minPixelRow() << "," << aCluster.minPixelRow() + aCluster.rowSpan()
100  << "," << aCluster.minPixelCol() << ","
101  << aCluster.minPixelCol() + aCluster.colSpan() << ")";
102  return;
103  }
104 
105  double invWeights = 1. / weights;
106  double avgLocalX = avgWLocalX * invWeights;
107  double avgLocalY = avgWLocalY * invWeights;
108 
109  double varianceX = weightedVarianceX * invWeights * invWeights;
110  double varianceY = weightedVarianceY * invWeights * invWeights;
111 
112  LocalPoint lp(avgLocalX, avgLocalY, 0);
113  LocalError le(varianceX, 0, varianceY);
114  if (verbosity_)
115  edm::LogInfo("PPS") << "RPixClusterToHit " << lp << " with error " << le;
116 
117  hits.emplace_back(lp,
118  le,
119  anEdgePixel,
120  aBadPixel,
121  twoRocs,
122  thisClusterMinRow,
123  thisClusterMinCol,
124  thisClusterSize,
125  thisClusterRowSize,
126  thisClusterColSize);
127 
128  return;
129 }
unsigned int rowSpan() const
unsigned int pixelRow(unsigned int i) const
unsigned int size() const
Log< level::Error, false > LogError
const std::vector< uint16_t > & pixelADC() const
unsigned int minPixelRow() const
int getDefaultRowDetSize() const
void pixelRange(unsigned int arow, unsigned int acol, double &lower_x, double &higher_x, double &lower_y, double &higher_y) const
Log< level::Info, false > LogInfo
int getROCId(const int col, const int row) const
unsigned int minPixelCol() const
unsigned int pixelCol(unsigned int i) const
int getDefaultColDetSize() const
unsigned int colSpan() const
unsigned int sizeCol() const
unsigned int sizeRow() const

Member Data Documentation

◆ verbosity_

int RPixClusterToHit::verbosity_
private

Definition at line 27 of file RPixClusterToHit.h.

Referenced by buildHits(), make_hit(), and RPixClusterToHit().