CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Static Public Member Functions | Private Types | Private Member Functions | Private Attributes
MkFitGeometryESProducer Class Reference
Inheritance diagram for MkFitGeometryESProducer:
edm::ESProducer edm::ESProductResolverFactoryProducer edm::eventsetup::ESProductResolverProvider

Classes

struct  GapCollector
 
struct  MatHistBin
 

Public Member Functions

 MkFitGeometryESProducer (const edm::ParameterSet &iConfig)
 
std::unique_ptr< MkFitGeometryproduce (const TrackerRecoGeometryRecord &iRecord)
 
- Public Member Functions inherited from edm::ESProducer
 ESProducer ()
 
 ESProducer (const ESProducer &)=delete
 
 ESProducer (ESProducer &&)=delete
 
ESResolverIndex const * getTokenIndices (unsigned int iIndex) const
 
ESRecordIndex const * getTokenRecordIndices (unsigned int iIndex) const
 
bool hasMayConsumes () const noexcept
 
size_t numberOfTokenIndices (unsigned int iIndex) const
 
ESProduceroperator= (const ESProducer &)=delete
 
ESProduceroperator= (ESProducer &&)=delete
 
SerialTaskQueueChainqueue ()
 
template<typename Record >
std::optional< std::vector< ESResolverIndex > > updateFromMayConsumes (unsigned int iIndex, const Record &iRecord) const
 
void updateLookup (eventsetup::ESRecordsToProductResolverIndices const &) final
 
 ~ESProducer () noexcept(false) override
 
- Public Member Functions inherited from edm::ESProductResolverFactoryProducer
 ESProductResolverFactoryProducer ()
 
 ESProductResolverFactoryProducer (const ESProductResolverFactoryProducer &)=delete
 
const ESProductResolverFactoryProduceroperator= (const ESProductResolverFactoryProducer &)=delete
 
 ~ESProductResolverFactoryProducer () noexcept(false) override
 
- Public Member Functions inherited from edm::eventsetup::ESProductResolverProvider
void createKeyedResolvers (EventSetupRecordKey const &key, unsigned int nConcurrentIOVs)
 
const ComponentDescriptiondescription () const
 
 ESProductResolverProvider ()
 
 ESProductResolverProvider (const ESProductResolverProvider &)=delete
 
void fillRecordsNotAllowingConcurrentIOVs (std::set< EventSetupRecordKey > &recordsNotAllowingConcurrentIOVs) const
 
virtual void initConcurrentIOVs (EventSetupRecordKey const &key, unsigned int nConcurrentIOVs)
 
bool isUsingRecord (const EventSetupRecordKey &key) const
 
KeyedResolverskeyedResolvers (const EventSetupRecordKey &iRecordKey, unsigned int iovIndex=0)
 
const ESProductResolverProvideroperator= (const ESProductResolverProvider &)=delete
 
void setAppendToDataLabel (const edm::ParameterSet &)
 
void setDescription (const ComponentDescription &iDescription)
 
std::set< EventSetupRecordKeyusingRecords () const
 
virtual ~ESProductResolverProvider () noexcept(false)
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 
- Static Public Member Functions inherited from edm::eventsetup::ESProductResolverProvider
static void prevalidate (ConfigurationDescriptions &)
 

Private Types

typedef std::unordered_map< int, GapCollectorlayer_gap_map_t
 
using MaterialHistogram = mkfit::rectvec< MatHistBin >
 

Private Member Functions

void addPixBGeometry (mkfit::TrackerInfo &trk_info, MaterialHistogram &material_histogram)
 
void addPixEGeometry (mkfit::TrackerInfo &trk_info, MaterialHistogram &material_histogram)
 
void addTECGeometry (mkfit::TrackerInfo &trk_info, MaterialHistogram &material_histogram)
 
void addTIBGeometry (mkfit::TrackerInfo &trk_info, MaterialHistogram &material_histogram)
 
void addTIDGeometry (mkfit::TrackerInfo &trk_info, MaterialHistogram &material_histogram)
 
void addTOBGeometry (mkfit::TrackerInfo &trk_info, MaterialHistogram &material_histogram)
 
void aggregateMaterialInfo (mkfit::TrackerInfo &trk_info, MaterialHistogram &material_histogram)
 
void considerPoint (const GlobalPoint &gp, mkfit::LayerInfo &lay_info)
 
void fillLayers (mkfit::TrackerInfo &trk_info)
 
void fillShapeAndPlacement (const GeomDet *det, mkfit::TrackerInfo &trk_info, MaterialHistogram &material_histogram, layer_gap_map_t *lgc_map=nullptr)
 
void findRZBox (const GlobalPoint &gp, float &rmin, float &rmax, float &zmin, float &zmax)
 

Private Attributes

edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecordgeomToken_
 
mkfit::LayerNumberConverter layerNrConv_ = {mkfit::TkLayout::phase1}
 
const TrackerGeometrytrackerGeom_ = nullptr
 
edm::ESGetToken< GeometricSearchTracker, TrackerRecoGeometryRecordtrackerToken_
 
const TrackerTopologytrackerTopo_ = nullptr
 
edm::ESGetToken< TrackerTopology, TrackerTopologyRcdttopoToken_
 

Additional Inherited Members

- Protected Types inherited from edm::ESProductResolverFactoryProducer
using EventSetupRecordKey = eventsetup::EventSetupRecordKey
 
