00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef _edoNormalMultiCenter_h
00029 #define _edoNormalMultiCenter_h
00030
00031 #include "edoModifierMass.h"
00032 #include "edoNormalMulti.h"
00033
00034 #ifdef WITH_BOOST
00035
00042 template < typename EOT >
00043 class edoNormalMultiCenter : public edoModifierMass< edoNormalMulti< EOT > >
00044 {
00045 public:
00046 typedef typename EOT::AtomType AtomType;
00047
00048 void operator() ( edoNormalMulti< EOT >& distrib, EOT& mass )
00049 {
00050 ublas::vector< AtomType > mean( distrib.size() );
00051 std::copy( mass.begin(), mass.end(), mean.begin() );
00052 distrib.mean() = mean;
00053 }
00054 };
00055
00056 #else
00057 #ifdef WITH_EIGEN
00058
00063 template < typename EOT, typename D = edoNormalMulti< EOT > >
00064 class edoNormalMultiCenter : public edoModifierMass<D>
00065 {
00066 public:
00067 typedef typename EOT::AtomType AtomType;
00068 typedef typename D::Vector Vector;
00069
00070 void operator() ( edoNormalMulti< EOT >& distrib, EOT& mass )
00071 {
00072 assert( distrib.size() == mass.innerSize() );
00073 Vector mean( distrib.size() );
00074 for( unsigned int i=0; i < distrib.size(); i++ ) {
00075 mean(i) = mass[i];
00076 }
00077 distrib.mean() = mean;
00078 }
00079 };
00080
00081 #endif // WITH_EIGEN
00082 #endif // WITH_BOOST
00083
00084
00085 #endif // !_edoNormalMultiCenter_h