36 {
return static_cast<const DistribType&
>(
70 inline bool isRoughlySymmetrical(
bool mustbearound0=
false)
const;
73 inline void getCurve(SetType& xvals,SetType& yvals,
74 bool limitspikes=
false)
const;
77 inline void getAvgStdRMS(PosType&,PosType&,PosType&)
const;
102 inline void normalise(
bool in_the_math_sense=
true);
104 inline bool deSpike(VT ratioaboverg=VT(0.4));
119 template <
class VT>
inline 123 const IdxType sz = distrib_.data_.size();
127 const VT divby = in_the_math_sense ? distrib_.cumdata_[sz-1]
129 if ( divby == VT(0) || divby == VT(1) )
132 for (
IdxType idx=0; idx<sz; idx++ )
134 distrib_.data_[idx] /= divby;
135 distrib_.setCumData( idx );
138 if ( in_the_math_sense )
139 distrib_.cumdata_[sz-1] = VT(1);
146 template <
class VT>
inline 150 const int sz = distrib_.data_.size();
154 VT maxval = distrib_.data_[0];
155 VT runnerupval = maxval;
159 for (
int idx=1; idx<sz; idx++ )
161 const VT val = distrib_.data_[idx];
164 else if ( val > maxval )
166 runnerupval = maxval;
172 const VT unspikedvalrg = runnerupval - minval;
173 const VT spikelimit = minval + VT(1+cutoff) * unspikedvalrg;
174 if ( maxval > spikelimit )
176 distrib_.data_[idxatmax] = spikelimit;
185 template <
class VT>
inline 187 bool onlyaround0 )
const 190 IdxType maxidx; distrib_.gtMax( &maxidx );
191 PosType medpos = distrib_.medianPosition();
192 PosType diff = medpos - distrib_.sampling_.atIndex( maxidx );
195 if ( diff < distrib_.sampling_.step )
199 if ( medpos > -distrib_.sampling_.step
200 && medpos < distrib_.sampling_.step )
208 template <
class VT>
inline 210 bool limitspikes )
const 219 xvals, yvals,
false );
224 while ( iter.
next() )
227 yvals += iter.
value();
233 template <
class VT>
inline 238 xrg.
start = distrib_.sampling_.start;
239 const IdxType sz = distrib_.data_.size();
247 xrg.
stop = distrib_.sampling_.atIndex( sz-1 );
248 yrg.
start = yrg.
stop = distrib_.data_[0];
249 for (
IdxType idx=1; idx<sz; idx++ )
251 const VT val = distrib_.data_[idx];
252 if ( val > yrg.
stop )
254 else if ( val < yrg.
start )
261 template <
class VT>
inline 266 const int sz = distrib_.data_.size();
268 { avg = rms = stdev =
PosType(0);
return; }
269 avg = rms = distrib_.data_[0]; stdev =
PosType(0);
277 VT sum_x, sum_xx, sum_w, sum_wx, sum_wxx;
278 sum_x = sum_xx = sum_w = sum_wx = sum_wxx = VT(0);
280 for (
IdxType idx=0; idx<sz; idx++ )
282 const VT x = distrib_.sampling_.atIndex( idx );
283 const VT wt = distrib_.data_[idx];
284 sum_x += x; sum_xx += x * x;
285 sum_w += wt; sum_wx += wt * x; sum_wxx += wt * x * x;
291 avg = sum_wx / sum_w;
293 const VT var = (sum_wxx - (sum_wx * sum_wx / sum_w))
294 / ( ((sz-1) * sum_w) / sz );
295 stdev = var > VT(0) ?
Math::Sqrt( var ) : VT(0);
299 template <
class VT>
inline 308 template <
class VT>
inline 314 distrib_.cumdata_.setSize( distrib_.data_.size() );
315 for (
int idx=0; idx<distrib_.cumdata_.size(); idx++ )
316 distrib_.setCumData( idx );
void normalise(bool in_the_math_sense=true)
if !math, sets max to 1
Definition: datadistributiontools.h:120
short IdxType
Definition: seisblocksdata.h:39
#define mLockMonitorable4Write(obj)
Definition: monitor.h:47
size_type IdxType
Definition: datadistribution.h:51
#define mSendMonitorableEntireObjChgNotif(obj)
Definition: monitor.h:55
void usePar(const IOPar &iop, ODPolygon< T > &poly, const char *inpkey)
Definition: polygon.h:200
#define mLockMonitorable4Read(obj)
Definition: monitor.h:45
Definition: datadistribution.h:20
SetType data_
Definition: datadistribution.h:104
base class for const Monitorable iterator.
Definition: monitoriter.h:83
bool get(const char *, int &) const
DistribType::PosType PosType
Definition: datadistributiontools.h:95
DataDistributionIter(const DataDistributionIter &oth)
Definition: datadistributiontools.h:33
PosType position() const
Definition: datadistributiontools.h:46
static ChangeType cDataChange()
Definition: datadistribution.h:93
Interval of values.
Definition: commontypes.h:27
VT cumValue() const
Definition: datadistributiontools.h:43
static IDType cUnspecChgID()
Definition: monitorable.h:108
DataDistributionChanger(DistribType &d)
Definition: datadistributiontools.h:99
DataDistributionIter(const DistribType &d)
Definition: datadistributiontools.h:31
Generalized set of parameters of the keyword-value type.
Definition: iopar.h:53
SetType cumdata_
Definition: datadistribution.h:105
DistribType::PosType PosType
Definition: datadistributiontools.h:28
bool isValid() const
Definition: monitoriter.h:51
#define mUdf(type)
Use this macro to get the undefined for simple types.
Definition: undefval.h:270
void setEmpty()
Definition: odset.h:44
FixedString Sampling()
Definition: keystrs.h:108
DataDistribution< VT > DistribType
Definition: datadistributiontools.h:27
Definition: datadistribution.h:18
#define mDefNoAssignmentOper(clss)
Definition: commondefs.h:131
bool isValid() const
Definition: datadistributiontools.h:39
DistribType::ValueType ValueType
Definition: datadistributiontools.h:96
void fillPar(IOPar &iop, const ODPolygon< T > &poly, const char *inpkey)
Definition: polygon.h:187
DistribType & distrib_
Definition: datadistributiontools.h:113
DistribType::IdxType IdxType
Definition: datadistributiontools.h:94
T stop
Definition: ranges.h:91
const Monitorable & monitored() const
Definition: monitoriter.h:43
FixedString Data()
Definition: keystrs.h:50
#define mSendMonitorableChgNotif(obj, typ, id)
Definition: monitor.h:53
DistribType::IdxType IdxType
Definition: datadistributiontools.h:29
T start
Definition: ranges.h:90
DistribType::SetType SetType
Definition: datadistributiontools.h:97
Sharable data distribution. Sampling defaults to 0 step 1.
Definition: datadistribution.h:42
base class for Monitorable iterators. Inherit from one of its subclasses.
Definition: monitoriter.h:31
float PosType
Definition: coltab.h:24
DataDistribution< VT > DistribType
Definition: datadistributiontools.h:93
#define mClass(module)
Definition: commondefs.h:161
void set(const char *ky, const char *val)
const DistribType & distrib() const
Definition: datadistributiontools.h:35
VT value() const
Definition: datadistributiontools.h:40
DataValueType PosType
Definition: datadistribution.h:47
VT ValueType
Definition: datadistribution.h:48
IdxType curidx_
Definition: monitoriter.h:67
void usePar(const IOPar &)
Definition: datadistributiontools.h:309
bool deSpike(VT ratioaboverg=VT(0.4))
Definition: datadistributiontools.h:147
MonitorableIterBase< typename DataDistribution< VT >::IdxType > base_type
Definition: datadistributiontools.h:26