00001 //#include "Alignment/KalmanAlignmentAlgorithm/plugins/MultiMetricsUpdator.h" 00002 #include "MultiMetricsUpdator.h" 00003 00004 #include "Alignment/KalmanAlignmentAlgorithm/interface/KalmanAlignmentMetricsUpdatorPlugin.h" 00005 #include "Alignment/CommonAlignment/interface/Alignable.h" 00006 00007 #include "FWCore/MessageLogger/interface/MessageLogger.h" 00008 00009 00010 00011 MultiMetricsUpdator::MultiMetricsUpdator( const edm::ParameterSet & config ) : KalmanAlignmentMetricsUpdator( config ) 00012 { 00013 std::vector<std::string> strConfig = config.getParameter< std::vector<std::string> >( "Configurations" ); 00014 std::vector<std::string>::iterator itConfig; 00015 for ( itConfig = strConfig.begin(); itConfig != strConfig.end(); ++itConfig ) 00016 { 00017 edm::ParameterSet updatorConfig = config.getParameter<edm::ParameterSet>( *itConfig ); 00018 theMetricsUpdators.push_back( new SimpleMetricsUpdator( updatorConfig ) ); 00019 } 00020 00021 00022 edm::LogInfo("Alignment") << "@SUB=MultiMetricsUpdator::MultiMetricsUpdator " 00023 << "\nInstance of MultiMetricsUpdator created.";; 00024 } 00025 00026 00027 MultiMetricsUpdator::~MultiMetricsUpdator( void ) 00028 { 00029 std::vector< SimpleMetricsUpdator* >::const_iterator it; 00030 00031 for ( it = theMetricsUpdators.begin(); it != theMetricsUpdators.end(); ++it ) 00032 delete *it; 00033 } 00034 00035 00036 void MultiMetricsUpdator::update( const std::vector< Alignable* > & alignables ) 00037 { 00038 std::vector< SimpleMetricsUpdator* >::const_iterator it; 00039 for ( it = theMetricsUpdators.begin(); it != theMetricsUpdators.end(); ++it ) 00040 { 00041 (*it)->update( alignables ); 00042 } 00043 } 00044 00045 00046 const std::vector< Alignable* > 00047 MultiMetricsUpdator::additionalAlignables( const std::vector< Alignable* > & alignables ) 00048 { 00049 std::set< Alignable* > alignableSet; 00050 00051 std::vector< SimpleMetricsUpdator* >::const_iterator it; 00052 for ( it = theMetricsUpdators.begin(); it != theMetricsUpdators.end(); ++it ) 00053 { 00054 const std::vector< Alignable* > additional = (*it)->additionalAlignables( alignables ); 00055 alignableSet.insert( additional.begin(), additional.end() ); 00056 } 00057 00058 std::vector< Alignable* > result; 00059 result.insert( result.end(), alignableSet.begin(), alignableSet.end() ); 00060 return result; 00061 } 00062 00063 00064 const std::vector< Alignable* > 00065 MultiMetricsUpdator::alignables( void ) const 00066 { 00067 std::set< Alignable* > alignableSet; 00068 00069 std::vector< SimpleMetricsUpdator* >::const_iterator it; 00070 for ( it = theMetricsUpdators.begin(); it != theMetricsUpdators.end(); ++it ) 00071 { 00072 const std::vector< Alignable* > alignables = (*it)->alignables(); 00073 alignableSet.insert( alignables.begin(), alignables.end() ); 00074 } 00075 00076 std::vector< Alignable* > result; 00077 result.insert( result.end(), alignableSet.begin(), alignableSet.end() ); 00078 return result; 00079 } 00080 00081 00082 DEFINE_EDM_PLUGIN( KalmanAlignmentMetricsUpdatorPlugin, MultiMetricsUpdator, "MultiMetricsUpdator" );