Horus Doc || C++ Reference || Class Overview   Pixels   Images   Detector   Geometry   Registry || Doxygen's quick Index  

HxExportExtraIdentMaskStdev.h

00001 /*
00002  *  Copyright (c) 2002, University of Amsterdam, The Netherlands.
00003  *  All rights reserved.
00004  *
00005  *  Author(s):
00006  *  Dennis Koelma (koelma@wins.uva.nl)
00007  *  Leon Todoran (todoran@science.uva.nl)
00008  *
00009  */
00010 
00011 #ifndef HxExportExtraIdentMaskStdev_h
00012 #define HxExportExtraIdentMaskStdev_h
00013 
00014 #include "HxClassName.h"
00015 #include "HxSizes.h"
00016 #include "HxCategories.h"
00017 #include "HxTagList.h"
00018 
00019 
00023 template<class ResultT, class ImValT, class ExtraValT>
00024 class HxExportExtraIdentMaskStdev
00025 {
00026 public:
00028     typedef HxTagTransInVar     TransVarianceCategory;
00029 
00031     typedef HxTag1Phase         PhaseCategory;
00032 
00033 
00035                         HxExportExtraIdentMaskStdev(HxTagList& tags);
00036 
00038                         ~HxExportExtraIdentMaskStdev();
00039 
00041     void                doIt(const ImValT& imV, const ExtraValT& extraV);
00042 
00044     static HxString     className();
00045 
00046 private:
00047     HxTagList&          _tags;
00048     ExtraValT           _maskVal;
00049     ResultT             _sum;
00050     ResultT             _sumSqr;
00051     HxScalarInt         _num;
00052     bool                _exportVariance;
00053 };
00054 
00055 template<class ResultT, class ImValT, class ExtraValT>
00056 
00057 HxExportExtraIdentMaskStdev<ResultT,ImValT,ExtraValT>::HxExportExtraIdentMaskStdev(HxTagList& tags) : _tags(tags)
00058 {
00059     _maskVal = HxGetTag<int>(tags, "maskVal");
00060     _exportVariance = HxGetTag(tags, "exportVariance",false);
00061     _sum = HxScalarInt(0);
00062     _sumSqr = HxScalarInt(0);
00063     _num = 0;
00064 }
00065 
00066 template<class ResultT, class ImValT, class ExtraValT>
00067 HxExportExtraIdentMaskStdev<ResultT,ImValT,ExtraValT>::~HxExportExtraIdentMaskStdev()
00068 {
00069     ResultT num = _num;
00070     ResultT num1 = _num - 1;
00071     ResultT result = (_num == 1) ? ResultT(HxScalarInt(0))
00072                                  : (_sumSqr - ((_sum * _sum) / num)) / (num1);
00073     if(!_exportVariance)
00074         result = result.sqrt();
00075     HxAddTag(_tags, "result", HxValue(result));
00076 }
00077 
00078 template<class ResultT, class ImValT, class ExtraValT>
00079 inline void
00080 
00081 HxExportExtraIdentMaskStdev<ResultT,ImValT,ExtraValT>    ::doIt(const ImValT& imV, const ExtraValT& extraV)
00082 {
00083     if (extraV == _maskVal) {
00084         _sum += imV;
00085         _sumSqr += imV * imV;
00086         _num += 1;
00087     }
00088 }
00089 
00090 template<class ResultT, class ImValT, class ExtraValT>
00091 inline HxString
00092 HxExportExtraIdentMaskStdev<ResultT,ImValT,ExtraValT>::className()
00093 {
00094     return HxString("identMaskStdev");
00095 }
00096 
00097 
00098 #endif

Generated on Tue Feb 3 14:18:34 2004 for C++Reference by doxygen1.2.12 written by Dimitri van Heesch, © 1997-2001