CMS 3D CMS Logo

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

#include <DAFTrackProducerAlgorithm.h>

Inheritance diagram for DAFTrackProducerAlgorithm:
AlgoProductTraits< reco::Track >

Public Types

using AlgoProductCollection = typename Base::AlgoProductCollection
 
using Base = AlgoProductTraits< reco::Track >
 
using TrackCollection = typename Base::TrackCollection
 
using TrajAnnealingCollection = std::vector< TrajAnnealing >
 
- Public Types inherited from AlgoProductTraits< reco::Track >
using AlgoProductCollection = std::vector< AlgoProduct >
 
using TrackCollection = std::vector< reco::Track >
 
using TrackView = edm::View< reco::Track >
 

Public Member Functions

 DAFTrackProducerAlgorithm (const edm::ParameterSet &conf)
 
void runWithCandidate (const TrackingGeometry *, const MagneticField *, const TrajTrackAssociationCollection &, const MeasurementTrackerEvent *measTk, const TrajectoryFitter *, const TransientTrackingRecHitBuilder *, const MultiRecHitCollector *measurementTracker, const SiTrackerMultiRecHitUpdator *, const reco::BeamSpot &, AlgoProductCollection &, TrajAnnealingCollection &, bool, AlgoProductCollection &, AlgoProductCollection &) const
 Run the Final Fit taking TrackCandidates as input. More...
 
 ~DAFTrackProducerAlgorithm ()
 

Private Member Functions

bool buildTrack (const Trajectory, AlgoProductCollection &algoResults, float, const reco::BeamSpot &, const reco::TrackRef *) const
 Construct Tracks to be put in the event. More...
 
float calculateNdof (const Trajectory vtraj) const
 
int checkHits (Trajectory iInitTraj, const Trajectory iFinalTraj) const
 
std::pair< TransientTrackingRecHit::RecHitContainer, TrajectoryStateOnSurfacecollectHits (const Trajectory vtraj, const MultiRecHitCollector *measurementCollector, const MeasurementTrackerEvent *measTk) const
 
int countingGoodHits (const Trajectory traj) const
 
void filter (const TrajectoryFitter *fitter, std::vector< Trajectory > &input, int minhits, std::vector< Trajectory > &output, const TransientTrackingRecHitBuilder *builder) const
 
Trajectory fit (const std::pair< TransientTrackingRecHit::RecHitContainer, TrajectoryStateOnSurface > &hits, const TrajectoryFitter *theFitter, Trajectory vtraj) const
 accomplishes the fitting-smoothing step for each annealing value More...
 
void PrintHit (const TrackingRecHit *const &hit, TrajectoryStateOnSurface &tsos) const
 
std::pair< TransientTrackingRecHit::RecHitContainer, TrajectoryStateOnSurfaceupdateHits (const Trajectory vtraj, const SiTrackerMultiRecHitUpdator *updator, const MeasurementTrackerEvent *theMTE, double annealing) const
 

Private Attributes

edm::ParameterSet conf_
 
int minHits_
 

Detailed Description

All is needed to run the deterministic annealing algorithm. Ported from ORCA.

Author
tropiano, genta in May 2014 by brondolin

Definition at line 34 of file DAFTrackProducerAlgorithm.h.

Member Typedef Documentation

Definition at line 38 of file DAFTrackProducerAlgorithm.h.

Definition at line 36 of file DAFTrackProducerAlgorithm.h.

Definition at line 37 of file DAFTrackProducerAlgorithm.h.

Definition at line 40 of file DAFTrackProducerAlgorithm.h.

Constructor & Destructor Documentation

DAFTrackProducerAlgorithm::DAFTrackProducerAlgorithm ( const edm::ParameterSet conf)

Definition at line 27 of file DAFTrackProducerAlgorithm.cc.

28  : conf_(conf), minHits_(conf.getParameter<int>("MinHits")) {}
T getParameter(std::string const &) const
DAFTrackProducerAlgorithm::~DAFTrackProducerAlgorithm ( )
inline

Member Function Documentation

bool DAFTrackProducerAlgorithm::buildTrack ( const Trajectory  vtraj,
AlgoProductCollection algoResults,
float  ndof,
const reco::BeamSpot bs,
const reco::TrackRef BeforeDAFTrack 
) const
private

Construct Tracks to be put in the event.

Definition at line 232 of file DAFTrackProducerAlgorithm.cc.

