LArSoft  v10_06_00
Liquid Argon Software toolkit - https://larsoft.org/
FilterDecoder_tool.cc
Go to the documentation of this file.
1 #include "DecoderToolBase.h"
2 
4 
6 #include <torch/torch.h>
7 
10 
12 
13 public:
20 
24  virtual ~FilterDecoder() noexcept = default;
25 
31  void declareProducts(art::ProducesCollector& collector) override
32  {
33  collector.produces<vector<FeatureVector<1>>>(instancename);
34  }
35 
41  void writeEmptyToEvent(art::Event& e, const vector<vector<size_t>>& idsmap) override;
42 
48  void writeToEvent(art::Event& e,
49  const vector<vector<size_t>>& idsmap,
50  const vector<NuGraphOutput>& infer_output) override;
51 };
52 
54 
55 void FilterDecoder::writeEmptyToEvent(art::Event& e, const vector<vector<size_t>>& idsmap)
56 {
57  //
58  size_t size = 0;
59  for (auto& v : idsmap)
60  size += v.size();
61  auto filtcol =
62  std::make_unique<vector<FeatureVector<1>>>(size, FeatureVector<1>(std::array<float, 1>({-1.})));
63  e.put(std::move(filtcol), instancename);
64  //
65 }
66 
68  const vector<vector<size_t>>& idsmap,
69  const vector<NuGraphOutput>& infer_output)
70 {
71  //
72  size_t size = 0;
73  for (auto& v : idsmap)
74  size += v.size();
75  auto filtcol =
76  std::make_unique<vector<FeatureVector<1>>>(size, FeatureVector<1>(std::array<float, 1>({-1.})));
77  //
78  for (size_t p = 0; p < planes.size(); p++) {
79  //
80  const std::vector<float>* x_filter_data = 0;
81  for (auto& io : infer_output) {
82  if (io.output_name == outputname + planes[p]) x_filter_data = &io.output_vec;
83  }
84  if (debug) {
85  std::cout << outputname + planes[p] << std::endl;
86  printVector(*x_filter_data);
87  }
88  //
89  torch::TensorOptions options = torch::TensorOptions().dtype(torch::kFloat32);
90  int64_t num_elements = x_filter_data->size();
91  const torch::Tensor f =
92  torch::from_blob(const_cast<float*>(x_filter_data->data()), {num_elements}, options);
93  //
94  for (int i = 0; i < f.numel(); ++i) {
95  size_t idx = idsmap[p][i];
96  std::array<float, 1> input({f[i].item<float>()});
97  (*filtcol)[idx] = FeatureVector<1>(input);
98  }
99  }
100  e.put(std::move(filtcol), instancename);
101 }
102 
#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