- Protected Types inherited from edm::eventsetup::ESProductResolverProvider
using KeyedResolversVector = std::vector< std::pair< DataKey, std::shared_ptr< ESProductResolver > >>
 
- Protected Member Functions inherited from edm::ESProducer
ESConsumesInfoconsumesInfoPushBackNew ()
 
unsigned int consumesInfoSize () const
 
template<typename CallbackT , typename TList , typename TRecord >
void registerProducts (std::shared_ptr< std::pair< unsigned int, std::shared_ptr< CallbackT >>> iCallback, const TList *, const TRecord *iRecord, const es::Label &iLabel)
 
template<typename CallbackT , typename TRecord >
void registerProducts (std::shared_ptr< std::pair< unsigned int, std::shared_ptr< CallbackT >>>, const eventsetup::produce::Null *, const TRecord *, const es::Label &)
 
template<typename T >
auto setWhatProduced (T *iThis, const es::Label &iLabel={})
 
template<typename T >
auto setWhatProduced (T *iThis, const char *iLabel)
 
template<typename T >
auto setWhatProduced (T *iThis, const std::string &iLabel)
 
template<typename T , typename TDecorator >
auto setWhatProduced (T *iThis, const TDecorator &iDec, const es::Label &iLabel={})
 
template<typename T , typename TReturn , typename TRecord >
auto setWhatProduced (T *iThis, TReturn(T::*iMethod)(const TRecord &), const es::Label &iLabel={})
 
template<typename T , typename TReturn , typename TRecord , typename TDecorator >
auto setWhatProduced (T *iThis, TReturn(T ::*iMethod)(const TRecord &), const TDecorator &iDec, const es::Label &iLabel={})
 
template<typename TFunc >
auto setWhatProduced (TFunc &&func, const es::Label &iLabel={})
 
template<typename TReturn , typename TRecord , typename TFunc , typename TDecorator >
ESConsumesCollectorT< TRecord > setWhatProduced (TFunc &&func, TDecorator &&iDec, const es::Label &iLabel={})
 
void usesResources (std::vector< std::string > const &)
 
- Protected Member Functions inherited from edm::ESProductResolverFactoryProducer
template<class TFactory >
void registerFactory (std::unique_ptr< TFactory > iFactory, const std::string &iLabel=std::string())
 
virtual void registerFactoryWithKey (const EventSetupRecordKey &iRecord, std::unique_ptr< eventsetup::ESProductResolverFactoryBase > iFactory, const std::string &iLabel=std::string())
 
KeyedResolversVector registerResolvers (const EventSetupRecordKey &, unsigned int iovIndex) override
 
- Protected Member Functions inherited from edm::eventsetup::ESProductResolverProvider
template<class T >
void usingRecord ()
 
void usingRecordWithKey (const EventSetupRecordKey &key)
 

Detailed Description

Definition at line 30 of file MkFitGeometryESProducer.cc.

Member Typedef Documentation

◆ layer_gap_map_t

typedef std::unordered_map<int, GapCollector> MkFitGeometryESProducer::layer_gap_map_t
private

Definition at line 60 of file MkFitGeometryESProducer.cc.

◆ MaterialHistogram

Definition at line 70 of file MkFitGeometryESProducer.cc.

Constructor & Destructor Documentation

◆ MkFitGeometryESProducer()

MkFitGeometryESProducer::MkFitGeometryESProducer ( const edm::ParameterSet iConfig)

Definition at line 97 of file MkFitGeometryESProducer.cc.

References gpuPixelDoublets::cc, geomToken_, edm::ESProducer::setWhatProduced(), trackerToken_, and ttopoToken_.

97  {
98  auto cc = setWhatProduced(this);
99  geomToken_ = cc.consumes();
100  ttopoToken_ = cc.consumes();
101  trackerToken_ = cc.consumes();
102 }
auto setWhatProduced(T *iThis, const es::Label &iLabel={})
Definition: ESProducer.h:166
uint32_t cc[maxCellsPerHit]
Definition: gpuFishbone.h:49
edm::ESGetToken< GeometricSearchTracker, TrackerRecoGeometryRecord > trackerToken_
edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > ttopoToken_
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > geomToken_

Member Function Documentation

◆ addPixBGeometry()

void MkFitGeometryESProducer::addPixBGeometry ( mkfit::TrackerInfo trk_info,
MaterialHistogram material_histogram 
)
private

Definition at line 343 of file MkFitGeometryESProducer.cc.

References TrackerGeometry::detsPXB(), fillShapeAndPlacement(), and trackerGeom_.

Referenced by produce().

343  {
344 #ifdef DUMP_MKF_GEO
345  printf("\n*** addPixBGeometry\n\n");
346 #endif
347  for (auto &det : trackerGeom_->detsPXB()) {
348  fillShapeAndPlacement(det, trk_info, material_histogram);
349  }
350 }
const DetContainer & detsPXB() const
const TrackerGeometry * trackerGeom_
void fillShapeAndPlacement(const GeomDet *det, mkfit::TrackerInfo &trk_info, MaterialHistogram &material_histogram, layer_gap_map_t *lgc_map=nullptr)

◆ addPixEGeometry()

void MkFitGeometryESProducer::addPixEGeometry ( mkfit::TrackerInfo trk_info,
MaterialHistogram material_histogram 
)
private

