@@ -112,42 +112,47 @@ def plot_e_field(self, nu: int = 0):
112112 def __post_init__ (self ):
113113 if not os .path .exists (self .beam_file ):
114114 raise ValueError (f"Antenna model file { self .beam_file } does not exist" )
115- print_h5_structure (self .beam_file )
116- with tb .open_file (self .beam_file , 'r' ) as file :
117- # self.freqs = file.get_node("/Freq(Hz)").read() * au.Hz
118- self .freqs = (file .root .freq_Hz .read () * self .freq_units ).to ('Hz' ) # [num_freqs]
119- self .theta = (file .root .theta_pts .read () * self .angular_units ).to ('rad' ) # [num_theta]
120- self .phi = (file .root .phi_pts .read () * self .angular_units ).to ('rad' ) # [num_phi]
121-
122- # e_field_X_theta = file.get_node("/X-pol_Efields/etheta").read() # [freq, theta, phi]
123- e_field_X_theta = file .root .X_pol_Efields .etheta .read () # [freq, theta, phi]
124- e_field_X_theta = np .transpose (e_field_X_theta , (1 , 2 , 0 )) # [theta, phi, freq]
125- # e_field_X_phi = file.get_node("/X-pol_Efields/ephi").read() # [freq, theta, phi]
126- e_field_X_phi = file .root .X_pol_Efields .ephi .read () # [freq, theta, phi]
127- e_field_X_phi = np .transpose (e_field_X_phi , (1 , 2 , 0 )) # [theta, phi, freq]
128-
129- # e_field_Y_theta = file.get_node("/Y-pol_Efields/etheta").read() # [freq, theta, phi]
130- e_field_Y_theta = file .root .Y_pol_Efields .etheta .read () # [freq, theta, phi]
131- e_field_Y_theta = np .transpose (e_field_Y_theta , (1 , 2 , 0 )) # [theta, phi, freq]
132- # e_field_Y_phi = file.get_node("/Y-pol_Efields/ephi").read() # [freq, theta, phi]
133- e_field_Y_phi = file .root .Y_pol_Efields .ephi .read () # [freq, theta, phi]
134- e_field_Y_phi = np .transpose (e_field_Y_phi , (1 , 2 , 0 )) # [theta, phi, freq]
135-
136- E_x_X_dipole , E_y_X_dipole , _ = convert_spherical_e_field_to_cartesian (
137- * np .broadcast_arrays (e_field_X_phi , e_field_X_theta , self .phi [None , :, None ], self .theta [:, None , None ])
138- ) # [theta, phi, freq]
139- E_x_Y_dipole , E_y_Y_dipole , _ = convert_spherical_e_field_to_cartesian (
140- * np .broadcast_arrays (e_field_Y_phi , e_field_Y_theta , self .phi [None , :, None ], self .theta [:, None , None ])
141- ) # [theta, phi, freq]
142-
143- jones = np .transpose (np .asarray ([[E_x_X_dipole , E_y_X_dipole ],
144- [E_x_Y_dipole , E_y_Y_dipole ]]),
145- (2 , 3 , 4 , 0 , 1 )) # [theta, phi, freq, 2, 2]
146-
147- self .amplitude = np .abs (jones ) * au .dimensionless_unscaled
148- self .phase = np .angle (jones ) * au .rad
149- self .voltage_gain = np .max (np .max (self .amplitude [..., 0 , 0 ], axis = 0 ),
150- axis = 0 ) * au .dimensionless_unscaled # [num_freqs]
115+ try :
116+ with tb .open_file (self .beam_file , 'r' ) as file :
117+ # self.freqs = file.get_node("/Freq(Hz)").read() * au.Hz
118+ self .freqs = (file .root .freq_Hz .read () * self .freq_units ).to ('Hz' ) # [num_freqs]
119+ self .theta = (file .root .theta_pts .read () * self .angular_units ).to ('rad' ) # [num_theta]
120+ self .phi = (file .root .phi_pts .read () * self .angular_units ).to ('rad' ) # [num_phi]
121+
122+ # e_field_X_theta = file.get_node("/X-pol_Efields/etheta").read() # [freq, theta, phi]
123+ e_field_X_theta = file .root .X_pol_Efields .etheta .read () # [freq, theta, phi]
124+ e_field_X_theta = np .transpose (e_field_X_theta , (1 , 2 , 0 )) # [theta, phi, freq]
125+ # e_field_X_phi = file.get_node("/X-pol_Efields/ephi").read() # [freq, theta, phi]
126+ e_field_X_phi = file .root .X_pol_Efields .ephi .read () # [freq, theta, phi]
127+ e_field_X_phi = np .transpose (e_field_X_phi , (1 , 2 , 0 )) # [theta, phi, freq]
128+
129+ # e_field_Y_theta = file.get_node("/Y-pol_Efields/etheta").read() # [freq, theta, phi]
130+ e_field_Y_theta = file .root .Y_pol_Efields .etheta .read () # [freq, theta, phi]
131+ e_field_Y_theta = np .transpose (e_field_Y_theta , (1 , 2 , 0 )) # [theta, phi, freq]
132+ # e_field_Y_phi = file.get_node("/Y-pol_Efields/ephi").read() # [freq, theta, phi]
133+ e_field_Y_phi = file .root .Y_pol_Efields .ephi .read () # [freq, theta, phi]
134+ e_field_Y_phi = np .transpose (e_field_Y_phi , (1 , 2 , 0 )) # [theta, phi, freq]
135+
136+ E_x_X_dipole , E_y_X_dipole , _ = convert_spherical_e_field_to_cartesian (
137+ * np .broadcast_arrays (e_field_X_phi , e_field_X_theta , self .phi [None , :, None ],
138+ self .theta [:, None , None ])
139+ ) # [theta, phi, freq]
140+ E_x_Y_dipole , E_y_Y_dipole , _ = convert_spherical_e_field_to_cartesian (
141+ * np .broadcast_arrays (e_field_Y_phi , e_field_Y_theta , self .phi [None , :, None ],
142+ self .theta [:, None , None ])
143+ ) # [theta, phi, freq]
144+
145+ jones = np .transpose (np .asarray ([[E_x_X_dipole , E_y_X_dipole ],
146+ [E_x_Y_dipole , E_y_Y_dipole ]]),
147+ (2 , 3 , 4 , 0 , 1 )) # [theta, phi, freq, 2, 2]
148+
149+ self .amplitude = np .abs (jones ) * au .dimensionless_unscaled
150+ self .phase = np .angle (jones ) * au .rad
151+ self .voltage_gain = np .max (np .max (self .amplitude [..., 0 , 0 ], axis = 0 ),
152+ axis = 0 ) * au .dimensionless_unscaled # [num_freqs]
153+ except :
154+ print_h5_structure (self .beam_file )
155+ raise
151156
152157
153158def get_pytable_by_path (h5file_path , path ):
@@ -194,7 +199,8 @@ def traverse_node(node, path=''):
194199 print (f'UnImplemented Leaf: { node ._v_pathname } | Reason: Unsupported type or dataset' )
195200 else :
196201 # Print the leaf information including shape and dtype
197- print (f'Leaf: { node ._v_pathname } | Shape: { node .shape } | Dtype: { node .dtype } | Min: { np .min (node )} | Max: { np .max (node )} ' )
202+ print (
203+ f'Leaf: { node ._v_pathname } | Shape: { node .shape } | Dtype: { node .dtype } | Min: { np .min (node )} | Max: { np .max (node )} ' )
198204 # Handle UnImplemented specifically if not already caught
199205 elif isinstance (node , tb .UnImplemented ):
200206 print (f'UnImplemented Node: { node ._v_pathname } | Reason: Unsupported type or dataset' )
0 commit comments