@@ -90,6 +90,8 @@ enum GSE_CARS_SAVE_VER {UNKNOWN, XRFMAP, XRMMAP};
9090
9191using ROI_Vec = std::vector<std::pair<int , int >>;
9292
93+ extern " C" herr_t h5_ext_file_info (hid_t loc_id, const char *name, const H5L_info2_t *linfo, void *opdata);
94+
9395// -----------------------------------------------------------------------------
9496
9597template <typename T_real>
@@ -925,14 +927,42 @@ class DLL_EXPORT HDF5_IO
925927 {
926928 return false ;
927929 }
930+ /*
928931 if (false == _open_h5_object(pos_grp_id, H5O_GROUP, close_map, "/positions", file_id))
929932 {
930933 return false;
931934 }
932935 if (false == _open_h5_object(xspres_grp_id, H5O_GROUP, close_map, "/flyXRF", file_id))
936+ */
937+ if (false == _open_h5_object (xspres_grp_id, H5O_GROUP, close_map, " /detectors/XRF_ME7" , file_id, false , false ))
933938 {
939+ if (false == _open_h5_object (xspres_grp_id, H5O_GROUP, close_map, " /detectors/XRF_RS" , file_id))
940+ {
941+ return false ;
942+ }
934943 return false ;
935944 }
945+
946+ int idx = filename.find_last_of (" _master.h5" ) - 9 ;
947+ if (idx > 0 )
948+ {
949+ std::string base_name = filename.substr (0 , idx);
950+ std::map<std::string, hid_t > ext_links;
951+ herr_t idx = H5Literate2 (xspres_grp_id, H5_INDEX_NAME, H5_ITER_INC, NULL , h5_ext_file_info, &ext_links);
952+ spec_vol->resize_and_zero (ext_links.size (),1 ,4096 );
953+ for (unsigned long i = 0 ; i<ext_links.size (); i++)
954+ {
955+ std::string search_name = base_name + " _" + std::to_string (i) + " .hdf5" ;
956+ logI<< " searching " << search_name << " \n " ;
957+ if (ext_links.count (search_name) > 0 )
958+ {
959+ logI<< " loading " << search_name << " \n " ;
960+ _load_spectra_line_xspress3 (ext_links.at (search_name), detector_num, &(*spec_vol)[i]);
961+ H5Gclose (ext_links.at (search_name));
962+ }
963+ }
964+ }
965+ /*
936966 // load spectra link
937967 err = H5Lget_name_by_idx(xspres_grp_id, ".", H5_INDEX_NAME, H5_ITER_NATIVE, 0, &xspress3_link[0], 2048, H5P_DEFAULT);
938968 if (err < 0)
@@ -941,7 +971,6 @@ class DLL_EXPORT HDF5_IO
941971 _close_h5_objects(close_map);
942972 return false;
943973 }
944-
945974 err = H5Lget_name_by_idx(pos_grp_id, ".", H5_INDEX_NAME, H5_ITER_NATIVE, 0, &positions_link[0], 2048, H5P_DEFAULT);
946975 if (err < 0)
947976 {
@@ -993,15 +1022,18 @@ class DLL_EXPORT HDF5_IO
9931022
9941023 // read in scalers from TertraMM
9951024
996-
1025+ */
1026+
9971027 _close_h5_objects (close_map);
9981028 }
1029+ /*
9991030 spec_vol->resize_and_zero(1,1,1);
10001031 if(false == load_spectra_line_xspress3(path + "flyXRF/" + xspress3_link, detector_num, &(*spec_vol)[0]) )
1032+ if(false == load_spectra_line_xspress3(path + "XRF_ME7/" + xspress3_link, detector_num, &(*spec_vol)[0]) )
10011033 {
10021034 return false;
10031035 }
1004-
1036+ */
10051037 return true ;
10061038 }
10071039
@@ -1506,9 +1538,30 @@ class DLL_EXPORT HDF5_IO
15061538 start = std::chrono::system_clock::now ();
15071539
15081540 logI << path << " detector : " << detector_num << " \n " ;
1541+ std::stack<std::pair<hid_t , H5_OBJECTS> > close_map;
1542+ hid_t file_id;
15091543
1544+ if (false == _open_h5_object (file_id, H5O_FILE, close_map, path, -1 ))
1545+ {
1546+ return false ;
1547+ }
1548+ bool ret = _load_spectra_line_xspress3 (file_id, detector_num, spec_row);
1549+ _close_h5_objects (close_map);
1550+
1551+ end = std::chrono::system_clock::now ();
1552+ std::chrono::duration<double > elapsed_seconds = end - start;
1553+
1554+ logI << " elapsed time: " << elapsed_seconds.count () << " s" << " \n " ;
1555+ return ret;
1556+ }
1557+
1558+ // -----------------------------------------------------------------------------
1559+
1560+ template <typename T_real>
1561+ bool _load_spectra_line_xspress3 (hid_t file_id, size_t detector_num, data_struct::Spectra_Line<T_real>* spec_row)
1562+ {
15101563 std::stack<std::pair<hid_t , H5_OBJECTS> > close_map;
1511- hid_t file_id, dset_id, dataspace_id, maps_grp_id, scaler_grp_id, scaler2_grp_id, memoryspace_id, memoryspace_meta_id = -1 ;
1564+ hid_t dset_id, dataspace_id, maps_grp_id, scaler_grp_id, scaler2_grp_id, memoryspace_id, memoryspace_meta_id = -1 ;
15121565 hid_t dset_lt_id, dset_rt_id, dset_outcnt_id = -1 ;
15131566 hid_t dataspace_lt_id, dataspace_rt_id, dataspace_outcnt_id = -1 ;
15141567
@@ -1530,18 +1583,16 @@ class DLL_EXPORT HDF5_IO
15301583
15311584 std::string outcounts_dataset_name2 = " OutputCounts_" + std::to_string (detector_num);
15321585
1533-
1534- if (false == _open_h5_object (file_id, H5O_FILE, close_map, path, -1 ))
1535- {
1536- return false ;
1537- }
15381586 if (false == _open_h5_object (maps_grp_id, H5O_GROUP, close_map, " /entry/data" , file_id, false , false ))
15391587 {
1540- if (false == _open_h5_object (maps_grp_id, H5O_GROUP, close_map, " /entry/instrument/detector " , file_id, false , false ))
1588+ if (false == _open_h5_object (maps_grp_id, H5O_GROUP, close_map, " /data " , file_id, false , false ))
15411589 {
1542- if (false == _open_h5_object (maps_grp_id, H5O_GROUP, close_map, " /entry/instrument/xspress3 " , file_id, false , true ))
1590+ if (false == _open_h5_object (maps_grp_id, H5O_GROUP, close_map, " /entry/instrument/detector " , file_id, false , false ))
15431591 {
1544- return false ;
1592+ if (false == _open_h5_object (maps_grp_id, H5O_GROUP, close_map, " /entry/instrument/xspress3" , file_id, false , true ))
1593+ {
1594+ return false ;
1595+ }
15451596 }
15461597 }
15471598 }
@@ -1723,11 +1774,6 @@ class DLL_EXPORT HDF5_IO
17231774
17241775 _close_h5_objects (close_map);
17251776
1726- end = std::chrono::system_clock::now ();
1727- std::chrono::duration<double > elapsed_seconds = end - start;
1728- // std::time_t end_time = std::chrono::system_clock::to_time_t(end);
1729-
1730- logI << " elapsed time: " << elapsed_seconds.count () << " s" << " \n " ;
17311777 return true ;
17321778 }
17331779
0 commit comments