Definition at line 352 of file MkFitGeometryESProducer.cc.

References TrackerGeometry::detsPXF(), fillShapeAndPlacement(), and trackerGeom_.

Referenced by produce().

352  {
353 #ifdef DUMP_MKF_GEO
354  printf("\n*** addPixEGeometry\n\n");
355 #endif
356  for (auto &det : trackerGeom_->detsPXF()) {
357  fillShapeAndPlacement(det, trk_info, material_histogram);
358  }
359 }
const DetContainer & detsPXF() const
const TrackerGeometry * trackerGeom_
void fillShapeAndPlacement(const GeomDet *det, mkfit::TrackerInfo &trk_info, MaterialHistogram &material_histogram, layer_gap_map_t *lgc_map=nullptr)

◆ addTECGeometry()

void MkFitGeometryESProducer::addTECGeometry ( mkfit::TrackerInfo trk_info,
MaterialHistogram material_histogram 
)
private

Definition at line 388 of file MkFitGeometryESProducer.cc.

References TrackerGeometry::detsTEC(), fillShapeAndPlacement(), nano_mu_digi_cff::layer, mkfit::TrackerInfo::layer_nc(), mkfit::LayerInfo::set_r_hole_range(), trackerGeom_, MkFitGeometryESProducer::GapCollector::Interval::x, and MkFitGeometryESProducer::GapCollector::Interval::y.

Referenced by produce().

388  {
389 #ifdef DUMP_MKF_GEO
390  printf("\n*** addTECGeometry\n\n");
391 #endif
392  // For TEC we also need to discover hole in radial extents.
393  layer_gap_map_t lgc_map;
394  for (auto &det : trackerGeom_->detsTEC()) {
395  fillShapeAndPlacement(det, trk_info, material_histogram, &lgc_map);
396  }
397  // Now loop over the GapCollectors and see if there is a coverage gap.
398  std::ostringstream ostr;
399  ostr << "addTECGeometry() gap report:\n";
400  GapCollector::Interval itvl;
401  for (auto &[layer, gcol] : lgc_map) {
402  gcol.sqrt_elements();
403  if (gcol.find_gap(itvl, 0.5)) {
404  ostr << " layer: " << layer << ", gap: " << itvl.x << " -> " << itvl.y << " width = " << itvl.y - itvl.x << "\n";
405  ostr << " all gaps: ";
406  gcol.print_gaps(ostr);
407  ostr << "\n";
408  trk_info.layer_nc(layer).set_r_hole_range(itvl.x, itvl.y);
409  }
410  }
411  edm::LogVerbatim("MkFitGeometryESProducer") << ostr.str();
412 }
Log< level::Info, true > LogVerbatim
void set_r_hole_range(float rh1, float rh2)
Definition: TrackerInfo.cc:49
LayerInfo & layer_nc(int l)
Definition: TrackerInfo.h:207
const TrackerGeometry * trackerGeom_
void fillShapeAndPlacement(const GeomDet *det, mkfit::TrackerInfo &trk_info, MaterialHistogram &material_histogram, layer_gap_map_t *lgc_map=nullptr)
const DetContainer & detsTEC() const
std::unordered_map< int, GapCollector > layer_gap_map_t

◆ addTIBGeometry()

void MkFitGeometryESProducer::addTIBGeometry ( mkfit::TrackerInfo trk_info,
MaterialHistogram material_histogram 
)
private

Definition at line 361 of file MkFitGeometryESProducer.cc.

References TrackerGeometry::detsTIB(), fillShapeAndPlacement(), and trackerGeom_.

Referenced by produce().

361  {
362 #ifdef DUMP_MKF_GEO
363  printf("\n*** addTIBGeometry\n\n");
364 #endif
365  for (auto &det : trackerGeom_->detsTIB()) {
366  fillShapeAndPlacement(det, trk_info, material_histogram);
367  }
368 }
const DetContainer & detsTIB() const
const TrackerGeometry * trackerGeom_
void fillShapeAndPlacement(const GeomDet *det, mkfit::TrackerInfo &trk_info, MaterialHistogram &material_histogram, layer_gap_map_t *lgc_map=nullptr)

◆ addTIDGeometry()

void MkFitGeometryESProducer::addTIDGeometry ( mkfit::TrackerInfo trk_info,
MaterialHistogram material_histogram 
)
private

Definition at line 379 of file MkFitGeometryESProducer.cc.

References TrackerGeometry::detsTID(), fillShapeAndPlacement(), and trackerGeom_.

Referenced by produce().

379  {
380 #ifdef DUMP_MKF_GEO
381  printf("\n*** addTIDGeometry\n\n");
382 #endif
383  for (auto &det : trackerGeom_->detsTID()) {
384  fillShapeAndPlacement(det, trk_info, material_histogram);
385  }
386 }
const TrackerGeometry * trackerGeom_
void fillShapeAndPlacement(const GeomDet *det, mkfit::TrackerInfo &trk_info, MaterialHistogram &material_histogram, layer_gap_map_t *lgc_map=nullptr)
const DetContainer & detsTID() const

◆ addTOBGeometry()

void MkFitGeometryESProducer::addTOBGeometry ( mkfit::TrackerInfo trk_info,
MaterialHistogram material_histogram 
)
private

Definition at line 370 of file MkFitGeometryESProducer.cc.

References TrackerGeometry::detsTOB(), fillShapeAndPlacement(), and trackerGeom_.

