|
95 | 95 | #include "lardataobj/RecoBase/Vertex.h" |
96 | 96 | #include "lardataobj/RecoBase/Shower.h" |
97 | 97 | #include "lardataobj/RecoBase/MCSFitResult.h" |
| 98 | +#include "lardataobj/RecoBase/Cluster.h" |
| 99 | +#include "lardataobj/AnalysisBase/MVAOutput.h" |
98 | 100 |
|
99 | 101 | #include "nusimdata/SimulationBase/MCFlux.h" |
100 | 102 | #include "nusimdata/SimulationBase/MCTruth.h" |
@@ -1731,6 +1733,17 @@ void CAFMaker::produce(art::Event& evt) noexcept { |
1731 | 1733 | } |
1732 | 1734 | } |
1733 | 1735 |
|
| 1736 | + // nu graph |
| 1737 | + std::vector< art::Handle<std::vector<unsigned int>> > ng2_slice_hit_map_handle(pandora_tag_suffixes.size()); |
| 1738 | + std::vector< art::Handle<std::vector<anab::FeatureVector<1>>> > ng2_filter_handle(pandora_tag_suffixes.size()); |
| 1739 | + std::vector< art::Handle<std::vector<anab::FeatureVector<5>>> > ng2_semantic_handle(pandora_tag_suffixes.size()); |
| 1740 | + for (unsigned i_tag = 0; i_tag < pandora_tag_suffixes.size(); i_tag++) { |
| 1741 | + const std::string &pandora_tag_suffix = pandora_tag_suffixes[i_tag]; |
| 1742 | + GetByLabelIfExists(evt, fParams.NuGraphSliceHitLabel().encode() + pandora_tag_suffix, ng2_slice_hit_map_handle[i_tag]); |
| 1743 | + GetByLabelIfExists(evt, fParams.NuGraphFilterLabel().label() + pandora_tag_suffix + ":" + fParams.NuGraphFilterLabel().instance(), ng2_filter_handle[i_tag]); |
| 1744 | + GetByLabelIfExists(evt, fParams.NuGraphSemanticLabel().label() + pandora_tag_suffix + ":" + fParams.NuGraphSemanticLabel().instance(), ng2_semantic_handle[i_tag]); |
| 1745 | + } |
| 1746 | + |
1734 | 1747 | // The Standard Record |
1735 | 1748 | // Branch entry definition -- contains list of slices, CRT information, and truth information |
1736 | 1749 | StandardRecord rec; |
@@ -1787,6 +1800,18 @@ void CAFMaker::produce(art::Event& evt) noexcept { |
1787 | 1800 | } |
1788 | 1801 | } |
1789 | 1802 |
|
| 1803 | + std::vector<art::Ptr<anab::FeatureVector<1>>> ng2_filter_vec; |
| 1804 | + std::vector<art::Ptr<anab::FeatureVector<5>>> ng2_semantic_vec; |
| 1805 | + if (ng2_filter_handle[producer].isValid()) { |
| 1806 | + art::fill_ptr_vector(ng2_filter_vec,ng2_filter_handle[producer]); |
| 1807 | + } |
| 1808 | + if (ng2_semantic_handle[producer].isValid()) { |
| 1809 | + art::fill_ptr_vector(ng2_semantic_vec,ng2_semantic_handle[producer]); |
| 1810 | + } |
| 1811 | + if (ng2_slice_hit_map_handle[producer].isValid()) { |
| 1812 | + FillSliceNuGraph(slcHits,*ng2_slice_hit_map_handle[producer],ng2_filter_vec,ng2_semantic_vec,recslc); |
| 1813 | + } |
| 1814 | + |
1790 | 1815 | art::FindManyP<sbn::OpT0Finder> fmOpT0 = |
1791 | 1816 | FindManyPStrict<sbn::OpT0Finder>(sliceList, evt, fParams.OpT0Label() + slice_tag_suff); |
1792 | 1817 | std::vector<art::Ptr<sbn::OpT0Finder>> slcOpT0; |
@@ -1833,6 +1858,25 @@ void CAFMaker::produce(art::Event& evt) noexcept { |
1833 | 1858 | art::FindManyP<recob::PFParticle> fmSpacePointPFPs = |
1834 | 1859 | FindManyPStrict<recob::PFParticle>(slcSpacePoints, evt, fParams.PFParticleLabel() + slice_tag_suff); |
1835 | 1860 |
|
| 1861 | + art::FindManyP<recob::Cluster> fmPFPClusters = |
| 1862 | + FindManyPStrict<recob::Cluster>(fmPFPart, evt, fParams.PFParticleLabel() + slice_tag_suff); |
| 1863 | + |
| 1864 | + std::vector<std::vector<art::Ptr<recob::Hit>>> fmPFPartHits; |
| 1865 | + // make Ptr's to clusters for cluster -> other object associations |
| 1866 | + if (fmPFPClusters.isValid()) { |
| 1867 | + for (size_t ipf=0; ipf<fmPFPart.size();++ipf) { |
| 1868 | + std::vector<art::Ptr<recob::Hit>> pfphits; |
| 1869 | + std::vector<art::Ptr<recob::Cluster>> pfclusters = fmPFPClusters.at(ipf); |
| 1870 | + art::FindManyP<recob::Hit> fmCluHits = FindManyPStrict<recob::Hit>(pfclusters, evt, fParams.PFParticleLabel() + slice_tag_suff); |
| 1871 | + for (size_t icl=0; icl<fmCluHits.size();icl++) { |
| 1872 | + for (auto hit : fmCluHits.at(icl)) { |
| 1873 | + pfphits.push_back(hit); |
| 1874 | + } |
| 1875 | + } |
| 1876 | + fmPFPartHits.push_back(pfphits); |
| 1877 | + } |
| 1878 | + } |
| 1879 | + |
1836 | 1880 | art::FindManyP<recob::Shower> fmShower = |
1837 | 1881 | FindManyPStrict<recob::Shower>(fmPFPart, evt, fParams.RecoShowerLabel() + slice_tag_suff); |
1838 | 1882 |
|
@@ -2145,6 +2189,10 @@ void CAFMaker::produce(art::Event& evt) noexcept { |
2145 | 2189 | FillCNNScores(thisParticle, cnnScores, pfp); |
2146 | 2190 | } |
2147 | 2191 |
|
| 2192 | + if (ng2_slice_hit_map_handle[producer].isValid()) { |
| 2193 | + FillPFPNuGraph(*ng2_slice_hit_map_handle[producer], ng2_filter_vec, ng2_semantic_vec, fmPFPartHits.at(iPart), pfp); |
| 2194 | + } |
| 2195 | + |
2148 | 2196 | if (!thisTrack.empty()) { // it has a track! |
2149 | 2197 | assert(thisTrack.size() == 1); |
2150 | 2198 |
|
|
0 commit comments