Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/externals/g4tools/include/tools/histo/hd2mpi

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  1 // Copyright (C) 2010, Guy Barrand. All rights reserved.
  2 // See the file tools.license for terms.
  3 
  4 #ifndef tools_histo_hd2mpi
  5 #define tools_histo_hd2mpi
  6 
  7 // code to MPI_Pack, MPI_Unpack histos without having to include mpi.h.
  8 
  9 #include "../impi"
 10 
 11 #include "histo_data"
 12 
 13 #include "../forit"
 14 
 15 namespace tools {
 16 namespace histo {
 17 
 18 /////////////////////////////////////////////////////////////////////////////
 19 /// hist_data to mpi ////////////////////////////////////////////////////////
 20 /////////////////////////////////////////////////////////////////////////////
 21 
 22 inline bool axis_dui_pack(impi& a_mpi,const axis<double,unsigned int>& a_axis) {
 23   //typedef double TC;
 24   //typedef unsigned int TO;
 25   //typedef unsigned int bn_t;
 26   if(!a_mpi.pack(a_axis.m_offset)) return false; //TO
 27   if(!a_mpi.pack(a_axis.m_number_of_bins)) return false; //bn_t
 28   if(!a_mpi.pack(a_axis.m_minimum_value)) return false; //TC
 29   if(!a_mpi.pack(a_axis.m_maximum_value)) return false; //TC
 30   if(!a_mpi.bpack(a_axis.m_fixed)) return false;
 31   if(!a_mpi.pack(a_axis.m_bin_width)) return false; //TC
 32   if(!a_mpi.vpack(a_axis.m_edges)) return false; //TC
 33   return true;
 34 }
 35 
 36 inline bool histo_data_duiuid_pack(impi& a_mpi,const histo_data<double,unsigned int,unsigned int,double>& a_hd) {
 37   //typedef double TC;
 38   //typedef unsigned int TO;
 39   //typedef unsigned int TN;
 40   //typedef double TW;
 41   //typedef unsigned int dim_t;
 42   typedef unsigned int num_t;
 43 
 44   if(!a_mpi.spack(a_hd.m_title)) return false;
 45   if(!a_mpi.pack(a_hd.m_dimension)) return false; //dim_t
 46   if(!a_mpi.pack(a_hd.m_bin_number)) return false; //TO
 47   if(!a_mpi.vpack(a_hd.m_bin_entries)) return false; //TN
 48   if(!a_mpi.vpack(a_hd.m_bin_Sw)) return false;  //TW
 49   if(!a_mpi.vpack(a_hd.m_bin_Sw2)) return false; //TW
 50 
 51  {for(unsigned int ibin=0;ibin<a_hd.m_bin_number;ibin++) {
 52     if(!a_mpi.vpack(a_hd.m_bin_Sxw[ibin])) return false;
 53   }}
 54  {for(unsigned int ibin=0;ibin<a_hd.m_bin_number;ibin++) {
 55     if(!a_mpi.vpack(a_hd.m_bin_Sx2w[ibin])) return false;
 56   }}
 57 
 58   // Axes :
 59  {for(unsigned int iaxis=0;iaxis<a_hd.m_dimension;iaxis++) {
 60     if(!axis_dui_pack(a_mpi,a_hd.m_axes[iaxis])) return false;
 61   }}
 62 
 63   // etc :
 64   if(!a_mpi.vpack(a_hd.m_in_range_plane_Sxyw)) return false; //TC
 65 
 66   // Annotations :
 67  {if(!a_mpi.pack((num_t)a_hd.m_annotations.size())) return false; //num_t
 68   tools_mforcit(std::string,std::string,a_hd.m_annotations,it) {
 69     if(!a_mpi.spack((*it).first)) return false;
 70     if(!a_mpi.spack((*it).second)) return false;
 71   }}
 72 
 73   // fast getters :
 74   if(!a_mpi.pack(a_hd.m_all_entries)) return false; //TN
 75   if(!a_mpi.pack(a_hd.m_in_range_entries)) return false; //TN
 76   if(!a_mpi.pack(a_hd.m_in_range_Sw)) return false; //TW
 77   if(!a_mpi.pack(a_hd.m_in_range_Sw2)) return false; //TW
 78   if(!a_mpi.vpack(a_hd.m_in_range_Sxw)) return false; //TC
 79   if(!a_mpi.vpack(a_hd.m_in_range_Sx2w)) return false; //TC
 80 
 81   return true;
 82 }
 83 
 84 /////////////////////////////////////////////////////////////////////////////
 85 /// mpi to hist_data ////////////////////////////////////////////////////////
 86 /////////////////////////////////////////////////////////////////////////////
 87 
 88 inline bool axis_dui_unpack(impi& a_mpi,axis<double,unsigned int>& a_axis) {
 89   //typedef double TC;
 90   //typedef unsigned int TO;
 91   //typedef unsigned int bn_t;
 92 
 93   if(!a_mpi.unpack(a_axis.m_offset)) return false; //TO
 94   if(!a_mpi.unpack(a_axis.m_number_of_bins)) return false; //bn_t
 95   if(!a_mpi.unpack(a_axis.m_minimum_value)) return false; //TC
 96   if(!a_mpi.unpack(a_axis.m_maximum_value)) return false; //TC
 97   if(!a_mpi.bunpack(a_axis.m_fixed)) return false;
 98   if(!a_mpi.unpack(a_axis.m_bin_width)) return false; //TC
 99   if(!a_mpi.vunpack(a_axis.m_edges)) return false; //TC
100 
101   return true;
102 }
103 
104 inline bool histo_data_duiuid_unpack(impi& a_mpi,histo_data<double,unsigned int,unsigned int,double>& a_hd) {
105   //typedef double TC;
106   //typedef unsigned int TO;
107   //typedef unsigned int TN;
108   //typedef double TW;
109   //typedef unsigned int dim_t;
110   typedef unsigned int num_t;
111 
112   if(!a_mpi.sunpack(a_hd.m_title)) return false;
113   if(!a_mpi.unpack(a_hd.m_dimension)) return false; //dim_t
114   if(!a_mpi.unpack(a_hd.m_bin_number)) return false; //TO
115   if(!a_mpi.vunpack(a_hd.m_bin_entries)) return false; //TN
116   if(!a_mpi.vunpack(a_hd.m_bin_Sw)) return false; //TW
117   if(!a_mpi.vunpack(a_hd.m_bin_Sw2)) return false; //TW
118 
119  {a_hd.m_bin_Sxw.resize(a_hd.m_bin_number);
120   for(unsigned int ibin=0;ibin<a_hd.m_bin_number;ibin++) {
121     if(!a_mpi.vunpack(a_hd.m_bin_Sxw[ibin])) return false;
122   }}
123  {a_hd.m_bin_Sx2w.resize(a_hd.m_bin_number);
124   for(unsigned int ibin=0;ibin<a_hd.m_bin_number;ibin++) {
125     if(!a_mpi.vunpack(a_hd.m_bin_Sx2w[ibin])) return false;
126   }}
127 
128   // Axes :
129  {a_hd.m_axes.resize(a_hd.m_dimension);
130   for(unsigned int iaxis=0;iaxis<a_hd.m_dimension;iaxis++) {
131     if(!axis_dui_unpack(a_mpi,a_hd.m_axes[iaxis])) return false;
132   }}
133 
134   // etc :
135   if(!a_mpi.vunpack(a_hd.m_in_range_plane_Sxyw)) return false; //TC
136 
137   // Annotations :
138  {a_hd.m_annotations.clear();
139   num_t num;
140   if(!a_mpi.unpack(num)) return false;
141   for(unsigned int index=0;index<num;index++) {
142     std::string k,v;
143     if(!a_mpi.sunpack(k)) return false;
144     if(!a_mpi.sunpack(v)) return false;
145     a_hd.m_annotations[k] = v;
146   }}
147 
148   // fast getters :
149   if(!a_mpi.unpack(a_hd.m_all_entries)) return false; //TN
150   if(!a_mpi.unpack(a_hd.m_in_range_entries)) return false; //TN
151   if(!a_mpi.unpack(a_hd.m_in_range_Sw)) return false; //TW
152   if(!a_mpi.unpack(a_hd.m_in_range_Sw2)) return false; //TW
153   if(!a_mpi.vunpack(a_hd.m_in_range_Sxw)) return false; //TC
154   if(!a_mpi.vunpack(a_hd.m_in_range_Sx2w)) return false; //TC
155 
156   return true;
157 }
158 
159 }}
160 
161 #include "profile_data"
162 
163 namespace tools {
164 namespace histo {
165 
166 /////////////////////////////////////////////////////////////////////////////
167 /// profile_data to C struct ////////////////////////////////////////////////
168 /////////////////////////////////////////////////////////////////////////////
169 
170 inline bool profile_data_duiuidd_pack(impi& a_mpi,const profile_data<double,unsigned int,unsigned int,double,double>& a_pd) {
171 
172   if(!histo_data_duiuid_pack(a_mpi,a_pd)) return false;
173 
174   //typedef double TV;
175 
176   if(!a_mpi.bpack(a_pd.m_is_profile)) return false;
177   if(!a_mpi.vpack(a_pd.m_bin_Svw)) return false; //TV
178   if(!a_mpi.vpack(a_pd.m_bin_Sv2w)) return false; //TV
179   if(!a_mpi.bpack(a_pd.m_cut_v)) return false;
180   if(!a_mpi.pack(a_pd.m_min_v)) return false; //TV
181   if(!a_mpi.pack(a_pd.m_max_v)) return false; //TV
182 
183   return true;
184 }
185 
186 /////////////////////////////////////////////////////////////////////////////
187 /// mpi to profile_data /////////////////////////////////////////////////////
188 /////////////////////////////////////////////////////////////////////////////
189 
190 inline bool profile_data_duiuidd_unpack(impi& a_mpi,profile_data<double,unsigned int,unsigned int,double,double>& a_pd) {
191 
192   if(!histo_data_duiuid_unpack(a_mpi,a_pd)) return false;
193 
194   //typedef double TV;
195 
196   if(!a_mpi.bunpack(a_pd.m_is_profile)) return false;
197   if(!a_mpi.vunpack(a_pd.m_bin_Svw)) return false; //TV
198   if(!a_mpi.vunpack(a_pd.m_bin_Sv2w)) return false; //TV
199   if(!a_mpi.bunpack(a_pd.m_cut_v)) return false;
200   if(!a_mpi.unpack(a_pd.m_min_v)) return false; //TV
201   if(!a_mpi.unpack(a_pd.m_max_v)) return false; //TV
202 
203   return true;
204 }
205 
206 }}
207 
208 #endif