References ecalcalib_dqm_sourceclient-live_cfg::algo, alongMomentum, FreeTrajectoryState::charge(), Trajectory::chiSquared(), FreeTrajectoryState::curvilinearError(), Trajectory::direction(), Trajectory::firstMeasurement(), TrajectoryStateOnSurface::freeState(), TrajectoryStateClosestToBeamLine::isValid(), Trajectory::isValid(), Trajectory::lastMeasurement(), LogDebug, FreeTrajectoryState::momentum(), ndof, AlCaHLTBitMon_ParallelJobs::p, FreeTrajectoryState::position(), TrajectoryStateClosestToBeamLine::trackStateAtPCA(), TrajectoryMeasurement::updatedState(), findQualityFiles::v, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by runWithCandidate().

236  {
237  LogDebug("DAFTrackProducerAlgorithm") << " BUILDER " << std::endl;
238  ;
239  TrajectoryStateOnSurface innertsos;
240 
241  if (vtraj.isValid()) {
242  std::unique_ptr<Trajectory> theTraj(new Trajectory(vtraj));
243 
244  if (vtraj.direction() == alongMomentum) {
245  //if (theTraj->direction() == oppositeToMomentum) {
246  innertsos = vtraj.firstMeasurement().updatedState();
247  } else {
248  innertsos = vtraj.lastMeasurement().updatedState();
249  }
250 
251  TSCBLBuilderNoMaterial tscblBuilder;
252  TrajectoryStateClosestToBeamLine tscbl = tscblBuilder(*(innertsos.freeState()), bs);
253 
254  if (tscbl.isValid() == false)
255  return false;
256 
258  math::XYZPoint pos(v.x(), v.y(), v.z());
260  math::XYZVector mom(p.x(), p.y(), p.z());
261 
262  // LogDebug("TrackProducer") <<v<<p<<std::endl;
263 
264  auto algo = (*BeforeDAFTrack)->algo();
265  std::unique_ptr<reco::Track> theTrack(new reco::Track(vtraj.chiSquared(),
266  ndof, //in the DAF the ndof is not-integer
267  pos,
268  mom,
269  tscbl.trackStateAtPCA().charge(),
271  algo));
272  theTrack->setQualityMask((*BeforeDAFTrack)->qualityMask());
273 
274  AlgoProduct aProduct{theTraj.release(), theTrack.release(), vtraj.direction(), 0};
275  algoResults.push_back(aProduct);
276 
277  return true;
278  } else {
279  LogDebug("DAFTrackProducerAlgorithm") << " BUILDER NOT POSSIBLE: traj is not valid" << std::endl;
280  ;
281  return false;
282  }
283 }
#define LogDebug(id)
T y() const
Definition: PV3DBase.h:60
TrackCharge charge() const
const CurvilinearTrajectoryError & curvilinearError() const
PropagationDirection const & direction() const
Definition: Trajectory.cc:133
TrajectoryMeasurement const & lastMeasurement() const
Definition: Trajectory.h:150
FreeTrajectoryState const * freeState(bool withErrors=true) const
T z() const
Definition: PV3DBase.h:61
GlobalVector momentum() const
GlobalPoint position() const
bool isValid() const
Definition: Trajectory.h:257
TrajectoryMeasurement const & firstMeasurement() const
Definition: Trajectory.h:166
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:31
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
float chiSquared() const
Definition: Trajectory.h:241
TrajectoryStateOnSurface const & updatedState() const
T x() const
Definition: PV3DBase.h:59
float DAFTrackProducerAlgorithm::calculateNdof ( const Trajectory  vtraj) const
private

Definition at line 380 of file DAFTrackProducerAlgorithm.cc.

References makeMuonMisalignmentScenario::components, watchdog::const, Trajectory::isValid(), Trajectory::measurements(), ndof, SiTrackerMultiRecHit::recHits(), and SiTrackerMultiRecHit::weight().

Referenced by runWithCandidate().

380  {
381  if (!vtraj.isValid())
382  return 0;
383  float ndof = 0;
384  const std::vector<TrajectoryMeasurement>& meas = vtraj.measurements();
385  for (std::vector<TrajectoryMeasurement>::const_iterator iter = meas.begin(); iter != meas.end(); iter++) {
386  if (iter->recHit()->isValid()) {
387  SiTrackerMultiRecHit const& mHit = dynamic_cast<SiTrackerMultiRecHit const&>(*iter->recHit());
388  std::vector<const TrackingRecHit*> components = mHit.recHits();
389  int iComp = 0;
390  for (std::vector<const TrackingRecHit*>::const_iterator iter2 = components.begin(); iter2 != components.end();
391  iter2++, iComp++) {
392  if ((*iter2)->isValid())
393  ndof += ((*iter2)->dimension()) * mHit.weight(iComp);
394  }
395  }
396  }
397 
398  return ndof - 5;
399 }
std::vector< const TrackingRecHit * > recHits() const override
Access to component RecHits (if any)
float weight(unsigned int i) const
DataContainer const & measurements() const
Definition: Trajectory.h:178
bool isValid() const
Definition: Trajectory.h:257
int DAFTrackProducerAlgorithm::checkHits ( Trajectory  iInitTraj,
const Trajectory  iFinalTraj 
) const
private

