// Copyright (C) 2010, Guy Barrand. All rights reserved. // See the file tools.license for terms. #ifndef tools_histo_hd2mpi #define tools_histo_hd2mpi // code to MPI_Pack, MPI_Unpack histos without having to include mpi.h. #include "../impi" #include "histo_data" #include "../forit" namespace tools { namespace histo { ///////////////////////////////////////////////////////////////////////////// /// hist_data to mpi //////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// inline bool axis_dui_pack(impi& a_mpi,const axis& a_axis) { if(!a_mpi.pack(a_axis.m_offset)) return false; //TO if(!a_mpi.pack(a_axis.m_number_of_bins)) return false; //bn_t if(!a_mpi.pack(a_axis.m_minimum_value)) return false; //TC if(!a_mpi.pack(a_axis.m_maximum_value)) return false; //TC if(!a_mpi.bpack(a_axis.m_fixed)) return false; if(!a_mpi.pack(a_axis.m_bin_width)) return false; //TC if(!a_mpi.vpack(a_axis.m_edges)) return false; //TC return true; } inline bool histo_data_duiuid_pack(impi& a_mpi,const histo_data& a_hd) { typedef unsigned int num_t; if(!a_mpi.spack(a_hd.m_title)) return false; if(!a_mpi.pack(a_hd.m_dimension)) return false; //dim_t if(!a_mpi.pack(a_hd.m_bin_number)) return false; //TO if(!a_mpi.vpack(a_hd.m_bin_entries)) return false; //TN if(!a_mpi.vpack(a_hd.m_bin_Sw)) return false; //TW if(!a_mpi.vpack(a_hd.m_bin_Sw2)) return false; //TW {for(unsigned int ibin=0;ibin& a_axis) { if(!a_mpi.unpack(a_axis.m_offset)) return false; //TO if(!a_mpi.unpack(a_axis.m_number_of_bins)) return false; //bn_t if(!a_mpi.unpack(a_axis.m_minimum_value)) return false; //TC if(!a_mpi.unpack(a_axis.m_maximum_value)) return false; //TC if(!a_mpi.bunpack(a_axis.m_fixed)) return false; if(!a_mpi.unpack(a_axis.m_bin_width)) return false; //TC if(!a_mpi.vunpack(a_axis.m_edges)) return false; //TC return true; } inline bool histo_data_duiuid_unpack(impi& a_mpi,histo_data& a_hd) { typedef unsigned int num_t; if(!a_mpi.sunpack(a_hd.m_title)) return false; if(!a_mpi.unpack(a_hd.m_dimension)) return false; //dim_t if(!a_mpi.unpack(a_hd.m_bin_number)) return false; //TO if(!a_mpi.vunpack(a_hd.m_bin_entries)) return false; //TN if(!a_mpi.vunpack(a_hd.m_bin_Sw)) return false; //TW if(!a_mpi.vunpack(a_hd.m_bin_Sw2)) return false; //TW {a_hd.m_bin_Sxw.resize(a_hd.m_bin_number); for(unsigned int ibin=0;ibin& a_pd) { if(!histo_data_duiuid_pack(a_mpi,a_pd)) return false; //typedef double TV; if(!a_mpi.bpack(a_pd.m_is_profile)) return false; if(!a_mpi.vpack(a_pd.m_bin_Svw)) return false; //TV if(!a_mpi.vpack(a_pd.m_bin_Sv2w)) return false; //TV if(!a_mpi.bpack(a_pd.m_cut_v)) return false; if(!a_mpi.pack(a_pd.m_min_v)) return false; //TV if(!a_mpi.pack(a_pd.m_max_v)) return false; //TV return true; } ///////////////////////////////////////////////////////////////////////////// /// mpi to profile_data ///////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// inline bool profile_data_duiuidd_unpack(impi& a_mpi,profile_data& a_pd) { if(!histo_data_duiuid_unpack(a_mpi,a_pd)) return false; //typedef double TV; if(!a_mpi.bunpack(a_pd.m_is_profile)) return false; if(!a_mpi.vunpack(a_pd.m_bin_Svw)) return false; //TV if(!a_mpi.vunpack(a_pd.m_bin_Sv2w)) return false; //TV if(!a_mpi.bunpack(a_pd.m_cut_v)) return false; if(!a_mpi.unpack(a_pd.m_min_v)) return false; //TV if(!a_mpi.unpack(a_pd.m_max_v)) return false; //TV return true; } }} #endif