CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Private Types | Private Member Functions | Static Private Member Functions | Private Attributes
PixelForwardLayer Class Referencefinal

#include <PixelForwardLayer.h>

Inheritance diagram for PixelForwardLayer:
ForwardDetLayer DetLayer GeometricSearchDet

Classes

struct  SubTurbineCrossings
 

Public Member Functions

const std::vector< const GeomDet * > & basicComponents () const override
 
const std::vector< const GeometricSearchDet * > & components () const override __attribute__((cold))
 Returns basic components, if any. More...
 
void groupedCompatibleDetsV (const TrajectoryStateOnSurface &tsos, const Propagator &prop, const MeasurementEstimator &est, std::vector< DetGroup > &result) const override __attribute__((hot))
 
 PixelForwardLayer (std::vector< const PixelBlade *> &blades)
 
SubDetector subDetector () const override
 The type of detector (PixelBarrel, PixelEndcap, TIB, TOB, TID, TEC, CSC, DT, RPCBarrel, RPCEndcap) More...
 
 ~PixelForwardLayer () override
 
- Public Member Functions inherited from ForwardDetLayer
std::pair< bool, TrajectoryStateOnSurfacecompatible (const TrajectoryStateOnSurface &, const Propagator &, const MeasurementEstimator &) const override
 
bool contains (const Local3DPoint &p) const
 
 ForwardDetLayer (bool doHaveGroups)
 
Location location () const final
 Which part of the detector (barrel, endcap) More...
 
virtual const BoundDiskspecificSurface () const final
 
const BoundSurfacesurface () const final
 The surface of the GeometricSearchDet. More...
 
 ~ForwardDetLayer () override
 
- Public Member Functions inherited from DetLayer
 DetLayer (bool doHaveGroup, bool ibar)
 
bool isBarrel () const
 
bool isForward () const
 
int seqNum () const
 
void setSeqNum (int sq)
 
 ~DetLayer () override
 
- 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 Types

typedef PeriodicBinFinderInPhi< float > BinFinderType
 

Private Member Functions

SubTurbineCrossings computeCrossings (const TrajectoryStateOnSurface &startingState, PropagationDirection propDir) const __attribute__((hot))
 
void searchNeighbors (const TrajectoryStateOnSurface &tsos, const Propagator &prop, const MeasurementEstimator &est, const SubTurbineCrossings &crossings, float window, std::vector< DetGroup > &result) const __attribute__((hot))
 

Static Private Member Functions

static int computeHelicity (const GeometricSearchDet *firstBlade, const GeometricSearchDet *secondBlade)
 
static float computeWindowSize (const GeomDet *det, const TrajectoryStateOnSurface &tsos, const MeasurementEstimator &est)
 

Private Attributes

std::vector< const GeomDet * > theBasicComps
 
BinFinderType theBinFinder
 
std::vector< const GeometricSearchDet * > theComps
 

Additional Inherited Members

- Public Types inherited from DetLayer
typedef GeomDetEnumerators::Location Location
 
typedef GeomDetEnumerators::SubDetector SubDetector
 
- Public Types inherited from GeometricSearchDet
typedef std::pair< const GeomDet *, TrajectoryStateOnSurfaceDetWithState
 
typedef BoundSurface::PositionType PositionType
 
typedef BoundSurface::RotationType RotationType
 
typedef TrajectoryStateOnSurface TrajectoryState
 
- Protected Member Functions inherited from ForwardDetLayer
SimpleDiskBounds const & bounds () const
 
virtual BoundDiskcomputeSurface ()
 
virtual void initialize ()
 
float rmax () const
 
float rmin () const
 
void setSurface (BoundDisk *cp)
 
float zmax () const
 
float zmin () const
 
- Protected Attributes inherited from GeometricSearchDet
bool haveGroups
 
GeomDetCompatibilityChecker theCompatibilityChecker
 

Detailed Description

A concrete implementation for PixelForward layer built out of ForwardPixelBlade

Definition at line 13 of file PixelForwardLayer.h.

Member Typedef Documentation

◆ BinFinderType

Definition at line 61 of file PixelForwardLayer.h.

Constructor & Destructor Documentation

◆ PixelForwardLayer()

PixelForwardLayer::PixelForwardLayer ( std::vector< const PixelBlade *> &  blades)

Definition at line 22 of file PixelForwardLayer.cc.