Definition at line 401 of file DAFTrackProducerAlgorithm.cc.

References makeMuonMisalignmentScenario::components, TrackingRecHit::hit(), TrackingRecHit::isValid(), LogDebug, LogTrace, Trajectory::measurements(), PrintHit(), TrajectoryMeasurement::recHit(), SiTrackerMultiRecHit::recHits(), SiTrackerMultiRecHit::weight(), and mps_merge::weight.

Referenced by runWithCandidate().

401  {
402  std::vector<TrajectoryMeasurement> initmeasurements = iInitTraj.measurements();
403  std::vector<TrajectoryMeasurement> finalmeasurements = iFinalTraj.measurements();
404  std::vector<TrajectoryMeasurement>::iterator jmeas;
405  int nSame = 0;
406  int ihit = 0;
407 
408  if (initmeasurements.empty() || finalmeasurements.empty()) {
409  LogDebug("DAFTrackProducerAlgorithm") << "Initial or Final Trajectory empty.";
410  return 0;
411  }
412 
413  if (initmeasurements.size() != finalmeasurements.size()) {
414  LogDebug("DAFTrackProducerAlgorithm")
415  << "Initial Trajectory size(" << initmeasurements.size() << " hits) "
416  << "is different to final traj size (" << finalmeasurements.size() << ")! No checkHits possible! ";
417  return 0;
418  }
419 
420  for (jmeas = initmeasurements.begin(); jmeas != initmeasurements.end(); jmeas++) {
421  const TrackingRecHit* initHit = jmeas->recHit()->hit();
422  if (!initHit->isValid() && ihit == 0)
423  continue;
424 
425  if (initHit->isValid()) {
426  TrajectoryMeasurement imeas = finalmeasurements.at(ihit);
427  const TrackingRecHit* finalHit = imeas.recHit()->hit();
428  const TrackingRecHit* MaxWeightHit = nullptr;
429  float maxweight = 0;
430 
431  const SiTrackerMultiRecHit* mrh = dynamic_cast<const SiTrackerMultiRecHit*>(finalHit);
432  if (mrh) {
433  std::vector<const TrackingRecHit*> components = mrh->recHits();
434  std::vector<const TrackingRecHit*>::const_iterator icomp;
435  int hitcounter = 0;
436 
437  for (icomp = components.begin(); icomp != components.end(); icomp++) {
438  if ((*icomp)->isValid()) {
439  double weight = mrh->weight(hitcounter);
440  if (weight > maxweight) {
441  MaxWeightHit = *icomp;
442  maxweight = weight;
443  }
444  }
445  hitcounter++;
446  }
447  if (!MaxWeightHit)
448  continue;
449 
450  auto myref1 = reinterpret_cast<const BaseTrackerRecHit*>(initHit)->firstClusterRef();
451  auto myref2 = reinterpret_cast<const BaseTrackerRecHit*>(MaxWeightHit)->firstClusterRef();
452 
453  if (myref1 == myref2) {
454  nSame++;
455  } else {
456  LogDebug("DAFTrackProducerAlgorithm") << "diverso hit!" << std::endl;
457  TrajectoryStateOnSurface dummState;
458  LogTrace("DAFTrackProducerAlgorithm") << " This hit was:\n ";
459  PrintHit(initHit, dummState);
460  LogTrace("DAFTrackProducerAlgorithm") << " instead now is:\n ";
461  PrintHit(MaxWeightHit, dummState);
462  }
463  }
464  } else {
465  TrajectoryMeasurement imeas = finalmeasurements.at(ihit);
466  const TrackingRecHit* finalHit = imeas.recHit()->hit();
467  if (!finalHit->isValid()) {
468  nSame++;
469  }
470  }
471 
472  ihit++;
473  }
474 
475  return nSame;
476 }
#define LogDebug(id)
ConstRecHitPointer const & recHit() const
std::vector< const TrackingRecHit * > recHits() const override
Access to component RecHits (if any)
Definition: weight.py:1
float weight(unsigned int i) const
DataContainer const & measurements() const
Definition: Trajectory.h:178
void PrintHit(const TrackingRecHit *const &hit, TrajectoryStateOnSurface &tsos) const
#define LogTrace(id)
virtual TrackingRecHit const * hit() const
bool isValid() const
std::pair< TransientTrackingRecHit::RecHitContainer, TrajectoryStateOnSurface > DAFTrackProducerAlgorithm::collectHits ( const Trajectory  vtraj,
const MultiRecHitCollector measurementCollector,
const MeasurementTrackerEvent measTk 
) const
private

