From 8d8f314fdd52cc5e70f386837a5b49edde05df3b Mon Sep 17 00:00:00 2001 From: Anna Heggestuen Date: Tue, 13 Jun 2023 23:59:43 -0500 Subject: [PATCH 01/22] fill CAFs with CRT-PMT Matching information --- sbncode/CAFMaker/CAFMakerParams.h | 6 +++++ sbncode/CAFMaker/CAFMaker_module.cc | 19 ++++++++++++++++ sbncode/CAFMaker/FillReco.cxx | 35 +++++++++++++++++++++++++++++ sbncode/CAFMaker/FillReco.h | 4 ++++ 4 files changed, 64 insertions(+) diff --git a/sbncode/CAFMaker/CAFMakerParams.h b/sbncode/CAFMaker/CAFMakerParams.h index ad75a102d..e63217132 100644 --- a/sbncode/CAFMaker/CAFMakerParams.h +++ b/sbncode/CAFMaker/CAFMakerParams.h @@ -250,6 +250,12 @@ namespace caf Comment("Label of sbn CRT tracks."), "crttrack" // same for icarus and sbnd }; + + Atom CRTPMTLabel { + Name("CRTPMTLabel"), + Comment("Label for the CRTPMT Matched variables from the crtpmt data product"), + "crtpmt" // this variable exists in icaruscode, pretty sure it does not yet exist in sbnd + }; Atom OpFlashLabel { Name("OpFlashLabel"), diff --git a/sbncode/CAFMaker/CAFMaker_module.cc b/sbncode/CAFMaker/CAFMaker_module.cc index 46a4eaea9..fb8fcdb42 100644 --- a/sbncode/CAFMaker/CAFMaker_module.cc +++ b/sbncode/CAFMaker/CAFMaker_module.cc @@ -1313,6 +1313,23 @@ void CAFMaker::produce(art::Event& evt) noexcept { } } + // Get all of the CRTPMT Matches .. + std::vector srcrtpmtmatches; + std::cout << "srcrtpmtmatches.size = " << srcrtpmtmatches.size() << "\n"; + art::Handle> crtpmtmatch_handle; + GetByLabelStrict(evt, fParams.CRTPMTLabel(), crtpmtmatch_handle); + if(crtpmtmatch_handle.isValid()){ + std::cout << "valid handle! label: " << fParams.CRTPMTLabel() << "\n"; + const std::vector &crtpmtmatches = *crtpmtmatch_handle; + for (unsigned i = 0; i < crtpmtmatches.size(); i++) { + srcrtpmtmatches.emplace_back(); + FillCRTPMTMatch(crtpmtmatches[i],srcrtpmtmatches.back()); + } + } + else{ + std::cout << "crtpmtmatch_handle.isNOTValid!\n"; + } + // Get all of the OpFlashes std::vector srflashes; @@ -1832,6 +1849,8 @@ void CAFMaker::produce(art::Event& evt) noexcept { rec.true_particles = true_particles; } rec.ntrue_particles = true_particles.size(); + rec.crtpmt_matches = srcrtpmtmatches; + rec.ncrtpmt_matches = srcrtpmtmatches.size(); // Fix the Reference time // diff --git a/sbncode/CAFMaker/FillReco.cxx b/sbncode/CAFMaker/FillReco.cxx index 236e56d20..d6995ca74 100644 --- a/sbncode/CAFMaker/FillReco.cxx +++ b/sbncode/CAFMaker/FillReco.cxx @@ -112,6 +112,41 @@ namespace caf srtrack.hitb.plane = track.plane2; } + void FillCRTPMTMatch(const sbn::crt::CRTPMTMatching &match, + caf::SRCRTPMTMatch &srmatch, + bool allowEmpty){ + // allowEmpty does not (yet) matter here + (void) allowEmpty; + //srmatch.setDefault(); + std::cout << "filling CRTPMT Match : flash time = " << match.flashTime << "\n"; + srmatch.flashID = match.flashID; + srmatch.flashTime_us = match.flashTime; + srmatch.flashGateTime = match.flashGateTime; + srmatch.firstOpHitPeakTime = match.firstOpHitPeakTime; + srmatch.firstOpHitStartTime = match.firstOpHitStartTime; + srmatch.flashInGate = match.flashInGate; + srmatch.flashInBeam = match.flashInBeam; + srmatch.flashPE = match.flashPE; + srmatch.flashPosition = SRVector3D (match.flashPosition.X(), match.flashPosition.Y(), match.flashPosition.Z()); + srmatch.flashYWidth = match.flashYWidth; + srmatch.flashZWidth = match.flashZWidth; + srmatch.flashClassification = static_cast(match.flashClassification); + //srmatch.flashClassification = match.flashClassification; + std::cout << "match type : " << std::to_string(static_cast(match.flashClassification)) << "\n"; + std::cout << "matchedCRThits.size : "<< match.matchedCRTHits.size() << "\n"; + for(const auto& matchedCRTHit : match.matchedCRTHits){ + std::cout << "CRTPMTTimeDiff = "<< matchedCRTHit.PMTTimeDiff << "\n"; + caf::SRMatchedCRT matchedCRT; + matchedCRT.PMTTimeDiff = matchedCRTHit.PMTTimeDiff; + matchedCRT.time = matchedCRTHit.time; + matchedCRT.sys = matchedCRTHit.sys; + matchedCRT.region = matchedCRTHit.region; + srmatch.matchedCRTHits.push_back(matchedCRT); + } + std::cout << "srmatch.matchedCRTHits.size = " << srmatch.matchedCRTHits.size() << "\n"; + } + + void FillOpFlash(const recob::OpFlash &flash, std::vector const& hits, int cryo, diff --git a/sbncode/CAFMaker/FillReco.h b/sbncode/CAFMaker/FillReco.h index eff2802d7..c2fcf3056 100644 --- a/sbncode/CAFMaker/FillReco.h +++ b/sbncode/CAFMaker/FillReco.h @@ -35,6 +35,7 @@ #include "sbnobj/Common/Reco/CRUMBSResult.h" #include "sbnobj/Common/CRT/CRTHit.hh" #include "sbnobj/Common/CRT/CRTTrack.hh" +#include "sbnobj/Common/CRT/CRTPMTMatching.hh" #include "nusimdata/SimulationBase/MCParticle.h" #include "nusimdata/SimulationBase/MCTruth.h" @@ -188,6 +189,9 @@ namespace caf int cryo, caf::SROpFlash &srflash, bool allowEmpty = false); + void FillCRTPMTMatch(const sbn::crt::CRTPMTMatching &match, + caf::SRCRTPMTMatch &srmatch, + bool allowEmpty = false); template void CopyPropertyIfSet( const std::map& props, const std::string& search, U& value ); From 5bda683230ec5fe4474c37e626b2255fc6e396e0 Mon Sep 17 00:00:00 2001 From: Anna Heggestuen Date: Fri, 16 Jun 2023 16:57:44 -0500 Subject: [PATCH 02/22] hope this fixes the CRT T0 and T1 time references in CAFMaker to work for data and MC --- sbncode/CAFMaker/CAFMaker_module.cc | 7 +++++-- sbncode/CAFMaker/FillReco.cxx | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/sbncode/CAFMaker/CAFMaker_module.cc b/sbncode/CAFMaker/CAFMaker_module.cc index fb8fcdb42..342bcd5df 100644 --- a/sbncode/CAFMaker/CAFMaker_module.cc +++ b/sbncode/CAFMaker/CAFMaker_module.cc @@ -1289,8 +1289,11 @@ void CAFMaker::produce(art::Event& evt) noexcept { art::Handle> crthits_handle; GetByLabelStrict(evt, fParams.CRTHitLabel(), crthits_handle); // fill into event - int64_t CRT_T0_reference_time = fParams.ReferenceCRTT0ToBeam() ? -srtrigger.beam_gate_time_abs : 0; // ns, signed - double CRT_T1_reference_time = fParams.ReferenceCRTT1FromTriggerToBeam() ? srtrigger.trigger_within_gate : 0.; + //int64_t CRT_T0_reference_time = fParams.ReferenceCRTT0ToBeam() ? -srtrigger.beam_gate_time_abs : 0; // ns, signed + //double CRT_T1_reference_time = fParams.ReferenceCRTT1FromTriggerToBeam() ? srtrigger.trigger_within_gate : 0.; + int64_t CRT_T0_reference_time = isRealData ? -srtrigger.beam_gate_time_abs : -fParams.CRTSimT0Offset(); + double CRT_T1_reference_time = isRealData ? srtrigger.trigger_within_gate : -fParams.CRTSimT0Offset(); + if (crthits_handle.isValid()) { const std::vector &crthits = *crthits_handle; for (unsigned i = 0; i < crthits.size(); i++) { diff --git a/sbncode/CAFMaker/FillReco.cxx b/sbncode/CAFMaker/FillReco.cxx index d6995ca74..4a68bd0e7 100644 --- a/sbncode/CAFMaker/FillReco.cxx +++ b/sbncode/CAFMaker/FillReco.cxx @@ -68,7 +68,7 @@ namespace caf bool allowEmpty) { srhit.t0 = ( (long long)(hit.ts0()) /*u_int64_t to int64_t*/ + CRT_T0_reference_time )/1000.; - srhit.t1 = hit.ts1()/1000.-CRT_T1_reference_time; // ns -> us + srhit.t1 = hit.ts1()/1000.+CRT_T1_reference_time; // ns -> us srhit.time = use_ts0 ? srhit.t0 : srhit.t1; srhit.position.x = hit.x_pos; From 1407062d2682bad2e50068d738c9117ae0fbd3f9 Mon Sep 17 00:00:00 2001 From: Joseph Zennamo Date: Wed, 21 Jun 2023 16:16:26 -0500 Subject: [PATCH 03/22] Updated to TriggerV3 --- .../BNBRetriever/BNBRetriever_module.cc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sbncode/BeamSpillInfoRetriever/BNBRetriever/BNBRetriever_module.cc b/sbncode/BeamSpillInfoRetriever/BNBRetriever/BNBRetriever_module.cc index a907341d5..db124cf36 100644 --- a/sbncode/BeamSpillInfoRetriever/BNBRetriever/BNBRetriever_module.cc +++ b/sbncode/BeamSpillInfoRetriever/BNBRetriever/BNBRetriever_module.cc @@ -20,7 +20,7 @@ #include "larcorealg/CoreUtils/counter.h" #include "artdaq-core/Data/Fragment.hh" -#include "sbndaq-artdaq-core/Overlays/ICARUS/ICARUSTriggerV2Fragment.hh" +#include "sbndaq-artdaq-core/Overlays/ICARUS/ICARUSTriggerV3Fragment.hh" #include "sbnobj/Common/POTAccounting/BNBSpillInfo.h" @@ -245,23 +245,23 @@ sbn::BNBRetriever::TriggerInfo_t sbn::BNBRetriever::extractTriggerInfo(art::Even // 2. the time of the previously triggered event, t_previous_event (NOTE: Events are non-sequential!) // 3. the number of beam spills since the previously triggered event, number_of_gates_since_previous_event - auto const & raw_data = e.getProduct< std::vector >({ raw_data_label, "ICARUSTriggerV2" }); + auto const & raw_data = e.getProduct< std::vector >({ raw_data_label, "ICARUSTriggerV3" }); TriggerInfo_t triggerInfo; for(auto raw_datum : raw_data){ uint64_t artdaq_ts = raw_datum.timestamp(); - icarus::ICARUSTriggerV2Fragment frag(raw_datum); + icarus::ICARUSTriggerV3Fragment frag(raw_datum); std::string data = frag.GetDataString(); char *buffer = const_cast(data.c_str()); - icarus::ICARUSTriggerInfo datastream_info = icarus::parse_ICARUSTriggerV2String(buffer); + icarus::ICARUSTriggerInfo datastream_info = icarus::parse_ICARUSTriggerV3String(buffer); triggerInfo.gate_type = datastream_info.gate_type; - triggerInfo.number_of_gates_since_previous_event = frag.getDeltaGatesBNB(); + triggerInfo.number_of_gates_since_previous_event = frag.getDeltaGatesBNBMaj(); triggerInfo.t_current_event = static_cast(artdaq_ts)/(1000000000.0); //check this offset... if(triggerInfo.gate_type == 1) - triggerInfo.t_previous_event = (static_cast(frag.getLastTimestampBNB()))/(1e9); + triggerInfo.t_previous_event = (static_cast(frag.getLastTimestampBNBMaj()))/(1e9); else triggerInfo.t_previous_event = (static_cast(frag.getLastTimestampOther()))/(1000000000.0); From f24eba3daeb479839a3a7ce8a46d3a3c6d639915 Mon Sep 17 00:00:00 2001 From: Joseph Zennamo Date: Wed, 21 Jun 2023 17:28:50 -0500 Subject: [PATCH 04/22] Updated to Trigger V3 --- .../BNBEXTRetriever_module.cc} | 41 +-- .../CMakeLists.txt | 2 +- sbncode/BeamSpillInfoRetriever/CMakeLists.txt | 3 +- .../NuMIEXTRetriever/CMakeLists.txt | 20 ++ .../NuMIEXTRetriever_module.cc | 155 +++++++++++ .../NuMIRetriever/NuMIRetriever_module.cc | 254 +++++++++--------- .../job/bnbextcountinfo.fcl | 10 + .../job/extcountinfo.fcl | 10 - .../job/numiextcountinfo.fcl | 10 + ...extinfo_sbn.fcl => run_bnbextinfo_sbn.fcl} | 10 +- .../job/run_numiextinfo_sbn.fcl | 32 +++ 11 files changed, 383 insertions(+), 164 deletions(-) rename sbncode/BeamSpillInfoRetriever/{EXTRetriever/EXTRetriever_module.cc => BNBEXTRetriever/BNBEXTRetriever_module.cc} (79%) rename sbncode/BeamSpillInfoRetriever/{EXTRetriever => BNBEXTRetriever}/CMakeLists.txt (92%) create mode 100644 sbncode/BeamSpillInfoRetriever/NuMIEXTRetriever/CMakeLists.txt create mode 100644 sbncode/BeamSpillInfoRetriever/NuMIEXTRetriever/NuMIEXTRetriever_module.cc create mode 100644 sbncode/BeamSpillInfoRetriever/job/bnbextcountinfo.fcl delete mode 100644 sbncode/BeamSpillInfoRetriever/job/extcountinfo.fcl create mode 100644 sbncode/BeamSpillInfoRetriever/job/numiextcountinfo.fcl rename sbncode/BeamSpillInfoRetriever/job/{run_extinfo_sbn.fcl => run_bnbextinfo_sbn.fcl} (53%) create mode 100644 sbncode/BeamSpillInfoRetriever/job/run_numiextinfo_sbn.fcl diff --git a/sbncode/BeamSpillInfoRetriever/EXTRetriever/EXTRetriever_module.cc b/sbncode/BeamSpillInfoRetriever/BNBEXTRetriever/BNBEXTRetriever_module.cc similarity index 79% rename from sbncode/BeamSpillInfoRetriever/EXTRetriever/EXTRetriever_module.cc rename to sbncode/BeamSpillInfoRetriever/BNBEXTRetriever/BNBEXTRetriever_module.cc index 77d0661e1..9f14e29d3 100644 --- a/sbncode/BeamSpillInfoRetriever/EXTRetriever/EXTRetriever_module.cc +++ b/sbncode/BeamSpillInfoRetriever/BNBEXTRetriever/BNBEXTRetriever_module.cc @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////////////////// -// Class: EXTRetriever +// Class: BNBEXTRetriever // Plugin Type: producer -// File: EXTRetriever_module.cc +// File: BNBEXTRetriever_module.cc // // Created by hand Thurs June 24th 2021 by J. Zennamo (FNAL) // @@ -22,7 +22,7 @@ #include "larcorealg/Geometry/Exceptions.h" #include "artdaq-core/Data/Fragment.hh" -#include "sbndaq-artdaq-core/Overlays/ICARUS/ICARUSTriggerUDPFragment.hh" +#include "sbndaq-artdaq-core/Overlays/ICARUS/ICARUSTriggerV3Fragment.hh" #include "lardataalg/DetectorInfo/DetectorPropertiesStandard.h" #include "lardata/DetectorInfoServices/DetectorPropertiesService.h" @@ -36,10 +36,10 @@ #include namespace sbn { - class EXTRetriever; + class BNBEXTRetriever; } -class sbn::EXTRetriever : public art::EDProducer { +class sbn::BNBEXTRetriever : public art::EDProducer { public: struct Config { @@ -57,15 +57,15 @@ class sbn::EXTRetriever : public art::EDProducer { using Parameters = art::EDProducer::Table; - explicit EXTRetriever(Parameters const& params); + explicit BNBEXTRetriever(Parameters const& params); // The compiler-generated destructor is fine for non-base // classes without bare pointers or other resource use. // Plugins should not be copied or assigned. - EXTRetriever(EXTRetriever const&) = delete; - EXTRetriever(EXTRetriever&&) = delete; - EXTRetriever& operator=(EXTRetriever const&) = delete; - EXTRetriever& operator=(EXTRetriever&&) = delete; + BNBEXTRetriever(BNBEXTRetriever const&) = delete; + BNBEXTRetriever(BNBEXTRetriever&&) = delete; + BNBEXTRetriever& operator=(BNBEXTRetriever const&) = delete; + BNBEXTRetriever& operator=(BNBEXTRetriever&&) = delete; // Required functions. void produce(art::Event& e) override; @@ -82,7 +82,7 @@ class sbn::EXTRetriever : public art::EDProducer { }; -sbn::EXTRetriever::EXTRetriever(Parameters const& params) +sbn::BNBEXTRetriever::BNBEXTRetriever(Parameters const& params) : EDProducer{params}, raw_data_label_(params().RawDataLabel()) { @@ -91,7 +91,7 @@ sbn::EXTRetriever::EXTRetriever(Parameters const& params) TotalEXTCounts = 0; } -void sbn::EXTRetriever::produce(art::Event& e) +void sbn::BNBEXTRetriever::produce(art::Event& e) { //Here we read in the artdaq Fragments and extract three pieces of information: @@ -100,19 +100,22 @@ void sbn::EXTRetriever::produce(art::Event& e) // 3. the number of beam spills since the previously triggered event, number_of_gates_since_previous_event int gate_type = 0; - auto const & raw_data = e.getProduct< std::vector >({ raw_data_label_, "ICARUSTriggerUDP" }); + auto const & raw_data = e.getProduct< std::vector >({ raw_data_label_, "ICARUSTriggerV3" }); unsigned int number_of_gates_since_previous_event = 0; for(auto raw_datum : raw_data){ - icarus::ICARUSTriggerUDPFragment frag(raw_datum); + icarus::ICARUSTriggerV3Fragment frag(raw_datum); std::string data = frag.GetDataString(); char *buffer = const_cast(data.c_str()); - icarus::ICARUSTriggerInfo datastream_info = icarus::parse_ICARUSTriggerString(buffer); + icarus::ICARUSTriggerInfo datastream_info = icarus::parse_ICARUSTriggerV3String(buffer); gate_type = datastream_info.gate_type; - number_of_gates_since_previous_event = frag.getDeltaGatesBNB(); + number_of_gates_since_previous_event = frag.getDeltaGatesBNBOffMaj(); + std::cout << "BNB OFF MAJ : " << frag.getDeltaGatesBNBOffMaj() << std::endl; + std::cout << "NuMI OFF MAJ : " << frag.getDeltaGatesNuMIOffMaj() << std::endl; + } //We only want to process EXT gates, i.e. type 3 @@ -135,13 +138,13 @@ void sbn::EXTRetriever::produce(art::Event& e) } //end loop over events -void sbn::EXTRetriever::beginSubRun(art::SubRun& sr) +void sbn::BNBEXTRetriever::beginSubRun(art::SubRun& sr) { return; } //____________________________________________________________________________ -void sbn::EXTRetriever::endSubRun(art::SubRun& sr) +void sbn::BNBEXTRetriever::endSubRun(art::SubRun& sr) { // We will add all of the EXTCountInfo data-products to the // art::SubRun so it persists @@ -152,4 +155,4 @@ void sbn::EXTRetriever::endSubRun(art::SubRun& sr) return; } -DEFINE_ART_MODULE(sbn::EXTRetriever) +DEFINE_ART_MODULE(sbn::BNBEXTRetriever) diff --git a/sbncode/BeamSpillInfoRetriever/EXTRetriever/CMakeLists.txt b/sbncode/BeamSpillInfoRetriever/BNBEXTRetriever/CMakeLists.txt similarity index 92% rename from sbncode/BeamSpillInfoRetriever/EXTRetriever/CMakeLists.txt rename to sbncode/BeamSpillInfoRetriever/BNBEXTRetriever/CMakeLists.txt index 316419a52..1c49f8646 100644 --- a/sbncode/BeamSpillInfoRetriever/EXTRetriever/CMakeLists.txt +++ b/sbncode/BeamSpillInfoRetriever/BNBEXTRetriever/CMakeLists.txt @@ -1,5 +1,5 @@ -cet_build_plugin(EXTRetriever art::module +cet_build_plugin(BNBEXTRetriever art::module LIBRARIES art::Persistency_Common art::Utilities canvas::canvas diff --git a/sbncode/BeamSpillInfoRetriever/CMakeLists.txt b/sbncode/BeamSpillInfoRetriever/CMakeLists.txt index 1a6fecf80..0caadf2a5 100644 --- a/sbncode/BeamSpillInfoRetriever/CMakeLists.txt +++ b/sbncode/BeamSpillInfoRetriever/CMakeLists.txt @@ -1,6 +1,7 @@ add_subdirectory(BNBRetriever) add_subdirectory(NuMIRetriever) -add_subdirectory(EXTRetriever) +add_subdirectory(BNBEXTRetriever) +add_subdirectory(NuMIEXTRetriever) add_subdirectory(job) install_headers() diff --git a/sbncode/BeamSpillInfoRetriever/NuMIEXTRetriever/CMakeLists.txt b/sbncode/BeamSpillInfoRetriever/NuMIEXTRetriever/CMakeLists.txt new file mode 100644 index 000000000..f11657b00 --- /dev/null +++ b/sbncode/BeamSpillInfoRetriever/NuMIEXTRetriever/CMakeLists.txt @@ -0,0 +1,20 @@ + +cet_build_plugin(NuMIEXTRetriever art::module + LIBRARIES + art::Persistency_Common + art::Utilities canvas::canvas + cetlib::cetlib cetlib_except::cetlib_except + messagefacility::MF_MessageLogger + sbnobj::Common_POTAccounting + sbndaq_artdaq_core::sbndaq-artdaq-core_Overlays_Common + sbndaq_artdaq_core::sbndaq-artdaq-core_Overlays + sbndaq_artdaq_core::sbndaq-artdaq-core_Overlays_ICARUS + artdaq_core::artdaq-core_Utilities + lardata::Utilities + larcore::Geometry_AuxDetGeometry_service +) + +install_headers() +install_fhicl() +install_source() + diff --git a/sbncode/BeamSpillInfoRetriever/NuMIEXTRetriever/NuMIEXTRetriever_module.cc b/sbncode/BeamSpillInfoRetriever/NuMIEXTRetriever/NuMIEXTRetriever_module.cc new file mode 100644 index 000000000..7fdc974e2 --- /dev/null +++ b/sbncode/BeamSpillInfoRetriever/NuMIEXTRetriever/NuMIEXTRetriever_module.cc @@ -0,0 +1,155 @@ +//////////////////////////////////////////////////////////////////////// +// Class: NuMIEXTRetriever +// Plugin Type: producer +// File: NuMIEXTRetriever_module.cc +// +// Created by hand Thurs June 24th 2021 by J. Zennamo (FNAL) +// +//////////////////////////////////////////////////////////////////////// + +#include "art/Framework/Core/EDProducer.h" +#include "art/Framework/Core/ModuleMacros.h" +#include "art/Framework/Principal/Event.h" +#include "art/Framework/Principal/Handle.h" +#include "art/Framework/Principal/Run.h" +#include "art/Framework/Principal/SubRun.h" +#include "canvas/Utilities/InputTag.h" +#include "fhiclcpp/types/Atom.h" +#include "messagefacility/MessageLogger/MessageLogger.h" +#include "lardata/Utilities/AssociationUtil.h" +#include "lardataobj/Utilities/sparse_vector.h" +#include "larcoreobj/SimpleTypesAndConstants/RawTypes.h" +#include "larcorealg/Geometry/Exceptions.h" + +#include "artdaq-core/Data/Fragment.hh" +#include "sbndaq-artdaq-core/Overlays/ICARUS/ICARUSTriggerV3Fragment.hh" + +#include "lardataalg/DetectorInfo/DetectorPropertiesStandard.h" +#include "lardata/DetectorInfoServices/DetectorPropertiesService.h" +#include "sbnobj/Common/POTAccounting/EXTCountInfo.h" + +#include +#include +#include +#include +#include +#include + +namespace sbn { + class NuMIEXTRetriever; +} + +class sbn::NuMIEXTRetriever : public art::EDProducer { +public: + + struct Config { + + using Name = fhicl::Name; + using Comment = fhicl::Comment; + + fhicl::Atom RawDataLabel { + Name{ "raw_data_label" }, + Comment{ "art data product instance name for trigger information (product label is 'daq')" } + }; + + }; // Config + + using Parameters = art::EDProducer::Table; + + + explicit NuMIEXTRetriever(Parameters const& params); + // The compiler-generated destructor is fine for non-base + // classes without bare pointers or other resource use. + + // Plugins should not be copied or assigned. + NuMIEXTRetriever(NuMIEXTRetriever const&) = delete; + NuMIEXTRetriever(NuMIEXTRetriever&&) = delete; + NuMIEXTRetriever& operator=(NuMIEXTRetriever const&) = delete; + NuMIEXTRetriever& operator=(NuMIEXTRetriever&&) = delete; + + // Required functions. + void produce(art::Event& e) override; + void beginSubRun(art::SubRun& sr) override; + void endSubRun(art::SubRun& sr) override; + +private: + std::vector< sbn::EXTCountInfo > fOutExtInfos; + + // input labels + std::string raw_data_label_; + int TotalEXTCounts; + +}; + + +sbn::NuMIEXTRetriever::NuMIEXTRetriever(Parameters const& params) + : EDProducer{params}, + raw_data_label_(params().RawDataLabel()) +{ + + produces< std::vector< sbn::EXTCountInfo >, art::InSubRun >(); + TotalEXTCounts = 0; +} + +void sbn::NuMIEXTRetriever::produce(art::Event& e) +{ + + //Here we read in the artdaq Fragments and extract three pieces of information: + // 1. The time of the current event, t_current_event + // 2. the time of the previously triggered event, t_previous_event (NOTE: Events are non-sequential!) + // 3. the number of beam spills since the previously triggered event, number_of_gates_since_previous_event + + //int gate_type = 0; + auto const & raw_data = e.getProduct< std::vector >({ raw_data_label_, "ICARUSTriggerV3" }); + + unsigned int number_of_gates_since_previous_event = 0; + + for(auto raw_datum : raw_data){ + + icarus::ICARUSTriggerV3Fragment frag(raw_datum); + std::string data = frag.GetDataString(); + char *buffer = const_cast(data.c_str()); + icarus::ICARUSTriggerInfo datastream_info = icarus::parse_ICARUSTriggerV3String(buffer); + //gate_type = datastream_info.gate_type; + number_of_gates_since_previous_event = frag.getDeltaGatesNuMIOffMaj(); + + + } + + //We only want to process EXT gates, i.e. type 3 + + // Keep track of the number of beam gates the DAQ thinks + // are in this file + TotalEXTCounts += number_of_gates_since_previous_event; + + //Store everything in our data-product + sbn::EXTCountInfo extInfo; + extInfo.gates_since_last_trigger = number_of_gates_since_previous_event; + + fOutExtInfos.push_back(extInfo); + // We do not write these to the art::Events because + // we can filter events but want to keep all the POT + // information, so we'll write it to the SubRun + + +} //end loop over events + + +void sbn::NuMIEXTRetriever::beginSubRun(art::SubRun& sr) +{ + return; +} + +//____________________________________________________________________________ +void sbn::NuMIEXTRetriever::endSubRun(art::SubRun& sr) +{ + // We will add all of the EXTCountInfo data-products to the + // art::SubRun so it persists + auto p = std::make_unique< std::vector< sbn::EXTCountInfo > >(fOutExtInfos); + + sr.put(std::move(p)); + + return; +} + +DEFINE_ART_MODULE(sbn::NuMIEXTRetriever) diff --git a/sbncode/BeamSpillInfoRetriever/NuMIRetriever/NuMIRetriever_module.cc b/sbncode/BeamSpillInfoRetriever/NuMIRetriever/NuMIRetriever_module.cc index 84e4c6d03..a0eb1e48a 100644 --- a/sbncode/BeamSpillInfoRetriever/NuMIRetriever/NuMIRetriever_module.cc +++ b/sbncode/BeamSpillInfoRetriever/NuMIRetriever/NuMIRetriever_module.cc @@ -19,7 +19,7 @@ #include "larcorealg/Geometry/Exceptions.h" #include "artdaq-core/Data/Fragment.hh" -#include "sbndaq-artdaq-core/Overlays/ICARUS/ICARUSTriggerV2Fragment.hh" +#include "sbndaq-artdaq-core/Overlays/ICARUS/ICARUSTriggerV3Fragment.hh" #include "lardataalg/DetectorInfo/DetectorPropertiesStandard.h" #include "lardata/DetectorInfoServices/DetectorPropertiesService.h" @@ -104,9 +104,9 @@ void sbn::NuMIRetriever::produce(art::Event &e) // TODO: long-term goal -- can we fix this? if (e.event() == 1) return; - int gate_type = 0; + // int gate_type = 0; art::Handle< std::vector > raw_data_ptr; - e.getByLabel(raw_data_label_, "ICARUSTriggerV2", raw_data_ptr); + e.getByLabel(raw_data_label_, "ICARUSTriggerV3", raw_data_ptr); auto const & raw_data = (*raw_data_ptr); double t_current_event = 0; @@ -116,145 +116,143 @@ void sbn::NuMIRetriever::produce(art::Event &e) for(auto raw_datum : raw_data){ uint64_t artdaq_ts = raw_datum.timestamp(); - icarus::ICARUSTriggerV2Fragment frag(raw_datum); + icarus::ICARUSTriggerV3Fragment frag(raw_datum); std::string data = frag.GetDataString(); char *buffer = const_cast(data.c_str()); - icarus::ICARUSTriggerInfo datastream_info = icarus::parse_ICARUSTriggerV2String(buffer); - gate_type = datastream_info.gate_type; - number_of_gates_since_previous_event = frag.getDeltaGatesNuMI(); + icarus::ICARUSTriggerInfo datastream_info = icarus::parse_ICARUSTriggerV3String(buffer); + //gate_type = datastream_info.gate_type; + number_of_gates_since_previous_event = frag.getDeltaGatesNuMIMaj(); t_current_event = static_cast(artdaq_ts)/(1000000000.); //check this offset... - if(gate_type == 2) - t_previous_event = (static_cast(frag.getLastTimestampNuMI()))/(1000000000.); - else - t_previous_event = (static_cast(frag.getLastTimestampOther()))/(1000000000.); + + t_previous_event = (static_cast(frag.getLastTimestampNuMIMaj()))/(1000000000.); + } std::cout << std::setprecision(19) << "Previous : " << t_previous_event << ", Current : " << t_current_event << std::endl; //We only want to process NuMI gates, i.e. type 2 - if(gate_type == 2) - { - // Keep track of the number of beam gates the DAQ thinks - // are in this job - TotalBeamSpills += number_of_gates_since_previous_event; + + // Keep track of the number of beam gates the DAQ thinks + // are in this job + TotalBeamSpills += number_of_gates_since_previous_event; + + // Fill up the BFP cache with times starting at the previous event + // + // If the difference in time between events is bigger than the fcl-provided TimeWindow, then + // we won't be able to fill up the cache to be big enough. In that case, resize the window as + // necessary. + double this_window_size = t_current_event - t_previous_event + 2*fTimePad; + if (this_window_size > fTimeWindow) { + std::cout << "Resizing time window from: " << fTimeWindow << " to: " << this_window_size << std::endl; + fTimeWindow = this_window_size; + MakeBFP(); + } + + // DO NOT CHANGE THESE LINES OR THEIR ORDER + // If you really think you need to, please reach out to grayputnam uchicago.edu + bfp->FillCache(t_current_event + fTimePad); + bfp->FillCache(t_previous_event - fTimePad); + std::vector times_temps = bfp->GetTimeList(fDeviceUsedForTiming); + + int spill_count = 0; + // Iterating through each of the beamline times + for (size_t i = 0; i < times_temps.size(); i++) { - // Fill up the BFP cache with times starting at the previous event - // - // If the difference in time between events is bigger than the fcl-provided TimeWindow, then - // we won't be able to fill up the cache to be big enough. In that case, resize the window as - // necessary. - double this_window_size = t_current_event - t_previous_event + 2*fTimePad; - if (this_window_size > fTimeWindow) { - std::cout << "Resizing time window from: " << fTimeWindow << " to: " << this_window_size << std::endl; - fTimeWindow = this_window_size; - MakeBFP(); + // Only continue if these times are matched to our DAQ time + // plus or minus some time padding, currently using 3.3 ms + // which is half the Booster Rep Rate + if(e.event() != 1){//We already addressed the "first event" above + if(times_temps[i] > t_current_event){continue;} + if(times_temps[i] <= t_previous_event){continue;} } - - // DO NOT CHANGE THESE LINES OR THEIR ORDER - // If you really think you need to, please reach out to grayputnam uchicago.edu - bfp->FillCache(t_current_event + fTimePad); - bfp->FillCache(t_previous_event - fTimePad); - std::vector times_temps = bfp->GetTimeList(fDeviceUsedForTiming); - - int spill_count = 0; - // Iterating through each of the beamline times - for (size_t i = 0; i < times_temps.size(); i++) { - - // Only continue if these times are matched to our DAQ time - // plus or minus some time padding, currently using 3.3 ms - // which is half the Booster Rep Rate - if(e.event() != 1){//We already addressed the "first event" above - if(times_temps[i] > t_current_event){continue;} - if(times_temps[i] <= t_previous_event){continue;} - } - - //count found spills - spill_count++; - - //initialize all devices found in NuMISpillInfo.h in sbnobj - double HRNDIR = -1.; - double NSLINA = -1.; - double NSLINB = -1.; - double NSLINC = -1.; - double NSLIND = -1.; - double TOR101 = -1.; - double TORTGT = -1.; - double TR101D = -1.; - double TRTGTD = -1.; - std::vector< double > HP121; - std::vector< double > VP121; - std::vector< double > HPTGT; - std::vector< double > VPTGT; - std::vector< double > HITGT; - std::vector< double > VITGT; - std::vector< double > MTGTDS; - double TRTGTD_time = -1.; - std::cout << "Grabbing IFBeam info!" << std::endl; - try{bfp->GetNamedData(times_temps[i], "E:TRTGTD@",&TRTGTD,&TRTGTD_time);}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " << "got exception: " << we.what() << "\n";} - try{bfp->GetNamedData(times_temps[i], "E:TR101D",&TR101D);}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " << "got exception: " << we.what() << "\n";} - try{bfp->GetNamedData(times_temps[i], "E:HRNDIR",&HRNDIR);}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " << "got exception: " << we.what() << "\n";} - try{bfp->GetNamedData(times_temps[i], "E:NSLINA",&NSLINA);}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " << "got exception: " << we.what() << "\n";} - try{bfp->GetNamedData(times_temps[i], "E:NSLINB",&NSLINB);}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " << "got exception: " << we.what() << "\n";} - try{bfp->GetNamedData(times_temps[i], "E:NSLINC",&NSLINC);}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " << "got exception: " << we.what() << "\n";} - try{bfp->GetNamedData(times_temps[i], "E:NSLIND",&NSLIND);}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " << "got exception: " << we.what() << "\n";} - try{bfp->GetNamedData(times_temps[i], "E:TOR101",&TOR101);}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " << "got exception: " << we.what() << "\n";} - try{bfp->GetNamedData(times_temps[i], "E:TORTGT",&TORTGT);}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " << "got exception: " << we.what() << "\n";} - // BPM Positions and Intensities - they each have 7 elements - // First is an average value of a few batches (often 2,3,4) - // used for auto-tuning, so we should disregard it - - try{HP121 = bfp->GetNamedVector(times_temps[i], "E:HP121[]");}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " << "got exception: " << we.what() << "\n";} - try{VP121 = bfp->GetNamedVector(times_temps[i], "E:VP121[]");}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " <<"got exception: " << we.what() << "\n";} - try{HPTGT = bfp->GetNamedVector(times_temps[i], "E:HPTGT[]");}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " <<"got exception: " << we.what() << "\n";} - try{VPTGT = bfp->GetNamedVector(times_temps[i], "E:VPTGT[]");}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " <<"got exception: " << we.what() << "\n";} - try{HITGT = bfp->GetNamedVector(times_temps[i], "E:HITGT[]");}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " <<"got exception: " << we.what() << "\n";} - try{VITGT = bfp->GetNamedVector(times_temps[i], "E:VITGT[]");}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " <<"got exception: " << we.what() << "\n";} - try{MTGTDS = bfp->GetNamedVector(times_temps[i], "E:MTGTDS[]");}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " <<"got exception: " << we.what() << "\n";} - - std::cout << "Finished getting IFBeam info" << std::endl; - std::cout << "BFP Time: " << times_temps[i] << " TOROID Time: " << TRTGTD_time << " TOROID COUNT: " << TRTGTD << std::endl; - unsigned long int time_closest_int = (int) TRTGTD_time; - double time_closest_ns = (TRTGTD_time - time_closest_int)*1000000000; - - sbn::NuMISpillInfo NuMIbeamInfo; - NuMIbeamInfo.TORTGT = TORTGT*1e12; //include factor of 1e12 protons in POT calculation - NuMIbeamInfo.TOR101 = TOR101*1e12; //include factor of 1e12 protons in POT calculation - NuMIbeamInfo.TRTGTD = TRTGTD*1e12; //include factor of 1e12 protons in POT calculation - NuMIbeamInfo.TR101D = TR101D*1e12; //include factor of 1e12 protons in POT calculation - NuMIbeamInfo.HRNDIR = HRNDIR; - NuMIbeamInfo.NSLINA = NSLINA; - NuMIbeamInfo.NSLINB = NSLINB; - NuMIbeamInfo.NSLINC = NSLINC; - NuMIbeamInfo.NSLIND = NSLIND; - - NuMIbeamInfo.HP121 = HP121; - NuMIbeamInfo.VP121 = VP121; - NuMIbeamInfo.HPTGT = HPTGT; - NuMIbeamInfo.VPTGT = VPTGT; - NuMIbeamInfo.HITGT = HITGT; - NuMIbeamInfo.VITGT = VITGT; - NuMIbeamInfo.MTGTDS = MTGTDS; - - NuMIbeamInfo.time = times_temps[i]; - NuMIbeamInfo.event = e.event(); - NuMIbeamInfo.spill_time_s = time_closest_int; - NuMIbeamInfo.spill_time_ns = time_closest_ns; + + //count found spills + spill_count++; + + //initialize all devices found in NuMISpillInfo.h in sbnobj + double HRNDIR = -1.; + double NSLINA = -1.; + double NSLINB = -1.; + double NSLINC = -1.; + double NSLIND = -1.; + double TOR101 = -1.; + double TORTGT = -1.; + double TR101D = -1.; + double TRTGTD = -1.; + std::vector< double > HP121; + std::vector< double > VP121; + std::vector< double > HPTGT; + std::vector< double > VPTGT; + std::vector< double > HITGT; + std::vector< double > VITGT; + std::vector< double > MTGTDS; + double TRTGTD_time = -1.; + std::cout << "Grabbing IFBeam info!" << std::endl; + try{bfp->GetNamedData(times_temps[i], "E:TRTGTD@",&TRTGTD,&TRTGTD_time);}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " << "got exception: " << we.what() << "\n";} + try{bfp->GetNamedData(times_temps[i], "E:TR101D",&TR101D);}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " << "got exception: " << we.what() << "\n";} + try{bfp->GetNamedData(times_temps[i], "E:HRNDIR",&HRNDIR);}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " << "got exception: " << we.what() << "\n";} + try{bfp->GetNamedData(times_temps[i], "E:NSLINA",&NSLINA);}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " << "got exception: " << we.what() << "\n";} + try{bfp->GetNamedData(times_temps[i], "E:NSLINB",&NSLINB);}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " << "got exception: " << we.what() << "\n";} + try{bfp->GetNamedData(times_temps[i], "E:NSLINC",&NSLINC);}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " << "got exception: " << we.what() << "\n";} + try{bfp->GetNamedData(times_temps[i], "E:NSLIND",&NSLIND);}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " << "got exception: " << we.what() << "\n";} + try{bfp->GetNamedData(times_temps[i], "E:TOR101",&TOR101);}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " << "got exception: " << we.what() << "\n";} + try{bfp->GetNamedData(times_temps[i], "E:TORTGT",&TORTGT);}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " << "got exception: " << we.what() << "\n";} + // BPM Positions and Intensities - they each have 7 elements + // First is an average value of a few batches (often 2,3,4) + // used for auto-tuning, so we should disregard it + + try{HP121 = bfp->GetNamedVector(times_temps[i], "E:HP121[]");}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " << "got exception: " << we.what() << "\n";} + try{VP121 = bfp->GetNamedVector(times_temps[i], "E:VP121[]");}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " <<"got exception: " << we.what() << "\n";} + try{HPTGT = bfp->GetNamedVector(times_temps[i], "E:HPTGT[]");}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " <<"got exception: " << we.what() << "\n";} + try{VPTGT = bfp->GetNamedVector(times_temps[i], "E:VPTGT[]");}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " <<"got exception: " << we.what() << "\n";} + try{HITGT = bfp->GetNamedVector(times_temps[i], "E:HITGT[]");}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " <<"got exception: " << we.what() << "\n";} + try{VITGT = bfp->GetNamedVector(times_temps[i], "E:VITGT[]");}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " <<"got exception: " << we.what() << "\n";} + try{MTGTDS = bfp->GetNamedVector(times_temps[i], "E:MTGTDS[]");}catch (WebAPIException &we) {std::cout << "At time : " << times_temps[i] << " " <<"got exception: " << we.what() << "\n";} + + std::cout << "Finished getting IFBeam info" << std::endl; + std::cout << "BFP Time: " << times_temps[i] << " TOROID Time: " << TRTGTD_time << " TOROID COUNT: " << TRTGTD << std::endl; + unsigned long int time_closest_int = (int) TRTGTD_time; + double time_closest_ns = (TRTGTD_time - time_closest_int)*1000000000; + + sbn::NuMISpillInfo NuMIbeamInfo; + NuMIbeamInfo.TORTGT = TORTGT*1e12; //include factor of 1e12 protons in POT calculation + NuMIbeamInfo.TOR101 = TOR101*1e12; //include factor of 1e12 protons in POT calculation + NuMIbeamInfo.TRTGTD = TRTGTD*1e12; //include factor of 1e12 protons in POT calculation + NuMIbeamInfo.TR101D = TR101D*1e12; //include factor of 1e12 protons in POT calculation + NuMIbeamInfo.HRNDIR = HRNDIR; + NuMIbeamInfo.NSLINA = NSLINA; + NuMIbeamInfo.NSLINB = NSLINB; + NuMIbeamInfo.NSLINC = NSLINC; + NuMIbeamInfo.NSLIND = NSLIND; + + NuMIbeamInfo.HP121 = HP121; + NuMIbeamInfo.VP121 = VP121; + NuMIbeamInfo.HPTGT = HPTGT; + NuMIbeamInfo.VPTGT = VPTGT; + NuMIbeamInfo.HITGT = HITGT; + NuMIbeamInfo.VITGT = VITGT; + NuMIbeamInfo.MTGTDS = MTGTDS; + + NuMIbeamInfo.time = times_temps[i]; + NuMIbeamInfo.event = e.event(); + NuMIbeamInfo.spill_time_s = time_closest_int; + NuMIbeamInfo.spill_time_ns = time_closest_ns; // Save the Number of DAQ Gates in the first saved spill - if (spill_count == 1) { - NuMIbeamInfo.daq_gates = number_of_gates_since_previous_event; - } - else { - NuMIbeamInfo.daq_gates = 0; + if (spill_count == 1) { + NuMIbeamInfo.daq_gates = number_of_gates_since_previous_event; } - - fOutbeamInfos.push_back(NuMIbeamInfo); + else { + NuMIbeamInfo.daq_gates = 0; } - if(spill_count > number_of_gates_since_previous_event) - std::cout << "Event Spills : " << spill_count << ", DAQ Spills : " << number_of_gates_since_previous_event << " \t \t ::: WRONG!"<< std::endl; - else - std::cout << "Event Spills : " << spill_count << ", DAQ Spills : " << number_of_gates_since_previous_event << std::endl; - } + + fOutbeamInfos.push_back(NuMIbeamInfo); + } + if(spill_count > number_of_gates_since_previous_event) + std::cout << "Event Spills : " << spill_count << ", DAQ Spills : " << number_of_gates_since_previous_event << " \t \t ::: WRONG!"<< std::endl; + else + std::cout << "Event Spills : " << spill_count << ", DAQ Spills : " << number_of_gates_since_previous_event << std::endl; + } void sbn::NuMIRetriever::beginSubRun(art::SubRun& sr) diff --git a/sbncode/BeamSpillInfoRetriever/job/bnbextcountinfo.fcl b/sbncode/BeamSpillInfoRetriever/job/bnbextcountinfo.fcl new file mode 100644 index 000000000..e8191e2dc --- /dev/null +++ b/sbncode/BeamSpillInfoRetriever/job/bnbextcountinfo.fcl @@ -0,0 +1,10 @@ + +BEGIN_PROLOG + +bnbextcountinfo: { + + module_type: "BNBEXTRetriever" + raw_data_label: "daq" + +} +END_PROLOG diff --git a/sbncode/BeamSpillInfoRetriever/job/extcountinfo.fcl b/sbncode/BeamSpillInfoRetriever/job/extcountinfo.fcl deleted file mode 100644 index 1ca870996..000000000 --- a/sbncode/BeamSpillInfoRetriever/job/extcountinfo.fcl +++ /dev/null @@ -1,10 +0,0 @@ - -BEGIN_PROLOG - -extcountinfo: { - - module_type: "EXTRetriever" - raw_data_label: "daq" - -} -END_PROLOG diff --git a/sbncode/BeamSpillInfoRetriever/job/numiextcountinfo.fcl b/sbncode/BeamSpillInfoRetriever/job/numiextcountinfo.fcl new file mode 100644 index 000000000..f9a9583f5 --- /dev/null +++ b/sbncode/BeamSpillInfoRetriever/job/numiextcountinfo.fcl @@ -0,0 +1,10 @@ + +BEGIN_PROLOG + +numiextcountinfo: { + + module_type: "NuMIEXTRetriever" + raw_data_label: "daq" + +} +END_PROLOG diff --git a/sbncode/BeamSpillInfoRetriever/job/run_extinfo_sbn.fcl b/sbncode/BeamSpillInfoRetriever/job/run_bnbextinfo_sbn.fcl similarity index 53% rename from sbncode/BeamSpillInfoRetriever/job/run_extinfo_sbn.fcl rename to sbncode/BeamSpillInfoRetriever/job/run_bnbextinfo_sbn.fcl index e55cb29fe..fbee5871f 100644 --- a/sbncode/BeamSpillInfoRetriever/job/run_extinfo_sbn.fcl +++ b/sbncode/BeamSpillInfoRetriever/job/run_bnbextinfo_sbn.fcl @@ -1,6 +1,6 @@ -#include "extcountinfo.fcl" +#include "bnbextcountinfo.fcl" -process_name: EXTInfoGen +process_name: BNBEXTInfoGen services:{ IFBeam:{} @@ -13,10 +13,10 @@ source: { physics: { producers: { - extinfo: @local::extcountinfo + bnbextinfo: @local::bnbextcountinfo } - simulate: [extinfo ] + simulate: [bnbextinfo ] stream1: [ out1 ] } @@ -24,7 +24,7 @@ physics: { outputs: { out1: { module_type: RootOutput - fileName: "%ifb_%tc_extinfo.root" + fileName: "%ifb_%tc_bnbextinfo.root" dataTier: "raw" compressionLevel: 1 } diff --git a/sbncode/BeamSpillInfoRetriever/job/run_numiextinfo_sbn.fcl b/sbncode/BeamSpillInfoRetriever/job/run_numiextinfo_sbn.fcl new file mode 100644 index 000000000..e41261cda --- /dev/null +++ b/sbncode/BeamSpillInfoRetriever/job/run_numiextinfo_sbn.fcl @@ -0,0 +1,32 @@ +#include "numiextcountinfo.fcl" + +process_name: NuMIEXTInfoGen + +services:{ + IFBeam:{} +} + + +source: { + +} + +physics: { + producers: { + numiextinfo: @local::numiextcountinfo + } + + simulate: [numiextinfo ] + stream1: [ out1 ] + +} + +outputs: { + out1: { + module_type: RootOutput + fileName: "%ifb_%tc_numiextinfo.root" + dataTier: "raw" + compressionLevel: 1 + } +} + From 515724c1583d752fa9de2e2099ba550f6d58afac Mon Sep 17 00:00:00 2001 From: Jacob Larkin Date: Thu, 22 Jun 2023 12:18:25 -0500 Subject: [PATCH 05/22] Update CAFMaker to save offbeam gate count --- sbncode/CAFMaker/CAFMakerParams.h | 12 ++++++++++++ sbncode/CAFMaker/CAFMaker_module.cc | 15 +++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/sbncode/CAFMaker/CAFMakerParams.h b/sbncode/CAFMaker/CAFMakerParams.h index ad75a102d..a513673eb 100644 --- a/sbncode/CAFMaker/CAFMakerParams.h +++ b/sbncode/CAFMaker/CAFMakerParams.h @@ -95,6 +95,18 @@ namespace caf "numiinfo" }; + Atom OffbeamBNBCountDataLabel { + Name("OffbeamBNBCountDataLabel"), + Comment("Label of offbeam BNB EXT producer"), + "extinfo" + }; + + Atom OffbeamNuMICountDataLabel { + Name("OffbeamNuMICountDataLabel"), + Comment("Label of offbeam NuMI EXT producer"), + "extinfo" + }; + Atom G4Label { Name("G4Label"), Comment("Label of G4 module."), diff --git a/sbncode/CAFMaker/CAFMaker_module.cc b/sbncode/CAFMaker/CAFMaker_module.cc index 46a4eaea9..b82a69d6c 100644 --- a/sbncode/CAFMaker/CAFMaker_module.cc +++ b/sbncode/CAFMaker/CAFMaker_module.cc @@ -106,6 +106,7 @@ #include "sbnobj/Common/Reco/ScatterClosestApproach.h" #include "sbnobj/Common/Reco/StoppingChi2Fit.h" #include "sbnobj/Common/POTAccounting/BNBSpillInfo.h" +#include "sbnobj/Common/POTAccounting/EXTCountInfo.h" #include "sbnobj/Common/POTAccounting/NuMISpillInfo.h" #include "sbnobj/Common/Trigger/ExtraTriggerInfo.h" #include "sbnobj/Common/Reco/CRUMBSResult.h" @@ -184,6 +185,8 @@ class CAFMaker : public art::EDProducer { int fFileNumber; double fTotalPOT; double fSubRunPOT; + unsigned int fOffbeamBNBGates; + unsigned int fOffbeamNuMIGates; double fTotalSinglePOT; double fTotalEvents; double fBlindEvents; @@ -739,6 +742,16 @@ void CAFMaker::beginSubRun(art::SubRun& sr) { fSubRunPOT = pot_handle->totgoodpot; fTotalPOT += fSubRunPOT; } + else if (auto bnb_offbeam_spill = sr.getHandle>(fParams.OffbeamBNBCountDataLabel())){ + for(const auto& spill: *bnb_offbeam_spill) { + fOffbeamBNBGates += spill.gates_since_last_trigger; + } + } + else if (auto numi_offbeam_spill = sr.getHandle>(fParams.OffbeamNuMICountDataLabel())){ + for(const auto& spill: *numi_offbeam_spill) { + fOffbeamNuMIGates += spill.gates_since_last_trigger; + } + } else{ if(!fParams.BNBPOTDataLabel().empty() || !fParams.GenLabel().empty() || !fParams.NuMIPOTDataLabel().empty()){ std::cout << "Found neither BNB data POT info under '" @@ -1888,6 +1901,8 @@ void CAFMaker::produce(art::Event& evt) noexcept { rec.hdr.bnbinfo = fBNBInfo; rec.hdr.nnumiinfo = fNuMIInfo.size(); rec.hdr.numiinfo = fNuMIInfo; + rec.hdr.noffbeambnb = fOffbeamBNBGates; + rec.hdr.noffbeamnumi = fOffbeamNuMIGates; rec.hdr.pot = fSubRunPOT; } From c0f90b5ec9a1d351d054077d74650040e9268a52 Mon Sep 17 00:00:00 2001 From: Jacob Larkin Date: Fri, 23 Jun 2023 08:37:46 -0500 Subject: [PATCH 06/22] Update Params to match Joseph's PR --- sbncode/CAFMaker/CAFMakerParams.h | 8 ++++---- sbncode/CAFMaker/CAFMaker_module.cc | 2 ++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/sbncode/CAFMaker/CAFMakerParams.h b/sbncode/CAFMaker/CAFMakerParams.h index a513673eb..42f1c9d81 100644 --- a/sbncode/CAFMaker/CAFMakerParams.h +++ b/sbncode/CAFMaker/CAFMakerParams.h @@ -97,14 +97,14 @@ namespace caf Atom OffbeamBNBCountDataLabel { Name("OffbeamBNBCountDataLabel"), - Comment("Label of offbeam BNB EXT producer"), - "extinfo" + Comment("Label of BNB EXT module"), + "bnbextinfo" }; Atom OffbeamNuMICountDataLabel { Name("OffbeamNuMICountDataLabel"), - Comment("Label of offbeam NuMI EXT producer"), - "extinfo" + Comment("Label of NuMI EXT module"), + "numiextinfo" }; Atom G4Label { diff --git a/sbncode/CAFMaker/CAFMaker_module.cc b/sbncode/CAFMaker/CAFMaker_module.cc index b82a69d6c..b40930ad0 100644 --- a/sbncode/CAFMaker/CAFMaker_module.cc +++ b/sbncode/CAFMaker/CAFMaker_module.cc @@ -729,6 +729,8 @@ void CAFMaker::beginSubRun(art::SubRun& sr) { fBNBInfo.clear(); fNuMIInfo.clear(); fSubRunPOT = 0; + fOffbeamBNBGates = 0; + fOffbeamNuMIGates = 0; if(auto bnb_spill = sr.getHandle>(fParams.BNBPOTDataLabel())){ FillExposure(*bnb_spill, fBNBInfo, fSubRunPOT); From 0af7a052e21d980bd97a05fab41fe82c78549e2e Mon Sep 17 00:00:00 2001 From: Jacob Larkin Date: Fri, 23 Jun 2023 10:53:05 -0500 Subject: [PATCH 07/22] Check whether both numi/bnb and offbeam/onbeam are filled and print error if they are --- sbncode/CAFMaker/CAFMaker_module.cc | 43 ++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/sbncode/CAFMaker/CAFMaker_module.cc b/sbncode/CAFMaker/CAFMaker_module.cc index b40930ad0..e952943e7 100644 --- a/sbncode/CAFMaker/CAFMaker_module.cc +++ b/sbncode/CAFMaker/CAFMaker_module.cc @@ -732,34 +732,57 @@ void CAFMaker::beginSubRun(art::SubRun& sr) { fOffbeamBNBGates = 0; fOffbeamNuMIGates = 0; - if(auto bnb_spill = sr.getHandle>(fParams.BNBPOTDataLabel())){ + auto bnb_spill = sr.getHandle>(fParams.BNBPOTDataLabel()); + auto numi_spill = sr.getHandle>(fParams.NuMIPOTDataLabel()); + auto bnb_offbeam_spill = sr.getHandle>(fParams.OffbeamBNBCountDataLabel()); + auto numi_offbeam_spill = sr.getHandle>(fParams.OffbeamNuMICountDataLabel()); + + if((bnb_spill && numi_spill) || (bnb_spill && bnb_offbeam_spill) || (bnb_spill && numi_offbeam_spill) || + (numi_spill && bnb_offbeam_spill) || (numi_spill && numi_offbeam_spill) || (bnb_offbeam_spill && numi_offbeam_spill)) { + std::cout << "Expected at most one of " << fParams.BNBPOTDataLabel() << ", " + << fParams.NuMIPOTDataLabel() << ", " << fParams.OffbeamBNBCountDataLabel() << ", and " + << fParams.OffbeamNuMICountDataLabel() << ". Found "; + if(bnb_spill) std::cout << fParams.BNBPOTDataLabel() << " "; + if(numi_spill) std::cout << fParams.NuMIPOTDataLabel() << " "; + if(bnb_offbeam_spill) std::cout << fParams.OffbeamBNBCountDataLabel() << " "; + if(numi_offbeam_spill) std::cout << fParams.OffbeamNuMICountDataLabel(); + std::cout << std::endl; + abort(); + } + + if(bnb_spill){ FillExposure(*bnb_spill, fBNBInfo, fSubRunPOT); fTotalPOT += fSubRunPOT; } - else if (auto numi_spill = sr.getHandle>(fParams.NuMIPOTDataLabel())) { + else if (numi_spill) { FillExposureNuMI(*numi_spill, fNuMIInfo, fSubRunPOT); fTotalPOT += fSubRunPOT; } - else if(auto pot_handle = sr.getHandle(fParams.GenLabel())){ - fSubRunPOT = pot_handle->totgoodpot; - fTotalPOT += fSubRunPOT; - } - else if (auto bnb_offbeam_spill = sr.getHandle>(fParams.OffbeamBNBCountDataLabel())){ + else if (bnb_offbeam_spill){ for(const auto& spill: *bnb_offbeam_spill) { fOffbeamBNBGates += spill.gates_since_last_trigger; } } - else if (auto numi_offbeam_spill = sr.getHandle>(fParams.OffbeamNuMICountDataLabel())){ + else if (numi_offbeam_spill){ for(const auto& spill: *numi_offbeam_spill) { fOffbeamNuMIGates += spill.gates_since_last_trigger; } } + else if(auto pot_handle = sr.getHandle(fParams.GenLabel())){ + fSubRunPOT = pot_handle->totgoodpot; + fTotalPOT += fSubRunPOT; + } else{ - if(!fParams.BNBPOTDataLabel().empty() || !fParams.GenLabel().empty() || !fParams.NuMIPOTDataLabel().empty()){ + if(!fParams.BNBPOTDataLabel().empty() || !fParams.GenLabel().empty() || !fParams.NuMIPOTDataLabel().empty() || + !fParams.OffbeamBNBCountDataLabel().empty() || !fParams.OffbeamNuMICountDataLabel().empty()){ std::cout << "Found neither BNB data POT info under '" << fParams.BNBPOTDataLabel() - << "' not NuMIdata POT info under '" + << "' nor NuMIdata POT info under '" << fParams.NuMIPOTDataLabel() + << "' nor BNB EXT Count info under '" + << fParams.OffbeamBNBCountDataLabel() + << "' nor NuMI EXT Count info under '" + << fParams.OffbeamNuMICountDataLabel() << "' nor MC POT info under '" << fParams.GenLabel() << "'" << std::endl; From 53c444652610bdf8beb63e5b286466a37382f9d9 Mon Sep 17 00:00:00 2001 From: Anna Heggestuen Date: Fri, 23 Jun 2023 18:46:03 -0500 Subject: [PATCH 08/22] fix flashTime var name in SRCRTPMTMatch --- sbncode/CAFMaker/FillReco.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbncode/CAFMaker/FillReco.cxx b/sbncode/CAFMaker/FillReco.cxx index d6995ca74..267881268 100644 --- a/sbncode/CAFMaker/FillReco.cxx +++ b/sbncode/CAFMaker/FillReco.cxx @@ -120,7 +120,7 @@ namespace caf //srmatch.setDefault(); std::cout << "filling CRTPMT Match : flash time = " << match.flashTime << "\n"; srmatch.flashID = match.flashID; - srmatch.flashTime_us = match.flashTime; + srmatch.flashTime = match.flashTime; srmatch.flashGateTime = match.flashGateTime; srmatch.firstOpHitPeakTime = match.firstOpHitPeakTime; srmatch.firstOpHitStartTime = match.firstOpHitStartTime; From 34dcb366fd8fe8f265751b538cafc92ca7723d9b Mon Sep 17 00:00:00 2001 From: Anna Heggestuen Date: Fri, 23 Jun 2023 18:51:39 -0500 Subject: [PATCH 09/22] convert srmatch.flashGateTime from ns to us --- sbncode/CAFMaker/FillReco.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbncode/CAFMaker/FillReco.cxx b/sbncode/CAFMaker/FillReco.cxx index 267881268..526e830ff 100644 --- a/sbncode/CAFMaker/FillReco.cxx +++ b/sbncode/CAFMaker/FillReco.cxx @@ -121,7 +121,7 @@ namespace caf std::cout << "filling CRTPMT Match : flash time = " << match.flashTime << "\n"; srmatch.flashID = match.flashID; srmatch.flashTime = match.flashTime; - srmatch.flashGateTime = match.flashGateTime; + srmatch.flashGateTime = match.flashGateTime/1e3; // ns -> us srmatch.firstOpHitPeakTime = match.firstOpHitPeakTime; srmatch.firstOpHitStartTime = match.firstOpHitStartTime; srmatch.flashInGate = match.flashInGate; From 0651c080d3f3a16a3cf7cbc949026778e9e42903 Mon Sep 17 00:00:00 2001 From: Jacob Larkin Date: Mon, 26 Jun 2023 09:19:22 -0500 Subject: [PATCH 10/22] make check for multiple spill products more robust Co-authored-by: Gianluca Petrillo --- sbncode/CAFMaker/CAFMaker_module.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sbncode/CAFMaker/CAFMaker_module.cc b/sbncode/CAFMaker/CAFMaker_module.cc index e952943e7..29a06300b 100644 --- a/sbncode/CAFMaker/CAFMaker_module.cc +++ b/sbncode/CAFMaker/CAFMaker_module.cc @@ -737,8 +737,7 @@ void CAFMaker::beginSubRun(art::SubRun& sr) { auto bnb_offbeam_spill = sr.getHandle>(fParams.OffbeamBNBCountDataLabel()); auto numi_offbeam_spill = sr.getHandle>(fParams.OffbeamNuMICountDataLabel()); - if((bnb_spill && numi_spill) || (bnb_spill && bnb_offbeam_spill) || (bnb_spill && numi_offbeam_spill) || - (numi_spill && bnb_offbeam_spill) || (numi_spill && numi_offbeam_spill) || (bnb_offbeam_spill && numi_offbeam_spill)) { + if(bool(bnb_spill) + bool(numi_spill) + bool(bnb_offbeam_spill) + bool(numi_offbeam_spill) > 1) { std::cout << "Expected at most one of " << fParams.BNBPOTDataLabel() << ", " << fParams.NuMIPOTDataLabel() << ", " << fParams.OffbeamBNBCountDataLabel() << ", and " << fParams.OffbeamNuMICountDataLabel() << ". Found "; From bc5e2a0a9ece22c1cb4fb1cdff4025e0f721e159 Mon Sep 17 00:00:00 2001 From: Gianluca Petrillo Date: Wed, 21 Jun 2023 11:39:37 -0500 Subject: [PATCH 11/22] CAFMaker fills the source information (the better it can) --- sbncode/CAFMaker/CAFMaker_module.cc | 32 +++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/sbncode/CAFMaker/CAFMaker_module.cc b/sbncode/CAFMaker/CAFMaker_module.cc index 46a4eaea9..d4a8aa8dc 100644 --- a/sbncode/CAFMaker/CAFMaker_module.cc +++ b/sbncode/CAFMaker/CAFMaker_module.cc @@ -176,9 +176,11 @@ class CAFMaker : public art::EDProducer { std::string fFlatCafFilename; std::string fFlatCafBlindFilename; std::string fFlatCafPrescaleFilename; + + std::string fSourceFile; bool fFirstInSubRun; - bool fFirstInFile; + unsigned int fIndexInFile = SRHeader::NoSourceIndex; bool fFirstBlindInFile; bool fFirstPrescaleInFile; int fFileNumber; @@ -234,6 +236,8 @@ class CAFMaker : public art::EDProducer { std::string DeriveFilename(const std::string& inname, const std::string& ext) const; + static std::string Basename(const std::string& path); + void AddEnvToFile(TFile* f); void AddMetadataToFile(TFile* f, const std::map& metadata); @@ -527,6 +531,15 @@ CAFMaker::~CAFMaker() } +//...................................................................... +std::string CAFMaker::Basename(const std::string& path) +{ + // C++17: use filesystem library (Clang 7 still not compliant) + constexpr char sep = '/'; + std::size_t const iSep = path.rfind(sep); + return (iSep == std::string::npos)? path: path.substr(iSep + 1); +} + //...................................................................... std::string CAFMaker::DeriveFilename(const std::string& inname, const std::string& ext) const @@ -544,6 +557,9 @@ std::string CAFMaker::DeriveFilename(const std::string& inname, //...................................................................... void CAFMaker::respondToOpenInputFile(const art::FileBlock& fb) { + + std::string const inputBasename = Basename(fb.fileName()); // includes suffix + if ((fParams.CreateCAF() && !fFile) || (fParams.CreateFlatCAF() && !fFlatFile) || (fParams.CreateBlindedCAF() && (!fFileb || !fFilep))) { @@ -593,9 +609,10 @@ void CAFMaker::respondToOpenInputFile(const art::FileBlock& fb) { } fFileNumber ++; - fFirstInFile = true; + fIndexInFile = 0; fFirstBlindInFile = true; fFirstPrescaleInFile = true; + fSourceFile = inputBasename; } @@ -912,7 +929,7 @@ void CAFMaker::InitializeOutfiles() fTotalEvents = 0; fBlindEvents = 0; fPrescaleEvents = 0; - fFirstInFile = false; + fIndexInFile = SRHeader::NoSourceIndex; fFirstInSubRun = false; // fCycle = -5; // fBatch = -5; @@ -1037,6 +1054,8 @@ bool CAFMaker::GetPsetParameter(const fhicl::ParameterSet& pset, //...................................................................... void CAFMaker::produce(art::Event& evt) noexcept { + bool const firstInFile = (fIndexInFile++ == 0); + // is this event real data? bool isRealData = evt.isRealData(); @@ -1882,7 +1901,7 @@ void CAFMaker::produce(art::Event& evt) noexcept { rec.hdr.ismc = !isRealData; rec.hdr.det = fDet; rec.hdr.fno = fFileNumber; - if(fFirstInFile) + if(firstInFile) { rec.hdr.nbnbinfo = fBNBInfo.size(); rec.hdr.bnbinfo = fBNBInfo; @@ -1893,7 +1912,9 @@ void CAFMaker::produce(art::Event& evt) noexcept { rec.hdr.ngenevt = n_gen_evt; rec.hdr.mctype = mctype; - rec.hdr.first_in_file = fFirstInFile; + rec.hdr.sourceName = fSourceFile; + rec.hdr.sourceIndex = fIndexInFile; + rec.hdr.first_in_file = firstInFile; rec.hdr.first_in_subrun = fFirstInSubRun; rec.hdr.triggerinfo = srtrigger; // rec.hdr.cycle = fCycle; @@ -1966,7 +1987,6 @@ void CAFMaker::produce(art::Event& evt) noexcept { } // reset - fFirstInFile = false; fFirstInSubRun = false; srcol->push_back(rec); evt.put(std::move(srcol)); From bb659f34b83e7e4a16c0c00f775a8dfabba667e8 Mon Sep 17 00:00:00 2001 From: miquelnebot Date: Tue, 11 Jul 2023 08:40:18 -0500 Subject: [PATCH 12/22] update versions for production patch --- CMakeLists.txt | 2 +- ups/product_deps | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bbbe20d40..cb15347ef 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ cmake_minimum_required(VERSION 3.20 FATAL_ERROR) find_package(cetmodules 3.20.00 REQUIRED) -project(sbncode VERSION 09.72.00.03 LANGUAGES CXX) +project(sbncode VERSION 09.72.00.04 LANGUAGES CXX) message(STATUS "\n\n ========================== ${PROJECT_NAME} ==========================") diff --git a/ups/product_deps b/ups/product_deps index 8d2b04768..310a1b0bf 100644 --- a/ups/product_deps +++ b/ups/product_deps @@ -255,10 +255,10 @@ product version qual flags genie_xsec v3_04_00 - larcv2 v2_1_0 - larsoft v09_72_00 - -sbnanaobj v09_20_06 - +sbnanaobj v09_20_06_01 - sbndaq_artdaq_core v1_06_00of0 - sbndata v01_04 - -sbnobj v09_16_00 - +sbnobj v09_16_00_01 - systematicstools v01_02_00 - nusystematics v01_02_10 - cetmodules v3_20_00 - only_for_build From 4ce8a7ed4aab7f55382d23f5f6eed61321df4f96 Mon Sep 17 00:00:00 2001 From: Jack Smedley Date: Sun, 30 Jul 2023 19:47:19 -0500 Subject: [PATCH 13/22] Initial commit --- sbncode/CAFMaker/CAFMaker_module.cc | 1 + sbncode/CAFMaker/FillReco.cxx | 42 +++++++++++++++++++++++++++++ sbncode/CAFMaker/FillReco.h | 4 +++ 3 files changed, 47 insertions(+) diff --git a/sbncode/CAFMaker/CAFMaker_module.cc b/sbncode/CAFMaker/CAFMaker_module.cc index 6e2365f05..3f7a42ef5 100644 --- a/sbncode/CAFMaker/CAFMaker_module.cc +++ b/sbncode/CAFMaker/CAFMaker_module.cc @@ -1650,6 +1650,7 @@ void CAFMaker::produce(art::Event& evt) noexcept { FillSliceFlashMatchA(fmatch, recslc); FillSliceVertex(vertex, recslc); FillSliceCRUMBS(slcCRUMBS, recslc); + FillSliceBarycenter(slcHits, slcSpacePoints, recslc); // select slice if (!SelectSlice(recslc, fParams.CutClearCosmic())) continue; diff --git a/sbncode/CAFMaker/FillReco.cxx b/sbncode/CAFMaker/FillReco.cxx index 1c434b66b..702f44548 100644 --- a/sbncode/CAFMaker/FillReco.cxx +++ b/sbncode/CAFMaker/FillReco.cxx @@ -419,6 +419,48 @@ namespace caf } } + void FillSliceBarycenter(const std::vector> &inputHits, + const std::vector> &inputPoints, + caf::SRSlice &slice) + { + unsigned int nHits = inputHits.size(); + double sumCharge = 0.; + double sumX = 0.; double sumY = 0.; double sumZ = 0.; + double sumXX = 0.; double sumYY = 0.; double sumZZ = 0.; + double thisHitCharge, thisPointXYZ[3], chargeCenter[3], chargeWidth[3]; + + for ( unsigned int i = 0; i < nHits; i++ ) { + const recob::Hit &thisHit = *inputHits[i]; + if ( thisHit.SignalType() != geo::kCollection ) continue; + art::Ptr const& thisPoint = inputPoints.at(i); + if ( !thisPoint ) continue; + + thisHitCharge = thisHit.Integral(); + thisPointXYZ[0] = thisPoint->XYZ()[0]; + thisPointXYZ[1] = thisPoint->XYZ()[1]; + thisPointXYZ[2] = thisPoint->XYZ()[2]; + + sumCharge += thisHitCharge; + sumX += thisPointXYZ[0] * thisHitCharge; + sumY += thisPointXYZ[1] * thisHitCharge; + sumZ += thisPointXYZ[2] * thisHitCharge; + sumXX += thisPointXYZ[0] * thisPointXYZ[0] * thisHitCharge; + sumYY += thisPointXYZ[1] * thisPointXYZ[1] * thisHitCharge; + sumZZ += thisPointXYZ[2] * thisPointXYZ[2] * thisHitCharge; + } + + if( sumCharge != 0 ) { + chargeCenter[0] = sumX / sumCharge; + chargeCenter[1] = sumY / sumCharge; + chargeCenter[2] = sumZ / sumCharge; + chargeWidth[0] = pow( (sumXX/sumCharge - pow(sumX/sumCharge, 2)), .5); + chargeWidth[1] = pow( (sumYY/sumCharge - pow(sumY/sumCharge, 2)), .5); + chargeWidth[2] = pow( (sumZZ/sumCharge - pow(sumZ/sumCharge, 2)), .5); + + slice.charge_center.SetXYZ( chargeCenter[0], chargeCenter[1], chargeCenter[2] ); + slice.charge_width.SetXYZ( chargeWidth[0], chargeWidth[1], chargeWidth[2] ); + } + } //...................................................................... diff --git a/sbncode/CAFMaker/FillReco.h b/sbncode/CAFMaker/FillReco.h index c2fcf3056..855735fd4 100644 --- a/sbncode/CAFMaker/FillReco.h +++ b/sbncode/CAFMaker/FillReco.h @@ -93,6 +93,10 @@ namespace caf caf::SRSlice& slice, bool allowEmpty = false); + void FillSliceBarycenter(const std::vector> &inputHits, + const std::vector> &inputPoints, + caf::SRSlice &slice); + bool SelectSlice(const caf::SRSlice &slice, bool cut_clear_cosmic); void FillTrackVars(const recob::Track& track, From 0ec5402065e0db99a4ea3d467a5eb20c4046cd28 Mon Sep 17 00:00:00 2001 From: Anna Heggestuen Date: Mon, 31 Jul 2023 19:40:25 -0500 Subject: [PATCH 14/22] fill Matched CRT Hit positions into SRCRTPMTMatch in CAFs --- sbncode/CAFMaker/FillReco.cxx | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/sbncode/CAFMaker/FillReco.cxx b/sbncode/CAFMaker/FillReco.cxx index 526e830ff..b59043d47 100644 --- a/sbncode/CAFMaker/FillReco.cxx +++ b/sbncode/CAFMaker/FillReco.cxx @@ -118,10 +118,9 @@ namespace caf // allowEmpty does not (yet) matter here (void) allowEmpty; //srmatch.setDefault(); - std::cout << "filling CRTPMT Match : flash time = " << match.flashTime << "\n"; srmatch.flashID = match.flashID; srmatch.flashTime = match.flashTime; - srmatch.flashGateTime = match.flashGateTime/1e3; // ns -> us + srmatch.flashGateTime = match.flashGateTime; srmatch.firstOpHitPeakTime = match.firstOpHitPeakTime; srmatch.firstOpHitStartTime = match.firstOpHitStartTime; srmatch.flashInGate = match.flashInGate; @@ -131,19 +130,15 @@ namespace caf srmatch.flashYWidth = match.flashYWidth; srmatch.flashZWidth = match.flashZWidth; srmatch.flashClassification = static_cast(match.flashClassification); - //srmatch.flashClassification = match.flashClassification; - std::cout << "match type : " << std::to_string(static_cast(match.flashClassification)) << "\n"; - std::cout << "matchedCRThits.size : "<< match.matchedCRTHits.size() << "\n"; for(const auto& matchedCRTHit : match.matchedCRTHits){ - std::cout << "CRTPMTTimeDiff = "<< matchedCRTHit.PMTTimeDiff << "\n"; caf::SRMatchedCRT matchedCRT; matchedCRT.PMTTimeDiff = matchedCRTHit.PMTTimeDiff; matchedCRT.time = matchedCRTHit.time; matchedCRT.sys = matchedCRTHit.sys; matchedCRT.region = matchedCRTHit.region; + matchedCRT.position = SRVector3D(matchedCRTHit.position.X(), matchedCRTHit.position.Y(), matchedCRTHit.position.Z()); srmatch.matchedCRTHits.push_back(matchedCRT); } - std::cout << "srmatch.matchedCRTHits.size = " << srmatch.matchedCRTHits.size() << "\n"; } From 6eb8d100907dd54476c7c25798c4a6ac343451d1 Mon Sep 17 00:00:00 2001 From: miquelnebot Date: Wed, 2 Aug 2023 09:02:43 -0500 Subject: [PATCH 15/22] update version for patch --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cb15347ef..d00e33986 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ cmake_minimum_required(VERSION 3.20 FATAL_ERROR) find_package(cetmodules 3.20.00 REQUIRED) -project(sbncode VERSION 09.72.00.04 LANGUAGES CXX) +project(sbncode VERSION 09.72.00.05 LANGUAGES CXX) message(STATUS "\n\n ========================== ${PROJECT_NAME} ==========================") From ba06fd7344dcf4571165483857bc3f1cd37897ef Mon Sep 17 00:00:00 2001 From: miquelnebot Date: Wed, 2 Aug 2023 09:15:23 -0500 Subject: [PATCH 16/22] update version for patch --- ups/product_deps | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ups/product_deps b/ups/product_deps index 310a1b0bf..12be0e3bb 100644 --- a/ups/product_deps +++ b/ups/product_deps @@ -255,7 +255,7 @@ product version qual flags genie_xsec v3_04_00 - larcv2 v2_1_0 - larsoft v09_72_00 - -sbnanaobj v09_20_06_01 - +sbnanaobj v09_20_06_02 - sbndaq_artdaq_core v1_06_00of0 - sbndata v01_04 - sbnobj v09_16_00_01 - From 9712afa6f7021d07bbdb7983f56d5527849267f9 Mon Sep 17 00:00:00 2001 From: Gianluca Petrillo Date: Wed, 2 Aug 2023 13:35:17 -0500 Subject: [PATCH 17/22] CAFMaker adapted for SRHeader workaround This commit should NOT end in the development branch (REVERT it there). --- sbncode/CAFMaker/CAFMaker_module.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sbncode/CAFMaker/CAFMaker_module.cc b/sbncode/CAFMaker/CAFMaker_module.cc index d4a8aa8dc..8e2c6d470 100644 --- a/sbncode/CAFMaker/CAFMaker_module.cc +++ b/sbncode/CAFMaker/CAFMaker_module.cc @@ -180,7 +180,7 @@ class CAFMaker : public art::EDProducer { std::string fSourceFile; bool fFirstInSubRun; - unsigned int fIndexInFile = SRHeader::NoSourceIndex; + unsigned int fIndexInFile = SRHeader::NoSourceIndex(); bool fFirstBlindInFile; bool fFirstPrescaleInFile; int fFileNumber; @@ -929,7 +929,7 @@ void CAFMaker::InitializeOutfiles() fTotalEvents = 0; fBlindEvents = 0; fPrescaleEvents = 0; - fIndexInFile = SRHeader::NoSourceIndex; + fIndexInFile = SRHeader::NoSourceIndex(); fFirstInSubRun = false; // fCycle = -5; // fBatch = -5; From bf0972d79316d809e1207974b174768a4564af49 Mon Sep 17 00:00:00 2001 From: Jacob Larkin Date: Tue, 28 Nov 2023 09:21:01 -0600 Subject: [PATCH 18/22] Fix exposure branches to be filled per subrun instead of per file and filled in both blind and prescaled files --- sbncode/CAFMaker/CAFMaker_module.cc | 97 ++++++++++++++++------------- 1 file changed, 54 insertions(+), 43 deletions(-) diff --git a/sbncode/CAFMaker/CAFMaker_module.cc b/sbncode/CAFMaker/CAFMaker_module.cc index e7704b2c7..3ffb33f30 100644 --- a/sbncode/CAFMaker/CAFMaker_module.cc +++ b/sbncode/CAFMaker/CAFMaker_module.cc @@ -182,6 +182,8 @@ class CAFMaker : public art::EDProducer { bool fFirstInSubRun; unsigned int fIndexInFile = SRHeader::NoSourceIndex(); + bool fFirstBlindInSubRun; + bool fFirstPrescaleInSubRun; bool fFirstBlindInFile; bool fFirstPrescaleInFile; int fFileNumber; @@ -811,6 +813,8 @@ void CAFMaker::beginSubRun(art::SubRun& sr) { std::cout << "POT: " << fSubRunPOT << std::endl; fFirstInSubRun = true; + fFirstBlindInSubRun = true; + fFirstPrescaleInSubRun = true; } //...................................................................... @@ -968,6 +972,8 @@ void CAFMaker::InitializeOutfiles() fPrescaleEvents = 0; fIndexInFile = SRHeader::NoSourceIndex(); fFirstInSubRun = false; + fFirstBlindInSubRun = false; + fFirstPrescaleInSubRun = false; // fCycle = -5; // fBatch = -5; } @@ -1961,7 +1967,7 @@ void CAFMaker::produce(art::Event& evt) noexcept { rec.hdr.ismc = !isRealData; rec.hdr.det = fDet; rec.hdr.fno = fFileNumber; - if(firstInFile) + if(fFirstInSubRun) { rec.hdr.nbnbinfo = fBNBInfo.size(); rec.hdr.bnbinfo = fBNBInfo; @@ -2003,47 +2009,49 @@ void CAFMaker::produce(art::Event& evt) noexcept { rec.hdr.evt = 0; rec.hdr.isblind = true; if (keepprescale) { - StandardRecord* precp = new StandardRecord (*prec); - if (fFirstPrescaleInFile) { - precp->hdr.pot = fSubRunPOT*(1/fParams.PrescaleFactor()); - precp->hdr.first_in_file = true; - precp->hdr.first_in_subrun = true; - precp->hdr.nbnbinfo = fBNBInfo.size()*(1/fParams.PrescaleFactor()); - precp->hdr.nnumiinfo = fNuMIInfo.size()*(1/fParams.PrescaleFactor()); - } - precp->hdr.ngenevt = n_gen_evt*(1/fParams.PrescaleFactor()); - precp->hdr.evt = evtID; - fRecTreep->SetBranchAddress("rec", &precp); - fRecTreep->Fill(); - fPrescaleEvents += 1; - if (fFlatTreep) { - fFlatRecordp->Clear(); - fFlatRecordp->Fill(*precp); - fFlatTreep->Fill(); - } - fFirstPrescaleInFile = false; + StandardRecord* precp = new StandardRecord (*prec); + if (fFirstPrescaleInSubRun) { + precp->hdr.pot = fSubRunPOT*(1/fParams.PrescaleFactor()); + precp->hdr.first_in_file = fFirstPrescaleInFile; + precp->hdr.first_in_subrun = true; + precp->hdr.nbnbinfo = fBNBInfo.size()*(1/fParams.PrescaleFactor()); + precp->hdr.nnumiinfo = fNuMIInfo.size()*(1/fParams.PrescaleFactor()); + } + precp->hdr.ngenevt = n_gen_evt*(1/fParams.PrescaleFactor()); + precp->hdr.evt = evtID; + fRecTreep->SetBranchAddress("rec", &precp); + fRecTreep->Fill(); + fPrescaleEvents += 1; + if (fFlatTreep) { + fFlatRecordp->Clear(); + fFlatRecordp->Fill(*precp); + fFlatTreep->Fill(); + } + fFirstPrescaleInFile = false; + fFirstPrescaleInSubRun = false; } else { - StandardRecord* precb = new StandardRecord (*prec); - BlindEnergyParameters(precb); - if (fFirstBlindInFile) { - precb->hdr.pot = fSubRunPOT*(1-(1/fParams.PrescaleFactor()))*GetBlindPOTScale(); - precb->hdr.first_in_file = true; - precb->hdr.first_in_subrun = true; - precb->hdr.nbnbinfo = fBNBInfo.size()*(1 - (1/fParams.PrescaleFactor())); - precb->hdr.nnumiinfo = fNuMIInfo.size()*(1-(1/fParams.PrescaleFactor())); - } - precb->hdr.ngenevt = n_gen_evt*(1 - (1/fParams.PrescaleFactor())); - precb->hdr.evt = evtID; - fRecTreeb->SetBranchAddress("rec", &precb); - fRecTreeb->Fill(); - fBlindEvents += 1; - if (fFlatTreeb) { - fFlatRecordb->Clear(); - fFlatRecordb->Fill(*precb); - fFlatTreeb->Fill(); - } - fFirstBlindInFile = false; + StandardRecord* precb = new StandardRecord (*prec); + BlindEnergyParameters(precb); + if (fFirstBlindInSubRun) { + precb->hdr.pot = fSubRunPOT*(1-(1/fParams.PrescaleFactor()))*GetBlindPOTScale(); + precb->hdr.first_in_file = fFirstBlindInFile; + precb->hdr.first_in_subrun = true; + precb->hdr.nbnbinfo = fBNBInfo.size()*(1 - (1/fParams.PrescaleFactor())); + precb->hdr.nnumiinfo = fNuMIInfo.size()*(1-(1/fParams.PrescaleFactor())); + } + precb->hdr.ngenevt = n_gen_evt*(1 - (1/fParams.PrescaleFactor())); + precb->hdr.evt = evtID; + fRecTreeb->SetBranchAddress("rec", &precb); + fRecTreeb->Fill(); + fBlindEvents += 1; + if (fFlatTreeb) { + fFlatRecordb->Clear(); + fFlatRecordb->Fill(*precb); + fFlatTreeb->Fill(); + } + fFirstBlindInFile = false; + fFirstBlindInSubRun = false; } } } @@ -2053,9 +2061,12 @@ void CAFMaker::produce(art::Event& evt) noexcept { srcol->push_back(rec); evt.put(std::move(srcol)); - fBNBInfo.clear(); - fNuMIInfo.clear(); - rec.hdr.pot = 0; + // Only clear these if we've filled into all file types + if(!fFirstInSubRun && (!fParams.CreateBlindedCAF() || (!fFirstBlindInSubRun && !fFirstPrescaleInSubRun))) { + fBNBInfo.clear(); + fNuMIInfo.clear(); + rec.hdr.pot = 0; + } } void CAFMaker::endSubRun(art::SubRun& sr) { From 61e5d394355c3723181f2741a67853e8cc2d1991 Mon Sep 17 00:00:00 2001 From: Jack Smedley Date: Tue, 28 Nov 2023 11:00:31 -0600 Subject: [PATCH 19/22] Copy cafmaker changes to production --- sbncode/CAFMaker/CAFMakerParams.h | 6 ++++++ sbncode/CAFMaker/CAFMaker_module.cc | 10 ++++++++++ sbncode/CAFMaker/FillReco.cxx | 29 +++++++++++++++++++++++++++++ sbncode/CAFMaker/FillReco.h | 4 ++++ 4 files changed, 49 insertions(+) diff --git a/sbncode/CAFMaker/CAFMakerParams.h b/sbncode/CAFMaker/CAFMakerParams.h index b520aa5c9..b058d2250 100644 --- a/sbncode/CAFMaker/CAFMakerParams.h +++ b/sbncode/CAFMaker/CAFMakerParams.h @@ -269,6 +269,12 @@ namespace caf "crtpmt" // this variable exists in icaruscode, pretty sure it does not yet exist in sbnd }; + Atom TPCPMTBarycenterMatchLabel { + Name("TPCPMTBarycenterMatchLabel"), + Comment("Label of Slice-OpFlash matching via barycenters."), + "" //Empty by default, configured in icaruscode cafmaker_defs + }; + Atom OpFlashLabel { Name("OpFlashLabel"), Comment("Label of PMT flash."), diff --git a/sbncode/CAFMaker/CAFMaker_module.cc b/sbncode/CAFMaker/CAFMaker_module.cc index e7704b2c7..e9452232c 100644 --- a/sbncode/CAFMaker/CAFMaker_module.cc +++ b/sbncode/CAFMaker/CAFMaker_module.cc @@ -441,6 +441,9 @@ void CAFMaker::FixPMTReferenceTimes(StandardRecord &rec, double PMT_reference_ti s.fmatch.time += PMT_reference_time; s.fmatch_a.time += PMT_reference_time; s.fmatch_b.time += PMT_reference_time; + + s.barycenterFM.flashTime +=PMT_reference_time; + s.barycenterFM.flashFirstHit +=PMT_reference_time; } // TODO: fix more? @@ -1479,6 +1482,12 @@ void CAFMaker::produce(art::Event& evt) noexcept { FindManyPStrict(fmPFPart, evt, fParams.FlashMatchLabel() + slice_tag_suff); + art::FindOneP foTPCPMTBarycenterMatch = + FindOnePStrict(sliceList, evt, + fParams.TPCPMTBarycenterMatchLabel() + slice_tag_suff); + const sbn::TPCPMTBarycenterMatch *barycenterMatch + = foTPCPMTBarycenterMatch.isValid()? foTPCPMTBarycenterMatch.at(0).get(): nullptr; + art::FindManyP fmPFPMeta = FindManyPStrict(fmPFPart, evt, fParams.PFParticleLabel() + slice_tag_suff); @@ -1670,6 +1679,7 @@ void CAFMaker::produce(art::Event& evt) noexcept { FillSliceVertex(vertex, recslc); FillSliceCRUMBS(slcCRUMBS, recslc); FillSliceBarycenter(slcHits, slcSpacePoints, recslc); + FillTPCPMTBarycenterMatch(barycenterMatch, recslc); // select slice if (!SelectSlice(recslc, fParams.CutClearCosmic())) continue; diff --git a/sbncode/CAFMaker/FillReco.cxx b/sbncode/CAFMaker/FillReco.cxx index 4c86f8a7a..dfdfd365c 100644 --- a/sbncode/CAFMaker/FillReco.cxx +++ b/sbncode/CAFMaker/FillReco.cxx @@ -851,6 +851,35 @@ namespace caf srhit.spacepoint.pfpID = particle.Self(); srhit.spacepoint.ID = spacepoint.ID(); } + + + void FillTPCPMTBarycenterMatch(const sbn::TPCPMTBarycenterMatch *matchInfo, + caf::SRSlice& slice) + { + slice.barycenterFM.setDefault(); + + if ( matchInfo != nullptr ) { + slice.barycenterFM.chargeTotal = matchInfo->chargeTotal; + slice.barycenterFM.chargeCenterXLocal = matchInfo->chargeCenterXLocal; + slice.barycenterFM.chargeCenter = SRVector3D (matchInfo->chargeCenter.x(), matchInfo->chargeCenter.y(), matchInfo->chargeCenter.z()); + slice.barycenterFM.chargeWidth = SRVector3D (matchInfo->chargeWidth.x(), matchInfo->chargeWidth.y(), matchInfo->chargeWidth.z()); + slice.barycenterFM.flashFirstHit = matchInfo->flashFirstHit; + slice.barycenterFM.flashTime = matchInfo->flashTime; + slice.barycenterFM.flashPEs = matchInfo->flashPEs; + slice.barycenterFM.flashCenter = SRVector3D (matchInfo->flashCenter.x(), matchInfo->flashCenter.y(), matchInfo->flashCenter.z()); + slice.barycenterFM.flashWidth = SRVector3D (matchInfo->flashWidth.x(), matchInfo->flashWidth.y(), matchInfo->flashWidth.z()); + slice.barycenterFM.deltaT = matchInfo->deltaT; + slice.barycenterFM.deltaY = matchInfo->deltaY; + slice.barycenterFM.deltaZ = matchInfo->deltaZ; + slice.barycenterFM.radius = matchInfo->radius; + slice.barycenterFM.overlapY = matchInfo->overlapY; + slice.barycenterFM.overlapZ = matchInfo->overlapZ; + slice.barycenterFM.deltaZ_Trigger = matchInfo->deltaZ_Trigger; + slice.barycenterFM.deltaY_Trigger = matchInfo->deltaY_Trigger; + slice.barycenterFM.radius_Trigger = matchInfo->radius_Trigger; + } + } + //...................................................................... void SetNuMuCCPrimary(std::vector &recs, diff --git a/sbncode/CAFMaker/FillReco.h b/sbncode/CAFMaker/FillReco.h index 855735fd4..5f432c020 100644 --- a/sbncode/CAFMaker/FillReco.h +++ b/sbncode/CAFMaker/FillReco.h @@ -33,6 +33,7 @@ #include "sbnobj/Common/Reco/ScatterClosestApproach.h" #include "sbnobj/Common/Reco/StoppingChi2Fit.h" #include "sbnobj/Common/Reco/CRUMBSResult.h" +#include "sbnobj/Common/Reco/TPCPMTBarycenterMatch.h" #include "sbnobj/Common/CRT/CRTHit.hh" #include "sbnobj/Common/CRT/CRTTrack.hh" #include "sbnobj/Common/CRT/CRTPMTMatching.hh" @@ -197,6 +198,9 @@ namespace caf caf::SRCRTPMTMatch &srmatch, bool allowEmpty = false); + void FillTPCPMTBarycenterMatch(const sbn::TPCPMTBarycenterMatch *matchInfo, + caf::SRSlice& slice); + template void CopyPropertyIfSet( const std::map& props, const std::string& search, U& value ); } From f4291488bd8877beeb1c4ed269e1b3b9235d38c2 Mon Sep 17 00:00:00 2001 From: Francois Drielsma Date: Thu, 30 Nov 2023 15:28:18 -0600 Subject: [PATCH 20/22] Update Supera commit tag to include data fcl file fixes --- sbncode/Supera | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbncode/Supera b/sbncode/Supera index 1155f9391..ea741a1ed 160000 --- a/sbncode/Supera +++ b/sbncode/Supera @@ -1 +1 @@ -Subproject commit 1155f9391024d5f04a9da93c1e9c18e7eb91d023 +Subproject commit ea741a1ed9ac3cebc344cc1792068a63dbd4353b From e43408261326598ddf22b4c447ef002d8fd2992c Mon Sep 17 00:00:00 2001 From: miquelnebot Date: Thu, 30 Nov 2023 15:32:37 -0600 Subject: [PATCH 21/22] version and deps update for production patch --- CMakeLists.txt | 2 +- ups/product_deps | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d00e33986..183b0b83b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ cmake_minimum_required(VERSION 3.20 FATAL_ERROR) find_package(cetmodules 3.20.00 REQUIRED) -project(sbncode VERSION 09.72.00.05 LANGUAGES CXX) +project(sbncode VERSION 09.72.00.06 LANGUAGES CXX) message(STATUS "\n\n ========================== ${PROJECT_NAME} ==========================") diff --git a/ups/product_deps b/ups/product_deps index 12be0e3bb..7457d3fbf 100644 --- a/ups/product_deps +++ b/ups/product_deps @@ -255,10 +255,10 @@ product version qual flags genie_xsec v3_04_00 - larcv2 v2_1_0 - larsoft v09_72_00 - -sbnanaobj v09_20_06_02 - +sbnanaobj v09_20_06_03 - sbndaq_artdaq_core v1_06_00of0 - sbndata v01_04 - -sbnobj v09_16_00_01 - +sbnobj v09_16_00_02 - systematicstools v01_02_00 - nusystematics v01_02_10 - cetmodules v3_20_00 - only_for_build From f807b35aaf50a11d0461a5d17eef0a0e25afdb35 Mon Sep 17 00:00:00 2001 From: Francois Drielsma Date: Thu, 30 Nov 2023 18:19:36 -0600 Subject: [PATCH 22/22] Update Supera commit to revert to old art nomenclature --- sbncode/Supera | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbncode/Supera b/sbncode/Supera index ea741a1ed..69e0c003b 160000 --- a/sbncode/Supera +++ b/sbncode/Supera @@ -1 +1 @@ -Subproject commit ea741a1ed9ac3cebc344cc1792068a63dbd4353b +Subproject commit 69e0c003b8cabeee5bc956142b2c562043b94883