Warning, /include/Geant4/tools/histo/hd2mpi is written in an unsupported language. File is not indexed.
0001 // Copyright (C) 2010, Guy Barrand. All rights reserved.
0002 // See the file tools.license for terms.
0003
0004 #ifndef tools_histo_hd2mpi
0005 #define tools_histo_hd2mpi
0006
0007 // code to MPI_Pack, MPI_Unpack histos without having to include mpi.h.
0008
0009 #include "../impi"
0010
0011 #include "histo_data"
0012
0013 #include "../forit"
0014
0015 namespace tools {
0016 namespace histo {
0017
0018 /////////////////////////////////////////////////////////////////////////////
0019 /// hist_data to mpi ////////////////////////////////////////////////////////
0020 /////////////////////////////////////////////////////////////////////////////
0021
0022 inline bool axis_dui_pack(impi& a_mpi,const axis<double,unsigned int>& a_axis) {
0023 if(!a_mpi.pack(a_axis.m_offset)) return false; //TO
0024 if(!a_mpi.pack(a_axis.m_number_of_bins)) return false; //bn_t
0025 if(!a_mpi.pack(a_axis.m_minimum_value)) return false; //TC
0026 if(!a_mpi.pack(a_axis.m_maximum_value)) return false; //TC
0027 if(!a_mpi.bpack(a_axis.m_fixed)) return false;
0028 if(!a_mpi.pack(a_axis.m_bin_width)) return false; //TC
0029 if(!a_mpi.vpack(a_axis.m_edges)) return false; //TC
0030 return true;
0031 }
0032
0033 inline bool histo_data_duiuid_pack(impi& a_mpi,const histo_data<double,unsigned int,unsigned int,double>& a_hd) {
0034 typedef unsigned int num_t;
0035
0036 if(!a_mpi.spack(a_hd.m_title)) return false;
0037 if(!a_mpi.pack(a_hd.m_dimension)) return false; //dim_t
0038 if(!a_mpi.pack(a_hd.m_bin_number)) return false; //TO
0039 if(!a_mpi.vpack(a_hd.m_bin_entries)) return false; //TN
0040 if(!a_mpi.vpack(a_hd.m_bin_Sw)) return false; //TW
0041 if(!a_mpi.vpack(a_hd.m_bin_Sw2)) return false; //TW
0042
0043 {for(unsigned int ibin=0;ibin<a_hd.m_bin_number;ibin++) {
0044 if(!a_mpi.vpack(a_hd.m_bin_Sxw[ibin])) return false;
0045 }}
0046 {for(unsigned int ibin=0;ibin<a_hd.m_bin_number;ibin++) {
0047 if(!a_mpi.vpack(a_hd.m_bin_Sx2w[ibin])) return false;
0048 }}
0049
0050 // Axes :
0051 {for(unsigned int iaxis=0;iaxis<a_hd.m_dimension;iaxis++) {
0052 if(!axis_dui_pack(a_mpi,a_hd.m_axes[iaxis])) return false;
0053 }}
0054
0055 // etc :
0056 if(!a_mpi.vpack(a_hd.m_in_range_plane_Sxyw)) return false; //TC
0057
0058 // Annotations :
0059 {if(!a_mpi.pack((num_t)a_hd.m_annotations.size())) return false; //num_t
0060 for(auto it = a_hd.m_annotations.cbegin(); it != a_hd.m_annotations.cend(); ++it) {
0061 if(!a_mpi.spack((*it).first)) return false;
0062 if(!a_mpi.spack((*it).second)) return false;
0063 }}
0064
0065 // fast getters :
0066 if(!a_mpi.pack(a_hd.m_all_entries)) return false; //TN
0067 if(!a_mpi.pack(a_hd.m_in_range_entries)) return false; //TN
0068 if(!a_mpi.pack(a_hd.m_in_range_Sw)) return false; //TW
0069 if(!a_mpi.pack(a_hd.m_in_range_Sw2)) return false; //TW
0070 if(!a_mpi.vpack(a_hd.m_in_range_Sxw)) return false; //TC
0071 if(!a_mpi.vpack(a_hd.m_in_range_Sx2w)) return false; //TC
0072
0073 return true;
0074 }
0075
0076 /////////////////////////////////////////////////////////////////////////////
0077 /// mpi to hist_data ////////////////////////////////////////////////////////
0078 /////////////////////////////////////////////////////////////////////////////
0079
0080 inline bool axis_dui_unpack(impi& a_mpi,axis<double,unsigned int>& a_axis) {
0081 if(!a_mpi.unpack(a_axis.m_offset)) return false; //TO
0082 if(!a_mpi.unpack(a_axis.m_number_of_bins)) return false; //bn_t
0083 if(!a_mpi.unpack(a_axis.m_minimum_value)) return false; //TC
0084 if(!a_mpi.unpack(a_axis.m_maximum_value)) return false; //TC
0085 if(!a_mpi.bunpack(a_axis.m_fixed)) return false;
0086 if(!a_mpi.unpack(a_axis.m_bin_width)) return false; //TC
0087 if(!a_mpi.vunpack(a_axis.m_edges)) return false; //TC
0088
0089 return true;
0090 }
0091
0092 inline bool histo_data_duiuid_unpack(impi& a_mpi,histo_data<double,unsigned int,unsigned int,double>& a_hd) {
0093 typedef unsigned int num_t;
0094
0095 if(!a_mpi.sunpack(a_hd.m_title)) return false;
0096 if(!a_mpi.unpack(a_hd.m_dimension)) return false; //dim_t
0097 if(!a_mpi.unpack(a_hd.m_bin_number)) return false; //TO
0098 if(!a_mpi.vunpack(a_hd.m_bin_entries)) return false; //TN
0099 if(!a_mpi.vunpack(a_hd.m_bin_Sw)) return false; //TW
0100 if(!a_mpi.vunpack(a_hd.m_bin_Sw2)) return false; //TW
0101
0102 {a_hd.m_bin_Sxw.resize(a_hd.m_bin_number);
0103 for(unsigned int ibin=0;ibin<a_hd.m_bin_number;ibin++) {
0104 if(!a_mpi.vunpack(a_hd.m_bin_Sxw[ibin])) return false;
0105 }}
0106 {a_hd.m_bin_Sx2w.resize(a_hd.m_bin_number);
0107 for(unsigned int ibin=0;ibin<a_hd.m_bin_number;ibin++) {
0108 if(!a_mpi.vunpack(a_hd.m_bin_Sx2w[ibin])) return false;
0109 }}
0110
0111 // Axes :
0112 {a_hd.m_axes.resize(a_hd.m_dimension);
0113 for(unsigned int iaxis=0;iaxis<a_hd.m_dimension;iaxis++) {
0114 if(!axis_dui_unpack(a_mpi,a_hd.m_axes[iaxis])) return false;
0115 }}
0116
0117 // etc :
0118 if(!a_mpi.vunpack(a_hd.m_in_range_plane_Sxyw)) return false; //TC
0119
0120 // Annotations :
0121 {a_hd.m_annotations.clear();
0122 num_t num;
0123 if(!a_mpi.unpack(num)) return false;
0124 for(unsigned int index=0;index<num;index++) {
0125 std::string k,v;
0126 if(!a_mpi.sunpack(k)) return false;
0127 if(!a_mpi.sunpack(v)) return false;
0128 a_hd.m_annotations[k] = v;
0129 }}
0130
0131 // fast getters :
0132 if(!a_mpi.unpack(a_hd.m_all_entries)) return false; //TN
0133 if(!a_mpi.unpack(a_hd.m_in_range_entries)) return false; //TN
0134 if(!a_mpi.unpack(a_hd.m_in_range_Sw)) return false; //TW
0135 if(!a_mpi.unpack(a_hd.m_in_range_Sw2)) return false; //TW
0136 if(!a_mpi.vunpack(a_hd.m_in_range_Sxw)) return false; //TC
0137 if(!a_mpi.vunpack(a_hd.m_in_range_Sx2w)) return false; //TC
0138
0139 return true;
0140 }
0141
0142 }}
0143
0144 #include "profile_data"
0145
0146 namespace tools {
0147 namespace histo {
0148
0149 /////////////////////////////////////////////////////////////////////////////
0150 /// profile_data to C struct ////////////////////////////////////////////////
0151 /////////////////////////////////////////////////////////////////////////////
0152
0153 inline bool profile_data_duiuidd_pack(impi& a_mpi,const profile_data<double,unsigned int,unsigned int,double,double>& a_pd) {
0154
0155 if(!histo_data_duiuid_pack(a_mpi,a_pd)) return false;
0156
0157 //typedef double TV;
0158
0159 if(!a_mpi.bpack(a_pd.m_is_profile)) return false;
0160 if(!a_mpi.vpack(a_pd.m_bin_Svw)) return false; //TV
0161 if(!a_mpi.vpack(a_pd.m_bin_Sv2w)) return false; //TV
0162 if(!a_mpi.bpack(a_pd.m_cut_v)) return false;
0163 if(!a_mpi.pack(a_pd.m_min_v)) return false; //TV
0164 if(!a_mpi.pack(a_pd.m_max_v)) return false; //TV
0165
0166 return true;
0167 }
0168
0169 /////////////////////////////////////////////////////////////////////////////
0170 /// mpi to profile_data /////////////////////////////////////////////////////
0171 /////////////////////////////////////////////////////////////////////////////
0172
0173 inline bool profile_data_duiuidd_unpack(impi& a_mpi,profile_data<double,unsigned int,unsigned int,double,double>& a_pd) {
0174
0175 if(!histo_data_duiuid_unpack(a_mpi,a_pd)) return false;
0176
0177 //typedef double TV;
0178
0179 if(!a_mpi.bunpack(a_pd.m_is_profile)) return false;
0180 if(!a_mpi.vunpack(a_pd.m_bin_Svw)) return false; //TV
0181 if(!a_mpi.vunpack(a_pd.m_bin_Sv2w)) return false; //TV
0182 if(!a_mpi.bunpack(a_pd.m_cut_v)) return false;
0183 if(!a_mpi.unpack(a_pd.m_min_v)) return false; //TV
0184 if(!a_mpi.unpack(a_pd.m_max_v)) return false; //TV
0185
0186 return true;
0187 }
0188
0189 }}
0190
0191 #endif