 |
OpendTect
6.6
|
Go to the documentation of this file.
46 : sampling_(VT(0),VT(1)) {}
54 inline int size()
const;
55 inline bool isEmpty()
const {
return size() < 1; }
56 inline void setEmpty();
58 sampling_,cSamplingChange());
61 inline VT get(
int,
bool cumulative=
false)
const;
62 inline VT operator[](
int)
const;
63 inline VT binPos(
int)
const;
64 inline VT valueAt(VT,
bool cumulative)
const;
65 inline int getBinNr(VT)
const;
67 {
mLock4Read();
return cum ? cumdata_ : data_; }
69 inline void set(
int,VT);
70 inline void set(
const VT*);
71 inline void add(
const VT*);
74 {
return sumOfValues() == VT(1); }
75 inline VT sumOfValues()
const;
76 inline VT maxValue()
const;
79 inline VT positionForCumulative(VT)
const;
80 inline VT medianPosition()
const;
81 inline void getAvgStd(VT& avg,VT&
std)
const;
83 {
return cum ? cumdata_.arr() : data_.arr(); }
101 void setCumData(
int);
102 inline VT gtMax(
int* idxat=0)
const;
113 template <
class VT>
inline
117 , cumdata_(oth.cumdata_)
118 , sampling_(oth.sampling_)
123 template <
class VT>
inline
127 , sampling_(VT(0),VT(1))
132 template <
class VT>
inline
141 template <
class VT>
inline
144 , cumdata_(d.size(),0)
145 , sampling_(VT(0),VT(1))
151 template <
class VT>
inline
154 , cumdata_(d.size(),0)
161 template <
class VT>
inline
172 template <
class VT>
inline
181 template <
class VT>
inline
192 template <
class VT>
inline
200 template <
class VT>
inline
210 ret = (int)( fbin + 0.5f );
218 template <
class VT>
inline
222 return getBinNrFor( p, sampling_, data_.size() );
226 template <
class VT>
inline
229 return get( idx,
false );
233 template <
class VT>
inline
237 return cumulative ? cumdata_[idx] : data_[idx];
241 template <
class VT>
inline
245 return sampling_.atIndex( idx );
249 template <
class VT>
inline
253 const TypeSet<VT>& vals = cumulative ? cumdata_ : data_;
254 const int sz = vals.size();
258 VT fidx = sampling_.getfIndex( pos );
261 else if ( fidx > vals.size()-0.5f )
262 fidx = vals.size()-0.5f;
266 const int aftidx =
getLimited( ((
int)fidx + 1), 0, sz );
267 const int beforeidx = aftidx - 1;
269 const VT valbefore = beforeidx<0 ? (cumulative?VT(0):vals[0])
271 const VT valafter = aftidx>sz-2 ? vals.last() : vals[ aftidx ] ;
272 const VT relpos = (fidx - beforeidx);
273 return valbefore + (valafter-valbefore) * relpos;
277 template <
class VT>
inline
281 if ( data_.isEmpty() )
291 template <
class VT>
inline
295 if ( !data_.validIdx(isamp) || data_[isamp] == val )
297 if ( !
mLock2Write() && (isamp>=data_.size() || data_[isamp] == val) )
300 const VT diff = val - data_[isamp];
302 const int sz = data_.size();
303 for (
int idx=isamp+1; idx<sz; idx++ )
309 template <
class VT>
inline
313 const int sz = data_.size();
314 VT add2cumulative = 0;
315 for (
int idx=0; idx<sz; idx++ )
317 add2cumulative += vals[idx];
318 data_[idx] += vals[idx];
319 cumdata_[idx] += add2cumulative;
326 template <
class VT>
inline
329 cumdata_[idx] = data_[idx] + (idx<1 ? VT(0) : cumdata_[idx-1]);
333 template <
class VT>
inline
337 const int sz = data_.size();
338 for (
int idx=0; idx<sz; idx++ )
340 data_[idx] = vals[idx];
348 template <
class VT>
inline
352 return cumdata_.last();
356 template <
class VT>
inline
364 template <
class VT>
inline
368 const VT hstep = sampling_.step * VT(0.5);
370 sampling_.atIndex(data_.size()-1) + hstep );
374 template <
class VT>
inline
377 const int sz = data_.size();
382 return sz == 1 ? data_[0] : VT(0);
385 for (
int idx=1; idx<sz; idx++ )
387 const VT val = data_[idx];
400 template <
class VT>
inline
407 const int sz = cumdata_.size();
409 return sz == 1 ? sampling_.start :
mUdf(VT);
410 else if ( val <= VT(0) )
411 return sampling_.start - VT(0.5) * sampling_.step;
412 else if ( val >= cumdata_.last() )
413 return sampling_.start + VT(sz-0.5) * sampling_.step;
419 if ( val < cumdata_[sz/2] )
421 for (
int idx=0; idx<sz; idx++ )
423 const VT nextval = cumdata_[idx];
424 if ( val <= nextval )
426 VT prevpos = sampling_.start + VT(idx-0.5)
428 if ( val == nextval )
429 return prevpos + sampling_.step;
431 const VT prevval = idx ? cumdata_[idx-1] : VT(0);
432 const VT relpos = (val - prevval) / (nextval - prevval);
433 return prevpos + sampling_.step * relpos;
439 for (
int idx=sz-1; idx>0; idx-- )
441 const VT prevval = cumdata_[idx-1];
442 if ( val >= prevval )
444 VT prevpos = sampling_.start + VT(idx-0.5)
446 if ( prevval == val )
449 const VT nextval = cumdata_[idx];
450 const VT relpos = (val - prevval) / (nextval - prevval);
451 return prevpos + sampling_.step * relpos;
461 template <
class VT>
inline
465 if ( cumdata_.size() < 2 )
466 return sampling_.start;
468 return positionForCumulative( cumdata_.last() * VT(0.5) );
472 template <
class VT>
inline
476 const auto sz = cumdata_.size();
478 { avg = sampling_.start;
std = (VT)0;
return; }
481 for (
auto idx=0; idx<sz; idx++ )
482 wtsum += data_[idx] * sampling_.atIndex( idx );
483 avg = wtsum / cumdata_[sz-1];
485 VT sumsqdiffs = (VT)0;
486 for (
auto idx=0; idx<sz; idx++ )
488 const auto diff = sampling_.atIndex(idx) - avg;
489 sumsqdiffs += data_[idx] * diff * diff;
495 template <
class VT>
inline
TypeSet< VT > cumdata_
Definition: datadistribution.h:98
VT get(int, bool cumulative=false) const
Definition: datadistribution.h:234
TypeSet< VT > data_
Definition: datadistribution.h:97
Sharable data distribution. Sampling defaults to 0 step 1.
Definition: datadistribution.h:43
DataDistribution()
Definition: datadistribution.h:45
VT * getArr(bool cum) const
for fast non-shared usage
Definition: datadistribution.h:82
DataDistribution< float > FloatDistrib
Definition: datadistribution.h:110
#define mIsUdf(val)
Use mIsUdf to check for undefinedness of simple types.
Definition: undefval.h:289
static ChangeType cDataChange()
Definition: datadistribution.h:86
mDeclMonitorableAssignment(DataDistribution)
VT sumOfValues() const
Definition: datadistribution.h:349
void getAvgStd(VT &avg, VT &std) const
Definition: datadistribution.h:473
Definition: datadistribution.h:18
VT positionForCumulative(VT) const
Definition: datadistribution.h:401
T getLimited(T v, T min, T max)
Definition: commondefs.h:42
static const DataDistribution< VT > & getEmptyDistrib()
Definition: datadistribution.h:496
Definition: sharedobject.h:20
#define mStartMonitorableCompare()
Helper macro to easily implement your compareClassData() in standard situations.
Definition: monitor.h:244
VT gtMax(int *idxat=0) const
Definition: datadistribution.h:375
int ChangeType
Definition: monitoredobject.h:84
void setEmpty()
Definition: datadistribution.h:278
#define mLock2Write()
Definition: monitor.h:71
void set(int, VT)
slow, O(N)
Definition: datadistribution.h:292
bool isEmpty() const
Definition: datadistribution.h:55
static int getBinNrFor(VT, const SamplingData< VT > &, int nrbins)
Definition: datadistribution.h:201
int size() const
Definition: datadistribution.h:193
int getBinNr(VT) const
Definition: datadistribution.h:219
#define mClass(module)
Definition: commondefs.h:181
#define mLock4Write()
Definition: monitor.h:70
#define mSendChgNotif(typ, id)
Definition: monitor.h:75
VT operator[](int) const
Definition: datadistribution.h:227
void add(const VT *)
fast, no checks
Definition: datadistribution.h:310
float getfIndex(FT) const
Definition: samplingdata.h:126
void setCumData(int)
Definition: datadistribution.h:327
bool isNormalised() const
Definition: datadistribution.h:73
#define mDeliverMonitorableCompare()
Definition: monitor.h:264
mGenImplMonitorableAssignment(template< class VT > inline, DataDistribution< VT >, SharedObject)
void set(T &_to, const F &fr)
template based type conversion
Definition: convert.h:27
SamplingData< VT > sampling_
Definition: datadistribution.h:99
Interval< VT > dataRange() const
Definition: datadistribution.h:365
#define mHandleMonitorableCompare(memb, val)
Definition: monitor.h:246
VT medianPosition() const
Definition: datadistribution.h:462
VT maxValue() const
Definition: datadistribution.h:357
void copyClassData(const SharedObject &)
VT binPos(int) const
Definition: datadistribution.h:242
Definition: fixedstreambuf.h:20
mImplSimpleMonitoredGetSet(inline, sampling, setSampling, SamplingData< VT >, sampling_, cSamplingChange())
Definition: datadistribution.h:20
ChangeType compareClassData(const SharedObject &) const
#define mUdf(type)
Use this macro to get the undefined for simple types.
Definition: undefval.h:274
VT valueAt(VT, bool cumulative) const
Definition: datadistribution.h:250
#define mDefineStaticLocalObject(type, var, init)
Definition: commondefs.h:203
static ChangeType cSamplingChange()
Definition: datadistribution.h:87
#define mSendEntireObjChgNotif()
Definition: monitor.h:76
Interval of values.
Definition: commontypes.h:30
~DataDistribution()
Definition: datadistribution.h:162
TypeSet< VT > getSet(bool cum) const
Definition: datadistribution.h:66
#define mLock4Read()
Definition: monitor.h:69
Generated at
for the OpendTect
seismic interpretation project.
Copyright (C): dGB Beheer B.V. 1995-2021