Referenced by produce().

370  {
371 #ifdef DUMP_MKF_GEO
372  printf("\n*** addTOBGeometry\n\n");
373 #endif
374  for (auto &det : trackerGeom_->detsTOB()) {
375  fillShapeAndPlacement(det, trk_info, material_histogram);
376  }
377 }
const DetContainer & detsTOB() const
const TrackerGeometry * trackerGeom_
void fillShapeAndPlacement(const GeomDet *det, mkfit::TrackerInfo &trk_info, MaterialHistogram &material_histogram, layer_gap_map_t *lgc_map=nullptr)

◆ aggregateMaterialInfo()

void MkFitGeometryESProducer::aggregateMaterialInfo ( mkfit::TrackerInfo trk_info,
MaterialHistogram material_histogram 
)
private

Definition at line 422 of file MkFitGeometryESProducer.cc.

References mps_fire::i, dqmiolumiharvest::j, mkfit::TrackerInfo::mat_nbins_r(), mkfit::TrackerInfo::mat_nbins_z(), mkfit::TrackerInfo::material_bbxi(), mkfit::TrackerInfo::material_radl(), MkFitGeometryESProducer::MatHistBin::rl, MkFitGeometryESProducer::MatHistBin::weight, and MkFitGeometryESProducer::MatHistBin::xi.

Referenced by produce().

423  {
424  //from histogram (vector of tuples) to grid
425  for (int i = 0; i < trk_info.mat_nbins_z(); i++) {
426  for (int j = 0; j < trk_info.mat_nbins_r(); j++) {
427  const MatHistBin &mhb = material_histogram(i, j);
428  if (mhb.weight > 0) {
429  trk_info.material_bbxi(i, j) = mhb.xi / mhb.weight;
430  trk_info.material_radl(i, j) = mhb.rl / mhb.weight;
431  }
432  }
433  }
434 }
int mat_nbins_r() const
Definition: TrackerInfo.h:228
float material_radl(int binZ, int binR) const
Definition: TrackerInfo.h:236
float material_bbxi(int binZ, int binR) const
Definition: TrackerInfo.h:235
int mat_nbins_z() const
Definition: TrackerInfo.h:227

◆ considerPoint()

void MkFitGeometryESProducer::considerPoint ( const GlobalPoint gp,
mkfit::LayerInfo lay_info 
)
private

Definition at line 188 of file MkFitGeometryESProducer.cc.

References mkfit::LayerInfo::extend_limits(), runTauDisplay::gp, alignCSCRings::r, and z.

Referenced by fillShapeAndPlacement().

188  {
189  // Use radius squared during bounding-region search.
190  float r = gp.perp2(), z = gp.z();
191  li.extend_limits(r, z);
192 }

◆ fillDescriptions()

void MkFitGeometryESProducer::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

◆ fillLayers()

void MkFitGeometryESProducer::fillLayers ( mkfit::TrackerInfo trk_info)
private

Definition at line 436 of file MkFitGeometryESProducer.cc.

References funct::abs(), mps_fire::i, testProducerWithPsetDescEmpty_cfi::i2, mkfit::LayerInfo::is_barrel(), dqmiolumiharvest::j, mkfit::TrackerInfo::layer(), mkfit::TrackerInfo::mat_bin_r(), mkfit::TrackerInfo::mat_bin_z(), mkfit::TrackerInfo::mat_nbins_r(), mkfit::TrackerInfo::mat_nbins_z(), mkfit::TrackerInfo::material_bbxi(), mkfit::TrackerInfo::material_radl(), SiStripPI::max, mkfit::TrackerInfo::n_layers(), mkfit::LayerInfo::rin(), mkfit::LayerInfo::rout(), mkfit::LayerInfo::zmax(), SiStripMonitorCluster_cfi::zmax, mkfit::LayerInfo::zmin(), and SiStripMonitorCluster_cfi::zmin.

Referenced by produce().

