CMS 3D CMS Logo

List of all members | Public Member Functions | Private Types | Private Member Functions | Private Attributes | Static Private Attributes
SiPixelChargeReweightingAlgorithm Class Reference

#include <SiPixelChargeReweightingAlgorithm.h>

Public Member Functions

template<class AmplitudeType , typename SignalType >
bool hitSignalReweight (const PSimHit &hit, std::map< int, float, std::less< int > > &hit_signal, const size_t hitIndex, const size_t hitIndex4CR, const unsigned int tofBin, const PixelTopology *topol, uint32_t detID, SignalType &theSignal, unsigned short int processType, const bool &boolmakeDigiSimLinks)
 
void init (const edm::EventSetup &es)
 
template<class AmplitudeType , typename SignalType >
bool lateSignalReweight (const PixelGeomDetUnit *pixdet, std::vector< PixelDigi > &digis, PixelSimHitExtraInfo &loopTempSH, SignalType &theNewDigiSignal, const TrackerTopology *tTopo, CLHEP::HepRandomEngine *engine)
 
 SiPixelChargeReweightingAlgorithm (const edm::ParameterSet &conf, edm::ConsumesCollector iC)
 
 ~SiPixelChargeReweightingAlgorithm ()
 

Private Types

typedef boost::multi_array< float, 2 > array_2d
 
typedef GloballyPositioned< double > Frame
 
typedef std::vector< edm::ParameterSetParameters
 

Private Member Functions

int PixelTempRewgt2D (int id_gen, int id_rewgt, array_2d &cluster)
 
void printCluster (array_2d &cluster)
 
void printCluster (float arr[13+2][21+2])
 
void printCluster (float arr[13][21])
 

Private Attributes

bool applyLateReweighting_
 
const SiPixel2DTemplateDBObjectdbobject_den
 
const SiPixel2DTemplateDBObjectdbobject_num
 
int IDden
 
int IDnum
 
const bool PrintClusters
 
const bool PrintTemplates
 
edm::ESGetToken< SiPixel2DTemplateDBObject, SiPixel2DTemplateDBObjectRcdSiPixel2DTemp_den_token_
 
edm::ESGetToken< SiPixel2DTemplateDBObject, SiPixel2DTemplateDBObjectRcdSiPixel2DTemp_num_token_
 
SiPixelTemplate2D templ2D
 
std::vector< SiPixelTemplateStore2DtemplateStores_
 
std::vector< float > track
 
const bool UseReweighting
 
std::vector< bool > xdouble
 
std::vector< bool > ydouble
 

Static Private Attributes

static constexpr float cmToMicrons = 10000.f
 

Detailed Description

Definition at line 51 of file SiPixelChargeReweightingAlgorithm.h.

Member Typedef Documentation

◆ array_2d

typedef boost::multi_array<float, 2> SiPixelChargeReweightingAlgorithm::array_2d
private

Definition at line 84 of file SiPixelChargeReweightingAlgorithm.h.

◆ Frame

Definition at line 82 of file SiPixelChargeReweightingAlgorithm.h.

◆ Parameters

Definition at line 83 of file SiPixelChargeReweightingAlgorithm.h.

Constructor & Destructor Documentation

◆ SiPixelChargeReweightingAlgorithm()

SiPixelChargeReweightingAlgorithm::SiPixelChargeReweightingAlgorithm ( const edm::ParameterSet conf,
edm::ConsumesCollector  iC 
)
inline

Definition at line 132 of file SiPixelChargeReweightingAlgorithm.h.

References applyLateReweighting_, edm::ConsumesCollector::esConsumes(), LogDebug, SiPixel2DTemp_den_token_, SiPixel2DTemp_num_token_, and UseReweighting.

134  :
135 
137  xdouble(TXSIZE),
138  ydouble(TYSIZE),
139  IDnum(conf.exists("TemplateIDnumerator") ? conf.getParameter<int>("TemplateIDnumerator") : 0),
140  IDden(conf.exists("TemplateIDdenominator") ? conf.getParameter<int>("TemplateIDdenominator") : 0),
141 
142  UseReweighting(conf.getParameter<bool>("UseReweighting")),
143  applyLateReweighting_(conf.exists("applyLateReweighting") ? conf.getParameter<bool>("applyLateReweighting")
144  : false),
145  PrintClusters(conf.exists("PrintClusters") ? conf.getParameter<bool>("PrintClusters") : false),
146  PrintTemplates(conf.exists("PrintTemplates") ? conf.getParameter<bool>("PrintTemplates") : false) {
148  SiPixel2DTemp_den_token_ = iC.esConsumes(edm::ESInputTag("", "denominator"));
149  SiPixel2DTemp_num_token_ = iC.esConsumes(edm::ESInputTag("", "numerator"));
150  }
151  LogDebug("SiPixelChargeReweightingAlgorithm")
152  << "SiPixelChargeReweightingAlgorithm constructed"
153  << " with UseReweighting = " << UseReweighting << " and applyLateReweighting_ = " << applyLateReweighting_;
154 }
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
edm::ESGetToken< SiPixel2DTemplateDBObject, SiPixel2DTemplateDBObjectRcd > SiPixel2DTemp_num_token_
#define TXSIZE
bool exists(std::string const &parameterName) const
checks if a parameter exists
#define TYSIZE
edm::ESGetToken< SiPixel2DTemplateDBObject, SiPixel2DTemplateDBObjectRcd > SiPixel2DTemp_den_token_
std::vector< SiPixelTemplateStore2D > templateStores_
#define LogDebug(id)

◆ ~SiPixelChargeReweightingAlgorithm()

SiPixelChargeReweightingAlgorithm::~SiPixelChargeReweightingAlgorithm ( )
inline

Definition at line 157 of file SiPixelChargeReweightingAlgorithm.h.

References LogDebug.

157  {
158  LogDebug("SiPixelChargeReweightingAlgorithm") << "SiPixelChargeReweightingAlgorithm deleted";
159 }
#define LogDebug(id)

Member Function Documentation

◆ hitSignalReweight()

template<class AmplitudeType , typename SignalType >
bool SiPixelChargeReweightingAlgorithm::hitSignalReweight ( const PSimHit hit,
std::map< int, float, std::less< int > > &  hit_signal,
const size_t  hitIndex,
const size_t  hitIndex4CR,
const unsigned int  tofBin,
const PixelTopology topol,
uint32_t  detID,
SignalType &  theSignal,
unsigned short int  processType,
const bool &  boolmakeDigiSimLinks 
)

