CMS 3D CMS Logo

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

#include <ConvBremSeedProducer.h>

Inheritance diagram for ConvBremSeedProducer:
edm::EDProducer edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 ConvBremSeedProducer (const edm::ParameterSet &)
 
 ~ConvBremSeedProducer () override
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
SerialTaskQueueglobalLuminosityBlocksQueue ()
 
SerialTaskQueueglobalRunsQueue ()
 
ModuleDescription const & moduleDescription () const
 
 ~EDProducer () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Types

typedef GeometricSearchDet::DetWithState DetWithState
 
typedef SiStripMatchedRecHit2DCollection::const_iterator MatDetMatch
 
typedef SiStripMatchedRecHit2DCollection::DetSet MatDetSet
 
typedef SiPixelRecHitCollection::const_iterator PiDetMatch
 
typedef SiPixelRecHitCollection::DetSet PiDetSet
 
typedef SiStripRecHit2DCollection::const_iterator StDetMatch
 
typedef SiStripRecHit2DCollection::DetSet StDetSet
 

Private Member Functions

void beginRun (const edm::Run &, const edm::EventSetup &) override
 
const DetLayerdetLayer (const TrackerLayer &layer, float zpos) const
 
void endRun (const edm::Run &, const edm::EventSetup &) override
 
int GoodCluster (const BaseParticlePropagator &bpg, const reco::PFClusterCollection &pfc, float minep, bool sec=false)
 
void initializeLayerMap ()
 
bool isGsfTrack (const reco::Track &, const TrackingRecHit *)
 
TrajectoryStateOnSurface makeTrajectoryState (const DetLayer *layer, const ParticlePropagator &pp, const MagneticField *field) const
 
void produce (edm::Event &, const edm::EventSetup &) override
 
std::vector< bool > sharedHits (const std::vector< std::pair< TrajectorySeed, std::pair< GlobalVector, float > > > &)
 

Private Attributes

math::XYZVector B_
 B field. More...
 
edm::ParameterSet conf_
 
const MagneticFieldMapfieldMap_
 
const TrackerInteractionGeometrygeometry_
 
const GeometricSearchTrackergeomSearchTracker_
 
const TransientTrackingRecHitBuilderhitBuilder_
 
const KFUpdatorkfUpdator_
 
std::vector< const DetLayer * > layerMap_
 
const MagneticFieldmagfield_
 
int negLayerOffset_
 
const PropagatorWithMaterialpropagator_
 
std::vector< const DetLayer * > theLayerMap
 
const TrackerGeometrytracker_
 

Additional Inherited Members

- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex >>
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::EDProducer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
static bool wantsGlobalLuminosityBlocks ()
 
static bool wantsGlobalRuns ()
 
static bool wantsStreamLuminosityBlocks ()
 
static bool wantsStreamRuns ()
 
- Protected Member Functions inherited from edm::ProducerBase
ProducesCollector producesCollector ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Definition at line 38 of file ConvBremSeedProducer.h.

Member Typedef Documentation

Definition at line 45 of file ConvBremSeedProducer.h.

Definition at line 41 of file ConvBremSeedProducer.h.

Definition at line 44 of file ConvBremSeedProducer.h.

Definition at line 40 of file ConvBremSeedProducer.h.

Definition at line 43 of file ConvBremSeedProducer.h.

Definition at line 39 of file ConvBremSeedProducer.h.

Definition at line 42 of file ConvBremSeedProducer.h.

Constructor & Destructor Documentation

ConvBremSeedProducer::ConvBremSeedProducer ( const edm::ParameterSet iConfig)
explicit

Definition at line 53 of file ConvBremSeedProducer.cc.

54  : conf_(iConfig), fieldMap_(nullptr), layerMap_(56, static_cast<const DetLayer*>(nullptr)), negLayerOffset_(27) {
55  produces<ConvBremSeedCollection>();
56 }
edm::ParameterSet conf_
const MagneticFieldMap * fieldMap_
std::vector< const DetLayer * > layerMap_
ConvBremSeedProducer::~ConvBremSeedProducer ( )
override

Definition at line 58 of file ConvBremSeedProducer.cc.

58 {}

Member Function Documentation

void ConvBremSeedProducer::beginRun ( const edm::Run run,
const edm::EventSetup iSetup 
)
overrideprivate

Definition at line 344 of file ConvBremSeedProducer.cc.

References alongMomentum, B_, conf_, fieldMap_, geometry_, geomSearchTracker_, edm::EventSetup::get(), edm::ParameterSet::getParameter(), hitBuilder_, MagneticField::inTesla(), kfUpdator_, volumeBasedMagneticField_1103l_cfi::magfield, magfield_, edm::ESHandle< T >::product(), propagator_, HLT_2018_cff::track, PbPb_ZMuSkimMuonDPG_cff::tracker, and tracker_.

