CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
DAFTrackProducerAlgorithm.cc
Go to the documentation of this file.
26 
27 
29  conf_(conf),
30  minHits_(conf.getParameter<int>("MinHits")){}
31 
32 
34  const MagneticField * theMF,
36  const MeasurementTrackerEvent *measTk,
37  const TrajectoryFitter * theFitter,
38  const TransientTrackingRecHitBuilder* builder,
39  const MultiRecHitCollector* measurementCollector,
41  const reco::BeamSpot& bs,
42  AlgoProductCollection& algoResults,
43  TrajAnnealingCollection& trajann,
44  bool TrajAnnSaving_,
45  AlgoProductCollection& algoResultsBeforeDAF,
46  AlgoProductCollection& algoResultsAfterDAF) const
47 {
48  LogDebug("DAFTrackProducerAlgorithm") << "Size of map: " << TTmap.size() << "\n";
49 
50  int cont = 0;
51  int nTracksChanged = 0;
52 
53  for (TrajTrackAssociationCollection::const_iterator itTTmap = TTmap.begin(); itTTmap != TTmap.end(); itTTmap++){
54 
55  const edm::Ref<std::vector<Trajectory> > BeforeDAFTraj = itTTmap->key;
56  std::vector<TrajectoryMeasurement> BeforeDAFTrajMeas = BeforeDAFTraj->measurements();
57  const reco::TrackRef BeforeDAFTrack = itTTmap->val;
58 
59  float ndof = 0;
60  Trajectory CurrentTraj;
61 
62  if(BeforeDAFTraj->isValid()){
63  LogDebug("DAFTrackProducerAlgorithm") << "The trajectory #" << cont+1 << " is valid. \n";
64 
65  //getting the MultiRecHit collection and the trajectory with a first fit-smooth round
66  std::pair<TransientTrackingRecHit::RecHitContainer, TrajectoryStateOnSurface> hits = collectHits(*BeforeDAFTraj, measurementCollector, &*measTk);
67 
68  //new initial fit
69  CurrentTraj = fit(hits, theFitter, *BeforeDAFTraj);
70 
71  //starting the annealing program
72  for (std::vector<double>::const_iterator ian = updator->getAnnealingProgram().begin();
73  ian != updator->getAnnealingProgram().end(); ian++){
74 
75  if (CurrentTraj.isValid()){
76 
77  LogDebug("DAFTrackProducerAlgorithm") << "Seed direction is " << CurrentTraj.seed().direction()
78  << ".Traj direction is " << CurrentTraj.direction() << std::endl;
79 
80  //updating MultiRecHits and fit-smooth again
81  std::pair<TransientTrackingRecHit::RecHitContainer, TrajectoryStateOnSurface> curiterationhits =
82  updateHits(CurrentTraj, updator, &*measTk, *ian);
83  if( curiterationhits.first.size() < 3 ){
84  LogDebug("DAFTrackProducerAlgorithm") << "Rejecting trajectory with " << curiterationhits.first.size() <<" hits" << std::endl;
85  CurrentTraj = Trajectory();
86  break;
87  }
88 
89  CurrentTraj = fit(curiterationhits, theFitter, CurrentTraj);
90 
91  //saving trajectory for each annealing cycle ...
92  if(TrajAnnSaving_){
93  TrajAnnealing temp(CurrentTraj, *ian);
94  trajann.push_back(temp);
95  }
96 
97  LogDebug("DAFTrackProducerAlgorithm") << "done annealing value " << (*ian) ;
98 
99  }
100  else break;
101  } //end annealing cycle
102 
103  int percOfHitsUnchangedAfterDAF = (1.*checkHits(*BeforeDAFTraj, CurrentTraj)/(1.*BeforeDAFTrajMeas.size()))*100.;
104  LogDebug("DAFTrackProducerAlgorithm") << "Ended annealing program with " << percOfHitsUnchangedAfterDAF << " unchanged." << std::endl;
105 
106  //computing the ndof keeping into account the weights
107  ndof = calculateNdof(CurrentTraj);
108 
109  //checking if the trajectory has the minimum number of valid hits ( weight (>1e-6) )
110  //in order to remove tracks with too many outliers.
111  int goodHits = countingGoodHits(CurrentTraj);
112 
113  if( goodHits >= minHits_) {
114  bool ok = buildTrack(CurrentTraj, algoResults, ndof, bs, &BeforeDAFTrack);
115  // or filtered?
116  if(ok) cont++;
117 
118  //saving tracks before and after DAF
119  if( (100. - percOfHitsUnchangedAfterDAF) > 0.){
120  bool okBefore = buildTrack(*BeforeDAFTraj, algoResultsBeforeDAF, ndof, bs, &BeforeDAFTrack);
121  bool okAfter = buildTrack(CurrentTraj, algoResultsAfterDAF, ndof, bs, &BeforeDAFTrack);
122  if( okBefore && okAfter ) 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 
136 }
137 /*------------------------------------------------------------------------------------------------------*/
138 std::pair<TransientTrackingRecHit::RecHitContainer, TrajectoryStateOnSurface>
140  const MultiRecHitCollector* measurementCollector,
141  const MeasurementTrackerEvent *measTk) const
142 {
143 
144  LogDebug("DAFTrackProducerAlgorithm") << "Calling DAFTrackProducerAlgorithm::collectHits";
145 
146  //getting the traj measurements from the MeasurementCollector
147  int nHits = 0;
149  std::vector<TrajectoryMeasurement> collectedmeas = measurementCollector->recHits(vtraj, measTk);
150 
151  //if the MeasurementCollector is empty, make an "empty" pair
152  //else taking the collected measured hits and building the pair
153  if( collectedmeas.empty() )
155 
156  for( std::vector<TrajectoryMeasurement>::const_iterator iter = collectedmeas.begin();
157  iter!=collectedmeas.end(); iter++ ){
158 
159  nHits++;
160  hits.push_back(iter->recHit());
161 
162  }
163 
164 
165  //TrajectoryStateWithArbitraryError() == Creates a TrajectoryState with the same parameters
166  // as the input one, but with "infinite" errors, i.e. errors so big that they don't
167  // bias a fit starting with this state.
168  //return std::make_pair(hits,TrajectoryStateWithArbitraryError()(collectedmeas.front().predictedState()));
169 
170  // I do not have to rescale the error because it is already rescaled in the fit code
171  TrajectoryStateOnSurface initialStateFromTrack = collectedmeas.front().predictedState();
172 
173  LogDebug("DAFTrackProducerAlgorithm") << "Pair (hits, TSOS) with TSOS predicted(collectedmeas.front().predictedState())";
174  return std::make_pair(hits, initialStateFromTrack);
175 
176 }
177 /*------------------------------------------------------------------------------------------------------*/
178 std::pair<TransientTrackingRecHit::RecHitContainer, TrajectoryStateOnSurface>
181  const MeasurementTrackerEvent* theMTE,
182  double annealing) const
183 {
184  LogDebug("DAFTrackProducerAlgorithm") << "Calling DAFTrackProducerAlgorithm::updateHits";
186  std::vector<TrajectoryMeasurement> vmeas = vtraj.measurements();
187  std::vector<TrajectoryMeasurement>::reverse_iterator imeas;
188  unsigned int hitcounter = 1;
189 
190  //I run inversely on the trajectory obtained and update the state
191  for (imeas = vmeas.rbegin(); imeas != vmeas.rend(); imeas++, hitcounter++){
192 
193  DetId id = imeas->recHit()->geographicalId();
194  MeasurementDetWithData measDet = theMTE->idToDet(id);
195 
197  TrajectoryStateOnSurface combtsos;
198  if (hitcounter == vmeas.size()) combtsos = imeas->predictedState(); //fwd
199  else if (hitcounter == 1) combtsos = imeas->backwardPredictedState(); //bwd
200  else combtsos = combiner(imeas->backwardPredictedState(), imeas->predictedState());
201 
202  PrintHit(&*imeas->recHit(), combtsos);
203  if(imeas->recHit()->isValid()){
204  TransientTrackingRecHit::RecHitPointer updated = updator->update(imeas->recHit(),
205  combtsos, measDet, annealing);
206  hits.push_back(updated);
207  } else {
208  hits.push_back(imeas->recHit());
209  }
210  }
211 
212  TrajectoryStateOnSurface updatedStateFromTrack = vmeas.back().predictedState();
213 
214  //return std::make_pair(hits,TrajectoryStateWithArbitraryError()(vmeas.back().updatedState()));
215  LogDebug("DAFTrackProducerAlgorithm") << "Pair (hits, TSOS) with TSOS predicted (vmeas.back().predictedState())";
216 
217  return std::make_pair(hits,updatedStateFromTrack);
218 }
219 /*------------------------------------------------------------------------------------------------------*/
222  const TrajectoryFitter * theFitter,
223  Trajectory vtraj) const {
224 
225  //creating a new trajectory starting from the direction of the seed of the input one and the hits
228  vtraj.seed().direction()),
229  hits.first, hits.second);
230 
231  if( newVec.isValid() ) return newVec;
232  else{
233  LogDebug("DAFTrackProducerAlgorithm") << "Fit no valid.";
234  return Trajectory();
235  }
236 
237 }
238 /*------------------------------------------------------------------------------------------------------*/
240  AlgoProductCollection& algoResults,
241  float ndof,
242  const reco::BeamSpot& bs,
243  const reco::TrackRef* BeforeDAFTrack) const
244 {
245  LogDebug("DAFTrackProducerAlgorithm") <<" BUILDER " << std::endl;;
246  TrajectoryStateOnSurface innertsos;
247 
248  if ( vtraj.isValid() ){
249 
250  std::unique_ptr<Trajectory> theTraj(new Trajectory( vtraj ));
251 
252  if (vtraj.direction() == alongMomentum) {
253  //if (theTraj->direction() == oppositeToMomentum) {
254  innertsos = vtraj.firstMeasurement().updatedState();
255  } else {
256  innertsos = vtraj.lastMeasurement().updatedState();
257  }
258 
259  TSCBLBuilderNoMaterial tscblBuilder;
260  TrajectoryStateClosestToBeamLine tscbl = tscblBuilder(*(innertsos.freeState()),bs);
261 
262  if (tscbl.isValid()==false) return false;
263 
265  math::XYZPoint pos( v.x(), v.y(), v.z() );
267  math::XYZVector mom( p.x(), p.y(), p.z() );
268 
269  // LogDebug("TrackProducer") <<v<<p<<std::endl;
270 
271  auto algo = (*BeforeDAFTrack)->algo();
272  std::unique_ptr<reco::Track> theTrack(new reco::Track(vtraj.chiSquared(),
273  ndof, //in the DAF the ndof is not-integer
274  pos, mom, tscbl.trackStateAtPCA().charge(),
276  theTrack->setQualityMask((*BeforeDAFTrack)->qualityMask());
277 
278  AlgoProduct aProduct{theTraj.release(), theTrack.release(), vtraj.direction(),0};
279  algoResults.push_back(aProduct);
280 
281  return true;
282  }
283  else {
284  LogDebug("DAFTrackProducerAlgorithm") <<" BUILDER NOT POSSIBLE: traj is not valid" << std::endl;;
285  return false;
286  }
287 }
288 /*------------------------------------------------------------------------------------------------------*/
290 
291  int ngoodhits = 0;
292  Trajectory myTraj = traj;
293  std::vector<TrajectoryMeasurement> vtm = traj.measurements();
294 
295  for (std::vector<TrajectoryMeasurement>::const_iterator tm = vtm.begin(); tm != vtm.end(); tm++){
296  //if the rechit is valid
297  if (tm->recHit()->isValid()) {
298  SiTrackerMultiRecHit const & mHit = dynamic_cast<SiTrackerMultiRecHit const &>(*tm->recHit());
299  std::vector<const TrackingRecHit*> components = mHit.recHits();
300 
301  int iComp = 0;
302 
303  for(std::vector<const TrackingRecHit*>::const_iterator iter = components.begin(); iter != components.end(); iter++, iComp++){
304  //if there is at least one component with weight higher than 1e-6 then the hit is not an outlier
305  if (mHit.weight(iComp)>1e-6) {
306  ngoodhits++;
307  iComp++;
308  break;
309  }
310  }
311 
312  }
313  }
314 
315  LogDebug("DAFTrackProducerAlgorithm") << "Original number of valid hits " << traj.foundHits() << " -> hit with good weight (>1e-6) are " << ngoodhits;
316  return ngoodhits;
317 
318 }
319 /*------------------------------------------------------------------------------------------------------*/
320 
321 void DAFTrackProducerAlgorithm::filter(const TrajectoryFitter* fitter, std::vector<Trajectory>& input,
322  int minhits, std::vector<Trajectory>& output,
323  const TransientTrackingRecHitBuilder* builder) const
324 {
325  if (input.empty()) return;
326 
327  int ngoodhits = 0;
328  std::vector<TrajectoryMeasurement> vtm = input[0].measurements();
330 
331  //count the number of non-outlier and non-invalid hits
332  for (std::vector<TrajectoryMeasurement>::reverse_iterator tm=vtm.rbegin(); tm!=vtm.rend();tm++){
333  //if the rechit is valid
334  if (tm->recHit()->isValid()) {
335  SiTrackerMultiRecHit const & mHit = dynamic_cast<SiTrackerMultiRecHit const &>(*tm->recHit());
336  std::vector<const TrackingRecHit*> components = mHit.recHits();
337  int iComp = 0;
338  bool isGood = false;
339  for(std::vector<const TrackingRecHit*>::const_iterator iter = components.begin(); iter != components.end(); iter++, iComp++){
340  //if there is at least one component with weight higher than 1e-6 then the hit is not an outlier
341  if (mHit.weight(iComp)>1e-6) {ngoodhits++; iComp++; isGood = true; break;}
342  }
343  if (isGood) {
344  TkClonerImpl hc = static_cast<TkTransientTrackingRecHitBuilder const *>(builder)->cloner();
345  auto tempHit = hc.makeShared(tm->recHit(),tm->updatedState());
346  hits.push_back(tempHit);
347  }
348  else hits.push_back(std::make_shared<InvalidTrackingRecHit>(*tm->recHit()->det(), TrackingRecHit::missing));
349  } else {
350  TkClonerImpl hc = static_cast<TkTransientTrackingRecHitBuilder const *>(builder)->cloner();
351  auto tempHit = hc.makeShared(tm->recHit(),tm->updatedState());
352  hits.push_back(tempHit);
353  }
354  }
355 
356 
357  LogDebug("DAFTrackProducerAlgorithm") << "Original number of valid hits " << input[0].foundHits() << "; after filtering " << ngoodhits;
358  if (ngoodhits>input[0].foundHits())
359  edm::LogError("DAFTrackProducerAlgorithm") << "Something wrong: the number of good hits from DAFTrackProducerAlgorithm::filter "
360  << ngoodhits << " is higher than the original one " << input[0].foundHits();
361 
362  if (ngoodhits < minhits) return;
363 
364  TrajectoryStateOnSurface curstartingTSOS = input.front().lastMeasurement().updatedState();
365  LogDebug("DAFTrackProducerAlgorithm") << "starting tsos for final refitting " << curstartingTSOS ;
366  //curstartingTSOS.rescaleError(100);
367 
368  output = fitter->fit(TrajectorySeed(PTrajectoryStateOnDet(),
370  input.front().seed().direction()),
371  hits,
372  TrajectoryStateWithArbitraryError()(curstartingTSOS));
373 
374  LogDebug("DAFTrackProducerAlgorithm") << "After filtering " << output.size() << " trajectories";
375 
376 }
377 /*------------------------------------------------------------------------------------------------------*/
379 {
380 
381  if (!vtraj.isValid()) return 0;
382  float ndof = 0;
383  const std::vector<TrajectoryMeasurement>& meas = vtraj.measurements();
384  for (std::vector<TrajectoryMeasurement>::const_iterator iter = meas.begin(); iter != meas.end(); iter++){
385 
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(); iter2++, iComp++){
391  if ((*iter2)->isValid())
392  ndof += ((*iter2)->dimension())*mHit.weight(iComp);
393  }
394 
395  }
396  }
397 
398  return ndof-5;
399 
400 }
401 //------------------------------------------------------------------------------------------------
402 int DAFTrackProducerAlgorithm::checkHits( Trajectory iInitTraj, const Trajectory iFinalTraj) const {
403 
404  std::vector<TrajectoryMeasurement> initmeasurements = iInitTraj.measurements();
405  std::vector<TrajectoryMeasurement> finalmeasurements = iFinalTraj.measurements();
406  std::vector<TrajectoryMeasurement>::iterator jmeas;
407  int nSame = 0;
408  int ihit = 0;
409 
410  if( initmeasurements.empty() || finalmeasurements.empty() ){
411  LogDebug("DAFTrackProducerAlgorithm") << "Initial or Final Trajectory empty.";
412  return 0;
413  }
414 
415  if( initmeasurements.size() != finalmeasurements.size() ) {
416  LogDebug("DAFTrackProducerAlgorithm") << "Initial Trajectory size(" << initmeasurements.size() << " hits) "
417  << "is different to final traj size (" << finalmeasurements.size() << ")! No checkHits possible! ";
418  return 0;
419  }
420 
421  for(jmeas = initmeasurements.begin(); jmeas != initmeasurements.end(); jmeas++){
422 
423  const TrackingRecHit* initHit = jmeas->recHit()->hit();
424  if(!initHit->isValid() && ihit == 0 ) continue;
425 
426  if(initHit->isValid()){
427 
428  TrajectoryMeasurement imeas = finalmeasurements.at(ihit);
429  const TrackingRecHit* finalHit = imeas.recHit()->hit();
430  const TrackingRecHit* MaxWeightHit=0;
431  float maxweight = 0;
432 
433  const SiTrackerMultiRecHit* mrh = dynamic_cast<const SiTrackerMultiRecHit*>(finalHit);
434  if (mrh){
435  std::vector<const TrackingRecHit*> components = mrh->recHits();
436  std::vector<const TrackingRecHit*>::const_iterator icomp;
437  int hitcounter=0;
438 
439  for (icomp = components.begin(); icomp != components.end(); icomp++) {
440  if((*icomp)->isValid()) {
441  double weight = mrh->weight(hitcounter);
442  if(weight > maxweight) {
443  MaxWeightHit = *icomp;
444  maxweight = weight;
445  }
446  }
447  hitcounter++;
448  }
449  if(!MaxWeightHit) continue;
450 
451  auto myref1 = reinterpret_cast<const BaseTrackerRecHit *>(initHit)->firstClusterRef();
452  auto myref2 = reinterpret_cast<const BaseTrackerRecHit *>(MaxWeightHit)->firstClusterRef();
453 
454  if( myref1 == myref2 ){
455  nSame++;
456  } else {
457  LogDebug("DAFTrackProducerAlgorithm") << "diverso hit!" << std::endl;
458  TrajectoryStateOnSurface dummState;
459  LogTrace("DAFTrackProducerAlgorithm") << " This hit was:\n ";
460  PrintHit(initHit, dummState);
461  LogTrace("DAFTrackProducerAlgorithm") << " instead now is:\n ";
462  PrintHit(MaxWeightHit, dummState);
463  }
464  }
465  } else {
466 
467  TrajectoryMeasurement imeas = finalmeasurements.at(ihit);
468  const TrackingRecHit* finalHit = imeas.recHit()->hit();
469  if(!finalHit->isValid()){
470  nSame++;
471  }
472  }
473 
474  ihit++;
475  }
476 
477  return nSame;
478 }
479 
480 
481 
483 {
484  if (hit->isValid()){
485 
486  LogTrace("DAFTrackProducerAlgorithm") << " Valid Hit with DetId " << hit->geographicalId().rawId() << " and dim:" << hit->dimension()
487  << " local position " << hit->localPosition()
488  << " global position " << hit->globalPosition()
489  << " and r " << hit->globalPosition().perp() ;
490  if(tsos.isValid()) LogTrace("DAFTrackProducerAlgorithm") << " TSOS combtsos " << tsos.localPosition() ;
491 
492  } else {
493  LogTrace("DAFTrackProducerAlgorithm") << " Invalid Hit with DetId " << hit->geographicalId().rawId();
494  }
495 
496 }
497 
#define LogDebug(id)
PropagationDirection direction() const
MeasurementDetWithData idToDet(const DetId &id) const
Previous MeasurementDetSystem interface.
int foundHits() const
Definition: Trajectory.h:279
virtual int dimension() const =0
T perp() const
Definition: PV3DBase.h:72
ConstRecHitPointer const & recHit() const
int countingGoodHits(const Trajectory traj) const
tuple cont
load Luminosity info ##
Definition: generateEDF.py:622
TrajectorySeed const & seed() const
Access to the seed used to reconstruct the Trajectory.
Definition: Trajectory.h:330
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
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.
T y() const
Definition: PV3DBase.h:63
std::vector< ConstRecHitPointer > RecHitContainer
virtual std::vector< TrajectoryMeasurement > recHits(const Trajectory &, const MeasurementTrackerEvent *theMTE) const =0
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:264
TrackCharge charge() const
virtual TrackingRecHit::ConstRecHitPointer makeShared(SiPixelRecHit const &hit, TrajectoryStateOnSurface const &tsos) const override
Definition: TkClonerImpl.cc:47
virtual GlobalPoint globalPosition() const
const CurvilinearTrajectoryError & curvilinearError() const
const std::vector< double > & getAnnealingProgram() const
std::map< reco::TransientTrack, AlgebraicMatrix33 > TTmap
Definition: TTtoTTmap.h:11
float weight(unsigned int i) const
static std::string const input
Definition: EdmProvDump.cc:44
std::vector< TrajAnnealing > TrajAnnealingCollection
PropagationDirection const & direction() const
Definition: Trajectory.cc:125
uint32_t rawId() const
get the raw id
Definition: DetId.h:43
void filter(const TrajectoryFitter *fitter, std::vector< Trajectory > &input, int minhits, std::vector< Trajectory > &output, const TransientTrackingRecHitBuilder *builder) const
DataContainer const & measurements() const
Definition: Trajectory.h:250
virtual std::vector< const TrackingRecHit * > recHits() const
Access to component RecHits (if any)
TrajectoryMeasurement const & lastMeasurement() const
Definition: Trajectory.h:228
FreeTrajectoryState const * freeState(bool withErrors=true) const
T z() const
Definition: PV3DBase.h:64
Trajectory fit(const std::pair< TransientTrackingRecHit::RecHitContainer, TrajectoryStateOnSurface > &hits, const TrajectoryFitter *theFitter, Trajectory vtraj) const
accomplishes the fitting-smoothing step for each annealing value
virtual Trajectory fitOne(const Trajectory &traj, fitType type=standard) const =0
void PrintHit(const TrackingRecHit *const &hit, TrajectoryStateOnSurface &tsos) const
#define LogTrace(id)
GlobalVector momentum() const
std::shared_ptr< TrackingRecHit const > RecHitPointer
Definition: DetId.h:18
virtual TransientTrackingRecHit::RecHitPointer update(TransientTrackingRecHit::ConstRecHitPointer original, const TrajectoryStateOnSurface &tsos, MeasurementDetWithData &measDet, double annealing=1.) const
GlobalPoint position() const
virtual TrackingRecHit const * hit() const
bool isValid() const
Definition: Trajectory.h:324
TrajectoryMeasurement const & firstMeasurement() const
Definition: Trajectory.h:241
std::pair< TransientTrackingRecHit::RecHitContainer, TrajectoryStateOnSurface > collectHits(const Trajectory vtraj, const MultiRecHitCollector *measurementCollector, const MeasurementTrackerEvent *measTk) const
size_type size() const
map size
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:30
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
bool isValid() const
float chiSquared() const
Definition: Trajectory.h:307
float calculateNdof(const Trajectory vtraj) const
typename Base::AlgoProductCollection AlgoProductCollection
susybsm::HSCParticleCollection hc
Definition: classes.h:25
TrajectoryStateOnSurface const & updatedState() const
const_iterator begin() const
first iterator over the map (read only)
std::vector< Trajectory > fit(const Trajectory &traj, fitType type=standard) const
DetId geographicalId() const
DAFTrackProducerAlgorithm(const edm::ParameterSet &conf)
T x() const
Definition: PV3DBase.h:62
virtual LocalPoint localPosition() const =0
reference front()
Definition: OwnVector.h:429