Definition at line 137 of file DAFTrackProducerAlgorithm.cc.

References hfClusterShapes_cfi::hits, LogDebug, and MultiRecHitCollector::recHits().

Referenced by runWithCandidate().

140  {
141  LogDebug("DAFTrackProducerAlgorithm") << "Calling DAFTrackProducerAlgorithm::collectHits";
142 
143  //getting the traj measurements from the MeasurementCollector
144  int nHits = 0;
146  std::vector<TrajectoryMeasurement> collectedmeas = measurementCollector->recHits(vtraj, measTk);
147 
148  //if the MeasurementCollector is empty, make an "empty" pair
149  //else taking the collected measured hits and building the pair
150  if (collectedmeas.empty())
152 
153  for (std::vector<TrajectoryMeasurement>::const_iterator iter = collectedmeas.begin(); iter != collectedmeas.end();
154  iter++) {
155  nHits++;
156  hits.push_back(iter->recHit());
157  }
158 
159  //TrajectoryStateWithArbitraryError() == Creates a TrajectoryState with the same parameters
160  // as the input one, but with "infinite" errors, i.e. errors so big that they don't
161  // bias a fit starting with this state.
162  //return std::make_pair(hits,TrajectoryStateWithArbitraryError()(collectedmeas.front().predictedState()));
163 
164  // I do not have to rescale the error because it is already rescaled in the fit code
165  TrajectoryStateOnSurface initialStateFromTrack = collectedmeas.front().predictedState();
166 
167  LogDebug("DAFTrackProducerAlgorithm")
168  << "Pair (hits, TSOS) with TSOS predicted(collectedmeas.front().predictedState())";
169  return std::make_pair(hits, initialStateFromTrack);
170 }
#define LogDebug(id)
std::vector< ConstRecHitPointer > RecHitContainer
virtual std::vector< TrajectoryMeasurement > recHits(const Trajectory &, const MeasurementTrackerEvent *theMTE) const =0
int DAFTrackProducerAlgorithm::countingGoodHits ( const Trajectory  traj) const
private

Definition at line 285 of file DAFTrackProducerAlgorithm.cc.

References makeMuonMisalignmentScenario::components, watchdog::const, MillePedeFileConverter_cfg::e, Trajectory::foundHits(), LogDebug, Trajectory::measurements(), SiTrackerMultiRecHit::recHits(), and SiTrackerMultiRecHit::weight().

Referenced by runWithCandidate().

285  {
286  int ngoodhits = 0;
287  std::vector<TrajectoryMeasurement> vtm = traj.measurements();
288 
289  for (std::vector<TrajectoryMeasurement>::const_iterator tm = vtm.begin(); tm != vtm.end(); tm++) {
290  //if the rechit is valid
291  if (tm->recHit()->isValid()) {
292  SiTrackerMultiRecHit const& mHit = dynamic_cast<SiTrackerMultiRecHit const&>(*tm->recHit());
293  std::vector<const TrackingRecHit*> components = mHit.recHits();
294 
295  int iComp = 0;
296 
297  for (std::vector<const TrackingRecHit*>::const_iterator iter = components.begin(); iter != components.end();
298  iter++, iComp++) {
299  //if there is at least one component with weight higher than 1e-6 then the hit is not an outlier
300  if (mHit.weight(iComp) > 1e-6) {
301  ngoodhits++;
302  iComp++;
303  break;
304  }
305  }
306  }
307  }
308 
309  LogDebug("DAFTrackProducerAlgorithm") << "Original number of valid hits " << traj.foundHits()
310  << " -> hit with good weight (>1e-6) are " << ngoodhits;
311  return ngoodhits;
312 }
#define LogDebug(id)
int foundHits() const
Definition: Trajectory.h:206
std::vector< const TrackingRecHit * > recHits() const override
Access to component RecHits (if any)
float weight(unsigned int i) const
DataContainer const & measurements() const
Definition: Trajectory.h:178
void DAFTrackProducerAlgorithm::filter ( const TrajectoryFitter fitter,
std::vector< Trajectory > &  input,
int  minhits,
std::vector< Trajectory > &  output,
const TransientTrackingRecHitBuilder builder 
) const
private

Definition at line 315 of file DAFTrackProducerAlgorithm.cc.

