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   //typedef double TC;
0024   //typedef unsigned int TO;
0025   //typedef unsigned int bn_t;
0026   if(!a_mpi.pack(a_axis.m_offset)) return false; //TO
0027   if(!a_mpi.pack(a_axis.m_number_of_bins)) return false; //bn_t
0028   if(!a_mpi.pack(a_axis.m_minimum_value)) return false; //TC
0029   if(!a_mpi.pack(a_axis.m_maximum_value)) return false; //TC
0030   if(!a_mpi.bpack(a_axis.m_fixed)) return false;
0031   if(!a_mpi.pack(a_axis.m_bin_width)) return false; //TC
0032   if(!a_mpi.vpack(a_axis.m_edges)) return false; //TC
0033   return true;
0034 }
0035 
0036 inline bool histo_data_duiuid_pack(impi& a_mpi,const histo_data<double,unsigned int,unsigned int,double>& a_hd) {
0037   //typedef double TC;
0038   //typedef unsigned int TO;
0039   //typedef unsigned int TN;
0040   //typedef double TW;
0041   //typedef unsigned int dim_t;
0042   typedef unsigned int num_t;
0043 
0044   if(!a_mpi.spack(a_hd.m_title)) return false;
0045   if(!a_mpi.pack(a_hd.m_dimension)) return false; //dim_t
0046   if(!a_mpi.pack(a_hd.m_bin_number)) return false; //TO
0047   if(!a_mpi.vpack(a_hd.m_bin_entries)) return false; //TN
0048   if(!a_mpi.vpack(a_hd.m_bin_Sw)) return false;  //TW
0049   if(!a_mpi.vpack(a_hd.m_bin_Sw2)) return false; //TW
0050 
0051  {for(unsigned int ibin=0;ibin<a_hd.m_bin_number;ibin++) {
0052     if(!a_mpi.vpack(a_hd.m_bin_Sxw[ibin])) return false;
0053   }}
0054  {for(unsigned int ibin=0;ibin<a_hd.m_bin_number;ibin++) {
0055     if(!a_mpi.vpack(a_hd.m_bin_Sx2w[ibin])) return false;
0056   }}
0057 
0058   // Axes :
0059  {for(unsigned int iaxis=0;iaxis<a_hd.m_dimension;iaxis++) {
0060     if(!axis_dui_pack(a_mpi,a_hd.m_axes[iaxis])) return false;
0061   }}
0062 
0063   // etc :
0064   if(!a_mpi.vpack(a_hd.m_in_range_plane_Sxyw)) return false; //TC
0065 
0066   // Annotations :
0067  {if(!a_mpi.pack((num_t)a_hd.m_annotations.size())) return false; //num_t
0068   tools_mforcit(std::string,std::string,a_hd.m_annotations,it) {
0069     if(!a_mpi.spack((*it).first)) return false;
0070     if(!a_mpi.spack((*it).second)) return false;
0071   }}
0072 
0073   // fast getters :
0074   if(!a_mpi.pack(a_hd.m_all_entries)) return false; //TN
0075   if(!a_mpi.pack(a_hd.m_in_range_entries)) return false; //TN
0076   if(!a_mpi.pack(a_hd.m_in_range_Sw)) return false; //TW
0077   if(!a_mpi.pack(a_hd.m_in_range_Sw2)) return false; //TW
0078   if(!a_mpi.vpack(a_hd.m_in_range_Sxw)) return false; //TC
0079   if(!a_mpi.vpack(a_hd.m_in_range_Sx2w)) return false; //TC
0080 
0081   return true;
0082 }
0083 
0084 /////////////////////////////////////////////////////////////////////////////
0085 /// mpi to hist_data ////////////////////////////////////////////////////////
0086 /////////////////////////////////////////////////////////////////////////////
0087 
0088 inline bool axis_dui_unpack(impi& a_mpi,axis<double,unsigned int>& a_axis) {
0089   //typedef double TC;
0090   //typedef unsigned int TO;
0091   //typedef unsigned int bn_t;
0092 
0093   if(!a_mpi.unpack(a_axis.m_offset)) return false; //TO
0094   if(!a_mpi.unpack(a_axis.m_number_of_bins)) return false; //bn_t
0095   if(!a_mpi.unpack(a_axis.m_minimum_value)) return false; //TC
0096   if(!a_mpi.unpack(a_axis.m_maximum_value)) return false; //TC
0097   if(!a_mpi.bunpack(a_axis.m_fixed)) return false;
0098   if(!a_mpi.unpack(a_axis.m_bin_width)) return false; //TC
0099   if(!a_mpi.vunpack(a_axis.m_edges)) return false; //TC
0100 
0101   return true;
0102 }
0103 
0104 inline bool histo_data_duiuid_unpack(impi& a_mpi,histo_data<double,unsigned int,unsigned int,double>& a_hd) {
0105   //typedef double TC;
0106   //typedef unsigned int TO;
0107   //typedef unsigned int TN;
0108   //typedef double TW;
0109   //typedef unsigned int dim_t;
0110   typedef unsigned int num_t;
0111 
0112   if(!a_mpi.sunpack(a_hd.m_title)) return false;
0113   if(!a_mpi.unpack(a_hd.m_dimension)) return false; //dim_t
0114   if(!a_mpi.unpack(a_hd.m_bin_number)) return false; //TO
0115   if(!a_mpi.vunpack(a_hd.m_bin_entries)) return false; //TN
0116   if(!a_mpi.vunpack(a_hd.m_bin_Sw)) return false; //TW
0117   if(!a_mpi.vunpack(a_hd.m_bin_Sw2)) return false; //TW
0118 
0119  {a_hd.m_bin_Sxw.resize(a_hd.m_bin_number);
0120   for(unsigned int ibin=0;ibin<a_hd.m_bin_number;ibin++) {
0121     if(!a_mpi.vunpack(a_hd.m_bin_Sxw[ibin])) return false;
0122   }}
0123  {a_hd.m_bin_Sx2w.resize(a_hd.m_bin_number);
0124   for(unsigned int ibin=0;ibin<a_hd.m_bin_number;ibin++) {
0125     if(!a_mpi.vunpack(a_hd.m_bin_Sx2w[ibin])) return false;
0126   }}
0127 
0128   // Axes :
0129  {a_hd.m_axes.resize(a_hd.m_dimension);
0130   for(unsigned int iaxis=0;iaxis<a_hd.m_dimension;iaxis++) {
0131     if(!axis_dui_unpack(a_mpi,a_hd.m_axes[iaxis])) return false;
0132   }}
0133 
0134   // etc :
0135   if(!a_mpi.vunpack(a_hd.m_in_range_plane_Sxyw)) return false; //TC
0136 
0137   // Annotations :
0138  {a_hd.m_annotations.clear();
0139   num_t num;
0140   if(!a_mpi.unpack(num)) return false;
0141   for(unsigned int index=0;index<num;index++) {
0142     std::string k,v;
0143     if(!a_mpi.sunpack(k)) return false;
0144     if(!a_mpi.sunpack(v)) return false;
0145     a_hd.m_annotations[k] = v;
0146   }}
0147 
0148   // fast getters :
0149   if(!a_mpi.unpack(a_hd.m_all_entries)) return false; //TN
0150   if(!a_mpi.unpack(a_hd.m_in_range_entries)) return false; //TN
0151   if(!a_mpi.unpack(a_hd.m_in_range_Sw)) return false; //TW
0152   if(!a_mpi.unpack(a_hd.m_in_range_Sw2)) return false; //TW
0153   if(!a_mpi.vunpack(a_hd.m_in_range_Sxw)) return false; //TC
0154   if(!a_mpi.vunpack(a_hd.m_in_range_Sx2w)) return false; //TC
0155 
0156   return true;
0157 }
0158 
0159 }}
0160 
0161 #include "profile_data"
0162 
0163 namespace tools {
0164 namespace histo {
0165 
0166 /////////////////////////////////////////////////////////////////////////////
0167 /// profile_data to C struct ////////////////////////////////////////////////
0168 /////////////////////////////////////////////////////////////////////////////
0169 
0170 inline bool profile_data_duiuidd_pack(impi& a_mpi,const profile_data<double,unsigned int,unsigned int,double,double>& a_pd) {
0171 
0172   if(!histo_data_duiuid_pack(a_mpi,a_pd)) return false;
0173 
0174   //typedef double TV;
0175 
0176   if(!a_mpi.bpack(a_pd.m_is_profile)) return false;
0177   if(!a_mpi.vpack(a_pd.m_bin_Svw)) return false; //TV
0178   if(!a_mpi.vpack(a_pd.m_bin_Sv2w)) return false; //TV
0179   if(!a_mpi.bpack(a_pd.m_cut_v)) return false;
0180   if(!a_mpi.pack(a_pd.m_min_v)) return false; //TV
0181   if(!a_mpi.pack(a_pd.m_max_v)) return false; //TV
0182 
0183   return true;
0184 }
0185 
0186 /////////////////////////////////////////////////////////////////////////////
0187 /// mpi to profile_data /////////////////////////////////////////////////////
0188 /////////////////////////////////////////////////////////////////////////////
0189 
0190 inline bool profile_data_duiuidd_unpack(impi& a_mpi,profile_data<double,unsigned int,unsigned int,double,double>& a_pd) {
0191 
0192   if(!histo_data_duiuid_unpack(a_mpi,a_pd)) return false;
0193 
0194   //typedef double TV;
0195 
0196   if(!a_mpi.bunpack(a_pd.m_is_profile)) return false;
0197   if(!a_mpi.vunpack(a_pd.m_bin_Svw)) return false; //TV
0198   if(!a_mpi.vunpack(a_pd.m_bin_Sv2w)) return false; //TV
0199   if(!a_mpi.bunpack(a_pd.m_cut_v)) return false;
0200   if(!a_mpi.unpack(a_pd.m_min_v)) return false; //TV
0201   if(!a_mpi.unpack(a_pd.m_max_v)) return false; //TV
0202 
0203   return true;
0204 }
0205 
0206 }}
0207 
0208 #endif