Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions test/form/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ if(FORM_USE_ROOT_STORAGE)
form_test_data_products
TEST_ARGS
"${CMAKE_CURRENT_BINARY_DIR}/toy.root"
"${CMAKE_CURRENT_BINARY_DIR}/toy_checksums.txt"
)
target_include_directories(WriteVector PRIVATE ${PROJECT_SOURCE_DIR}/form)

Expand All @@ -24,6 +25,7 @@ if(FORM_USE_ROOT_STORAGE)
form_test_data_products
TEST_ARGS
"${CMAKE_CURRENT_BINARY_DIR}/toy.root"
"${CMAKE_CURRENT_BINARY_DIR}/toy_checksums.txt"
TEST_PROPERTIES
DEPENDS
WriteVector
Expand Down
103 changes: 100 additions & 3 deletions test/form/reader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,64 @@
#include "form/technology.hpp"
#include "test_helpers.hpp"

#include <iostream>
#include <cmath>
#include <fstream>
#include <map>
#include <sstream>
#include <vector>

static int const NUMBER_EVENT = 4;
static int const NUMBER_SEGMENT = 15;

static char const* const evt_id = "[EVENT=%08X]";
static char const* const seg_id = "[EVENT=%08X;SEG=%08X]";
static float const TOLERANCE = 1e-3f;

// Structs to hold expected checksums
struct SegChecksum {
float check;
float cpx, cpy, cpz;
};

struct EvtChecksum {
float check;
};

int main(int argc, char** argv)
{
std::cout << "In main" << std::endl;

std::string const filename = (argc > 1) ? argv[1] : "toy.root";
std::string const checksum_filename = (argc > 2) ? argv[2] : "toy_checksums.txt";

// Load expected checksums from file
std::map<std::pair<int, int>, SegChecksum> expected_seg;
std::map<int, EvtChecksum> expected_evt;

std::ifstream checksum_file(checksum_filename);
if (!checksum_file.is_open()) {
std::cerr << "ERROR: Could not open checksum file: " << checksum_filename << std::endl;
return 1;
}

std::string line;
while (std::getline(checksum_file, line)) {
std::istringstream iss(line);
std::string type;
iss >> type;
if (type == "SEG") {
int nevent, nseg;
SegChecksum cs;
iss >> nevent >> nseg >> cs.check >> cs.cpx >> cs.cpy >> cs.cpz;
expected_seg[{nevent, nseg}] = cs;
} else if (type == "EVT") {
int nevent;
EvtChecksum cs;
iss >> nevent >> cs.check;
expected_evt[nevent] = cs;
}
}
checksum_file.close();

// TODO: Read configuration from config file instead of hardcoding
form::experimental::config::output_item_config output_config;
Expand All @@ -31,6 +75,8 @@ int main(int argc, char** argv)

form::experimental::form_interface form(output_config, tech_config);

bool all_passed = true; //ADDED

for (int nevent = 0; nevent < NUMBER_EVENT; nevent++) {
std::cout << "PHLEX: Read Event No. " << nevent << std::endl;

Expand Down Expand Up @@ -82,6 +128,30 @@ int main(int argc, char** argv)
std::cout << "PHLEX: Segment = " << nseg << ": seg_id_text = " << seg_id_text
<< ", checkPoints = " << checkPoints << std::endl;

// Verify segment checksums
auto key = std::make_pair(nevent, nseg);
if (expected_seg.count(key)) {
auto const& exp = expected_seg[key];
bool seg_ok = (std::fabs(check - exp.check) <= TOLERANCE) &&
(std::fabs(checkPoints.getX() - exp.cpx) <= TOLERANCE) &&
(std::fabs(checkPoints.getY() - exp.cpy) <= TOLERANCE) &&
(std::fabs(checkPoints.getZ() - exp.cpz) <= TOLERANCE);
if (seg_ok) {
std::cout << "VERIFY PASS: event=" << nevent << " seg=" << nseg << std::endl;
} else {
std::cerr << "VERIFY FAIL: event=" << nevent << " seg=" << nseg
<< " expected check=" << exp.check << " got=" << check
<< " expected cpx=" << exp.cpx << " got=" << checkPoints.getX()
<< " expected cpy=" << exp.cpy << " got=" << checkPoints.getY()
<< " expected cpz=" << exp.cpz << " got=" << checkPoints.getZ() << std::endl;
all_passed = false;
}
} else {
std::cerr << "VERIFY FAIL: no expected checksum for event=" << nevent << " seg=" << nseg
<< std::endl;
all_passed = false;
}

delete track_start_x;
delete track_n_hits;
delete start_points;
Expand All @@ -106,11 +176,38 @@ int main(int argc, char** argv)
check += val;
std::cout << "PHLEX: Event = " << nevent << ": evt_id_text = " << evt_id_text
<< ", check = " << check << std::endl;

// Verify event checksum
if (expected_evt.count(nevent)) {
auto const& exp = expected_evt[nevent];
bool evt_ok = (std::fabs(check - exp.check) <= TOLERANCE);
if (evt_ok) {
std::cout << "VERIFY PASS: event=" << nevent << std::endl;
} else {
std::cerr << "VERIFY FAIL: event=" << nevent << " expected check=" << exp.check
<< " got=" << check << std::endl;
all_passed = false;
}
} else {
std::cerr << "VERIFY FAIL: no expected checksum for event=" << nevent << std::endl;
all_passed = false;
}

delete track_x; //FIXME: PHLEX owns this memory!

std::cout << "PHLEX: Read Event done " << nevent << std::endl;
}

std::cout << "PHLEX: Read done " << std::endl;
return 0;
// Report overall result
if (all_passed) {
std::cout << "PHLEX: All verification checks PASSED." << std::endl;
return 0;
} else {
std::cerr << "PHLEX: Some verification checks FAILED." << std::endl;
return 1;
}
}

