File indexing completed on 2023-10-25 10:05:35
0001 #ifndef TrackingTools_GsfTools_MultiGaussianState_icc
0002 #define TrackingTools_GsfTools_MultiGaussianState_icc
0003 #include "TrackingTools/GsfTools/interface/MultiGaussianState.h"
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 template <unsigned int N>
0015 double MultiGaussianState<N>::weight() const {
0016 if (theCombinedStateUp2Date)
0017 return theCombinedState->weight();
0018
0019 double result(0.);
0020 for (typename SingleStateContainer::const_iterator ic = theComponents.begin(); ic != theComponents.end(); ic++)
0021 result += (**ic).weight();
0022 return result;
0023 }
0024
0025 template <unsigned int N>
0026 const typename MultiGaussianState<N>::Vector& MultiGaussianState<N>::mean() const {
0027 checkCombinedState();
0028 return theCombinedState->mean();
0029 }
0030
0031 template <unsigned int N>
0032 const typename MultiGaussianState<N>::Matrix& MultiGaussianState<N>::covariance() const {
0033 checkCombinedState();
0034 return theCombinedState->covariance();
0035 }
0036
0037 template <unsigned int N>
0038 const typename MultiGaussianState<N>::Matrix& MultiGaussianState<N>::weightMatrix() const {
0039 checkCombinedState();
0040 return theCombinedState->weightMatrix();
0041 }
0042
0043 template <unsigned int N>
0044 void MultiGaussianState<N>::checkCombinedState() const {
0045 if (theCombinedStateUp2Date)
0046 return;
0047 MultiGaussianStateCombiner<N> theCombiner;
0048 theCombinedState = theCombiner.combine(theComponents);
0049 theCombinedStateUp2Date = true;
0050
0051 }
0052
0053 template <unsigned int N>
0054 void MultiGaussianState<N>::setWeight(double newWeight) {
0055 double wgt = weight();
0056 if (wgt > DBL_MIN)
0057 rescaleWeight(newWeight / wgt);
0058 }
0059
0060 template <unsigned int N>
0061 void MultiGaussianState<N>::rescaleWeight(double scale) {
0062 for (typename std::vector<SingleState>::const_iterator ic = theComponents.begin(); ic != theComponents.end(); ic++)
0063 (**ic).rescaleWeight(scale);
0064 if (theCombinedStateUp2Date)
0065 theCombinedState->rescaleWeight(scale);
0066 }
0067 #endif