Definition at line 163 of file SiPixelChargeReweightingAlgorithm.h.

References funct::abs(), officialStyle::chan, PixelDigi::channelToPixel(), ALCARECOTkAlJpsiMuMu_cff::charge, cmToMicrons, cuy::col, dbobject_den, dbobject_num, SiPixel2DTemplateDBObject::getTemplateID(), IDden, createfilelist::int, PixelTopology::isItBigPixelInX(), PixelTopology::isItBigPixelInY(), Topology::localPosition(), LogDebug, genParticles_cff::map, SiStripPI::max, Topology::measurementPosition(), SiStripPI::min, PixelTopology::ncolumns(), PixelTopology::nrows(), PixelTempRewgt2D(), PixelDigi::pixelToChannel(), printCluster(), PrintClusters, THX, THY, track, TXSIZE, TYSIZE, UseReweighting, PV2DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::x(), hit::x, xdouble, PV2DBase< T, PVType, FrameType >::y(), PV3DBase< T, PVType, FrameType >::y(), hit::y, ydouble, PV3DBase< T, PVType, FrameType >::z(), and hit::z.

172  {
173  int irow_min = topol->nrows();
174  int irow_max = 0;
175  int icol_min = topol->ncolumns();
176  int icol_max = 0;
177 
178  float chargeBefore = 0;
179  float chargeAfter = 0;
180  SignalType hitSignal;
181  LocalVector direction = hit.exitPoint() - hit.entryPoint();
182 
183  for (std::map<int, float, std::less<int> >::const_iterator im = hit_signal.begin(); im != hit_signal.end(); ++im) {
184  int chan = (*im).first;
185  std::pair<int, int> pixelWithCharge = PixelDigi::channelToPixel(chan);
186  if constexpr (std::is_same_v<AmplitudeType, digitizerUtility::Ph2Amplitude>) {
187  hitSignal[chan] += AmplitudeType((*im).second, &hit, (*im).second, 0., hitIndex, tofBin);
188  } else {
189  hitSignal[chan] +=
190  (boolmakeDigiSimLinks ? AmplitudeType((*im).second, &hit, hitIndex, hitIndex4CR, tofBin, (*im).second)
191  : AmplitudeType((*im).second, (*im).second));
192  }
193  chargeBefore += (*im).second;
194 
195  if (pixelWithCharge.first < irow_min)
196  irow_min = pixelWithCharge.first;
197  if (pixelWithCharge.first > irow_max)
198  irow_max = pixelWithCharge.first;
199  if (pixelWithCharge.second < icol_min)
200  icol_min = pixelWithCharge.second;
201  if (pixelWithCharge.second > icol_max)
202  icol_max = pixelWithCharge.second;
203  }
204 
205  LocalPoint hitEntryPoint = hit.entryPoint();
206 
207  float trajectoryScaleToPosition = std::abs(hitEntryPoint.z() / direction.z());
208 
209  LocalPoint hitPosition = hitEntryPoint + trajectoryScaleToPosition * direction;
210 
211  MeasurementPoint hitPositionPixel = topol->measurementPosition(hit.localPosition());
212  std::pair<int, int> hitPixel =
213  std::pair<int, int>(int(floor(hitPositionPixel.x())), int(floor(hitPositionPixel.y())));
214 
215  MeasurementPoint originPixel = MeasurementPoint(hitPixel.first - THX + 0.5, hitPixel.second - THY + 0.5);
216  LocalPoint origin = topol->localPosition(originPixel);
217 
218  MeasurementPoint hitEntryPointPixel = topol->measurementPosition(hit.entryPoint());
219  MeasurementPoint hitExitPointPixel = topol->measurementPosition(hit.exitPoint());
220  std::pair<int, int> entryPixel =
221  std::pair<int, int>(int(floor(hitEntryPointPixel.x())), int(floor(hitEntryPointPixel.y())));
222  std::pair<int, int> exitPixel =
223  std::pair<int, int>(int(floor(hitExitPointPixel.x())), int(floor(hitExitPointPixel.y())));
224 
225  int hitcol_min, hitcol_max, hitrow_min, hitrow_max;
226  if (entryPixel.first > exitPixel.first) {
227  hitrow_min = exitPixel.first;
228  hitrow_max = entryPixel.first;
229  } else {
230  hitrow_min = entryPixel.first;
231  hitrow_max = exitPixel.first;
232  }
233 
234  if (entryPixel.second > exitPixel.second) {
235  hitcol_min = exitPixel.second;
236  hitcol_max = entryPixel.second;
237  } else {
238  hitcol_min = entryPixel.second;
239  hitcol_max = exitPixel.second;
240  }
241 
242  LocalPoint CMSSWhitPosition = hit.localPosition();
243  LogDebug("SiPixelChargeReweightingAlgorithm")
244  << "\n"
245  << "Particle ID is: " << hit.particleType() << "\n"
246  << "Process type: " << hit.processType() << "\n"
247  << "HitPosition:"
248  << "\n"
249  << "Hit entry x/y/z: " << hit.entryPoint().x() << " " << hit.entryPoint().y() << " " << hit.entryPoint().z()
250  << " "
251  << "Hit exit x/y/z: " << hit.exitPoint().x() << " " << hit.exitPoint().y() << " " << hit.exitPoint().z() << " "
252 
253  << "Pixel Pos - X: " << hitPositionPixel.x() << " Y: " << hitPositionPixel.y() << "\n"
254  << "Cart.Cor. - X: " << CMSSWhitPosition.x() << " Y: " << CMSSWhitPosition.y() << "\n"
255  << "Z=0 Pos - X: " << hitPosition.x() << " Y: " << hitPosition.y() << "\n"
256 
257  << "Origin of the template:"
258  << "\n"
259  << "Pixel Pos - X: " << originPixel.x() << " Y: " << originPixel.y() << "\n"
260  << "Cart.Cor. - X: " << origin.x() << " Y: " << origin.y() << "\n"
261  << "\n"
262  << "Entry/Exit:"
263  << "\n"
264  << "Entry - X: " << hit.entryPoint().x() << " Y: " << hit.entryPoint().y() << " Z: " << hit.entryPoint().z()
265  << "\n"
266  << "Exit - X: " << hit.exitPoint().x() << " Y: " << hit.exitPoint().y() << " Z: " << hit.exitPoint().z() << "\n"
267 
268  << "Entry - X Pixel: " << hitEntryPointPixel.x() << " Y Pixel: " << hitEntryPointPixel.y() << "\n"
269  << "Exit - X Pixel: " << hitExitPointPixel.x() << " Y Pixel: " << hitExitPointPixel.y() << "\n"
270 
271  << "row min: " << irow_min << " col min: " << icol_min << "\n";
272 
273  if (!(irow_min <= hitrow_max && irow_max >= hitrow_min && icol_min <= hitcol_max && icol_max >= hitcol_min)) {
274  // The clusters do not have an overlap, hence the hit is NOT reweighted
275  LogDebug("SiPixelChargeReweightingAlgorithm") << "Outside the row/col boundary, exit charge reweighting";
276  return false;
277  }
278 
279  track[0] = (hitPosition.x() - origin.x()) * cmToMicrons;
280  track[1] = (hitPosition.y() - origin.y()) * cmToMicrons;
281  track[2] = 0.0f; //Middle of sensor is origin for Z-axis
282  track[3] = direction.x();
283  track[4] = direction.y();
284  track[5] = direction.z();
285 
286  LogDebug("SiPixelChargeReweightingAlgorithm") << "Init array of size x = " << TXSIZE << " and y = " << TYSIZE;
287  array_2d pixrewgt(boost::extents[TXSIZE][TYSIZE]);
288 
289  for (int row = 0; row < TXSIZE; ++row) {
290  for (int col = 0; col < TYSIZE; ++col) {
291  pixrewgt[row][col] = 0;
292  }
293  }
294 
295  for (int row = 0; row < TXSIZE; ++row) {
296  xdouble[row] = topol->isItBigPixelInX(hitPixel.first + row - THX);
297  }
298 
299  for (int col = 0; col < TYSIZE; ++col) {
300  ydouble[col] = topol->isItBigPixelInY(hitPixel.second + col - THY);
301  }
302 
303  // define loop boundaries that will prevent the row and col loops
304  // from going out of physical bounds of the pixel module
305  int rowmin = std::max(0, THX - hitPixel.first);
306  int rowmax = std::min(TXSIZE, topol->nrows() + THX - hitPixel.first);
307  int colmin = std::max(0, THY - hitPixel.second);
308  int colmax = std::min(TYSIZE, topol->ncolumns() + THY - hitPixel.second);
309 
310  for (int row = rowmin; row < rowmax; ++row) {
311  for (int col = colmin; col < colmax; ++col) {
312  //Fill charges into 21x13 Pixel Array with hitPixel in centre
313  pixrewgt[row][col] =
314  hitSignal[PixelDigi::pixelToChannel(hitPixel.first + row - THX, hitPixel.second + col - THY)];
315  }
316  }
317 
318  if (PrintClusters) {
319  LogDebug("SiPixelChargeReweightingAlgorithm ") << "Cluster before reweighting: ";
320  printCluster(pixrewgt);
321  }
322 
323  int ierr;
324  // for unirradiated: 2nd argument is IDden
325  // for irradiated: 2nd argument is IDnum
326  if (UseReweighting == true) {
327  int ID1 = dbobject_num->getTemplateID(detID);
328  int ID0 = dbobject_den->getTemplateID(detID);
329 
330  if (ID0 == ID1) {
331  return false;
332  }
333  ierr = PixelTempRewgt2D(ID0, ID1, pixrewgt);
334  } else {
335  ierr = PixelTempRewgt2D(IDden, IDden, pixrewgt);
336  }
337  if (ierr != 0) {
338  LogDebug("SiPixelChargeReweightingAlgorithm ") << "Cluster Charge Reweighting did not work properly.";
339  return false;
340  }
341 
342  if (PrintClusters) {
343  LogDebug("SiPixelChargeReweightingAlgorithm ") << "Cluster after reweighting: ";
344  printCluster(pixrewgt);
345  }
346 
347  for (int row = rowmin; row < rowmax; ++row) {
348  for (int col = colmin; col < colmax; ++col) {
349  float charge = pixrewgt[row][col];
350  if (charge > 0) {
351  chargeAfter += charge;
352  if constexpr (std::is_same_v<AmplitudeType, digitizerUtility::Ph2Amplitude>) {
353  theSignal[PixelDigi::pixelToChannel(hitPixel.first + row - THX, hitPixel.second + col - THY)] +=
354  AmplitudeType(charge, &hit, charge, 0., hitIndex, tofBin);
355  } else {
356  theSignal[PixelDigi::pixelToChannel(hitPixel.first + row - THX, hitPixel.second + col - THY)] +=
357  (boolmakeDigiSimLinks ? AmplitudeType(charge, &hit, hitIndex, hitIndex4CR, tofBin, charge)
358  : AmplitudeType(charge, charge));
359  }
360  }
361  }
362  }
363 
364  if (chargeBefore != 0. && chargeAfter == 0.) {
365  return false;
366  }
367 
368  if (PrintClusters) {
369  LogDebug("SiPixelChargeReweightingAlgorithm ")
370  << "Charges (before->after): " << chargeBefore << " -> " << chargeAfter;
371  LogDebug("SiPixelChargeReweightingAlgorithm ")
372  << "Charge loss: " << (1 - chargeAfter / chargeBefore) * 100 << " % \n";
373  }
374 
375  return true;
376 }
static std::pair< int, int > channelToPixel(int ch)
Definition: PixelDigi.h:69
virtual LocalPoint localPosition(const MeasurementPoint &) const =0
virtual int ncolumns() const =0
T z() const
Definition: PV3DBase.h:61
#define TXSIZE
virtual int nrows() const =0
const SiPixel2DTemplateDBObject * dbobject_den
T x() const
Definition: PV2DBase.h:43
#define THX
static int pixelToChannel(int row, int col)
Definition: PixelDigi.h:75
T y() const
Definition: PV2DBase.h:44
U second(std::pair< T, U > const &p)
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
Measurement2DPoint MeasurementPoint
Measurement points are two-dimensional by default.
virtual bool isItBigPixelInX(int ixbin) const =0
virtual bool isItBigPixelInY(int iybin) const =0
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
virtual MeasurementPoint measurementPosition(const LocalPoint &) const =0
#define THY
boost::multi_array< float, 2 > array_2d
const SiPixel2DTemplateDBObject * dbobject_num
int PixelTempRewgt2D(int id_gen, int id_rewgt, array_2d &cluster)
#define TYSIZE
chan
lumi = TPaveText(lowX+0.38, lowY+0.061, lowX+0.45, lowY+0.161, "NDC") lumi.SetBorderSize( 0 ) lumi...
short getTemplateID(const uint32_t &detid) const
col
Definition: cuy.py:1009
#define LogDebug(id)

◆ init()

void SiPixelChargeReweightingAlgorithm::init ( const edm::EventSetup es)
inline

Definition at line 114 of file SiPixelChargeReweightingAlgorithm.h.

References applyLateReweighting_, dbobject_den, dbobject_num, edm::EventSetup::getData(), LogDebug, SiPixel2DTemplateDBObject::numOfTempl(), SiPixelTemplate2D::pushfile(), SiPixel2DTemp_den_token_, SiPixel2DTemp_num_token_, templateStores_, track, and UseReweighting.

114  {
115  // Read template files for charge reweighting
119 
120  int numOfTemplates = dbobject_den->numOfTempl() + dbobject_num->numOfTempl();
121  templateStores_.reserve(numOfTemplates);
124 
125  track.resize(6);
126  LogDebug("SiPixelChargeReweightingAlgorithm") << "Init SiPixelChargeReweightingAlgorithm";
127  }
128 }
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
edm::ESGetToken< SiPixel2DTemplateDBObject, SiPixel2DTemplateDBObjectRcd > SiPixel2DTemp_num_token_
const SiPixel2DTemplateDBObject * dbobject_den
const SiPixel2DTemplateDBObject * dbobject_num
edm::ESGetToken< SiPixel2DTemplateDBObject, SiPixel2DTemplateDBObjectRcd > SiPixel2DTemp_den_token_
std::vector< SiPixelTemplateStore2D > templateStores_
static bool pushfile(int filenum, std::vector< SiPixelTemplateStore2D > &pixelTemp, std::string dir="CalibTracker/SiPixelESProducers/data/")
#define LogDebug(id)