436  {
437  mkfit::rectvec<int> rneighbor_map(trk_info.mat_nbins_z(), trk_info.mat_nbins_r());
438  mkfit::rectvec<int> zneighbor_map(trk_info.mat_nbins_z(), trk_info.mat_nbins_r());
439 
440  for (int im = 0; im < trk_info.n_layers(); ++im) {
441  const mkfit::LayerInfo &li = trk_info.layer(im);
442  if (!li.is_barrel() && li.zmax() < 0)
443  continue; // neg endcap covered by pos
444  int rin, rout, zmin, zmax;
445  rin = trk_info.mat_bin_r(li.rin());
446  rout = trk_info.mat_bin_r(li.rout()) + 1;
447  if (li.is_barrel()) {
448  zmin = 0;
449  zmax = trk_info.mat_bin_z(std::max(std::abs(li.zmax()), std::abs(li.zmin()))) + 1;
450  } else {
451  zmin = trk_info.mat_bin_z(li.zmin());
452  zmax = trk_info.mat_bin_z(li.zmax()) + 1;
453  }
454  for (int i = zmin; i < zmax; i++) {
455  for (int j = rin; j < rout; j++) {
456  if (trk_info.material_bbxi(i, j) == 0) {
457  float distancesqmin = 100000;
458  for (int i2 = zmin; i2 < zmax; i2++) {
459  for (int j2 = rin; j2 < rout; j2++) {
460  if (j == j2 && i == i2)
461  continue;
462  auto mydistsq = (i - i2) * (i - i2) + (j - j2) * (j - j2);
463  if (mydistsq < distancesqmin && trk_info.material_radl(i2, j2) > 0) {
464  distancesqmin = mydistsq;
465  zneighbor_map(i, j) = i2;
466  rneighbor_map(i, j) = j2;
467  }
468  }
469  } // can work on speedup here
470  }
471  }
472  }
473  for (int i = zmin; i < zmax; i++) {
474  for (int j = rin; j < rout; j++) {
475  if (trk_info.material_bbxi(i, j) == 0) {
476  int iN = zneighbor_map(i, j);
477  int jN = rneighbor_map(i, j);
478  trk_info.material_bbxi(i, j) = trk_info.material_bbxi(iN, jN);
479  trk_info.material_radl(i, j) = trk_info.material_radl(iN, jN);
480  }
481  }
482  }
483  } //module loop
484 }
float rin() const
Definition: TrackerInfo.h:68
float zmax() const
Definition: TrackerInfo.h:72
int mat_nbins_r() const
Definition: TrackerInfo.h:228
float zmin() const
Definition: TrackerInfo.h:71
float material_radl(int binZ, int binR) const
Definition: TrackerInfo.h:236
int n_layers() const
Definition: TrackerInfo.h:205
int mat_bin_z(float z) const
Definition: TrackerInfo.h:231
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
int mat_bin_r(float r) const
Definition: TrackerInfo.h:232
const LayerInfo & layer(int l) const
Definition: TrackerInfo.h:206
float material_bbxi(int binZ, int binR) const
Definition: TrackerInfo.h:235
float rout() const
Definition: TrackerInfo.h:69
int mat_nbins_z() const
Definition: TrackerInfo.h:227
bool is_barrel() const
Definition: TrackerInfo.h:78

◆ fillShapeAndPlacement()

void MkFitGeometryESProducer::fillShapeAndPlacement ( const GeomDet det,
mkfit::TrackerInfo trk_info,
MaterialHistogram material_histogram,
layer_gap_map_t lgc_map = nullptr 
)
private

Definition at line 194 of file MkFitGeometryESProducer.cc.

References b, b2, reco::ceil(), considerPoint(), mkfit::LayerNumberConverter::convertLayerNumber(), PVValHelper::dx, PVValHelper::dy, PVValHelper::dz, Exception, f, findRZBox(), GeomDet::geographicalId(), mps_fire::i, mkfit::LayerNumberConverter::isPhase2(), TrackerTopology::isStereo(), dqmiolumiharvest::j, TrackerTopology::layer(), mkfit::TrackerInfo::layer_nc(), layerNrConv_, mkfit::TrackerInfo::mat_nbins_r(), mkfit::TrackerInfo::mat_nbins_z(), mkfit::TrackerInfo::mat_range_r(), mkfit::TrackerInfo::mat_range_z(), SiStripPI::max, Surface::mediumProperties(), SiStripPI::min, hltL1SingleMuFiltered5_cfi::overlap, AlCaHLTBitMon_ParallelJobs::p, PV3DBase< T, PVType, FrameType >::perp2(), PosEndcap, GeomDet::position(), MediumProperties::radLen(), DetId::rawId(), GeomDet::rotation(), TrackerTopology::side(), DetId::subdetId(), GeomDet::surface(), SiStripSubdetector::TEC, TrackerTopology::tecIsDoubleSide(), SiStripSubdetector::TIB, TrackerTopology::tibIsDoubleSide(), SiStripSubdetector::TID, TrackerTopology::tidIsDoubleSide(), SiStripSubdetector::TOB, TrackerTopology::tobIsDoubleSide(), Surface::toGlobal(), trackerTopo_, useMatched, x, TkRotation< T >::x(), MediumProperties::xi(), geometryCSVtoXML::xy, z, and TkRotation< T >::z().

Referenced by addPixBGeometry(), addPixEGeometry(), addTECGeometry(), addTIBGeometry(), addTIDGeometry(), and addTOBGeometry().

