CMS 3D CMS Logo

Public Types | Public Member Functions | Protected Attributes

GeometricSearchDet Class Reference

#include <GeometricSearchDet.h>

Inheritance diagram for GeometricSearchDet:
DetLayer DetRod ForwardDetRing GeometricSearchDetWithGroups BarrelDetLayer ForwardDetLayer DetRodOneR TOBRod ForwardDetRingOneZ PixelBarrelLayer PixelBlade PixelForwardLayer TECLayer TECPetal TECWedge TIBLayer TIBRing TIDLayer TIDRing TOBLayer TOBRod

List of all members.

Public Types

typedef std::pair< const
GeomDet
*, TrajectoryStateOnSurface
DetWithState
typedef BoundSurface::PositionType PositionType
typedef BoundSurface::RotationType RotationType
typedef TrajectoryStateOnSurface TrajectoryState

Public Member Functions

virtual const std::vector
< const GeomDet * > & 
basicComponents () const =0
virtual std::pair< bool,
TrajectoryStateOnSurface
compatible (const TrajectoryStateOnSurface &ts, const Propagator &, const MeasurementEstimator &) const =0
virtual std::vector< DetWithStatecompatibleDets (const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const
virtual void compatibleDetsV (const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est, std::vector< DetWithState > &result) const
virtual const std::vector
< const GeometricSearchDet * > & 
components () const =0
 Returns basic components, if any.
 GeometricSearchDet ()
virtual std::vector< DetGroupgroupedCompatibleDets (const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const
virtual void groupedCompatibleDetsV (const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est, std::vector< DetGroup > &result) const
virtual bool hasGroups () const =0
virtual const
Surface::PositionType
position () const
 Returns position of the surface.
virtual const BoundSurfacesurface () const =0
 The surface of the GeometricSearchDet.
virtual ~GeometricSearchDet ()

Protected Attributes

GeomDetCompatibilityChecker theCompatibilityChecker

Detailed Description

Definition at line 17 of file GeometricSearchDet.h.


Member Typedef Documentation

Reimplemented in GeometricSearchDetWithGroups.

Definition at line 19 of file GeometricSearchDet.h.

Definition at line 20 of file GeometricSearchDet.h.

Definition at line 21 of file GeometricSearchDet.h.

Definition at line 22 of file GeometricSearchDet.h.


Constructor & Destructor Documentation

GeometricSearchDet::GeometricSearchDet ( ) [inline]

Definition at line 24 of file GeometricSearchDet.h.

GeometricSearchDet::~GeometricSearchDet ( ) [virtual]

Definition at line 6 of file GeometricSearchDet.cc.

{}

Member Function Documentation

virtual const std::vector<const GeomDet*>& GeometricSearchDet::basicComponents ( ) const [pure virtual]
virtual std::pair<bool, TrajectoryStateOnSurface> GeometricSearchDet::compatible ( const TrajectoryStateOnSurface ts,
const Propagator ,
const MeasurementEstimator  
) const [pure virtual]

tests the geometrical compatibility of the Det with the predicted state. The FreeTrajectoryState argument is propagated to the Det surface using the Propagator argument. The resulting TrajectoryStateOnSurface is tested for compatibility with the surface bounds. If compatible, a std::pair< true, propagatedState> is returned. If the propagation fails, or if the state is not compatible, a std::pair< false, propagatedState> is returned.

Implemented in MuDetRing, MuDetRod, MuRingForwardDoubleLayer, CompositeTECPetal, CompositeTECWedge, PixelBlade, PixelRod, SimpleTECWedge, TIBRing, TIDRing, TOBRod, BarrelDetLayer, and ForwardDetLayer.

Referenced by GetTrackTrajInfo::analyze(), LayerMeasurements::groupedMeasurements(), and LayerMeasurements::measurements().

std::vector< GeometricSearchDet::DetWithState > GeometricSearchDet::compatibleDets ( const TrajectoryStateOnSurface startingState,
const Propagator prop,
const MeasurementEstimator est 
) const [virtual]

Returns all Dets compatible with a trajectory state according to the estimator est. The startingState should be propagated to the surface of each compatible Det using the Propagator passed as an argument. The default implementation should be overridden in dets with specific surface types to avoid propagation to a generic Surface

Reimplemented in MuDetRing, MuDetRod, MuRingForwardDoubleLayer, MuRingForwardLayer, and MuRodBarrelLayer.

Definition at line 182 of file DynamicTruncation.cc.

References alongMomentum, Chi2MeasurementEstimatorESProducer_cfi::Chi2MeasurementEstimator, DirectMuonNavigation::compatibleLayers(), DynamicTruncation::currentState, first, TrajectoryStateOnSurface::freeState(), DynamicTruncation::navigation, DynamicTruncation::propagatorCompatibleDet, GeomDetEnumerators::RPCBarrel, and GeomDetEnumerators::RPCEndcap.

Referenced by CkfDebugger::analyseRecHitNotFound(), GetTrackTrajInfo::analyze(), MuRingForwardLayer::compatibleDets(), MuRodBarrelLayer::compatibleDets(), TrajectoryManager::createPSimHits(), FastTSGFromPropagation::findMeasurements_new(), TSGFromPropagation::findMeasurements_new(), MuonRoadTrajectoryBuilder::GatherHits(), PropagateToMuon::getBestDet(), CosmicTrackingRegion::hits(), MuonDetLayerMeasurements::measurements(), LayerMeasurements::measurements(), L2MuonSeedGenerator::produce(), and ConvBremSeedProducer::produce().

                                                                                                          {
  //  SteppingHelixPropagator prop(magfield.product(), anyDirection);
  //  MuonPatternRecoDumper dumper;
  MeasurementEstimator *theEstimator = new Chi2MeasurementEstimator(100, 3);
  std::vector<const DetLayer *> navLayers;
  navLayers = navigation->compatibleLayers(*(currentState.freeState()), alongMomentum);
  for ( unsigned int ilayer=0; ilayer<navLayers.size(); ilayer++ ) {
    // Skip RPC layers
    if (navLayers[ilayer]->subDetector() == GeomDetEnumerators::RPCEndcap 
        || navLayers[ilayer]->subDetector() == GeomDetEnumerators::RPCBarrel) continue;
    std::vector<DetLayer::DetWithState> comps = navLayers[ilayer]->compatibleDets(currentState, 
                                                                                  *propagatorCompatibleDet, *theEstimator);
    //    cout << comps.size() << " compatible Dets with " << navLayers[ilayer]->subDetector() << " Layer " << ilayer << " "
    //     << dumper.dumpLayer(navLayers[ilayer]) << " " << endl;
    if (comps.size() > 0) {
      for ( unsigned int icomp=0; icomp<comps.size(); icomp++ ) {
        DetId id(comps[icomp].first->geographicalId().rawId());
        detMap[ilayer].push_back(id);
      }
    }
  }
  if (theEstimator) delete theEstimator;
}
void GeometricSearchDet::compatibleDetsV ( const TrajectoryStateOnSurface startingState,
const Propagator prop,
const MeasurementEstimator est,
std::vector< DetWithState > &  result 
) const [virtual]

Reimplemented in PixelRod, ForwardDetRing, and GeometricSearchDetWithGroups.

Definition at line 9 of file GeometricSearchDet.cc.

Referenced by TSGForRoadSearch::makeSeeds_0(), TSGForRoadSearch::makeSeeds_3(), and TSGForRoadSearch::makeSeeds_4().

                                                                      {
   edm::LogError("DetLayers") << "At the moment not a real implementation" ;
 }
virtual const std::vector<const GeometricSearchDet*>& GeometricSearchDet::components ( ) const [pure virtual]
std::vector< DetGroup > GeometricSearchDet::groupedCompatibleDets ( const TrajectoryStateOnSurface startingState,
const Propagator prop,
const MeasurementEstimator est 
) const [virtual]

Similar to compatibleDets(), but the compatible Dets are grouped in one or more groups. Dets are put in the same group if they are mutually exclusive for track crossing, i.e. a reconstructible track cannot cross more than one Det from a group. Pathological tracks (spirals etc.) can of course violate this rule.
The DetGroups are sorted in the sequence of crossing by a track. In order to define the direction of crossing the Propagator used in this method should have a defined direction() : either "alongMomentum" or "oppositeToMomentum" but not "anyDirection".
The three signatures of this method differ by the input trajectory state arguments: the starting state can be a TrajectoryStateOnSurface or a FreeTrajectoryState, and the state on this CompositeDet may be already known or not. The last two arguments are as for the method compatibleDets().
First signature: The first argument is a TrajectoryStateOnSurface, usually not on the surface of this CompositeDet.

Reimplemented in MuDetRing, MuDetRod, MuRingForwardDoubleLayer, MuRingForwardLayer, and MuRodBarrelLayer.

Definition at line 35 of file GeometricSearchDet.cc.

References groupedCompatibleDetsV(), and query::result.

Referenced by LayerMeasurements::groupedMeasurements(), and MuonDetLayerMeasurements::groupedMeasurements().

                                                                                  {
  std::vector<DetGroup> result;
  groupedCompatibleDetsV(startingState, prop, est,result);
  return result;
}
void GeometricSearchDet::groupedCompatibleDetsV ( const TrajectoryStateOnSurface startingState,
const Propagator prop,
const MeasurementEstimator est,
std::vector< DetGroup > &  result 
) const [virtual]

Reimplemented in CompositeTECPetal, CompositeTECWedge, PixelBarrelLayer, PixelBlade, PixelForwardLayer, PixelRod, SimpleTECWedge, TECLayer, TIBLayer, TIBRing, TIDLayer, TIDRing, TOBLayer, and TOBRod.

Definition at line 132 of file TIBRing.cc.

References Clusterizer1DCommons::add(), LayerCrossingSide::barrelSide(), PeriodicBinFinderInPhi< T >::binIndex(), TIBRing::computeCrossings(), TIBRing::computeWindowSize(), DetGroupMerger::orderAndMergeTwoLevels(), Propagator::propagationDirection(), query::result, TIBRing::searchNeighbors(), TIBRing::theBinFinder, TIBRing::theDets, TIBRing::theHelicity, and svgfig::window().

Referenced by GeometricSearchDetWithGroups::compatibleDetsV(), and groupedCompatibleDets().

{
  vector<DetGroup> closestResult;
  SubRingCrossings  crossings; 
  crossings = computeCrossings( tsos, prop.propagationDirection());
  if(! crossings.isValid_) return;

  typedef CompatibleDetToGroupAdder Adder;
  Adder::add( *theDets[theBinFinder.binIndex(crossings.closestIndex)], 
             tsos, prop, est, closestResult);
  
  if(closestResult.empty()){
    Adder::add( *theDets[theBinFinder.binIndex(crossings.nextIndex)], 
               tsos, prop, est, result);
    return;
  }      

  DetGroupElement closestGel( closestResult.front().front());
  float window = computeWindowSize( closestGel.det(), closestGel.trajectoryState(), est);

  //vector<DetGroup> result;
  float detWidth = closestGel.det()->surface().bounds().width();
  if (crossings.nextDistance < detWidth + window) {
    vector<DetGroup> nextResult;
    if (Adder::add( *theDets[theBinFinder.binIndex(crossings.nextIndex)], 
                   tsos, prop, est, nextResult)) {
      int crossingSide = LayerCrossingSide().barrelSide( tsos, prop);
      if (crossings.closestIndex < crossings.nextIndex) {
        DetGroupMerger::orderAndMergeTwoLevels( closestResult, nextResult,
                                                result,
                                                theHelicity, crossingSide);
      }
      else {
        DetGroupMerger::orderAndMergeTwoLevels( nextResult, closestResult,
                                                result,
                                                theHelicity, crossingSide);
      }
    }
    else {
      result.swap(closestResult);
    } 
  }else{
    result.swap(closestResult);
  }
  
  // only loop over neighbors (other than closest and next) if window is BIG
  if (window > 0.5*detWidth) {
    searchNeighbors( tsos, prop, est, crossings, window, result);
  } 
}
virtual bool GeometricSearchDet::hasGroups ( ) const [pure virtual]
virtual const Surface::PositionType& GeometricSearchDet::position ( void  ) const [inline, virtual]
virtual const BoundSurface& GeometricSearchDet::surface ( ) const [pure virtual]

Member Data Documentation

Definition at line 108 of file GeometricSearchDet.h.

Referenced by PixelRod::compatibleDetsV().