References ForwardDetLayer::computeSurface(), ALPAKA_ACCELERATOR_NAMESPACE::vertexFinder::it, LogDebug, PV3DBase< T, PVType, FrameType >::phi(), GloballyPositioned< T >::position(), ForwardDetLayer::setSurface(), ForwardDetLayer::specificSurface(), ForwardDetLayer::surface(), theBasicComps, theBinFinder, theComps, and PV3DBase< T, PVType, FrameType >::z().

23  : ForwardDetLayer(true), theComps(blades.begin(), blades.end()) {
24  for (vector<const GeometricSearchDet*>::const_iterator it = theComps.begin(); it != theComps.end(); it++) {
25  theBasicComps.insert(theBasicComps.end(), (**it).basicComponents().begin(), (**it).basicComponents().end());
26  }
27 
28  //They should be already phi-ordered. TO BE CHECKED!!
29  //sort( theBlades.begin(), theBlades.end(), PhiLess());
31 
32  //Is a "periodic" binFinderInPhi enough?. TO BE CHECKED!!
33  theBinFinder = BinFinderType(theComps.front()->surface().position().phi(), theComps.size());
34 
35  //--------- DEBUG INFO --------------
36  LogDebug("TkDetLayers") << "DEBUG INFO for PixelForwardLayer"
37  << "\n"
38  << "PixelForwardLayer.surfcace.phi(): " << this->surface().position().phi() << "\n"
39  << "PixelForwardLayer.surfcace.z(): " << this->surface().position().z() << "\n"
40  << "PixelForwardLayer.surfcace.innerR(): " << this->specificSurface().innerRadius() << "\n"
41  << "PixelForwardLayer.surfcace.outerR(): " << this->specificSurface().outerRadius();
42 
43  for (vector<const GeometricSearchDet*>::const_iterator it = theComps.begin(); it != theComps.end(); it++) {
44  LogDebug("TkDetLayers") << "blades phi,z,r: " << (*it)->surface().position().phi() << " , "
45  << (*it)->surface().position().z() << " , " << (*it)->surface().position().perp();
46  }
47  //-----------------------------------
48 }
virtual BoundDisk * computeSurface()
const BoundSurface & surface() const final
The surface of the GeometricSearchDet.
T z() const
Definition: PV3DBase.h:61
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
void setSurface(BoundDisk *cp)
ForwardDetLayer(bool doHaveGroups)
PeriodicBinFinderInPhi< float > BinFinderType
std::vector< const GeometricSearchDet * > theComps
const PositionType & position() const
virtual const BoundDisk & specificSurface() const final
BinFinderType theBinFinder
std::vector< const GeomDet * > theBasicComps
#define LogDebug(id)

◆ ~PixelForwardLayer()

PixelForwardLayer::~PixelForwardLayer ( )
override

Definition at line 50 of file PixelForwardLayer.cc.

References mps_fire::i, and theComps.

50  {
51  vector<const GeometricSearchDet*>::const_iterator i;
52  for (i = theComps.begin(); i != theComps.end(); i++) {
53  delete *i;
54  }
55 }
std::vector< const GeometricSearchDet * > theComps

Member Function Documentation

◆ basicComponents()

const std::vector<const GeomDet*>& PixelForwardLayer::basicComponents ( ) const
inlineoverridevirtual

Implements GeometricSearchDet.

Definition at line 20 of file PixelForwardLayer.h.

References theBasicComps.

20 { return theBasicComps; }
std::vector< const GeomDet * > theBasicComps

◆ components()

const std::vector<const GeometricSearchDet*>& PixelForwardLayer::components ( ) const
inlineoverridevirtual

Returns basic components, if any.

Returns direct components, if any

Implements GeometricSearchDet.

Definition at line 22 of file PixelForwardLayer.h.

References theComps.

22 { return theComps; }
std::vector< const GeometricSearchDet * > theComps

◆ computeCrossings()

PixelForwardLayer::SubTurbineCrossings PixelForwardLayer::computeCrossings ( const TrajectoryStateOnSurface startingState,
PropagationDirection  propDir 
) const
private

Definition at line 157 of file PixelForwardLayer.cc.

References funct::abs(), PeriodicBinFinderInPhi< T >::binIndex(), HelixArbitraryPlaneCrossing::direction(), TrajectoryStateOnSurface::globalMomentum(), TrajectoryStateOnSurface::globalPosition(), HelixArbitraryPlaneCrossing::pathLength(), HelixArbitraryPlaneCrossing2Order::pathLength(), GloballyPositioned< T >::phi(), Geom::phiLess(), HelixArbitraryPlaneCrossing::position(), HelixArbitraryPlaneCrossing2Order::position(), rho, ForwardDetLayer::specificSurface(), ForwardDetLayer::surface(), theBinFinder, theComps, GloballyPositioned< T >::toLocal(), TrajectoryStateOnSurface::transverseCurvature(), and PV3DBase< T, PVType, FrameType >::x().