197  {
198  const DetId detid = det->geographicalId();
199 
200  bool doubleSide = false; //double modules have double material
201  if (detid.subdetId() == SiStripSubdetector::TIB)
202  doubleSide = trackerTopo_->tibIsDoubleSide(detid);
203  else if (detid.subdetId() == SiStripSubdetector::TID)
204  doubleSide = trackerTopo_->tidIsDoubleSide(detid);
205  else if (detid.subdetId() == SiStripSubdetector::TOB)
206  doubleSide = trackerTopo_->tobIsDoubleSide(detid);
207  else if (detid.subdetId() == SiStripSubdetector::TEC)
208  doubleSide = trackerTopo_->tecIsDoubleSide(detid);
209 
210  float xy[4][2];
211  float half_length, dz;
212  const Bounds *b = &((det->surface()).bounds());
213 
214  if (const TrapezoidalPlaneBounds *b2 = dynamic_cast<const TrapezoidalPlaneBounds *>(b)) {
215  // See sec. "TrapezoidalPlaneBounds parameters" in doc/reco-geom-notes.txt
216  std::array<const float, 4> const &par = b2->parameters();
217  xy[0][0] = -par[0];
218  xy[0][1] = -par[3];
219  xy[1][0] = -par[1];
220  xy[1][1] = par[3];
221  xy[2][0] = par[1];
222  xy[2][1] = par[3];
223  xy[3][0] = par[0];
224  xy[3][1] = -par[3];
225  half_length = par[3];
226  dz = par[2];
227 
228 #ifdef DUMP_MKF_GEO
229  printf("TRAP 0x%x %f %f %f %f ", detid.rawId(), par[0], par[1], par[2], par[3]);
230 #endif
231  } else if (const RectangularPlaneBounds *b2 = dynamic_cast<const RectangularPlaneBounds *>(b)) {
232  // Rectangular
233  float dx = b2->width() * 0.5; // half width
234  float dy = b2->length() * 0.5; // half length
235  xy[0][0] = -dx;
236  xy[0][1] = -dy;
237  xy[1][0] = -dx;
238  xy[1][1] = dy;
239  xy[2][0] = dx;
240  xy[2][1] = dy;
241  xy[3][0] = dx;
242  xy[3][1] = -dy;
243  half_length = dy;
244  dz = b2->thickness() * 0.5; // half thickness
245 
246 #ifdef DUMP_MKF_GEO
247  printf("RECT 0x%x %f %f %f ", detid.rawId(), dx, dy, dz);
248 #endif
249  } else {
250  throw cms::Exception("UnimplementedFeature") << "unsupported Bounds class";
251  }
252 
253  const bool useMatched = false;
254  int lay =
256  trackerTopo_->layer(detid),
257  useMatched,
258  trackerTopo_->isStereo(detid),
259  trackerTopo_->side(detid) == static_cast<unsigned>(TrackerDetSide::PosEndcap));
260 #ifdef DUMP_MKF_GEO
261  printf(" subdet=%d layer=%d side=%d is_stereo=%d is_double_side=%d --> mkflayer=%d\n",
262  detid.subdetId(),
263  trackerTopo_->layer(detid),
264  trackerTopo_->side(detid),
265  trackerTopo_->isStereo(detid),
266  doubleSide,
267  lay);
268 #endif
269 
270  mkfit::LayerInfo &layer_info = trk_info.layer_nc(lay);
271  if (lgc_map) {
272  (*lgc_map)[lay].reset_current();
273  }
274  float zbox_min = 1000, zbox_max = 0, rbox_min = 1000, rbox_max = 0;
275  for (int i = 0; i < 4; ++i) {
276  Local3DPoint lp1(xy[i][0], xy[i][1], -dz);
277  Local3DPoint lp2(xy[i][0], xy[i][1], dz);
278  GlobalPoint gp1 = det->surface().toGlobal(lp1);
279  GlobalPoint gp2 = det->surface().toGlobal(lp2);
280  considerPoint(gp1, layer_info);
281  considerPoint(gp2, layer_info);
282  findRZBox(gp1, rbox_min, rbox_max, zbox_min, zbox_max);
283  findRZBox(gp2, rbox_min, rbox_max, zbox_min, zbox_max);
284  if (lgc_map) {
285  (*lgc_map)[lay].extend_current(gp1.perp2());
286  (*lgc_map)[lay].extend_current(gp2.perp2());
287  }
288  }
289  if (lgc_map) {
290  (*lgc_map)[lay].add_current();
291  }
292 
293  // Double-sided module (join of two modules) information is not used in mkFit and
294  // also not needed for the material calculation.
295  if (doubleSide)
296  return;
297 
298  // Module information
299  const auto &p = det->position();
300  auto z = det->rotation().z();
301  auto x = det->rotation().x();
302  layer_info.register_module(
303  {{p.x(), p.y(), p.z()}, {z.x(), z.y(), z.z()}, {x.x(), x.y(), x.z()}, half_length, detid.rawId()});
304  // Set some layer parameters (repeatedly, would require hard-coding otherwise)
305  layer_info.set_subdet(detid.subdetId());
306  layer_info.set_is_pixel(detid.subdetId() <= 2);
307  layer_info.set_is_stereo(trackerTopo_->isStereo(detid));
308  if (layerNrConv_.isPhase2() && !layer_info.is_pixel())
309  layer_info.set_has_charge(false);
310 
311  // Fill material
312  {
313  // module material
314  const float bbxi = det->surface().mediumProperties().xi();
315  const float radL = det->surface().mediumProperties().radLen();
316  // loop over bins to fill histogram with bbxi, radL and their weight, which the overlap surface in r-z with the cmsquare of a bin
317  const float iBin = trk_info.mat_range_z() / trk_info.mat_nbins_z();
318  const float jBin = trk_info.mat_range_r() / trk_info.mat_nbins_r();
319  for (int i = std::floor(zbox_min / iBin); i < std::ceil(zbox_max / iBin); i++) {
320  for (int j = std::floor(rbox_min / jBin); j < std::ceil(rbox_max / jBin); j++) {
321  const float iF = i * iBin;
322  const float jF = j * jBin;
323  float overlap = std::max(0.f, std::min(jF + jBin, rbox_max) - std::max(jF, rbox_min)) *
324  std::max(0.f, std::min(iF + iBin, zbox_max) - std::max(iF, zbox_min));
325  if (overlap > 0)
326  material_histogram(i, j).add(overlap, bbxi, radL);
327  }
328  }
329  }
330 }
constexpr int32_t ceil(float num)
bool tibIsDoubleSide(const DetId &id) const
bool tecIsDoubleSide(const DetId &id) const
bool tidIsDoubleSide(const DetId &id) const
bool isStereo(const DetId &id) const
const TrackerTopology * trackerTopo_
unsigned int side(const DetId &id) const
LayerInfo & layer_nc(int l)
Definition: TrackerInfo.h:207
bool tobIsDoubleSide(const DetId &id) const
constexpr bool useMatched
unsigned int layer(const DetId &id) const
int mat_nbins_r() const
Definition: TrackerInfo.h:228
const Surface::RotationType & rotation() const
The rotation defining the local R.F.
Definition: GeomDet.h:46
Basic3DVector< T > x() const
float radLen() const
float mat_range_z() const
Definition: TrackerInfo.h:229
Basic3DVector< T > z() const
void considerPoint(const GlobalPoint &gp, mkfit::LayerInfo &lay_info)
double f[11][100]
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:48
DetId geographicalId() const
The label of this GeomDet.
Definition: GeomDet.h:64
float mat_range_r() const
Definition: TrackerInfo.h:230
bias2_t b2[25]
Definition: b2.h:9
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:79
Definition: DetId.h:17
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
double b
Definition: hdecay.h:120
void findRZBox(const GlobalPoint &gp, float &rmin, float &rmax, float &zmin, float &zmax)
T perp2() const
Definition: PV3DBase.h:68
const Surface::PositionType & position() const
The position (origin of the R.F.)
Definition: GeomDet.h:43
mkfit::LayerNumberConverter layerNrConv_
Definition: Bounds.h:18
const MediumProperties & mediumProperties() const
Definition: Surface.h:83
int convertLayerNumber(int det, int lay, bool useMatched, int isStereo, bool posZ) const
float xi() const
int mat_nbins_z() const
Definition: TrackerInfo.h:227

