From 6686745a59d59c2c6a4e5f48a8e8970c57a334b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20S=C3=A1nchez=20Castillo?= Date: Tue, 20 Jan 2026 03:42:55 -0600 Subject: [PATCH 1/3] Fix bug for opdettype in light propagation time --- .../LightPropagationCorrection_module.cc | 17 ++++++++++++----- .../LightPropagationCorrection_module.hh | 3 ++- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/sbndcode/LightPropagationCorrection/LightPropagationCorrection_module.cc b/sbndcode/LightPropagationCorrection/LightPropagationCorrection_module.cc index 4905589f3..abcdabae7 100644 --- a/sbndcode/LightPropagationCorrection/LightPropagationCorrection_module.cc +++ b/sbndcode/LightPropagationCorrection/LightPropagationCorrection_module.cc @@ -36,6 +36,11 @@ sbnd::LightPropagationCorrection::LightPropagationCorrection(fhicl::ParameterSet fOpDetX.push_back(pdCenter.X()); fOpDetY.push_back(pdCenter.Y()); fOpDetZ.push_back(pdCenter.Z()); + if(fPDSMap.pdType(opch)=="pmt_coated") fOpDetType.push_back(0); + else if(fPDSMap.pdType(opch)=="pmt_uncoated") fOpDetType.push_back(1); + else if(fPDSMap.pdType(opch)=="xarapuca_vuv") fOpDetType.push_back(2); + else if(fPDSMap.pdType(opch)=="xarapuca_vis") fOpDetType.push_back(3); + else fOpDetType.push_back(-1); } auto const& tpc = art::ServiceHandle()->TPC(); @@ -442,16 +447,18 @@ void sbnd::LightPropagationCorrection::GetPropagationTimeCorrectionPerChannel() double dy = fSpacePointY[sp] - _opDetY; double dz = fSpacePointZ[sp] - _opDetZ; double distanceToOpDet = std::sqrt(dx*dx + dy*dy + dz*dz); - //double spToCathode = abs(fSpacePointX[sp]); // Distance from space point to cathode in mm - //double cathodeToOpDet = std::sqrt(_opDetX*_opDetX + dy*dy + dz*dz); // Distance from cathode to OpDet in mm - //float lightPropTimeVIS = spToCathode/fVGroupVUV + cathodeToOpDet/fVGroupVIS; // Speed - double cathodeToOpDet = std::sqrt(_opDetX*_opDetX + (dy/2)*(dy/2) + (dz/2)*(dz/2)); // Distance from cathode to OpDet in mm double spToCathode = std::sqrt( fSpacePointX[sp]*fSpacePointX[sp] + (dy/2)*(dy/2) + (dz/2)*(dz/2)); // Distance from space point to cathode in mm float lightPropTimeVIS = spToCathode/fVGroupVUV + cathodeToOpDet/fVGroupVIS; // Speed float lightPropTimeVUV = distanceToOpDet / fVGroupVUV; // Speed of light in mm/ns for VUV - float lightPropTime = std::min(lightPropTimeVIS, lightPropTimeVUV); + float lightPropTime = 0; + if(fOpDetType[opdet]==0) + lightPropTime = std::min(lightPropTimeVIS, lightPropTimeVUV); + else if(fOpDetType[opdet]==1) + lightPropTime = lightPropTimeVIS; + else + throw art::Exception(art::errors::LogicError) << " OpDet Type " << fOpDetType[opdet] << " not supported ." << std::endl; float partPropTime = std::sqrt((fSpacePointX[sp]-fRecoVx)*(fSpacePointX[sp]-fRecoVx) + (fSpacePointY[sp]-fRecoVy)*(fSpacePointY[sp]-fRecoVy) + (fSpacePointZ[sp]-fRecoVz)*(fSpacePointZ[sp]-fRecoVz))/fSpeedOfLight; float PropTime = lightPropTime + partPropTime; if(PropTime < minPropTime) minPropTime = PropTime; diff --git a/sbndcode/LightPropagationCorrection/LightPropagationCorrection_module.hh b/sbndcode/LightPropagationCorrection/LightPropagationCorrection_module.hh index e5427282a..781f03278 100644 --- a/sbndcode/LightPropagationCorrection/LightPropagationCorrection_module.hh +++ b/sbndcode/LightPropagationCorrection/LightPropagationCorrection_module.hh @@ -145,7 +145,7 @@ private: geo::WireReadoutGeom const& fWireReadout = art::ServiceHandle()->Get(); - + opdet::sbndPDMapAlg fPDSMap; //Flash finder manager ::lightana::FlashFinderManager _mgr; ::lightana::FlashFinderManager _mgr_tpc0; @@ -162,6 +162,7 @@ private: std::vector fOpDetX; std::vector fOpDetY; std::vector fOpDetZ; + std::vector fOpDetType; std::string fReco2Label; std::string fOpT0FinderModuleLabel; From 306b771083b1765d1f1cc46f1d55bf763bf26749 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20S=C3=A1nchez=20Castillo?= Date: Tue, 20 Jan 2026 04:10:06 -0600 Subject: [PATCH 2/3] Add continue for non-PMT channels --- .../LightPropagationCorrection_module.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sbndcode/LightPropagationCorrection/LightPropagationCorrection_module.cc b/sbndcode/LightPropagationCorrection/LightPropagationCorrection_module.cc index abcdabae7..cdbb29547 100644 --- a/sbndcode/LightPropagationCorrection/LightPropagationCorrection_module.cc +++ b/sbndcode/LightPropagationCorrection/LightPropagationCorrection_module.cc @@ -449,7 +449,6 @@ void sbnd::LightPropagationCorrection::GetPropagationTimeCorrectionPerChannel() double distanceToOpDet = std::sqrt(dx*dx + dy*dy + dz*dz); double cathodeToOpDet = std::sqrt(_opDetX*_opDetX + (dy/2)*(dy/2) + (dz/2)*(dz/2)); // Distance from cathode to OpDet in mm double spToCathode = std::sqrt( fSpacePointX[sp]*fSpacePointX[sp] + (dy/2)*(dy/2) + (dz/2)*(dz/2)); // Distance from space point to cathode in mm - float lightPropTimeVIS = spToCathode/fVGroupVUV + cathodeToOpDet/fVGroupVIS; // Speed float lightPropTimeVUV = distanceToOpDet / fVGroupVUV; // Speed of light in mm/ns for VUV float lightPropTime = 0; @@ -458,7 +457,7 @@ void sbnd::LightPropagationCorrection::GetPropagationTimeCorrectionPerChannel() else if(fOpDetType[opdet]==1) lightPropTime = lightPropTimeVIS; else - throw art::Exception(art::errors::LogicError) << " OpDet Type " << fOpDetType[opdet] << " not supported ." << std::endl; + continue; float partPropTime = std::sqrt((fSpacePointX[sp]-fRecoVx)*(fSpacePointX[sp]-fRecoVx) + (fSpacePointY[sp]-fRecoVy)*(fSpacePointY[sp]-fRecoVy) + (fSpacePointZ[sp]-fRecoVz)*(fSpacePointZ[sp]-fRecoVz))/fSpeedOfLight; float PropTime = lightPropTime + partPropTime; if(PropTime < minPropTime) minPropTime = PropTime; From c461ba546f19ee0f2e5f903f8392a7c1bc70cd81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20S=C3=A1nchez=20Castillo?= Date: Mon, 26 Jan 2026 11:50:38 -0600 Subject: [PATCH 3/3] Remove vector and use XAs --- .../LightPropagationCorrection_module.cc | 12 +++--------- .../LightPropagationCorrection_module.hh | 1 - 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/sbndcode/LightPropagationCorrection/LightPropagationCorrection_module.cc b/sbndcode/LightPropagationCorrection/LightPropagationCorrection_module.cc index cdbb29547..78e2cb50d 100644 --- a/sbndcode/LightPropagationCorrection/LightPropagationCorrection_module.cc +++ b/sbndcode/LightPropagationCorrection/LightPropagationCorrection_module.cc @@ -36,11 +36,6 @@ sbnd::LightPropagationCorrection::LightPropagationCorrection(fhicl::ParameterSet fOpDetX.push_back(pdCenter.X()); fOpDetY.push_back(pdCenter.Y()); fOpDetZ.push_back(pdCenter.Z()); - if(fPDSMap.pdType(opch)=="pmt_coated") fOpDetType.push_back(0); - else if(fPDSMap.pdType(opch)=="pmt_uncoated") fOpDetType.push_back(1); - else if(fPDSMap.pdType(opch)=="xarapuca_vuv") fOpDetType.push_back(2); - else if(fPDSMap.pdType(opch)=="xarapuca_vis") fOpDetType.push_back(3); - else fOpDetType.push_back(-1); } auto const& tpc = art::ServiceHandle()->TPC(); @@ -449,15 +444,14 @@ void sbnd::LightPropagationCorrection::GetPropagationTimeCorrectionPerChannel() double distanceToOpDet = std::sqrt(dx*dx + dy*dy + dz*dz); double cathodeToOpDet = std::sqrt(_opDetX*_opDetX + (dy/2)*(dy/2) + (dz/2)*(dz/2)); // Distance from cathode to OpDet in mm double spToCathode = std::sqrt( fSpacePointX[sp]*fSpacePointX[sp] + (dy/2)*(dy/2) + (dz/2)*(dz/2)); // Distance from space point to cathode in mm + float lightPropTimeVIS = spToCathode/fVGroupVUV + cathodeToOpDet/fVGroupVIS; // Speed float lightPropTimeVUV = distanceToOpDet / fVGroupVUV; // Speed of light in mm/ns for VUV float lightPropTime = 0; - if(fOpDetType[opdet]==0) + if(fPDSMap.pdType(opch)=="pmt_coated" || fPDSMap.pdType(opch)=="xarapuca_vuv") lightPropTime = std::min(lightPropTimeVIS, lightPropTimeVUV); - else if(fOpDetType[opdet]==1) + else if(fPDSMap.pdType(opch)=="pmt_uncoated" || fPDSMap.pdType(opch)=="xarapuca_vis") lightPropTime = lightPropTimeVIS; - else - continue; float partPropTime = std::sqrt((fSpacePointX[sp]-fRecoVx)*(fSpacePointX[sp]-fRecoVx) + (fSpacePointY[sp]-fRecoVy)*(fSpacePointY[sp]-fRecoVy) + (fSpacePointZ[sp]-fRecoVz)*(fSpacePointZ[sp]-fRecoVz))/fSpeedOfLight; float PropTime = lightPropTime + partPropTime; if(PropTime < minPropTime) minPropTime = PropTime; diff --git a/sbndcode/LightPropagationCorrection/LightPropagationCorrection_module.hh b/sbndcode/LightPropagationCorrection/LightPropagationCorrection_module.hh index 781f03278..26e6d47c7 100644 --- a/sbndcode/LightPropagationCorrection/LightPropagationCorrection_module.hh +++ b/sbndcode/LightPropagationCorrection/LightPropagationCorrection_module.hh @@ -162,7 +162,6 @@ private: std::vector fOpDetX; std::vector fOpDetY; std::vector fOpDetZ; - std::vector fOpDetType; std::string fReco2Label; std::string fOpT0FinderModuleLabel;