Geant4 Cross Reference |
1 // Copyright (C) 2010, Guy Barrand. All rights 2 // See the file tools.license for terms. 3 4 #ifndef tools_histo_axes 5 #define tools_histo_axes 6 7 #include "axis" 8 9 namespace tools { 10 namespace histo { 11 12 //TC is for a coordinate. 13 //TO is for an offset used to identify a bin. 14 15 template <class TC,class TO> 16 inline bool is_out(const std::vector< axis<TC, 17 TO offset = a_offset; 18 int index; 19 typename std::vector< axis<TC,TO> >::size_ty 20 for(int iaxis=int(dimension)-1;iaxis>=0;iaxi 21 index = int(offset/a_axes[iaxis].m_offset) 22 if(index==0) return true; 23 if(index==(int(a_axes[iaxis].m_number_of_b 24 offset -= index * a_axes[iaxis].m_offset; 25 } 26 return false; 27 } 28 29 template <class TC,class TO> 30 inline void get_indices(const std::vector< axi 31 TO offset = a_offset; 32 typename std::vector< axis<TC,TO> >::size_ty 33 {for(int iaxis=int(dimension)-1;iaxis>=0;iaxi 34 a_is[iaxis] = int(offset/a_axes[iaxis].m_o 35 offset -= a_is[iaxis] * a_axes[iaxis].m_of 36 }} 37 typedef unsigned int dim_t; 38 for(dim_t iaxis=0;iaxis<dimension;iaxis++) { 39 if(a_is[iaxis]==0) { 40 a_is[iaxis] = axis_UNDERFLOW_BIN; 41 } else if(a_is[iaxis]==int(a_axes[iaxis].m 42 a_is[iaxis] = axis_OVERFLOW_BIN; 43 } else { 44 a_is[iaxis]--; 45 } 46 } 47 } 48 49 template <class TC,class TO> 50 inline bool get_offset(const std::vector< axis 51 // a_is[iaxis] is given in in-range indexing 52 // - [0,n[iaxis]-1] for in-range bins 53 // - UNDERFLOW_BIN for the iaxis underflow 54 // - OVERFLOW_BIN for the iaxis overflow bi 55 a_offset = 0; 56 if(a_axes.empty()) return false; 57 typename std::vector< axis<TC,TO> >::size_ty 58 typename axis<TC,TO>::bn_t ibin; 59 typedef unsigned int dim_t; 60 for(dim_t iaxis=0;iaxis<dimension;iaxis++) { 61 if(!a_axes[iaxis].in_range_to_absolute_ind 62 a_offset = 0; 63 return false; 64 } 65 a_offset += ibin * a_axes[iaxis].m_offset; 66 } 67 return true; 68 } 69 70 }} 71 72 #endif 73 74 75 76