133 std::vector<Trajectory> FinalTrajectories;
166 LogDebug(
"RoadSearch") <<
"Clean Clouds input size: " << input->size();
168 <<
"*** NEW EVENT: Clean Clouds input size: " << input->size() << std::endl;
172 for ( RoadSearchCloudCollection::const_iterator cloud = input->begin(); cloud != input->end(); ++cloud ) {
176 nchit = recHits.size();
178 std::vector<Trajectory> CloudTrajectories;
187 const unsigned int nlost_max = 2;
191 const unsigned int max_layers = 128;
194 std::vector<std::pair<const DetLayer*, RoadSearchCloud::RecHitVector > > RecHitsByLayer;
195 std::map<const DetLayer*, int> cloud_layer_reference;
196 std::map<const DetLayer*, int>::iterator hiter;
197 for(RoadSearchCloud::RecHitVector::const_iterator ihit = recHits.begin();
198 ihit != recHits.end(); ihit++) {
203 std::map<const DetLayer*, int>::const_iterator ilyr = cloud_layer_reference.find(thisLayer);
204 if (ilyr==cloud_layer_reference.end())
205 cloud_layer_reference.insert(std::make_pair( thisLayer, RecHitsByLayer.size()));
207 if (!RecHitsByLayer.empty() && RecHitsByLayer.back().first == thisLayer) {
208 RecHitsByLayer.back().second.push_back(*ihit);
211 if (ilyr != cloud_layer_reference.end()){
212 int ilayer = ilyr->second;
213 (RecHitsByLayer.begin()+ilayer)->
second.push_back(*ihit);
216 if (RecHitsByLayer.size() >= max_layers)
break;
217 lstereo[RecHitsByLayer.size()] =
false;
218 if ((*ihit)->localPositionError().yy()<1.)
lstereo[RecHitsByLayer.size()] =
true;
220 rhc.push_back(*ihit);
221 RecHitsByLayer.push_back(std::make_pair(thisLayer, rhc));
226 LogDebug(
"RoadSearch")<<
"Cloud #"<<i_c<<
" has "<<recHits.size()<<
" hits in "<<RecHitsByLayer.size()<<
" layers ";
227 if (
debug_)
std::cout <<
"Cloud "<<i_c<<
" has "<<recHits.size()<<
" hits in " <<RecHitsByLayer.size() <<
" layers " <<std::endl;;
233 for (std::vector<std::pair<const DetLayer*, RoadSearchCloud::RecHitVector > >::iterator ilhv = RecHitsByLayer.begin();
234 ilhv != RecHitsByLayer.end(); ++ilhv) {
235 std::cout<<
" Layer " << ilhv-RecHitsByLayer.begin() <<
" has " << ilhv->second.size() <<
" hits " << std::endl;
238 for (std::vector<std::pair<const DetLayer*, RoadSearchCloud::RecHitVector > >::iterator ilhv = RecHitsByLayer.begin();
239 ilhv != RecHitsByLayer.end(); ++ilhv) {
241 for (RoadSearchCloud::RecHitVector::const_iterator ihit = theLayerHits.begin();
242 ihit != theLayerHits.end(); ++ihit) {
248 << gp.
x() <<
" " << gp.
y() <<
" " << gp.
z()
249 <<
" in layer " << ilhv-RecHitsByLayer.begin()
250 <<
" is hit " << (ihit-theLayerHits.begin())+1
251 <<
" of " << theLayerHits.size() << std::endl;
256 << gp.
perp() <<
" " << gp.
z()
257 <<
" in layer " << ilhv-RecHitsByLayer.begin()
258 <<
" is hit " << (ihit-theLayerHits.begin())+1
259 <<
" of " << theLayerHits.size() << std::endl;
270 for (std::vector<std::pair<const DetLayer*, RoadSearchCloud::RecHitVector > >::iterator ilyr0 = RecHitsByLayer.begin();
271 ilyr0 != RecHitsByLayer.end(); ++ilyr0) {
273 unsigned int ilayer0 = (
unsigned int)(ilyr0-RecHitsByLayer.begin());
276 std::vector<Trajectory> ChunkTrajectories;
277 std::vector<Trajectory> CleanChunks;
278 bool all_chunk_layers_used =
false;
280 if (
debug_)
std::cout <<
"*** START NEW CHUNK --> layer range (" << ilyr0-RecHitsByLayer.begin()
281 <<
"-" << RecHitsByLayer.size()-1 <<
")";
293 std::multimap<int, const DetLayer*> layer_map;
294 std::map<const DetLayer*, int> layer_reference;
296 for (std::vector<std::pair<const DetLayer*, RoadSearchCloud::RecHitVector > >::iterator ilayer = ilyr0+1;
297 ilayer != RecHitsByLayer.end(); ++ilayer) {
298 layer_map.insert(std::make_pair(ilayer->second.size(), ilayer->first));
299 layer_reference.insert(std::make_pair(ilayer->first, ilayer-RecHitsByLayer.begin()));
303 std::cout<<std::endl<<
" Available layers are: " << std::endl;
304 for (std::multimap<int, const DetLayer*>::iterator ilm1 = layer_map.begin();
305 ilm1 != layer_map.end(); ++ilm1) {
306 std::map<const DetLayer*, int>::iterator ilr = layer_reference.find(ilm1->second);
307 if (ilr != layer_reference.end() &&
debug_)
308 std::cout <<
"Layer " << ilr->second <<
" with " << ilm1->first <<
" hits" <<std::endl;;
313 std::set<const DetLayer*> the_good_layers;
314 std::vector<const DetLayer*> the_middle_layers;
318 chooseStartingLayers(RecHitsByLayer,ilyr0,layer_map,the_good_layers,the_middle_layers,the_recHits_middle);
320 std::cout <<
" From new code... With " << the_good_layers.size() <<
" useful layers: ";
321 for (std::set<const DetLayer*>::iterator igl = the_good_layers.begin();
322 igl!= the_good_layers.end(); ++igl){
323 std::map<const DetLayer*, int>::iterator ilr = layer_reference.find(*igl);
324 if (ilr != layer_reference.end())
std::cout <<
" " << ilr->second;
327 std::cout <<
" From new code... and middle layers: ";
328 for (std::vector<const DetLayer*>::iterator iml = the_middle_layers.begin();
329 iml!= the_middle_layers.end(); ++iml){
330 std::map<const DetLayer*, int>::iterator ilr = layer_reference.find(*iml);
331 if (ilr != layer_reference.end())
std::cout <<
" " << ilr->second;
337 std::set<const DetLayer*> good_layers = the_good_layers;
338 unsigned int ngoodlayers = good_layers.size();
341 std::cout<<
"Found " << recHits_inner.size() <<
" inner hits and " << recHits_outer.size() <<
" outer hits" << std::endl;
344 std::vector<std::pair<const DetLayer*, RoadSearchCloud::RecHitVector > > goodHits;
346 std::set<const DetLayer*> skipped_layers;
347 std::map<int, const DetLayer*> skipped_layer_detmap;
350 goodHits.push_back(*ilyr0);
352 for (std::vector<std::pair<const DetLayer*, RoadSearchCloud::RecHitVector > >::iterator ilyr = ilyr0+1;
353 ilyr != RecHitsByLayer.end(); ++ilyr) {
354 if (good_layers.find(ilyr->first) != good_layers.end()){
355 goodHits.push_back(*ilyr);
358 skipped_layers.insert(ilyr->first);
359 std::map<const DetLayer*, int>::iterator ilr = layer_reference.find(ilyr->first);
360 if (ilr != layer_reference.end())
361 skipped_layer_detmap.insert(std::make_pair(ilr->second,ilyr->first));
363 if (
debug_)
std::cout<<
"Couldn't find thisLayer to insert into map..."<<std::endl;
368 for (RoadSearchCloud::RecHitVector::const_iterator innerHit = recHits_inner.begin();
369 innerHit != recHits_inner.end(); ++innerHit) {
375 RoadSearchCloud::RecHitVector::iterator middleHit, outerHit;
376 RoadSearchCloud::RecHitVector::iterator firstHit, lastHit;
381 firstHit = recHits_outer.begin();
382 lastHit = recHits_outer.end();
385 firstHit = recHits_outer.begin()+1;
386 lastHit = recHits_outer.end();
389 for (RoadSearchCloud::RecHitVector::iterator outerHit = firstHit; outerHit != lastHit; ++outerHit) {
393 middleHit = outerHit-1;
398 if (middleHitLayer == outerHitLayer)
continue;
403 std::map<const DetLayer*, int>::iterator ilro = layer_reference.find(outerHitLayer);
404 if (ilro != layer_reference.end()) {
405 std::cout <<
"Try trajectory with Inner Hit on Layer " << ilayer0 <<
" and " ;
406 std::cout <<
"Outer Hit on Layer " << ilro->second << std::endl;
413 std::map<const DetLayer*, int>::iterator ilrm = layer_reference.find(middleHitLayer);
414 std::map<const DetLayer*, int>::iterator ilro = layer_reference.find(outerHitLayer);
415 if (ilro != layer_reference.end() && ilrm != layer_reference.end()) {
416 std::cout <<
"Try trajectory with Hits on Layers " << ilayer0 <<
" , "
417 << ilrm->second <<
" and " << ilro->second << std::endl;
428 std::vector<Trajectory> rawTrajectories;
429 if (seedTraj.
isValid() && !seedTraj.
measurements().empty() ) rawTrajectories.push_back(seedTraj);
434 std::vector<std::pair<const DetLayer*, RoadSearchCloud::RecHitVector > >::iterator ilyr_start = (goodHits.begin()+1);
435 for (std::vector<std::pair<const DetLayer*, RoadSearchCloud::RecHitVector > >::iterator ilhv = ilyr_start;
436 ilhv != goodHits.end(); ++ilhv) {
441 std::map<const DetLayer*, int>::iterator ilr = cloud_layer_reference.find(ilhv->first);
442 if (ilr != cloud_layer_reference.end())
443 std::cout <<
"extrapolating " << rawTrajectories.size()
444 <<
" trajectories to layer " << ilr->second
445 <<
" which has " << hits.size() <<
" hits " << std::endl;
448 std::vector<Trajectory>newTrajectories;
449 for (std::vector<Trajectory>::const_iterator it = rawTrajectories.begin();
450 it != rawTrajectories.end(); it++) {
451 if (
debug_)
std::cout <<
"extrapolating Trajectory #" << it-rawTrajectories.begin() << std::endl;
456 innerHitLayer, *outerHit, outerHitLayer);
457 if (theTrajectories.empty()) {
458 if (
debug_)
std::cout<<
" Could not add the hit in this layer " << std::endl;
460 std::cout <<
" --> trajectory " << it-rawTrajectories.begin()
461 <<
" has "<<it->recHits().size()<<
" hits after "
462 << (ilhv-ilyr_start+1) <<
" tested (ntested=" <<ntested<<
") "
463 <<
" --> misses="<< (ilhv-ilyr_start+1)-(it->recHits().size()-1)
464 <<
" but there are " << (goodHits.end() - ilhv)
465 <<
" more layers in first pass and "<< skipped_layers.size() <<
" skipped layers " <<std::endl;
470 if ((ilhv-ilyr_start+1)-(it->recHits().size()-1) <= nlost_max){
471 newTrajectories.push_back(*it);
475 for (std::vector<Trajectory>::const_iterator it = theTrajectories.begin();
476 it != theTrajectories.end(); it++) {
477 newTrajectories.push_back(*it);
481 rawTrajectories = newTrajectories;
482 if (newTrajectories.empty())
break;
484 if (rawTrajectories.size()==0){
486 if (
debug_)
std::cout<<
" --> yields ZERO raw trajectories!" << std::endl;
489 for (std::vector<Trajectory>::const_iterator it = rawTrajectories.begin();
490 it != rawTrajectories.end(); it++) {
491 std::cout <<
" --> yields trajectory with "<<it->recHits().size()<<
" hits with chi2="
492 <<it->chiSquared()<<
" and is valid? "<<it->isValid() <<std::endl;
495 std::vector<Trajectory> rawCleaned;
497 for (std::vector<Trajectory>::const_iterator itr = rawTrajectories.begin();
498 itr != rawTrajectories.end(); ++itr) {
500 if (!itr->isValid())
continue;
501 std::set<const DetLayer*> used_layers;
503 for (Trajectory::DataContainer::iterator itm = tmv.begin();
504 itm != tmv.end(); ++itm) {
506 if (!rh->isValid())
continue;
511 if (
debug_)
std::cout<<
"Used " << (used_layers.size()-1) <<
" layers out of " << ngoodlayers
512 <<
" good layers, so " << ngoodlayers - (used_layers.size()-1) <<
" missed "
514 if ((
int)used_layers.size() <
nFoundMin_)
continue;
515 unsigned int nlostlayers = ngoodlayers - (used_layers.size()-1);
516 if (nlostlayers > nlost_max)
continue;
518 rawCleaned.push_back(*itr);
521 if (!rawCleaned.empty()) {
522 ChunkTrajectories.insert(ChunkTrajectories.end(), rawCleaned.begin(), rawCleaned.end());
530 if (
debug_)
std::cout <<
"Clean the " << ChunkTrajectories.size()<<
" trajectories for this chunk" << std::endl;
533 for (std::vector<Trajectory>::const_iterator it = ChunkTrajectories.begin();
534 it != ChunkTrajectories.end(); it++) {
535 if (it->isValid()) CleanChunks.push_back(*it);
537 if (
debug_)
std::cout <<
"After cleaning there are " << CleanChunks.size() <<
" trajectories for this chunk" << std::endl;
546 std::vector<Trajectory> extendedChunks;
552 if (skipped_layers.empty()) {
553 std::cout <<
"all layers were used in first pass" << std::endl;
555 std::cout <<
"There are " << skipped_layer_detmap.size() <<
" skipped layers:";
556 for (std::map<int, const DetLayer*>::const_iterator imap = skipped_layer_detmap.begin();
557 imap!=skipped_layer_detmap.end(); imap++){
564 for (std::vector<Trajectory>::const_iterator
i = CleanChunks.begin();
565 i != CleanChunks.end();
i++) {
566 if (!(*i).isValid())
continue;
567 if (
debug_)
std::cout<<
"Now process CleanChunk trajectory " <<
i-CleanChunks.begin() << std::endl;
568 bool all_layers_used =
false;
569 if (skipped_layers.empty() &&
i->measurements().size() >=
theNumHitCut) {
571 <<
" hits from a cloud of " << RecHitsByLayer.size()
572 <<
" layers and a chunk of " << (RecHitsByLayer.size() - ilayer0) <<
" layers " << std::endl;
573 extendedChunks.insert(extendedChunks.end(), *
i);
574 if (
i->measurements().size() >= (RecHitsByLayer.size() - ilayer0)){
575 all_layers_used =
true;
583 if (tmv.size()+skipped_layer_detmap.size() <
theNumHitCut)
continue;
587 for (Trajectory::DataContainer::const_iterator ih=tmv.begin();
592 std::map<const DetLayer*, int>::iterator ilr = cloud_layer_reference.find(Layer);
593 if (ilr != cloud_layer_reference.end())
594 std::cout <<
" Hit #"<<ih-tmv.begin() <<
" of " << tmv.size()
595 <<
" is on Layer " << ilr->second << std::endl;
597 std::cout <<
" Layer for Hit #"<<ih-tmv.begin() <<
" can't be found " << std::endl;
598 std::cout<<
" updatedState:\n" << ih->updatedState() << std::endl;
599 std::cout<<
" predictState:\n" << ih->predictedState() << std::endl;
605 std::set<const DetLayer*> final_layers;
606 Trajectory::DataContainer::const_iterator im = tmv.begin();
607 Trajectory::DataContainer::const_iterator im2 = tmv.begin();
615 if(
debug_)
std::cout<<
"Smoothing has returned " << freshStartv.size() <<
" trajectory " << std::endl;
616 if (!freshStartv.empty()){
617 if(
debug_)
std::cout<<
"Smoothing of trajectory " <<
i-CleanChunks.begin() <<
" has succeeded with " << freshStartv.begin()->measurements().size() <<
" hits and a chi2 of " << freshStartv.begin()->chiSquared() <<
" for " << freshStartv.begin()->ndof() <<
" DOF. Now add hits." <<std::endl;
619 if (
debug_)
std::cout<<
"Smoothing of trajectory " <<
i-CleanChunks.begin() <<
" has failed"<<std::endl;
624 std::vector<TrajectoryMeasurement> freshStartTM = freshStart.
measurements();
627 for (std::vector<TrajectoryMeasurement>::const_iterator itm = freshStartTM.begin();itm != freshStartTM.end(); ++itm){
628 std::cout<<
"Trajectory hit " << itm-freshStartTM.begin() <<
" updatedState:\n" << itm->updatedState() << std::endl;
634 if(
debug_)
std::cout <<
" NewFirstTSOS:\n " << NewFirstTsos << std::endl;
638 std::cout<<
"First hit for fresh start on det " << rh->det() <<
", r/phi/z = " << rh->globalPosition().perp() <<
" " << rh->globalPosition().phi() <<
" " << rh->globalPosition().z();
642 rh->geographicalId().rawId());
661 final_layers.insert(firstDetLayer);
663 if(
debug_)
std::cout <<
"TRAJ is valid: " << newTrajectory.isValid() <<std::endl;
673 if (firstDetLayer != ilyr0->first){
674 if (
debug_)
std::cout<<
"!!! ERROR !!! firstDetLayer ("<<firstDetLayer<<
") != ilyr0 ( " <<ilyr0->first <<
")"<< std::endl;
679 std::map<const DetLayer*, int>::iterator ilr = cloud_layer_reference.find(firstDetLayer);
680 if (ilr != cloud_layer_reference.end() ){
681 std::cout <<
" First hit is on layer " << ilr->second << std::endl;
684 for (std::vector<std::pair<const DetLayer*, RoadSearchCloud::RecHitVector > >::iterator ilyr = ilyr0+1;
685 ilyr != RecHitsByLayer.end(); ++ilyr) {
692 std::cout<<
"Trajectory has " << newTrajectory.measurements().size() <<
" measurements with " << (RecHitsByLayer.end()-ilyr)
693 <<
" remaining layers " << std::endl;
695 if (im != tmv.end()) im2 = im;
700 if (
debug_)
std::cout<<
" Layer " << ilyr-RecHitsByLayer.begin() <<
" has a good hit " << std::endl;
705 currTsos = newTrajectory.measurements().back().updatedState();
706 predTsos = thePropagator->propagate(currTsos, det->
surface());
707 if (!predTsos.
isValid())
continue;
712 std::cout <<
"Propagation distance2 is " << propagationDistance.
mag() << std::endl;
713 std::cout <<
"predTSOS is valid!!" << std::endl;
724 if (
debug_)
std::cout<<
"Failed to add one of the original hits on a low occupancy layer!!!!" << std::endl;
738 newTrajectory.push(tm,est.second);
739 final_layers.insert(ilyr->first);
742 if (
debug_)
std::cout<<
" Layer " << ilyr-RecHitsByLayer.begin() <<
" is one of the skipped layers " << std::endl;
746 std::set<const GeomDet*> dets;
747 for (RoadSearchCloud::RecHitVector::const_iterator ih = ilyr->second.begin();
748 ih != ilyr->second.end(); ++ih) {
754 std::cout<<
" ---> probing missing hits (nh="<< skipped_hits.
size() <<
", nd=" << dets.size()
755 <<
") in layer " << ilyr-RecHitsByLayer.begin() <<std::endl;
765 if (!theGoodHits.empty()){
766 final_layers.insert(ilyr->first);
767 if (
debug_)
std::cout<<
"Found " << theGoodHits.size() <<
" good hits to add" << std::endl;
768 for (std::vector<TrajectoryMeasurement>::const_iterator im=theGoodHits.begin();im!=theGoodHits.end();++im){
769 newTrajectory.push(*im,im->estimate());
775 if (
debug_)
std::cout<<
"Finished loop over layers in cloud. Trajectory now has " <<newTrajectory.measurements().size()
776 <<
" hits. " << std::endl;
777 if (
debug_)
std::cout<<
"The trajectory has " << newTrajectory.measurements().size() <<
" hits on " << final_layers.size()
778 <<
" layers from a cloud of " << RecHitsByLayer.size()
779 <<
" layers and a chunk of " << (RecHitsByLayer.size() - ilayer0) <<
" layers " << std::endl;
780 if (newTrajectory.measurements().size() >=
theNumHitCut)
781 extendedChunks.insert(extendedChunks.end(), newTrajectory);
782 if (final_layers.size() >= (RecHitsByLayer.size() - ilayer0)){
783 if (
debug_)
std::cout<<
"All layers of the chunk have been used..." << std::endl;
784 all_layers_used =
true;
787 if (all_layers_used) {
788 if (
debug_)
std::cout <<
"All layers were used, so break....." << std::endl;
789 all_chunk_layers_used =
true;
794 if (
debug_)
std::cout<<
"Now Clean the " << extendedChunks.size() <<
" extended chunks " <<std::endl;
796 for (std::vector<Trajectory>::const_iterator it = extendedChunks.begin();
797 it != extendedChunks.end(); it++) {
798 if (it->isValid()) CloudTrajectories.push_back(*it);
800 if (all_chunk_layers_used)
break;
806 << CloudTrajectories.size() <<
" cloud trajectories "<<std::endl ;
808 for (std::vector<Trajectory>::const_iterator it = CloudTrajectories.begin();
809 it != CloudTrajectories.end(); it++) {
810 if (it->isValid()) FinalTrajectories.push_back(*it);
813 if (
debug_)
std::cout<<
" Final trajectories now has size " << FinalTrajectories.size()<<std::endl ;
834 std::vector<TrajectoryMeasurement>
836 const std::set<const GeomDet*>& theDets,
842 std::vector<TrajectoryMeasurement> theBestHits;
845 std::map<const GeomDet*, TrajectoryStateOnSurface> dmmap;
846 for (std::set<const GeomDet*>::iterator idet = theDets.begin();
847 idet != theDets.end(); ++idet) {
852 dmmap.insert(std::make_pair(*idet, predTsos));
856 std::map<const GeomDet*, TrajectoryMeasurement> dtmmap;
858 ih != theHits.
end(); ++ih) {
861 std::map<const GeomDet*, TrajectoryStateOnSurface>::iterator idm = dmmap.find(det);
862 if (idm == dmmap.end())
continue;
870 std::map<const GeomDet*, TrajectoryMeasurement>::iterator idtm = dtmmap.find(det);
871 if (idtm == dtmmap.end()) {
874 dtmmap.insert(std::make_pair(det, tm));
875 }
else if (idtm->second.estimate() > est.second) {
879 dtmmap.insert(std::make_pair(det, tm));
884 if (!dtmmap.empty()) {
885 for (std::map<const GeomDet*, TrajectoryMeasurement>::iterator idtm = dtmmap.begin();
886 idtm != dtmmap.end(); ++idtm) {
888 theBestHits.push_back(itm);
896 std::vector<TrajectoryMeasurement>
898 const std::set<const GeomDet*>& theDets,
902 std::vector<TrajectoryMeasurement> theBestHits;
904 double bestchi = 10000.0;
906 std::map<const GeomDet*, TrajectoryStateOnSurface> dmmap;
907 for (std::set<const GeomDet*>::iterator idet = theDets.begin();
908 idet != theDets.end(); ++idet) {
913 dmmap.insert(std::make_pair(*idet, predTsos));
917 std::map<const GeomDet*, TrajectoryMeasurement> dtmmap;
919 ih != theHits.
end(); ++ih) {
922 std::map<const GeomDet*, TrajectoryStateOnSurface>::iterator idm = dmmap.find(det);
923 if (idm == dmmap.end())
continue;
931 if (est.second < bestchi){
932 if(!theBestHits.empty()){
933 theBestHits.erase(theBestHits.begin());
935 bestchi = est.second;
938 theBestHits.push_back(tm);
943 if (theBestHits.empty()){
947 for (std::vector<TrajectoryMeasurement>::const_iterator im=theBestHits.begin();im!=theBestHits.end();++im)
950 <<
" with estimate " << im->estimate()<<std::endl ;
956 std::vector<TrajectoryMeasurement>
958 const std::set<const GeomDet*>& theDets,
965 std::vector<TrajectoryMeasurement> theBestHits;
971 std::map<const GeomDet*, TrajectoryStateOnSurface> dmmap;
972 for (std::set<const GeomDet*>::iterator idet = theDets.begin();
973 idet != theDets.end(); ++idet) {
978 dmmap.insert(std::make_pair(*idet, predTsos));
982 if(
debug_)
std::cout <<
"TRAJECTORY INTERSECTS " << dmmap.size() <<
" DETECTORS." << std::endl;
985 std::map<const GeomDet*, TrajectoryMeasurement> dtmmap;
991 std::map<const GeomDet*, TrajectoryStateOnSurface>::iterator idm = dmmap.find(det);
992 if (idm == dmmap.end())
continue;
1010 std::cout <<
"rhit local position x: " << rhit->localPosition().x() <<
"+-" <<
sqrt(rhit->localPositionError().xx()) << std::endl;
1011 std::cout <<
"rhit local position y: " << rhit->localPosition().y() <<
"+-" <<
sqrt(rhit->localPositionError().yy()) << std::endl;
1016 <<
": est = " << est.first <<
" " << est.second <<std::endl;
1023 std::map<const GeomDet*, TrajectoryMeasurement>::iterator idtm = dtmmap.find(det);
1024 if (idtm == dtmmap.end()) {
1027 dtmmap.insert(std::make_pair(det, tm));
1028 }
else if (idtm->second.estimate() > est.second) {
1032 dtmmap.insert(std::make_pair(det, tm));
1039 else if (!firstTM) {
1041 if (est.second < theBestTM.
estimate()) {
1049 if (
debug_)
std::cout<<
"Hits(Dets) to add: " << dtmmap.size() <<std::endl;
1050 if (!dtmmap.empty()) {
1052 std::vector<std::pair<TransientTrackingRecHit::ConstRecHitPointer, TrajectoryMeasurement*> > OverlapHits;
1053 for (std::map<const GeomDet*, TrajectoryMeasurement>::iterator idtm = dtmmap.begin();
1054 idtm != dtmmap.end(); ++idtm) {
1055 OverlapHits.push_back(std::make_pair(idtm->second.recHit(),&idtm->second));
1059 <<
" with estimate " << idtm->second.estimate()<<std::endl ;
1062 std::cout<<
" Best Measurement is on layer "
1064 <<
" with estimate " << theBestTM.
estimate()<<std::endl ;
1067 if (dtmmap.size()==1){
1068 for (std::map<const GeomDet*, TrajectoryMeasurement>::iterator idtm = dtmmap.begin();
1069 idtm != dtmmap.end(); ++idtm) {
1073 <<
" with estimate " << itm.
estimate()<<std::endl ;
1074 theBestHits.push_back(itm);
1077 else if (dtmmap.size()>=2) {
1079 if (
debug_)
std::cout<<
"Unsorted OverlapHits has size " <<OverlapHits.size() << std::endl;
1081 for (std::vector<std::pair<TransientTrackingRecHit::ConstRecHitPointer,TrajectoryMeasurement*> >::iterator irh =OverlapHits.begin();
1082 irh!=OverlapHits.end();++irh){
1084 <<
" on det " << irh->first->det()
1088 << irh->first->globalPosition().perp() <<
" "
1089 << irh->first->globalPosition().phi() <<
" "
1090 << irh->first->globalPosition().z()
1095 if (
debug_)
std::cout<<
"Sorted OverlapHits has size " <<OverlapHits.size() << std::endl;
1097 float workingBestChi2 = 1000000.0;
1098 std::vector<TrajectoryMeasurement> workingBestHits;
1100 std::vector<std::pair<TransientTrackingRecHit::ConstRecHitPointer,TrajectoryMeasurement*> >::iterator irh1;
1101 std::vector<std::pair<TransientTrackingRecHit::ConstRecHitPointer,TrajectoryMeasurement*> >::iterator irh2;
1102 for (irh1 =OverlapHits.begin(); irh1!=--OverlapHits.end(); ++irh1){
1103 theBestHits.clear();
1104 float running_chi2=0;
1106 <<
" on det " << irh1->first->det()
1111 << irh1->first->globalPosition().perp() <<
" "
1112 << irh1->first->globalPosition().phi() <<
" "
1113 << irh1->first->globalPosition().z()
1118 theBestHits.push_back(*(irh1->second));
1119 if (
debug_)
std::cout<<
"Added first hit with chi2 = " << irh1->second->estimate() << std::endl;
1120 running_chi2 += irh1->second->estimate();
1121 for (irh2 = irh1; irh2!=OverlapHits.end(); ++irh2){
1122 if (irh2 == irh1)
continue;
1124 const GeomDet* det = irh2->first->det();
1130 if (
debug_)
std::cout<<
"Added overlap hit with est = " << est.first <<
" " << est.second << std::endl;
1134 theBestHits.push_back(tm);
1135 running_chi2 += est.second ;
1142 if (theBestHits.size()==dtmmap.size()){
1143 if (
debug_)
std::cout<<
"Added all "<<theBestHits.size()<<
" hits out of " << dtmmap.size() << std::endl;
1147 if (theBestHits.size() < dtmmap.size()){
1148 if (
debug_)
std::cout<<
"Added only "<<theBestHits.size()<<
" hits out of " << dtmmap.size() << std::endl;
1150 if (theBestHits.size() > workingBestHits.size()){
1151 if (
debug_)
std::cout<<
"Current combo has more hits so replace best" << std::endl;
1152 workingBestHits = theBestHits;
1155 else if (theBestHits.size() == workingBestHits.size()){
1156 if (running_chi2< workingBestChi2){
1157 if (
debug_)
std::cout<<
"Current combo has same # of hits but lower chi2 so replace best" << std::endl;
1158 workingBestHits = theBestHits;
1159 workingBestChi2 = running_chi2;
1164 if (theBestHits.size()<2){
1167 << theBestTM.
recHit()->det()
1171 << theBestTM.
recHit()->globalPosition().perp() <<
" "
1172 << theBestTM.
recHit()->globalPosition().phi() <<
" "
1173 << theBestTM.
recHit()->globalPosition().z()
1174 <<
" with estimate " << theBestTM.
estimate()<<std::endl ;
1175 theBestHits.clear();
1176 theBestHits.push_back(theBestTM);
1181 if (
debug_)
std::cout <<
"ERROR: Unexpected size from DTMMAP = " << dtmmap.size() << std::endl;
1182 theBestHits.push_back(theBestTM);
1193 std::vector<std::pair<const DetLayer*, RoadSearchCloud::RecHitVector > >::iterator ilyr0,
1194 const std::multimap<int, const DetLayer*>& layer_map,
1195 std::set<const DetLayer*>& good_layers,
1196 std::vector<const DetLayer*>& middle_layers ,
1199 const unsigned int max_middle_layers = 2;
1206 std::multimap<int, const DetLayer*>::const_iterator ilm = layer_map.begin();
1207 int ngoodlayers = 0;
1208 while (ilm != layer_map.end()) {
1209 if (ngoodlayers >=
nFoundMin_ && ilm->first > 1)
break;
1211 good_layers.insert(ilm->second);
1217 for (std::vector<std::pair<const DetLayer*, RoadSearchCloud::RecHitVector > >::iterator ilayer = ilyr0+1;
1218 ilayer != recHitsByLayer.end(); ++ilayer) {
1220 if (good_layers.find(ilayer->first) == good_layers.end())
continue;
1223 middle_layers.push_back(ilayer->first);
1224 if (middle_layers.size() >= max_middle_layers)
break;
1227 for (std::vector<const DetLayer*>::iterator ml = middle_layers.begin();
1228 ml!=middle_layers.end();++ml){
1229 unsigned int middle_layers_found = 0;
1230 for (std::vector<std::pair<const DetLayer*, RoadSearchCloud::RecHitVector > >::iterator ilyr = recHitsByLayer.begin();
1231 ilyr != recHitsByLayer.end(); ++ilyr) {
1232 if (ilyr->first == *ml){
1233 for (RoadSearchCloud::RecHitVector::const_iterator ih = ilyr->second.begin();
1234 ih != ilyr->second.end(); ++ih) {
1235 recHits_middle.push_back(*ih);
1237 ++middle_layers_found;
1239 if (middle_layers_found == middle_layers.size())
continue;
1243 return (recHits_middle.size()>0);
1255 LogDebug(
"RoadSearch") <<
"inner hit: r/phi/z = "<< inner.
perp() <<
" " << inner.
phi() <<
" " << inner.
z() ;
1256 LogDebug(
"RoadSearch") <<
"outer hit: r/phi/z = "<< outer.
perp() <<
" " << outer.
phi() <<
" " << outer.
z() ;
1259 const double dRmin = 0.1;
1260 if (outer.
perp() - inner.
perp() < dRmin)
return fts;
1265 const double dz2 = 5.3*5.3;
1269 double z_0 = -linearFit.
c()/linearFit.
n2();
1280 double x0=0.0,y0=0.0,z0=0.0;
1281 double phi0 = -999.0;
1283 phi0=atan2(outer.
y()-inner.
y(),outer.
x()-inner.
x());
1285 if (inner.
y()<outer.
y()){
1290 double alpha=atan2(inner.
y(),inner.
x());
1291 double d1=
sqrt(inner.
x()*inner.
x()+inner.
y()*inner.
y());
1292 double d0=-d1*
sin(alpha-phi0); x0=d0*
sin(phi0); y0=-d0*
cos(phi0);
1293 double l1=0.0,l2=0.0;
1294 if (fabs(
cos(phi0))>0.1){
1295 l1=(inner.
x()-x0)/
cos(phi0);l2=(outer.
x()-x0)/
cos(phi0);
1297 l1=(inner.
y()-y0)/
sin(phi0);l2=(outer.
y()-y0)/
sin(phi0);
1299 z0=(l2*inner.
z()-l1*outer.
z())/(l2-l1);
1306 float zErr = vertexErr.
czz();
1307 float transverseErr = vertexErr.
cxx();
1308 C(3, 3) = transverseErr;
1315 double dzdr = -flfit.
n1()/flfit.
n2();
1316 if (inner.
y()<outer.
y()) dzdr*=-1;
1319 if (
debug_)
std::cout<<
"Initial Point (x0/y0/z0): " << x0 <<
'\t'<< y0 <<
'\t'<< z0 << std::endl;
1330 if (
debug_)
std::cout<<
"\nInitial CError (dx/dy/dz): " << CErr(1,1) <<
'\t'<< CErr(2,2) <<
'\t'<< CErr(3,3) << std::endl;
1353 LogDebug(
"RoadSearch") <<
"inner hit: r/phi/z = "<< inner.
perp() <<
" " << inner.
phi() <<
" " << inner.
z() ;
1354 LogDebug(
"RoadSearch") <<
"middlehit: r/phi/z = "<< inner.
perp() <<
" " << inner.
phi() <<
" " << inner.
z() ;
1355 LogDebug(
"RoadSearch") <<
"outer hit: r/phi/z = "<< outer.
perp() <<
" " << outer.
phi() <<
" " << outer.
z() ;
1358 const double dRmin = 0.1;
1359 if (outer.
perp() - inner.
perp() < dRmin)
return fts;
1361 const double dz2 = 5.3*5.3;
1365 double z_0 = -linearFit.
c()/linearFit.
n2();
1369 FastHelix helix(outer, middle, inner, es);
1380 float transverseErr = dr2;
1381 C(3, 3) = transverseErr;
1420 if (
debug_)
std::cout<<
"*******DISASTER ********* seed doesn't make it to first hit!!!!!" << std::endl;
1421 return theSeedTrajectory;
1436 if (!est.first)
return theSeedTrajectory;
1439 if (!innerUpdated.
isValid() ||
1441 if (
debug_)
std::cout<<
"Trajectory updated with first hit is invalid!!!" << std::endl;
1442 return theSeedTrajectory;
1447 intrhit->geographicalId().rawId());
1449 newHitsTwo.
push_back(intrhit->hit()->clone());
1460 delete pFirstStateTwo;
1465 theSeedTrajectory.
push(tm,est.second);
1467 return theSeedTrajectory;
1478 std::vector<Trajectory> newTrajectories;
1480 for(RoadSearchCloud::RecHitVector::const_iterator ihit = theLayerHits.begin();
1481 ihit != theLayerHits.end(); ihit++) {
1485 if (thisLayer == innerHitLayer){
1491 if (thisLayer == outerHitLayer){
1494 if (p1.
x()!=p2.
x() || p1.
y()!=p2.
y())
continue;
1501 if (rhit->isValid()) {
1502 LogDebug(
"RoadSearch") <<
"RecHit " << ihit-theLayerHits.begin()
1503 <<
", det " << rhit->det() <<
", r/phi/z = "
1504 << rhit->globalPosition().perp() <<
" "
1505 << rhit->globalPosition().phi() <<
" "
1506 << rhit->globalPosition().z();
1508 LogDebug(
"RoadSearch") <<
"RecHit " << ihit-theLayerHits.begin()
1520 if (
debug_)
std::cout<<
"BIG ERROR!!! How did we make it to here with no trajectory measurements?!?!?"<<std::endl;
1539 std::cout <<
"Propagation distance1 is " << propagationDistance.
mag() << std::endl;
1545 <<
", hit " << ihit-theLayerHits.begin()
1548 <<
", hit at " << rhit->localPosition().x() <<
" +- " <<
sqrt(rhit->localPositionError().xx())
1566 if (
debug_)
std::cout <<
"estimation: " << est.first <<
" " << est.second << std::endl;
1567 if (!est.first)
continue;
1570 traj.
push(tm,est.second);
1571 newTrajectories.push_back(traj);
1576 return newTrajectories;
1592 std::vector<Trajectory> traj;
1595 std::vector<bool> trajUsed;
1597 for (std::vector<Trajectory>::iterator it = theTrajectories.begin(); it != theTrajectories.end(); ++it) {
1598 if (it->isValid()) {
1599 traj.push_back(*it);
1600 trajUsed.push_back(
false);
1605 std::cout <<
"==========ENTERING COSMIC MODE===========" << std::endl;
1607 for (std::vector<Trajectory>::iterator it = traj.begin(); it != traj.end(); it++) {
1608 std::cout <<
"Trajectory " << it-traj.begin() <<
" has "<<it->recHits().size()<<
" hits and is valid: " << it->isValid() << std::endl;
1612 for (TransientTrackingRecHit::ConstRecHitContainer::const_iterator rhit=itHits.begin(); rhit!=itHits.end(); ++rhit)
1613 std::cout <<
"-->good hit position: " << (*rhit)->globalPosition().x() <<
", "
1614 << (*rhit)->globalPosition().y() <<
", "<< (*rhit)->globalPosition().z() << std::endl;
1620 for (
unsigned int i = 0;
i < traj.size(); ++
i) {
1621 if (trajUsed[
i])
continue;
1622 for (
unsigned int j = i+1;
j != traj.size(); ++
j) {
1623 if (trajUsed[
j])
continue;
1625 if (
debugCosmics_)
std::cout<<
"Trajectory " <<i<<
" has "<<traj[
i].recHits().size()<<
" hits with chi2=" << traj[
i].chiSquared() <<
" and is valid"<<std::endl;
1626 if (
debugCosmics_)
std::cout<<
"Trajectory " <<j<<
" has "<<traj[
j].recHits().size()<<
" hits with chi2=" << traj[
j].chiSquared() <<
" and is valid"<<std::endl;
1681 Trajectory *upperTrajectory, *lowerTrajectory;
1685 lowerTSOS1=lastTraj1TSOS; upperTSOS1=firstTraj1TSOS;
1688 lowerTSOS1=firstTraj1TSOS; upperTSOS1=lastTraj1TSOS;
1692 else lowerTSOS2=firstTraj2TSOS;
1697 upperTrajectory = &(traj[
i]);
1698 lowerTrajectory = &(traj[
j]);
1704 upperTrajectory = &(traj[
j]);
1705 lowerTrajectory = &(traj[
i]);
1711 if (freshStartUpperTrajectory.empty() || freshStartLowerTrajectory .empty()){
1717 TrajectoryStateOnSurface forwardTsos = freshStartUpperTrajectory.begin()->firstMeasurement().forwardPredictedState();
1718 TrajectoryStateOnSurface backwardTsos = freshStartUpperTrajectory.begin()->lastMeasurement().backwardPredictedState();
1720 Trajectory freshStartTrajectory = *freshStartUpperTrajectory.begin();
1735 bool addHitToFreshStartTrajectory =
false;
1736 bool propagationFailed =
false;
1738 for (TransientTrackingRecHit::ConstRecHitContainer::const_iterator rhit=ttHits.begin(); rhit!=ttHits.end(); ++rhit){
1741 std::cout <<
" Lost " << lostHits <<
" of " << ttHits.size() <<
" on lower trajectory " << std::endl;
1742 std::cout <<
" Lost " << ((float)lostHits/(
float)ttHits.size()) <<
" of hits of on lower trajectory " << std::endl;
1744 if ((
float)lostHits/(float)ttHits.size() > 0.5) {
1745 propagationFailed =
true;
1748 if(
debugCosmics_)
std::cout <<
"-->hit position: " << (*rhit)->globalPosition().x() <<
", " << (*rhit)->globalPosition().y() <<
", "<< (*rhit)->globalPosition().z() << std::endl;
1818 if( rh->isValid() ) {
1821 if( addHitToFreshStartTrajectory==
false ) {
1846 if(
debugCosmics_)
std::cout<<
"Failed to add one of the original hits on a low occupancy layer!!!!" << std::endl;
1856 freshStartTrajectory.
push(tm,est.second);
1857 addHitToFreshStartTrajectory=
true;
1864 if (propagationFailed) {
1874 for (
int k=tttempHits.size()-1;
k>=0;
k--) {
1875 if(
debugCosmics_)
std::cout <<
"-->good hit position: " << tttempHits[
k]->globalPosition().x() <<
", " << tttempHits[
k]->globalPosition().y() <<
", "<< tttempHits[
k]->globalPosition().z() << std::endl;
1882 DetId FirstHitId = (*(freshStartTrajectory.
recHits().end()-1))->geographicalId();
1887 if (firstState.
isValid() ==
false)
continue;
1896 newHits.
push_back(rhit->hit()->clone());
1912 for (
unsigned int i = 0;
i < traj.size(); ++
i) {
1914 if (trajUsed[
i]==
true)
continue;
1916 if (
debugCosmics_)
std::cout<<
"Trajectory (not merged) has "<<traj[
i].recHits().size()<<
" hits with chi2=" << traj[
i].chiSquared() <<
" and is valid? "<< traj[
i].isValid()<<std::endl;
1919 for (TransientTrackingRecHit::ConstRecHitContainer::const_iterator rhit=ttHits.begin(); rhit!=ttHits.end(); ++rhit){
1920 goodHits.
push_back((*rhit)->hit()->clone());
1926 DetId FirstHitId = (*(traj[
i].recHits().begin()))->geographicalId();
1934 theCollection.push_back(
TrackCandidate(goodHits,traj[
i].seed(),*state));
1939 <<
" candidates. Merged collection has " << theCollection.size() << std::endl;
1944 for (std::vector<Trajectory>::const_iterator it = theTrajectories.begin(); it != theTrajectories.end(); it++) {
1945 if (
debug_)
std::cout<<
" Trajectory has "<<it->recHits().size()<<
" hits with chi2=" << it->chiSquared() <<
" and is valid? "<<it->isValid()<<std::endl;
1950 for (TransientTrackingRecHit::ConstRecHitContainer::const_iterator rhit=ttHits.begin(); rhit!=ttHits.end(); ++rhit){
1951 goodHits.
push_back((*rhit)->hit()->clone());
1957 DetId FirstHitId = (*(it->recHits().begin()))->geographicalId();
1963 if (firstState.
isValid() ==
false)
continue;
1972 return theCollection;
PropagationDirection direction() const
T getParameter(std::string const &) const
MeasurementEstimator * theEstimator
const MeasurementTracker * theMeasurementTracker
FTS stateAtVertex() const
~RoadSearchTrackCandidateMakerAlgorithm()
std::vector< TrajectoryMeasurement > FindBestHit(const TrajectoryStateOnSurface &tsosBefore, const std::set< const GeomDet * > &theDets, edm::OwnVector< TrackingRecHit > &theHits)
const TrackerGeometry * trackerGeom
virtual PropagationDirection propagationDirection() const
TrajectoryStateOnSurface propagate(const FreeTrajectoryState &fts, const Plane &plane) const
propagation to plane
TrajectorySeed const & seed() const
Access to the seed used to reconstruct the Trajectory.
const GlobalTrajectoryParameters & parameters() const
FreeTrajectoryState initialTrajectory(const edm::EventSetup &es, const TrackingRecHit *InnerHit, const TrackingRecHit *OuterHit)
virtual HitReturnType estimate(const TrajectoryStateOnSurface &ts, const TransientTrackingRecHit &hit) const =0
SiStripRecHitMatcher * theHitMatcher
FreeTrajectoryState initialTrajectoryFromTriplet(const edm::EventSetup &es, const TrackingRecHit *InnerHit, const TrackingRecHit *MiddleHit, const TrackingRecHit *OuterHit)
void run(const RoadSearchCloudCollection *input, const edm::Event &e, const edm::EventSetup &es, TrackCandidateCollection &output)
Runs the algorithm.
TrajectoryStateOnSurface forwardPredictedState() const
Access to forward predicted state (from fitter or builder)
SiStripMatchedRecHit2D * match(const SiStripRecHit2D *monoRH, const SiStripRecHit2D *stereoRH, const GluedGeomDet *gluedDet, LocalVector trackdirection) const
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
virtual TrajectoryStateOnSurface update(const TrajectoryStateOnSurface &, const TransientTrackingRecHit &) const =0
LocalVector localDirection() const
LocalPoint localPosition() const
ROOT::Math::SMatrixIdentity AlgebraicMatrixID
virtual void update(const edm::Event &) const
std::vector< Trajectory > extrapolateTrajectory(const Trajectory &inputTrajectory, RoadSearchCloud::RecHitVector &theLayerHits, const DetLayer *innerHitLayer, const TrackingRecHit *outerHit, const DetLayer *outerHitLayer)
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
Sin< T >::type sin(const T &t)
std::vector< TrackCandidate > TrackCandidateCollection
ROOT::Math::SMatrix< double, 6, 6, ROOT::Math::MatRepSym< double, 6 > > AlgebraicSymMatrix66
Geom::Phi< T > phi() const
virtual void clean(TrajectoryPointerContainer &) const
Global3DPoint GlobalPoint
GlobalPoint globalPosition() const
ConstRecHitPointer recHit() const
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
std::vector< TrajectoryMeasurement > FindBestHitsByDet(const TrajectoryStateOnSurface &tsosBefore, const std::set< const GeomDet * > &theDets, edm::OwnVector< TrackingRecHit > &theHits)
LocalError positionError() const
AnalyticalPropagator * theAnalyticalPropagator
ConstRecHitContainer recHits(bool splitting=false) const
uint32_t rawId() const
get the raw id
double initialVertexErrorXY_
U second(std::pair< T, U > const &p)
virtual std::vector< Trajectory > trajectories(const Trajectory &aTraj) const
DataContainer const & measurements() const
std::vector< TrajectoryMeasurement > DataContainer
PropagatorWithMaterial * thePropagator
TrajectoryCleanerBySharedHits * theTrajectoryCleaner
RoadSearchTrackCandidateMakerAlgorithm(const edm::ParameterSet &conf)
virtual RecHitPointer build(const TrackingRecHit *p) const =0
build a tracking rechit from an existing rechit
TrajectoryMeasurement const & lastMeasurement() const
GlobalVector momentum() const
Cos< T >::type cos(const T &t)
const DetLayer * detLayer(const DetId &id) const
obsolete method. Use idToLayer() instead.
Trajectory createSeedTrajectory(FreeTrajectoryState &fts, const TrackingRecHit *InnerHit, const DetLayer *innerHitLayer)
PropagatorWithMaterial * theRevPropagator
TrajectoryStateOnSurface updatedState() const
const LocalTrajectoryError & localError() const
const MagneticField * magField
tuple Chi2MeasurementEstimator
virtual const GeomDet * idToDet(DetId) const
PropagatorWithMaterial * theAloPropagator
double maxPropagationDistance
GlobalPoint position() const
unsigned int theNumHitCut
virtual TrajectoryStateOnSurface propagate(const TrajectoryStateOnSurface &tsos, const Plane &plane) const
std::vector< ConstRecHitPointer > ConstRecHitContainer
std::string measurementTrackerName_
const TransientTrackingRecHitBuilder * ttrhBuilder
std::pair< bool, double > HitReturnType
KFTrajectorySmoother * theSmoother
virtual LocalError localPositionError() const =0
TrajectoryStateTransform * theTransformer
T const * product() const
void linearFit(T const *__restrict__ x, T const *__restrict__ y, int ndat, T const *__restrict__ sigy2, T &slope, T &intercept, T &covss, T &covii, T &covsi)
std::vector< TrajectoryMeasurement > FindBestHits(const TrajectoryStateOnSurface &tsosBefore, const std::set< const GeomDet * > &theDets, const SiStripRecHitMatcher *theHitMatcher, edm::OwnVector< TrackingRecHit > &theHits)
GlobalVector globalMomentum() const
const Surface & surface() const
tuple KFTrajectorySmoother
std::vector< const TrackingRecHit * > RecHitVector
bool chooseStartingLayers(std::vector< std::pair< const DetLayer *, RoadSearchCloud::RecHitVector > > &RecHitsByLayer, std::vector< std::pair< const DetLayer *, RoadSearchCloud::RecHitVector > >::iterator ilyr0, const std::multimap< int, const DetLayer * > &layer_map, std::set< const DetLayer * > &good_layers, std::vector< const DetLayer * > &middle_layers, RoadSearchCloud::RecHitVector &recHits_middle)
DetId geographicalId() const
TrackCharge charge() const
TrajectoryStateUpdator * theUpdator
const GeometricSearchTracker * geometricSearchTracker() const
virtual LocalPoint localPosition() const =0
const PositionType & position() const
TrackCandidateCollection PrepareTrackCandidates(std::vector< Trajectory > &theTrajectories)
void push(const TrajectoryMeasurement &tm)
virtual const BoundPlane & surface() const
The nominal surface of the GeomDet.
std::vector< RoadSearchCloud > RoadSearchCloudCollection
tuple AnalyticalPropagator
TrajectoryStateOnSurface backwardPredictedState() const
Access to backward predicted state (from smoother)