CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
CompositeTECWedge Class Referencefinal

#include <CompositeTECWedge.h>

Inheritance diagram for CompositeTECWedge:
TECWedge GeometricSearchDet

Public Member Functions

virtual const std::vector< const GeomDet * > & basicComponents () const
 
virtual std::pair< bool, TrajectoryStateOnSurfacecompatible (const TrajectoryStateOnSurface &ts, const Propagator &, const MeasurementEstimator &) const __attribute__((cold))
 
virtual const std::vector< const GeometricSearchDet * > & components () const __attribute__((cold))
 Returns basic components, if any. More...
 
 CompositeTECWedge (std::vector< const GeomDet * > &innerDets, std::vector< const GeomDet * > &outerDets) __attribute__((cold))
 
virtual void groupedCompatibleDetsV (const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est, std::vector< DetGroup > &result) const __attribute__((hot))
 
 ~CompositeTECWedge () __attribute__((cold))
 
- Public Member Functions inherited from TECWedge
virtual const BoundDiskSectorspecificSurface () const final
 
virtual const BoundSurfacesurface () const final
 The surface of the GeometricSearchDet. More...
 
 TECWedge ()
 
- Public Member Functions inherited from GeometricSearchDet
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
 
 GeometricSearchDet (bool doHaveGroups)
 