◆ lateSignalReweight()

template<class AmplitudeType , typename SignalType >
bool SiPixelChargeReweightingAlgorithm::lateSignalReweight ( const PixelGeomDetUnit pixdet,
std::vector< PixelDigi > &  digis,
PixelSimHitExtraInfo loopTempSH,
SignalType &  theNewDigiSignal,
const TrackerTopology tTopo,
CLHEP::HepRandomEngine *  engine 
)

Definition at line 637 of file SiPixelChargeReweightingAlgorithm.h.

References funct::abs(), officialStyle::chan, PixelDigi::channelToPixel(), ALCARECOTkAlJpsiMuMu_cff::charge, cmToMicrons, cuy::col, dbobject_den, dbobject_num, PixelSimHitExtraInfo::entryPoint(), PixelSimHitExtraInfo::exitPoint(), GeomDet::geographicalId(), SiPixel2DTemplateDBObject::getTemplateID(), mps_fire::i, createfilelist::int, PixelSimHitExtraInfo::isInTheList(), PixelTopology::isItBigPixelInX(), PixelTopology::isItBigPixelInY(), Topology::localPosition(), LogDebug, Topology::measurementPosition(), PixelTopology::ncolumns(), PixelTopology::nrows(), PixelTempRewgt2D(), PixelDigi::pixelToChannel(), printCluster(), PrintClusters, DetId::rawId(), PixelGeomDetUnit::specificTopology(), THX, THY, track, TXSIZE, TYSIZE, UseReweighting, PV2DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::x(), xdouble, PV2DBase< T, PVType, FrameType >::y(), PV3DBase< T, PVType, FrameType >::y(), ydouble, and PV3DBase< T, PVType, FrameType >::z().