◆ findRZBox()

void MkFitGeometryESProducer::findRZBox ( const GlobalPoint gp,
float &  rmin,
float &  rmax,
float &  zmin,
float &  zmax 
)
private

◆ produce()

std::unique_ptr< MkFitGeometry > MkFitGeometryESProducer::produce ( const TrackerRecoGeometryRecord iRecord)

Definition at line 510 of file MkFitGeometryESProducer.cc.

References addPixBGeometry(), addPixEGeometry(), addTECGeometry(), addTIBGeometry(), addTIDGeometry(), addTOBGeometry(), aggregateMaterialInfo(), mkfit::PropagationConfig::apply_tracker_info(), cms::cuda::assert(), mkfit::PropagationConfig::backward_fit_pflags, mkfit::PropagationConfig::backward_fit_to_pca, Exception, f, fillLayers(), mkfit::PropagationConfig::finding_inter_layer_pflags, mkfit::PropagationConfig::finding_intra_layer_pflags, mkfit::PropagationConfig::finding_requires_propagation_to_hit_pos, mkfit::PropagationConfig::forward_fit_pflags, geomToken_, edm::eventsetup::DependentRecordImplementation< RecordT, ListT >::get(), mps_fire::i, TrackerGeometry::isThere(), layerNrConv_, SiStripPI::max, eostools::move(), GeomDetEnumerators::P1PXB, GeomDetEnumerators::P1PXEC, GeomDetEnumerators::P2OTB, GeomDetEnumerators::P2OTEC, GeomDetEnumerators::P2PXB, GeomDetEnumerators::P2PXEC, mkfit::PropagationConfig::pca_prop_pflags, mkfit::PF_apply_material, mkfit::PF_none, mkfit::PF_use_param_b_field, mkfit::phase2, mkfit::LayerNumberConverter::reset(), mkfit::PropagationConfig::seed_fit_pflags, mathSSE::sqrt(), trackerGeom_, trackerToken_, trackerTopo_, ttopoToken_, and mkfit::Config::usePropToPlane.