344  {
346  iSetup.get<TrackerRecoGeometryRecord>().get(track);
347  geomSearchTracker_ = track.product();
348 
349  ESHandle<TrackerInteractionGeometry> theTrackerInteractionGeometry;
350  iSetup.get<TrackerInteractionGeometryRecord>().get(theTrackerInteractionGeometry);
351  geometry_ = theTrackerInteractionGeometry.product();
352 
354  iSetup.get<TrackerDigiGeometryRecord>().get(tracker);
355  tracker_ = tracker.product();
356 
358  iSetup.get<IdealMagneticFieldRecord>().get(magfield);
359  magfield_ = magfield.product();
360  B_ = magfield_->inTesla(GlobalPoint(0, 0, 0));
361 
363  iSetup.get<MagneticFieldMapRecord>().get(fieldMap);
364  fieldMap_ = fieldMap.product();
365 
367  iSetup.get<TransientRecHitRecord>().get(conf_.getParameter<string>("TTRHBuilder"), hitBuilder);
368  hitBuilder_ = hitBuilder.product();
369 
370  propagator_ = new PropagatorWithMaterial(alongMomentum, 0.0005, &(*magfield));
371  kfUpdator_ = new KFUpdator();
372 }
const MagneticField * magfield_
T getParameter(std::string const &) const
const GeometricSearchTracker * geomSearchTracker_
const TransientTrackingRecHitBuilder * hitBuilder_
edm::ParameterSet conf_
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
const PropagatorWithMaterial * propagator_
const KFUpdator * kfUpdator_
const TrackerInteractionGeometry * geometry_
const MagneticFieldMap * fieldMap_
math::XYZVector B_
B field.
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
T get() const
Definition: EventSetup.h:73
const TrackerGeometry * tracker_
T const * product() const
Definition: ESHandle.h:86
const DetLayer * ConvBremSeedProducer::detLayer ( const TrackerLayer layer,
float  zpos 
) const
private

Definition at line 454 of file ConvBremSeedProducer.cc.

References TrackerLayer::forward(), layerMap_, TrackerLayer::layerNumber(), and negLayerOffset_.

Referenced by produce().

454  {
455  if (zpos > 0 || !layer.forward())
456  return layerMap_[layer.layerNumber()];
457  else
458  return layerMap_[layer.layerNumber() + negLayerOffset_];
459 }
unsigned int layerNumber() const
Returns the layer number.
Definition: TrackerLayer.h:78
bool forward() const
Is the layer forward ?
Definition: TrackerLayer.h:66
std::vector< const DetLayer * > layerMap_
void ConvBremSeedProducer::endRun ( const edm::Run run,
const edm::EventSetup iSetup 
)
overrideprivate

Definition at line 374 of file ConvBremSeedProducer.cc.

References kfUpdator_, and propagator_.

374  {
375  delete propagator_;
376  delete kfUpdator_;
377 }
const PropagatorWithMaterial * propagator_
const KFUpdator * kfUpdator_
int ConvBremSeedProducer::GoodCluster ( const BaseParticlePropagator bpg,
const reco::PFClusterCollection pfc,
float  minep,
bool  sec = false 
)
private

Definition at line 526 of file ConvBremSeedProducer.cc.

References flavorHistoryFilter_cfi::dr, PVValHelper::eta, BaseParticlePropagator::getSuccess(), mps_fire::i, RawParticle::momentum(), BaseParticlePropagator::particle(), phi, position, funct::pow(), BaseParticlePropagator::propagateToEcalEntrance(), mathSSE::sqrt(), TwoPi, and RawParticle::vertex().

Referenced by produce().

529  {
530  BaseParticlePropagator bpg = ubpg;
531  bpg.propagateToEcalEntrance(false);
532  float dr = 1000;
533  float de = 1000;
534  float df = 1000;
535  int ibest = -1;
536 
537  if (bpg.getSuccess() != 0) {
538  for (unsigned int i = 0; i < pfc.size(); i++) {
539  float tmp_ep = pfc[i].energy() / bpg.particle().momentum().e();
540  float tmp_phi = fabs(pfc[i].position().phi() - bpg.particle().vertex().phi());
541  if (tmp_phi > TMath::TwoPi())
542  tmp_phi -= TMath::TwoPi();
543  float tmp_eta = fabs(pfc[i].position().eta() - bpg.particle().vertex().eta());
544  float tmp_dr = sqrt(pow(tmp_phi, 2) + pow(tmp_eta, 2));
545  bool isBet = (tmp_dr < dr);
546  if (sec)
547  isBet = (tmp_phi < df);
548  if ((isBet) && (tmp_ep > minep) && (tmp_ep < 10)) {
549  dr = tmp_dr;
550  de = tmp_eta;
551  df = tmp_phi;
552  ibest = i;
553  }
554  }
555  bool isBad = (dr > 0.1);
556  if (sec)
557  isBad = ((df > 0.25) || (de > 0.5));
558 
559  if (isBad)
560  ibest = -1;
561  }
562  return ibest;
563 }
const double TwoPi
int getSuccess() const
Has propagation been performed and was barrel or endcap reached ?
RawParticle const & particle() const
The particle being propagated.
const XYZTLorentzVector & momentum() const
the momentum fourvector
Definition: RawParticle.h:321
T sqrt(T t)
Definition: SSEVec.h:19
bool propagateToEcalEntrance(bool first=true)
const XYZTLorentzVector & vertex() const
the vertex fourvector
Definition: RawParticle.h:320
static int position[264][3]
Definition: ReadPGInfo.cc:289
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:30
void ConvBremSeedProducer::initializeLayerMap ( )
private

ATTENTION: HARD CODED LOGIC! If Famos layer numbering changes this logic needs to be adapted to the new numbering!