Referenced by groupedCompatibleDetsV().

158  {
160 
161  HelixPlaneCrossing::PositionType startPos(startingState.globalPosition());
162  HelixPlaneCrossing::DirectionType startDir(startingState.globalMomentum());
163 
164  auto rho = startingState.transverseCurvature();
165 
166  HelixArbitraryPlaneCrossing turbineCrossing(startPos, startDir, rho, propDir);
167 
168  pair<bool, double> thePath = turbineCrossing.pathLength(specificSurface());
169 
170  if (!thePath.first) {
171  //edm::LogInfo("TkDetLayers") << "ERROR in PixelForwardLayer: disk not crossed by track" ;
172  return SubTurbineCrossings();
173  }
174 
175  HelixPlaneCrossing::PositionType turbinePoint(turbineCrossing.position(thePath.second));
176  HelixPlaneCrossing::DirectionType turbineDir(turbineCrossing.direction(thePath.second));
177 
178  int closestIndex = theBinFinder.binIndex(turbinePoint.barePhi());
179 
180  const Plane& closestPlane(static_cast<const Plane&>(theComps[closestIndex]->surface()));
181 
182  HelixArbitraryPlaneCrossing2Order theBladeCrossing(turbinePoint, turbineDir, rho);
183 
184  pair<bool, double> theClosestBladePath = theBladeCrossing.pathLength(closestPlane);
185  LocalPoint closestPos = closestPlane.toLocal(GlobalPoint(theBladeCrossing.position(theClosestBladePath.second)));
186 
187  auto closestDist = closestPos.x(); // use fact that local X perp to global Y
188 
189  //int next = turbinePoint.phi() - closestPlane.position().phi() > 0 ? closest+1 : closest-1;
190 
191  int nextIndex = Geom::phiLess(closestPlane.phi(), turbinePoint.barePhi()) ? closestIndex + 1 : closestIndex - 1;
192 
193  const Plane& nextPlane(static_cast<const Plane&>(theComps[theBinFinder.binIndex(nextIndex)]->surface()));
194 
195  pair<bool, double> theNextBladePath = theBladeCrossing.pathLength(nextPlane);
196  LocalPoint nextPos = nextPlane.toLocal(GlobalPoint(theBladeCrossing.position(theNextBladePath.second)));
197 
198  auto nextDist = nextPos.x();
199 
200  if (std::abs(closestDist) < std::abs(nextDist)) {
201  return SubTurbineCrossings(closestIndex, nextIndex, nextDist);
202  } else {
203  return SubTurbineCrossings(nextIndex, closestIndex, closestDist);
204  }
205 }
int binIndex(T phi) const override
returns an index in the valid range for the bin that contains phi
const BoundSurface & surface() const final
The surface of the GeometricSearchDet.
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
Definition: Plane.h:16
T x() const
Definition: PV3DBase.h:59
GlobalPoint globalPosition() const
std::vector< const GeometricSearchDet * > theComps
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
bool phiLess(float phi1, float phi2)
Definition: VectorUtil.h:18
GlobalVector globalMomentum() const
Vector2DBase< float, LocalTag > Local2DVector
virtual const BoundDisk & specificSurface() const final
BinFinderType theBinFinder

◆ computeHelicity()

int PixelForwardLayer::computeHelicity ( const GeometricSearchDet firstBlade,
const GeometricSearchDet secondBlade 
)
staticprivate

Definition at line 153 of file PixelForwardLayer.cc.

References funct::abs(), GeometricSearchDet::position(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by groupedCompatibleDetsV(), and searchNeighbors().

153  {
154  return std::abs(firstBlade->position().z()) < std::abs(secondBlade->position().z()) ? 0 : 1;
155 }
virtual const Surface::PositionType & position() const
Returns position of the surface.
T z() const
Definition: PV3DBase.h:61
Abs< T >::type abs(const T &t)
Definition: Abs.h:22

◆ computeWindowSize()

float PixelForwardLayer::computeWindowSize ( const GeomDet det,
const TrajectoryStateOnSurface tsos,
const MeasurementEstimator est 
)
staticprivate

Definition at line 207 of file PixelForwardLayer.cc.

References MeasurementEstimator::maximalLocalDisplacement(), GeomDet::surface(), and x.

Referenced by groupedCompatibleDetsV().

209  {
210  return est.maximalLocalDisplacement(tsos, det->surface()).x();
211 }
virtual Local2DVector maximalLocalDisplacement(const TrajectoryStateOnSurface &ts, const Plane &plane) const =0
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37

◆ groupedCompatibleDetsV()

void PixelForwardLayer::groupedCompatibleDetsV ( const TrajectoryStateOnSurface tsos,
const Propagator prop,
const MeasurementEstimator est,
std::vector< DetGroup > &  result 
) const
overridevirtual

Reimplemented from GeometricSearchDet.

Definition at line 57 of file PixelForwardLayer.cc.

References PVValHelper::add(), PeriodicBinFinderInPhi< T >::binIndex(), PixelForwardLayer::SubTurbineCrossings::closestIndex, computeCrossings(), computeHelicity(), computeWindowSize(), LayerCrossingSide::endcapSide(), PixelForwardLayer::SubTurbineCrossings::isValid, eostools::move(), PixelForwardLayer::SubTurbineCrossings::nextIndex, DetGroupMerger::orderAndMergeTwoLevels(), Propagator::propagationDirection(), mps_fire::result, searchNeighbors(), theBinFinder, theComps, and svgfig::window().

60  {
61  std::vector<DetGroup> closestResult;
62  SubTurbineCrossings crossings;
63 
64  crossings = computeCrossings(tsos, prop.propagationDirection());
65  if (!crossings.isValid) {
66  //edm::LogInfo("TkDetLayers") << "computeCrossings returns invalid in PixelForwardLayer::groupedCompatibleDets:";
67  return;
68  }
69 
70  typedef CompatibleDetToGroupAdder Adder;
71  Adder::add(*theComps[theBinFinder.binIndex(crossings.closestIndex)], tsos, prop, est, closestResult);
72 
73  if (closestResult.empty()) {
74  Adder::add(*theComps[theBinFinder.binIndex(crossings.nextIndex)], tsos, prop, est, result);
75  return;
76  }
77 
78  DetGroupElement closestGel(closestResult.front().front());
79  float window = computeWindowSize(closestGel.det(), closestGel.trajectoryState(), est);
80 
81  //float detWidth = closestGel.det()->surface().bounds().width();
82  //if (crossings.nextDistance < detWidth + window) {
83  vector<DetGroup> nextResult;
84  if (Adder::add(*theComps[theBinFinder.binIndex(crossings.nextIndex)], tsos, prop, est, nextResult)) {
85  int crossingSide = LayerCrossingSide().endcapSide(tsos, prop);
86  int theHelicity = computeHelicity(theComps[theBinFinder.binIndex(crossings.closestIndex)],
87  theComps[theBinFinder.binIndex(crossings.nextIndex)]);
89  std::move(closestResult), std::move(nextResult), result, theHelicity, crossingSide);
90  } else {
91  result.swap(closestResult);
92  }
93 
94  /*
95  }
96  else {
97  result.swap(closestResult);
98  }
99  */
100 
101  // --- THIS lines may speed up the reconstruction. But it reduces slightly the efficiency.
102  // only loop over neighbors (other than closest and next) if window is BIG
103  //if (window > 0.5*detWidth) {
104  searchNeighbors(tsos, prop, est, crossings, window, result);
105  //}
106 }
int binIndex(T phi) const override
returns an index in the valid range for the bin that contains phi
virtual PropagationDirection propagationDirection() const final
Definition: Propagator.h:139
static int computeHelicity(const GeometricSearchDet *firstBlade, const GeometricSearchDet *secondBlade)
std::vector< const GeometricSearchDet * > theComps
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:643
static float computeWindowSize(const GeomDet *det, const TrajectoryStateOnSurface &tsos, const MeasurementEstimator &est)
SubTurbineCrossings computeCrossings(const TrajectoryStateOnSurface &startingState, PropagationDirection propDir) const __attribute__((hot))
void add(std::map< std::string, TH1 *> &h, TH1 *hist)
static void orderAndMergeTwoLevels(std::vector< DetGroup > &&one, std::vector< DetGroup > &&two, std::vector< DetGroup > &result, int firstIndex, int firstCrossed)
void searchNeighbors(const TrajectoryStateOnSurface &tsos, const Propagator &prop, const MeasurementEstimator &est, const SubTurbineCrossings &crossings, float window, std::vector< DetGroup > &result) const __attribute__((hot))
BinFinderType theBinFinder
def move(src, dest)
Definition: eostools.py:511

