void evSelTest (PathSpecifiers const & ps, TrigResults const & tr, bool ans) { ParameterSet pset; pset.addParameter<Strings>("SelectEvents",ps.path); pset.registerIt(); // There are 3 different ways to build the EventSelector. All // should give the same result. We exercise all 3 here. EventSelector select_based_on_pset(pset, trigger_path_names); EventSelector select_based_on_path_specifiers_and_names (ps.path, trigger_path_names); EventSelector select_based_on_path_specifiers_only(ps.path); int number_of_trigger_paths = 0; std::vector<unsigned char> bitArray; HLTGlobalStatus bm(tr.bit.size()); for(unsigned int b=0;b<tr.bit.size();++b) { bm[b] = (tr.bit[b]); // There is an alternate version of the function acceptEvent // that takes an array of characters as an argument instead // of a TriggerResults object. These next few lines build // that array so we can test that also. if ( (number_of_trigger_paths % 4) == 0) bitArray.push_back(0); int byteIndex = number_of_trigger_paths / 4; int subIndex = number_of_trigger_paths % 4; bitArray[byteIndex] |= (static_cast<unsigned char>(bm[b].state())) << (subIndex * 2); ++number_of_trigger_paths; } TriggerResults results(bm,trigger_path_names); bool a = select_based_on_pset.acceptEvent(results); bool b = select_based_on_path_specifiers_and_names.acceptEvent(results); bool c = select_based_on_path_specifiers_only.acceptEvent(results); bool ab = select_based_on_pset.acceptEvent(&(bitArray[0]), number_of_trigger_paths); bool bb = select_based_on_path_specifiers_and_names.acceptEvent (&(bitArray[0]), number_of_trigger_paths); // select_based_on_path_specifiers_only.acceptEvent(&(bitArray[0]), // number_of_trigger_paths); // is not a valid way to use acceptEvent. if (a != ans || b != ans || c != ans || ab != ans || bb != ans ) { std::cerr << "failed to compare path specifiers with trigger results: " << "correct=" << ans << " " << "results=" << a << " " << b << " " << c << " " << ab << " " << bb << "\n" << "pathspecs = " << ps.path << "\n" << "trigger results = " << tr << "\n"; abort(); } // Repeat putting the list of trigger names in the pset // registry ParameterSet trigger_pset; trigger_pset.addParameter<Strings>("@trigger_paths", trigger_path_names); trigger_pset.registerIt(); TriggerResults results_id(bm, trigger_pset.id()); bool x = select_based_on_pset.acceptEvent(results_id); bool y = select_based_on_path_specifiers_and_names.acceptEvent(results_id); bool z = select_based_on_path_specifiers_only.acceptEvent(results_id); if (x != ans || y != ans || z != ans) { std::cerr << "failed to compare pathspecs with trigger results using pset ID: " << "correct=" << ans << " " << "results=" << x << " " << y << " " << z << "\n" << "pathspecs =" << ps.path << "\n" << "trigger results = " << tr << "\n"; abort(); } }
void testone(const Strings& paths, const Strings& pattern, const Bools& mask, bool answer, int jmask) { ParameterSet pset; //, parent; pset.addParameter<Strings>("SelectEvents", pattern); //parent.addUntrackedParameter<ParameterSet>("SelectEvents",pset); pset.registerIt(); // There are 3 different ways to build the EventSelector. All // should give the same result. We exercise all 3 here. EventSelector select(pset, paths); EventSelector select1(pattern, paths); EventSelector select2(pattern); int number_of_trigger_paths = 0; std::vector<unsigned char> bitArray; HLTGlobalStatus bm(mask.size()); const HLTPathStatus pass = HLTPathStatus(edm::hlt::Pass); const HLTPathStatus fail = HLTPathStatus(edm::hlt::Fail); const HLTPathStatus ex = HLTPathStatus(edm::hlt::Exception); const HLTPathStatus ready = HLTPathStatus(edm::hlt::Ready); for(unsigned int b=0;b<mask.size();++b) { bm[b] = (mask[b]? pass : fail); // There is an alternate version of the function acceptEvent // that takes an array of characters as an argument instead // of a TriggerResults object. These next few lines build // that array so we can test that also. if ( (number_of_trigger_paths % 4) == 0) bitArray.push_back(0); int byteIndex = number_of_trigger_paths / 4; int subIndex = number_of_trigger_paths % 4; bitArray[byteIndex] |= (mask[b]? edm::hlt::Pass : edm::hlt::Fail) << (subIndex * 2); ++number_of_trigger_paths; } if (jmask == 8 && mask.size() > 4) { bm[0] = ready; bm[4] = ex; bitArray[0] = (bitArray[0] & 0xfc) | edm::hlt::Ready; bitArray[1] = (bitArray[1] & 0xfc) | edm::hlt::Exception; } TriggerResults results(bm,paths); // std::cerr << "pattern=" << pattern // << "mask=" << mask << "\n"; // DBG // std:: cerr << "a \n"; bool a = select.acceptEvent(results); // std:: cerr << "a1 \n"; bool a1 = select1.acceptEvent(results); // std:: cerr << "a2 \n"; bool a2 = select2.acceptEvent(results); // std:: cerr << "b2 \n"; bool b2 = select2.acceptEvent(results); // std:: cerr << "c1 \n"; bool c1 = select1.acceptEvent(&(bitArray[0]), number_of_trigger_paths); if (a!=answer || a1 != answer || a2 != answer || b2 != answer || c1 != answer) { std::cerr << "failed to compare pattern with mask: " << "correct=" << answer << " " << "results=" << a << " " << a1 << " " << a2 << " " << b2 << " " << c1 << "\n" << "pattern=" << pattern << "\n" << "mask=" << mask << "\n" << "jmask = " << jmask << "\n"; abort(); } // Repeat putting the list of trigger names in the pset // registry ParameterSet trigger_pset; trigger_pset.addParameter<Strings>("@trigger_paths", paths); trigger_pset.registerIt(); TriggerResults results_id(bm, trigger_pset.id()); // std:: cerr << "a11 \n"; bool a11 = select.acceptEvent(results_id); // std:: cerr << "a12 \n"; bool a12 = select1.acceptEvent(results_id); // std:: cerr << "a13 \n"; bool a13 = select2.acceptEvent(results_id); // std:: cerr << "a14 \n"; bool a14 = select2.acceptEvent(results_id); if (a11 != answer || a12 != answer || a13 != answer || a14 != answer) { std::cerr << "failed to compare pattern with mask using pset ID: " << "correct=" << answer << " " << "results=" << a11 << " " << a12 << " " << a13 << " " << a14 << "\n" << "pattern=" << pattern << "\n" << "mask=" << mask << "\n" << "jmask = " << jmask << "\n"; abort(); } }