From 430669868bbada185502b52014115d6889b0322a Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Fri, 30 Jan 2026 18:49:44 -0500 Subject: [PATCH 1/8] add solenoid/torus --- .../main/java/org/jlab/clas/detector/DetectorHeader.java | 8 ++++++++ .../eb/src/main/java/org/jlab/service/eb/EBio.java | 2 ++ 2 files changed, 10 insertions(+) diff --git a/common-tools/clas-reco/src/main/java/org/jlab/clas/detector/DetectorHeader.java b/common-tools/clas-reco/src/main/java/org/jlab/clas/detector/DetectorHeader.java index cec0514b22..9cae002bb5 100644 --- a/common-tools/clas-reco/src/main/java/org/jlab/clas/detector/DetectorHeader.java +++ b/common-tools/clas-reco/src/main/java/org/jlab/clas/detector/DetectorHeader.java @@ -18,6 +18,8 @@ public class DetectorHeader { private float livetime = -1; private short eventCategory = 0; private short eventCategoryFT = 0; + private float torus = 0.0f; + private float solenoid = 0.0f; public DetectorHeader() { } @@ -113,4 +115,10 @@ public void setLiveTime(float livetime) { public void setEventCategory(short evcat) { this.eventCategory = evcat; } + + public void setTorus(float t) { torus = t; } + public void setSolenoid(float s) {solenoid = s; } + public float getTorus() { return torus; } + public float getSolenoid() { return solenoid; } + } diff --git a/reconstruction/eb/src/main/java/org/jlab/service/eb/EBio.java b/reconstruction/eb/src/main/java/org/jlab/service/eb/EBio.java index 916d966e78..a6bc117a44 100644 --- a/reconstruction/eb/src/main/java/org/jlab/service/eb/EBio.java +++ b/reconstruction/eb/src/main/java/org/jlab/service/eb/EBio.java @@ -32,6 +32,8 @@ public static DetectorHeader readHeader(DataEvent event, EBScalers ebs, EBCCDBCo dHeader.setRun(bank.getInt("run", 0)); dHeader.setEvent(bank.getInt("event", 0)); dHeader.setTrigger(bank.getLong("trigger", 0)); + dHeader.setTorus(bank.getFloat("torus", 0)); + dHeader.setSolenoid(bank.getFloat("solenoid", 0)); } // helicity: From 827b9ec11f29f28bdb891acf2d9fcf6dda70c5e2 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Fri, 30 Jan 2026 18:51:21 -0500 Subject: [PATCH 2/8] remove sampling fraction from trigger electron id for zero torus --- .../main/java/org/jlab/service/eb/EBEngine.java | 1 - .../java/org/jlab/service/eb/EventBuilder.java | 16 ++++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/reconstruction/eb/src/main/java/org/jlab/service/eb/EBEngine.java b/reconstruction/eb/src/main/java/org/jlab/service/eb/EBEngine.java index e6b974ec95..1bc324bb6f 100644 --- a/reconstruction/eb/src/main/java/org/jlab/service/eb/EBEngine.java +++ b/reconstruction/eb/src/main/java/org/jlab/service/eb/EBEngine.java @@ -1,6 +1,5 @@ package org.jlab.service.eb; -import java.util.Collections; import java.util.List; import java.util.logging.Logger; diff --git a/reconstruction/eb/src/main/java/org/jlab/service/eb/EventBuilder.java b/reconstruction/eb/src/main/java/org/jlab/service/eb/EventBuilder.java index c076589b9e..76d59f277d 100644 --- a/reconstruction/eb/src/main/java/org/jlab/service/eb/EventBuilder.java +++ b/reconstruction/eb/src/main/java/org/jlab/service/eb/EventBuilder.java @@ -467,7 +467,7 @@ public void setCharge(int ch) { this.charge = ch; } - public int getSoftwareTriggerScore(DetectorParticle p,EBCCDBConstants ccdb) { + public int getSoftwareTriggerScore(DetectorParticle p,EBCCDBConstants ccdb,float torus) { int score = 0; @@ -475,14 +475,18 @@ public int getSoftwareTriggerScore(DetectorParticle p,EBCCDBConstants ccdb) { if(p.getNphe(DetectorType.HTCC) > npheCut){ score += 10; } - + final int sector = p.getSector(DetectorType.ECAL); if (sector > 0) { final double nSigmaCut = ccdb.getSectorDouble(EBCCDBEnum.ELEC_SF_nsigma,sector); - final double sfNSigma = SamplingFractions.getNSigma(11,p,ccdb); + final double nsigma = SamplingFractions.getNSigma(11,p,ccdb); final double minPcalEnergy = ccdb.getSectorDouble(EBCCDBEnum.ELEC_PCAL_min_energy,sector); - if(abs(sfNSigma) < nSigmaCut && - p.getEnergy(DetectorType.ECAL,1) > minPcalEnergy) { + if (Math.abs(torus) <1e-8) { + if (p.getEnergy(DetectorType.ECAL,1) > minPcalEnergy) { + score += 100; + } + } + else if (abs(nsigma) < nSigmaCut && p.getEnergy(DetectorType.ECAL,1) > minPcalEnergy) { score += 100; } } @@ -503,7 +507,7 @@ public boolean assignSoftwareTrigger(DetectorEvent event,EBCCDBConstants ccdb) { int maxScore = 0; for (int i=0; i= this.score_requirement) { if (this.charge==p.getCharge()) { p.setPid(this.id); From 0e9f1614b4d6aaae2aef7d64b48794dfb9ed5b5f Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Fri, 30 Jan 2026 19:00:38 -0500 Subject: [PATCH 3/8] different electron pid for zero-torus --- .../src/main/java/org/jlab/rec/eb/EBUtil.java | 21 +++++++++++++++++++ .../java/org/jlab/service/eb/EBAnalyzer.java | 9 +++++--- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/reconstruction/eb/src/main/java/org/jlab/rec/eb/EBUtil.java b/reconstruction/eb/src/main/java/org/jlab/rec/eb/EBUtil.java index e6330ee504..04a1f8a5e5 100644 --- a/reconstruction/eb/src/main/java/org/jlab/rec/eb/EBUtil.java +++ b/reconstruction/eb/src/main/java/org/jlab/rec/eb/EBUtil.java @@ -99,6 +99,27 @@ public static boolean isSimpleElectron(DetectorParticle p,EBCCDBConstants ccdb) return true; } + + /** + * Perform a basic true/false identification for electrons. + */ + public static boolean isZeroFieldElectron(DetectorParticle p,EBCCDBConstants ccdb) { + + // require ECAL: + final int sector = p.getSector(DetectorType.ECAL); + if (sector<1) return false; + + // requre HTCC photoelectrons: + final double nphe = p.getNphe(DetectorType.HTCC); + if (nphe < ccdb.getDouble(EBCCDBEnum.HTCC_NPHE_CUT)) return false; + + // require PCAL minimum energy: + final double minPcalEnergy = ccdb.getSectorDouble(EBCCDBEnum.ELEC_PCAL_min_energy,sector); + final double pcalEnergy = p.getEnergy(DetectorType.ECAL,DetectorLayer.PCAL); + if (pcalEnergy < minPcalEnergy) return false; + + return true; + } /** * Calculate timing resolution from EventBuilder constants: diff --git a/reconstruction/eb/src/main/java/org/jlab/service/eb/EBAnalyzer.java b/reconstruction/eb/src/main/java/org/jlab/service/eb/EBAnalyzer.java index 5ddd542fc5..1198985238 100644 --- a/reconstruction/eb/src/main/java/org/jlab/service/eb/EBAnalyzer.java +++ b/reconstruction/eb/src/main/java/org/jlab/service/eb/EBAnalyzer.java @@ -350,7 +350,7 @@ public void assignBetas(DetectorEvent event,final boolean useStartTimeFromFT){ } public void assignPids(DetectorEvent event,final boolean useStartTimeFromFT) { - PIDHypothesis pidHyp = new PIDHypothesis(); + PIDHypothesis pidHyp = new PIDHypothesis(event.getEventHeader().getTorus()); pidHyp.setEvent(event); pidHyp.setUseStartTimeFromFT(useStartTimeFromFT); @@ -382,12 +382,13 @@ else if (p.getCharge()<0) { public class PIDHypothesis { + private float torus = 0; private int theoryPID = -1; private double PIDquality = 0.0; private DetectorEvent event; private boolean useStartTimeFromFT = false; - public PIDHypothesis() {} + public PIDHypothesis(float t) {torus=t;} public void setEvent(DetectorEvent e) {event = e;} @@ -405,7 +406,9 @@ public void PIDMatch(DetectorParticle p, int pid) { final boolean pidFromTimingCheck = pid==pidFromTiming && p.getTheoryBeta(pid)>0; - final boolean isElectron = EBUtil.isSimpleElectron(p,ccdb); + final boolean isElectron = Math.abs(torus)>1e-8 ? + EBUtil.isSimpleElectron(p,ccdb) : + EBUtil.isZeroFieldElectron(p, ccdb); final boolean htccSignalCheck = p.getNphe(DetectorType.HTCC)>ccdb.getDouble(EBCCDBEnum.HTCC_NPHE_CUT); final boolean ltccSignalCheck = p.getNphe(DetectorType.LTCC)>ccdb.getDouble(EBCCDBEnum.LTCC_NPHE_CUT); From 1375027dc4b9682cf427f9039136b265b5c713be Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Tue, 3 Feb 2026 18:01:15 -0500 Subject: [PATCH 4/8] add 500 MeV ECAL requirement --- reconstruction/eb/src/main/java/org/jlab/rec/eb/EBUtil.java | 3 ++- .../eb/src/main/java/org/jlab/service/eb/EventBuilder.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/reconstruction/eb/src/main/java/org/jlab/rec/eb/EBUtil.java b/reconstruction/eb/src/main/java/org/jlab/rec/eb/EBUtil.java index 04a1f8a5e5..07acb1c556 100644 --- a/reconstruction/eb/src/main/java/org/jlab/rec/eb/EBUtil.java +++ b/reconstruction/eb/src/main/java/org/jlab/rec/eb/EBUtil.java @@ -118,7 +118,8 @@ public static boolean isZeroFieldElectron(DetectorParticle p,EBCCDBConstants ccd final double pcalEnergy = p.getEnergy(DetectorType.ECAL,DetectorLayer.PCAL); if (pcalEnergy < minPcalEnergy) return false; - return true; + // require PCAL+ECAL minimum energy 500 MeV: + return p.getEnergy(DetectorType.ECAL) > 0.5; } /** diff --git a/reconstruction/eb/src/main/java/org/jlab/service/eb/EventBuilder.java b/reconstruction/eb/src/main/java/org/jlab/service/eb/EventBuilder.java index 76d59f277d..d36fbc6912 100644 --- a/reconstruction/eb/src/main/java/org/jlab/service/eb/EventBuilder.java +++ b/reconstruction/eb/src/main/java/org/jlab/service/eb/EventBuilder.java @@ -482,7 +482,8 @@ public int getSoftwareTriggerScore(DetectorParticle p,EBCCDBConstants ccdb,float final double nsigma = SamplingFractions.getNSigma(11,p,ccdb); final double minPcalEnergy = ccdb.getSectorDouble(EBCCDBEnum.ELEC_PCAL_min_energy,sector); if (Math.abs(torus) <1e-8) { - if (p.getEnergy(DetectorType.ECAL,1) > minPcalEnergy) { + if (p.getEnergy(DetectorType.ECAL,1) > minPcalEnergy && + p.getEnergy(DetectorType.ECAL) > 0.5) { score += 100; } } From 8a0d26860c0d97162de072a95e9cebc558b5201c Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Tue, 3 Feb 2026 17:49:03 -0500 Subject: [PATCH 5/8] latest rgl yaml from Mathieu --- etc/services/rgl-clarode.yml | 37 +++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/etc/services/rgl-clarode.yml b/etc/services/rgl-clarode.yml index ae762980a7..550ae610c8 100644 --- a/etc/services/rgl-clarode.yml +++ b/etc/services/rgl-clarode.yml @@ -1,26 +1,11 @@ -mime-types: - - binary/data-hipo -configuration: - global: - variation: rge_spring2024 - timestamp: 10/08/2025-17:00:00 - io-services: - writer: - schema_dir: full - services: - MAGFIELDS: - magfieldSolenoidMap: Symm_solenoid_r601_phi1_z1201_13June2018.dat - magfieldTorusMap: Full_torus_r251_phi181_z251_25Jan2021.dat io-services: reader: - class: org.jlab.io.clara.DecoderReader - name: DecoderReader + class: org.jlab.io.clara.Clas12Reader + name: Clas12Reader writer: class: org.jlab.io.clara.DecoderWriter name: DecoderWriter services: - - class: org.jlab.service.ai.DCDenoiseEngine - name: DCDN - class: org.jlab.clas.swimtools.MagFieldsEngine name: MAGFIELDS - class: org.jlab.rec.ft.cal.FTCALEngine @@ -57,3 +42,21 @@ services: name: EBTB - class: org.jlab.rec.rich.RICHEBEngine name: RICH + - class: org.jlab.service.atof.ATOFEngine + name: ATOF + - class: org.jlab.service.ahdc.AHDCEngine + name: AHDC +configuration: + global: + variation: rge_spring2024 + io-services: + writer: + schema_dir: dst + services: + MAGFIELDS: + magfieldSolenoidMap: Symm_solenoid_r601_phi1_z1201_13June2018.dat + magfieldTorusMap: Full_torus_r251_phi181_z251_25Jan2021.dat + AHDC: + Mode: "AI_Track_Finding" +mime-types: + - binary/data-hipo From da7121c2601565fff6326f46be7c689ae50fe2c2 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Thu, 5 Feb 2026 16:29:22 -0500 Subject: [PATCH 6/8] reassign electron momentum from sampling fraction --- .../main/java/org/jlab/service/eb/EBAnalyzer.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/reconstruction/eb/src/main/java/org/jlab/service/eb/EBAnalyzer.java b/reconstruction/eb/src/main/java/org/jlab/service/eb/EBAnalyzer.java index 1198985238..a4edf3f4a5 100644 --- a/reconstruction/eb/src/main/java/org/jlab/service/eb/EBAnalyzer.java +++ b/reconstruction/eb/src/main/java/org/jlab/service/eb/EBAnalyzer.java @@ -307,6 +307,18 @@ else if (p.hasHit(DetectorType.CND) || p.hasHit(DetectorType.CTOF) || p.hasHit(D } } + public void assignElectronMomenta(DetectorEvent de) { + final int np = de.getParticles().size(); + for (int ii=0; ii Date: Thu, 5 Feb 2026 16:29:30 -0500 Subject: [PATCH 7/8] call it --- .../eb/src/main/java/org/jlab/service/eb/EBEngine.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/reconstruction/eb/src/main/java/org/jlab/service/eb/EBEngine.java b/reconstruction/eb/src/main/java/org/jlab/service/eb/EBEngine.java index 1bc324bb6f..74db8f6dff 100644 --- a/reconstruction/eb/src/main/java/org/jlab/service/eb/EBEngine.java +++ b/reconstruction/eb/src/main/java/org/jlab/service/eb/EBEngine.java @@ -170,6 +170,12 @@ public boolean processDataEvent(DataEvent de,EBScalers ebs) { EBAnalyzer analyzer = new EBAnalyzer(ccdb,rf); analyzer.processEvent(eb.getEvent()); + // Overwrite electron momentum for zero-field: + // FIXME: replace string check + if (this.getName().contains("HB") && Math.abs(head.getTorus()) < 1e-8) { + analyzer.assignElectronMomenta(eb.getEvent()); + } + // Add Forward Tagger particles: eb.processForwardTagger(de); From 5f045834098efd0ee8bdfa1de599f99f14bf80bd Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Thu, 5 Feb 2026 17:08:33 -0500 Subject: [PATCH 8/8] remove copy/paste mistake --- .../eb/src/main/java/org/jlab/service/eb/EBAnalyzer.java | 1 - 1 file changed, 1 deletion(-) diff --git a/reconstruction/eb/src/main/java/org/jlab/service/eb/EBAnalyzer.java b/reconstruction/eb/src/main/java/org/jlab/service/eb/EBAnalyzer.java index a4edf3f4a5..86dea6d0f2 100644 --- a/reconstruction/eb/src/main/java/org/jlab/service/eb/EBAnalyzer.java +++ b/reconstruction/eb/src/main/java/org/jlab/service/eb/EBAnalyzer.java @@ -310,7 +310,6 @@ else if (p.hasHit(DetectorType.CND) || p.hasHit(DetectorType.CTOF) || p.hasHit(D public void assignElectronMomenta(DetectorEvent de) { final int np = de.getParticles().size(); for (int ii=0; ii