Definition at line 379 of file ConvBremSeedProducer.cc.

References GeometricSearchTracker::barrelLayers(), TrackerInteractionGeometry::cylinderBegin(), TrackerInteractionGeometry::cylinderEnd(), newFWLiteAna::found, geometry_, geomSearchTracker_, mps_fire::i, layerMap_, LogDebug, and GeometricSearchTracker::posForwardLayers().

Referenced by produce().

379  {
380  // These are the BoundSurface&, the BoundDisk* and the BoundCylinder* for that layer
381  // const BoundSurface& theSurface = layer.surface();
382  // BoundDisk* theDisk = layer.disk(); // non zero for endcaps
383  // BoundCylinder* theCylinder = layer.cylinder(); // non zero for barrel
384  // int theLayer = layer.layerNumber(); // 1->3 PixB, 4->5 PixD,
385  // // 6->9 TIB, 10->12 TID,
386  // // 13->18 TOB, 19->27 TEC
387 
390 
391  const std::vector<const BarrelDetLayer*>& barrelLayers = geomSearchTracker_->barrelLayers();
392  LogDebug("FastTracker") << "Barrel DetLayer dump: ";
393  for (auto bl = barrelLayers.begin(); bl != barrelLayers.end(); ++bl) {
394  LogDebug("FastTracker") << "radius " << (**bl).specificSurface().radius();
395  }
396 
397  const std::vector<const ForwardDetLayer*>& posForwardLayers = geomSearchTracker_->posForwardLayers();
398  LogDebug("FastTracker") << "Positive Forward DetLayer dump: ";
399  for (auto fl = posForwardLayers.begin(); fl != posForwardLayers.end(); ++fl) {
400  LogDebug("FastTracker") << "Z pos " << (**fl).surface().position().z() << " radii "
401  << (**fl).specificSurface().innerRadius() << ", " << (**fl).specificSurface().outerRadius();
402  }
403 
404  const float rTolerance = 1.5;
405  const float zTolerance = 3.;
406 
407  LogDebug("FastTracker") << "Dump of TrackerInteractionGeometry cylinders:";
408  for (std::list<TrackerLayer>::const_iterator i = geometry_->cylinderBegin(); i != geometry_->cylinderEnd(); ++i) {
409  const BoundCylinder* cyl = i->cylinder();
410  const BoundDisk* disk = i->disk();
411 
412  LogDebug("FastTracker") << "Famos Layer no " << i->layerNumber() << " is sensitive? " << i->sensitive() << " pos "
413  << i->surface().position();
414  if (!i->sensitive())
415  continue;
416 
417  if (cyl != nullptr) {
418  LogDebug("FastTracker") << " cylinder radius " << cyl->radius();
419  bool found = false;
420 
421  for (auto bl = barrelLayers.begin(); bl != barrelLayers.end(); ++bl) {
422  if (fabs(cyl->radius() - (**bl).specificSurface().radius()) < rTolerance) {
423  layerMap_[i->layerNumber()] = *bl;
424  found = true;
425  LogDebug("FastTracker") << "Corresponding DetLayer found with radius " << (**bl).specificSurface().radius();
426 
427  break;
428  }
429  }
430  if (!found) {
431  LogError("FastTracker") << "FAILED to find a corresponding DetLayer!";
432  }
433  } else {
434  LogDebug("FastTracker") << " disk radii " << disk->innerRadius() << ", " << disk->outerRadius();
435 
436  bool found = false;
437 
438  for (auto fl = posForwardLayers.begin(); fl != posForwardLayers.end(); ++fl) {
439  if (fabs(disk->position().z() - (**fl).surface().position().z()) < zTolerance) {
440  layerMap_[i->layerNumber()] = *fl;
441  found = true;
442  LogDebug("FastTracker") << "Corresponding DetLayer found with Z pos " << (**fl).surface().position().z()
443  << " and radii " << (**fl).specificSurface().innerRadius() << ", "
444  << (**fl).specificSurface().outerRadius();
445  break;
446  }
447  }
448  if (!found) {
449  LogError("FastTracker") << "FAILED to find a corresponding DetLayer!";
450  }
451  }
452  }
453 }
#define LogDebug(id)
const GeometricSearchTracker * geomSearchTracker_
std::vector< ForwardDetLayer const * > const & posForwardLayers() const
std::list< TrackerLayer >::const_iterator cylinderEnd() const
Returns the last pointer in the cylinder list.
const TrackerInteractionGeometry * geometry_
std::vector< const DetLayer * > layerMap_
std::list< TrackerLayer >::const_iterator cylinderBegin() const
Returns the first pointer in the cylinder list.
std::vector< BarrelDetLayer const * > const & barrelLayers() const
bool ConvBremSeedProducer::isGsfTrack ( const reco::Track tkv,
const TrackingRecHit h 
)
private

Definition at line 472 of file ConvBremSeedProducer.cc.

References TrackingRecHit::all, and reco::Track::recHits().

Referenced by produce().

472  {
473  bool istaken = false;
474  for (auto const& hit : tkv.recHits()) {
475  if (istaken || !hit->isValid())
476  continue;
477  istaken = hit->sharesInput(h, TrackingRecHit::all);
478  }
479  return istaken;
480 }
auto recHits() const
Access to reconstructed hits on the track.
Definition: Track.h:85
TrajectoryStateOnSurface ConvBremSeedProducer::makeTrajectoryState ( const DetLayer layer,
const ParticlePropagator pp,
const MagneticField field 
) const
private

