Xmipp  v3.23.11-Nereus
Public Member Functions | Public Attributes | Friends | List of all members
IrregularHistogram1D Class Reference

#include <histogram.h>

Collaboration diagram for IrregularHistogram1D:
Collaboration graph
[legend]

Public Member Functions

void init (const Histogram1D &oldHistogram, const MultidimArray< int > &bins)
 Initialize class. More...
 
int val2Index (double value) const
 Return the index corresponding to a certain value. More...
 
void selfNormalize ()
 Normalize to be a probability density function. More...
 
double operator() (int i) const
 Get value. More...
 
const Histogram1DgetHistogram () const
 Get histogram. More...
 

Public Attributes

Histogram1D __hist
 
MultidimArray< double > __binsRightLimits
 

Friends

std::ostream & operator<< (std::ostream &_out, const IrregularHistogram1D &_h)
 Show. More...
 

Detailed Description

Irregular histogram.

This class is initialized with a regular histogram and a set of bins. The class builds a new histogram in which the values within bins of the original histogram are gathered. The class provides the standard operations with histograms.

Definition at line 386 of file histogram.h.

Member Function Documentation

◆ getHistogram()

const Histogram1D & IrregularHistogram1D::getHistogram ( ) const

Get histogram.

Definition at line 467 of file histogram.cpp.

468 {
469  return __hist;
470 }
Histogram1D __hist
Definition: histogram.h:389

◆ init()

void IrregularHistogram1D::init ( const Histogram1D oldHistogram,
const MultidimArray< int > &  bins 
)

Initialize class.

Definition at line 393 of file histogram.cpp.

395 {
396  int steps_no = XSIZE(bins);
397  __binsRightLimits.initZeros(steps_no);
398  __hist.initZeros(steps_no);
399 
400  int k = 0;
401  for (int i = 0; i < steps_no; ++i)
402  {
403  hist.index2val(A1D_ELEM(bins,i), A1D_ELEM(__binsRightLimits,i));
404  for (int j = k; j <= A1D_ELEM(bins,i); ++j)
405  A1D_ELEM(__hist,i) += A1D_ELEM(hist,j);
406  k = A1D_ELEM(bins,i) + 1;
407  }
408 }
#define A1D_ELEM(v, i)
#define i
ql0001_ & k(htemp+1),(cvec+1),(atemp+1),(bj+1),(bl+1),(bu+1),(x+1),(clamda+1), &iout, infoqp, &zero,(w+1), &lenw,(iw+1), &leniw, &glob_grd.epsmac
#define XSIZE(v)
MultidimArray< double > __binsRightLimits
Definition: histogram.h:390
#define j
void initZeros(const MultidimArray< T1 > &op)
Histogram1D __hist
Definition: histogram.h:389

◆ operator()()

double IrregularHistogram1D::operator() ( int  i) const
inline

Get value.

Definition at line 406 of file histogram.h.

407  {
408  return DIRECT_A1D_ELEM(__hist,i);
409  }
#define i
#define DIRECT_A1D_ELEM(v, i)
Histogram1D __hist
Definition: histogram.h:389

◆ selfNormalize()

void IrregularHistogram1D::selfNormalize ( )

Normalize to be a probability density function.

Definition at line 451 of file histogram.cpp.

452 {
453  __hist *= 1.0/__hist.sum();
454 }
double sum() const
Histogram1D __hist
Definition: histogram.h:389

◆ val2Index()

int IrregularHistogram1D::val2Index ( double  value) const

Return the index corresponding to a certain value.

Definition at line 411 of file histogram.cpp.

412 {
413  int binsNo = XSIZE(__binsRightLimits);
414  /* Binary search is not interesting for small vectors
415  * However, we leave the code, just in case it is needed in the future
416  int ileft=1, iright=binsNo-1;
417  int iret=0;
418  if (value<=DIRECT_A1D_ELEM(__binsRightLimits,0))
419  return =0;
420  else if (value>DIRECT_A1D_ELEM(__binsRightLimits,iright))
421  return iright;
422  else
423  do
424  {
425  iret = (iright+ileft)/2;
426  if (value>DIRECT_A1D_ELEM(__binsRightLimits,iret))
427  ileft=iret+1;
428  else
429  iright=iret;
430  if (value>DIRECT_A1D_ELEM(__binsRightLimits,iret-1) &&
431  value<=DIRECT_A1D_ELEM(__binsRightLimits,iret))
432  break;
433  else if (ileft == iright)
434  {
435  iret=ileft;
436  break;
437  }
438  }
439  while (true);
440  */
441 
442  for (int i = 0; i < binsNo; ++i)
443  if (value <= DIRECT_A1D_ELEM(__binsRightLimits,i))
444  return i;
445 
446  //In case the value is greater, we return the last bin
447  return binsNo - 1;
448 }
#define i
#define DIRECT_A1D_ELEM(v, i)
#define XSIZE(v)
MultidimArray< double > __binsRightLimits
Definition: histogram.h:390

Friends And Related Function Documentation

◆ operator<<

std::ostream& operator<< ( std::ostream &  _out,
const IrregularHistogram1D _h 
)
friend

Show.

Definition at line 457 of file histogram.cpp.

459 {
460  for (size_t i = 0; i < XSIZE(_hist.__binsRightLimits); i++)
461  _out << "\t" << _hist.__binsRightLimits(i) << "\t\t" << _hist.__hist(i)
462  << std::endl;
463  return _out;
464 }
#define i
#define XSIZE(v)

Member Data Documentation

◆ __binsRightLimits

MultidimArray<double> IrregularHistogram1D::__binsRightLimits

Definition at line 390 of file histogram.h.

◆ __hist

Histogram1D IrregularHistogram1D::__hist

Definition at line 389 of file histogram.h.


The documentation for this class was generated from the following files: