CMS 3D CMS Logo

List of all members | Public Member Functions | Private Types | Private Member Functions | Private Attributes
SymmetricLayerFinder Class Reference

#include <SymmetricLayerFinder.h>

Public Member Functions

const ForwardDetLayermirror (const ForwardDetLayer *layer)
 
FDLC mirror (const FDLC &input)
 
 SymmetricLayerFinder (const FDLC &)
 

Private Types

typedef FDLC::const_iterator ConstFDLI
 
typedef std::vector< const ForwardDetLayer * > FDLC
 
typedef FDLC::iterator FDLI
 
typedef std::map< const ForwardDetLayer *, const ForwardDetLayer *, std::less< const ForwardDetLayer * > > ForwardMapType
 
typedef std::pair< const ForwardDetLayer *, const ForwardDetLayer * > PairType
 

Private Member Functions

const ForwardDetLayermirrorPartner (const ForwardDetLayer *layer, const FDLC &rightLayers)
 

Private Attributes

ForwardMapType theForwardMap
 

Detailed Description

A symmetrisation algorithm for layer navigation. For every ForwardDetLayer returns a pointer to the symmetric one with respect to origin.

Definition at line 17 of file SymmetricLayerFinder.h.

Member Typedef Documentation

typedef FDLC::const_iterator SymmetricLayerFinder::ConstFDLI
private

Definition at line 21 of file SymmetricLayerFinder.h.

typedef std::vector<const ForwardDetLayer*> SymmetricLayerFinder::FDLC
private

Definition at line 19 of file SymmetricLayerFinder.h.

typedef FDLC::iterator SymmetricLayerFinder::FDLI
private

Definition at line 20 of file SymmetricLayerFinder.h.

typedef std::map< const ForwardDetLayer*, const ForwardDetLayer*, std::less<const ForwardDetLayer*> > SymmetricLayerFinder::ForwardMapType
private

Definition at line 38 of file SymmetricLayerFinder.h.

typedef std::pair< const ForwardDetLayer*, const ForwardDetLayer*> SymmetricLayerFinder::PairType
private

Definition at line 22 of file SymmetricLayerFinder.h.

Constructor & Destructor Documentation

SymmetricLayerFinder::SymmetricLayerFinder ( const FDLC flc)

Definition at line 13 of file SymmetricLayerFinder.cc.

References a, Exception, and mps_fire::i.

14 {
15  ConstFDLI middle = find_if( flc.begin(), flc.end(),
16  [](const GeometricSearchDet* a){ return a->position().z() >= 0.0; });
17 
18  FDLC leftLayers = FDLC( flc.begin(), middle);
19  FDLC rightLayers = FDLC( middle, flc.end());
20  vector<PairType> foundPairs;
21 
22  for ( FDLI i = leftLayers.begin(); i != leftLayers.end(); i++) {
23  const ForwardDetLayer* partner = mirrorPartner( *i, rightLayers);
24  //if ( partner == 0) throw DetLogicError("Assymmetric forward layers in Tracker");
25  if ( partner == nullptr) throw cms::Exception("SymmetricLayerFinder", "Assymmetric forward layers in Tracker");
26 
27  foundPairs.push_back( make_pair( *i, partner));
28  }
29 
30  // fill the map
31  for ( vector<PairType>::iterator ipair = foundPairs.begin();
32  ipair != foundPairs.end(); ipair++) {
33  theForwardMap[ipair->first] = ipair->second;
34  theForwardMap[ipair->second] = ipair->first;
35  }
36 }
const ForwardDetLayer * mirrorPartner(const ForwardDetLayer *layer, const FDLC &rightLayers)
ForwardMapType theForwardMap
double a
Definition: hdecay.h:121
std::vector< const ForwardDetLayer * > FDLC
FDLC::const_iterator ConstFDLI

Member Function Documentation

const ForwardDetLayer* SymmetricLayerFinder::mirror ( const ForwardDetLayer layer)
inline
SymmetricLayerFinder::FDLC SymmetricLayerFinder::mirror ( const FDLC input)

Definition at line 59 of file SymmetricLayerFinder.cc.

References mps_fire::i, EmbeddingLHEProducer_cfi::mirror, and mps_fire::result.

59  {
60  FDLC result;
61  for ( ConstFDLI i = input.begin(); i != input.end(); i++) {
62  result.push_back( mirror(*i));
63  }
64  return result;
65 }
const ForwardDetLayer * mirror(const ForwardDetLayer *layer)
static std::string const input
Definition: EdmProvDump.cc:45
std::vector< const ForwardDetLayer * > FDLC
FDLC::const_iterator ConstFDLI
const ForwardDetLayer * SymmetricLayerFinder::mirrorPartner ( const ForwardDetLayer layer,
const FDLC rightLayers 
)
private

Definition at line 38 of file SymmetricLayerFinder.cc.

References a, funct::abs(), GeometricSearchDet::position(), mps_fire::result, ForwardDetLayer::specificSurface(), and PV3DBase< T, PVType, FrameType >::z().

40 {
41 
42  auto mirrorImage = [=]( const ForwardDetLayer* a) ->bool {
43  auto zdiff = a->position().z() + layer->position().z();
44  auto rdiff = a->specificSurface().innerRadius() -
45  layer->specificSurface().innerRadius();
46 
47  // equality based on z position and inner radius
48  return std::abs(zdiff) < 2.f && std::abs(rdiff) < 1.f; // units are cm
49  };
50 
51 
53  find_if( rightLayers.begin(), rightLayers.end(), mirrorImage);
54  if ( result == rightLayers.end()) return nullptr;
55  else return *result;
56 }
T z() const
Definition: PV3DBase.h:64
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
virtual const BoundDisk & specificSurface() const final
virtual const Surface::PositionType & position() const
Returns position of the surface.
double a
Definition: hdecay.h:121
FDLC::const_iterator ConstFDLI

Member Data Documentation

ForwardMapType SymmetricLayerFinder::theForwardMap
private

Definition at line 40 of file SymmetricLayerFinder.h.