References makeMuonMisalignmentScenario::components, watchdog::const, MillePedeFileConverter_cfg::e, TrajectoryFitter::fit(), edm::OwnVector< T, P >::front(), AnalysisDataFormats_SUSYBSMObjects::hc, hfClusterShapes_cfi::hits, LogDebug, TkClonerImpl::makeShared(), TrackingRecHit::missing, SiTrackerMultiRecHit::recHits(), and SiTrackerMultiRecHit::weight().

319  {
320  if (input.empty())
321  return;
322 
323  int ngoodhits = 0;
324  std::vector<TrajectoryMeasurement> vtm = input[0].measurements();
326 
327  //count the number of non-outlier and non-invalid hits
328  for (std::vector<TrajectoryMeasurement>::reverse_iterator tm = vtm.rbegin(); tm != vtm.rend(); tm++) {
329  //if the rechit is valid
330  if (tm->recHit()->isValid()) {
331  SiTrackerMultiRecHit const& mHit = dynamic_cast<SiTrackerMultiRecHit const&>(*tm->recHit());
332  std::vector<const TrackingRecHit*> components = mHit.recHits();
333  int iComp = 0;
334  bool isGood = false;
335  for (std::vector<const TrackingRecHit*>::const_iterator iter = components.begin(); iter != components.end();
336  iter++, iComp++) {
337  //if there is at least one component with weight higher than 1e-6 then the hit is not an outlier
338  if (mHit.weight(iComp) > 1e-6) {
339  ngoodhits++;
340  iComp++;
341  isGood = true;
342  break;
343  }
344  }
345  if (isGood) {
346  TkClonerImpl hc = static_cast<TkTransientTrackingRecHitBuilder const*>(builder)->cloner();
347  auto tempHit = hc.makeShared(tm->recHit(), tm->updatedState());
348  hits.push_back(tempHit);
349  } else
350  hits.push_back(std::make_shared<InvalidTrackingRecHit>(*tm->recHit()->det(), TrackingRecHit::missing));
351  } else {
352  TkClonerImpl hc = static_cast<TkTransientTrackingRecHitBuilder const*>(builder)->cloner();
353  auto tempHit = hc.makeShared(tm->recHit(), tm->updatedState());
354  hits.push_back(tempHit);
355  }
356  }
357 
358  LogDebug("DAFTrackProducerAlgorithm") << "Original number of valid hits " << input[0].foundHits()
359  << "; after filtering " << ngoodhits;
360  if (ngoodhits > input[0].foundHits())
361  edm::LogError("DAFTrackProducerAlgorithm")
362  << "Something wrong: the number of good hits from DAFTrackProducerAlgorithm::filter " << ngoodhits
363  << " is higher than the original one " << input[0].foundHits();
364 
365  if (ngoodhits < minhits)
366  return;
367 
368  TrajectoryStateOnSurface curstartingTSOS = input.front().lastMeasurement().updatedState();
369  LogDebug("DAFTrackProducerAlgorithm") << "starting tsos for final refitting " << curstartingTSOS;
370  //curstartingTSOS.rescaleError(100);
371 
372  output = fitter->fit(
374  hits,
375  TrajectoryStateWithArbitraryError()(curstartingTSOS));
376 
377  LogDebug("DAFTrackProducerAlgorithm") << "After filtering " << output.size() << " trajectories";
378 }
#define LogDebug(id)
std::vector< const TrackingRecHit * > recHits() const override
Access to component RecHits (if any)
std::vector< ConstRecHitPointer > RecHitContainer
float weight(unsigned int i) const
static std::string const input
Definition: EdmProvDump.cc:48
TrackingRecHit::ConstRecHitPointer makeShared(SiPixelRecHit const &hit, TrajectoryStateOnSurface const &tsos) const override
Definition: TkClonerImpl.cc:60
susybsm::HSCParticleCollection hc
Definition: classes.h:25
std::vector< Trajectory > fit(const Trajectory &traj, fitType type=standard) const
Trajectory DAFTrackProducerAlgorithm::fit ( const std::pair< TransientTrackingRecHit::RecHitContainer, TrajectoryStateOnSurface > &  hits,
const TrajectoryFitter theFitter,
Trajectory  vtraj 
) const
private

accomplishes the fitting-smoothing step for each annealing value

Definition at line 214 of file DAFTrackProducerAlgorithm.cc.

References TrajectorySeed::direction(), TrajectoryFitter::fitOne(), Trajectory::isValid(), LogDebug, and Trajectory::seed().

Referenced by trackingPlots.Iteration::modules(), and runWithCandidate().

