File indexing completed on 2023-03-17 10:41:31
0001 #include <cassert>
0002 #include <math.h>
0003 #include <iostream>
0004 using namespace std;
0005
0006 #include "MEVarVector.hh"
0007
0008 ClassImp(MEVarVector);
0009
0010 MEVarVector::MEVarVector( int size ) : _size( size )
0011 {
0012 }
0013
0014 MEVarVector::~MEVarVector()
0015 {
0016 for( MusEcal::VarVecTimeMap::iterator it=_map.begin(); it!=_map.end(); ++it )
0017 {
0018 delete it->second;
0019 }
0020 }
0021
0022 void
0023 MEVarVector::addTime( ME::Time t )
0024 {
0025 if( _map.count( t ) !=0 ) return;
0026 MusEcal::VarVec* vec_ =
0027 new MusEcal::VarVec( _size, make_pair<float,bool>( 0., true ) );
0028 _map[t] = vec_;
0029 }
0030
0031 void
0032 MEVarVector::setVal( ME::Time t, int ii, float val, bool check )
0033 {
0034 if( check ) addTime( t );
0035 MusEcal::VarVec& vec_ = *(_map[t]);
0036 vec_[ii].first = val;
0037 }
0038
0039 void
0040 MEVarVector::setFlag( ME::Time t, int ii, bool flag, bool check )
0041 {
0042 if( check ) addTime( t );
0043 MusEcal::VarVec& vec_ = *(_map[t]);
0044 vec_[ii].second = flag;
0045 }
0046
0047 void
0048 MEVarVector::setValAndFlag( ME::Time t, int ii, float val, bool flag, bool check )
0049 {
0050 setVal( t, ii, val, check );
0051 setFlag( t, ii, flag, check );
0052 }
0053
0054 void
0055 MEVarVector::getTime( vector< ME::Time >& time,
0056 const METimeInterval* interval )
0057 {
0058 time.clear();
0059 for( MusEcal::VarVecTimeMap::iterator it=_map.begin();
0060 it!=_map.end(); ++it )
0061 {
0062 ME::Time t_ = it->first;
0063 if( interval!=0 )
0064 {
0065 if( t_<interval->firstTime() || t_>interval->lastTime() ) continue;
0066 }
0067 time.push_back( t_ );
0068 }
0069 }
0070
0071 void
0072 MEVarVector::getValAndFlag( int ii,
0073 const vector< ME::Time >& time,
0074 vector< float >& val,
0075 vector< bool >& flag )
0076 {
0077 val.clear();
0078 flag.clear();
0079 for( unsigned int itime=0; itime<time.size(); itime++ )
0080 {
0081 ME::Time t_ = time[itime];
0082 float val_(0.);
0083 bool flag_(true);
0084 assert( getValByTime( t_, ii, val_, flag_ ) );
0085 val.push_back( val_ );
0086 flag.push_back( flag_ );
0087 }
0088 }
0089
0090 void
0091 MEVarVector::getTimeValAndFlag( int ii,
0092 vector< ME::Time >& time,
0093 vector< float >& val,
0094 vector< bool >& flag,
0095 const METimeInterval* interval )
0096 {
0097 getTime( time, interval );
0098 val.clear();
0099 flag.clear();
0100 getValAndFlag( ii, time, val, flag );
0101 }
0102
0103 bool
0104 MEVarVector::getValByTime( ME::Time time, int ii,
0105 float& val, bool& flag )
0106 {
0107 val=0;
0108 flag=false;
0109 if( _map.count( time )==0 ) return false;
0110 MusEcal::VarVec* vec_ = _map[time];
0111 val=(*vec_)[ii].first;
0112 flag=(*vec_)[ii].second;
0113 return true;
0114 }
0115