Definition at line 461 of file ConvBremSeedProducer.cc.

References RawParticle::charge(), BaseParticlePropagator::particle(), RawParticle::Px(), RawParticle::Py(), RawParticle::Pz(), GeometricSearchDet::surface(), Surface::tangentPlane(), RawParticle::X(), RawParticle::Y(), and RawParticle::Z().

Referenced by produce().

463  {
464  GlobalPoint pos(pp.particle().X(), pp.particle().Y(), pp.particle().Z());
465  GlobalVector mom(pp.particle().Px(), pp.particle().Py(), pp.particle().Pz());
466 
467  auto plane = layer->surface().tangentPlane(pos);
468 
470  *plane);
471 }
virtual ConstReferenceCountingPointer< TangentPlane > tangentPlane(const GlobalPoint &) const =0
RawParticle const & particle() const
The particle being propagated.
int TrackCharge
Definition: TrackCharge.h:4
double Y() const
y of vertex
Definition: RawParticle.h:287
double Py() const
y of the momentum
Definition: RawParticle.h:300
double Z() const
z of vertex
Definition: RawParticle.h:288
virtual const BoundSurface & surface() const =0
The surface of the GeometricSearchDet.
double Pz() const
z of the momentum
Definition: RawParticle.h:303
double charge() const
get the MEASURED charge
Definition: RawParticle.h:294
double X() const
x of vertex
Definition: RawParticle.h:286
double Px() const
x of the momentum
Definition: RawParticle.h:297
void ConvBremSeedProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivate

INPUT COLLECTIONS

PF CLUSTERS

PIXEL

STRIP

OUTPUT COLLECTION

INITIALIZE

LOOP OVER GSF TRACK COLLECTION

FIND THE CLUSTER ASSOCIATED TO THE GSF TRACK

LOOP OVER BREM PHOTONS

BREM SELECTION

LOOP OVER TRACKER LAYER

TRACKER LAYER SELECTION

FIND COMPATIBLE MODULES

MODULE TRIPLETS SELECTION

SEED CREATION

Definition at line 60 of file ConvBremSeedProducer.cc.

References alongMomentum, AnalyticalPropagator_cfi::AnalyticalPropagator, anyDirection, B_, edmNew::DetSet< T >::begin(), TransientTrackingRecHitBuilder::build(), GlobalTrajectoryParameters::charge(), edm::OwnVector< T, P >::clear(), clone(), GeometricSearchDet::compatibleDets(), conf_, TrackerInteractionGeometry::cylinderBegin(), TrackerInteractionGeometry::cylinderEnd(), detLayer(), edmNew::DetSet< T >::end(), edmNew::DetSetVector< T >::end(), edm::EventID::event(), fieldMap_, spr::find(), dqmdumpme::first, geometry_, edm::EventSetup::get(), edm::Event::getByLabel(), BaseParticlePropagator::getMagneticField(), edm::ParameterSet::getParameter(), BaseParticlePropagator::getSuccess(), GoodCluster(), runTauDisplay::gp, hitBuilder_, mps_fire::i, testProducerWithPsetDescEmpty_cfi::i1, testProducerWithPsetDescEmpty_cfi::i2, testProducerWithPsetDescEmpty_cfi::i3, cuy::ib, edm::EventBase::id(), TrackerGeometry::idToDet(), initializeLayerMap(), isGsfTrack(), GeomDetEnumerators::isTrackerPixel(), TrajectoryStateOnSurface::isValid(), kfUpdator_, LogDebug, magfield_, makeTrajectoryState(), AlignmentTrackSelector_cfi::matchedrecHits, GlobalTrajectoryParameters::momentum(), eostools::move(), MagneticField::nominalValue(), convertSQLitetoXML_cfg::output, AlCaHLTBitMon_ParallelJobs::p, BaseParticlePropagator::particle(), PV3DBase< T, PVType, FrameType >::perp(), trajectoryStateTransform::persistentState(), GlobalTrajectoryParameters::position(), position, edm::Handle< T >::product(), Propagator::propagate(), BaseParticlePropagator::propagate(), propagator_, edm::OwnVector< T, P >::push_back(), edm::Event::put(), AlignmentTrackSelector_cfi::rphirecHits, edm::EventID::run(), ParticlePropagator::setPropagationConditions(), sharedHits(), mathSSE::sqrt(), FastHelix::stateAtVertex(), convBremSeeds_cfi::stereorecHits, DetLayer::subDetector(), GeomDet::surface(), groupFilesInBlocks::temp, createJobs::tmp, Surface::toGlobal(), tracker_, KFUpdator::update(), TrackInfoProducer_cfi::updatedState, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), PV3DBase< T, PVType, FrameType >::z(), and RawParticle::Z().

