#include #include #include #include #include "JTrigger/JSuperFrame2D.hh" #include "JLang/JPredicate.hh" #include "JLang/JComparator.hh" #include "JLang/JComparison.hh" #include "Jeep/JPrint.hh" #include "Jeep/JParser.hh" #include "Jeep/JMessage.hh" /** * Auxiliary program to test JSuperFrame2D class. */ int main(int argc, char **argv) { using namespace std; using namespace JPP; int debug; try { JParser<> zap; zap['d'] = make_field(debug) = 3; zap(argc, argv); } catch(const exception &error) { FATAL(error.what() << endl); } typedef double hit_type; typedef JSuperFrame2D JSuperFrame2D_t; for (const int N : { 1, 3, 5, 10, 20, 30 }) { DEBUG("Test " << N << endl); JSuperFrame2D_t buffer; for (int i = 0; i != N; ++i) { JSuperFrame2D_t::value_type frame; frame.setPMTIdentifier(JDAQPMTIdentifier(1, i)); for (int n = 0; n != i; ++n) { frame.push_back(JDAQHit(i,1,1)); } frame.putEndMarker(); buffer.push_back(frame); } for (int i = 0; i != N; ++i) { JSuperFrame2D_t::iterator __end = std::partition(buffer.begin(), buffer.end(), make_predicate(&JSuperFrame2D_t::value_type::getPMTAddress, i, JComparison::gt())); DEBUG("Frame partition " << setw(2) << buffer.size() << ' ' << setw(2) << distance(buffer.begin(), __end) << endl); for (JSuperFrame2D_t::const_iterator frame = buffer.begin(); frame != buffer.end(); ++frame) { ASSERT(frame->hasEndMarker(), "Test of end marker after partition " << setw(2) << frame->getPMTAddress()); } } std::sort(buffer.begin(), buffer.end(), make_comparator(&JSuperFrame2D_t::value_type::getPMTAddress, JComparison::gt())); for (JSuperFrame2D_t::const_iterator frame = buffer.begin(); frame != buffer.end(); ++frame) { ASSERT(frame->hasEndMarker(), "Test of end marker after std::sort " << setw(2) << frame->getPMTAddress()); } } return 0; }