26 #include "CLHEP/Units/GlobalPhysicalConstants.h"
27 #include "CLHEP/Geometry/Point3D.h"
77 std::vector<Trajectory>::const_iterator outInTrackItr;
117 std::vector<TrajectoryMeasurement> measurements = (*outInTrackItr).measurements();
119 std::vector<const DetLayer*> allLayers=
layerList();
122 for(
unsigned int i = 0;
i < allLayers.size(); ++
i) {
129 std::vector<const DetLayer*> myLayers;
131 std::vector<TrajectoryMeasurement>::reverse_iterator measurementItr;
132 std::vector<TrajectoryMeasurement*> myItr;
137 for(measurementItr = measurements.rbegin() ; measurementItr != measurements.rend(); ++measurementItr) {
140 if( (*measurementItr).recHit()->isValid()) {
145 myLayers.push_back( measurementItr->layer() ) ;
146 myItr.push_back( &(*measurementItr) );
160 if ( myItr.size()==0 ) {
164 for(ilayer = 0; ilayer < allLayers.size(); ++ilayer) {
166 if ( allLayers[ilayer] == myLayers[0]) {
186 }
else if ( allLayers[ilayer] == myLayers[1] ) {
209 if(ilayer == allLayers.size()) {
232 const DetLayer * previousLayer = allLayers[ilayer];
243 if ( allLayers[ilayer] == myLayers[0] ) {
256 }
else if ( ilayer-1==0) {
267 if(!stateAtPreviousLayer.
isValid()) {
274 startSeed(fts, stateAtPreviousLayer, -1, ilayer );
292 const DetLayer * previousLayer = allLayers[ilayer];
296 if(!stateAtPreviousLayer.
isValid()) {
303 startSeed(fts, stateAtPreviousLayer, -1, ilayer );
327 std::vector<const reco::CaloCluster*> bcVec;
335 std::vector<const reco::CaloCluster*>::iterator bcItr;
344 for(bcItr = bcVec.begin(); bcItr != bcVec.end(); ++bcItr) {
356 back1mm -= dir.unit()*0.1;
362 if ( !helix.isValid() )
continue;
377 std::vector<const reco::CaloCluster*>
result;
392 if (fabs(theBcPhi-theConvPhi ) < .5 &&
393 ((charge<0 && theBcPhi-theConvPhi >-.5) ||
394 (charge>0 && theBcPhi-theConvPhi <.5))){
418 float transverseCurvature,
419 unsigned int startingLayer)
const {
422 std::vector<const DetLayer*> allLayers=
layerList();
428 m(0,0) = 0.1;
m(1,1) = 0.0001 ;
m(2,2) = 0.0001 ;
429 m(3,3) = 0.0001 ;
m(4,4) = 0.001;
434 double(transverseCurvature), 0, &(*theMF_) ),
444 for(
unsigned int ilayer = startingLayer; ilayer <= startingLayer+1 && (ilayer < allLayers.size()-2); ++ilayer) {
445 const DetLayer * layer = allLayers[ilayer];
491 back1mm -= dir.unit()*0.1;
497 if ( !helix.isValid() )
continue;
504 helix.stateAtVertex().transverseCurvature(), 0, &(*theMF_)),
523 if (tmItr->recHit()->isValid() ) {
528 GlobalPoint back1mm = tmItr->recHit()->globalPosition();
530 back1mm -= dir.unit()*0.1;
536 if ( !helix.isValid() )
continue;
548 helix.stateAtVertex().transverseCurvature(), 0, &(*theMF_)),
607 std::vector<const DetLayer*> allLayers=
layerList();
608 const DetLayer * layer = allLayers[ilayer];
630 float m1dr =
sqrt(m1.
recHit()->localPositionError().yy());
642 if ( !tsos.isValid() ) {
650 std::vector<TrajectoryMeasurement> measurements = theLayerMeasurements_.
measurements( *layer, tsos, *propagator, *newEstimator);
654 for(
unsigned int i = 0;
i < measurements.size(); ++
i) {
655 if( measurements[
i].recHit()->isValid() ) {
694 if ( updatedState1.
isValid() ) {
705 myHits.
push_back(meas1.recHit()->hit()->clone());
706 myHits.push_back(meas2.recHit()->hit()->clone());
const Propagator * thePropagatorAlongMomentum_
const math::XYZPoint & position() const
cluster centroid position
std::vector< TrajectoryMeasurement > measurements(const DetLayer &layer, const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const
virtual const BoundSurface & surface() const =0
The surface of the GeometricSearchDet.
const MeasurementTracker * getMeasurementTracker() const
virtual void findSeeds(const TrajectoryStateOnSurface &startingState, float signedpt, unsigned int startingLayer) const
virtual Location location() const =0
Which part of the detector (barrel, endcap)
int maxNumberOfInOutSeedsPerInputTrack_
FreeTrajectoryState * freeTrajectoryState(bool withErrors=true) const
ROOT::Math::SMatrixIdentity AlgebraicMatrixID
const CurvilinearTrajectoryError & curvilinearError() const
Geom::Phi< T > phi() const
GlobalPoint globalPosition() const
ConstRecHitPointer recHit() const
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
TrackCharge charge() const
void startSeed(FreeTrajectoryState *fts, const TrajectoryStateOnSurface &stateAtPreviousLayer, int charge, int layer) const
std::vector< TrajectoryMeasurement > theFirstMeasurements_
TrajectorySeedCollection theSeeds_
const Propagator * thePropagatorOppositeToMomentum_
TrajectoryMeasurement * myPointer
std::vector< const reco::CaloCluster * > getSecondCaloClusters(const GlobalPoint &conversionPosition, float charge) const
void printLayer(int i) const
virtual ~InOutConversionSeedFinder()
const DetLayer * layer() const
TrajectoryStateOnSurface updatedState() const
const TrackingGeometry * theTrackerGeom_
TrajectoryStateOnSurface predictedState() const
GlobalVector track2InitialMomentum_
std::vector< const DetLayer * > layerList() const
virtual TrajectoryStateOnSurface propagate(const FreeTrajectoryState &, const Surface &) const
edm::Handle< edm::View< reco::CaloCluster > > bcCollection_
void completeSeed(const TrajectoryMeasurement &m1, FreeTrajectoryState &fts, const Propagator *propagator, int ilayer) const
InOutConversionSeedFinder(const edm::ParameterSet &config)
virtual const GeomDet * idToDet(DetId) const =0
TrajectoryStateOnSurface update(const TrajectoryStateOnSurface &, const TransientTrackingRecHit &) const
reco::CaloCluster theSecondBC_
void createSeed(const TrajectoryMeasurement &m1, const TrajectoryMeasurement &m2) const
std::vector< Trajectory > theOutInTracks_
virtual void makeSeeds(const edm::Handle< edm::View< reco::CaloCluster > > &allBc) const
virtual void fillClusterSeeds() const
GlobalVector globalDirection() const
double transverseCurvature() const