From ca616d80cfd449df2abcaf9de63232cd17f98000 Mon Sep 17 00:00:00 2001 From: Keigo MIZUTANI Date: Mon, 20 Apr 2026 05:39:21 -0400 Subject: [PATCH 1/2] add pre-cut KL beam beta histogram --- src/libraries/PID/DBeamKLong_factory.cc | 30 ++++++++++++++++++++++++- src/libraries/PID/DBeamKLong_factory.h | 2 ++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/libraries/PID/DBeamKLong_factory.cc b/src/libraries/PID/DBeamKLong_factory.cc index caac8cbd9a..410fc2dc2e 100644 --- a/src/libraries/PID/DBeamKLong_factory.cc +++ b/src/libraries/PID/DBeamKLong_factory.cc @@ -11,6 +11,7 @@ using namespace std; #include "HDGEOMETRY/DGeometry.h" #include "DANA/DEvent.h" +#include "TDirectory.h" #include "DVertex.h" #include "particleType.h" @@ -38,6 +39,24 @@ void DBeamKLong_factory::BeginRun(const std::shared_ptr& event) dTargetCenterZ = 0.0; locGeometry->GetTargetZ(dTargetCenterZ); + DEvent::GetLockService(event)->RootWriteLock(); + { + TDirectory* locSavedDir = gDirectory; + TDirectory* locIndependentDir = gDirectory->GetDirectory("Independent"); + if(locIndependentDir == nullptr) + locIndependentDir = gDirectory->mkdir("Independent"); + locIndependentDir->cd(); + TDirectory* locDiagDir = gDirectory->GetDirectory("BeamKLongFactory"); + if(locDiagDir == nullptr) + locDiagDir = gDirectory->mkdir("BeamKLongFactory"); + locDiagDir->cd(); + + if(dHistBeamBetaFactoryPreCut == nullptr) + dHistBeamBetaFactoryPreCut = new TH1I("BeamBeta_PreCut_DBeamKLongFactory", "DBeamKLong factory #beta (pre-cut from DVertex:KLong z,t);#beta;events", 800, -0.1, 1.5); + locSavedDir->cd(); + } + DEvent::GetLockService(event)->RootUnLock(); + } //------------------ @@ -64,6 +83,15 @@ void DBeamKLong_factory::Process(const std::shared_ptr& event) double KL_distance = ( locVertex->dSpacetimeVertex.Z() - dTargetCenterZ ) + ( 24. * 100. ); double KL_propagation_time = locVertex->dSpacetimeVertex.T() + (24.*100. - dTargetCenterZ) / c; // t=0 is at z=0 double beta = (KL_distance / KL_propagation_time) / c; + + if(std::isfinite(beta) && (dHistBeamBetaFactoryPreCut != nullptr)) + { + DEvent::GetLockService(event)->RootWriteLock(); + { + dHistBeamBetaFactoryPreCut->Fill(beta); + } + DEvent::GetLockService(event)->RootUnLock(); + } // cout << locVertex->dSpacetimeVertex.Z() << " " << dTargetCenterZ // << KL_distance << " " << KL_propagation_time << " " << beta << endl; @@ -74,7 +102,7 @@ void DBeamKLong_factory::Process(const std::shared_ptr& event) // should make some cut based on the beam period... but for now, cut out events that are obviously too slow if(locVertex->dSpacetimeVertex.T() > 250.) return; - + // cout << "in DBeamKLong_factory::evnt() ..." << endl; // cout << KL_distance << " " << locVertex->dSpacetimeVertex.Z() << " " << dTargetCenterZ << endl; // cout << KL_propagation_time << " " << beta << endl; diff --git a/src/libraries/PID/DBeamKLong_factory.h b/src/libraries/PID/DBeamKLong_factory.h index 9e481ba51b..15e53c2bf0 100644 --- a/src/libraries/PID/DBeamKLong_factory.h +++ b/src/libraries/PID/DBeamKLong_factory.h @@ -9,6 +9,7 @@ #include #include #include "DResourcePool.h" +#include "TH1I.h" class DBeamKLong_factory : public JFactoryT { @@ -40,6 +41,7 @@ class DBeamKLong_factory : public JFactoryT bool dEnableKLongBeamRecon; double dTargetCenterZ; + TH1I* dHistBeamBetaFactoryPreCut = nullptr; //RESOURCE POOL From 805ba232ddab035c2e8c18bc76cd87d4b31779dd Mon Sep 17 00:00:00 2001 From: Keigo MIZUTANI Date: Mon, 20 Apr 2026 19:05:51 -0400 Subject: [PATCH 2/2] PID: DBeamKLong pre-cut beta hist in Init with ROOT lock for multithread --- src/libraries/PID/DBeamKLong_factory.cc | 29 ++++++++++++++----------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/src/libraries/PID/DBeamKLong_factory.cc b/src/libraries/PID/DBeamKLong_factory.cc index 410fc2dc2e..d8cb43e2e4 100644 --- a/src/libraries/PID/DBeamKLong_factory.cc +++ b/src/libraries/PID/DBeamKLong_factory.cc @@ -9,6 +9,8 @@ using namespace std; #include "DBeamKLong_factory.h" +#include + #include "HDGEOMETRY/DGeometry.h" #include "DANA/DEvent.h" #include "TDirectory.h" @@ -28,20 +30,11 @@ void DBeamKLong_factory::Init(void) auto app = GetApplication(); app->SetDefaultParameter("BEAM:ENABLE_KLONG_BEAM_RECON", dEnableKLongBeamRecon); -} - -//------------------ -// BeginRun -//------------------ -void DBeamKLong_factory::BeginRun(const std::shared_ptr& event) -{ - DGeometry *locGeometry = DEvent::GetDGeometry(event); - dTargetCenterZ = 0.0; - locGeometry->GetTargetZ(dTargetCenterZ); - - DEvent::GetLockService(event)->RootWriteLock(); + auto root_lock = app->GetService(); + root_lock->RootWriteLock(); { TDirectory* locSavedDir = gDirectory; + gDirectory->cd("/"); TDirectory* locIndependentDir = gDirectory->GetDirectory("Independent"); if(locIndependentDir == nullptr) locIndependentDir = gDirectory->mkdir("Independent"); @@ -55,7 +48,17 @@ void DBeamKLong_factory::BeginRun(const std::shared_ptr& event) dHistBeamBetaFactoryPreCut = new TH1I("BeamBeta_PreCut_DBeamKLongFactory", "DBeamKLong factory #beta (pre-cut from DVertex:KLong z,t);#beta;events", 800, -0.1, 1.5); locSavedDir->cd(); } - DEvent::GetLockService(event)->RootUnLock(); + root_lock->RootUnLock(); +} + +//------------------ +// BeginRun +//------------------ +void DBeamKLong_factory::BeginRun(const std::shared_ptr& event) +{ + DGeometry *locGeometry = DEvent::GetDGeometry(event); + dTargetCenterZ = 0.0; + locGeometry->GetTargetZ(dTargetCenterZ); }