29 LogDebug(
"NuclearSeedGenerator") <<
"New NuclearInteractionFinder instance with parameters : \n" 30 <<
"maxHits : " <<
maxHits <<
"\n" 46 LogDebug(
"NuclearSeedGenerator") <<
"Analyzis of a new trajectory with a number of valid hits = " << traj.
foundHits();
48 std::vector<TrajectoryMeasurement> measurements = traj.
measurements();
60 std::vector<TrajectoryMeasurement>::const_iterator it_meas = measurements.begin();
62 std::vector<double> ncompatibleHits;
67 if (it_meas == measurements.end())
77 <<
"Mean distance between hits :" <<
nuclTester->meanHitDistance() <<
"\n" 78 <<
"Forward estimate :" <<
nuclTester->fwdEstimate() <<
"\n";
91 LogDebug(
"NuclearSeedGenerator") <<
"NUCLEAR INTERACTION FOUND at index : " <<
nuclTester->nuclearIndex() <<
"\n";
108 for (
int i = 0;
i < 3;
i++) {
109 pt[
i] = (it_meas->updatedState()).globalParameters().position();
118 LogDebug(
"NuclearSeedGenerator") <<
"currentState :" << currentState <<
"\n";
130 vector<const DetLayer*> nl;
135 edm::LogError(
"NuclearInteractionFinder") <<
"In findCompatibleMeasurements : lastLayer not accessible";
140 LogDebug(
"NuclearSeedGenerator") <<
"In findCompatibleMeasurements : no compatible layer found";
144 for (vector<const DetLayer*>::iterator il = nl.begin(); il != nl.end(); il++) {
169 const TM& innerTM = tmPairs.first;
170 const std::vector<TM>& outerTMs = tmPairs.second;
173 for (std::vector<TM>::const_iterator outtm = outerTMs.begin(); outtm != outerTMs.end(); outtm++) {
178 LogDebug(
"NuclearSeedGenerator") <<
"The initial hits for seeding are invalid" 185 auto output = std::make_unique<TrajectorySeedCollection>();
186 for (std::vector<SeedFromNuclearInteraction>::const_iterator it_seed =
allSeeds.begin(); it_seed !=
allSeeds.end();
188 if (it_seed->isValid()) {
189 output->push_back(it_seed->TrajSeed());
191 LogDebug(
"NuclearSeedGenerator") <<
"The seed is invalid" 198 std::vector<SeedFromNuclearInteraction> newSeedCollection;
203 for (std::vector<SeedFromNuclearInteraction>::const_iterator it_seed =
allSeeds.begin(); it_seed !=
allSeeds.end();
205 if (!it_seed->isValid())
209 std::vector<TM> thirdTMs =
213 for (std::vector<TM>::const_iterator tm = thirdTMs.begin(); tm != thirdTMs.end(); tm++) {
214 if (!tm->recHit()->isValid())
235 mr(1, 1) = 1E-2 * rescale * rescale;
236 mr(2, 2) = 1E-2 * rescale * rescale;
242 return TSOS(ltp,
mr,
state.surface(), &(
state.globalParameters().magneticField()),
state.surfaceSide());
std::unique_ptr< TangentHelix > thePrimaryHelix
std::unique_ptr< TrajectorySeedCollection > getPersistentSeeds()
Fill 'output' with persistent nuclear seeds.
const bool isValid(const Frame &aFrame, const FrameQuality &aQuality, const uint16_t aExpectedPos)
float signedInverseMomentum() const
Signed inverse momentum q/p (zero for neutrals).
const DetLayer * detLayer(const DetId &id) const
obsolete method. Use idToLayer() instead.
bool run(const Trajectory &traj, const MeasurementTrackerEvent &event)
Run the Finder.
void improveSeeds(const MeasurementTrackerEvent &event)
Improve the seeds with a third RecHit.
std::unique_ptr< SeedFromNuclearInteraction > currentSeed
Log< level::Error, false > LogError
std::unique_ptr< NuclearTester > nuclTester
DataContainer const & measurements() const
PropagationDirection const & direction() const
const MeasurementTracker * theMeasurementTracker
std::vector< const DetLayer * > nextLayers(const DetLayer &detLayer, Args &&... args) const
const NavigationSchool * theNavigationSchool
const Propagator * thePropagator
const MeasurementEstimator * theEstimator
std::vector< SeedFromNuclearInteraction > allSeeds
std::vector< TrajectoryMeasurement > findMeasurementsFromTSOS(const TSOS ¤tState, DetId detid, const LayerMeasurements &layerMeasurements) const
std::vector< TrajectoryMeasurement > findCompatibleMeasurements(const TM &lastMeas, double rescaleFactor, const LayerMeasurements &layerMeasurements) const
Find compatible TM of a TM with error rescaled by rescaleFactor.
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
bool empty() const
True if trajectory has no measurements.
TrajectoryStateOnSurface const & updatedState() const
const GeometricSearchTracker * theGeomSearchTracker
TrajectoryStateOnSurface TSOS
void fillSeeds(const std::pair< TrajectoryMeasurement, std::vector< TrajectoryMeasurement > > &tmPairs)
get the seeds at the interaction point
FreeTrajectoryState const * freeState(bool withErrors=true) const
std::vector< TrajectoryMeasurement > measurements(const DetLayer &layer, const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const
NuclearInteractionFinder(const Config &iConfig, const TrackerGeometry *theTrckerGeom, const Propagator *thePropagator, const MeasurementEstimator *theEstimator, const MeasurementTracker *theMeasurementTracker, const GeometricSearchTracker *theGeomSearchTracker, const NavigationSchool *theNavigationSchool)
TrajectoryStateOnSurface rescaleError(float rescale, const TSOS &state) const
void definePrimaryHelix(std::vector< TrajectoryMeasurement >::const_iterator it_meas)
Calculate the parameters of the circle representing the primary track at the interaction point...
ConstRecHitPointer const & recHit() const
double rescaleErrorFactor