217  {
218  //creating a new trajectory starting from the direction of the seed of the input one and the hits
219  Trajectory newVec = theFitter->fitOne(
221  hits.first,
222  hits.second);
223 
224  if (newVec.isValid())
225  return newVec;
226  else {
227  LogDebug("DAFTrackProducerAlgorithm") << "Fit no valid.";
228  return Trajectory();
229  }
230 }
#define LogDebug(id)
PropagationDirection direction() const
TrajectorySeed const & seed() const
Access to the seed used to reconstruct the Trajectory.
Definition: Trajectory.h:263
virtual Trajectory fitOne(const Trajectory &traj, fitType type=standard) const =0
bool isValid() const
Definition: Trajectory.h:257
void DAFTrackProducerAlgorithm::PrintHit ( const TrackingRecHit *const &  hit,
TrajectoryStateOnSurface tsos 
) const
private

Definition at line 478 of file DAFTrackProducerAlgorithm.cc.

References TrackingRecHit::dimension(), TrackingRecHit::geographicalId(), TrackingRecHit::globalPosition(), TrajectoryStateOnSurface::isValid(), TrackingRecHit::isValid(), TrajectoryStateOnSurface::localPosition(), TrackingRecHit::localPosition(), LogTrace, PV3DBase< T, PVType, FrameType >::perp(), and DetId::rawId().

Referenced by checkHits(), and updateHits().

478  {
479  if (hit->isValid()) {
480  LogTrace("DAFTrackProducerAlgorithm")
481  << " Valid Hit with DetId " << hit->geographicalId().rawId() << " and dim:" << hit->dimension()
482  << " local position " << hit->localPosition() << " global position " << hit->globalPosition() << " and r "
483  << hit->globalPosition().perp();
484  if (tsos.isValid())
485  LogTrace("DAFTrackProducerAlgorithm") << " TSOS combtsos " << tsos.localPosition();
486 
487  } else {
488  LogTrace("DAFTrackProducerAlgorithm") << " Invalid Hit with DetId " << hit->geographicalId().rawId();
489  }
490 }
T perp() const
Definition: PV3DBase.h:69
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
virtual GlobalPoint globalPosition() const
virtual int dimension() const =0
virtual LocalPoint localPosition() const =0
#define LogTrace(id)
bool isValid() const
DetId geographicalId() const
void DAFTrackProducerAlgorithm::runWithCandidate ( const TrackingGeometry theG,
const MagneticField theMF,
const TrajTrackAssociationCollection TTmap,
const MeasurementTrackerEvent measTk,
const TrajectoryFitter theFitter,
const TransientTrackingRecHitBuilder builder,
const MultiRecHitCollector measurementTracker,
const SiTrackerMultiRecHitUpdator updator,
const reco::BeamSpot bs,
AlgoProductCollection algoResults,
TrajAnnealingCollection trajann,
bool  TrajAnnSaving_,
AlgoProductCollection algoResultsBeforeDAF,
AlgoProductCollection algoResultsAfterDAF 
) const

Run the Final Fit taking TrackCandidates as input.

Definition at line 30 of file DAFTrackProducerAlgorithm.cc.

References edm::AssociationMap< Tag >::begin(), buildTrack(), calculateNdof(), checkHits(), collectHits(), edm::AssociationMap< edm::OneToOne< std::vector< Trajectory >, reco::TrackCollection, unsigned short > >::const_iterator, generateEDF::cont, countingGoodHits(), TrajectorySeed::direction(), Trajectory::direction(), edm::AssociationMap< Tag >::end(), fit(), Trajectory::foundHits(), SiTrackerMultiRecHitUpdator::getAnnealingProgram(), hfClusterShapes_cfi::hits, Trajectory::isValid(), edm::Ref< C, T, F >::key(), LogDebug, minHits_, ndof, convertSQLiteXML::ok, Trajectory::seed(), edm::AssociationMap< Tag >::size(), groupFilesInBlocks::temp, and updateHits().

Referenced by DAFTrackProducer::produce().

