Files
geant4/source/analysis/include/tools/hbook/h2
T
2016-06-09 17:01:34 +02:00

203 lines
4.3 KiB
Plaintext

// Copyright (C) 2010, Guy Barrand. All rights reserved.
// See the file tools.license for terms.
#ifndef tools_hbook_h2
#define tools_hbook_h2
#include "base_histo"
namespace tools {
namespace hbook {
class h2 : public base_histo {
public:
h2(int aID,const std::string& aTitle,
int aXnumber,rarg aXmin,rarg aXmax,
int aYnumber,rarg aYmin,rarg aYmax)
:base_histo(aID)
,m_axis_x(m_path,aID,2,true,true)
,m_axis_y(m_path,aID,2,false,true)
{
//m_axis_x.copy(fHistogram.getAxis(0));
//m_axis_y.copy(fHistogram.getAxis(1));
cd_beg();
CHBOOK2(m_id,aTitle,aXnumber,aXmin,aXmax,
aYnumber,aYmin,aYmax);
cd_end();
}
virtual ~h2(){
cd_beg();
CHDELET(m_id);
cd_end();
}
private:
h2(const h2& a_from)
:base_histo(a_from)
,m_axis_x(a_from.m_axis_x)
,m_axis_y(a_from.m_axis_y)
{}
h2& operator=(const h2& a_from){
base_histo::operator=(a_from);
m_axis_x = a_from.m_axis_x;
m_axis_y = a_from.m_axis_y;
return *this;
}
public:
bool configure(int aXnumber,rarg aXmin,rarg aXmax,
int aYnumber,rarg aYmin,rarg aYmax){
cd_beg();
CHBOOK2(m_id,title(),aXnumber,aXmin,aXmax,aYnumber,aYmin,aYmax);
cd_end();
return true;
}
public:
void fill(rarg aX,rarg aY,rarg aWeight = 1) {
cd_beg();
CHFILL(m_id,aX,aY,aWeight);
cd_end();
}
// optimization :
void fill_beg() const {cd_beg();}
void fill_fast(rarg aX,rarg aY,rarg aWeight = 1) {
CHFILL(m_id,aX,aY,aWeight);
}
void fill_end() const {cd_end();}
int dimension() const {return 2;}
rret mean_x() const {
cd_beg();
rret v = CHSTATI(m_id,1,"PROX",0);
cd_end();
return v;
}
rret mean_y() const{
cd_beg();
rret v = CHSTATI(m_id,1,"PROY",0);
cd_end();
return v;
}
rret rms_x() const {
cd_beg();
rret v = CHSTATI(m_id,2,"PROX",0);
cd_end();
return v;
}
rret rms_y() const {
cd_beg();
rret v = CHSTATI(m_id,2,"PROY",0);
cd_end();
return v;
}
const hbook::axis& axis_x() const {return m_axis_x;}
hbook::axis& axis_x() {return m_axis_x;}
const hbook::axis& axis_y() const {return m_axis_y;}
hbook::axis& axis_y() {return m_axis_y;}
int coord_to_index_x(rarg aCoordX) const {
return m_axis_x.coord_to_index(aCoordX);
}
int coord_to_index_y(rarg aCoordY) const {
return m_axis_y.coord_to_index(aCoordY);
}
rret min_bin_height() const {
cd_beg();
rret v = CHMIN(m_id);
cd_end();
return v;
}
rret max_bin_height() const {
cd_beg();
rret v = CHMAX(m_id);
cd_end();
return v;
}
rret bin_height(int aIndexX,int aIndexY) const {
cd_beg();
rret v = CHIJ(m_id,hindex(aIndexX,axis_x()),hindex(aIndexY,axis_y()));
cd_end();
return v;
}
rret sum_bin_heights() const {
int NX = axis_x().bins();
int NY = axis_y().bins();
rret w = 0;
cd_beg();
for(int i=1;i<=NX;i++) {
for(int j=1;j<=NY;j++) {
w += CHIJ(m_id,i,j);
}
}
cd_end();
return w;
}
rret sum_all_bin_heights() const {
int NX1 = axis_x().bins()+1;
int NY1 = axis_y().bins()+1;
rret w = 0;
cd_beg();
for(int i=0;i<=NX1;i++) {
for(int j=0;j<=NY1;j++) {
w += CHIJ(m_id,i,j);
}
}
cd_end();
return w;
}
rret sum_extra_bin_heights() const {
int NX = axis_x().bins();
int NY = axis_y().bins();
int NX1 = NX+1;
int NY1 = NY+1;
rret w = 0;
cd_beg();
{for(int j=0;j<=NY1;j++) {
w += CHIJ(m_id,0,j);
}}
for(int i=1;i<=NX;i++) {
w += CHIJ(m_id,i,0);
w += CHIJ(m_id,i,NY1);
}
{for(int j=0;j<=NY1;j++) {
w += CHIJ(m_id,NX1,j);
}}
cd_end();
return w;
}
rret bin_error(int aIndexX,int aIndexY) const {
cd_beg();
rret v = CHIJE(m_id,aIndexX+1,aIndexY+1);
cd_end();
return v;
}
rret bin_height_x(int aIndexX) const {
int i = hindex(aIndexX,axis_x());
int NY1 = axis_y().bins()+1;
rret w = 0;
cd_beg();
for(int j=0;j<=NY1;j++) {
w += CHIJ(m_id,i,j);
}
cd_end();
return w;
}
rret bin_height_y(int aIndexY) const {
int j = hindex(aIndexY,axis_y());
int NX1 = axis_x().bins()+1;
rret w = 0;
cd_beg();
for(int i=0;i<=NX1;i++) {
w += CHIJ(m_id,i,j);
}
cd_end();
return w;
}
protected:
hbook::axis m_axis_x;
hbook::axis m_axis_y;
};
}}
#endif