virtual std::vector< DetGroupgroupedCompatibleDets (const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const
 
bool hasGroups () const
 
virtual const Surface::PositionTypeposition () const
 Returns position of the surface. More...
 
virtual ~GeometricSearchDet ()
 

Private Member Functions

bool addClosest (const TrajectoryStateOnSurface &tsos, const Propagator &prop, const MeasurementEstimator &est, const SubLayerCrossing &crossing, std::vector< DetGroup > &result) const __attribute__((hot))
 
SubLayerCrossings computeCrossings (const TrajectoryStateOnSurface &tsos, PropagationDirection propDir) const __attribute__((hot))
 
int findClosestDet (const GlobalPoint &startPos, int sectorId) const
 
void searchNeighbors (const TrajectoryStateOnSurface &tsos, const Propagator &prop, const MeasurementEstimator &est, const SubLayerCrossing &crossing, float window, std::vector< DetGroup > &result, bool checkClosest) const __attribute__((hot))
 
const std::vector< const GeomDet * > & subWedge (int ind) const
 

Private Attributes

std::vector< const GeomDet * > theBackDets
 
ReferenceCountingPointer< BoundDiskSectortheBackSector
 
std::vector< const GeomDet * > theDets
 
std::vector< const GeomDet * > theFrontDets
 
ReferenceCountingPointer< BoundDiskSectortheFrontSector
 

Additional Inherited Members

- Public Types inherited from GeometricSearchDet
typedef std::pair< const GeomDet *, TrajectoryStateOnSurfaceDetWithState
 
typedef BoundSurface::PositionType PositionType
 
typedef BoundSurface::RotationType RotationType
 
typedef TrajectoryStateOnSurface TrajectoryState
 
- Protected Attributes inherited from TECWedge
ReferenceCountingPointer< BoundDiskSectortheDiskSector
 
- Protected Attributes inherited from GeometricSearchDet
bool haveGroups
 
GeomDetCompatibilityChecker theCompatibilityChecker
 

Detailed Description

A concrete implementation for TEC layer built out of TECPetals

Definition at line 14 of file CompositeTECWedge.h.

Constructor & Destructor Documentation

CompositeTECWedge::CompositeTECWedge ( std::vector< const GeomDet * > &  innerDets,
std::vector< const GeomDet * > &  outerDets 
)

Definition at line 36 of file CompositeTECWedge.cc.

References LogDebug, PV3DBase< T, PVType, FrameType >::perp(), GeometricSearchDet::position(), theBackDets, theBackSector, theDets, TECWedge::theDiskSector, theFrontDets, theFrontSector, and PV3DBase< T, PVType, FrameType >::z().

37  :
38  theFrontDets(innerDets.begin(),innerDets.end()), theBackDets(outerDets.begin(),outerDets.end())
39 {
40  theDets.assign(theFrontDets.begin(),theFrontDets.end());
41  theDets.insert(theDets.end(),theBackDets.begin(),theBackDets.end());
42 
43 
44  //
45  std::sort( theFrontDets.begin(), theFrontDets.end(), DetPhiLess() );
46  std::sort( theBackDets.begin(), theBackDets.end(), DetPhiLess() );
47 
51 
52  //--------- DEBUG INFO --------------
53  LogDebug("TkDetLayers") << "DEBUG INFO for CompositeTECWedge" << "\n"
54  << "TECWedge z, perp,innerRadius,outerR: "
55  << this->position().z() << " , "
56  << this->position().perp() << " , "
57  << theDiskSector->innerRadius() << " , "
58  << theDiskSector->outerRadius() ;
59 
60 
61  for(vector<const GeomDet*>::const_iterator it=theFrontDets.begin();
62  it!=theFrontDets.end(); it++){
63  LogDebug("TkDetLayers") << "frontDet phi,z,r: "
64  << (*it)->surface().position().phi() << " , "
65  << (*it)->surface().position().z() << " , "
66  << (*it)->surface().position().perp();
67  }
68 
69  for(vector<const GeomDet*>::const_iterator it=theBackDets.begin();
70  it!=theBackDets.end(); it++){
71  LogDebug("TkDetLayers") << "backDet phi,z,r: "
72  << (*it)->surface().phi() << " , "
73  << (*it)->surface().position().z() << " , "
74  << (*it)->surface().position().perp() ;
75  }
76  //-----------------------------------
77 
78 
79 }
#define LogDebug(id)
T perp() const
Definition: PV3DBase.h:72
std::vector< const GeomDet * > theDets
ReferenceCountingPointer< BoundDiskSector > theDiskSector
Definition: TECWedge.h:28
std::vector< const GeomDet * > theFrontDets
std::vector< const GeomDet * > theBackDets
T z() const
Definition: PV3DBase.h:64
ReferenceCountingPointer< BoundDiskSector > theBackSector
virtual const Surface::PositionType & position() const
Returns position of the surface.
ReferenceCountingPointer< BoundDiskSector > theFrontSector
CompositeTECWedge::~CompositeTECWedge ( )

Definition at line 81 of file CompositeTECWedge.cc.

81  {
82 
83 }

Member Function Documentation

bool CompositeTECWedge::addClosest ( const TrajectoryStateOnSurface tsos,
const Propagator prop,
const MeasurementEstimator est,
const SubLayerCrossing crossing,
std::vector< DetGroup > &  result 
) const
private

Definition at line 204 of file CompositeTECWedge.cc.

References CompatibleDetToGroupAdder::add(), SubLayerCrossing::closestDetIndex(), LogDebug, mps_fire::result, SubLayerCrossing::subLayerIndex(), and subWedge().

Referenced by basicComponents(), and groupedCompatibleDetsV().

209 {
210  const vector<const GeomDet*>& sWedge( subWedge( crossing.subLayerIndex()));
211 
212  LogDebug("TkDetLayers")
213  << "in CompositeTECWedge,adding GeomDet at r,z,phi: ("
214  << sWedge[crossing.closestDetIndex()]->position().perp() << ","
215  << sWedge[crossing.closestDetIndex()]->position().z() << ","
216  << sWedge[crossing.closestDetIndex()]->position().phi() << ")" ;
217 
218  return CompatibleDetToGroupAdder().add( *sWedge[crossing.closestDetIndex()],
219  tsos, prop, est, result);
220 }
#define LogDebug(id)
int closestDetIndex() const
const std::vector< const GeomDet * > & subWedge(int ind) const
int subLayerIndex() const
static bool add(const GeometricSearchDet &det, const TrajectoryStateOnSurface &tsos, const Propagator &prop, const MeasurementEstimator &est, std::vector< DetGroup > &result) __attribute__((hot))
virtual const std::vector<const GeomDet*>& CompositeTECWedge::basicComponents ( ) const
inlinevirtual
pair< bool, TrajectoryStateOnSurface > CompositeTECWedge::compatible ( const TrajectoryStateOnSurface ts,
const Propagator ,
const MeasurementEstimator  
) const
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.

Implements GeometricSearchDet.

Definition at line 93 of file CompositeTECWedge.cc.

Referenced by basicComponents().

94  {
95  edm::LogError("TkDetLayers") << "temporary dummy implementation of CompositeTECWedge::compatible()!!" ;
96  return pair<bool,TrajectoryStateOnSurface>();
97 }
const vector< const GeometricSearchDet * > & CompositeTECWedge::components ( ) const
virtual

Returns basic components, if any.

Returns direct components, if any

Implements GeometricSearchDet.

Definition at line 87 of file CompositeTECWedge.cc.

Referenced by basicComponents().

87  {
88  throw DetLayerException("CompositeTECWedge doesn't have GeometricSearchDet components");
89 }
Common base class.
SubLayerCrossings CompositeTECWedge::computeCrossings ( const TrajectoryStateOnSurface tsos,
PropagationDirection  propDir 
) const
private

Definition at line 140 of file CompositeTECWedge.cc.

References funct::abs(), MuonCkfTrajectoryBuilder_cfi::deltaPhi, findClosestDet(), TrajectoryStateOnSurface::globalMomentum(), TrajectoryStateOnSurface::globalPosition(), LogDebug, HelixForwardPlaneCrossing::pathLength(), HelixForwardPlaneCrossing::position(), rho, theBackDets, theBackSector, theFrontDets, theFrontSector, and TrajectoryStateOnSurface::transverseCurvature().

Referenced by basicComponents(), and groupedCompatibleDetsV().

142 {
143  HelixPlaneCrossing::PositionType startPos( startingState.globalPosition() );
144  HelixPlaneCrossing::DirectionType startDir( startingState.globalMomentum() );
145 
146  auto rho = startingState.transverseCurvature();
147 
148  HelixForwardPlaneCrossing crossing( startPos, startDir, rho, propDir);
149 
150  pair<bool,double> frontPath = crossing.pathLength( *theFrontSector);
151  if (!frontPath.first) return SubLayerCrossings();
152 
153  pair<bool,double> backPath = crossing.pathLength( *theBackSector);
154  if (!backPath.first) return SubLayerCrossings();
155 
156  GlobalPoint gFrontPoint( crossing.position(frontPath.second));
157  GlobalPoint gBackPoint( crossing.position(backPath.second));
158 
159 
160  LogDebug("TkDetLayers")
161  << "in TECWedge,front crossing r,z,phi: ("
162  << gFrontPoint.perp() << ","
163  << gFrontPoint.z() << ","
164  << gFrontPoint.phi() << ")" ;
165 
166  LogDebug("TkDetLayers")
167  << "in TECWedge,back crossing r,z,phi: ("
168  << gBackPoint.perp() << ","
169  << gBackPoint.z() << ","
170  << gBackPoint.phi() << ")" << endl;
171 
172 
173  int frontIndex = findClosestDet(gFrontPoint,0);
174  SubLayerCrossing frontSLC( 0, frontIndex, gFrontPoint);
175 
176  int backIndex = findClosestDet(gBackPoint,1);
177  SubLayerCrossing backSLC( 1, backIndex, gBackPoint);
178 
179 
180  auto frontDist = std::abs(Geom::deltaPhi( gFrontPoint.barePhi(),
181  theFrontDets[frontIndex]->surface().phi()));
182  /*
183  float frontDist = theFrontDets[frontIndex]->surface().phi() - gFrontPoint.phi();
184  frontDist *= Geom::phiLess( theFrontDets[frontIndex]->surface().phi(),gFrontPoint.barePhi()) ? -1. : 1.;
185  if (frontDist < 0.) { frontDist += 2.*Geom::pi();}
186  */
187  auto backDist = std::abs(Geom::deltaPhi( gBackPoint.barePhi(),
188  theBackDets[backIndex]->surface().phi()) );
189  /*
190  float backDist = theBackDets[backIndex]->surface().phi() - gBackPoint.phi();
191  backDist *= Geom::phiLess( theBackDets[backIndex]->surface().phi(),gBackPoint.barePhi()) ? -1. : 1.;
192  if ( backDist < 0.) { backDist += 2.*Geom::pi();}
193  */
194 
195  if (frontDist < backDist) {
196  return SubLayerCrossings( frontSLC, backSLC, 0);
197  }
198  else {
199  return SubLayerCrossings( backSLC, frontSLC, 1);
200  }
201 }
#define LogDebug(id)
std::vector< const GeomDet * > theFrontDets
int findClosestDet(const GlobalPoint &startPos, int sectorId) const
std::vector< const GeomDet * > theBackDets
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
ReferenceCountingPointer< BoundDiskSector > theBackSector
ReferenceCountingPointer< BoundDiskSector > theFrontSector
int CompositeTECWedge::findClosestDet ( const GlobalPoint startPos,
int  sectorId 
) const
private

Definition at line 264 of file CompositeTECWedge.cc.

References funct::abs(), mps_fire::i, theBackDets, theFrontDets, toLocal(), and x.

Referenced by basicComponents(), and computeCrossings().

265 {
266  vector<const GeomDet*> const & myDets = sectorId==0 ? theFrontDets : theBackDets;
267 
268  int close = 0;
269  auto closeDist = std::abs( (myDets.front()->toLocal(startPos)).x());
270  for (unsigned int i = 1; i < myDets.size(); i++ ) {
271  auto dist = std::abs((myDets[i]->toLocal(startPos)).x());
272  if ( dist < closeDist ) {
273  close = i;
274  closeDist = dist;
275  }
276  }
277  return close;
278 }
LocalVector toLocal(const reco::Track::Vector &v, const Surface &s)
std::vector< const GeomDet * > theFrontDets
std::vector< const GeomDet * > theBackDets
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
void CompositeTECWedge::groupedCompatibleDetsV ( const TrajectoryStateOnSurface startingState,
const Propagator prop,
const MeasurementEstimator est,
std::vector< DetGroup > &  result 
) const
virtual

Reimplemented from GeometricSearchDet.

Definition at line 101 of file CompositeTECWedge.cc.

References addClosest(), SubLayerCrossings::closest(), SubLayerCrossings::closestIndex(), computeCrossings(), tkDetUtil::computeWindowSize(), LayerCrossingSide::endcapSide(), SubLayerCrossings::isValid(), LogDebug, eostools::move(), DetGroupMerger::orderAndMergeTwoLevels(), SubLayerCrossings::other(), Propagator::propagationDirection(), searchNeighbors(), and svgfig::window().

Referenced by basicComponents().

104  {
105 
106  SubLayerCrossings crossings = computeCrossings( tsos, prop.propagationDirection());
107  if(! crossings.isValid()) return;
108 
109  std::vector<DetGroup> closestResult;
110  addClosest( tsos, prop, est, crossings.closest(), closestResult);
111 
112  LogDebug("TkDetLayers")
113  << "in CompositeTECWedge::groupedCompatibleDets,closestResult.size(): "
114  << closestResult.size() ;
115 
116  if (closestResult.empty()) return;
117 
118  DetGroupElement closestGel( closestResult.front().front());
119  auto window = tkDetUtil::computeWindowSize( closestGel.det(), closestGel.trajectoryState(), est);
120 
121  searchNeighbors( tsos, prop, est, crossings.closest(), window,
122  closestResult, false);
123 
124  std::vector<DetGroup> nextResult;
125  searchNeighbors( tsos, prop, est, crossings.other(), window,
126  nextResult, true);
127 
128  int crossingSide = LayerCrossingSide().endcapSide( closestGel.trajectoryState(), prop);
130  crossings.closestIndex(), crossingSide);
131 }
#define LogDebug(id)
int closestIndex() const
SubLayerCrossings computeCrossings(const TrajectoryStateOnSurface &tsos, PropagationDirection propDir) const __attribute__((hot))
float computeWindowSize(const GeomDet *det, const TrajectoryStateOnSurface &tsos, const MeasurementEstimator &est)
Definition: TkDetUtil.cc:9
virtual PropagationDirection propagationDirection() const final
Definition: Propagator.h:151
static int endcapSide(const TrajectoryStateOnSurface &startingState, const Propagator &prop)
def window(xmin, xmax, ymin, ymax, x=0, y=0, width=100, height=100, xlogbase=None, ylogbase=None, minusInfinity=-1000, flipx=False, flipy=True)
Definition: svgfig.py:642
const SubLayerCrossing & other() const
void searchNeighbors(const TrajectoryStateOnSurface &tsos, const Propagator &prop, const MeasurementEstimator &est, const SubLayerCrossing &crossing, float window, std::vector< DetGroup > &result, bool checkClosest) const __attribute__((hot))
const SubLayerCrossing & closest() const
bool addClosest(const TrajectoryStateOnSurface &tsos, const Propagator &prop, const MeasurementEstimator &est, const SubLayerCrossing &crossing, std::vector< DetGroup > &result) const __attribute__((hot))
static void orderAndMergeTwoLevels(std::vector< DetGroup > &&one, std::vector< DetGroup > &&two, std::vector< DetGroup > &result, int firstIndex, int firstCrossed)
def move(src, dest)
Definition: eostools.py:510
void CompositeTECWedge::searchNeighbors ( const TrajectoryStateOnSurface tsos,
const Propagator prop,
const MeasurementEstimator est,
const SubLayerCrossing crossing,
float  window,
std::vector< DetGroup > &  result,
bool  checkClosest 
) const
private

