Back to home page

EIC code displayed by LXR

 
 

    


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