CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_2_9/src/Alignment/KalmanAlignmentAlgorithm/plugins/MultiMetricsUpdator.cc

Go to the documentation of this file.
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" );