1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
|
/*=========================================================================
Program: Advanced Normalization Tools
Copyright (c) ConsortiumOfANTS. All rights reserved.
See accompanying COPYING.txt or
https://github.com/stnava/ANTs/blob/master/ANTSCopyright.txt
for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#ifndef __antsBoxPlotQuantileListSampleFilter_h
#define __antsBoxPlotQuantileListSampleFilter_h
#include "antsListSampleToListSampleFilter.h"
#include <vector>
namespace itk
{
namespace ants
{
namespace Statistics
{
/** \class BoxPlotQuantileListSampleFilter
* \brief Base class of filters intended to generate scalar samples from
* intensity samples.
*
*/
template <typename TScalarListSample>
class BoxPlotQuantileListSampleFilter final : public ListSampleToListSampleFilter<TScalarListSample, TScalarListSample>
{
public:
/**
* Standard class typedefs.
*/
typedef BoxPlotQuantileListSampleFilter Self;
typedef ListSampleToListSampleFilter<TScalarListSample, TScalarListSample> Superclass;
typedef SmartPointer<Self> Pointer;
typedef SmartPointer<const Self> ConstPointer;
/**
* Standard macros
*/
itkTypeMacro(BoxPlotQuantileListSampleFilter, ListSampleToScalarListSampleFilter);
/**
* Method for creation through the object factory.
*/
itkNewMacro(Self);
/**
* Conveneient typedefs
*/
typedef double RealType;
typedef TScalarListSample ScalarListSampleType;
typedef typename ScalarListSampleType ::MeasurementVectorType MeasurementVectorType;
typedef typename ScalarListSampleType ::InstanceIdentifier InstanceIdentifierType;
typedef std::vector<InstanceIdentifierType> InstanceIdentifierContainerType;
enum OutlierHandlingType
{
None,
Trim,
Winsorize
};
itkSetMacro(OutlierHandling, OutlierHandlingType);
itkGetConstMacro(OutlierHandling, OutlierHandlingType);
itkSetMacro(WhiskerScalingFactor, RealType);
itkGetConstMacro(WhiskerScalingFactor, RealType);
itkSetClampMacro(UpperPercentile, RealType, 0, 1);
itkGetConstMacro(UpperPercentile, RealType);
itkSetClampMacro(LowerPercentile, RealType, 0, 1);
itkGetConstMacro(LowerPercentile, RealType);
InstanceIdentifierContainerType
GetOutlierInstanceIdentifiers()
{
return this->m_OutlierInstanceIdentifiers;
}
// itkGetConstMacro( Outliers, InstanceIdentifierContainerType );
protected:
BoxPlotQuantileListSampleFilter();
~BoxPlotQuantileListSampleFilter() override;
void
PrintSelf(std::ostream & os, Indent indent) const override;
void
GenerateData() override;
private:
BoxPlotQuantileListSampleFilter(const Self &); // purposely not implemented
void
operator=(const Self &); // purposely not implemented
InstanceIdentifierType FindMaximumNonOutlierDeviationValue(RealType, RealType);
bool
IsMeasurementAnOutlier(RealType, RealType, RealType, unsigned long);
OutlierHandlingType m_OutlierHandling;
InstanceIdentifierContainerType m_OutlierInstanceIdentifiers;
RealType m_WhiskerScalingFactor;
RealType m_LowerPercentile;
RealType m_UpperPercentile;
}; // end of class
} // end of namespace Statistics
} // namespace ants
} // end of namespace itk
#ifndef ITK_MANUAL_INSTANTIATION
# include "antsBoxPlotQuantileListSampleFilter.hxx"
#endif
#endif
|