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/2] 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/2] 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;