00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef HxExportExtraIdentMaskMean_h
00011 #define HxExportExtraIdentMaskMean_h
00012
00013 #include "HxClassName.h"
00014 #include "HxSizes.h"
00015 #include "HxCategories.h"
00016 #include "HxTagList.h"
00017
00018
00022 template<class ResultT, class ImValT, class ExtraValT>
00023 class HxExportExtraIdentMaskMean
00024 {
00025 public:
00027 typedef HxTagTransInVar TransVarianceCategory;
00028
00030 typedef HxTag1Phase PhaseCategory;
00031
00032
00034 HxExportExtraIdentMaskMean(HxTagList& tags);
00035
00037 ~HxExportExtraIdentMaskMean();
00038
00040 void doIt(const ImValT& imV, const ExtraValT& extraV);
00041
00043 static HxString className();
00044
00045 private:
00046 HxTagList& _tags;
00047 ExtraValT _maskVal;
00048 ResultT _result;
00049 HxScalarInt _num;
00050 };
00051
00052 template<class ResultT, class ImValT, class ExtraValT>
00053
00054 HxExportExtraIdentMaskMean<ResultT,ImValT,ExtraValT>::HxExportExtraIdentMaskMean(HxTagList& tags) : _tags(tags)
00055 {
00056 _maskVal = HxGetTag<int>(tags, "maskVal");
00057 _result = HxScalarInt(0);
00058 _num = 0;
00059 }
00060
00061 template<class ResultT, class ImValT, class ExtraValT>
00062 HxExportExtraIdentMaskMean<ResultT,ImValT,ExtraValT>::~HxExportExtraIdentMaskMean()
00063 {
00064 _result = _result / (ResultT) _num;
00065 HxAddTag(_tags, "result", HxValue(_result));
00066 }
00067
00068 template<class ResultT, class ImValT, class ExtraValT>
00069 inline void
00070 HxExportExtraIdentMaskMean<ResultT,ImValT,ExtraValT>::doIt(const ImValT& imV,
00071 const ExtraValT& extraV)
00072 {
00073 if (extraV == _maskVal) {
00074 _result += imV;
00075 _num += 1;
00076 }
00077 }
00078
00079 template<class ResultT, class ImValT, class ExtraValT>
00080 inline HxString
00081 HxExportExtraIdentMaskMean<ResultT,ImValT,ExtraValT>::className()
00082 {
00083 return HxString("identMaskMean");
00084 }
00085
00086
00087 #endif