From 058d850e93bd267ced2fe42e454cfbeba2fef10b Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Thu, 15 Jan 2026 14:41:32 -0600 Subject: [PATCH 01/60] Fixed a hit mapper line to match new inputs --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index eb9a3b810..7c068dde8 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -367,22 +367,22 @@ namespace blip { art::Handle > simchanHandle; std::vector > simchanlist; if (evt.getByLabel(fSimChanProducer,simchanHandle)) - { + { art::fill_ptr_vector(simchanlist, simchanHandle); //Loop over channels to get full sedlist for(int chIndex=0; chIndex wids = wireReadoutGeom->Get().ChannelToWire( (*(simchanlist[chIndex])).Channel() ); //Not sure why this is a vector, but it should have len 1 - const geo::PlaneID& planeID = wids[0].planeID(); - if(int(planeID.Plane) != fCaloPlane) continue; //only take calorimetry plane IDE values - std::vector< sim::IDE > TempChIDE = (*simchanlist[chIndex]).TrackIDsAndEnergies(0, 999999999); - for(int ideIndex=0; ideIndex wids = wireReadoutGeom->Get().ChannelToWire( (*(simchanlist[chIndex])).Channel() ); //Not sure why this is a vector, but it should have len 1 + const geo::PlaneID& planeID = wids[0].planeID(); + if(int(planeID.Plane) != fCaloPlane) continue; //only take calorimetry plane IDE values + std::vector< sim::IDE > TempChIDE = (*simchanlist[chIndex]).TrackIDsAndEnergies(0, 999999999); + for(int ideIndex=0; ideIndex > hitHandle; @@ -442,7 +442,7 @@ namespace blip { //=============================================================== std::map< int, int > map_gh; // if input collection is already gaushit, this is trivial - if( fHitProducer == "gaushit" ) { + if( fHitProducer == "gaushit" || fHitProducer == "specialblipgaushit") { for(auto& h : hitlist ) map_gh[h.key()] = h.key(); // ... but if not, find the matching gaushit. There's no convenient // hit ID, so we must loop through and compare channel/time (ugh) From 647fcac1971dc2763ed1c5a599e99164aefd8260 Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Thu, 15 Jan 2026 14:55:36 -0600 Subject: [PATCH 02/60] Checking what branch causes new crash --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index 7c068dde8..a689dec82 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -442,7 +442,9 @@ namespace blip { //=============================================================== std::map< int, int > map_gh; // if input collection is already gaushit, this is trivial + std::cout << " About to fill in map with hitProducer " << fHitProducer << std::endl; if( fHitProducer == "gaushit" || fHitProducer == "specialblipgaushit") { + std::cout << " in special branch" << std::endl; for(auto& h : hitlist ) map_gh[h.key()] = h.key(); // ... but if not, find the matching gaushit. There's no convenient // hit ID, so we must loop through and compare channel/time (ugh) @@ -457,6 +459,7 @@ namespace blip { } } } + std::cout << "done with map" << std::endl; //===================================================== // Record PDG for every G4 Track ID From 3cf18b98afe5707e46ce8384be2dd5b80dc95617 Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Thu, 15 Jan 2026 16:52:16 -0600 Subject: [PATCH 03/60] debug --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index a689dec82..db165fee0 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -536,6 +536,7 @@ namespace blip { BlipUtils::MakeTrueBlips(pinfo, trueblips); BlipUtils::MergeTrueBlips(trueblips, fTrueBlipMergeDist); } + std::cout << "end of true blips" << std::endl; //======================================= @@ -668,6 +669,7 @@ namespace blip { //printf(" %lu plane: %i, wire: %i, time: %i\n",i,hitinfo[i].plane,hitinfo[i].wire,int(hitinfo[i].driftTime)); }//endloop over hits + std::cout << " Hit info filled in " << std::endl; //for(auto& a : tpc_plane_hitsMap ) { //for(auto& b : a.second ) @@ -734,7 +736,7 @@ namespace blip { // Hit clustering // --------------------------------------------------- std::map>> tpc_planeclustsMap; - + std::cout << "Hit clustering processing" << std::endl; for(auto const& tpc_plane_hitsMap : cryo_tpc_plane_hitsMap ) { for(auto const& plane_hitsMap : tpc_plane_hitsMap.second ) { @@ -877,6 +879,7 @@ namespace blip { }//loop over planes }//loop over TPCs }//loop over cryostats + std::cout << "Done Hit clustering processing" << std::endl; //std::cout<<"All done with clustering\n"; @@ -895,7 +898,7 @@ namespace blip { float _matchQDiffLimit= (fMatchQDiffLimit <= 0 ) ? std::numeric_limits::max() : fMatchQDiffLimit; float _matchMaxQRatio = (fMatchMaxQRatio <= 0 ) ? std::numeric_limits::max() : fMatchMaxQRatio; - + std::cout << "Plane matching " << std::endl; for(auto& tpcMap : tpc_planeclustsMap ) { // loop on TPCs //std::cout @@ -1110,6 +1113,7 @@ namespace blip { }//endloop over caloplane ("Plane A") clusters }//endif calo plane has clusters }//endloop over TPCs + std::cout << " done planematching " << std::endl; // Re-index the clusters after removing unmatched if( !keepAllClusts ) { From 64b158ae5ff396f3ac0aa67e0035e674b61e8696 Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Thu, 15 Jan 2026 17:04:52 -0600 Subject: [PATCH 04/60] make special blip gaus hit more prominent --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index db165fee0..550995f7f 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -393,7 +393,11 @@ namespace blip { // -- hits (from gaushit), these are used in truth-matching of hits art::Handle< std::vector > hitHandleGH; std::vector > hitlistGH; - if (evt.getByLabel("gaushit",hitHandleGH)) + if(fHitProducer == "specialblipgaushit") + { + if(evt.getByLabel("specialblipgaushit",hitHandleGH)) art::fill_ptr_vector(hitlistGH, hitHandleGH); + } + else if(evt.getByLabel("gaushit",hitHandleGH)) art::fill_ptr_vector(hitlistGH, hitHandleGH); // -- tracks From 9e746c705b371c91db74a38c7b2272ddde99c275 Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Fri, 16 Jan 2026 11:22:57 -0600 Subject: [PATCH 05/60] change hardcoded label --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index 550995f7f..db4e43a23 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -409,7 +409,7 @@ namespace blip { // -- associations art::FindManyP fmtrk(hitHandle,evt,fTrkProducer); art::FindManyP fmtrkGH(hitHandleGH,evt,fTrkProducer); - art::FindMany fmhh(hitHandleGH,evt,"gaushitTruthMatch"); + art::FindMany fmhh(hitHandleGH,evt,"blipgaushitTruthMatch"); /* //==================================================== // Update map of bad channels for this event From bcd7ca5c1f84500dfb6a16c52ca80430f29af7aa Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Fri, 16 Jan 2026 11:55:11 -0600 Subject: [PATCH 06/60] change hardcoded label --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index db4e43a23..ea3e5fbd0 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -655,7 +655,7 @@ namespace blip { // find associated track - if( fHitProducer == "gaushit" && fmtrk.isValid() ) { + if( fHitProducer == "specialblipgaushit" && fmtrk.isValid() ) { if(fmtrk.at(i).size()) hitinfo[i].trkid = fmtrk.at(i)[0]->ID(); // if the hit collection didn't have associations made From fa0306952f1e7a4ca1f6df3ae3ed43673cb9db90 Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Fri, 16 Jan 2026 14:13:43 -0600 Subject: [PATCH 07/60] debug --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index ea3e5fbd0..2bca553d6 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -373,9 +373,11 @@ namespace blip { for(int chIndex=0; chIndex wids = wireReadoutGeom->Get().ChannelToWire( (*(simchanlist[chIndex])).Channel() ); //Not sure why this is a vector, but it should have len 1 + std::cout << " Got my wire for chIndex " << chIndex << " it has size " << wids.size() << " first entry string is " << wids[0].toString() << std::endl; const geo::PlaneID& planeID = wids[0].planeID(); if(int(planeID.Plane) != fCaloPlane) continue; //only take calorimetry plane IDE values std::vector< sim::IDE > TempChIDE = (*simchanlist[chIndex]).TrackIDsAndEnergies(0, 999999999); + std::cout << " this channel has " << TempChIDE.size() << " IDEs" for(int ideIndex=0; ideIndex Date: Fri, 16 Jan 2026 14:18:31 -0600 Subject: [PATCH 08/60] debug --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index 2bca553d6..29dee242d 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -377,7 +377,7 @@ namespace blip { const geo::PlaneID& planeID = wids[0].planeID(); if(int(planeID.Plane) != fCaloPlane) continue; //only take calorimetry plane IDE values std::vector< sim::IDE > TempChIDE = (*simchanlist[chIndex]).TrackIDsAndEnergies(0, 999999999); - std::cout << " this channel has " << TempChIDE.size() << " IDEs" + std::cout << " this channel has " << TempChIDE.size() << " IDEs" << std::endl; for(int ideIndex=0; ideIndex Date: Fri, 16 Jan 2026 15:13:26 -0600 Subject: [PATCH 09/60] Adding back sim energyDeposit interface --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 35 +++++++++++++++--------- sbndcode/BlipRecoSBND/Utils/BlipUtils.cc | 23 ++++++++++++---- sbndcode/BlipRecoSBND/Utils/BlipUtils.h | 6 ++-- 3 files changed, 43 insertions(+), 21 deletions(-) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index 29dee242d..6de0af9a3 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -357,31 +357,32 @@ namespace blip { if (evt.getByLabel(fGeantProducer,pHandle)) art::fill_ptr_vector(plist, pHandle); - // -- SimEnergyDeposits (usually dropped in reco - //art::Handle > sedHandle; - std::vector sedlist; - //if (evt.getByLabel(fSimDepProducer,sedHandle)){ - // art::fill_ptr_vector(sedlist, sedHandle); - // } - // -- SimChannels (usually dropped in reco) + // -- SimEnergyDeposits + art::Handle > sedHandle; + std::vector > sedlist; + if (evt.getByLabel(fSimDepProducer,sedHandle)){ + art::fill_ptr_vector(sedlist, sedHandle); + } + std::vector sIDElist; + // -- SimChannels art::Handle > simchanHandle; std::vector > simchanlist; if (evt.getByLabel(fSimChanProducer,simchanHandle)) { art::fill_ptr_vector(simchanlist, simchanHandle); - //Loop over channels to get full sedlist + //Loop over channels to get full sIDElist for(int chIndex=0; chIndex wids = wireReadoutGeom->Get().ChannelToWire( (*(simchanlist[chIndex])).Channel() ); //Not sure why this is a vector, but it should have len 1 - std::cout << " Got my wire for chIndex " << chIndex << " it has size " << wids.size() << " first entry string is " << wids[0].toString() << std::endl; const geo::PlaneID& planeID = wids[0].planeID(); if(int(planeID.Plane) != fCaloPlane) continue; //only take calorimetry plane IDE values - std::vector< sim::IDE > TempChIDE = (*simchanlist[chIndex]).TrackIDsAndEnergies(0, 999999999); + std::cout << " Got my wire for chIndex " << chIndex << " it has size " << wids.size() << " first entry string is " << wids[0].toString() << std::endl; + unsigned int MaxTDCTick = 3401; + std::vector< sim::IDE > TempChIDE = (*simchanlist[chIndex]).TrackIDsAndEnergies(0, MaxTDCTick); std::cout << " this channel has " << TempChIDE.size() << " IDEs" << std::endl; for(int ideIndex=0; ideIndex IDE otherwise. This is usually kept but results in strange bugs. + { + BlipUtils::FillParticleInfo( *plist[i], pinfo[i], sIDElist, fCaloPlane); + } if( map_g4trkid_charge[pinfo[i].trackId] ) pinfo[i].numElectrons = (int)map_g4trkid_charge[pinfo[i].trackId]; pinfo[i].index = i; } diff --git a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc index e1b8b1b48..64eddc254 100644 --- a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc +++ b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc @@ -32,9 +32,8 @@ namespace BlipUtils { //=========================================================================== // Provided a MCParticle, calculate everything we'll need for later calculations // and save into ParticleInfo object - void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, SEDVec_t& sedvec, int caloPlane){ - - // Get important info and do conversions +void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo){ + // Get important info and do conversions pinfo.particle = part; pinfo.trackId = part.TrackId(); pinfo.isPrimary = (int)(part.Process() == "primary"); @@ -50,17 +49,29 @@ namespace BlipUtils { pinfo.time = /*ns ->mus*/1e-3 * part.T(); pinfo.endtime = /*ns ->mus*/1e-3 * part.EndT(); pinfo.numTrajPts = part.NumberTrajectoryPoints(); - // Pathlength (in AV) and start/end point pinfo.pathLength = PathLength( part, pinfo.startPoint, pinfo.endPoint); - // Central position of trajectory pinfo.position = 0.5*(pinfo.startPoint+pinfo.endPoint); - // Energy/charge deposited by this particle, found using SimEnergyDeposits pinfo.depEnergy = 0; pinfo.depElectrons = 0; + return; +} +void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, SEDVec_t& sedvec, int caloPlane){ + FillParticleInfo( part, pinfo); for(auto& sed : sedvec ) { + if( sed->TrackID() == part.TrackId() ) { + pinfo.depEnergy += sed->Energy(); + pinfo.depElectrons += sed->NumElectrons(); + } + } + return; + } + void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, SIDEVec_t& sIDEvec, int caloPlane){ + + FillParticleInfo( part, pinfo); + for(auto& sed : sIDEvec ) { if( -1*sed.trackID == part.TrackId() || sed.trackID == part.TrackId() ) { pinfo.depEnergy += sed.energy; pinfo.depElectrons += sed.numElectrons; diff --git a/sbndcode/BlipRecoSBND/Utils/BlipUtils.h b/sbndcode/BlipRecoSBND/Utils/BlipUtils.h index 0584c9792..af947f0f0 100644 --- a/sbndcode/BlipRecoSBND/Utils/BlipUtils.h +++ b/sbndcode/BlipRecoSBND/Utils/BlipUtils.h @@ -37,8 +37,8 @@ #include "sbndcode/BlipRecoSBND/Utils/DataTypes.h" #include "TH1D.h" - -typedef std::vector SEDVec_t; +typedef std::vector> SEDVec_t; +typedef std::vector SIDEVec_t; geo::View_t kViews[3]={geo::kU, geo::kV, geo::kW}; @@ -49,6 +49,8 @@ namespace BlipUtils { //################################################### //void InitializeDetProps(); void FillParticleInfo(simb::MCParticle const&, blip::ParticleInfo&, SEDVec_t&, int plane=2); + void FillParticleInfo(simb::MCParticle const&, blip::ParticleInfo&, SEDVec_t&, int plane=2); + void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo); //void CalcPartDrift(blip::ParticleInfo&, int); //void CalcTotalDep(float&,int&,float&, SEDVec_t&); void MakeTrueBlips(std::vector&, std::vector&); From 666f85f3d48de9a82d2e226174bf1965eef2b121 Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Fri, 16 Jan 2026 15:19:39 -0600 Subject: [PATCH 10/60] Removed default arg --- sbndcode/BlipRecoSBND/Utils/BlipUtils.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sbndcode/BlipRecoSBND/Utils/BlipUtils.h b/sbndcode/BlipRecoSBND/Utils/BlipUtils.h index af947f0f0..ecbfd76e6 100644 --- a/sbndcode/BlipRecoSBND/Utils/BlipUtils.h +++ b/sbndcode/BlipRecoSBND/Utils/BlipUtils.h @@ -48,8 +48,8 @@ namespace BlipUtils { // Functions related to blip reconstruction //################################################### //void InitializeDetProps(); - void FillParticleInfo(simb::MCParticle const&, blip::ParticleInfo&, SEDVec_t&, int plane=2); - void FillParticleInfo(simb::MCParticle const&, blip::ParticleInfo&, SEDVec_t&, int plane=2); + void FillParticleInfo(simb::MCParticle const&, blip::ParticleInfo&, SEDVec_t&, int plane); + void FillParticleInfo(simb::MCParticle const&, blip::ParticleInfo&, SEDVec_t&, int plane); void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo); //void CalcPartDrift(blip::ParticleInfo&, int); //void CalcTotalDep(float&,int&,float&, SEDVec_t&); From d4854a10008f787883c074ca5a8c4d60b5b50ada Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Fri, 16 Jan 2026 15:22:02 -0600 Subject: [PATCH 11/60] wrong type --- sbndcode/BlipRecoSBND/Utils/BlipUtils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbndcode/BlipRecoSBND/Utils/BlipUtils.h b/sbndcode/BlipRecoSBND/Utils/BlipUtils.h index ecbfd76e6..089b863d5 100644 --- a/sbndcode/BlipRecoSBND/Utils/BlipUtils.h +++ b/sbndcode/BlipRecoSBND/Utils/BlipUtils.h @@ -49,7 +49,7 @@ namespace BlipUtils { //################################################### //void InitializeDetProps(); void FillParticleInfo(simb::MCParticle const&, blip::ParticleInfo&, SEDVec_t&, int plane); - void FillParticleInfo(simb::MCParticle const&, blip::ParticleInfo&, SEDVec_t&, int plane); + void FillParticleInfo(simb::MCParticle const&, blip::ParticleInfo&, SIDEVec_t&, int plane); void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo); //void CalcPartDrift(blip::ParticleInfo&, int); //void CalcTotalDep(float&,int&,float&, SEDVec_t&); From 645587bfac0aa4df101a6409ef1a256c917425dd Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Fri, 16 Jan 2026 15:24:52 -0600 Subject: [PATCH 12/60] wrong type --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index 6de0af9a3..76629727c 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -358,7 +358,7 @@ namespace blip { art::fill_ptr_vector(plist, pHandle); // -- SimEnergyDeposits - art::Handle > sedHandle; + art::Handle > sedHandle; std::vector > sedlist; if (evt.getByLabel(fSimDepProducer,sedHandle)){ art::fill_ptr_vector(sedlist, sedHandle); From f1a0d28b0e7cac51af0c0b12d1d70fb3de16dc76 Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Fri, 16 Jan 2026 15:33:41 -0600 Subject: [PATCH 13/60] debug --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index 76629727c..47f065abe 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -386,6 +386,7 @@ namespace blip { } } } + std::cout << "sed list " << sedlist.size() << " IDElist " << sIDElist.size() << std::endl; // -- hits (from input module, usually track-masked subset of gaushit) art::Handle< std::vector > hitHandle; From 1ae2dd99173e96a09c7450f1fad596b90a45d43f Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Fri, 16 Jan 2026 15:47:44 -0600 Subject: [PATCH 14/60] checking on sim energy deposit patch --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index 47f065abe..54164e425 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -361,6 +361,7 @@ namespace blip { art::Handle > sedHandle; std::vector > sedlist; if (evt.getByLabel(fSimDepProducer,sedHandle)){ + std::cout << " in the sedlist filler " << std::endl; art::fill_ptr_vector(sedlist, sedHandle); } std::vector sIDElist; @@ -376,10 +377,8 @@ namespace blip { std::vector wids = wireReadoutGeom->Get().ChannelToWire( (*(simchanlist[chIndex])).Channel() ); //Not sure why this is a vector, but it should have len 1 const geo::PlaneID& planeID = wids[0].planeID(); if(int(planeID.Plane) != fCaloPlane) continue; //only take calorimetry plane IDE values - std::cout << " Got my wire for chIndex " << chIndex << " it has size " << wids.size() << " first entry string is " << wids[0].toString() << std::endl; unsigned int MaxTDCTick = 3401; std::vector< sim::IDE > TempChIDE = (*simchanlist[chIndex]).TrackIDsAndEnergies(0, MaxTDCTick); - std::cout << " this channel has " << TempChIDE.size() << " IDEs" << std::endl; for(int ideIndex=0; ideIndex0) { + std::cout << " filling particle info with sedlist" << std::endl; BlipUtils::FillParticleInfo( *plist[i], pinfo[i], sedlist, fCaloPlane); } else //use sim::Channel -> IDE otherwise. This is usually kept but results in strange bugs. From 24c72c084174ce8abdfc103708371d15a4a990ef Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Fri, 16 Jan 2026 15:57:00 -0600 Subject: [PATCH 15/60] change ide performance --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index 54164e425..73bdead1f 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -377,7 +377,7 @@ namespace blip { std::vector wids = wireReadoutGeom->Get().ChannelToWire( (*(simchanlist[chIndex])).Channel() ); //Not sure why this is a vector, but it should have len 1 const geo::PlaneID& planeID = wids[0].planeID(); if(int(planeID.Plane) != fCaloPlane) continue; //only take calorimetry plane IDE values - unsigned int MaxTDCTick = 3401; + unsigned int MaxTDCTick = 4294967294; // 1 under 32 bit unsigned int max std::vector< sim::IDE > TempChIDE = (*simchanlist[chIndex]).TrackIDsAndEnergies(0, MaxTDCTick); for(int ideIndex=0; ideIndex Date: Tue, 20 Jan 2026 10:33:12 -0600 Subject: [PATCH 16/60] fixing blip ID markers? May not update on blip object --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index 73bdead1f..31079e5a9 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -1068,7 +1068,7 @@ namespace blip { for(auto& hc : hcGroup ) { hitclust[hc.ID].isMatched = true; for(auto hit : hitclust[hc.ID].HitIDs) hitinfo[hit].ismatch = true; - + hitclust[hc.ID].BlipID = newBlip.ID; // Diagnostic plots for successful 3-plane matches //if( picky && hc.Plane != fCaloPlane ) { //float q1 = (float)newBlip.clusters[fCaloPlane].Charge; From 0960ff9d641ab5df46d7930823c0f628a1270a57 Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Tue, 20 Jan 2026 10:46:12 -0600 Subject: [PATCH 17/60] Better spot for blip id update --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index 31079e5a9..e716b54a8 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -1068,7 +1068,6 @@ namespace blip { for(auto& hc : hcGroup ) { hitclust[hc.ID].isMatched = true; for(auto hit : hitclust[hc.ID].HitIDs) hitinfo[hit].ismatch = true; - hitclust[hc.ID].BlipID = newBlip.ID; // Diagnostic plots for successful 3-plane matches //if( picky && hc.Plane != fCaloPlane ) { //float q1 = (float)newBlip.clusters[fCaloPlane].Charge; @@ -1123,6 +1122,10 @@ namespace blip { hitclust[hc.ID].BlipID = newBlip.ID; for( auto& h : hc.HitIDs ) hitinfo[h].blipid = newBlip.ID; } + for(auto hc : newBlip.clusters) + { + hc.BlipID = newBlip.ID; + } }//endif ncands > 0 From baeb5390c258653912f89147a8a4bbab6d05d287 Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Tue, 20 Jan 2026 11:10:54 -0600 Subject: [PATCH 18/60] Maybe we add it to the vector too fast? --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index e716b54a8..86fd63e9c 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -1117,7 +1117,6 @@ namespace blip { // if we made it this far, the blip is good! // associate this blip with the hits and clusters within it newBlip.ID = blips.size(); - blips.push_back(newBlip); for(auto& hc : hcGroup ) { hitclust[hc.ID].BlipID = newBlip.ID; for( auto& h : hc.HitIDs ) hitinfo[h].blipid = newBlip.ID; @@ -1126,6 +1125,7 @@ namespace blip { { hc.BlipID = newBlip.ID; } + blips.push_back(newBlip); }//endif ncands > 0 From 0043a9553ad8fcd179f1612cf3bd8ffac3eaf2f0 Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Tue, 20 Jan 2026 11:23:53 -0600 Subject: [PATCH 19/60] Try explicitly accessing array --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index 86fd63e9c..a39de37d8 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -1121,9 +1121,9 @@ namespace blip { hitclust[hc.ID].BlipID = newBlip.ID; for( auto& h : hc.HitIDs ) hitinfo[h].blipid = newBlip.ID; } - for(auto hc : newBlip.clusters) + for(int iclust=0; iclust Date: Tue, 20 Jan 2026 11:31:44 -0600 Subject: [PATCH 20/60] That fixed it. Add a check for filling in blipID on real clusters --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index a39de37d8..c5758a8df 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -1123,7 +1123,7 @@ namespace blip { } for(int iclust=0; iclust-1) newBlip.clusters[iclust].BlipID = newBlip.ID; } blips.push_back(newBlip); From 1a077c86b9846d2828dff26ad2146eed2d513fe0 Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Tue, 20 Jan 2026 12:00:01 -0600 Subject: [PATCH 21/60] Removed debug --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 38 ++++++------------------ 1 file changed, 9 insertions(+), 29 deletions(-) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index c5758a8df..9429bc8fb 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -32,7 +32,6 @@ namespace blip { // Loop over cryostats - std::cout<<"NCryostats: "< > sedHandle; std::vector > sedlist; if (evt.getByLabel(fSimDepProducer,sedHandle)){ - std::cout << " in the sedlist filler " << std::endl; art::fill_ptr_vector(sedlist, sedHandle); } std::vector sIDElist; @@ -385,8 +376,6 @@ namespace blip { } } } - std::cout << "sed list " << sedlist.size() << " IDElist " << sIDElist.size() << std::endl; - // -- hits (from input module, usually track-masked subset of gaushit) art::Handle< std::vector > hitHandle; std::vector > hitlist; @@ -449,9 +438,7 @@ namespace blip { //=============================================================== std::map< int, int > map_gh; // if input collection is already gaushit, this is trivial - std::cout << " About to fill in map with hitProducer " << fHitProducer << std::endl; if( fHitProducer == "gaushit" || fHitProducer == "specialblipgaushit") { - std::cout << " in special branch" << std::endl; for(auto& h : hitlist ) map_gh[h.key()] = h.key(); // ... but if not, find the matching gaushit. There's no convenient // hit ID, so we must loop through and compare channel/time (ugh) @@ -465,9 +452,7 @@ namespace blip { break; } } - } - std::cout << "done with map" << std::endl; - + } //===================================================== // Record PDG for every G4 Track ID //===================================================== @@ -539,7 +524,6 @@ namespace blip { //use sim::EnergyDeposits by default. This is heavy and may be dropped if(sedlist.size()>0) { - std::cout << " filling particle info with sedlist" << std::endl; BlipUtils::FillParticleInfo( *plist[i], pinfo[i], sedlist, fCaloPlane); } else //use sim::Channel -> IDE otherwise. This is usually kept but results in strange bugs. @@ -552,8 +536,6 @@ namespace blip { BlipUtils::MakeTrueBlips(pinfo, trueblips); BlipUtils::MergeTrueBlips(trueblips, fTrueBlipMergeDist); } - std::cout << "end of true blips" << std::endl; - //======================================= // Map track IDs to the index in the vector @@ -684,9 +666,7 @@ namespace blip { if( hitinfo[i].trkid < 0 ) nhits_untracked++; //printf(" %lu plane: %i, wire: %i, time: %i\n",i,hitinfo[i].plane,hitinfo[i].wire,int(hitinfo[i].driftTime)); - }//endloop over hits - std::cout << " Hit info filled in " << std::endl; - + }//endloop over hits //for(auto& a : tpc_plane_hitsMap ) { //for(auto& b : a.second ) //std::cout<<"TPC "<>> tpc_planeclustsMap; - std::cout << "Hit clustering processing" << std::endl; for(auto const& tpc_plane_hitsMap : cryo_tpc_plane_hitsMap ) { for(auto const& plane_hitsMap : tpc_plane_hitsMap.second ) { @@ -895,7 +874,6 @@ namespace blip { }//loop over planes }//loop over TPCs }//loop over cryostats - std::cout << "Done Hit clustering processing" << std::endl; //std::cout<<"All done with clustering\n"; @@ -914,7 +892,6 @@ namespace blip { float _matchQDiffLimit= (fMatchQDiffLimit <= 0 ) ? std::numeric_limits::max() : fMatchQDiffLimit; float _matchMaxQRatio = (fMatchMaxQRatio <= 0 ) ? std::numeric_limits::max() : fMatchMaxQRatio; - std::cout << "Plane matching " << std::endl; for(auto& tpcMap : tpc_planeclustsMap ) { // loop on TPCs //std::cout @@ -1121,9 +1098,14 @@ namespace blip { hitclust[hc.ID].BlipID = newBlip.ID; for( auto& h : hc.HitIDs ) hitinfo[h].blipid = newBlip.ID; } + //BLIPS HAVE A COPY OF HITCLUSTERS NOT A POINTER + //UPDATE THE HITCLUSTER VARS THAT HAVE CHANGED SINCE CONSTRUCTION for(int iclust=0; iclust-1) newBlip.clusters[iclust].BlipID = newBlip.ID; + if(newBlip.clusters[iclust].ID>-1){ + newBlip.clusters[iclust].BlipID = newBlip.ID; + newBlip.clusters[iclust].isMatched = true; + } } blips.push_back(newBlip); @@ -1132,8 +1114,6 @@ namespace blip { }//endloop over caloplane ("Plane A") clusters }//endif calo plane has clusters }//endloop over TPCs - std::cout << " done planematching " << std::endl; - // Re-index the clusters after removing unmatched if( !keepAllClusts ) { std::vector hitclust_filt; From 70cec633e48718807f93920adc06c61023b38fea Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Tue, 20 Jan 2026 12:37:06 -0600 Subject: [PATCH 22/60] temp debug --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index 9429bc8fb..7a6436616 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -376,6 +376,7 @@ namespace blip { } } } + std::cout <<"IDE SIZE " << sIDElist.size() << " vs EDEP SIZE " << sedlist.size() << std::endl; // -- hits (from input module, usually track-masked subset of gaushit) art::Handle< std::vector > hitHandle; std::vector > hitlist; From a33d9ac3d022739c438ff5a465792c8a5af02337 Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Tue, 20 Jan 2026 14:59:52 -0600 Subject: [PATCH 23/60] removed debug --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 1 - sbndcode/BlipRecoSBND/blipreco_configs.fcl | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index 7a6436616..9429bc8fb 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -376,7 +376,6 @@ namespace blip { } } } - std::cout <<"IDE SIZE " << sIDElist.size() << " vs EDEP SIZE " << sedlist.size() << std::endl; // -- hits (from input module, usually track-masked subset of gaushit) art::Handle< std::vector > hitHandle; std::vector > hitlist; diff --git a/sbndcode/BlipRecoSBND/blipreco_configs.fcl b/sbndcode/BlipRecoSBND/blipreco_configs.fcl index 1d4158a21..e771f2d21 100644 --- a/sbndcode/BlipRecoSBND/blipreco_configs.fcl +++ b/sbndcode/BlipRecoSBND/blipreco_configs.fcl @@ -8,7 +8,7 @@ sbnd_blipalg: HitProducer: "specialblipgaushit" #// input recob::Hits to use for blip reconstruction TrkProducer: "blipPandoraTrackCopy" #// input recob::Tracks to use for blip reconstruction GeantProducer: "largeant" #// input sim::MCParticles (getting true particle info) - SimEDepProducer: "ionandscint" #// input sim::SimEnergyDeposits (getting energy/electrons deposited) + SimEDepProducer: "ionandscint:priorSCE:G4" #// input sim::SimEnergyDeposits (getting energy/electrons deposited) SimChanProducer: "simtpc2d:simpleSC:DetSim" #// label for sim::SimChannels (getting drifted charge; optional) MaxHitTrkLength: 5.0 #// hits in trks > this length will be vetoed [cm] DoHitFiltering: false #// filter hits based on amp, width, RMS From 39f8a7d173438b5b8873a254460e8ca59dc0af01 Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Wed, 21 Jan 2026 16:25:27 -0600 Subject: [PATCH 24/60] Minor fix to true blip construction --- sbndcode/BlipRecoSBND/Utils/BlipUtils.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc index 64eddc254..065d99ae0 100644 --- a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc +++ b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc @@ -149,7 +149,7 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, simb::MCParticle& part = pinfo.particle; // Skip neutrons, photons - // if( part.PdgCode() == 2112 || part.PdgCode() == 22 ) return; + if( part.PdgCode() == 2112 || part.PdgCode() == 22 ) return; // Check that path length isn't zero if( !pinfo.pathLength ) return; From 3ecebc553f11eb835f386f8865e4157dd51aa299 Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Wed, 21 Jan 2026 17:08:00 -0600 Subject: [PATCH 25/60] Break ancestry at neutron too --- sbndcode/BlipRecoSBND/Utils/BlipUtils.cc | 5 +++-- sbndcode/BlipRecoSBND/Utils/BlipUtils.h | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc index 065d99ae0..0dd4a8587 100644 --- a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc +++ b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc @@ -115,7 +115,7 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, simb::MCParticle& p = pinfo[j].particle; std::string pr = p.Process(); if( p.PdgCode() != 2112 && (pr == "eIoni" || pr == "muIoni" || pr == "hIoni") ){ - if( IsAncestorOf(p.TrackId(),part.TrackId(),true) ) GrowTrueBlip(pinfo[j],tb); + if( IsAncestorOf(p.TrackId(),part.TrackId(),true,true) ) GrowTrueBlip(pinfo[j],tb); } } } @@ -485,7 +485,7 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, //==================================================================== // Function to determine if a particle descended from another particle. // Allows option to break lineage at photons for contiguous parentage. - bool IsAncestorOf(int particleID, int ancestorID, bool breakAtPhots = false){ + bool IsAncestorOf(int particleID, int ancestorID, bool breakAtPhots = false, bool breakAtNeutrons = false){ art::ServiceHandle pi_serv; const sim::ParticleList& plist = pi_serv->ParticleList(); if( particleID == ancestorID ) return true; @@ -499,6 +499,7 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, simb::MCParticle pM = pi_serv->TrackIdToParticle(p.Mother()); if ( pM.TrackId() == ancestorID ) { return true; } else if ( breakAtPhots == true && pM.PdgCode() == 22 ) { return false; } + else if ( breakAtNeutrons && pM.PdgCode() == 2112 ) { return false; } else if ( pM.Process() == "primary" || pM.TrackId() == 1 ) { return false; } else if ( pM.Mother() == 0 ) { return false; } else { particleID = pM.TrackId(); } diff --git a/sbndcode/BlipRecoSBND/Utils/BlipUtils.h b/sbndcode/BlipRecoSBND/Utils/BlipUtils.h index 089b863d5..59ed79735 100644 --- a/sbndcode/BlipRecoSBND/Utils/BlipUtils.h +++ b/sbndcode/BlipRecoSBND/Utils/BlipUtils.h @@ -80,7 +80,7 @@ namespace BlipUtils { //bool G4IdToMCTruth( int const, art::Ptr&); double PathLength(const simb::MCParticle&, TVector3&, TVector3&); double PathLength(const simb::MCParticle&); - bool IsAncestorOf(int, int, bool); + bool IsAncestorOf(int, int, bool, bool); double DistToBoundary(const recob::Track::Point_t&); double DistToLine(TVector3&, TVector3&, TVector3&); double DistToLine2D(TVector2&, TVector2&, TVector2&); From ee016146a9672ba232b50ef7269728d2447848bf Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Thu, 22 Jan 2026 10:14:04 -0600 Subject: [PATCH 26/60] Removing special behavior on gamma/neutron outside of CheckAncestry --- sbndcode/BlipRecoSBND/Utils/BlipUtils.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc index 0dd4a8587..c9a954d88 100644 --- a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc +++ b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc @@ -149,7 +149,7 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, simb::MCParticle& part = pinfo.particle; // Skip neutrons, photons - if( part.PdgCode() == 2112 || part.PdgCode() == 22 ) return; + // if( part.PdgCode() == 2112 || part.PdgCode() == 22 ) return; // Check that path length isn't zero if( !pinfo.pathLength ) return; From adc506c7c361597ef50c187b91d6854ebda5903a Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Thu, 22 Jan 2026 12:04:12 -0600 Subject: [PATCH 27/60] Noticed sim depEnergy was staying at zero. Trying to fix it --- sbndcode/BlipRecoSBND/Utils/BlipUtils.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc index c9a954d88..0b06fc9b2 100644 --- a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc +++ b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc @@ -61,7 +61,7 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo){ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, SEDVec_t& sedvec, int caloPlane){ FillParticleInfo( part, pinfo); for(auto& sed : sedvec ) { - if( sed->TrackID() == part.TrackId() ) { + if( -1*sed.trackID == part.TrackId() || sed.trackID == part.TrackId() ) { pinfo.depEnergy += sed->Energy(); pinfo.depElectrons += sed->NumElectrons(); } From 43100bf089065ba1b330d227b55c0bb3be991bc5 Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Thu, 22 Jan 2026 12:06:13 -0600 Subject: [PATCH 28/60] typo --- sbndcode/BlipRecoSBND/Utils/BlipUtils.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc index 0b06fc9b2..af51498d6 100644 --- a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc +++ b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc @@ -61,7 +61,7 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo){ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, SEDVec_t& sedvec, int caloPlane){ FillParticleInfo( part, pinfo); for(auto& sed : sedvec ) { - if( -1*sed.trackID == part.TrackId() || sed.trackID == part.TrackId() ) { + if( -1*sed.trackID() == part.TrackId() || sed.trackID() == part.TrackId() ) { pinfo.depEnergy += sed->Energy(); pinfo.depElectrons += sed->NumElectrons(); } From 79fb458c8a17e7fd3e813421e4951c0e5e4d7a20 Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Thu, 22 Jan 2026 12:12:00 -0600 Subject: [PATCH 29/60] typo --- sbndcode/BlipRecoSBND/Utils/BlipUtils.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc index af51498d6..1f5c8278d 100644 --- a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc +++ b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc @@ -61,7 +61,7 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo){ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, SEDVec_t& sedvec, int caloPlane){ FillParticleInfo( part, pinfo); for(auto& sed : sedvec ) { - if( -1*sed.trackID() == part.TrackId() || sed.trackID() == part.TrackId() ) { + if( -1*sed.TrackID() == part.TrackId() || sed.TrackID() == part.TrackId() ) { pinfo.depEnergy += sed->Energy(); pinfo.depElectrons += sed->NumElectrons(); } From c433721908f1f3c288b4f17317271e4646648ab1 Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Thu, 22 Jan 2026 12:15:42 -0600 Subject: [PATCH 30/60] typo --- sbndcode/BlipRecoSBND/Utils/BlipUtils.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc index 1f5c8278d..a51ecf6f2 100644 --- a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc +++ b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc @@ -61,7 +61,7 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo){ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, SEDVec_t& sedvec, int caloPlane){ FillParticleInfo( part, pinfo); for(auto& sed : sedvec ) { - if( -1*sed.TrackID() == part.TrackId() || sed.TrackID() == part.TrackId() ) { + if( -1*sed->TrackID() == part.TrackId() || sed->TrackID() == part.TrackId() ) { pinfo.depEnergy += sed->Energy(); pinfo.depElectrons += sed->NumElectrons(); } From 9efb275b95e8bd401bda16269b30e40c82b2f28f Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Thu, 22 Jan 2026 12:20:38 -0600 Subject: [PATCH 31/60] debug --- sbndcode/BlipRecoSBND/Utils/BlipUtils.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc index a51ecf6f2..c63c4a4ad 100644 --- a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc +++ b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc @@ -61,6 +61,7 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo){ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, SEDVec_t& sedvec, int caloPlane){ FillParticleInfo( part, pinfo); for(auto& sed : sedvec ) { + std::cout << sed->TrackID() << " vs " << part.TrackId() << std::endl; if( -1*sed->TrackID() == part.TrackId() || sed->TrackID() == part.TrackId() ) { pinfo.depEnergy += sed->Energy(); pinfo.depElectrons += sed->NumElectrons(); @@ -69,7 +70,6 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, return; } void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, SIDEVec_t& sIDEvec, int caloPlane){ - FillParticleInfo( part, pinfo); for(auto& sed : sIDEvec ) { if( -1*sed.trackID == part.TrackId() || sed.trackID == part.TrackId() ) { From 5c40d9c9ac5115d51fbd9f76e0573e7bb27844b7 Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Thu, 22 Jan 2026 12:23:54 -0600 Subject: [PATCH 32/60] debug --- sbndcode/BlipRecoSBND/Utils/BlipUtils.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc index c63c4a4ad..27db686f7 100644 --- a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc +++ b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc @@ -61,8 +61,8 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo){ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, SEDVec_t& sedvec, int caloPlane){ FillParticleInfo( part, pinfo); for(auto& sed : sedvec ) { - std::cout << sed->TrackID() << " vs " << part.TrackId() << std::endl; if( -1*sed->TrackID() == part.TrackId() || sed->TrackID() == part.TrackId() ) { + std::cout << " recording some edep information" << std::endl; pinfo.depEnergy += sed->Energy(); pinfo.depElectrons += sed->NumElectrons(); } From 9a4c8a370bf98a68ab14343ebfcded728533a2f5 Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Thu, 22 Jan 2026 13:16:40 -0600 Subject: [PATCH 33/60] change grow blip conditions --- sbndcode/BlipRecoSBND/Utils/BlipUtils.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc index 27db686f7..f5fadf941 100644 --- a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc +++ b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc @@ -62,7 +62,6 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, FillParticleInfo( part, pinfo); for(auto& sed : sedvec ) { if( -1*sed->TrackID() == part.TrackId() || sed->TrackID() == part.TrackId() ) { - std::cout << " recording some edep information" << std::endl; pinfo.depEnergy += sed->Energy(); pinfo.depElectrons += sed->NumElectrons(); } @@ -114,7 +113,7 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, for(size_t j=0; j Date: Thu, 22 Jan 2026 14:16:59 -0600 Subject: [PATCH 34/60] debug --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 2 ++ sbndcode/BlipRecoSBND/Utils/BlipUtils.cc | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index 9429bc8fb..55cb95f9f 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -534,7 +534,9 @@ namespace blip { pinfo[i].index = i; } BlipUtils::MakeTrueBlips(pinfo, trueblips); + std::cout << "True blip size after make " << trueblips.size() << std::endl; BlipUtils::MergeTrueBlips(trueblips, fTrueBlipMergeDist); + std::cout << "True blip size after merge " << trueblips.size() << std::endl; } //======================================= diff --git a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc index f5fadf941..82dc79ff7 100644 --- a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc +++ b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc @@ -113,7 +113,7 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, for(size_t j=0; j Date: Thu, 22 Jan 2026 15:48:27 -0600 Subject: [PATCH 35/60] debug --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index 55cb95f9f..6c8507fcd 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -693,6 +693,7 @@ namespace blip { // Basic track inclusion cut: exclude hits that were tracked + int Tracked=0; for(size_t i=0; iLength() > fMaxHitTrkLength ) { hitIsTracked[i] = true; hitIsGood[i] = false; + Tracked++; } } + std::cout << Tracked << " hits were in tracks from pandora " << std::endl; // Filter based on hit properties. For hits that are a part of From 6a7d42f7beb7a7dad632c097bb0057a4a6ea1809 Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Thu, 22 Jan 2026 16:03:00 -0600 Subject: [PATCH 36/60] debug --- sbndcode/BlipRecoSBND/BlipAna_module.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sbndcode/BlipRecoSBND/BlipAna_module.cc b/sbndcode/BlipRecoSBND/BlipAna_module.cc index b9ca904e8..5153898e4 100644 --- a/sbndcode/BlipRecoSBND/BlipAna_module.cc +++ b/sbndcode/BlipRecoSBND/BlipAna_module.cc @@ -1582,6 +1582,8 @@ void BlipAna::PrintClusterInfo(const blip::HitClust& hc){ hc.EdepID, hc.isMatched ); + printf("G4 IDs contib"); + for(g4ID : hc.G4IDs) printf("%i", g4ID); } void BlipAna::PrintBlipInfo(const blip::Blip& bl){ From 71d60223f6cb4678366b35f6744f8ee2e6c58a60 Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Thu, 22 Jan 2026 16:06:32 -0600 Subject: [PATCH 37/60] debug --- sbndcode/BlipRecoSBND/BlipAna_module.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbndcode/BlipRecoSBND/BlipAna_module.cc b/sbndcode/BlipRecoSBND/BlipAna_module.cc index 5153898e4..13a64367d 100644 --- a/sbndcode/BlipRecoSBND/BlipAna_module.cc +++ b/sbndcode/BlipRecoSBND/BlipAna_module.cc @@ -1583,7 +1583,7 @@ void BlipAna::PrintClusterInfo(const blip::HitClust& hc){ hc.isMatched ); printf("G4 IDs contib"); - for(g4ID : hc.G4IDs) printf("%i", g4ID); + for(int g4ID : hc.G4IDs) printf("%i", g4ID); } void BlipAna::PrintBlipInfo(const blip::Blip& bl){ From 7ea7cd4a62ca3262ddd143a60002b4f63999de6d Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Thu, 22 Jan 2026 16:09:15 -0600 Subject: [PATCH 38/60] debug --- sbndcode/BlipRecoSBND/BlipAna_module.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sbndcode/BlipRecoSBND/BlipAna_module.cc b/sbndcode/BlipRecoSBND/BlipAna_module.cc index 13a64367d..8ba95a8ea 100644 --- a/sbndcode/BlipRecoSBND/BlipAna_module.cc +++ b/sbndcode/BlipRecoSBND/BlipAna_module.cc @@ -1582,8 +1582,9 @@ void BlipAna::PrintClusterInfo(const blip::HitClust& hc){ hc.EdepID, hc.isMatched ); - printf("G4 IDs contib"); - for(int g4ID : hc.G4IDs) printf("%i", g4ID); + printf("G4 IDs contib \n"); + for(int g4ID : hc.G4IDs) printf(" %i ", g4ID); + printf("\n"); } void BlipAna::PrintBlipInfo(const blip::Blip& bl){ From 1ee64d5ad25f561d21abd55b9910aea5fd71d287 Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Thu, 22 Jan 2026 16:55:31 -0600 Subject: [PATCH 39/60] debug --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index 6c8507fcd..c334b1e82 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -385,12 +385,8 @@ namespace blip { // -- hits (from gaushit), these are used in truth-matching of hits art::Handle< std::vector > hitHandleGH; std::vector > hitlistGH; - if(fHitProducer == "specialblipgaushit") - { - if(evt.getByLabel("specialblipgaushit",hitHandleGH)) art::fill_ptr_vector(hitlistGH, hitHandleGH); - } - else if(evt.getByLabel("gaushit",hitHandleGH)) - art::fill_ptr_vector(hitlistGH, hitHandleGH); + if(evt.getByLabel("specialblipgaushit",hitHandleGH)) art::fill_ptr_vector(hitlistGH, hitHandleGH); + else if(evt.getByLabel("gaushit",hitHandleGH)) art::fill_ptr_vector(hitlistGH, hitHandleGH); // -- tracks art::Handle< std::vector > tracklistHandle; @@ -531,6 +527,7 @@ namespace blip { BlipUtils::FillParticleInfo( *plist[i], pinfo[i], sIDElist, fCaloPlane); } if( map_g4trkid_charge[pinfo[i].trackId] ) pinfo[i].numElectrons = (int)map_g4trkid_charge[pinfo[i].trackId]; + else pinfo[i].numElectrons = pinfo[i].depElectrons; // JACOB ADDITION Jan22, 2026 for strange channel IDE results pinfo[i].index = i; } BlipUtils::MakeTrueBlips(pinfo, trueblips); From 3c4cad33d17e66a094f01308b902cc2b9ab63647 Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Thu, 22 Jan 2026 17:05:54 -0600 Subject: [PATCH 40/60] Restore oldest logic --- sbndcode/BlipRecoSBND/Utils/BlipUtils.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc index 82dc79ff7..83a6bfc24 100644 --- a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc +++ b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc @@ -95,7 +95,7 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, //std::cout<<"Making true blip for "< Date: Thu, 22 Jan 2026 17:12:08 -0600 Subject: [PATCH 41/60] did not work --- sbndcode/BlipRecoSBND/Utils/BlipUtils.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc index 83a6bfc24..82dc79ff7 100644 --- a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc +++ b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc @@ -95,7 +95,7 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, //std::cout<<"Making true blip for "< Date: Thu, 22 Jan 2026 17:20:00 -0600 Subject: [PATCH 42/60] debug tracking --- sbndcode/BlipRecoSBND/Utils/BlipUtils.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc index 82dc79ff7..f8aa79350 100644 --- a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc +++ b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc @@ -105,6 +105,7 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, // Create the new blip blip::TrueBlip tb; GrowTrueBlip(pinfo[i],tb); + std::cout << "Made a true blip out of " << pinfo[i].TrackID() << " with code " << pinfo[i].PdgCode() << std::endl; if( !tb.Energy ) continue; // We want to loop through any contiguous electrons (produced @@ -114,7 +115,10 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, simb::MCParticle& p = pinfo[j].particle; std::string pr = p.Process(); if( p.PdgCode() != 2112 && p.PdgCode() != 22 && (pr == "eIoni" || pr == "muIoni" || pr == "hIoni") ){ //neutron and photons leave track - if( IsAncestorOf(p.TrackId(),part.TrackId(),true,true) ) GrowTrueBlip(pinfo[j],tb); + if( IsAncestorOf(p.TrackId(),part.TrackId(),true,true) ){ + GrowTrueBlip(pinfo[j],tb); + std::cout << " \t growing it with " << pinfo[j].TrackID() << " with code " << pinfo[j].PdgCode() << std::endl; + } } } } From c5af4ee8cd21fbe13c6be824528465d288413353 Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Thu, 22 Jan 2026 17:22:47 -0600 Subject: [PATCH 43/60] debug tracking --- sbndcode/BlipRecoSBND/Utils/BlipUtils.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc index f8aa79350..2e6c44a38 100644 --- a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc +++ b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc @@ -117,7 +117,7 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, if( p.PdgCode() != 2112 && p.PdgCode() != 22 && (pr == "eIoni" || pr == "muIoni" || pr == "hIoni") ){ //neutron and photons leave track if( IsAncestorOf(p.TrackId(),part.TrackId(),true,true) ){ GrowTrueBlip(pinfo[j],tb); - std::cout << " \t growing it with " << pinfo[j].TrackID() << " with code " << pinfo[j].PdgCode() << std::endl; + std::cout << " \t growing it with " << pinfo[j].particle.TrackID() << " with code " << pinfo[j].particle.PdgCode() << std::endl; } } } From e9214fa9b7552d2e8e9ae6b4b8b999ee438ca60d Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Thu, 22 Jan 2026 17:24:54 -0600 Subject: [PATCH 44/60] debug tracking --- sbndcode/BlipRecoSBND/Utils/BlipUtils.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc index 2e6c44a38..53314314a 100644 --- a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc +++ b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc @@ -105,7 +105,7 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, // Create the new blip blip::TrueBlip tb; GrowTrueBlip(pinfo[i],tb); - std::cout << "Made a true blip out of " << pinfo[i].TrackID() << " with code " << pinfo[i].PdgCode() << std::endl; + std::cout << "Made a true blip out of " << pinfo[i].particle.TrackID() << " with code " << pinfo[i].particle.PdgCode() << std::endl; if( !tb.Energy ) continue; // We want to loop through any contiguous electrons (produced From 30bfe5bae554692c4abc1ce0b3c86790fee3ed48 Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Thu, 22 Jan 2026 17:26:26 -0600 Subject: [PATCH 45/60] debug tracking --- sbndcode/BlipRecoSBND/Utils/BlipUtils.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc index 53314314a..4d3673921 100644 --- a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc +++ b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc @@ -105,7 +105,7 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, // Create the new blip blip::TrueBlip tb; GrowTrueBlip(pinfo[i],tb); - std::cout << "Made a true blip out of " << pinfo[i].particle.TrackID() << " with code " << pinfo[i].particle.PdgCode() << std::endl; + std::cout << "Made a true blip out of " << pinfo[i].particle.TrackId() << " with code " << pinfo[i].particle.PdgCode() << std::endl; if( !tb.Energy ) continue; // We want to loop through any contiguous electrons (produced @@ -117,7 +117,7 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, if( p.PdgCode() != 2112 && p.PdgCode() != 22 && (pr == "eIoni" || pr == "muIoni" || pr == "hIoni") ){ //neutron and photons leave track if( IsAncestorOf(p.TrackId(),part.TrackId(),true,true) ){ GrowTrueBlip(pinfo[j],tb); - std::cout << " \t growing it with " << pinfo[j].particle.TrackID() << " with code " << pinfo[j].particle.PdgCode() << std::endl; + std::cout << " \t growing it with " << pinfo[j].particle.TrackId() << " with code " << pinfo[j].particle.PdgCode() << std::endl; } } } From 0e92018094a843b0e4143008ccf3dbb2596ca69a Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Thu, 22 Jan 2026 17:33:50 -0600 Subject: [PATCH 46/60] debug tracking --- sbndcode/BlipRecoSBND/Utils/BlipUtils.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc index 4d3673921..869272876 100644 --- a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc +++ b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc @@ -105,7 +105,8 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, // Create the new blip blip::TrueBlip tb; GrowTrueBlip(pinfo[i],tb); - std::cout << "Made a true blip out of " << pinfo[i].particle.TrackId() << " with code " << pinfo[i].particle.PdgCode() << std::endl; + std::cout << "Made a true blip out of " << pinfo[i].particle.TrackId() << " with code " << pinfo[i].particle.PdgCode() << + " total electrons " << tb.DepElectrons << " total energy " << tb.Energy << std::endl; if( !tb.Energy ) continue; // We want to loop through any contiguous electrons (produced @@ -117,7 +118,8 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, if( p.PdgCode() != 2112 && p.PdgCode() != 22 && (pr == "eIoni" || pr == "muIoni" || pr == "hIoni") ){ //neutron and photons leave track if( IsAncestorOf(p.TrackId(),part.TrackId(),true,true) ){ GrowTrueBlip(pinfo[j],tb); - std::cout << " \t growing it with " << pinfo[j].particle.TrackId() << " with code " << pinfo[j].particle.PdgCode() << std::endl; + std::cout << " \t growing it with " << pinfo[j].particle.TrackId() << " with code " << pinfo[j].particle.PdgCode()<< + " total electrons " << tb.DepElectrons << " total energy " << tb.Energy << std::endl; } } } From 5f9d19d351de0f05fd73058f632f0a98c5e0735e Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Thu, 22 Jan 2026 17:39:51 -0600 Subject: [PATCH 47/60] debug tracking --- sbndcode/BlipRecoSBND/Utils/BlipUtils.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc index 869272876..725386fa5 100644 --- a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc +++ b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc @@ -105,7 +105,8 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, // Create the new blip blip::TrueBlip tb; GrowTrueBlip(pinfo[i],tb); - std::cout << "Made a true blip out of " << pinfo[i].particle.TrackId() << " with code " << pinfo[i].particle.PdgCode() << + std::cout << "Made a true blip out of " << pinfo[i].particle.TrackId() << " with code " << pinfo[i].particle.PdgCode() << " and daughters " + << pinfo[i].particle.NumberDaughters() << " total electrons " << tb.DepElectrons << " total energy " << tb.Energy << std::endl; if( !tb.Energy ) continue; @@ -119,7 +120,7 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, if( IsAncestorOf(p.TrackId(),part.TrackId(),true,true) ){ GrowTrueBlip(pinfo[j],tb); std::cout << " \t growing it with " << pinfo[j].particle.TrackId() << " with code " << pinfo[j].particle.PdgCode()<< - " total electrons " << tb.DepElectrons << " total energy " << tb.Energy << std::endl; + " total electrons " << tb.DepElectrons << " total energy " << tb.Energy << std::endl; //literally never seems to be called? } } } From ee4eb006311e69b7b6ad93a92c1ab91c819cf46b Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Thu, 22 Jan 2026 17:45:07 -0600 Subject: [PATCH 48/60] debug tracking --- sbndcode/BlipRecoSBND/Utils/BlipUtils.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc index 725386fa5..887ec2dd9 100644 --- a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc +++ b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc @@ -112,7 +112,8 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, // We want to loop through any contiguous electrons (produced // with process "eIoni") and add the energy they deposit into this blip. - if( part.NumberDaughters() ) { + if( part.NumberDaughters() ) { //particles have daughters but they must all be neutron, gamma, or one of the special processes? + int excludedDaughters=0; for(size_t j=0; j Date: Fri, 23 Jan 2026 10:43:05 -0600 Subject: [PATCH 49/60] Hiding away branch that shouldn't be accessed --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 2 +- sbndcode/BlipRecoSBND/BlipAna_module.cc | 1 - sbndcode/BlipRecoSBND/Utils/BlipUtils.cc | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index c334b1e82..89468ffea 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -386,7 +386,7 @@ namespace blip { art::Handle< std::vector > hitHandleGH; std::vector > hitlistGH; if(evt.getByLabel("specialblipgaushit",hitHandleGH)) art::fill_ptr_vector(hitlistGH, hitHandleGH); - else if(evt.getByLabel("gaushit",hitHandleGH)) art::fill_ptr_vector(hitlistGH, hitHandleGH); + //else if(evt.getByLabel("gaushit",hitHandleGH)) art::fill_ptr_vector(hitlistGH, hitHandleGH); // -- tracks art::Handle< std::vector > tracklistHandle; diff --git a/sbndcode/BlipRecoSBND/BlipAna_module.cc b/sbndcode/BlipRecoSBND/BlipAna_module.cc index 8ba95a8ea..012a6a8fb 100644 --- a/sbndcode/BlipRecoSBND/BlipAna_module.cc +++ b/sbndcode/BlipRecoSBND/BlipAna_module.cc @@ -1326,7 +1326,6 @@ void BlipAna::analyze(const art::Event& evt) } } - if( fDebugMode ) PrintClusterInfo(clust); }//endloop over 2D hit clusters diff --git a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc index 887ec2dd9..cf4c4fd06 100644 --- a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc +++ b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc @@ -124,7 +124,7 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, " total electrons " << tb.DepElectrons << " total energy " << tb.Energy << std::endl; //literally never seems to be called? } } - else if(IsAncestorOf(p.TrackId(),part.TrackId(),true,true)) excludedDaughters++; + else if(IsAncestorOf(p.TrackId(),part.TrackId(),true,true)) excludedDaughters++; } std::cout << " \t " << excludedDaughters << " were of the special types" << std::endl; } From 4b6d9521d7491c021c85fe71f375336dfec83cef Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Fri, 23 Jan 2026 12:43:31 -0600 Subject: [PATCH 50/60] special debug --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index 89468ffea..8be2b192f 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -616,6 +616,15 @@ namespace blip { hitinfo[i].g4charge = 0; float maxQ = -9; for(size_t j=0; jPdgCode() << " and contribtues " << btvec.at(j)->numElectrons << std::endl; + } hitinfo[i].g4energy += btvec.at(j)->energy; hitinfo[i].g4charge += btvec.at(j)->numElectrons; if( btvec.at(j)->numElectrons <= maxQ ) continue; From 37d2a282fa3a6003704d690ee373787e881c542a Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Fri, 23 Jan 2026 12:51:44 -0600 Subject: [PATCH 51/60] remove old debug --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 2 +- sbndcode/BlipRecoSBND/Utils/BlipUtils.cc | 6 ------ 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index 8be2b192f..935196d68 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -386,7 +386,7 @@ namespace blip { art::Handle< std::vector > hitHandleGH; std::vector > hitlistGH; if(evt.getByLabel("specialblipgaushit",hitHandleGH)) art::fill_ptr_vector(hitlistGH, hitHandleGH); - //else if(evt.getByLabel("gaushit",hitHandleGH)) art::fill_ptr_vector(hitlistGH, hitHandleGH); + else if(evt.getByLabel("gaushit",hitHandleGH)) art::fill_ptr_vector(hitlistGH, hitHandleGH); // -- tracks art::Handle< std::vector > tracklistHandle; diff --git a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc index cf4c4fd06..04345dce1 100644 --- a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc +++ b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc @@ -105,9 +105,6 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, // Create the new blip blip::TrueBlip tb; GrowTrueBlip(pinfo[i],tb); - std::cout << "Made a true blip out of " << pinfo[i].particle.TrackId() << " with code " << pinfo[i].particle.PdgCode() << " and daughters " - << pinfo[i].particle.NumberDaughters() << - " total electrons " << tb.DepElectrons << " total energy " << tb.Energy << std::endl; if( !tb.Energy ) continue; // We want to loop through any contiguous electrons (produced @@ -120,13 +117,10 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, if( p.PdgCode() != 2112 && p.PdgCode() != 22 && (pr == "eIoni" || pr == "muIoni" || pr == "hIoni") ){ //neutron and photons leave track if( IsAncestorOf(p.TrackId(),part.TrackId(),true,true) ){ GrowTrueBlip(pinfo[j],tb); - std::cout << " \t growing it with " << pinfo[j].particle.TrackId() << " with code " << pinfo[j].particle.PdgCode()<< - " total electrons " << tb.DepElectrons << " total energy " << tb.Energy << std::endl; //literally never seems to be called? } } else if(IsAncestorOf(p.TrackId(),part.TrackId(),true,true)) excludedDaughters++; } - std::cout << " \t " << excludedDaughters << " were of the special types" << std::endl; } // Final check -- ensure there was non-negligible number From dc3aaf438571fd039555f2e6a3c6a567a1b1ce04 Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Fri, 23 Jan 2026 12:57:02 -0600 Subject: [PATCH 52/60] additional special debug --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index 935196d68..6921091d3 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -622,6 +622,8 @@ namespace blip { { std::cout << " on hit " << igh << std::endl; std::cout << " its got pvec size " << pvec.size() << std::endl; + std::cout << "hit is on wire " << hitinfo[i].wire <<" in tpc " << hitinfo[i].tpc << " on plane " << hitinfo[i].plane << + " at time " << hitinfo[i].peakTime << std::endl; } std::cout << "pvec " << j << " has code " << pvec.at(j)->PdgCode() << " and contribtues " << btvec.at(j)->numElectrons << std::endl; } From 851365f9f1ec37ca0957024a921cb58caeff44dc Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Fri, 23 Jan 2026 13:10:35 -0600 Subject: [PATCH 53/60] additional special debug --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index 6921091d3..cc9f80dd0 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -621,7 +621,7 @@ namespace blip { if(j==0) { std::cout << " on hit " << igh << std::endl; - std::cout << " its got pvec size " << pvec.size() << std::endl; + std::cout << " its got pvec size " << pvec.size() << " and btvec size " << btvec.size() << std::endl; std::cout << "hit is on wire " << hitinfo[i].wire <<" in tpc " << hitinfo[i].tpc << " on plane " << hitinfo[i].plane << " at time " << hitinfo[i].peakTime << std::endl; } From 79aef20d00318da6251fc827257c43f488d2e01a Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Fri, 23 Jan 2026 13:22:09 -0600 Subject: [PATCH 54/60] A guess --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index cc9f80dd0..6e8398b8c 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -397,7 +397,7 @@ namespace blip { // -- associations art::FindManyP fmtrk(hitHandle,evt,fTrkProducer); art::FindManyP fmtrkGH(hitHandleGH,evt,fTrkProducer); - art::FindMany fmhh(hitHandleGH,evt,"blipgaushitTruthMatch"); + art::FindMany fmhh(hitHandleGH,evt,"blipgaushitTruthMatch"); /* //==================================================== // Update map of bad channels for this event From b38684412f589c2642df44a6044e54639e2f59fc Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Fri, 23 Jan 2026 13:36:55 -0600 Subject: [PATCH 55/60] A guess2 --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index 6e8398b8c..9b680f66d 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -397,7 +397,7 @@ namespace blip { // -- associations art::FindManyP fmtrk(hitHandle,evt,fTrkProducer); art::FindManyP fmtrkGH(hitHandleGH,evt,fTrkProducer); - art::FindMany fmhh(hitHandleGH,evt,"blipgaushitTruthMatch"); + art::FindMany fmhh(hitHandleGH,evt,"blipgaushitTruthMatch"); /* //==================================================== // Update map of bad channels for this event @@ -611,7 +611,7 @@ namespace blip { if( fmhh.at(igh).size() ) { std::vector pvec; std::vector btvec; - fmhh.get(igh,pvec,btvec); + fmhh.get(pvec,igh,btvec); hitinfo[i].g4energy = 0; hitinfo[i].g4charge = 0; float maxQ = -9; From 3d2dd5b7399373f88630cb4073ec1cd60f44205c Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Fri, 23 Jan 2026 13:42:17 -0600 Subject: [PATCH 56/60] Final guess --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index 9b680f66d..133102da2 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -611,7 +611,7 @@ namespace blip { if( fmhh.at(igh).size() ) { std::vector pvec; std::vector btvec; - fmhh.get(pvec,igh,btvec); + fmhh.get(igh,btvec,pvec); hitinfo[i].g4energy = 0; hitinfo[i].g4charge = 0; float maxQ = -9; From 8d06c28c8f8e64094cb68eb0c62f98ce2e4fd1e3 Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Fri, 23 Jan 2026 13:44:56 -0600 Subject: [PATCH 57/60] back to original --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index 133102da2..adaa261b4 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -611,7 +611,7 @@ namespace blip { if( fmhh.at(igh).size() ) { std::vector pvec; std::vector btvec; - fmhh.get(igh,btvec,pvec); + fmhh.get(igh,pvec,btvec); hitinfo[i].g4energy = 0; hitinfo[i].g4charge = 0; float maxQ = -9; From 63e10fcfe0f5739285e12b477359bf948da5e992 Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Mon, 26 Jan 2026 15:22:26 -0600 Subject: [PATCH 58/60] cleanup all my debug --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 17 +---------------- sbndcode/BlipRecoSBND/Utils/BlipUtils.cc | 2 -- 2 files changed, 1 insertion(+), 18 deletions(-) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index adaa261b4..56439d671 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -531,9 +531,7 @@ namespace blip { pinfo[i].index = i; } BlipUtils::MakeTrueBlips(pinfo, trueblips); - std::cout << "True blip size after make " << trueblips.size() << std::endl; BlipUtils::MergeTrueBlips(trueblips, fTrueBlipMergeDist); - std::cout << "True blip size after merge " << trueblips.size() << std::endl; } //======================================= @@ -616,17 +614,6 @@ namespace blip { hitinfo[i].g4charge = 0; float maxQ = -9; for(size_t j=0; jPdgCode() << " and contribtues " << btvec.at(j)->numElectrons << std::endl; - } hitinfo[i].g4energy += btvec.at(j)->energy; hitinfo[i].g4charge += btvec.at(j)->numElectrons; if( btvec.at(j)->numElectrons <= maxQ ) continue; @@ -712,9 +699,7 @@ namespace blip { hitIsGood[i] = false; Tracked++; } - } - std::cout << Tracked << " hits were in tracks from pandora " << std::endl; - + } // Filter based on hit properties. For hits that are a part of // multi-gaussian fits (multiplicity > 1), need to re-think this. diff --git a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc index 04345dce1..89cd9fa57 100644 --- a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc +++ b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc @@ -110,7 +110,6 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, // We want to loop through any contiguous electrons (produced // with process "eIoni") and add the energy they deposit into this blip. if( part.NumberDaughters() ) { //particles have daughters but they must all be neutron, gamma, or one of the special processes? - int excludedDaughters=0; for(size_t j=0; j Date: Wed, 28 Jan 2026 09:50:45 -0600 Subject: [PATCH 59/60] generally cleaning up indentation --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 28 +++++------ sbndcode/BlipRecoSBND/BlipAna_module.cc | 64 ++++++++++++------------ sbndcode/BlipRecoSBND/Utils/BlipUtils.cc | 7 ++- 3 files changed, 49 insertions(+), 50 deletions(-) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index 56439d671..2f6686e60 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -40,8 +40,8 @@ namespace blip { auto const& tpcid = geo::TPCID(cryoid,tpc); // Loop planes in TPC 'tpc' - auto const& plane0id = geo::PlaneID(cstat,tpc,0); - auto const& plane0geo = wireReadoutGeom->Get().Plane(plane0id); + auto const& plane0id = geo::PlaneID(cstat,tpc,0); + auto const& plane0geo = wireReadoutGeom->Get().Plane(plane0id); for(size_t pl=0; plGet().Nplanes(tpcid); pl++){ auto const& planeid = geo::PlaneID(cstat,tpc,pl); auto const& planegeo = wireReadoutGeom->Get().Plane(planeid); @@ -63,7 +63,7 @@ namespace blip { auto const& tpcgeom = cryostat.TPC(tpc); auto const xyz = plane0geo.GetCenter(); const double dir((tpcgeom.DriftSign() == geo::DriftSign::Negative) ? +1.0 : -1.0); - float x_ticks_coefficient = kDriftVelocity*kTickPeriod; + float x_ticks_coefficient = kDriftVelocity*kTickPeriod; float goofy_offset = -xyz.X() / (dir * x_ticks_coefficient); kXTicksOffsets[cstat][tpc][pl] = offset - goofy_offset; } else { @@ -156,18 +156,18 @@ namespace blip { for(int i=0; i(Form("t%i_p%i_clust_overlap",iTPC,i), Form("TPC %i, Plane %i clusters;Overlap fraction",iTPC,i),101,0,1.01); - h_clust_dt[iTPC][i] = hdir.make(Form("t%i_p%i_clust_dt",iTPC,i), Form("TPC %i, Plane %i clusters;dT [ticks]",iTPC,i),200,-10,10); + h_clust_dt[iTPC][i] = hdir.make(Form("t%i_p%i_clust_dt",iTPC,i), Form("TPC %i, Plane %i clusters;dT [ticks]",iTPC,i),200,-10,10); h_clust_dtfrac[iTPC][i] = hdir.make(Form("t%i_p%i_clust_dtfrac",iTPC,i), Form("TPC %i, Plane %i clusters;Charge-weighted mean dT/RMS",iTPC,i),150,-1.5,1.5); h_clust_q[iTPC][i] = hdir.make(Form("t%i_p%i_clust_charge",iTPC,i), Form("Pre-cut, TPC %i;Plane %i cluster charge [#times10^{3} e-];Plane %i cluster charge [#times10^{3} e-]",iTPC,fCaloPlane,i), qbins,0,qmax,qbins,0,qmax); - h_clust_q[iTPC][i]->SetOption("colz"); + h_clust_q[iTPC][i]->SetOption("colz"); h_clust_q_cut[iTPC][i] = hdir.make(Form("t%i_p%i_clust_charge_cut",iTPC,i), Form("Post-cut, TPC %i;Plane %i cluster charge [#times10^{3} e-];Plane %i cluster charge [#times10^{3}]",iTPC,fCaloPlane,i), qbins,0,qmax,qbins,0,qmax); - h_clust_q_cut[iTPC][i]->SetOption("colz"); + h_clust_q_cut[iTPC][i]->SetOption("colz"); h_clust_score[iTPC][i] = hdir.make(Form("t%i_p%i_clust_matchscore",iTPC,i), Form("TPC %i, Plane %i clusters;Match score",iTPC,i),101,0,1.01); @@ -181,7 +181,7 @@ namespace blip { h_clust_truematch_q[iTPC][i] = hdir.make(Form("t%i_p%i_clust_truematch_charge",iTPC,i), Form("Pre-cut, TPC %i;Plane %i cluster charge [#times10^{3} e-];Plane %i cluster charge [#times10^{3} e-]",iTPC,fCaloPlane,i), qbins,0,qmax,qbins,0,qmax); - h_clust_truematch_q[iTPC][i]->SetOption("colz"); + h_clust_truematch_q[iTPC][i]->SetOption("colz"); h_clust_truematch_score[iTPC][i] = hdir.make(Form("t%i_p%i_clust_truematch_matchscore",iTPC,i), Form("TPC %i, Plane %i clusters;Match score",iTPC,i),101,0,1.01); @@ -932,15 +932,15 @@ namespace blip { // Check that the two central wires intersect // ******************************************* double y, z; - geo::Point_t intsec_p; - std::vector A_wireids = wireReadoutGeom->Get().ChannelToWire((unsigned int)hcA.CenterChan); - std::vector B_wireids = wireReadoutGeom->Get().ChannelToWire((unsigned int)hcB.CenterChan); + geo::Point_t intsec_p; + std::vector A_wireids = wireReadoutGeom->Get().ChannelToWire((unsigned int)hcA.CenterChan); + std::vector B_wireids = wireReadoutGeom->Get().ChannelToWire((unsigned int)hcB.CenterChan); - if( !wireReadoutGeom->Get().WireIDsIntersect(A_wireids.at(0),B_wireids.at(0),intsec_p)) continue; - // Save intersect location, so we don't have to + if( !wireReadoutGeom->Get().WireIDsIntersect(A_wireids.at(0),B_wireids.at(0),intsec_p)) continue; + // Save intersect location, so we don't have to // make another call to the Geometry service later - y = intsec_p.Y(); - z = intsec_p.Z(); + y = intsec_p.Y(); + z = intsec_p.Z(); TVector3 xloc(0,y,z); hcA.IntersectLocations[hcB.ID] = xloc; hcB.IntersectLocations[hcA.ID] = xloc; diff --git a/sbndcode/BlipRecoSBND/BlipAna_module.cc b/sbndcode/BlipRecoSBND/BlipAna_module.cc index 012a6a8fb..6f1b1c61d 100644 --- a/sbndcode/BlipRecoSBND/BlipAna_module.cc +++ b/sbndcode/BlipRecoSBND/BlipAna_module.cc @@ -456,10 +456,10 @@ class BlipAnaTreeDataStruct evtTree->Branch("hit_ismatch",hit_ismatch,"hit_ismatch[nhits]/I"); evtTree->Branch("hit_trkid",hit_trkid,"hit_trkid[nhits]/I"); if( saveTruthInfo ) { - evtTree->Branch("hit_g4trkid",hit_g4trkid,"hit_g4trkid[nhits]/I"); - evtTree->Branch("hit_g4frac",hit_g4frac,"hit_g4frac[nhits]/F"); - evtTree->Branch("hit_g4energy",hit_g4energy,"hit_g4energy[nhits]/F"); - evtTree->Branch("hit_g4charge",hit_g4charge,"hit_g4charge[nhits]/F"); + evtTree->Branch("hit_g4trkid",hit_g4trkid,"hit_g4trkid[nhits]/I"); + evtTree->Branch("hit_g4frac",hit_g4frac,"hit_g4frac[nhits]/F"); + evtTree->Branch("hit_g4energy",hit_g4energy,"hit_g4energy[nhits]/F"); + evtTree->Branch("hit_g4charge",hit_g4charge,"hit_g4charge[nhits]/F"); } evtTree->Branch("hit_clustid",hit_clustid,"hit_clustid[nhits]/I"); evtTree->Branch("hit_blipid",hit_blipid,"hit_blipid[nhits]/I"); @@ -745,22 +745,22 @@ class BlipAna : public art::EDAnalyzer h_part_process = dir_truth.make("part_process","MCParticle->Process()",5,0,5); auto xa = h_part_process->GetXaxis(); - xa->SetBinLabel(1,"primary"); - xa->SetBinLabel(2,"compt"); - xa->SetBinLabel(3,"phot"); - xa->SetBinLabel(4,"conv"); - xa->SetBinLabel(5,"other"); + xa->SetBinLabel(1,"primary"); + xa->SetBinLabel(2,"compt"); + xa->SetBinLabel(3,"phot"); + xa->SetBinLabel(4,"conv"); + xa->SetBinLabel(5,"other"); h_nblips_tm = dir_truth.make("nblips_tm","Truth-matched 3D blips per event",blipBins,0,blipMax); h_blip_qcomp = dir_truth.make("blip_qcomp","Fraction of true charge (at anode) reconstructed into 3D blips",202,0,1.01); h_blip_reszy = dir_truth.make("blip_res_zy","Blip position resolution;Z_{reco} - Z_{true} [cm];Y_{reco} - Y_{true} [cm]",150,-15,15,150,-15,15); - h_blip_reszy ->SetOption("colz"); + h_blip_reszy ->SetOption("colz"); h_blip_resx = dir_truth.make("blip_res_x","Blip position resolution;X_{reco} - X_{true} [cm]",200,-10,10); h_blip_resE = dir_truth.make("blip_res_E","Blip energy resolution;(E_{reco} - E_{true})/E_{true} [cm]",200,-1.,1.); h_blip_E_vs_resE = dir_truth.make("blip_res_energy","Energy resolution of 3D blips;Energy [MeV];#deltaE/E_{true}",100,0,5,200,-1.,1.); - h_blip_E_vs_resE ->SetOption("colz"); + h_blip_E_vs_resE ->SetOption("colz"); h_clust_qres_vs_q = dir_truth.make("qres_vs_q","Clusters on collection plane;True charge deposited [ #times 10^{3} e- ];Reco resolution",160,0,80,200,-1,1); - h_clust_qres_vs_q ->SetOption("colz"); + h_clust_qres_vs_q ->SetOption("colz"); h_clust_qres_anode = dir_truth.make("qres_anode","Reco charge vs true charge collected;( reco-true ) / true;Area-normalized entries",200,-1.,1.); h_clust_qres_dep = dir_truth.make("qres_dep","Reco charge vs true charge deposited;( reco-true ) / true;Area-normalized entries",200,-1.,1.); h_qratio_vs_time_sim = dir_truth.make("qratio_vs_time_sim",";Drift time [#mus]; Q_{anode} / Q_{dep}",44,100,2300, 1000,0.50,1.50); @@ -801,10 +801,10 @@ class BlipAna : public art::EDAnalyzer h_hitqres[i] = dir_truth.make(Form("pl%i_hit_q_res",i), Form("Plane %i hits;charge resolution: (reco-true)/true",i), 400,-1,1); h_hitqres_scatter[i] = dir_truth.make( Form("pl%i_hit_qres_scatter",i), Form("Plane %i;true hit charge [#times 10^{3} e-];Reconstructed hit charge [#times 10^{3} e-]",i),qBins,0,qMax/1e3,qBins,0,qMax/1e3); - h_hitqres_scatter[i] ->SetOption("colz"); + h_hitqres_scatter[i] ->SetOption("colz"); h_hitqres_vs_q[i] = dir_truth.make( Form("pl%i_hit_qres_vs_q",i), Form("Plane %i;true hit charge [#times 10^{3} e-];hit charge resolution: (reco-true)/true",i),qBins,0,qMax/1e3, 400,-2,2); - h_hitqres_vs_q[i] ->SetOption("colz"); + h_hitqres_vs_q[i] ->SetOption("colz"); h_chargecomp[i] = dir_truth.make(Form("pl%i_hit_charge_completeness",i),Form("charge completness, plane %i",i),101,0,1.01); h_hitpur[i] = dir_truth.make(Form("pl%i_hit_purity",i),Form("hit purity, plane %i",i),101,0,1.01); @@ -1385,7 +1385,7 @@ void BlipAna::analyze(const art::Event& evt) nblips_picky++; fNum3DBlipsPicky++; h_blip_charge_picky ->Fill(blp.clusters[fCaloPlane].Charge); - h_blip_zy_picky ->Fill(blp.Position.Z(), blp.Position.Y()); + h_blip_zy_picky ->Fill(blp.Position.Z(), blp.Position.Y()); h_blip_charge_YU_picky->Fill( 0.001*blp.clusters[2].Charge, 0.001*blp.clusters[0].Charge ); h_blip_charge_YV_picky->Fill( 0.001*blp.clusters[2].Charge, 0.001*blp.clusters[1].Charge ); h_blip_charge_UV_picky->Fill( 0.001*blp.clusters[0].Charge, 0.001*blp.clusters[1].Charge ); @@ -1488,27 +1488,27 @@ void BlipAna::endJob(){ //printf(" picky frac : %5.3f\n", fNum3DBlipsPicky/float(fNum3DBlips)); if(fIsMC){ - printf(" MC-matched blips per evt : %.3f\n", fNum3DBlipsTrue/nEvents); - printf(" MC blip purity : %.3f\n", fNum3DBlipsTrue/float(fNum3DBlips)); - printf(" MC blip purity, 3 planes : %.3f\n", fNum3DBlipsTrue3P/float(fNum3DBlips3Plane)); - if( h_blip_qcomp->GetMean() > 0 ) - printf(" Charge completeness, total : %.4f +/- %.4f\n", h_blip_qcomp->GetMean(), h_blip_qcomp->GetStdDev()/sqrt(fNumEvents)); - //printf(" < 2MeV : %.4f +/- %.4f\n", h_blip_qcomp_2MeV->GetMean(), h_blip_qcomp_2MeV->GetStdDev()/sqrt(fNumEvents)); - //printf(" Blip purity : %.4f\n", h_blip_pur->GetMean()); + printf(" MC-matched blips per evt : %.3f\n", fNum3DBlipsTrue/nEvents); + printf(" MC blip purity : %.3f\n", fNum3DBlipsTrue/float(fNum3DBlips)); + printf(" MC blip purity, 3 planes : %.3f\n", fNum3DBlipsTrue3P/float(fNum3DBlips3Plane)); + if( h_blip_qcomp->GetMean() > 0 ) + printf(" Charge completeness, total : %.4f +/- %.4f\n", h_blip_qcomp->GetMean(), h_blip_qcomp->GetStdDev()/sqrt(fNumEvents)); + //printf(" < 2MeV : %.4f +/- %.4f\n", h_blip_qcomp_2MeV->GetMean(), h_blip_qcomp_2MeV->GetStdDev()/sqrt(fNumEvents)); + //printf(" Blip purity : %.4f\n", h_blip_pur->GetMean()); } printf(" Mean blip charge : %.0f e-\n", h_blip_charge->GetMean()); printf("\n"); for(size_t i=0; iGetMean() > 0 ) - printf(" * charge completeness : %.4f\n",h_chargecomp[i]->GetMean()); - printf(" * hit purity : %.4f\n",h_hitpur[i]->GetMean()); - } + printf(" Plane %lu -------------------------\n",i); + printf(" * total hits/evt : %.2f\n",fNumHits[i]/(float)fNumEvents); + printf(" * untracked hits/evt : %.2f (%.2f plane-matched)\n",fNumHitsUntracked[i]/(float)fNumEvents, fNumHitsMatched[i]/(float)fNumEvents); + //printf(" * plane-matched hits/evt : %.2f\n",fNumHitsMatched[i]/(float)fNumEvents); + if(fIsMC) { + printf(" * true-matched hits/evt : %.2f (%.2f plane-matched)\n",fNumHitsTrue[i]/(float)fNumEvents, fNumHitsMatchedTrue[i]/(float)fNumEvents); + if( h_chargecomp[i]->GetMean() > 0 ) + printf(" * charge completeness : %.4f\n",h_chargecomp[i]->GetMean()); + printf(" * hit purity : %.4f\n",h_hitpur[i]->GetMean()); + } } printf("\n***********************************************\n"); diff --git a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc index 89cd9fa57..8c1dd53af 100644 --- a/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc +++ b/sbndcode/BlipRecoSBND/Utils/BlipUtils.cc @@ -395,7 +395,7 @@ void FillParticleInfo( const simb::MCParticle& part, blip::ParticleInfo& pinfo, // use view with the maximal wire extent to calculate transverse (YZ) length if( hcs[i].NWires > newblip.MaxWireSpan ) { newblip.MaxWireSpan = hcs[i].NWires; - newblip.dYZ = hcs[i].NWires * wirepitch; + newblip.dYZ = hcs[i].NWires * wirepitch; } for(size_t j=i+1; jsecond.Y()); intsec_p.SetZ(hcs[i].IntersectLocations.find(hcs[j].ID)->second.Z()); } else { - std::vector i_wireids = wireReadoutGeom->Get().ChannelToWire((unsigned int)hcs[i].CenterChan); - std::vector j_wireids = wireReadoutGeom->Get().ChannelToWire((unsigned int)hcs[j].CenterChan); - + std::vector i_wireids = wireReadoutGeom->Get().ChannelToWire((unsigned int)hcs[i].CenterChan); + std::vector j_wireids = wireReadoutGeom->Get().ChannelToWire((unsigned int)hcs[j].CenterChan); match3d = wireReadoutGeom->Get().WireIDsIntersect(i_wireids.at(0), j_wireids.at(0), intsec_p); } From 4dbab8262bcf455160cb04ebc53740a9be312fd5 Mon Sep 17 00:00:00 2001 From: Jacob McLaughlin Date: Wed, 28 Jan 2026 10:08:52 -0600 Subject: [PATCH 60/60] fixed general hardcoding of the producer labels. Minor refactoring of some branches to assume the hitHandle the user provided was run through truthmatching and pandoraTrack --- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc | 43 ++++-------------------- sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.h | 1 + 2 files changed, 8 insertions(+), 36 deletions(-) diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc index 2f6686e60..66b668824 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.cc @@ -76,10 +76,7 @@ namespace blip { // we still want to correct for global trigger offset though: kXTicksOffsets[cstat][tpc][pl] = clockData.TriggerTime()/kTickPeriod; - } - - // additional ad-hoc corrections supplied by user - //kXTicksOffsets[cstat][tpc][pl] += fTimeOffset[pl]; + } } } } @@ -231,6 +228,7 @@ namespace blip { void BlipRecoAlg::reconfigure( fhicl::ParameterSet const& pset ){ fHitProducer = pset.get ("HitProducer", "gaushit"); + fHitTruthMatcher = pset.get ("HitTruthMatcher", "blipgaushitTruthMatch"); fTrkProducer = pset.get ("TrkProducer", "pandora"); fGeantProducer = pset.get ("GeantProducer", "largeant"); fSimDepProducer = pset.get ("SimEDepProducer", "ionandscint"); @@ -368,7 +366,7 @@ namespace blip { std::vector wids = wireReadoutGeom->Get().ChannelToWire( (*(simchanlist[chIndex])).Channel() ); //Not sure why this is a vector, but it should have len 1 const geo::PlaneID& planeID = wids[0].planeID(); if(int(planeID.Plane) != fCaloPlane) continue; //only take calorimetry plane IDE values - unsigned int MaxTDCTick = 4294967294; // 1 under 32 bit unsigned int max + unsigned int MaxTDCTick = UINT_MAX; std::vector< sim::IDE > TempChIDE = (*simchanlist[chIndex]).TrackIDsAndEnergies(0, MaxTDCTick); for(int ideIndex=0; ideIndex > hitHandleGH; - std::vector > hitlistGH; - if(evt.getByLabel("specialblipgaushit",hitHandleGH)) art::fill_ptr_vector(hitlistGH, hitHandleGH); - else if(evt.getByLabel("gaushit",hitHandleGH)) art::fill_ptr_vector(hitlistGH, hitHandleGH); - // -- tracks art::Handle< std::vector > tracklistHandle; std::vector > tracklist; @@ -396,8 +388,8 @@ namespace blip { // -- associations art::FindManyP fmtrk(hitHandle,evt,fTrkProducer); - art::FindManyP fmtrkGH(hitHandleGH,evt,fTrkProducer); - art::FindMany fmhh(hitHandleGH,evt,"blipgaushitTruthMatch"); + art::FindManyP fmtrkGH(hitHandle,evt,fTrkProducer); + art::FindMany fmhh(hitHandle,evt,fHitTruthMatcher); /* //==================================================== // Update map of bad channels for this event @@ -433,22 +425,7 @@ namespace blip { // use gaushitTruthMatch later on) //=============================================================== std::map< int, int > map_gh; - // if input collection is already gaushit, this is trivial - if( fHitProducer == "gaushit" || fHitProducer == "specialblipgaushit") { - for(auto& h : hitlist ) map_gh[h.key()] = h.key(); - // ... but if not, find the matching gaushit. There's no convenient - // hit ID, so we must loop through and compare channel/time (ugh) - } else { - std::map> map_chan_ghid; - for(auto& gh : hitlistGH ) map_chan_ghid[gh->Channel()].push_back(gh.key()); - for(auto& h : hitlist ) { - for(auto& igh : map_chan_ghid[h->Channel()]){ - if( hitlistGH[igh]->PeakTime() != h->PeakTime() ) continue; - map_gh[h.key()] = igh; - break; - } - } - } + for(auto& h : hitlist ) map_gh[h.key()] = h.key(); //===================================================== // Record PDG for every G4 Track ID //===================================================== @@ -646,14 +623,8 @@ namespace blip { // find associated track - if( fHitProducer == "specialblipgaushit" && fmtrk.isValid() ) { + if( fmtrk.isValid() ) { if(fmtrk.at(i).size()) hitinfo[i].trkid = fmtrk.at(i)[0]->ID(); - - // if the hit collection didn't have associations made - // to the tracks, try gaushit instead - } else if ( fmtrkGH.isValid() && map_gh.size() ) { - int gi = map_gh[i]; - if (fmtrkGH.at(gi).size()) hitinfo[i].trkid= fmtrkGH.at(gi)[0]->ID(); } // add to the map diff --git a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.h b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.h index 59d125999..665fa30c2 100644 --- a/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.h +++ b/sbndcode/BlipRecoSBND/Alg/BlipRecoAlg.h @@ -129,6 +129,7 @@ namespace blip { // --- FCL configs --- std::string fHitProducer; + std::string fHitTruthMatcher; std::string fTrkProducer; std::string fGeantProducer; std::string fSimDepProducer;