00001 #include "histogram3d.h"
00002 #include "message.h"
00003
00004
00005 CHistogram3d::CHistogram3d(int Nx,int Ny,int Nz,double Dx,double Dy,double Dz,double xO, double yO, double zO):
00006 CDataSet(Nx*Ny*Nz), CObject3d(), nx(Nx), ny(Ny), nz(Nz), dx(Dx), dy(Dy), dz(Dz),
00007 xoffset(xO), yoffset(yO), zoffset(zO) {
00008 ixzero=findBin(dx/2.,dx,xoffset);
00009 iyzero=findBin(dy/2.,dy,yoffset);
00010 izzero=findBin(dz/2.,dz,zoffset);
00011 }
00012
00013 CHistogram3d::CHistogram3d(const CHistogram3d& a):
00014 CDataSet(a), CObject3d(a),
00015 nx(a.nx),ny(a.ny),nz(a.nz),
00016 dx(a.dx),dy(a.dy),dz(a.dz),
00017 xoffset(a.xoffset),yoffset(a.yoffset),zoffset(a.zoffset),
00018 ixzero(a.ixzero),iyzero(a.iyzero),izzero(a.izzero){}
00019
00020
00021 void CHistogram3d::CopyState(const CHistogram3d& a){
00022 CDataSet::CopyState(a);
00023 CObject3d::CopyState(a);
00024 nx=a.nx;ny=a.ny;nz=a.nz;
00025 dx=a.dx;dy=a.dy;dz=a.dz;
00026 xoffset=a.xoffset;yoffset=a.yoffset;zoffset=a.zoffset;
00027 ixzero=a.ixzero;iyzero=a.iyzero;izzero=a.izzero;
00028 }
00029
00030
00031 bool CHistogram3d::inThisBin(int ix, int iy, int iz, double x, double y, double z) const{
00032 return whatBin(x,y,z)==whatIndex(ix,iy,iz);
00033 }
00034
00035 int CHistogram3d::whatBin(double x, double y, double z) const {
00036 int i=findBin(x,dx,xoffset);
00037 int j=findBin(y,dy,yoffset);
00038 int k=findBin(z,dz,zoffset);
00039 if (i>=0 && i<nx && j>=0 && j<ny && k>=0 && k<nz) return whatIndex(i,j,k);
00040 else return -1;
00041 }
00042
00043 double CHistogram3d::getValueCart(double x, double y, double z) const {
00044 int iBin = whatBin(x,y,z);
00045 if ( iBin < 0 ) return 0.0;
00046 return data[iBin];
00047 }
00048
00049 double CHistogram3d::getErrorCart(double x, double y, double z) const {
00050 int iBin = whatBin(x,y,z);
00051 if ( iBin < 0 ) return 0.0;
00052 return uncert[iBin];
00053 }
00054
00055
00056 bool CHistogram3d::Read(const parameterMap& m){
00057 CObject3d::Read(m);
00058 if (m.find("crab_style_datablock")!=m.end()){
00059 throw MESSAGE<<"write me! crab_style_datablock"<<ENDM_FATAL;
00060 return false;
00061 } else {
00062 nx=parameter::getI(m,"nx",nx);
00063 ny=parameter::getI(m,"ny",ny);
00064 nz=parameter::getI(m,"nz",nz);
00065 redim( nx*ny*nz );
00066 CDataSet::Read(m);
00067 if (ndata != nx*ny*nz) {
00068 MESSAGE << "ndata = "<<ndata<<" while nx*ny*nz = "<<nx*ny*nz<<", so we are trashing the data in the parameterMap"<<ENDM_WARN;
00069 redim( nx*ny*nz );
00070 }
00071 dx=parameter::getD(m,"dx",dx);
00072 dy=parameter::getD(m,"dy",dy);
00073 dz=parameter::getD(m,"dz",dz);
00074 xoffset=parameter::getD(m,"xoffset",xoffset);
00075 yoffset=parameter::getD(m,"yoffset",yoffset);
00076 zoffset=parameter::getD(m,"zoffset",zoffset);
00077 ixzero=findBin(dx/2.,dx,xoffset);
00078 iyzero=findBin(dy/2.,dy,yoffset);
00079 izzero=findBin(dz/2.,dz,zoffset);
00080 }
00081 return true;
00082 }
00083
00084 bool CHistogram3d::Write(parameterMap& m){
00085 CObject3d::Write(m);
00086 parameter::set(m,"nx",nx);
00087 parameter::set(m,"ny",ny);
00088 parameter::set(m,"nz",nz);
00089 parameter::set(m,"dx",dx);
00090 parameter::set(m,"dy",dy);
00091 parameter::set(m,"dz",dz);
00092 parameter::set(m,"xoffset",xoffset);
00093 parameter::set(m,"yoffset",yoffset);
00094 parameter::set(m,"zoffset",zoffset);
00095 return CDataSet::Write(m);
00096 }
00097