◆ searchNeighbors()

void PixelForwardLayer::searchNeighbors ( const TrajectoryStateOnSurface tsos,
const Propagator prop,
const MeasurementEstimator est,
const SubTurbineCrossings crossings,
float  window,
std::vector< DetGroup > &  result 
) const
private

Definition at line 108 of file PixelForwardLayer.cc.

References PVValHelper::add(), PeriodicBinFinderInPhi< T >::binIndex(), PixelForwardLayer::SubTurbineCrossings::closestIndex, computeHelicity(), LayerCrossingSide::endcapSide(), SiStripPI::max, HLT_2024v12_cff::Merger, SiStripPI::min, eostools::move(), PixelForwardLayer::SubTurbineCrossings::nextIndex, mps_fire::result, theBinFinder, and theComps.

Referenced by groupedCompatibleDetsV().

113  {
114  typedef CompatibleDetToGroupAdder Adder;
115  int crossingSide = LayerCrossingSide().endcapSide(tsos, prop);
116  typedef DetGroupMerger Merger;
117 
118  int negStart = min(crossings.closestIndex, crossings.nextIndex) - 1;
119  int posStart = max(crossings.closestIndex, crossings.nextIndex) + 1;
120 
121  int quarter = theComps.size() / 4;
122 
123  for (int idet = negStart; idet >= negStart - quarter + 1; idet--) {
124  std::vector<DetGroup> tmp1;
125  const GeometricSearchDet* neighbor = theComps[theBinFinder.binIndex(idet)];
126  // if (!overlap( gCrossingPos, *neighbor, window)) break; // mybe not needed?
127  // maybe also add shallow crossing angle test here???
128  if (!Adder::add(*neighbor, tsos, prop, est, tmp1))
129  break;
130  int theHelicity = computeHelicity(theComps[theBinFinder.binIndex(idet)], theComps[theBinFinder.binIndex(idet + 1)]);
131  std::vector<DetGroup> tmp2;
132  tmp2.swap(result);
133  std::vector<DetGroup> newResult;
134  Merger::orderAndMergeTwoLevels(std::move(tmp1), std::move(tmp2), newResult, theHelicity, crossingSide);
135  result.swap(newResult);
136  }
137  for (int idet = posStart; idet < posStart + quarter - 1; idet++) {
138  vector<DetGroup> tmp1;
139  const GeometricSearchDet* neighbor = theComps[theBinFinder.binIndex(idet)];
140  // if (!overlap( gCrossingPos, *neighbor, window)) break; // mybe not needed?
141  // maybe also add shallow crossing angle test here???
142  if (!Adder::add(*neighbor, tsos, prop, est, tmp1))
143  break;
144  int theHelicity = computeHelicity(theComps[theBinFinder.binIndex(idet - 1)], theComps[theBinFinder.binIndex(idet)]);
145  std::vector<DetGroup> tmp2;
146  tmp2.swap(result);
147  std::vector<DetGroup> newResult;
148  Merger::orderAndMergeTwoLevels(std::move(tmp2), std::move(tmp1), newResult, theHelicity, crossingSide);
149  result.swap(newResult);
150  }
151 }
int binIndex(T phi) const override
returns an index in the valid range for the bin that contains phi
static int computeHelicity(const GeometricSearchDet *firstBlade, const GeometricSearchDet *secondBlade)
std::vector< const GeometricSearchDet * > theComps
static int endcapSide(const TrajectoryStateOnSurface &startingState, const Propagator &prop)
void add(std::map< std::string, TH1 *> &h, TH1 *hist)
BinFinderType theBinFinder
def move(src, dest)
Definition: eostools.py:511

◆ subDetector()

SubDetector PixelForwardLayer::subDetector ( ) const
inlineoverridevirtual

The type of detector (PixelBarrel, PixelEndcap, TIB, TOB, TID, TEC, CSC, DT, RPCBarrel, RPCEndcap)

Implements DetLayer.

Definition at line 30 of file PixelForwardLayer.h.

References GeomDetEnumerators::PixelEndcap, and GeomDetEnumerators::subDetGeom.

Member Data Documentation

◆ theBasicComps

std::vector<const GeomDet*> PixelForwardLayer::theBasicComps
private

Definition at line 65 of file PixelForwardLayer.h.

Referenced by basicComponents(), and PixelForwardLayer().

◆ theBinFinder

BinFinderType PixelForwardLayer::theBinFinder
private

◆ theComps

std::vector<const GeometricSearchDet*> PixelForwardLayer::theComps
private