43  {
44  LogDebug("DAFTrackProducerAlgorithm") << "Size of map: " << TTmap.size() << "\n";
45 
46  int cont = 0;
47  int nTracksChanged = 0;
48 
49  for (TrajTrackAssociationCollection::const_iterator itTTmap = TTmap.begin(); itTTmap != TTmap.end(); itTTmap++) {
50  const edm::Ref<std::vector<Trajectory> > BeforeDAFTraj = itTTmap->key;
51  std::vector<TrajectoryMeasurement> BeforeDAFTrajMeas = BeforeDAFTraj->measurements();
52  const reco::TrackRef BeforeDAFTrack = itTTmap->val;
53 
54  float ndof = 0;
55  Trajectory CurrentTraj;
56 
57  if (BeforeDAFTraj->isValid()) {
58  LogDebug("DAFTrackProducerAlgorithm") << "The trajectory #" << cont + 1 << " is valid. \n";
59 
60  //getting the MultiRecHit collection and the trajectory with a first fit-smooth round
61  std::pair<TransientTrackingRecHit::RecHitContainer, TrajectoryStateOnSurface> hits =
62  collectHits(*BeforeDAFTraj, measurementCollector, &*measTk);
63 
64  //new initial fit
65  CurrentTraj = fit(hits, theFitter, *BeforeDAFTraj);
66 
67  //starting the annealing program
68  for (std::vector<double>::const_iterator ian = updator->getAnnealingProgram().begin();
69  ian != updator->getAnnealingProgram().end();
70  ian++) {
71  if (CurrentTraj.isValid()) {
72  LogDebug("DAFTrackProducerAlgorithm") << "Seed direction is " << CurrentTraj.seed().direction()
73  << ".Traj direction is " << CurrentTraj.direction() << std::endl;
74 
75  //updating MultiRecHits and fit-smooth again
76  std::pair<TransientTrackingRecHit::RecHitContainer, TrajectoryStateOnSurface> curiterationhits =
77  updateHits(CurrentTraj, updator, &*measTk, *ian);
78  if (curiterationhits.first.size() < 3) {
79  LogDebug("DAFTrackProducerAlgorithm")
80  << "Rejecting trajectory with " << curiterationhits.first.size() << " hits" << std::endl;
81  CurrentTraj = Trajectory();
82  break;
83  }
84 
85  CurrentTraj = fit(curiterationhits, theFitter, CurrentTraj);
86 
87  //saving trajectory for each annealing cycle ...
88  if (TrajAnnSaving_) {
89  TrajAnnealing temp(CurrentTraj, *ian);
90  trajann.push_back(temp);
91  }
92 
93  LogDebug("DAFTrackProducerAlgorithm") << "done annealing value " << (*ian);
94 
95  } else
96  break;
97  } //end annealing cycle
98 
99  int percOfHitsUnchangedAfterDAF =
100  (1. * checkHits(*BeforeDAFTraj, CurrentTraj) / (1. * BeforeDAFTrajMeas.size())) * 100.;
101  LogDebug("DAFTrackProducerAlgorithm")
102  << "Ended annealing program with " << percOfHitsUnchangedAfterDAF << " unchanged." << std::endl;
103 
104  //computing the ndof keeping into account the weights
105  ndof = calculateNdof(CurrentTraj);
106 
107  //checking if the trajectory has the minimum number of valid hits ( weight (>1e-6) )
108  //in order to remove tracks with too many outliers.
109  int goodHits = countingGoodHits(CurrentTraj);
110 
111  if (goodHits >= minHits_) {
112  bool ok = buildTrack(CurrentTraj, algoResults, ndof, bs, &BeforeDAFTrack);
113  // or filtered?
114  if (ok)
115  cont++;
116 
117  //saving tracks before and after DAF
118  if ((100. - percOfHitsUnchangedAfterDAF) > 0.) {
119  bool okBefore = buildTrack(*BeforeDAFTraj, algoResultsBeforeDAF, ndof, bs, &BeforeDAFTrack);
120  bool okAfter = buildTrack(CurrentTraj, algoResultsAfterDAF, ndof, bs, &BeforeDAFTrack);
121  if (okBefore && okAfter)
122  nTracksChanged++;
123  }
124  } else {
125  LogDebug("DAFTrackProducerAlgorithm") << "Rejecting trajectory with " << CurrentTraj.foundHits() << " hits";
126  }
127  } //end run on track collection
128  else {
129  LogDebug("DAFTrackProducerAlgorithm") << "Rejecting empty trajectory" << std::endl;
130  }
131  } //end run on track collection
132 
133  LogDebug("DAFTrackProducerAlgorithm") << "Number of Tracks found: " << cont << "\n";
134  LogDebug("DAFTrackProducerAlgorithm") << "Number of Tracks changed: " << nTracksChanged << "\n";
135 }
#define LogDebug(id)
PropagationDirection direction() const
int foundHits() const
Definition: Trajectory.h:206
int countingGoodHits(const Trajectory traj) const
TrajectorySeed const & seed() const
Access to the seed used to reconstruct the Trajectory.
Definition: Trajectory.h:263
const_iterator end() const
last iterator over the map (read only)
std::pair< TransientTrackingRecHit::RecHitContainer, TrajectoryStateOnSurface > updateHits(const Trajectory vtraj, const SiTrackerMultiRecHitUpdator *updator, const MeasurementTrackerEvent *theMTE, double annealing) const
int checkHits(Trajectory iInitTraj, const Trajectory iFinalTraj) const
bool buildTrack(const Trajectory, AlgoProductCollection &algoResults, float, const reco::BeamSpot &, const reco::TrackRef *) const
Construct Tracks to be put in the event.
key_type key() const
Accessor for product key.
Definition: Ref.h:250
const std::vector< double > & getAnnealingProgram() const
PropagationDirection const & direction() const
Definition: Trajectory.cc:133
Trajectory fit(const std::pair< TransientTrackingRecHit::RecHitContainer, TrajectoryStateOnSurface > &hits, const TrajectoryFitter *theFitter, Trajectory vtraj) const
accomplishes the fitting-smoothing step for each annealing value
bool isValid() const
Definition: Trajectory.h:257
std::pair< TransientTrackingRecHit::RecHitContainer, TrajectoryStateOnSurface > collectHits(const Trajectory vtraj, const MultiRecHitCollector *measurementCollector, const MeasurementTrackerEvent *measTk) const
size_type size() const
map size
float calculateNdof(const Trajectory vtraj) const
const_iterator begin() const
first iterator over the map (read only)
cont
load Luminosity info ##
Definition: generateEDF.py:629
std::pair< TransientTrackingRecHit::RecHitContainer, TrajectoryStateOnSurface > DAFTrackProducerAlgorithm::updateHits ( const Trajectory  vtraj,
const SiTrackerMultiRecHitUpdator updator,
const MeasurementTrackerEvent theMTE,
double  annealing 
) const
private

