LArSoft  v10_06_00
Liquid Argon Software toolkit - https://larsoft.org/
SemanticDecoder Class Reference
Inheritance diagram for SemanticDecoder:
DecoderToolBase

Public Member Functions

 SemanticDecoder (const fhicl::ParameterSet &pset)
 Constructor. More...
 
virtual ~SemanticDecoder () noexcept=default
 Virtual Destructor. More...
 
void declareProducts (art::ProducesCollector &collector) override
 declareProducts function More...
 
void writeEmptyToEvent (art::Event &e, const vector< vector< size_t >> &idsmap) override
 writeEmptyToEvent function More...
 
void writeToEvent (art::Event &e, const vector< vector< size_t >> &idsmap, const vector< NuGraphOutput > &infer_output) override
 Decoder function. More...
 
void printVector (const std::vector< float > &vec)
 
template<typename T , size_t N>
void softmax (std::array< T, N > &arr)
 
void setDebugAndPlanes (bool d, vector< std::string > &p)
 

Protected Attributes

bool debug
 
vector< std::string > planes
 
std::string instancename
 
std::string outputname
 

Private Attributes

std::vector< std::string > categories
 
art::InputTag hitInput
 

Detailed Description

Definition at line 12 of file SemanticDecoder_tool.cc.

Constructor & Destructor Documentation

SemanticDecoder::SemanticDecoder ( const fhicl::ParameterSet pset)

Constructor.

Parameters
pset

Definition at line 59 of file SemanticDecoder_tool.cc.

References fhicl::ParameterSet::get(), and hitInput.

60  : DecoderToolBase(p)
61  , categories{p.get<std::vector<std::string>>("categories")}
62  , hitInput{p.get<art::InputTag>("hitInput")}
63 {}
art::InputTag hitInput
DecoderToolBase(fhicl::ParameterSet const &p)
Construcutor.
std::vector< std::string > categories
virtual SemanticDecoder::~SemanticDecoder ( )
virtualdefaultnoexcept

Virtual Destructor.

Member Function Documentation

void SemanticDecoder::declareProducts ( art::ProducesCollector collector)
inlineoverridevirtual

declareProducts function

Parameters
art::ProducesCollector

Implements DecoderToolBase.

Definition at line 32 of file SemanticDecoder_tool.cc.

References e, DecoderToolBase::instancename, art::ProducesCollector::produces(), lar::dump::vector(), writeEmptyToEvent(), and writeToEvent().

33  {
34  collector.produces<vector<FeatureVector<5>>>(instancename);
36  }
void produces(std::string const &instanceName={}, Persistable const persistable=Persistable::Yes)
std::string instancename
void DecoderToolBase::printVector ( const std::vector< float > &  vec)
inlineinherited

Definition at line 65 of file DecoderToolBase.h.

Referenced by FilterDecoder::writeToEvent(), and writeToEvent().

66  {
67  for (size_t i = 0; i < vec.size(); ++i) {
68  std::cout << vec[i];
69  // Print space unless it's the last element
70  if (i != vec.size() - 1) { std::cout << " "; }
71  }
72  std::cout << std::endl;
73  std::cout << std::endl;
74  }
void DecoderToolBase::setDebugAndPlanes ( bool  d,
vector< std::string > &  p 
)
inlineinherited

Definition at line 94 of file DecoderToolBase.h.

References d, and tca::debug.

95  {
96  debug = d;
97  planes = p;
98  }
vector< std::string > planes
Float_t d
Definition: plot.C:235
template<typename T , size_t N>
void DecoderToolBase::softmax ( std::array< T, N > &  arr)
inlineinherited

Definition at line 77 of file DecoderToolBase.h.

References sum.

Referenced by writeToEvent().

78  {
79  T m = -std::numeric_limits<T>::max();
80  for (size_t i = 0; i < arr.size(); i++) {
81  if (arr[i] > m) { m = arr[i]; }
82  }
83  T sum = 0.0;
84  for (size_t i = 0; i < arr.size(); i++) {
85  sum += expf(arr[i] - m);
86  }
87  T offset = m + logf(sum);
88  for (size_t i = 0; i < arr.size(); i++) {
89  arr[i] = expf(arr[i] - offset);
90  }
91  return;
92  }
Double_t sum
Definition: plot.C:31
void SemanticDecoder::writeEmptyToEvent ( art::Event e,
const vector< vector< size_t >> &  idsmap 
)
overridevirtual

writeEmptyToEvent function

Parameters
art::Eventevent record

Implements DecoderToolBase.

Definition at line 65 of file SemanticDecoder_tool.cc.

References categories, trkf::fill(), hitInput, DecoderToolBase::instancename, art::InputTag::label(), art::Event::put(), and util::size().