Definition at line 223 of file CompositeTECWedge.cc.

References Clusterizer1DCommons::add(), PV3DBase< T, PVType, FrameType >::barePhi(), SubLayerCrossing::closestDetIndex(), tkDetUtil::overlapInPhi(), Geom::phiLess(), SubLayerCrossing::position(), SubLayerCrossing::subLayerIndex(), and subWedge().

Referenced by basicComponents(), and groupedCompatibleDetsV().

230 {
231  GlobalPoint gCrossingPos = crossing.position();
232 
233  const vector<const GeomDet*>& sWedge( subWedge( crossing.subLayerIndex()));
234 
235  int closestIndex = crossing.closestDetIndex();
236  int negStartIndex = closestIndex-1;
237  int posStartIndex = closestIndex+1;
238 
239  if (checkClosest) { // must decide if the closest is on the neg or pos side
240  if ( Geom::phiLess(gCrossingPos.barePhi(), sWedge[closestIndex]->surface().phi()) ) {
241  posStartIndex = closestIndex;
242  }
243  else {
244  negStartIndex = closestIndex;
245  }
246  }
247 
248  typedef CompatibleDetToGroupAdder Adder;
249  for (int idet=negStartIndex; idet >= 0; idet--) {
250  //if(idet <0 || idet>=sWedge.size()) {edm::LogInfo(TkDetLayers) << "==== warning! gone out vector bounds.idet: " << idet ;break;}
251  if (!tkDetUtil::overlapInPhi( gCrossingPos, *sWedge[idet], window)) break;
252  if (!Adder::add( *sWedge[idet], tsos, prop, est, result)) break;
253  }
254  for (int idet=posStartIndex; idet < static_cast<int>(sWedge.size()); idet++) {
255  //if(idet <0 || idet>=sWedge.size()) {edm::LogInfo(TkDetLayers) << "==== warning! gone out vector bounds.idet: " << idet ;break;}
256  if (!tkDetUtil::overlapInPhi( gCrossingPos, *sWedge[idet], window)) break;
257  if (!Adder::add( *sWedge[idet], tsos, prop, est, result)) break;
258  }
259 }
int closestDetIndex() const
void add(const std::vector< const T * > &source, std::vector< const T * > &dest)
bool overlapInPhi(float phi, const GeomDet &det, float phiWindow)
Definition: TkDetUtil.h:19
const GlobalPoint & position() const
T barePhi() const
Definition: PV3DBase.h:68
const std::vector< const GeomDet * > & subWedge(int ind) const
int subLayerIndex() const
def window(xmin, xmax, ymin, ymax, x=0, y=0, width=100, height=100, xlogbase=None, ylogbase=None, minusInfinity=-1000, flipx=False, flipy=True)
Definition: svgfig.py:642
bool phiLess(float phi1, float phi2)
Definition: VectorUtil.h:23
const std::vector<const GeomDet*>& CompositeTECWedge::subWedge ( int  ind) const
inlineprivate

Definition at line 57 of file CompositeTECWedge.h.

References theBackDets, and theFrontDets.

Referenced by addClosest(), and searchNeighbors().

57  {
58  return (ind==0 ? theFrontDets : theBackDets);
59  }
std::vector< const GeomDet * > theFrontDets
std::vector< const GeomDet * > theBackDets

Member Data Documentation

std::vector<const GeomDet*> CompositeTECWedge::theBackDets
private

Definition at line 64 of file CompositeTECWedge.h.

Referenced by CompositeTECWedge(), computeCrossings(), findClosestDet(), and subWedge().

ReferenceCountingPointer<BoundDiskSector> CompositeTECWedge::theBackSector
private

Definition at line 68 of file CompositeTECWedge.h.

Referenced by CompositeTECWedge(), and computeCrossings().

std::vector<const GeomDet*> CompositeTECWedge::theDets
private

Definition at line 65 of file CompositeTECWedge.h.

Referenced by basicComponents(), and CompositeTECWedge().

std::vector<const GeomDet*> CompositeTECWedge::theFrontDets
private

Definition at line 63 of file CompositeTECWedge.h.

Referenced by CompositeTECWedge(), computeCrossings(), findClosestDet(), and subWedge().

ReferenceCountingPointer<BoundDiskSector> CompositeTECWedge::theFrontSector
private

Definition at line 67 of file CompositeTECWedge.h.

Referenced by CompositeTECWedge(), and computeCrossings().