10 #include "art/Framework/Core/EDAnalyzer.h"
11 #include "art/Framework/Core/ModuleMacros.h"
12 #include "art/Framework/Principal/Event.h"
13 #include "art/Framework/Principal/Handle.h"
14 #include "art/Framework/Principal/Run.h"
15 #include "art/Framework/Principal/SubRun.h"
16 #include "canvas/Persistency/Common/AssnsAlgorithms.h"
17 #include "canvas/Persistency/Common/Assns.h"
18 #include "canvas/Persistency/Common/Ptr.h"
19 #include "canvas/Utilities/InputTag.h"
20 #include "fhiclcpp/ParameterSet.h"
47 void analyze(art::Event
const &
e)
override;
63 bool starts_with(std::string
const&
s, std::string
const& key)
64 {
return s.substr(0, key.length()) == key; }
72 , fInputLabel(p.
get<art::InputTag>(
"input_label"))
74 auto enableTests = p.get<std::vector<std::string>>(
"enableTests");
75 if (enableTests.empty()) {
77 "forEachAssociatedGroup",
"associatedGroups",
"associatedGroupsWithLeft"
81 std::copy(enableTests.begin(), enableTests.end(),
99 typedef typename art::Assns<int, std::string> istr_assns;
100 auto const & int_to_str_assns = *e.getValidHandle<istr_assns> (
fInputLabel);
101 auto vs =
strvec_t {
"one",
"one-a",
"two",
"two-a",
"three",
"three-a"};
104 auto strings = [&strvec](
auto strs) {
106 std::cout << *
s << std::flush <<
" \"" << **
s <<
"\"" << std::endl;
107 strvec.push_back(**
s);
111 art::for_each_group(int_to_str_assns, strings);
114 for(
auto k=0;
k<6;++
k) {
115 if (strvec[
k] != vs[
k]) {
116 throw art::Exception(art::errors::LogicError)
117 <<
"String #" << k <<
" expected to be '" << vs[
k]
118 <<
"', got '" << strvec[
k] <<
"' instead!\n";
130 typedef typename art::Assns<int, std::string> istr_assns;
131 auto const & int_to_str_assns = *e.getValidHandle<istr_assns> (
fInputLabel);
132 auto vs =
strvec_t {
"one",
"one-a",
"two",
"two-a",
"three",
"three-a"};
136 for(art::Ptr<std::string>
const&
s: strs) {
137 std::cout <<
s << std::flush <<
" \"" << *
s <<
"\"" << std::endl;
138 strvec.push_back(*
s);
143 for(
auto k=0;
k<6;++
k) {
144 if (strvec[
k] != vs[
k]) {
145 throw art::Exception(art::errors::LogicError)
146 <<
"String #" << k <<
" expected to be '" << vs[
k]
147 <<
"', got '" << strvec[
k] <<
"' instead!\n";
159 typedef typename art::Assns<int, std::string> istr_assns;
160 auto const & int_to_str_assns = *e.getValidHandle<istr_assns> (
fInputLabel);
161 std::vector<std::pair<int, std::string>> vs = {
170 std::vector<std::pair<int, std::string>> strvec;
174 auto const& key = std::get<0>(
group);
175 auto const& strs = std::get<1>(
group);
177 std::cout <<
"#" << (*key) <<
" (" << key <<
")" << std::endl;
178 for(art::Ptr<std::string>
const&
s: strs) {
179 std::cout <<
" - " <<
s <<
" \"" << *
s <<
"\"" << std::endl;
180 strvec.emplace_back(*key, *
s);
185 for(
auto k=0;
k<6;++
k) {
186 std::string
const&
s = strvec[
k].second;
188 if (starts_with(s,
"one" )) key = 1;
189 else if (starts_with(s,
"two" )) key = 2;
190 else if (starts_with(s,
"three")) key = 3;
193 throw art::Exception(art::errors::LogicError)
194 <<
"String #" <<
k <<
" expected to have key '" << vs[
k].first
195 <<
"', got '" << key <<
"' instead!\n";
199 throw art::Exception(art::errors::LogicError)
200 <<
"String #" <<
k <<
" expected to be '" << vs[
k].second
201 <<
"', got '" << s <<
"' instead!\n";
auto associated_groups_with_left(A const &assns)
Helper functions to access associations in order, also with key.
std::vector< std::string > strvec_t
void associated_groups_test(art::Event const &e) const
art::Assns< std::string, int > strintAssns_t
AssnAnalyzer & operator=(AssnAnalyzer const &)=delete
std::set< std::string > fEnabledTests
auto associated_groups(A const &assns)
Helper functions to access associations in order.
AssnAnalyzer(fhicl::ParameterSet const &p)
auto end(FixedBins< T, C > const &) noexcept
void associated_groups_with_left_test(art::Event const &e) const
void analyze(art::Event const &e) override
auto begin(FixedBins< T, C > const &) noexcept
then echo File list $list not found else cat $list while read file do echo $file sed s
Helper functions to access associations in order.
std::vector< int > intvec_t
void for_each_associated_group_test(art::Event const &e) const
art::InputTag fInputLabel
BEGIN_PROLOG could also be cout