//std::cout << "PHLEX: Read done " << std::endl;
// return 0;
//}
19 changes: 18 additions & 1 deletion test/form/writer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
#include "toy_tracker.hpp"

#include <cstdlib>
#include <fstream> //ADDED
#include <iomanip> //ADDED
#include <iostream>
#include <vector>

Expand Down Expand Up @@ -35,6 +37,7 @@ int main(int argc, char** argv)
srand(time(0));

std::string const filename = (argc > 1) ? argv[1] : "toy.root";
std::string const checksum_filename = (argc > 2) ? argv[2] : "toy_checksums.txt"; //ADDED

// TODO: Read configuration from config file instead of hardcoding
form::experimental::config::output_item_config output_config;
Expand All @@ -55,6 +58,13 @@ int main(int argc, char** argv)

ToyTracker tracker(4 * 1024);

// Open checksum file for writing
std::ofstream checksum_file(checksum_filename);
if (!checksum_file.is_open()) {
std::cerr << "ERROR: Could not open checksum file: " << checksum_filename << std::endl;
return 1;
}

for (int nevent = 0; nevent < NUMBER_EVENT; nevent++) {
std::cout << "PHLEX: Write Event No. " << nevent << std::endl;

Expand Down Expand Up @@ -106,6 +116,10 @@ int main(int argc, char** argv)

form.write(creator, segment_id, products);

// Save segment checksums
checksum_file << std::setprecision(10) << "SEG " << nevent << " " << nseg << " " << check
<< " " << checkPoints.getX() << " " << checkPoints.getY() << " "
<< checkPoints.getZ() << "\n";
track_x.insert(track_x.end(), track_start_x.begin(), track_start_x.end());
}

Expand All @@ -129,9 +143,12 @@ int main(int argc, char** argv)

form.write(creator, event_id, pb);

// Save event checksum
checksum_file << std::setprecision(10) << "EVT " << nevent << " " << check << "\n";
std::cout << "PHLEX: Write Event done " << nevent << std::endl;
}

std::cout << "PHLEX: Write done " << std::endl;
checksum_file.close();
std::cout << "PHLEX: Write done. Checksums saved to " << checksum_filename << std::endl;
return 0;
}
Loading