21 maxHits(iConfig.getParameter<int>(
"maxHits")),
22 rescaleErrorFactor(iConfig.getParameter<double>(
"rescaleErrorFactor")),
23 checkCompletedTrack(iConfig.getParameter<bool>(
"checkCompletedTrack")),
24 navigationSchoolName(iConfig.getParameter<std::
string>(
"NavigationSchool"))
53 LogDebug(
"NuclearSeedGenerator") <<
"New NuclearInteractionFinder instance with parameters : \n"
54 <<
"maxHits : " <<
maxHits <<
"\n"
83 LogDebug(
"NuclearSeedGenerator") <<
"Analyzis of a new trajectory with a number of valid hits = " << traj.
foundHits();
85 std::vector<TrajectoryMeasurement> measurements = traj.
measurements();
93 std::reverse(measurements.begin(), measurements.end());
96 std::vector<TrajectoryMeasurement>::const_iterator it_meas = measurements.begin();
98 std::vector<double> ncompatibleHits;
104 if(it_meas == measurements.end())
break;
141 for(
int i=0;
i<3;
i++) {
142 pt[
i] = (it_meas->updatedState()).globalParameters().position();
149 std::vector<TrajectoryMeasurement>
153 LogDebug(
"NuclearSeedGenerator") <<
"currentState :" << currentState <<
"\n";
159 std::vector<TrajectoryMeasurement>
166 vector<const DetLayer*> nl;
172 edm::LogError(
"NuclearInteractionFinder") <<
"In findCompatibleMeasurements : lastLayer not accessible";
177 LogDebug(
"NuclearSeedGenerator") <<
"In findCompatibleMeasurements : no compatible layer found";
181 for (vector<const DetLayer*>::iterator il = nl.begin();
182 il != nl.end(); il++) {
189 result.insert(
result.end()-invalidHits, tmp.begin(), tmp.end());
206 const TM& innerTM = tmPairs.first;
207 const std::vector<TM>& outerTMs = tmPairs.second;
210 for(std::vector<TM>::const_iterator outtm = outerTMs.begin(); outtm!=outerTMs.end(); outtm++) {
211 if((innerTM.
recHit())->isValid() && (outtm->recHit())->isValid()) {
215 else LogDebug(
"NuclearSeedGenerator") <<
"The initial hits for seeding are invalid" <<
"\n";
222 for(std::vector<SeedFromNuclearInteraction>::const_iterator it_seed =
allSeeds.begin(); it_seed !=
allSeeds.end(); it_seed++) {
223 if(it_seed->isValid()) {
224 output->push_back( it_seed->TrajSeed() );
226 else LogDebug(
"NuclearSeedGenerator") <<
"The seed is invalid" <<
"\n";
232 std::vector<SeedFromNuclearInteraction> newSeedCollection;
235 for(std::vector<SeedFromNuclearInteraction>::const_iterator it_seed =
allSeeds.begin(); it_seed !=
allSeeds.end(); it_seed++) {
237 if( !it_seed->isValid() )
continue;
243 for(std::vector<TM>::const_iterator tm = thirdTMs.begin(); tm!= thirdTMs.end(); tm++) {
245 if( ! tm->recHit()->isValid() )
continue;
266 mr(1,1) = 1E-2*rescale*rescale;
267 mr(2,2) = 1E-2*rescale*rescale;
TangentHelix * thePrimaryHelix
bool empty() const
True if trajectory has no measurements.
T getParameter(std::string const &) const
std::vector< TrajectoryMeasurement > measurements(const DetLayer &layer, const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const
void improveSeeds()
Improve the seeds with a third RecHit.
ConstRecHitPointer const & recHit() const
virtual void update(const edm::Event &) const =0
std::vector< int > compatibleHits() const
const LocalTrajectoryParameters & localParameters() const
const TMContainer & back() const
const NavigationSchool * nav() const
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
void setMeasurements(const TSOS &tsosAtInteractionPoint, ConstRecHitPointer ihit, ConstRecHitPointer ohit)
Fill all data members from 2 TM's where the first one is supposed to be at the interaction point...
bool run(const Trajectory &traj)
Run the Finder.
double fwdEstimate(const std::vector< TrajectoryMeasurement > &vecTM) const
PropagationDirection const & direction() const
bool isNuclearInteraction()
NuclearTester * nuclTester
DataContainer const & measurements() const
std::vector< TrajectoryMeasurement > findCompatibleMeasurements(const TM &lastMeas, double rescaleFactor) const
Find compatible TM of a TM with error rescaled by rescaleFactor.
void push_back(const TM &init_tm, const TMContainer &vecTM)
const SurfaceType & surface() const
std::vector< TrajectoryMeasurement > findMeasurementsFromTSOS(const TSOS ¤tState, DetId detid) const
std::vector< TrajectorySeed > TrajectorySeedCollection
FreeTrajectoryState * freeState(bool withErrors=true) const
SurfaceSide surfaceSide() const
Position relative to material, defined relative to momentum vector.
double meanHitDistance(const std::vector< TrajectoryMeasurement > &vecTM) const
std::vector< SeedFromNuclearInteraction > allSeeds
void reset(unsigned int nMeasurements)
const MeasurementTracker * theMeasurementTracker
const DetLayer * detLayer(const DetId &id) const
obsolete method. Use idToLayer() instead.
const NavigationSchool * theNavigationSchool
const Propagator * thePropagator
const AlgebraicSymMatrix55 & matrix() const
const MeasurementEstimator * theEstimator
const LocalTrajectoryError & localError() const
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
NuclearInteractionFinder()
const GlobalTrajectoryParameters & globalParameters() const
edm::ESHandle< MagneticField > theMagField
T const * product() const
const LayerMeasurements * theLayerMeasurements
const GeometricSearchTracker * theGeomSearchTracker
TrajectoryStateOnSurface TSOS
std::vector< std::vector< double > > tmp
std::auto_ptr< TrajectorySeedCollection > getPersistentSeeds()
Fill 'output' with persistent nuclear seeds.
std::string navigationSchoolName
void fillSeeds(const std::pair< TrajectoryMeasurement, std::vector< TrajectoryMeasurement > > &tmPairs)
get the seeds at the interaction point
Class used to test if a track has interacted nuclearly.
virtual ~NuclearInteractionFinder()
const MagneticField & magneticField() const
TrajectoryStateOnSurface const & updatedState() const
tuple measurementTrackerName
unsigned int nHitsChecked() const
void definePrimaryHelix(std::vector< TrajectoryMeasurement >::const_iterator it_meas)
Calculate the parameters of the circle representing the primary track at the interaction point...
TrajectoryStateOnSurface rescaleError(float rescale, const TSOS &state) const
double signedInverseMomentum() const
Signed inverse momentum q/p (zero for neutrals).
const TMPair & goodTMPair() const
tuple size
Write out results.
std::vector< const DetLayer * > nextLayers(Args &&...args) const
void setEvent(const edm::Event &event) const
define the measurement (to be called for each event)
double rescaleErrorFactor
SeedFromNuclearInteraction * currentSeed