510  {
511  auto trackerInfo = std::make_unique<mkfit::TrackerInfo>();
512 
513  trackerGeom_ = &iRecord.get(geomToken_);
514  trackerTopo_ = &iRecord.get(ttopoToken_);
515 
516  const float *qBinDefaults = nullptr;
517 
518  // std::string path = "Geometry/TrackerCommonData/data/";
520  edm::LogInfo("MkFitGeometryESProducer") << "Extracting PhaseI geometry";
521  trackerInfo->create_layers(18, 27, 27);
522  qBinDefaults = phase1QBins;
523 
524  trackerInfo->create_material(300, 300.0f, 120, 120.0f);
527  edm::LogInfo("MkFitGeometryESProducer") << "Extracting PhaseII geometry";
529  trackerInfo->create_layers(16, 22, 22);
530  qBinDefaults = phase2QBins;
531  trackerInfo->create_material(300, 300.0f, 120, 120.0f);
532  } else {
533  throw cms::Exception("UnimplementedFeature") << "unsupported / unknowen geometry version";
534  }
535 
536  // Prepare layer boundaries for bounding-box search
537  for (int i = 0; i < trackerInfo->n_layers(); ++i) {
538  auto &li = trackerInfo->layer_nc(i);
539  li.set_limits(
541  li.reserve_modules(256);
542  }
543 
544  MaterialHistogram material_histogram(trackerInfo->mat_nbins_z(), trackerInfo->mat_nbins_r());
545 
546  // This works for both Phase1 and Phase2.
547  // Phase2 TrackerGeometry returns empty det-vectors for TIB and TEC.
548  addPixBGeometry(*trackerInfo, material_histogram);
549  addPixEGeometry(*trackerInfo, material_histogram);
550  addTIBGeometry(*trackerInfo, material_histogram);
551  addTIDGeometry(*trackerInfo, material_histogram);
552  addTOBGeometry(*trackerInfo, material_histogram);
553  addTECGeometry(*trackerInfo, material_histogram);
554 
555  // r_in/out kept as squares until here, root them
556  unsigned int n_mod = 0;
557  for (int i = 0; i < trackerInfo->n_layers(); ++i) {
558  auto &li = trackerInfo->layer_nc(i);
559  li.set_r_in_out(std::sqrt(li.rin()), std::sqrt(li.rout()));
560  li.set_propagate_to(li.is_barrel() ? li.r_mean() : li.z_mean());
561  li.set_q_bin(qBinDefaults[i]);
562  unsigned int maxsid = li.shrink_modules();
563 
564  n_mod += maxsid;
565 
566  // Make sure the short id fits in the 14 bits...
567  assert(maxsid < 1u << 13);
568  assert(n_mod > 0);
569  }
570 
571  // Material grid
572  aggregateMaterialInfo(*trackerInfo, material_histogram);
573  fillLayers(*trackerInfo);
574 
575  // Propagation configuration
576  {
577  using namespace mkfit;
578  PropagationConfig &pconf = trackerInfo->prop_config_nc();
579  pconf.backward_fit_to_pca = false;
584  else
590  pconf.apply_tracker_info(trackerInfo.get());
591  }
592 
593 #ifdef DUMP_MKF_GEO
594  printf("Total number of modules %u, 14-bits fit up to %u modules\n", n_mod, 1u << 13);
595 #endif
596 
597  return std::make_unique<MkFitGeometry>(iRecord.get(geomToken_),
598  iRecord.get(trackerToken_),
599  iRecord.get(ttopoToken_),
600  std::move(trackerInfo),
601  layerNrConv_);
602 }
void addTIDGeometry(mkfit::TrackerInfo &trk_info, MaterialHistogram &material_histogram)
void addTOBGeometry(mkfit::TrackerInfo &trk_info, MaterialHistogram &material_histogram)
void addTECGeometry(mkfit::TrackerInfo &trk_info, MaterialHistogram &material_histogram)
PropagationFlags forward_fit_pflags
void fillLayers(mkfit::TrackerInfo &trk_info)
void addPixBGeometry(mkfit::TrackerInfo &trk_info, MaterialHistogram &material_histogram)
edm::ESGetToken< GeometricSearchTracker, TrackerRecoGeometryRecord > trackerToken_
PropagationFlags backward_fit_pflags
const TrackerTopology * trackerTopo_
assert(be >=bs)
PropagationFlags finding_inter_layer_pflags
edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > ttopoToken_
const TrackerGeometry * trackerGeom_
bool isThere(GeomDetEnumerators::SubDetector subdet) const
T sqrt(T t)
Definition: SSEVec.h:23
PropagationFlags seed_fit_pflags
double f[11][100]
void addTIBGeometry(mkfit::TrackerInfo &trk_info, MaterialHistogram &material_histogram)
PropagationFlags pca_prop_pflags
Log< level::Info, false > LogInfo
void aggregateMaterialInfo(mkfit::TrackerInfo &trk_info, MaterialHistogram &material_histogram)
mkfit::rectvec< MatHistBin > MaterialHistogram
mkfit::LayerNumberConverter layerNrConv_
void apply_tracker_info(const TrackerInfo *ti)
Definition: TrackerInfo.cc:13
void addPixEGeometry(mkfit::TrackerInfo &trk_info, MaterialHistogram &material_histogram)
PropagationFlags finding_intra_layer_pflags
constexpr bool usePropToPlane
Definition: Config.h:51
edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > geomToken_
ProductT const & get(ESGetToken< ProductT, DepRecordT > const &iToken) const
def move(src, dest)
Definition: eostools.py:511

Member Data Documentation

◆ geomToken_

edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> MkFitGeometryESProducer::geomToken_
private

Definition at line 88 of file MkFitGeometryESProducer.cc.

Referenced by MkFitGeometryESProducer(), and produce().

◆ layerNrConv_

mkfit::LayerNumberConverter MkFitGeometryESProducer::layerNrConv_ = {mkfit::TkLayout::phase1}
private

Definition at line 94 of file MkFitGeometryESProducer.cc.

Referenced by fillShapeAndPlacement(), and produce().

◆ trackerGeom_

const TrackerGeometry* MkFitGeometryESProducer::trackerGeom_ = nullptr
private

◆ trackerToken_

edm::ESGetToken<GeometricSearchTracker, TrackerRecoGeometryRecord> MkFitGeometryESProducer::trackerToken_
private

Definition at line 90 of file MkFitGeometryESProducer.cc.

Referenced by MkFitGeometryESProducer(), and produce().

◆ trackerTopo_

const TrackerTopology* MkFitGeometryESProducer::trackerTopo_ = nullptr
private

Definition at line 92 of file MkFitGeometryESProducer.cc.

Referenced by fillShapeAndPlacement(), and produce().

◆ ttopoToken_

edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> MkFitGeometryESProducer::ttopoToken_
private

Definition at line 89 of file MkFitGeometryESProducer.cc.

Referenced by MkFitGeometryESProducer(), and produce().