16 std::vector< unsigned int > dummy;
30 edm::LogInfo(
"Alignment") <<
"@SUB=SimpleMetricsUpdator::SimpleMetricsUpdator "
31 <<
"\nInstance of MetricsCalculator created (MaxMetricsDistance = " << maxDistance <<
").";
37 std::vector< Alignable* > alignablesForUpdate;
38 std::vector< Alignable* >::const_iterator it;
40 for ( it = alignables.begin(); it != alignables.end(); ++it )
42 unsigned int subdetId =
static_cast< unsigned int >( (*it)->geomDetId().subdetId() );
46 alignablesForUpdate.push_back( *it );
54 const std::vector< Alignable* >
57 std::vector< Alignable* >
result;
58 std::vector< Alignable* >::const_iterator itAD;
60 std::map< Alignable*, short int > updateList;
61 std::map< Alignable*, short int >::iterator itUL;
63 std::set< Alignable* > alignablesFromUpdateList;
64 std::set< Alignable* >::iterator itAUL;
67 for ( itAD = alignables.begin(); itAD != alignables.end(); itAD++ )
70 for ( itUL = updateList.begin(); itUL != updateList.end(); itUL++ )
75 alignablesFromUpdateList.insert( itUL->first );
81 for ( itAUL = alignablesFromUpdateList.begin(); itAUL != alignablesFromUpdateList.end(); itAUL++ )
83 if (
find( alignables.begin(), alignables.end(), *itAUL ) == alignables.end() )
85 result.push_back( *itAUL );
93 const std::map< Alignable*, short int >
96 std::map< Alignable*, short int >
result;
97 std::map< Alignable*, short int > updateList;
98 std::map< Alignable*, short int >::iterator itUL;
99 std::map< Alignable*, short int >::iterator itFind;
101 std::vector< Alignable* >::const_iterator itAD;
104 for ( itAD = alignables.begin(); itAD != alignables.end(); itAD++ )
107 for ( itUL = updateList.begin(); itUL != updateList.end(); itUL++ )
109 itFind = result.find( itUL->first );
110 if ( itFind == result.end() )
112 result[itUL->first] = itUL->second;
114 else if ( itFind->second < itUL->second )
116 itFind->second = itUL->second;
121 for ( itAD = alignables.begin(); itAD != alignables.end(); itAD++ )
123 itFind = result.find( *itAD );
124 if ( itFind != result.end() ) result.erase( itFind );
134 short int metricalDist )
const
143 bool barrelRegion = ( detId.subdetId()%2 != 0 );
147 double perp1 = pos1.
perp();
149 double deltaPerp = perp2 - perp1;
155 double z1 = pos1.z();
156 double z2 = pos2.
z();
157 double signZ = ( z1 > 0. ) ? 1. : -1;
158 double deltaZ = signZ*( z2 - z1 );
163 double r1 = pos1.mag();
164 double r2 = pos2.
mag();
165 double sp = pos1.x()*pos2.
x() + pos1.y()*pos2.
y() + pos1.z()*pos2.
z();
167 double dist =
sqrt( r2*r2 - sp*sp/r1/r1 );
virtual const std::map< Alignable *, short int > additionalAlignablesWithDistances(const std::vector< Alignable * > &alignables)
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
T perp2() const
Squared magnitude of transverse component.
void setMaxDistance(short int maxDistance)
Set maximum distance to be stored.
virtual void update(const std::vector< Alignable * > &alignables)
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
SimpleMetricsUpdator(const edm::ParameterSet &config)
virtual const std::vector< Alignable * > additionalAlignables(const std::vector< Alignable * > &alignables)
bool additionalSelectionCriterion(Alignable *const &referenceAli, Alignable *const &additionalAli, short int metricalDist) const
std::vector< unsigned int > theExcludedSubdetIds
void updateDistances(const std::vector< Alignable * > &alignables)
Update list of distances with a set Alignables.
KalmanAlignmentMetricsCalculator theMetricsCalculator
const SingleDistancesList & getDistances(Alignable *i) const
#define DEFINE_EDM_PLUGIN(factory, type, name)
const PositionType & globalPosition() const
Return the global position of the object.
short int theMetricalThreshold
const DetId & geomDetId() const