Skip to content

Commit

Permalink
test?
Browse files Browse the repository at this point in the history
  • Loading branch information
VanyaBelyaev committed Mar 28, 2024
1 parent c015a2a commit 0671c42
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 7 deletions.
92 changes: 86 additions & 6 deletions source/include/Ostap/Moments.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@
#include <array>
#include <type_traits>
// ============================================================================
// ROOT
// ============================================================================
#include "RVersion.h"
// ============================================================================
// Ostap
// ============================================================================
#include "Ostap/Choose.h"
Expand Down Expand Up @@ -140,6 +144,34 @@ namespace Ostap
inline long double M ( const unsigned short k ) const
{ return k > N ? 0.0L : k == N ? this->m_M : this->m_prev.M( k ) ; }
// ======================================================================
public:
// ======================================================================
void swap ( Moment_& right )
{
m_prev.swap ( right.m_prev ) ;
std::swap ( m_M , right.m_M ) ;
}
// ======================================================================
public:
// ======================================================================
/** get the central moment of order N
*/
template <unsigned int K,
typename std::enable_if<(N<2*K)&&(K==N),int>::type = 0 >
double moment_ () const
{ return 0 == this->size() ? 0 : this->m_M / this->size () ; }
// =======================================================================
template <unsigned int K,
typename std::enable_if<(N<2*K)&&(K<N),int>::type = 0 >
double moment_ () const
{ return this->m_prev.template moment_<K> () ; }
// ======================================================================
template <unsigned int K,
typename std::enable_if<(2*K<=N),int>::type = 0 >
std::string moment_ () const
{ return "ququ" ; }

// =======================================================================
private:
// ======================================================================
/// counter of (N-1)th order
Expand Down Expand Up @@ -296,6 +328,11 @@ namespace Ostap
inline long double M ( const unsigned short k ) const
{ return 0 < k ? 0 : m_size ; }
// ======================================================================
public:
// ======================================================================
void swap ( Moment_& right )
{ std::swap ( m_size , right.m_size ) ; }
// ======================================================================
private:
// ======================================================================
unsigned long long m_size ;
Expand All @@ -316,7 +353,7 @@ namespace Ostap
// ======================================================================
enum _ { order = 1 } ;
// ======================================================================
public :
public:
// ======================================================================
/** get the value of the Nth moment
* \f[ \mu_N \equiv \frac{1}{N} \sum \left( x_i - \bar{x} \right)^N \f]
Expand Down Expand Up @@ -401,6 +438,14 @@ namespace Ostap
inline long double M ( const unsigned short k ) const
{ return 1 < k ? 0 : 1 == k ? 0 : this->m_prev. M ( k ) ; }
// ======================================================================
public:
// ======================================================================
void swap ( Moment_& right )
{
m_prev.swap ( right.m_prev ) ;
std::swap ( m_mu , right.m_mu ) ;
}
// ======================================================================
private:
// ======================================================================
Moment_<0> m_prev { } ;
Expand Down Expand Up @@ -429,7 +474,12 @@ namespace Ostap
inline Moment_<N> operator+ ( const double a , const Moment_<N>& b )
{ return b + a ; }
// ========================================================================

/// swap two counters
template <unsigned int N>
inline void swap ( Moment_<N>& a , Moment_<N>& b )
{ a.swap( b ) ; }
// ========================================================================

// ========================================================================
// Weighted moments
// ========================================================================
Expand Down Expand Up @@ -555,6 +605,14 @@ namespace Ostap
inline long double M ( const unsigned short k ) const
{ return k > N ? 0.0L : k == N ? this->m_M : this->m_prev.M( k ) ; }
// ======================================================================
public:
// ======================================================================
void swap ( WMoment_& right )
{
m_prev.swap ( right.m_prev ) ;
std::swap ( m_M , right.m_M ) ;
}
// ======================================================================
private:
// ======================================================================
/// counter of (N-1)th order
Expand Down Expand Up @@ -728,6 +786,15 @@ namespace Ostap
inline long double M ( const unsigned short k ) const
{ return 0 < k ? 0 : m_w ; }
// ======================================================================
public:
// ======================================================================
void swap ( WMoment_& right )
{
std::swap ( m_size , right.m_size ) ;
std::swap ( m_w , right.m_w ) ;
std::swap ( m_w2 , right.m_w2 ) ;
}
// ======================================================================
private:
// ======================================================================
/// number of entries
Expand Down Expand Up @@ -843,6 +910,14 @@ namespace Ostap
inline long double M ( const unsigned short k ) const
{ return 1 < k ? 0 : 1 == k ? 0 : this->m_prev. M ( k ) ; }
// ======================================================================
public:
// ======================================================================
void swap ( WMoment_& right )
{
m_prev.swap ( right.m_prev ) ;
std::swap ( m_mu , right.m_mu ) ;
}
// ======================================================================
private:
// ======================================================================
WMoment_<0> m_prev { } ;
Expand All @@ -862,7 +937,12 @@ namespace Ostap
{ WMoment_<N> r ( a ) ; r += b ; return r ; }

// ========================================================================
// Weighted moments
/// swap two counters
template <unsigned int N>
inline void swap ( WMoment_<N>& a , WMoment_<N>& b )
{ a.swap( b ) ; }
// ========================================================================

// ========================================================================

// ========================================================================
Expand Down Expand Up @@ -894,7 +974,7 @@ namespace Ostap
* @return the unbiased estimate (if number of entries exceeds 2) and
* <code>s_INVALID_MOMENT</code> otherwise
*/
template <unsigned short N, typename std::enable_if<(1<N),int>::type = 0 >
template <unsigned short N, typename std::enable_if<(2<=N),int>::type = 0 >
static inline double unbiased_2nd ( const Moment_<N>& m )
{
const unsigned long long n = m.size() ;
Expand All @@ -907,7 +987,7 @@ namespace Ostap
* @return the unbiased estimate (if number of entries exceeds 3) and
* <code>s_INVALID_MOMENT</code> otherwise
*/
template <unsigned short N, typename std::enable_if<(2<N),int>::type = 0 >
template <unsigned short N, typename std::enable_if<(3<=N),int>::type = 0 >
static inline double unbiased_3rd ( const Moment_<N>& m )
{
const unsigned long long n = m.size() ;
Expand All @@ -925,7 +1005,7 @@ namespace Ostap
* @return the unbiased estimate (if number of entries exceeds 4) and
* <code>s_INVALID_MOMENT</code> otherwise
*/
template <unsigned short N, typename std::enable_if<(3<N),int>::type = 0 >
template <unsigned short N, typename std::enable_if<(4<=N),int>::type = 0 >
static inline double unbiased_4th ( const Moment_<N>& m )
{
const unsigned long long n = m.size() ;
Expand Down
3 changes: 2 additions & 1 deletion source/src/dict/Ostap.hh
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,8 @@ namespace
// std::function<std::complex<double>(double)> __ff0 ;
// std::function<std::complex<double>(double,double)> __ff1 ;
// std::function<std::complex<double>(double,double,double)> __ff2 ;

//

};
// ==========================================================================
} // The end of anonymous namespace
Expand Down

0 comments on commit 0671c42

Please sign in to comment.