Definition at line 172 of file DAFTrackProducerAlgorithm.cc.

References heavyFlavorValidationHarvestingSequence_cff::combiner, hfClusterShapes_cfi::hits, MeasurementTrackerEvent::idToDet(), LogDebug, Trajectory::measurements(), PrintHit(), and SiTrackerMultiRecHitUpdator::update().

Referenced by runWithCandidate().

176  {
177  LogDebug("DAFTrackProducerAlgorithm") << "Calling DAFTrackProducerAlgorithm::updateHits";
179  std::vector<TrajectoryMeasurement> vmeas = vtraj.measurements();
180  std::vector<TrajectoryMeasurement>::reverse_iterator imeas;
181  unsigned int hitcounter = 1;
182 
183  //I run inversely on the trajectory obtained and update the state
184  for (imeas = vmeas.rbegin(); imeas != vmeas.rend(); imeas++, hitcounter++) {
185  DetId id = imeas->recHit()->geographicalId();
186  MeasurementDetWithData measDet = theMTE->idToDet(id);
187 
189  TrajectoryStateOnSurface combtsos;
190  if (hitcounter == vmeas.size())
191  combtsos = imeas->predictedState(); //fwd
192  else if (hitcounter == 1)
193  combtsos = imeas->backwardPredictedState(); //bwd
194  else
195  combtsos = combiner(imeas->backwardPredictedState(), imeas->predictedState());
196 
197  PrintHit(&*imeas->recHit(), combtsos);
198  if (imeas->recHit()->isValid()) {
199  TransientTrackingRecHit::RecHitPointer updated = updator->update(imeas->recHit(), combtsos, measDet, annealing);
200  hits.push_back(updated);
201  } else {
202  hits.push_back(imeas->recHit());
203  }
204  }
205 
206  TrajectoryStateOnSurface updatedStateFromTrack = vmeas.back().predictedState();
207 
208  //return std::make_pair(hits,TrajectoryStateWithArbitraryError()(vmeas.back().updatedState()));
209  LogDebug("DAFTrackProducerAlgorithm") << "Pair (hits, TSOS) with TSOS predicted (vmeas.back().predictedState())";
210 
211  return std::make_pair(hits, updatedStateFromTrack);
212 }
#define LogDebug(id)
MeasurementDetWithData idToDet(const DetId &id) const
Previous MeasurementDetSystem interface.
std::vector< ConstRecHitPointer > RecHitContainer
DataContainer const & measurements() const
Definition: Trajectory.h:178
void PrintHit(const TrackingRecHit *const &hit, TrajectoryStateOnSurface &tsos) const
std::shared_ptr< TrackingRecHit const > RecHitPointer
Definition: DetId.h:17
virtual TransientTrackingRecHit::RecHitPointer update(TransientTrackingRecHit::ConstRecHitPointer original, const TrajectoryStateOnSurface &tsos, MeasurementDetWithData &measDet, double annealing=1.) const

Member Data Documentation

edm::ParameterSet DAFTrackProducerAlgorithm::conf_
private

Definition at line 102 of file DAFTrackProducerAlgorithm.h.

int DAFTrackProducerAlgorithm::minHits_
private

Definition at line 103 of file DAFTrackProducerAlgorithm.h.

Referenced by runWithCandidate().