Referenced by declareProducts().

66 {
67  //
68  auto semtdes = std::make_unique<MVADescription<5>>(hitInput.label(), instancename, categories);
69  e.put(std::move(semtdes), instancename);
70  //
71  size_t size = 0;
72  for (auto& v : idsmap)
73  size += v.size();
74  std::array<float, 5> arr;
75  std::fill(arr.begin(), arr.end(), -1.);
76  auto semtcol = std::make_unique<vector<FeatureVector<5>>>(size, FeatureVector<5>(arr));
77  e.put(std::move(semtcol), instancename);
78  //
79 }
art::InputTag hitInput
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
std::string const & label() const noexcept
Definition: InputTag.cc:79
std::vector< std::string > categories
void fill(const art::PtrVector< recob::Hit > &hits, int only_plane)
std::string instancename
void SemanticDecoder::writeToEvent ( art::Event e,
const vector< vector< size_t >> &  idsmap,
const vector< NuGraphOutput > &  infer_output 
)
overridevirtual

Decoder function.

Parameters
art::Eventevent record for decoder

Implements DecoderToolBase.

Definition at line 81 of file SemanticDecoder_tool.cc.

References categories, DecoderToolBase::debug, DEFINE_ART_CLASS_TOOL, trkf::fill(), hitInput, DecoderToolBase::instancename, art::InputTag::label(), DecoderToolBase::outputname, DecoderToolBase::planes, DecoderToolBase::printVector(), art::Event::put(), util::size(), and DecoderToolBase::softmax().

Referenced by declareProducts().

84 {
85  //
86  auto semtdes = std::make_unique<MVADescription<5>>(hitInput.label(), instancename, categories);
87  e.put(std::move(semtdes), instancename);
88  //
89  size_t size = 0;
90  for (auto& v : idsmap)
91  size += v.size();
92  std::array<float, 5> arr;
93  std::fill(arr.begin(), arr.end(), -1.);
94  auto semtcol = std::make_unique<vector<FeatureVector<5>>>(size, FeatureVector<5>(arr));
95 
96  size_t n_cols = categories.size();
97  for (size_t p = 0; p < planes.size(); p++) {
98  //
99  const std::vector<float>* x_semantic_data = 0;
100  for (auto& io : infer_output) {
101  if (io.output_name == outputname + planes[p]) x_semantic_data = &io.output_vec;
102  }
103  if (debug) {
104  std::cout << outputname + planes[p] << std::endl;
105  printVector(*x_semantic_data);
106  }
107 
108  torch::TensorOptions options = torch::TensorOptions().dtype(torch::kFloat32);
109  size_t n_rows = x_semantic_data->size() / n_cols;
110  const torch::Tensor s =
111  torch::from_blob(const_cast<float*>(x_semantic_data->data()),
112  {static_cast<int64_t>(n_rows), static_cast<int64_t>(n_cols)},
113  options);
114 
115  for (int i = 0; i < s.sizes()[0]; ++i) {
116  size_t idx = idsmap[p][i];
117  std::array<float, 5> input;
118  for (size_t j = 0; j < n_cols; ++j)
119  input[j] = s[i][j].item<float>();
120  softmax(input);
121  FeatureVector<5> semt = FeatureVector<5>(input);
122  (*semtcol)[idx] = semt;
123  }
124  }
125  e.put(std::move(semtcol), instancename);
126 }
vector< std::string > planes
art::InputTag hitInput
std::string outputname
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
std::string const & label() const noexcept
Definition: InputTag.cc:79
std::vector< std::string > categories
void fill(const art::PtrVector< recob::Hit > &hits, int only_plane)
void printVector(const std::vector< float > &vec)
std::string instancename
void softmax(std::array< T, N > &arr)

Member Data Documentation

std::vector<std::string> SemanticDecoder::categories
private

Definition at line 55 of file SemanticDecoder_tool.cc.

Referenced by writeEmptyToEvent(), and writeToEvent().

bool DecoderToolBase::debug
protectedinherited
art::InputTag SemanticDecoder::hitInput
private

Definition at line 56 of file SemanticDecoder_tool.cc.

Referenced by SemanticDecoder(), writeEmptyToEvent(), and writeToEvent().

std::string DecoderToolBase::outputname
protectedinherited

Definition at line 104 of file DecoderToolBase.h.

Referenced by FilterDecoder::writeToEvent(), and writeToEvent().

vector<std::string> DecoderToolBase::planes
protectedinherited

Definition at line 102 of file DecoderToolBase.h.

Referenced by FilterDecoder::writeToEvent(), and writeToEvent().


The documentation for this class was generated from the following file: