00001 #include "UTIL/CollectionParameterMap.h"
00002 #include "EVENT/LCParameters.h"
00003 #include<sstream>
00004
00005 #include <iostream>
00006
00007
00008 namespace UTIL{
00009
00010 CollectionParameterMap::CollectionParameterMap( const std::string& keyName ,
00011 const std::string& valueName,
00012 LCCollection* col ) :
00013 _keyName( keyName ) ,
00014 _valueName( valueName ) ,
00015 _col( col ) {
00016
00017 init( col ) ;
00018
00019 }
00020
00021 CollectionParameterMap::CollectionParameterMap( const std::string& keyName ,
00022 const std::string& valueName,
00023 const LCCollection* col ) :
00024 _keyName( keyName ) ,
00025 _valueName( valueName ) ,
00026 _col( 0 ) {
00027
00028 init( col ) ;
00029 }
00030
00031 void CollectionParameterMap::init( const LCCollection* col ){
00032
00033 StringVec keys ;
00034
00035 col->getParameters().getStringVals( _keyName , keys ) ;
00036
00037 IntVec values ;
00038
00039 col->getParameters().getIntVals( _valueName , values ) ;
00040
00041
00042
00043 if( keys.size() != values.size() ) {
00044
00045 std::stringstream sstr ;
00046
00047 sstr << " CollectionParameterMap::init() - inconsistent parameter sizes for "
00048 << _keyName << " [" << keys.size() << "] and "
00049 << _valueName << " [" << values.size() << "] " ;
00050
00051 throw Exception( sstr.str() ) ;
00052 }
00053
00054 unsigned nKeys = keys.size() ;
00055 for(unsigned i=0;i<nKeys;++i){
00056
00057 _map.insert( std::make_pair( keys[i] , values[i] ) ) ;
00058 }
00059
00060 }
00061
00062
00063 CollectionParameterMap::~CollectionParameterMap() {
00064
00065
00066 if( _col != 0 ){
00067
00068 StringVec keys ;
00069 IntVec values ;
00070
00071 for(map_type::iterator it= _map.begin() ; it!=_map.end() ;++it){
00072
00073 keys.push_back( it->first ) ;
00074 values.push_back( it->second ) ;
00075
00076
00077
00078
00079 }
00080
00081 _col->parameters().setValues( _keyName , keys ) ;
00082 _col->parameters().setValues( _valueName , values ) ;
00083
00084
00085
00086
00087
00088
00089 }
00090
00091 }
00092
00093
00094
00095
00096 }