642  {
643  uint32_t detID = pixdet->geographicalId().rawId();
644  const PixelTopology* topol = &pixdet->specificTopology();
645 
646  if (UseReweighting) {
647  edm::LogError("SiPixelChargeReweightingAlgorithm") << " ******************************** \n";
648  edm::LogError("SiPixelChargeReweightingAlgorithm") << " ******************************** \n";
649  edm::LogError("SiPixelChargeReweightingAlgorithm") << " ******************************** \n";
650  edm::LogError("SiPixelChargeReweightingAlgorithm") << " ***** INCONSISTENCY !!! ***** \n";
651  edm::LogError("SiPixelChargeReweightingAlgorithm")
652  << " applyLateReweighting_ and UseReweighting can not be true at the same time for PU ! \n";
653  edm::LogError("SiPixelChargeReweightingAlgorithm") << " ---> DO NOT APPLY CHARGE REWEIGHTING TWICE !!! \n";
654  edm::LogError("SiPixelChargeReweightingAlgorithm") << " ******************************** \n";
655  edm::LogError("SiPixelChargeReweightingAlgorithm") << " ******************************** \n";
656  return false;
657  }
658 
659  SignalType theDigiSignal;
660 
661  int irow_min = topol->nrows();
662  int irow_max = 0;
663  int icol_min = topol->ncolumns();
664  int icol_max = 0;
665 
666  float chargeBefore = 0;
667  float chargeAfter = 0;
668 
669  //loop on digis
670  std::vector<PixelDigi>::const_iterator loopDigi;
671  for (loopDigi = digis.begin(); loopDigi != digis.end(); ++loopDigi) {
672  unsigned int chan = loopDigi->channel();
673  if (loopTempSH.isInTheList(chan)) {
674  float corresponding_charge = loopDigi->adc();
675  if constexpr (std::is_same_v<AmplitudeType, digitizerUtility::Ph2Amplitude>) {
676  edm::LogError("SiPixelChargeReweightingAlgorithm")
677  << "Phase-2 late charge reweighting not supported (not sure we need it at all)";
678  return false;
679  } else {
680  theDigiSignal[chan] += AmplitudeType(corresponding_charge, corresponding_charge);
681  }
682  chargeBefore += corresponding_charge;
683  if (loopDigi->row() < irow_min)
684  irow_min = loopDigi->row();
685  if (loopDigi->row() > irow_max)
686  irow_max = loopDigi->row();
687  if (loopDigi->column() < icol_min)
688  icol_min = loopDigi->column();
689  if (loopDigi->column() > icol_max)
690  icol_max = loopDigi->column();
691  }
692  }
693  // end loop on digis
694 
695  LocalVector direction = loopTempSH.exitPoint() - loopTempSH.entryPoint();
696  LocalPoint hitEntryPoint = loopTempSH.entryPoint();
697  float trajectoryScaleToPosition = std::abs(hitEntryPoint.z() / direction.z());
698  LocalPoint hitPosition = hitEntryPoint + trajectoryScaleToPosition * direction;
699 
700  // addition as now the hit himself is not available
701  // https://github.com/cms-sw/cmssw/blob/master/SimDataFormats/TrackingHit/interface/PSimHit.h#L52
702  LocalPoint hitLocalPosition = hitEntryPoint + 0.5 * direction;
703  MeasurementPoint hitPositionPixel = topol->measurementPosition(hitLocalPosition);
704  std::pair<int, int> hitPixel =
705  std::pair<int, int>(int(floor(hitPositionPixel.x())), int(floor(hitPositionPixel.y())));
706 
707  MeasurementPoint originPixel = MeasurementPoint(hitPixel.first - THX + 0.5, hitPixel.second - THY + 0.5);
708  LocalPoint origin = topol->localPosition(originPixel);
709 
710  MeasurementPoint hitEntryPointPixel = topol->measurementPosition(loopTempSH.entryPoint());
711  MeasurementPoint hitExitPointPixel = topol->measurementPosition(loopTempSH.exitPoint());
712  std::pair<int, int> entryPixel =
713  std::pair<int, int>(int(floor(hitEntryPointPixel.x())), int(floor(hitEntryPointPixel.y())));
714  std::pair<int, int> exitPixel =
715  std::pair<int, int>(int(floor(hitExitPointPixel.x())), int(floor(hitExitPointPixel.y())));
716 
717  int hitcol_min, hitcol_max, hitrow_min, hitrow_max;
718  if (entryPixel.first > exitPixel.first) {
719  hitrow_min = exitPixel.first;
720  hitrow_max = entryPixel.first;
721  } else {
722  hitrow_min = entryPixel.first;
723  hitrow_max = exitPixel.first;
724  }
725 
726  if (entryPixel.second > exitPixel.second) {
727  hitcol_min = exitPixel.second;
728  hitcol_max = entryPixel.second;
729  } else {
730  hitcol_min = entryPixel.second;
731  hitcol_max = exitPixel.second;
732  }
733 
734  if (!(irow_min <= hitrow_max && irow_max >= hitrow_min && icol_min <= hitcol_max && icol_max >= hitcol_min)) {
735  // The clusters do not have an overlap, hence the hit is NOT reweighted
736  return false;
737  }
738 
739  track[0] = (hitPosition.x() - origin.x()) * cmToMicrons;
740  track[1] = (hitPosition.y() - origin.y()) * cmToMicrons;
741  track[2] = 0.0f; //Middle of sensor is origin for Z-axis
742  track[3] = direction.x();
743  track[4] = direction.y();
744  track[5] = direction.z();
745 
746  array_2d pixrewgt(boost::extents[TXSIZE][TYSIZE]);
747 
748  /*
749  for (int row = 0; row < TXSIZE; ++row) {
750  for (int col = 0; col < TYSIZE; ++col) {
751  pixrewgt[row][col] = 0;
752  }
753  }
754 */
755 
756  for (int row = 0; row < TXSIZE; ++row) {
757  xdouble[row] = topol->isItBigPixelInX(hitPixel.first + row - THX);
758  }
759 
760  for (int col = 0; col < TYSIZE; ++col) {
761  ydouble[col] = topol->isItBigPixelInY(hitPixel.second + col - THY);
762  }
763 
764  for (int row = 0; row < TXSIZE; ++row) {
765  for (int col = 0; col < TYSIZE; ++col) {
766  //Fill charges into 21x13 Pixel Array with hitPixel in centre
767  pixrewgt[row][col] =
768  theDigiSignal[PixelDigi::pixelToChannel(hitPixel.first + row - THX, hitPixel.second + col - THY)];
769  }
770  }
771 
772  if (PrintClusters) {
773  LogDebug("SiPixelChargeReweightingAlgorithm") << " Cluster before reweighting: ";
774  printCluster(pixrewgt);
775  }
776 
777  int ierr;
778  // for unirradiated: 2nd argument is IDden
779  // for irradiated: 2nd argument is IDnum
780  int ID1 = dbobject_num->getTemplateID(detID);
781  int ID0 = dbobject_den->getTemplateID(detID);
782 
783  if (ID0 == ID1) {
784  LogDebug("SiPixelChargeReweightingAlgorithm") << " same template for num and den ";
785  return false;
786  }
787  ierr = PixelTempRewgt2D(ID0, ID1, pixrewgt);
788  if (ierr != 0) {
789  edm::LogError("SiPixelChargeReweightingAlgorithm") << "Cluster Charge Reweighting did not work properly.";
790  return false;
791  }
792  if (PrintClusters) {
793  LogDebug("SiPixelChargeReweightingAlgorithm") << " Cluster after reweighting: ";
794  printCluster(pixrewgt);
795  }
796 
797  for (int row = 0; row < TXSIZE; ++row) {
798  for (int col = 0; col < TYSIZE; ++col) {
799  float charge = 0;
800  charge = pixrewgt[row][col];
801  if ((hitPixel.first + row - THX) >= 0 && (hitPixel.first + row - THX) < topol->nrows() &&
802  (hitPixel.second + col - THY) >= 0 && (hitPixel.second + col - THY) < topol->ncolumns() && charge > 0) {
803  chargeAfter += charge;
804  if constexpr (std::is_same_v<AmplitudeType, digitizerUtility::Ph2Amplitude>) {
805  edm::LogError("SiPixelChargeReweightingAlgorithm")
806  << "Phase-2 late charge reweighting not supported (not sure we need it at all)";
807  return false;
808  } else {
809  theNewDigiSignal[PixelDigi::pixelToChannel(hitPixel.first + row - THX, hitPixel.second + col - THY)] +=
810  AmplitudeType(charge, charge);
811  }
812  }
813  }
814  }
815 
816  if (chargeBefore != 0. && chargeAfter == 0.) {
817  return false;
818  }
819 
820  if (PrintClusters) {
821  LogDebug("SiPixelChargeReweightingAlgorithm")
822  << "Charges (before->after): " << chargeBefore << " -> " << chargeAfter;
823  LogDebug("SiPixelChargeReweightingAlgorithm") << "Charge loss: " << (1 - chargeAfter / chargeBefore) * 100 << " %";
824  }
825 
826  // need to store the digi out of the 21x13 box.
827  for (auto& i : theDigiSignal) {
828  // check if in the 21x13 box
829  int chanDigi = i.first;
830  std::pair<int, int> ip = PixelDigi::channelToPixel(chanDigi);
831  int row_digi = ip.first;
832  int col_digi = ip.second;
833  int i_transformed_row = row_digi - hitPixel.first + THX;
834  int i_transformed_col = col_digi - hitPixel.second + THY;
835  if (i_transformed_row < 0 || i_transformed_row > TXSIZE || i_transformed_col < 0 || i_transformed_col > TYSIZE) {
836  // not in the box
837  if (chanDigi >= 0 && i.second > 0) {
838  if constexpr (std::is_same_v<AmplitudeType, digitizerUtility::Ph2Amplitude>) {
839  edm::LogError("SiPixelChargeReweightingAlgorithm")
840  << "Phase-2 late charge reweighting not supported (not sure we need it at all)";
841  return false;
842  } else {
843  theNewDigiSignal[chanDigi] += AmplitudeType(i.second, i.second);
844  }
845  }
846  }
847  }
848 
849  return true;
850 }
static std::pair< int, int > channelToPixel(int ch)
Definition: PixelDigi.h:69
virtual LocalPoint localPosition(const MeasurementPoint &) const =0
virtual int ncolumns() const =0
T z() const
Definition: PV3DBase.h:61
#define TXSIZE
virtual int nrows() const =0
const SiPixel2DTemplateDBObject * dbobject_den
T x() const
Definition: PV2DBase.h:43
Log< level::Error, false > LogError
#define THX
static int pixelToChannel(int row, int col)
Definition: PixelDigi.h:75
T y() const
Definition: PV2DBase.h:44
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
Measurement2DPoint MeasurementPoint
Measurement points are two-dimensional by default.
bool isInTheList(unsigned int channelToCheck)
virtual bool isItBigPixelInX(int ixbin) const =0
const Local3DPoint & entryPoint() const
virtual bool isItBigPixelInY(int iybin) const =0
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
virtual MeasurementPoint measurementPosition(const LocalPoint &) const =0
#define THY
DetId geographicalId() const
The label of this GeomDet.
Definition: GeomDet.h:64
boost::multi_array< float, 2 > array_2d
const SiPixel2DTemplateDBObject * dbobject_num
int PixelTempRewgt2D(int id_gen, int id_rewgt, array_2d &cluster)
#define TYSIZE
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
chan
lumi = TPaveText(lowX+0.38, lowY+0.061, lowX+0.45, lowY+0.161, "NDC") lumi.SetBorderSize( 0 ) lumi...
short getTemplateID(const uint32_t &detid) const
virtual const PixelTopology & specificTopology() const
Returns a reference to the pixel proxy topology.
col
Definition: cuy.py:1009
const Local3DPoint & exitPoint() const
#define LogDebug(id)

