CMS 3D CMS Logo

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

#include <InOutConversionSeedFinder.h>

Inheritance diagram for InOutConversionSeedFinder:
ConversionSeedFinder

Public Member Functions

 InOutConversionSeedFinder (const edm::ParameterSet &config, edm::ConsumesCollector &&iC)
 
void makeSeeds (const edm::Handle< edm::View< reco::CaloCluster > > &allBc) override
 
void setTracks (std::vector< Trajectory > const &in)
 
 ~InOutConversionSeedFinder () override
 
- Public Member Functions inherited from ConversionSeedFinder
void clear ()
 
 ConversionSeedFinder ()
 
 ConversionSeedFinder (const edm::ParameterSet &config, edm::ConsumesCollector &iC)
 
const MeasurementTrackergetMeasurementTracker () const
 
std::vector< const DetLayer * > const & layerList () const
 
TrajectorySeedCollectionseeds ()
 
virtual void setCandidate (float e, GlobalPoint pos)
 
void setEvent (const edm::Event &e)
 
void setEventSetup (const edm::EventSetup &es)
 Initialize EventSetup objects at each event. More...
 
void setMeasurementTracker (const MeasurementTracker *tracker) const
 
void setNavigationSchool (const NavigationSchool *navigation)
 
virtual ~ConversionSeedFinder ()
 

Private Types

typedef FreeTrajectoryState FTS
 
typedef TrajectoryStateOnSurface TSOS
 

Private Member Functions

void completeSeed (const TrajectoryMeasurement &m1, const FreeTrajectoryState &fts, const Propagator *propagator, int ilayer)
 
void createSeed (const TrajectoryMeasurement &m1, const TrajectoryMeasurement &m2)
 
virtual void fillClusterSeeds ()
 
virtual void findSeeds (const TrajectoryStateOnSurface &startingState, float signedpt, unsigned int startingLayer)
 
std::vector< const reco::CaloCluster * > getSecondCaloClusters (const GlobalPoint &conversionPosition, float charge) const
 
void startSeed (const FreeTrajectoryState *fts, const TrajectoryStateOnSurface &stateAtPreviousLayer, int charge, int layer)
 

Private Attributes

edm::Handle< edm::View< reco::CaloCluster > > bcCollection_
 
edm::ParameterSet conf_
 
std::vector< TrajectoryinputTracks_
 
int maxNumberOfInOutSeedsPerInputTrack_
 
TrajectoryMeasurementmyPointer
 
int nSeedsPerInputTrack_
 
float the2ndHitdphi_
 
float the2ndHitdzConst_
 
float the2ndHitdznSigma_
 
std::vector< TrajectoryMeasurementtheFirstMeasurements_
 
std::vector< TrajectorytheOutInTracks_
 
reco::CaloCluster theSecondBC_
 
int track2Charge_
 
GlobalVector track2InitialMomentum_
 

Additional Inherited Members

- Protected Member Functions inherited from ConversionSeedFinder
void findLayers ()
 
void findLayers (const FreeTrajectoryState &fts)
 
void printLayer (int i) const
 
FreeTrajectoryState trackStateFromClusters (int aCharge, const GlobalPoint &gpOrigine, PropagationDirection dir, float scaleFactor) const
 
- Protected Attributes inherited from ConversionSeedFinder
edm::EDGetTokenT< reco::BeamSpotbeamSpotToken_
 
PropagationDirection dir_
 
edm::EDGetTokenT< MeasurementTrackerEventmeasurementTrkToken_
 
float theBCEnergy_
 
GlobalPoint theBCPosition_
 
reco::BeamSpot theBeamSpot_
 
edm::ESHandle< GeometricSearchTrackertheGeomSearchTracker_
 
edm::ESGetToken< GeometricSearchTracker, TrackerRecoGeometryRecordtheGeomSearchTrackerToken_
 
std::vector< const DetLayer * > theLayerList_
 
const MeasurementTrackertheMeasurementTracker_
 
edm::ESGetToken< MeasurementTracker, CkfComponentsRecordtheMeasurementTrackerToken_
 
edm::ESHandle< MagneticFieldtheMF_
 
edm::ESGetToken< MagneticField, IdealMagneticFieldRecordtheMFToken_
 
const NavigationSchooltheNavigationSchool_ = nullptr
 
const PropagatorthePropagatorAlongMomentum_
 
edm::ESGetToken< Propagator, TrackingComponentsRecordthePropagatorAlongMomentumToken_
 
const PropagatorthePropagatorOppositeToMomentum_
 
edm::ESGetToken< Propagator, TrackingComponentsRecordthePropagatorOppositeToMomentumToken_
 
reco::CaloClustertheSC_
 
float theSCenergy_
 
GlobalPoint theSCPosition_
 
TrajectorySeedCollection theSeeds_
 
edm::Handle< MeasurementTrackerEventtheTrackerData_
 
const TrackingGeometrytheTrackerGeom_
 
KFUpdator theUpdator_
 

Detailed Description

Author
Nancy Marinelli, U. of Notre Dame, US

Definition at line 34 of file InOutConversionSeedFinder.h.

Member Typedef Documentation

◆ FTS

Definition at line 36 of file InOutConversionSeedFinder.h.

◆ TSOS

Definition at line 37 of file InOutConversionSeedFinder.h.

Constructor & Destructor Documentation

◆ InOutConversionSeedFinder()

InOutConversionSeedFinder::InOutConversionSeedFinder ( const edm::ParameterSet config,
edm::ConsumesCollector &&  iC 
)

Definition at line 21 of file InOutConversionSeedFinder.cc.

References conf_, edm::ParameterSet::getParameter(), maxNumberOfInOutSeedsPerInputTrack_, the2ndHitdphi_, the2ndHitdzConst_, and the2ndHitdznSigma_.

22  : ConversionSeedFinder(conf, iC), conf_(conf) {
23  // std::cout << " InOutConversionSeedFinder CTOR " << "\n";
24 
25  maxNumberOfInOutSeedsPerInputTrack_ = conf_.getParameter<int>("maxNumOfSeedsInOut");
26  //the2ndHitdphi_ = 0.008;
27  the2ndHitdphi_ = 0.01;
28  the2ndHitdzConst_ = 5.;
29  the2ndHitdznSigma_ = 2.;
30 }
T getParameter(std::string const &) const
Definition: ParameterSet.h:307

◆ ~InOutConversionSeedFinder()

InOutConversionSeedFinder::~InOutConversionSeedFinder ( )
override

Definition at line 32 of file InOutConversionSeedFinder.cc.

32  {
33  //std::cout << " InOutConversionSeedFinder DTOR " << "\n";
34 }

Member Function Documentation

◆ completeSeed()

void InOutConversionSeedFinder::completeSeed ( const TrajectoryMeasurement m1,
const FreeTrajectoryState fts,
const Propagator propagator,
int  ilayer 
)
private

} / end debug

Definition at line 481 of file InOutConversionSeedFinder.cc.

References GeomDetEnumerators::barrel, createSeed(), l1ctLayer1_cff::dr, PVValHelper::dz, ConversionSeedFinder::getMeasurementTracker(), mps_fire::i, nano_mu_digi_cff::layer, ConversionSeedFinder::layerList(), LayerMeasurements::measurements(), ConversionSeedFinder::printLayer(), TrackCandidateProducer_cfi::propagator, rpcPointValidation_cfi::recHit, mathSSE::sqrt(), the2ndHitdphi_, the2ndHitdzConst_, the2ndHitdznSigma_, and ConversionSeedFinder::theTrackerData_.

Referenced by findSeeds().

484  {
485  //std::cout<< "InOutConversionSeedFinder::completeSeed ilayer " << ilayer << "\n";
486  // A seed is made from 2 Trajectory Measuremennts. The 1st is the input
487  // argument m1. This routine looks for the 2nd measurement in layer ilayer
488  // Begin by making a new much stricter MeasurementEstimator based on the
489  // position errors of the 1st hit.
490  printLayer(ilayer);
491 
492  MeasurementEstimator* newEstimator;
493  std::vector<const DetLayer*> allLayers = layerList();
494  const DetLayer* layer = allLayers[ilayer];
495 
497  // if ( layer->location() == GeomDetEnumerators::barrel ) {const BarrelDetLayer * barrelLayer = dynamic_cast<const BarrelDetLayer*>(layer);
498  // //std::cout << "InOutConversionSeedFinder::completeSeed **** Barrel on layer " << ilayer << " R= " << barrelLayer->specificSurface().radius() << "\n";
499  // } else {
500  // const ForwardDetLayer * forwardLayer = dynamic_cast<const ForwardDetLayer*>(layer);
501  // //std::cout << "InOutConversionSeedFinder::completeSeed **** Forw on layer " << ilayer << " Z= " << forwardLayer->specificSurface().position().z() << "\n";
504 
505  if (layer->location() == GeomDetEnumerators::barrel) {
506  float dz = sqrt(the2ndHitdznSigma_ * the2ndHitdznSigma_ * m1.recHit()->globalPositionError().czz() +
509 
510  } else {
511  float m1dr = sqrt(m1.recHit()->localPositionError().yy());
513 
515  }
516 
517  //std::cout << "InOutConversionSeedFinder::completeSeed fts For the TSOS " << fts << "\n";
518 
519  TSOS tsos(fts, layer->surface());
520 
521  if (!tsos.isValid()) {
522  //std::cout << "InOutConversionSeedFinder::completeSeed TSOS is not valid " << "\n";
523  }
524 
525  //std::cout << "InOutConversionSeedFinder::completeSeed TSOS " << tsos << "\n";
526  //std::cout << "InOutConversionSeedFinder::completeSeed propagationDirection " << int(propagator->propagationDirection() ) << "\n";
527  //std::cout << "InOutConversionSeedFinder::completeSeed pointer to estimator " << newEstimator << "\n";
528 
529  LayerMeasurements theLayerMeasurements_(*this->getMeasurementTracker(), *theTrackerData_);
530  std::vector<TrajectoryMeasurement> measurements =
531  theLayerMeasurements_.measurements(*layer, tsos, *propagator, *newEstimator);
532  //std::cout << "InOutConversionSeedFinder::completeSeed Found " << measurements.size() << " second hits " << "\n";
533  delete newEstimator;
534 
535  for (unsigned int i = 0; i < measurements.size(); ++i) {
536  if (measurements[i].recHit()->isValid()) {
537  createSeed(m1, measurements[i]);
538  }
539  }
540 }
void createSeed(const TrajectoryMeasurement &m1, const TrajectoryMeasurement &m2)
T sqrt(T t)
Definition: SSEVec.h:23
void printLayer(int i) const
std::vector< const DetLayer * > const & layerList() const
const MeasurementTracker * getMeasurementTracker() const
edm::Handle< MeasurementTrackerEvent > theTrackerData_

◆ createSeed()

void InOutConversionSeedFinder::createSeed ( const TrajectoryMeasurement m1,
const TrajectoryMeasurement m2 
)
private

Definition at line 542 of file InOutConversionSeedFinder.cc.

References alongMomentum, TrajectoryStateOnSurface::freeTrajectoryState(), TrajectoryStateOnSurface::isValid(), callgraph::m2, maxNumberOfInOutSeedsPerInputTrack_, nSeedsPerInputTrack_, trajectoryStateTransform::persistentState(), Propagator::propagate(), edm::OwnVector< T, P >::push_back(), ConversionSeedFinder::thePropagatorAlongMomentum_, ConversionSeedFinder::theSeeds_, ConversionSeedFinder::theUpdator_, track2Charge_, track2InitialMomentum_, and KFUpdator::update().

Referenced by completeSeed().

542  {
543  //std::cout << "InOutConversionSeedFinder::createSeed " << "\n";
544 
545  if (m1.predictedState().isValid()) {
546  GlobalTrajectoryParameters newgtp(m1.recHit()->globalPosition(), track2InitialMomentum_, track2Charge_, &(*theMF_));
547  CurvilinearTrajectoryError errors = m1.predictedState().curvilinearError();
548  FreeTrajectoryState fts(newgtp, errors);
549 
550  TrajectoryStateOnSurface state1 = thePropagatorAlongMomentum_->propagate(fts, m1.recHit()->det()->surface());
551 
552  /*
553  //std::cout << "hit surface " << m1.recHit()->det()->surface().position() << "\n";
554  //std::cout << "prop to " << typeid( m1.recHit()->det()->surface() ).name() <<"\n";
555  //std::cout << "prop to first hit " << state1 << "\n";
556  //std::cout << "update to " << m1.recHit()->globalPosition() << "\n";
557  */
558 
559  if (state1.isValid()) {
560  TrajectoryStateOnSurface updatedState1 = theUpdator_.update(state1, *m1.recHit());
561 
562  if (updatedState1.isValid()) {
563  TrajectoryStateOnSurface state2 =
564  thePropagatorAlongMomentum_->propagate(*updatedState1.freeTrajectoryState(), m2.recHit()->det()->surface());
565 
566  if (state2.isValid()) {
567  TrajectoryStateOnSurface updatedState2 = theUpdator_.update(state2, *m2.recHit());
568  TrajectoryMeasurement meas1(state1, updatedState1, m1.recHit(), m1.estimate(), m1.layer());
569  TrajectoryMeasurement meas2(state2, updatedState2, m2.recHit(), m2.estimate(), m2.layer());
570 
572  myHits.push_back(meas1.recHit()->hit()->clone());
573  myHits.push_back(meas2.recHit()->hit()->clone());
574 
575  //std::cout << "InOutConversionSeedFinder::createSeed new seed " << "\n";
577  return;
578 
579  PTrajectoryStateOnDet const& ptsod =
580  trajectoryStateTransform::persistentState(state2, meas2.recHit()->hit()->geographicalId().rawId());
581  //std::cout << " InOutConversionSeedFinder::createSeed New seed parameters " << state2 << "\n";
582 
583  theSeeds_.push_back(TrajectorySeed(ptsod, myHits, alongMomentum));
585 
586  //std::cout << "InOutConversionSeedFinder::createSeed New seed hit 1 R " << m1.recHit()->globalPosition().perp() << "\n";
587  //std::cout << "InOutConversionSeedFinder::createSeed New seed hit 2 R " << m2.recHit()->globalPosition().perp() << "\n";
588  }
589  }
590  }
591  }
592 }
const Propagator * thePropagatorAlongMomentum_
PTrajectoryStateOnDet persistentState(const TrajectoryStateOnSurface &ts, unsigned int detid)
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
Definition: Propagator.h:50
TrajectorySeedCollection theSeeds_
void push_back(D *&d)
Definition: OwnVector.h:326
TrajectoryStateOnSurface update(const TrajectoryStateOnSurface &, const TrackingRecHit &) const override
Definition: KFUpdator.cc:177
FreeTrajectoryState const * freeTrajectoryState(bool withErrors=true) const
Definition: errors.py:1

◆ fillClusterSeeds()

void InOutConversionSeedFinder::fillClusterSeeds ( )
privatevirtual

Definition at line 52 of file InOutConversionSeedFinder.cc.

References cms::cuda::assert(), GeomDetEnumerators::barrel, TrajectoryStateOnSurface::freeTrajectoryState(), mps_fire::i, TrackingGeometry::idToDet(), TrajectoryStateOnSurface::isValid(), ConversionSeedFinder::layerList(), EcalCondDBWriter_cfi::location, myPointer, nSeedsPerInputTrack_, ConversionSeedFinder::printLayer(), Propagator::propagate(), TrajectoryMeasurement::recHit(), startSeed(), GeometricSearchDet::surface(), theOutInTracks_, ConversionSeedFinder::thePropagatorOppositeToMomentum_, ConversionSeedFinder::theTrackerGeom_, and TrajectoryMeasurement::updatedState().

Referenced by makeSeeds().

52  {
53  std::vector<Trajectory>::const_iterator outInTrackItr;
54 
55  //std::cout << " InOutConversionSeedFinder::fillClusterSeeds outInTracks_.size " << theOutInTracks_.size() << "\n";
56  //Start looking for seeds for both of the 2 best tracks from the inward tracking
57 
59  /*
60  for(outInTrackItr = theOutInTracks_.begin(); outInTrackItr != theOutInTracks_.end(); ++outInTrackItr) {
61 
62 
63  //std::cout << " InOutConversionSeedFinder::fillClusterSeeds out in input track hits " << (*outInTrackItr).foundHits() << "\n";
64  DetId tmpId = DetId( (*outInTrackItr).seed().startingState().detId());
65  const GeomDet* tmpDet = this->getMeasurementTracker()->geomTracker()->idToDet( tmpId );
66  GlobalVector gv = tmpDet->surface().toGlobal( (*outInTrackItr).seed().startingState().parameters().momentum() );
67 
68 
69  //std::cout << " InOutConversionSeedFinder::fillClusterSeed was built from seed position " <<gv << " charge " << (*outInTrackItr).seed().startingState().parameters().charge() << "\n";
70 
71  Trajectory::DataContainer m= outInTrackItr->measurements();
72  int nHit=0;
73  for (Trajectory::DataContainer::iterator itm = m.begin(); itm != m.end(); ++itm) {
74  if ( itm->recHit()->isValid() ) {
75  nHit++;
76  //std::cout << nHit << ") Valid RecHit global position " << itm->recHit()->globalPosition() << " R " << itm->recHit()->globalPosition().perp() << " phi " << itm->recHit()->globalPosition().phi() << " eta " << itm->recHit()->globalPosition().eta() << "\n";
77  }
78 
79  }
80 
81  }
82 
83  */
84 
85  //Start looking for seeds for both of the 2 best tracks from the inward tracking
86  for (outInTrackItr = theOutInTracks_.begin(); outInTrackItr != theOutInTracks_.end(); ++outInTrackItr) {
87  //std::cout << " InOutConversionSeedFinder::fillClusterSeeds out in input track hits " << (*outInTrackItr).foundHits() << "\n";
89 
90  //Find the first valid hit of the track
91  // Measurements are ordered according to the direction in which the trajectories were built
92  std::vector<TrajectoryMeasurement> measurements = (*outInTrackItr).measurements();
93 
94  std::vector<const DetLayer*> allLayers = layerList();
95 
96  //std::cout << " InOutConversionSeedFinder::fill clusterSeed allLayers.size " << allLayers.size() << "\n";
97  for (unsigned int i = 0; i < allLayers.size(); ++i) {
98  //std::cout << " allLayers " << allLayers[i] << "\n";
99  printLayer(i);
100  }
101 
102  std::vector<const DetLayer*> myLayers;
103  myLayers.clear();
104  std::vector<TrajectoryMeasurement>::reverse_iterator measurementItr;
105  std::vector<TrajectoryMeasurement*> myItr;
106  // TrajectoryMeasurement* myPointer=0;
107  myPointer = nullptr;
108  //std::cout << " InOutConversionSeedFinder::fillClusterSeeds measurements.size " << measurements.size() <<"\n";
109 
110  for (measurementItr = measurements.rbegin(); measurementItr != measurements.rend(); ++measurementItr) {
111  if ((*measurementItr).recHit()->isValid()) {
112  //std::cout << " InOutConversionSeedFinder::fillClusterSeeds measurement on layer " << measurementItr->layer() << " " <<&(*measurementItr) << " position " << measurementItr->recHit()->globalPosition() << " R " << sqrt( measurementItr->recHit()->globalPosition().x()*measurementItr->recHit()->globalPosition().x() + measurementItr->recHit()->globalPosition().y()*measurementItr->recHit()->globalPosition().y() ) << " Z " << measurementItr->recHit()->globalPosition().z() << " phi " << measurementItr->recHit()->globalPosition().phi() << "\n";
113 
114  myLayers.push_back(measurementItr->layer());
115  myItr.push_back(&(*measurementItr));
116  }
117  }
118 
119  //std::cout << " InOutConversionSeedFinder::fillClusterSeed myLayers.size " << myLayers.size() << "\n";
120  // for( unsigned int i = 0; i < myLayers.size(); ++i) {
122  // }
123 
124  if (myItr.empty()) {
125  //std::cout << "HORRENDOUS ERROR! No meas on track!" << "\n";
126  }
127  unsigned int ilayer;
128  for (ilayer = 0; ilayer < allLayers.size(); ++ilayer) {
129  //std::cout << " allLayers in the search loop " << allLayers[ilayer] << " " << myLayers[0] << "\n";
130  if (allLayers[ilayer] == myLayers[0]) {
131  myPointer = myItr[0];
132 
133  //std::cout << " allLayers in the search loop allLayers[ilayer] == myLayers[0]) " << allLayers[ilayer] << " " << myLayers[0] << " myPointer " << myPointer << "\n";
134 
135  //std::cout << "Layer " << ilayer << " contains the first valid measurement " << "\n";
136  printLayer(ilayer);
137 
138  if ((myLayers[0])->location() == GeomDetEnumerators::barrel) {
139  // const BarrelDetLayer * barrelLayer = dynamic_cast<const BarrelDetLayer*>(myLayers[0]);
140  //std::cout << " InOutConversionSeedFinder::fillClusterSeeds **** firstHit found in Barrel on layer " << ilayer << " R= " << barrelLayer->specificSurface().radius() << "\n";
141  } else {
142  //const ForwardDetLayer * forwardLayer = dynamic_cast<const ForwardDetLayer*>(myLayers[0]);
143  //std::cout << " InOutwardConversionSeedFinder::fillClusterSeeds **** firstHit found in Forw on layer " << ilayer << " Z= " << forwardLayer->specificSurface().position().z() << "\n";
144  }
145 
146  break;
147 
148  } else if (allLayers[ilayer] == myLayers[1]) {
149  myPointer = myItr[1];
150 
151  //std::cout << " allLayers in the search loop allLayers[ilayer] == myLayers[1]) " << allLayers[ilayer] << " " << myLayers[1] << " myPointer " << myPointer << "\n";
152 
153  //std::cout << "Layer " << ilayer << " contains the first innermost valid measurement " << "\n";
154  if ((myLayers[1])->location() == GeomDetEnumerators::barrel) {
155  // const BarrelDetLayer * barrelLayer = dynamic_cast<const BarrelDetLayer*>(myLayers[1]);
156  //std::cout << " InOutConversionSeedFinder::fillClusterSeeds **** 2ndHit found in Barrel on layer " << ilayer << " R= " << barrelLayer->specificSurface().radius() << "\n";
157  } else {
158  //const ForwardDetLayer * forwardLayer = dynamic_cast<const ForwardDetLayer*>(myLayers[1]);
159  //std::cout << " InOutwardConversionSeedFinder::fillClusterSeeds **** 2ndHitfound on forw layer " << ilayer << " Z= " << forwardLayer->specificSurface().position().z() << "\n";
160  }
161 
162  break;
163  }
164  }
165 
166  if (ilayer == allLayers.size()) {
167  //std::cout << "InOutConversionSeedFinder::fillClusterSeeds ERROR could not find layer on list" << "\n";
168  return;
169  }
170 
171  //PropagatorWithMaterial reversePropagator(oppositeToMomentum, 0.000511, &(*theMF_) );
172  assert(myPointer);
174 
175  //std::cout << " InOutConversionSeedFinder::fillClusterSeeds First FTS charge " << fts->charge() << " Position " << fts->position() << " momentum " << fts->momentum() << " R " << sqrt(fts->position().x()*fts->position().x() + fts->position().y()* fts->position().y() ) << " Z " << fts->position().z() << " phi " << fts->position().phi() << " fts parameters " << fts->parameters() << "\n";
176 
177  while (ilayer > 0) {
178  //std::cout << " InOutConversionSeedFinder::fillClusterSeeds looking for 2nd seed from layer " << ilayer << "\n";
179 
180  // if ( (allLayers[ilayer])->location() == GeomDetEnumerators::barrel ) {const BarrelDetLayer * barrelLayer = dynamic_cast<const BarrelDetLayer*>(allLayers[ilayer]);
181  //std::cout << " InOutConversionSeedFinder::fillClusterSeeds **** Barrel on layer " << ilayer << " R= " << barrelLayer->specificSurface().radius() << "\n";
182  // } else {
183  //const ForwardDetLayer * forwardLayer = dynamic_cast<const ForwardDetLayer*>(allLayers[ilayer]);
184  //std::cout << " InOutConversionSeedFinder::fillClusterSeeds **** Forw on layer " << ilayer << " Z= " << forwardLayer->specificSurface().position().z() << "\n";
185  // }
186 
187  const DetLayer* previousLayer = allLayers[ilayer];
188  TrajectoryStateOnSurface stateAtPreviousLayer;
189  //std::cout << " InOutConversionSeedFinder::fillClusterSeeds previousLayer->surface() position before " <<allLayers[ilayer] << " " << previousLayer->surface().position() << " layer location " << previousLayer->location() << "\n";
190  // Propagate to the previous layer
191  // The present layer is actually included in the loop so that a partner can be searched for
192  // Applying the propagator to the same layer does not do any harm. It simply does nothing
193 
194  // const Propagator& newProp=thePropagatorOppositeToMomentum_;
195  //std::cout << " InOutConversionSeedFinder::fillClusterSeeds reversepropagator direction " << thePropagatorOppositeToMomentum_->propagationDirection() << "\n";
196  if (ilayer - 1 > 0) {
197  if (allLayers[ilayer] == myLayers[0]) {
198  //std::cout << " innermost hit R " << myPointer->recHit()->globalPosition().perp() << " Z " << myPointer->recHit()->globalPosition().z() << " phi " <<myPointer->recHit()->globalPosition().phi() << "\n";
199  //std::cout << " surface R " << theTrackerGeom_->idToDet( myPointer->recHit() ->geographicalId())->surface().position().perp() << " Z " << theTrackerGeom_->idToDet( myPointer->recHit() ->geographicalId())->surface().position().z() << " phi " << theTrackerGeom_->idToDet( myPointer->recHit() ->geographicalId())->surface().position().phi() << "\n";
200 
201  stateAtPreviousLayer = thePropagatorOppositeToMomentum_->propagate(
202  *fts, theTrackerGeom_->idToDet(myPointer->recHit()->geographicalId())->surface());
203 
204  } else {
205  stateAtPreviousLayer = thePropagatorOppositeToMomentum_->propagate(*fts, previousLayer->surface());
206  //std::cout << " InOutConversionSeedFinder::fillClusterSeeds previousLayer->surface() position after " << previousLayer->surface().position() << " layer location " << previousLayer->location() << "\n";
207  }
208 
209  } else if (ilayer - 1 == 0) {
212 
213  //stateAtPreviousLayer= thePropagatorOppositeToMomentum_->propagate(*fts, theTrackerGeom_->idToDet( myPointer->recHit() ->geographicalId())->surface() );
214  stateAtPreviousLayer = thePropagatorOppositeToMomentum_->propagate(*fts, previousLayer->surface());
215  }
216 
217  if (!stateAtPreviousLayer.isValid()) {
218  //std::cout << "InOutConversionSeedFinder::fillClusterSeeds ERROR:could not propagate back to layer " << ilayer << "\n";
220  } else {
221  //std::cout << "InOutConversionSeedFinder::fillClusterSeeds stateAtPreviousLayer is valid. Propagating back to layer " << ilayer << "\n";
222  //std::cout << "InOutConversionSeedFinder::fillClusterSeeds stateAtPreviousLayer R " << stateAtPreviousLayer.globalPosition().perp() << " Z " << stateAtPreviousLayer.globalPosition().z() << " phi " << stateAtPreviousLayer.globalPosition().phi() << "\n";
223 
224  startSeed(fts, stateAtPreviousLayer, -1, ilayer);
225  }
226 
227  --ilayer;
228  }
229 
230  if (ilayer == 0) {
231  // if ( (allLayers[ilayer])->location() == GeomDetEnumerators::barrel ) {const BarrelDetLayer * barrelLayer = dynamic_cast<const BarrelDetLayer*>(allLayers[ilayer]);
232  // //std::cout << " InOutConversionSeedFinder::fillClusterSeeds **** Barrel on layer " << ilayer << " R= " << barrelLayer->specificSurface().radius() << "\n";
233  // } else {
234  //const ForwardDetLayer * forwardLayer = dynamic_cast<const ForwardDetLayer*>(allLayers[ilayer]);
235  //std::cout << " InOutConversionSeedFinder::fillClusterSeeds **** Forw on layer " << ilayer << " Z= " << forwardLayer->specificSurface().position().z() << "\n";
236  // }
237  const DetLayer* previousLayer = allLayers[ilayer];
238  TrajectoryStateOnSurface stateAtPreviousLayer;
239  stateAtPreviousLayer = thePropagatorOppositeToMomentum_->propagate(*fts, previousLayer->surface());
240 
241  if (!stateAtPreviousLayer.isValid()) {
242  //std::cout << "InOutConversionSeedFinder::fillClusterSeeds ERROR:could not propagate back to layer " << ilayer << "\n";
244  } else {
245  //std::cout << "InOutConversionSeedFinder::fillClusterSeeds stateAtPreviousLayer is valid. Propagating back to layer " << ilayer << "\n";
246  //std::cout << "InOutConversionSeedFinder::fillClusterSeeds stateAtPreviousLayer R " << stateAtPreviousLayer.globalPosition().perp() << " Z " << stateAtPreviousLayer.globalPosition().z() << " phi " << stateAtPreviousLayer.globalPosition().phi() << "\n";
247 
248  startSeed(fts, stateAtPreviousLayer, -1, ilayer);
249  }
250  }
251 
252  } // End loop over Out In tracks
253 }
virtual const BoundSurface & surface() const =0
The surface of the GeometricSearchDet.
assert(be >=bs)
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
Definition: Propagator.h:50
const Propagator * thePropagatorOppositeToMomentum_
TrajectoryMeasurement * myPointer
FreeTrajectoryState const * freeTrajectoryState(bool withErrors=true) const
const TrackingGeometry * theTrackerGeom_
void startSeed(const FreeTrajectoryState *fts, const TrajectoryStateOnSurface &stateAtPreviousLayer, int charge, int layer)
virtual const GeomDet * idToDet(DetId) const =0
TrajectoryStateOnSurface const & updatedState() const
void printLayer(int i) const
std::vector< const DetLayer * > const & layerList() const
std::vector< Trajectory > theOutInTracks_
ConstRecHitPointer const & recHit() const

◆ findSeeds()

void InOutConversionSeedFinder::findSeeds ( const TrajectoryStateOnSurface startingState,
float  signedpt,
unsigned int  startingLayer 
)
privatevirtual

Rememeber that this alwyas give back at least one dummy-innvalid it which prevents from everything getting stopped

Definition at line 320 of file InOutConversionSeedFinder.cc.

References GeomDetEnumerators::barrel, completeSeed(), DeadROC_duringRun::dir, ConversionSeedFinder::getMeasurementTracker(), TrajectoryStateOnSurface::globalDirection(), TrajectoryStateOnSurface::globalPosition(), nano_mu_digi_cff::layer, ConversionSeedFinder::layerList(), visualization-live-secondInstance_cfg::m, myPointer, reco::CaloCluster::position(), TrajectoryMeasurement::recHit(), ConversionFastHelix::stateAtVertex(), theFirstMeasurements_, ConversionSeedFinder::thePropagatorAlongMomentum_, theSecondBC_, ConversionSeedFinder::theTrackerData_, track2InitialMomentum_, x, y, z, and OfflinePixel3DPrimaryVertices_cfi::zrange.

Referenced by startSeed().

322  {
323  std::vector<const DetLayer*> allLayers = layerList();
324  //std::cout << "InOutConversionSeedFinder::findSeeds starting forward propagation from startingLayer " << startingLayer << "\n";
325 
326  // create error matrix
328  m(0, 0) = 0.1;
329  m(1, 1) = 0.0001;
330  m(2, 2) = 0.0001;
331  m(3, 3) = 0.0001;
332  m(4, 4) = 0.001;
333 
334  // Make an FTS consistent with the start point, start direction and curvature
337  startingState.globalPosition(), startingState.globalDirection(), double(transverseCurvature), 0, &(*theMF_)),
339  if (fts.momentum().mag2() == 0) {
340  edm::LogWarning("FailedToInitiateSeeding")
341  << " initial FTS has a zero momentum, probably because of the zero field. ";
342  return;
343  }
344  //std::cout << " InOutConversionSeedFinder::findSeeds startingState R "<< startingState.globalPosition().perp() << " Z " << startingState.globalPosition().z() << " phi " << startingState.globalPosition().phi() << " position " << startingState.globalPosition() << "\n";
345  //std::cout << " InOutConversionSeedFinder::findSeeds Initial FTS charge " << fts.charge() << " curvature " << transverseCurvature << "\n";
346  //std::cout << " InOutConversionSeedFinder::findSeeds Initial FTS parameters " << fts << "\n";
347 
348  //float dphi = 0.01;
349  float dphi = 0.03;
350  float zrange = 5.;
351  for (unsigned int ilayer = startingLayer; ilayer <= startingLayer + 1 && (ilayer < allLayers.size() - 2); ++ilayer) {
352  const DetLayer* layer = allLayers[ilayer];
353 
355  // if ( layer->location() == GeomDetEnumerators::barrel ) {const BarrelDetLayer * barrelLayer = dynamic_cast<const BarrelDetLayer*>(layer);
356  // //std::cout << "InOutConversionSeedFinder::findSeeds **** Barrel on layer " << ilayer << " R= " << barrelLayer->specificSurface().radius() << "\n";
357  // } else {
358  // const ForwardDetLayer * forwardLayer = dynamic_cast<const ForwardDetLayer*>(layer);
360  // }
361  // // end debug
362 
363  MeasurementEstimator* newEstimator = nullptr;
364  if (layer->location() == GeomDetEnumerators::barrel) {
365  //std::cout << "InOutConversionSeedFinder::findSeeds Barrel ilayer " << ilayer << "\n";
366  newEstimator = new ConversionBarrelEstimator(-dphi, dphi, -zrange, zrange);
367  } else {
368  //std::cout << "InOutConversionSeedFinder::findSeeds Forward ilayer " << ilayer << "\n";
369  newEstimator = new ConversionForwardEstimator(-dphi, dphi, 15.);
370  }
371 
372  theFirstMeasurements_.clear();
373  // Get measurements compatible with the FTS and Estimator
374  TSOS tsos(fts, layer->surface());
375 
376  //std::cout << "InOutConversionSeedFinder::findSeed propagationDirection " << int(thePropagatorAlongMomentum_->propagationDirection() ) << "\n";
378  LayerMeasurements theLayerMeasurements_(*this->getMeasurementTracker(), *theTrackerData_);
379 
381  theLayerMeasurements_.measurements(*layer, tsos, *thePropagatorAlongMomentum_, *newEstimator);
382 
383  delete newEstimator;
384  //std::cout << "InOutConversionSeedFinder::findSeeds Found " << theFirstMeasurements_.size() << " first hits" << "\n";
385 
386  if (theFirstMeasurements_.size() ==
387  1) { // only dummy hit found: start finding the seed from the innermost hit of the OutIn track
388 
390  GlobalVector dir = startingState.globalDirection();
391  GlobalPoint back1mm = myPointer->recHit()->globalPosition();
392 
393  back1mm -= dir.unit() * 0.1;
394  //std::cout << " InOutConversionSeedFinder:::findSeeds going to make the helix using back1mm " << back1mm << "\n";
395  ConversionFastHelix helix(bcPos, myPointer->recHit()->globalPosition(), back1mm, &(*theMF_));
396 
397  helix.stateAtVertex();
398  //std::cout << " InOutConversionSeedFinder:::findSeeds helix status " <<helix.isValid() << std::endl;
399  if (!helix.isValid())
400  continue;
401 
402  track2InitialMomentum_ = helix.stateAtVertex().momentum();
403 
404  // Make a new FTS
406  startingState.globalDirection(),
407  helix.stateAtVertex().transverseCurvature(),
408  0,
409  &(*theMF_)),
411 
412  completeSeed(*myPointer, newfts, thePropagatorAlongMomentum_, ilayer + 1);
413  completeSeed(*myPointer, newfts, thePropagatorAlongMomentum_, ilayer + 2);
414 
415  } else {
416  //Loop over compatible hits
417  for (std::vector<TrajectoryMeasurement>::iterator tmItr = theFirstMeasurements_.begin();
418  tmItr != theFirstMeasurements_.end();
419  ++tmItr) {
420  if (tmItr->recHit()->isValid()) {
421  // Make a new helix as in fillClusterSeeds() but using the hit position
422  //std::cout << "InOutConversionSeedFinder::findSeeds hit R " << tmItr->recHit()->globalPosition().perp() << " Z " << tmItr->recHit()->globalPosition().z() << " " << tmItr->recHit()->globalPosition() << "\n";
423  GlobalPoint bcPos(
425  GlobalVector dir = startingState.globalDirection();
426  GlobalPoint back1mm = tmItr->recHit()->globalPosition();
427 
428  back1mm -= dir.unit() * 0.1;
429  //std::cout << " InOutConversionSeedFinder:::findSeeds going to make the helix using back1mm " << back1mm << "\n";
430  ConversionFastHelix helix(bcPos, tmItr->recHit()->globalPosition(), back1mm, &(*theMF_));
431 
432  helix.stateAtVertex();
433  //std::cout << " InOutConversionSeedFinder:::findSeeds helix status " <<helix.isValid() << std::endl;
434  if (!helix.isValid())
435  continue;
436 
437  track2InitialMomentum_ = helix.stateAtVertex().momentum();
438 
439  //std::cout << "InOutConversionSeedFinder::findSeeds Updated estimatedPt = " << helix.stateAtVertex().momentum().perp() << " curvature " << helix.stateAtVertex().transverseCurvature() << "\n";
440  // << ", bcet = " << theBc->Et()
441  // << ", estimatedPt/bcet = " << estimatedPt/theBc->Et() << endl;
442 
443  // Make a new FTS
444  FreeTrajectoryState newfts(GlobalTrajectoryParameters(tmItr->recHit()->globalPosition(),
445  startingState.globalDirection(),
446  helix.stateAtVertex().transverseCurvature(),
447  0,
448  &(*theMF_)),
450 
451  //std::cout << "InOutConversionSeedFinder::findSeeds new FTS charge " << newfts.charge() << "\n";
452 
453  /*
454  // Soome diagnostic output
455  // may be useful - comparission of the basic cluster position
456  // with the ecal impact position of the track
457  TrajectoryStateOnSurface stateAtECAL
458  = forwardPropagator.propagate(newfts, ECALSurfaces::barrel());
459  if (!stateAtECAL.isValid() || abs(stateAtECAL.globalPosition().eta())>1.479) {
460  if (startingState.globalDirection().eta() > 0.) {
461  stateAtECAL = forwardPropagator.propagate(newfts,
462  ECALSurfaces::positiveEtaEndcap());
463  } else {
464  stateAtECAL = forwardPropagator.propagate(newfts,
465  ECALSurfaces::negativeEtaEndcap());
466  }
467  }
468  GlobalPoint ecalImpactPosition = stateAtECAL.isValid() ? stateAtECAL.globalPosition() : GlobalPoint(0.,0.,0.);
469  cout << "Projected fts positon at ECAL surface: " <<
470  ecalImpactPosition << " bc position: " << theBc->Position() << endl;
471  */
472 
473  completeSeed(*tmItr, newfts, thePropagatorAlongMomentum_, ilayer + 1);
474  completeSeed(*tmItr, newfts, thePropagatorAlongMomentum_, ilayer + 2);
475  }
476  }
477  }
478  }
479 }
const math::XYZPoint & position() const
cluster centroid position
Definition: CaloCluster.h:154
const Propagator * thePropagatorAlongMomentum_
ROOT::Math::SMatrixIdentity AlgebraicMatrixID
std::vector< TrajectoryMeasurement > theFirstMeasurements_
TrajectoryMeasurement * myPointer
GlobalPoint globalPosition() const
GlobalVector globalDirection() const
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
void completeSeed(const TrajectoryMeasurement &m1, const FreeTrajectoryState &fts, const Propagator *propagator, int ilayer)
std::vector< const DetLayer * > const & layerList() const
const MeasurementTracker * getMeasurementTracker() const
Log< level::Warning, false > LogWarning
edm::Handle< MeasurementTrackerEvent > theTrackerData_
ConstRecHitPointer const & recHit() const

◆ getSecondCaloClusters()

std::vector< const reco::CaloCluster * > InOutConversionSeedFinder::getSecondCaloClusters ( const GlobalPoint conversionPosition,
float  charge 
) const
private

Definition at line 301 of file InOutConversionSeedFinder.cc.

References funct::abs(), bcCollection_, ALCARECOTkAlJpsiMuMu_cff::charge, PV3DBase< T, PVType, FrameType >::phi(), and mps_fire::result.

Referenced by startSeed().

302  {
303  std::vector<const reco::CaloCluster*> result;
304 
305  Geom::Phi<float> convPhi(conversionPosition.phi());
306 
307  for (auto const& bc : *bcCollection_) {
308  Geom::Phi<float> bcPhi(bc.position().phi());
309 
310  // Require phi of cluster to be consistent with the conversion position and the track charge
311 
312  if (std::abs(bcPhi - convPhi) < .5 &&
313  ((charge < 0 && bcPhi - convPhi > -.5) || (charge > 0 && bcPhi - convPhi < .5)))
314  result.push_back(&bc);
315  }
316 
317  return result;
318 }
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
edm::Handle< edm::View< reco::CaloCluster > > bcCollection_

◆ makeSeeds()

void InOutConversionSeedFinder::makeSeeds ( const edm::Handle< edm::View< reco::CaloCluster > > &  allBc)
overridevirtual

Implements ConversionSeedFinder.

Definition at line 36 of file InOutConversionSeedFinder.cc.

References bcCollection_, fillClusterSeeds(), ConversionSeedFinder::findLayers(), inputTracks_, theFirstMeasurements_, theOutInTracks_, and ConversionSeedFinder::theSeeds_.

Referenced by ConversionTrackCandidateProducer::buildCollections().

36  {
37  //std::cout << " InOutConversionSeedFinder::makeSeeds() " << "\n";
38  theSeeds_.clear();
39  //std::cout << " Check Calo cluster collection size " << allBC->size() << "\n";
40  bcCollection_ = allBC;
41 
42  findLayers();
43 
45  //std::cout << "Built vector of seeds of size " << theSeeds_.size() << "\n" ;
46 
47  theOutInTracks_.clear();
48  inputTracks_.clear();
49  theFirstMeasurements_.clear();
50 }
std::vector< TrajectoryMeasurement > theFirstMeasurements_
TrajectorySeedCollection theSeeds_
std::vector< Trajectory > inputTracks_
edm::Handle< edm::View< reco::CaloCluster > > bcCollection_
std::vector< Trajectory > theOutInTracks_

◆ setTracks()

void InOutConversionSeedFinder::setTracks ( std::vector< Trajectory > const &  in)
inline

◆ startSeed()

void InOutConversionSeedFinder::startSeed ( const FreeTrajectoryState fts,
const TrajectoryStateOnSurface stateAtPreviousLayer,
int  charge,
int  layer 
)
private

Definition at line 255 of file InOutConversionSeedFinder.cc.

References ALCARECOTkAlJpsiMuMu_cff::charge, FreeTrajectoryState::charge(), DeadROC_duringRun::dir, findSeeds(), getSecondCaloClusters(), TrajectoryStateOnSurface::globalDirection(), TrajectoryStateOnSurface::globalPosition(), reco::CaloCluster::position(), ConversionFastHelix::stateAtVertex(), theSecondBC_, track2Charge_, TrajectoryStateOnSurface::transverseCurvature(), x, y, and z.

Referenced by fillClusterSeeds().

258  {
259  //std::cout << "InOutConversionSeedFinder::startSeed ilayer " << ilayer << "\n";
260  // Get a list of basic clusters that are consistent with a track
261  // starting at the assumed conversion point with opp. charge to the
262  // inward track. Loop over these basic clusters.
263  track2Charge_ = charge * fts->charge();
264  std::vector<const reco::CaloCluster*> bcVec;
265  //std::cout << "InOutConversionSeedFinder::startSeed charge assumed for the in-out track " << track2Charge_ << "\n";
266 
267  // Geom::Phi<float> theConvPhi( stateAtPreviousLayer.globalPosition().phi());
268  //std::cout << "InOutConversionSeedFinder::startSeed stateAtPreviousLayer phi " << stateAtPreviousLayer.globalPosition().phi() << " R " << stateAtPreviousLayer.globalPosition().perp() << " Z " << stateAtPreviousLayer.globalPosition().z() << "\n";
269 
270  bcVec = getSecondCaloClusters(stateAtPreviousLayer.globalPosition(), track2Charge_);
271 
272  std::vector<const reco::CaloCluster*>::iterator bcItr;
273  //std::cout << "InOutConversionSeedFinder::startSeed bcVec.size " << bcVec.size() << "\n";
274 
275  // debug
276  // for(bcItr = bcVec.begin(); bcItr != bcVec.end(); ++bcItr) {
277  // //std::cout << "InOutConversionSeedFinder::startSeed list of bc eta " << (*bcItr)->position().eta() << " phi " << (*bcItr)->position().phi() << " x " << (*bcItr)->position().x() << " y " << (*bcItr)->position().y() << " z " << (*bcItr)->position().z() << "\n";
278  // }
279 
280  for (bcItr = bcVec.begin(); bcItr != bcVec.end(); ++bcItr) {
281  theSecondBC_ = **bcItr;
283 
284  //std::cout << "InOutConversionSeedFinder::startSeed for bc position x " << bcPos.x() << " y " << bcPos.y() << " z " << bcPos.z() << " eta " << bcPos.eta() << " phi " << bcPos.phi() << "\n";
285  GlobalVector dir = stateAtPreviousLayer.globalDirection();
286  GlobalPoint back1mm = stateAtPreviousLayer.globalPosition();
287  //std::cout << "InOutConversionSeedFinder::startSeed stateAtPreviousLayer.globalPosition() " << back1mm << "\n";
288 
289  back1mm -= dir.unit() * 0.1;
290  //std::cout << " InOutConversionSeedFinder:::startSeed going to make the helix using back1mm " << back1mm <<"\n";
291  ConversionFastHelix helix(bcPos, stateAtPreviousLayer.globalPosition(), back1mm, &(*theMF_));
292  helix.stateAtVertex();
293 
294  //std::cout << " InOutConversionSeedFinder:::startSeed helix status " <<helix.isValid() << std::endl;
295  if (!helix.isValid())
296  continue;
297  findSeeds(stateAtPreviousLayer, helix.stateAtVertex().transverseCurvature(), ilayer);
298  }
299 }
const math::XYZPoint & position() const
cluster centroid position
Definition: CaloCluster.h:154
std::vector< const reco::CaloCluster * > getSecondCaloClusters(const GlobalPoint &conversionPosition, float charge) const
GlobalPoint globalPosition() const
TrackCharge charge() const
GlobalVector globalDirection() const
virtual void findSeeds(const TrajectoryStateOnSurface &startingState, float signedpt, unsigned int startingLayer)

Member Data Documentation

◆ bcCollection_

edm::Handle<edm::View<reco::CaloCluster> > InOutConversionSeedFinder::bcCollection_
private

Definition at line 81 of file InOutConversionSeedFinder.h.

Referenced by getSecondCaloClusters(), and makeSeeds().

◆ conf_

edm::ParameterSet InOutConversionSeedFinder::conf_
private

Definition at line 49 of file InOutConversionSeedFinder.h.

Referenced by InOutConversionSeedFinder().

◆ inputTracks_

std::vector<Trajectory> InOutConversionSeedFinder::inputTracks_
private

Definition at line 76 of file InOutConversionSeedFinder.h.

Referenced by makeSeeds().

◆ maxNumberOfInOutSeedsPerInputTrack_

int InOutConversionSeedFinder::maxNumberOfInOutSeedsPerInputTrack_
private

Definition at line 72 of file InOutConversionSeedFinder.h.

Referenced by createSeed(), and InOutConversionSeedFinder().

◆ myPointer

TrajectoryMeasurement* InOutConversionSeedFinder::myPointer
private

Definition at line 74 of file InOutConversionSeedFinder.h.

Referenced by fillClusterSeeds(), and findSeeds().

◆ nSeedsPerInputTrack_

int InOutConversionSeedFinder::nSeedsPerInputTrack_
private

Definition at line 71 of file InOutConversionSeedFinder.h.

Referenced by createSeed(), and fillClusterSeeds().

◆ the2ndHitdphi_

float InOutConversionSeedFinder::the2ndHitdphi_
private

Definition at line 66 of file InOutConversionSeedFinder.h.

Referenced by completeSeed(), and InOutConversionSeedFinder().

◆ the2ndHitdzConst_

float InOutConversionSeedFinder::the2ndHitdzConst_
private

Definition at line 67 of file InOutConversionSeedFinder.h.

Referenced by completeSeed(), and InOutConversionSeedFinder().

◆ the2ndHitdznSigma_

float InOutConversionSeedFinder::the2ndHitdznSigma_
private

Definition at line 68 of file InOutConversionSeedFinder.h.

Referenced by completeSeed(), and InOutConversionSeedFinder().

◆ theFirstMeasurements_

std::vector<TrajectoryMeasurement> InOutConversionSeedFinder::theFirstMeasurements_
private

Definition at line 78 of file InOutConversionSeedFinder.h.

Referenced by findSeeds(), and makeSeeds().

◆ theOutInTracks_

std::vector<Trajectory> InOutConversionSeedFinder::theOutInTracks_
private

Definition at line 77 of file InOutConversionSeedFinder.h.

Referenced by fillClusterSeeds(), makeSeeds(), and setTracks().

◆ theSecondBC_

reco::CaloCluster InOutConversionSeedFinder::theSecondBC_
private

Definition at line 80 of file InOutConversionSeedFinder.h.

Referenced by findSeeds(), and startSeed().

◆ track2Charge_

int InOutConversionSeedFinder::track2Charge_
private

Definition at line 69 of file InOutConversionSeedFinder.h.

Referenced by createSeed(), and startSeed().

◆ track2InitialMomentum_

GlobalVector InOutConversionSeedFinder::track2InitialMomentum_
private

Definition at line 70 of file InOutConversionSeedFinder.h.

Referenced by createSeed(), and findSeeds().