Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mods to support spectra file IO out of fortran #34

Draft
wants to merge 39 commits into
base: master
Choose a base branch
from

Conversation

hbivens
Copy link
Collaborator

@hbivens hbivens commented Jul 25, 2024

No description provided.

@hbivens hbivens requested a review from wcjohns July 25, 2024 23:46
@hbivens hbivens linked an issue Jul 25, 2024 that may be closed by this pull request
@hbivens hbivens changed the title Add install stuff and support for Finding Specutils in CMake Mods to support spectra file IO out of fortran Jul 25, 2024
@wcjohns
Copy link
Collaborator

wcjohns commented Jul 25, 2024

This looks like a nice addition - thanks!

//auto timesEqual = expectedM.start_time() == actualM.start_time();
auto timeStr1 = SpecUtils::to_iso_string(expectedM.start_time() );
auto timeStr2 = SpecUtils::to_iso_string(actualM.start_time() );
CHECK( timeStr1 == timeStr2);
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@wcjohns I think we lose some time precision when we write and read pcf files. My test is failing when comparing measurement start times.


1: /mnt/c/Projects/code/SpecUtils/unit_tests/test_spec_file.cpp:81: ERROR: CHECK( timeStr1 == timeStr2 ) is NOT correct!
1:   values: CHECK( 20240812T164010.285502 == 20240812T164010.29 )

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's correct - PCF files store time in VAX format (a 23 character string formatted like "19-Sep-2014 14:12:01.62"), so only to the 100th of a second.

SpecUtils normally tracks down to the microsecond (via using time_point_t = std::chrono::time_point<std::chrono::system_clock,std::chrono::microseconds>).

It looks like SpecUtils::to_vax_string(..) rounds to the nearest 0.01 seconds, so you could test:

auto timeStr1 = SpecUtils::to_vax_string( expectedM.start_time() );
auto timeStr2 = SpecUtils::to_vax_string( actualM.start_time() );
CHECK( timeStr1 == timeStr2);

Or something like:

CHECK( std::round(0.0001*expectedM.start_time().count()) == std::round(0.0001*actualM.start_time().count()) );

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, thanks! I'll use to_vax_string to compare.

@hbivens hbivens marked this pull request as ready for review August 30, 2024 20:30
This was referenced Aug 30, 2024
@hbivens
Copy link
Collaborator Author

hbivens commented Sep 9, 2024

@wcjohns I merged in master this am and did this cmake configuration:

$ cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Debug -DSpecUtils_ENABLE_D3_CHART=OFF -DSpecUtils_BUILD_UNIT_TESTS=ON -DSpecUtils_USING_NO_THREADING=ON -DSpecUtils_FLT_PARSE_METHOD="FastFloat" -DSpecUtils_FETCH_FAST_FLOAT=ON ../../../

I'm getting this error on WSL/Ubuntu:

Args: --log_level=test_suite;--report_level=detailed;--catch_system_errors=yes
-- Configuring done (5.7s)
CMake Error in CMakeLists.txt:
  Target "SpecUtils" INTERFACE_INCLUDE_DIRECTORIES property contains path:

    "/mnt/c/Projects/code/SpecUtils/out/build/WSL-GCC-Debug/_deps/fast_float-src"

  which is prefixed in the build directory.


CMake Error in CMakeLists.txt:
  Target "SpecUtils" INTERFACE_INCLUDE_DIRECTORIES property contains path:

    "/mnt/c/Projects/code/SpecUtils/out/build/WSL-GCC-Debug/_deps/fast_float-src"

  which is prefixed in the build directory.Target "SpecUtils"
  INTERFACE_INCLUDE_DIRECTORIES property contains path:

    "/mnt/c/Projects/code/SpecUtils/out/build/WSL-GCC-Debug/_deps/fast_float-src"

  which is prefixed in the source directory.


-- Generating done (0.1s)
CMake Generate step failed.  Build files cannot be regenerated correctly.

@wcjohns
Copy link
Collaborator

wcjohns commented Sep 9, 2024

Commit 6d8371f should fix this - let me know if not.

@hbivens hbivens marked this pull request as draft September 11, 2024 18:21
CMakeLists.txt Outdated
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If SpecUtils_FLT_PARSE_METHOD is left as 'default_value' here, there is some logic below to hopefully pick the most reasonable float parsing method. Like for MSVC ≥2019, it should pick 'FromChars'.
Is there is reason to default to the slowest common denominator, or was it giving you an issue?

@hbivens
Copy link
Collaborator Author

hbivens commented Sep 16, 2024 via email

@@ -156,8 +156,8 @@ TEST_CASE("Round Trip")
CheckFileExistanceAndDelete(n42Fname);

//auto detNames = generateDetectorNames();
//std::vector<std::string> detNames = { "Ba1", "Aa2", "Bc3", "Cb4" }; // Bc3 computes an out of range index
std::vector<std::string> detNames = { "Ba1", "Aa2", "Bb3", "Cb4" };
std::vector<std::string> detNames = { "Ba1", "Aa2", "Bc3", "Cb4" }; // Bc3 computes an out of range index
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@wcjohns when I include Bc3 in the list of det names the test breaks:

Warning: 1 of the 4 gamma detectors didnt have conforming names, so they are being written in the first available spot in the PCF file.
1: ===============================================================================
1: /mnt/c/Projects/code/SpecUtils/unit_tests/test_spec_file.cpp:147:
1: TEST CASE:  Round Trip
1:   Write PCF File
1:   Read PCF File
1: 
1: /mnt/c/Projects/code/SpecUtils/unit_tests/test_spec_file.cpp:239: ERROR: CHECK( expectedM.deviation_pairs() == actualM.deviation_pairs() ) is NOT correct!
1:   values: CHECK( {?} == {?} )
1:   logged: devpair assert failed at: Bc3
1:

Isn't Bc3 a valid detector name?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Spectra io out of fortran
2 participants