◆ PixelTempRewgt2D()

int SiPixelChargeReweightingAlgorithm::PixelTempRewgt2D ( int  id_in,
int  id_rewgt,
array_2d cluster 
)
inlineprivate

Reweight CMSSW clusters to look like clusters corresponding to Pixelav Templates.

Parameters
id_in- (input) identifier of the template corresponding to the input events
id_rewgt- (input) identifier of the template corresponding to the output events
cluster- (input/output) boost multi_array container of 7x21 array of pixel signals, origin of local coords (0,0) at center of pixel cluster[3][10]. returns 0 if everything is OK, 1 if angles are outside template coverage (cluster is probably still usable, > 1 if something is wrong (no reweight done).

Definition at line 387 of file SiPixelChargeReweightingAlgorithm.h.

References funct::abs(), BXM2, BYM2, f, SiPixelTemplate2D::getid(), mps_fire::i, createfilelist::int, dqmiolumiharvest::j, dqmdumpme::k, cmsLHEtoEOSManager::l, LogDebug, printCluster(), PrintTemplates, SiPixelTemplate2D::s50(), summarizeEdmComparisonLogfiles::success, templ2D, track, TXSIZE, TYSIZE, xdouble, xsize, SiPixelTemplate2D::xsize(), SiPixelTemplate2D::xytemp(), ydouble, ysize, and SiPixelTemplate2D::ysize().

Referenced by hitSignalReweight(), and lateSignalReweight().

387  {
388  // Local variables
389  int i, j, k, l, kclose;
390  int nclusx, nclusy, success;
391  float xsize, ysize, q50i, q100i, q50r, q10r, q100r, xhit2D, yhit2D, qclust, dist2, dmin2;
392  float xy_in[BXM2][BYM2], xy_rewgt[BXM2][BYM2], xy_clust[TXSIZE][TYSIZE];
393  int denx_clust[TXSIZE][TYSIZE], deny_clust[TXSIZE][TYSIZE];
394  int goodWeightsUsed, nearbyWeightsUsed, noWeightsUsed;
395  float cotalpha, cotbeta;
396  // success = 0 is returned if everthing is OK
397  success = 0;
398 
399  // Copy the array to remember original charges
400  array_2d clust(cluster);
401 
402  // Take the pixel dimensions from the 2D template
403  templ2D.getid(id_in);
404  xsize = templ2D.xsize();
405  ysize = templ2D.ysize();
406 
407  // Calculate the track angles
408 
409  if (std::abs(track[5]) > 0.f) {
410  cotalpha = track[3] / track[5]; //if track[5] (direction in z) is 0 the hit is not processed by re-weighting
411  cotbeta = track[4] / track[5];
412  } else {
413  LogDebug("SiPixelChargeReweightingAlgorithm") << "Reweighting angle is not good! \n";
414  return 9; //returned value here indicates that no reweighting was done in this case
415  }
416 
417  // The 2-D templates are defined on a shifted coordinate system wrt the 1D templates
418  if (ydouble[0]) {
419  yhit2D = track[1] - cotbeta * track[2] + ysize;
420  } else {
421  yhit2D = track[1] - cotbeta * track[2] + 0.5f * ysize;
422  }
423  if (xdouble[0]) {
424  xhit2D = track[0] - cotalpha * track[2] + xsize;
425  } else {
426  xhit2D = track[0] - cotalpha * track[2] + 0.5f * xsize;
427  }
428 
429  // Zero the input and output templates
430  for (i = 0; i < BYM2; ++i) {
431  for (j = 0; j < BXM2; ++j) {
432  xy_in[j][i] = 0.f;
433  xy_rewgt[j][i] = 0.f;
434  }
435  }
436 
437  // Next, interpolate the CMSSW template needed to analyze this cluster
438 
439  if (!templ2D.xytemp(id_in, cotalpha, cotbeta, xhit2D, yhit2D, ydouble, xdouble, xy_in)) {
440  success = 1;
441  }
442  if (success != 0) {
443  LogDebug("SiPixelChargeReweightingAlgorithm") << "No matching template found \n";
444  return 2;
445  }
446 
447  if (PrintTemplates) {
448  LogDebug("SiPixelChargeReweightingAlgorithm") << "Template unirrad: \n";
449  printCluster(xy_in);
450  }
451 
452  q50i = templ2D.s50();
453  //q50i = 0;
454  q100i = 2.f * q50i;
455 
456  // Check that the cluster container is a 13x21 matrix
457 
458  if (cluster.num_dimensions() != 2) {
459  edm::LogWarning("SiPixelChargeReweightingAlgorithm") << "Cluster is not 2-dimensional. Return. \n";
460  return 3;
461  }
462  nclusx = (int)cluster.shape()[0];
463  nclusy = (int)cluster.shape()[1];
464  if (nclusx != TXSIZE || xdouble.size() != TXSIZE) {
465  edm::LogWarning("SiPixelChargeReweightingAlgorithm")
466  << "Sizes in x do not match: nclusx=" << nclusx << " xdoubleSize=" << xdouble.size() << " TXSIZE=" << TXSIZE
467  << ". Return. \n";
468  return 4;
469  }
470  if (nclusy != TYSIZE || ydouble.size() != TYSIZE) {
471  edm::LogWarning("SiPixelChargeReweightingAlgorithm") << "Sizes in y do not match. Return. \n";
472  return 5;
473  }
474 
475  // Sum initial charge in the cluster
476 
477  qclust = 0.f;
478  for (i = 0; i < TYSIZE; ++i) {
479  for (j = 0; j < TXSIZE; ++j) {
480  xy_clust[j][i] = 0.f;
481  denx_clust[j][i] = 0;
482  deny_clust[j][i] = 0;
483  if (cluster[j][i] > q100i) {
484  qclust += cluster[j][i];
485  }
486  }
487  }
488 
489  // Next, interpolate the physical output template needed to reweight
490 
491  if (!templ2D.xytemp(id_rewgt, cotalpha, cotbeta, xhit2D, yhit2D, ydouble, xdouble, xy_rewgt)) {
492  success = 1;
493  }
494 
495  if (PrintTemplates) {
496  LogDebug("SiPixelChargeReweightingAlgorithm") << "Template irrad: \n";
497  printCluster(xy_rewgt);
498  }
499 
500  q50r = templ2D.s50();
501  q100r = 2.f * q50r;
502  q10r = 0.2f * q50r;
503 
504  // Find all non-zero denominator pixels in the input template and generate "inside" weights
505 
506  int ntpix = 0;
507  int ncpix = 0;
508  std::vector<int> ytclust;
509  std::vector<int> xtclust;
510  std::vector<int> ycclust;
511  std::vector<int> xcclust;
512  qclust = 0.f;
513  for (i = 0; i < TYSIZE; ++i) {
514  for (j = 0; j < TXSIZE; ++j) {
515  if (xy_in[j + 1][i + 1] > q100i) {
516  ++ntpix;
517  ytclust.push_back(i);
518  xtclust.push_back(j);
519  xy_clust[j][i] = xy_rewgt[j + 1][i + 1] / xy_in[j + 1][i + 1];
520  denx_clust[j][i] = j;
521  deny_clust[j][i] = i;
522  }
523  }
524  }
525 
526  // Find all non-zero numerator pixels not matched to denominator in the output template and generate "inside" weights
527 
528  for (i = 0; i < TYSIZE; ++i) {
529  for (j = 0; j < TXSIZE; ++j) {
530  if (xy_rewgt[j + 1][i + 1] > q10r && xy_clust[j][i] == 0.f && ntpix > 0) {
531  // Search for nearest denominator pixel
532  dmin2 = 10000.f;
533  kclose = 0;
534  for (k = 0; k < ntpix; ++k) {
535  dist2 = (i - ytclust[k]) * (i - ytclust[k]) + 0.44444f * (j - xtclust[k]) * (j - xtclust[k]);
536  if (dist2 < dmin2) {
537  dmin2 = dist2;
538  kclose = k;
539  }
540  }
541  xy_clust[j][i] = xy_rewgt[j + 1][i + 1] / xy_in[xtclust[kclose] + 1][ytclust[kclose] + 1];
542  denx_clust[j][i] = xtclust[kclose];
543  deny_clust[j][i] = ytclust[kclose];
544  }
545  }
546  }
547 
548  if (PrintTemplates) {
549  LogDebug("SiPixelChargeReweightingAlgorithm") << "Weights: \n";
550  printCluster(xy_clust);
551  }
552 
553  // Do the reweighting
554  goodWeightsUsed = 0;
555  nearbyWeightsUsed = 0;
556  noWeightsUsed = 0;
557 
558  for (i = 0; i < TYSIZE; ++i) {
559  for (j = 0; j < TXSIZE; ++j) {
560  if (xy_clust[j][i] > 0.f) {
561  cluster[j][i] = xy_clust[j][i] * clust[denx_clust[j][i]][deny_clust[j][i]];
562  if (cluster[j][i] > q100r) {
563  qclust += cluster[j][i];
564  }
565  if (cluster[j][i] > 0) {
566  goodWeightsUsed++;
567  }
568  } else {
569  if (clust[j][i] > 0.f) {
570  ++ncpix;
571  ycclust.push_back(i);
572  xcclust.push_back(j);
573  }
574  }
575  }
576  }
577 
578  // Now reweight pixels outside of template footprint using closest weights
579 
580  if (ncpix > 0) {
581  for (l = 0; l < ncpix; ++l) {
582  i = ycclust[l];
583  j = xcclust[l];
584  dmin2 = 10000.f;
585  kclose = 0;
586  for (k = 0; k < ntpix; ++k) {
587  dist2 = (i - ytclust[k]) * (i - ytclust[k]) + 0.44444f * (j - xtclust[k]) * (j - xtclust[k]);
588  if (dist2 < dmin2) {
589  dmin2 = dist2;
590  kclose = k;
591  }
592  }
593  if (dmin2 < 5.f) {
594  nearbyWeightsUsed++;
595  cluster[j][i] *= xy_clust[xtclust[kclose]][ytclust[kclose]];
596  if (cluster[j][i] > q100r) {
597  qclust += cluster[j][i];
598  }
599  } else {
600  noWeightsUsed++;
601  cluster[j][i] = 0.f;
602  }
603  }
604  }
605 
606  return success;
607 } // PixelTempRewgt2D
float xsize()
pixel x-size (microns)
bool xytemp(float xhit, float yhit, bool ydouble[21+2], bool xdouble[13+2], float template2d[13+2][21+2], bool dervatives, float dpdx2d[2][13+2][21+2], float &QTemplate)
#define TXSIZE
const Int_t ysize
float s50()
1/2 of the pixel threshold signal in adc units
#define BXM2
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
#define BYM2
double f[11][100]
boost::multi_array< float, 2 > array_2d
#define TYSIZE
float ysize()
pixel y-size (microns)
Log< level::Warning, false > LogWarning
const Int_t xsize
#define LogDebug(id)

◆ printCluster() [1/3]

void SiPixelChargeReweightingAlgorithm::printCluster ( array_2d cluster)
inlineprivate

Definition at line 609 of file SiPixelChargeReweightingAlgorithm.h.

References cuy::col, LogDebug, TXSIZE, and TYSIZE.

Referenced by hitSignalReweight(), lateSignalReweight(), and PixelTempRewgt2D().

609  {
610  for (int col = 0; col < TYSIZE; ++col) {
611  for (int row = 0; row < TXSIZE; ++row) {
612  LogDebug("SiPixelChargeReweightingAlgorithm") << cluster[row][col];
613  }
614  LogDebug("SiPixelChargeReweightingAlgorithm") << "\n";
615  }
616 }
#define TXSIZE
#define TYSIZE
col
Definition: cuy.py:1009
#define LogDebug(id)

◆ printCluster() [2/3]

void SiPixelChargeReweightingAlgorithm::printCluster ( float  arr[13+2][21+2])
inlineprivate

Definition at line 618 of file SiPixelChargeReweightingAlgorithm.h.

References BXM2, BYM2, cuy::col, and LogDebug.

618  {
619  for (int col = 0; col < BYM2; ++col) {
620  for (int row = 0; row < BXM2; ++row) {
621  LogDebug("SiPixelChargeReweightingAlgorithm") << arr[row][col];
622  }
623  LogDebug("SiPixelChargeReweightingAlgorithm") << "\n";
624  }
625 }
#define BXM2
#define BYM2
col
Definition: cuy.py:1009
#define LogDebug(id)

◆ printCluster() [3/3]

void SiPixelChargeReweightingAlgorithm::printCluster ( float  arr[13][21])
inlineprivate

Definition at line 627 of file SiPixelChargeReweightingAlgorithm.h.

References cuy::col, LogDebug, TXSIZE, and TYSIZE.

627  {
628  for (int col = 0; col < TYSIZE; ++col) {
629  for (int row = 0; row < TXSIZE; ++row) {
630  LogDebug("SiPixelChargeReweightingAlgorithm") << arr[row][col];
631  }
632  LogDebug("SiPixelChargeReweightingAlgorithm") << "\n";
633  }
634 }
#define TXSIZE
#define TYSIZE
col
Definition: cuy.py:1009
#define LogDebug(id)

Member Data Documentation

◆ applyLateReweighting_

bool SiPixelChargeReweightingAlgorithm::applyLateReweighting_
private

Definition at line 96 of file SiPixelChargeReweightingAlgorithm.h.

Referenced by init(), and SiPixelChargeReweightingAlgorithm().

◆ cmToMicrons

constexpr float SiPixelChargeReweightingAlgorithm::cmToMicrons = 10000.f
staticprivate

Definition at line 100 of file SiPixelChargeReweightingAlgorithm.h.

Referenced by hitSignalReweight(), and lateSignalReweight().

◆ dbobject_den

const SiPixel2DTemplateDBObject* SiPixelChargeReweightingAlgorithm::dbobject_den
private

◆ dbobject_num

const SiPixel2DTemplateDBObject* SiPixelChargeReweightingAlgorithm::dbobject_num
private

◆ IDden

int SiPixelChargeReweightingAlgorithm::IDden
private

Definition at line 93 of file SiPixelChargeReweightingAlgorithm.h.

Referenced by hitSignalReweight().

◆ IDnum

int SiPixelChargeReweightingAlgorithm::IDnum
private

Definition at line 93 of file SiPixelChargeReweightingAlgorithm.h.

◆ PrintClusters

const bool SiPixelChargeReweightingAlgorithm::PrintClusters
private

Definition at line 97 of file SiPixelChargeReweightingAlgorithm.h.

Referenced by hitSignalReweight(), and lateSignalReweight().

◆ PrintTemplates

const bool SiPixelChargeReweightingAlgorithm::PrintTemplates
private

Definition at line 98 of file SiPixelChargeReweightingAlgorithm.h.

Referenced by PixelTempRewgt2D().

◆ SiPixel2DTemp_den_token_

edm::ESGetToken<SiPixel2DTemplateDBObject, SiPixel2DTemplateDBObjectRcd> SiPixelChargeReweightingAlgorithm::SiPixel2DTemp_den_token_
private

Definition at line 102 of file SiPixelChargeReweightingAlgorithm.h.

Referenced by init(), and SiPixelChargeReweightingAlgorithm().

◆ SiPixel2DTemp_num_token_

edm::ESGetToken<SiPixel2DTemplateDBObject, SiPixel2DTemplateDBObjectRcd> SiPixelChargeReweightingAlgorithm::SiPixel2DTemp_num_token_
private

Definition at line 103 of file SiPixelChargeReweightingAlgorithm.h.

Referenced by init(), and SiPixelChargeReweightingAlgorithm().

◆ templ2D

SiPixelTemplate2D SiPixelChargeReweightingAlgorithm::templ2D
private

Definition at line 89 of file SiPixelChargeReweightingAlgorithm.h.

Referenced by PixelTempRewgt2D().

◆ templateStores_

std::vector<SiPixelTemplateStore2D> SiPixelChargeReweightingAlgorithm::templateStores_
private

Definition at line 86 of file SiPixelChargeReweightingAlgorithm.h.

Referenced by init().

◆ track

std::vector<float> SiPixelChargeReweightingAlgorithm::track
private

◆ UseReweighting

const bool SiPixelChargeReweightingAlgorithm::UseReweighting
private

◆ xdouble

std::vector<bool> SiPixelChargeReweightingAlgorithm::xdouble
private

◆ ydouble

std::vector<bool> SiPixelChargeReweightingAlgorithm::ydouble
private