LArSoft  v10_04_05
Liquid Argon Software toolkit - https://larsoft.org/
FilterDecoder_tool.cc
Go to the documentation of this file.
1 #include "DecoderToolBase.h"
2 
4 #include <torch/torch.h>
5 
8 
9 class FilterDecoder : public DecoderToolBase {
10 
11 public:
18 
22  virtual ~FilterDecoder() noexcept = default;
23 
29  void declareProducts(art::ProducesCollector& collector) override
30  {
31  collector.produces<vector<FeatureVector<1>>>(instancename);
32  }
33 
39  void writeEmptyToEvent(art::Event& e, const vector<vector<size_t>>& idsmap) override;
40 
46  void writeToEvent(art::Event& e,
47  const vector<vector<size_t>>& idsmap,
48  const vector<NuGraphOutput>& infer_output) override;
49 };
50 
52 
53 void FilterDecoder::writeEmptyToEvent(art::Event& e, const vector<vector<size_t>>& idsmap)
54 {
55  //
56  size_t size = 0;
57  for (auto& v : idsmap)
58  size += v.size();
59  auto filtcol =
60  std::make_unique<vector<FeatureVector<1>>>(size, FeatureVector<1>(std::array<float, 1>({-1.})));
61  e.put(std::move(filtcol), instancename);
62  //
63 }
64 
66  const vector<vector<size_t>>& idsmap,
67  const vector<NuGraphOutput>& infer_output)
68 {
69  //
70  size_t size = 0;
71  for (auto& v : idsmap)
72  size += v.size();
73  auto filtcol =
74  std::make_unique<vector<FeatureVector<1>>>(size, FeatureVector<1>(std::array<float, 1>({-1.})));
75  //
76  for (size_t p = 0; p < planes.size(); p++) {
77  //
78  const std::vector<float>* x_filter_data = 0;
79  for (auto& io : infer_output) {
80  if (io.output_name == outputname + planes[p]) x_filter_data = &io.output_vec;
81  }
82  if (debug) {
83  std::cout << outputname + planes[p] << std::endl;
84  printVector(*x_filter_data);
85  }
86  //
87  torch::TensorOptions options = torch::TensorOptions().dtype(torch::kFloat32);
88  int64_t num_elements = x_filter_data->size();
89  const torch::Tensor f =
90  torch::from_blob(const_cast<float*>(x_filter_data->data()), {num_elements}, options);
91  //
92  for (int i = 0; i < f.numel(); ++i) {
93  size_t idx = idsmap[p][i];
94  std::array<float, 1> input({f[i].item<float>()});
95  (*filtcol)[idx] = FeatureVector<1>(input);
96  }
97  }
98  e.put(std::move(filtcol), instancename);
99 }
100 
#define DEFINE_ART_CLASS_TOOL(tool)
Definition: ToolMacros.h:42
vector< std::string > planes
std::string outputname
void writeToEvent(art::Event &e, const vector< vector< size_t >> &idsmap, const vector< NuGraphOutput > &infer_output) override
Decoder function.
TFile f
Definition: plotHisto.C:6
PutHandle< PROD > put(std::unique_ptr< PROD > &&edp, std::string const &instance={})
Definition: Event.h:77
decltype(auto) constexpr size(T &&obj)
ADL-aware version of std::size.
Definition: StdUtils.h:101
auto vector(Vector const &v)
Returns a manipulator which will print the specified array.
Definition: DumpUtils.h:289
void produces(std::string const &instanceName={}, Persistable const persistable=Persistable::Yes)
FilterDecoder(const fhicl::ParameterSet &pset)
Constructor.
void printVector(const std::vector< float > &vec)
void writeEmptyToEvent(art::Event &e, const vector< vector< size_t >> &idsmap) override
writeEmptyToEvent function
void declareProducts(art::ProducesCollector &collector) override
declareProducts function
std::string instancename
virtual ~FilterDecoder() noexcept=default
Virtual Destructor.
Float_t e
Definition: plot.C:35