60  {
61  LogDebug("ConvBremSeedProducerProducer") << "START event: " << iEvent.id().event() << " in run " << iEvent.id().run();
62 
63  float pfmass = 0.0005;
64 
66 
69  iEvent.getByLabel(conf_.getParameter<InputTag>("PFClusters"), PfC);
70  const PFClusterCollection& PPP = *(PfC.product());
71 
74  iEvent.getByLabel(conf_.getParameter<InputTag>("pixelRecHits"), pixelHits);
75 
78  iEvent.getByLabel(conf_.getParameter<InputTag>("rphirecHits"), rphirecHits);
80  iEvent.getByLabel(conf_.getParameter<InputTag>("stereorecHits"), stereorecHits);
82  iEvent.getByLabel(conf_.getParameter<InputTag>("matchedrecHits"), matchedrecHits);
83 
84  //GSFPFRECTRACKS
85  Handle<GsfPFRecTrackCollection> thePfRecTrackCollection;
86  iEvent.getByLabel(conf_.getParameter<InputTag>("PFRecTrackLabel"), thePfRecTrackCollection);
87  const GsfPFRecTrackCollection PfRTkColl = *(thePfRecTrackCollection.product());
88 
90  auto output = std::make_unique<ConvBremSeedCollection>();
91 
93  vector<pair<TrajectorySeed, pair<GlobalVector, float> > > unclean;
94  //TRIPLET OF MODULES TO BE USED FOR SEEDING
95  vector<vector<long int> > tripl;
96  //LAYER MAP
98 
100 
101  for (unsigned int ipft = 0; ipft < PfRTkColl.size(); ipft++) {
102  GsfPFRecTrackRef pft(thePfRecTrackCollection, ipft);
103  LogDebug("ConvBremSeedProducerProducer") << "NEW GsfPFRecTRACK ";
104  float eta_br = 0;
105  unclean.clear();
106  tripl.clear();
107  vector<int> gc;
108  auto const& gsfRecHits = *pft->gsfTrackRef();
109  float pfoutenergy = sqrt((pfmass * pfmass) + pft->gsfTrackRef()->outerMomentum().Mag2());
110  XYZTLorentzVector mom = XYZTLorentzVector(pft->gsfTrackRef()->outerMomentum().x(),
111  pft->gsfTrackRef()->outerMomentum().y(),
112  pft->gsfTrackRef()->outerMomentum().z(),
113  pfoutenergy);
114  XYZTLorentzVector pos = XYZTLorentzVector(pft->gsfTrackRef()->outerPosition().x(),
115  pft->gsfTrackRef()->outerPosition().y(),
116  pft->gsfTrackRef()->outerPosition().z(),
117  0.);
118  BaseParticlePropagator theOutParticle =
119  BaseParticlePropagator(RawParticle(mom, pos, pft->gsfTrackRef()->charge()), 0, 0, B_.z());
120 
122  gc.push_back(GoodCluster(theOutParticle, PPP, 0.5));
123 
124  vector<PFBrem> brem = (*pft).PFRecBrem();
125  vector<PFBrem>::iterator ib = brem.begin();
126  vector<PFBrem>::iterator ib_end = brem.end();
127  LogDebug("ConvBremSeedProducerProducer") << "NUMBER OF BREMS " << brem.size();
128 
130  for (; ib != ib_end; ++ib) {
131  XYZTLorentzVector mom = pft->trajectoryPoint(ib->indTrajPoint()).momentum();
132  XYZTLorentzVector pos = XYZTLorentzVector(pft->trajectoryPoint(ib->indTrajPoint()).position().x(),
133  pft->trajectoryPoint(ib->indTrajPoint()).position().y(),
134  pft->trajectoryPoint(ib->indTrajPoint()).position().z(),
135  0);
136 
138  if (pos.Rho() > 80)
139  continue;
140  if ((pos.Rho() > 5) && (fabs(ib->SigmaDeltaP() / ib->DeltaP()) > 3))
141  continue;
142  if (fabs(ib->DeltaP()) < 3)
143  continue;
144  eta_br = mom.eta();
145  vector<vector<long int> > Idd;
146 
147  BaseParticlePropagator p(RawParticle(mom, pos, 0.), 0, 0, B_.z());
148  gc.push_back(GoodCluster(p, PPP, 0.2));
149 
150  ParticlePropagator PP(p, fieldMap_, nullptr);
151 
153  list<TrackerLayer>::const_iterator cyliter = geometry_->cylinderBegin();
154  for (; cyliter != geometry_->cylinderEnd(); ++cyliter) {
156  if (!(cyliter->sensitive()))
157  continue;
158  PP.setPropagationConditions(*cyliter);
159  PP.propagate();
160  if (PP.getSuccess() == 0)
161  continue;
162 
164  LocalMagneticField mf(PP.getMagneticField());
165  AnalyticalPropagator alongProp(&mf, anyDirection);
167  const DetLayer* tkLayer = detLayer(*cyliter, PP.particle().Z());
168  if (&(*tkLayer) == nullptr)
169  continue;
170  TrajectoryStateOnSurface trajState = makeTrajectoryState(tkLayer, PP, &mf);
171 
172  std::vector<DetWithState> compat = tkLayer->compatibleDets(trajState, alongProp, est);
173  vector<long int> temp;
174  if (compat.empty())
175  continue;
176 
177  for (std::vector<DetWithState>::const_iterator i = compat.begin(); i != compat.end(); i++) {
178  long int detid = i->first->geographicalId().rawId();
179 
181  StDetMatch DetMatch = (rphirecHits.product())->find((detid));
182  MatDetMatch MDetMatch = (matchedrecHits.product())->find((detid));
183 
184  long int DetID = (DetMatch != rphirecHits->end()) ? detid : 0;
185 
186  if ((MDetMatch != matchedrecHits->end()) && !MDetMatch->empty()) {
187  long int pii = MDetMatch->begin()->monoId();
188  StDetMatch CDetMatch = (rphirecHits.product())->find((pii));
189  DetID = (CDetMatch != rphirecHits->end()) ? pii : 0;
190  }
191 
192  temp.push_back(DetID);
193 
194  } else {
195  PiDetMatch DetMatch = (pixelHits.product())->find((detid));
196  long int DetID = (DetMatch != pixelHits->end()) ? detid : 0;
197  temp.push_back(DetID);
198  }
199  }
200 
201  Idd.push_back(temp);
202 
203  } //END TRACKER LAYER LOOP
204  if (Idd.size() < 2)
205  continue;
206 
208  for (unsigned int i = 0; i < Idd.size() - 2; i++) {
209  for (unsigned int i1 = 0; i1 < Idd[i].size(); i1++) {
210  for (unsigned int i2 = 0; i2 < Idd[i + 1].size(); i2++) {
211  for (unsigned int i3 = 0; i3 < Idd[i + 2].size(); i3++) {
212  if ((Idd[i][i1] != 0) && (Idd[i + 1][i2] != 0) && (Idd[i + 2][i3] != 0)) {
213  vector<long int> tmp;
214  tmp.push_back(Idd[i][i1]);
215  tmp.push_back(Idd[i + 1][i2]);
216  tmp.push_back(Idd[i + 2][i3]);
217 
218  bool newTrip = true;
219  for (unsigned int iv = 0; iv < tripl.size(); iv++) {
220  if ((tripl[iv][0] == tmp[0]) && (tripl[iv][1] == tmp[1]) && (tripl[iv][2] == tmp[2]))
221  newTrip = false;
222  }
223  if (newTrip) {
224  tripl.push_back(tmp);
225  }
226  }
227  }
228  }
229  }
230  }
231  } //END BREM LOOP
232 
233  float sineta_brem = sinh(eta_br);
234 
235  //OUTPUT COLLECTION
237  iSetup.get<IdealMagneticFieldRecord>().get(bfield);
238  float nomField = bfield->nominalValue();
239 
241  OwnVector<TrackingRecHit> loc_hits;
242  for (unsigned int i = 0; i < tripl.size(); i++) {
243  StDetMatch DetMatch1 = (rphirecHits.product())->find(tripl[i][0]);
244  StDetMatch DetMatch2 = (rphirecHits.product())->find(tripl[i][1]);
245  StDetMatch DetMatch3 = (rphirecHits.product())->find(tripl[i][2]);
246  if ((DetMatch1 == rphirecHits->end()) || (DetMatch2 == rphirecHits->end()) || (DetMatch3 == rphirecHits->end()))
247  continue;
248  StDetSet DetSet1 = *DetMatch1;
249  StDetSet DetSet2 = *DetMatch2;
250  StDetSet DetSet3 = *DetMatch3;
251 
252  for (StDetSet::const_iterator it1 = DetSet1.begin(); it1 != DetSet1.end(); ++it1) {
253  GlobalPoint gp1 = tracker_->idToDet(tripl[i][0])->surface().toGlobal(it1->localPosition());
254 
255  bool tak1 = isGsfTrack(gsfRecHits, &(*it1));
256 
257  for (StDetSet::const_iterator it2 = DetSet2.begin(); it2 != DetSet2.end(); ++it2) {
258  GlobalPoint gp2 = tracker_->idToDet(tripl[i][1])->surface().toGlobal(it2->localPosition());
259  bool tak2 = isGsfTrack(gsfRecHits, &(*it2));
260 
261  for (StDetSet::const_iterator it3 = DetSet3.begin(); it3 != DetSet3.end(); ++it3) {
262  // ips++;
263  GlobalPoint gp3 = tracker_->idToDet(tripl[i][2])->surface().toGlobal(it3->localPosition());
264  bool tak3 = isGsfTrack(gsfRecHits, &(*it3));
265 
266  FastHelix helix(gp3, gp2, gp1, nomField, &*bfield);
267  GlobalVector gv = helix.stateAtVertex().momentum();
268  GlobalVector gv_corr(gv.x(), gv.y(), gv.perp() * sineta_brem);
269  float ene = sqrt(gv_corr.mag2() + (pfmass * pfmass));
270 
271  GlobalPoint gp = helix.stateAtVertex().position();
272  float ch = helix.stateAtVertex().charge();
273 
274  XYZTLorentzVector mom = XYZTLorentzVector(gv.x(), gv.y(), gv_corr.z(), ene);
275  XYZTLorentzVector pos = XYZTLorentzVector(gp.x(), gp.y(), gp.z(), 0.);
276  BaseParticlePropagator theOutParticle(RawParticle(mom, pos, ch), 0, 0, B_.z());
277  int bgc = GoodCluster(theOutParticle, PPP, 0.3, true);
278 
279  if (gv.perp() < 0.5)
280  continue;
281 
282  if (tak1 + tak2 + tak3 > 2)
283  continue;
284 
285  if (bgc == -1)
286  continue;
287  bool clTak = false;
288  for (unsigned int igcc = 0; igcc < gc.size(); igcc++) {
289  if (clTak)
290  continue;
291  if (bgc == gc[igcc])
292  clTak = true;
293  }
294  if (clTak)
295  continue;
296 
297  GlobalTrajectoryParameters Gtp(gp1, gv, int(ch), &(*magfield_));
298  glob_hits.clear();
299  loc_hits.clear();
300  glob_hits.push_back(hitBuilder_->build(it1->clone()));
301  glob_hits.push_back(hitBuilder_->build(it2->clone()));
302  glob_hits.push_back(hitBuilder_->build(it3->clone()));
303 
305 
308 
309  for (int ih = 0; ih < 3; ih++) {
311  (ih == 0) ? propagator_->propagate(CSeed, tracker_->idToDet(tripl[i][ih])->surface())
312  : propagator_->propagate(updatedState, tracker_->idToDet(tripl[i][ih])->surface());
313 
314  if (!state.isValid()) {
315  ih = 3;
316  continue;
317  }
318 
319  updatedState = kfUpdator_->update(state, *glob_hits[ih]);
320  loc_hits.push_back(glob_hits[ih]->hit()->clone());
321  if (ih == 2) {
322  PTrajectoryStateOnDet const& PTraj =
323  trajectoryStateTransform::persistentState(updatedState, tripl[i][2]);
324  // output->push_back(Trajectoryseed(PTraj,loc_hits,alongMomentum));
325  unclean.push_back(make_pair(TrajectorySeed(PTraj, loc_hits, alongMomentum), make_pair(gv_corr, ch)));
326  }
327  // }
328  }
329  }
330  }
331  }
332  }
333  vector<bool> inPhot = sharedHits(unclean);
334  for (unsigned int iu = 0; iu < unclean.size(); iu++) {
335  if (inPhot[iu])
336  output->push_back(ConvBremSeed(unclean[iu].first, pft));
337  }
338 
339  } //END GSF TRACK COLLECTION LOOP
340  LogDebug("ConvBremSeedProducerProducer") << "END";
341  iEvent.put(std::move(output));
342 }
#define LogDebug(id)
RunNumber_t run() const
Definition: EventID.h:38
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:81
const MagneticField * magfield_
T getParameter(std::string const &) const
EventNumber_t event() const
Definition: EventID.h:40
const TransientTrackingRecHitBuilder * hitBuilder_
const_iterator end(bool update=false) const
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:131
T perp() const
Definition: PV3DBase.h:69
SiStripMatchedRecHit2DCollection::const_iterator MatDetMatch
int nominalValue() const
The nominal field value for this map in kGauss.
Definition: MagneticField.h:49
ROOT::Math::SMatrixIdentity AlgebraicMatrixID
virtual SubDetector subDetector() const =0
The type of detector (PixelBarrel, PixelEndcap, TIB, TOB, TID, TEC, CSC, DT, RPCBarrel, RPCEndcap)
edm::ParameterSet conf_
PTrajectoryStateOnDet persistentState(const TrajectoryStateOnSurface &ts, unsigned int detid)
const PropagatorWithMaterial * propagator_
T y() const
Definition: PV3DBase.h:60
std::list< TrackerLayer >::const_iterator cylinderEnd() const
Returns the last pointer in the cylinder list.
TrajectoryStateOnSurface makeTrajectoryState(const DetLayer *layer, const ParticlePropagator &pp, const MagneticField *field) const
data_type const * const_iterator
Definition: DetSetNew.h:31
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
virtual std::vector< DetWithState > compatibleDets(const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const
SiPixelRecHitCollection::const_iterator PiDetMatch
const KFUpdator * kfUpdator_
const TrackerInteractionGeometry * geometry_
const MagneticFieldMap * fieldMap_
bool isGsfTrack(const reco::Track &, const TrackingRecHit *)
void push_back(D *&d)
Definition: OwnVector.h:326
TrajectoryStateOnSurface update(const TrajectoryStateOnSurface &, const TrackingRecHit &) const override
Definition: KFUpdator.cc:177
math::XYZVector B_
B field.
std::vector< GsfPFRecTrack > GsfPFRecTrackCollection
collection of GsfPFRecTrack objects
T sqrt(T t)
Definition: SSEVec.h:19
T z() const
Definition: PV3DBase.h:61
void clear()
Definition: OwnVector.h:481
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:488
virtual RecHitPointer build(const TrackingRecHit *p) const =0
build a tracking rechit from an existing rechit
SiStripRecHit2DCollection::DetSet StDetSet
std::vector< ConstRecHitPointer > ConstRecHitContainer
std::vector< bool > sharedHits(const std::vector< std::pair< TrajectorySeed, std::pair< GlobalVector, float > > > &)
T const * product() const
Definition: Handle.h:69
const DetLayer * detLayer(const TrackerLayer &layer, float zpos) const
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
std::list< TrackerLayer >::const_iterator cylinderBegin() const
Returns the first pointer in the cylinder list.
TEveGeoShape * clone(const TEveElement *element, TEveElement *parent)
Definition: eve_macros.cc:135
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
Definition: Propagator.h:50
edm::EventID id() const
Definition: EventBase.h:59
static int position[264][3]
Definition: ReadPGInfo.cc:289
T get() const
Definition: EventSetup.h:73
SiStripRecHit2DCollection::const_iterator StDetMatch
const TrackerGeomDet * idToDet(DetId) const override
std::vector< PFCluster > PFClusterCollection
collection of PFCluster objects
Definition: PFClusterFwd.h:9
int GoodCluster(const BaseParticlePropagator &bpg, const reco::PFClusterCollection &pfc, float minep, bool sec=false)
const TrackerGeometry * tracker_
tmp
align.sh
Definition: createJobs.py:716
T x() const
Definition: PV3DBase.h:59
def move(src, dest)
Definition: eostools.py:511
bool isTrackerPixel(GeomDetEnumerators::SubDetector m)
math::XYZTLorentzVector XYZTLorentzVector
Definition: RawParticle.h:25
ib
Definition: cuy.py:662
vector< bool > ConvBremSeedProducer::sharedHits ( const std::vector< std::pair< TrajectorySeed, std::pair< GlobalVector, float > > > &  unclean)
private

Definition at line 481 of file ConvBremSeedProducer.cc.

References TrackingRecHit::all, mps_fire::i, and edm::second().

Referenced by produce().

481  {
482  vector<bool> goodseed;
483  goodseed.clear();
484  if (unclean.size() < 2) {
485  for (unsigned int i = 0; i < unclean.size(); i++)
486  goodseed.push_back(true);
487  } else {
488  for (unsigned int i = 0; i < unclean.size(); i++)
489  goodseed.push_back(true);
490 
491  for (unsigned int iu = 0; iu < unclean.size() - 1; iu++) {
492  if (!goodseed[iu])
493  continue;
494  for (unsigned int iu2 = iu + 1; iu2 < unclean.size(); iu2++) {
495  if (!goodseed[iu])
496  continue;
497  if (!goodseed[iu2])
498  continue;
499  // if (unclean[iu].second.second *unclean[iu2].second.second >0)continue;
500 
501  TrajectorySeed::const_iterator sh = unclean[iu].first.recHits().first;
502  TrajectorySeed::const_iterator sh_end = unclean[iu].first.recHits().second;
503 
504  unsigned int shar = 0;
505  for (; sh != sh_end; ++sh) {
506  TrajectorySeed::const_iterator sh2 = unclean[iu2].first.recHits().first;
507  TrajectorySeed::const_iterator sh2_end = unclean[iu2].first.recHits().second;
508  for (; sh2 != sh2_end; ++sh2) {
509  if ((*sh).sharesInput(&(*sh2), TrackingRecHit::all))
510 
511  shar++;
512  }
513  }
514  if (shar >= 2) {
515  if (unclean[iu].second.first.perp() < unclean[iu2].second.first.perp())
516  goodseed[iu] = false;
517  else
518  goodseed[iu2] = false;
519  }
520  }
521  }
522  }
523  return goodseed;
524 }
U second(std::pair< T, U > const &p)
recHitContainer::const_iterator const_iterator

Member Data Documentation

math::XYZVector ConvBremSeedProducer::B_
private

B field.

Definition at line 83 of file ConvBremSeedProducer.h.

Referenced by beginRun(), and produce().

edm::ParameterSet ConvBremSeedProducer::conf_
private

Definition at line 71 of file ConvBremSeedProducer.h.

Referenced by beginRun(), and produce().

const MagneticFieldMap* ConvBremSeedProducer::fieldMap_
private

Definition at line 76 of file ConvBremSeedProducer.h.

Referenced by beginRun(), and produce().

const TrackerInteractionGeometry* ConvBremSeedProducer::geometry_
private

Definition at line 73 of file ConvBremSeedProducer.h.

Referenced by beginRun(), initializeLayerMap(), and produce().

const GeometricSearchTracker* ConvBremSeedProducer::geomSearchTracker_
private

Definition at line 72 of file ConvBremSeedProducer.h.

Referenced by beginRun(), and initializeLayerMap().

const TransientTrackingRecHitBuilder* ConvBremSeedProducer::hitBuilder_
private

Definition at line 79 of file ConvBremSeedProducer.h.

Referenced by beginRun(), and produce().

const KFUpdator* ConvBremSeedProducer::kfUpdator_
private

Definition at line 78 of file ConvBremSeedProducer.h.

Referenced by beginRun(), endRun(), and produce().

std::vector<const DetLayer*> ConvBremSeedProducer::layerMap_
private

Definition at line 80 of file ConvBremSeedProducer.h.

Referenced by detLayer(), and initializeLayerMap().

const MagneticField* ConvBremSeedProducer::magfield_
private

Definition at line 75 of file ConvBremSeedProducer.h.

Referenced by beginRun(), and produce().

int ConvBremSeedProducer::negLayerOffset_
private

Definition at line 81 of file ConvBremSeedProducer.h.

Referenced by detLayer().

const PropagatorWithMaterial* ConvBremSeedProducer::propagator_
private

Definition at line 77 of file ConvBremSeedProducer.h.

Referenced by beginRun(), endRun(), and produce().

std::vector<const DetLayer*> ConvBremSeedProducer::theLayerMap
private

Definition at line 56 of file ConvBremSeedProducer.h.

const TrackerGeometry* ConvBremSeedProducer::tracker_
private

Definition at line 74 of file ConvBremSeedProducer.h.

Referenced by beginRun(), and produce().