From 5dba77e53cc1eb7388b300e00220e8356dbaa149 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Wed, 12 Aug 2026 16:48:36 -0400 Subject: [PATCH 01/46] add more helpful helper method --- .../src/main/java/org/jlab/utils/groups/IndexedList.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/common-tools/clas-utils/src/main/java/org/jlab/utils/groups/IndexedList.java b/common-tools/clas-utils/src/main/java/org/jlab/utils/groups/IndexedList.java index 384e2cb259..23d440b63e 100644 --- a/common-tools/clas-utils/src/main/java/org/jlab/utils/groups/IndexedList.java +++ b/common-tools/clas-utils/src/main/java/org/jlab/utils/groups/IndexedList.java @@ -345,10 +345,9 @@ public int[] getIndices(long hashcode, int... indices) { * @return */ public int[] getIndices(long hashcode, int nindices) { - int[] ret = new int[nindices]; - for (int i=0; i Date: Wed, 12 Aug 2026 17:00:08 -0400 Subject: [PATCH 02/46] simplify --- .../src/main/java/org/jlab/utils/groups/IndexedList.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/common-tools/clas-utils/src/main/java/org/jlab/utils/groups/IndexedList.java b/common-tools/clas-utils/src/main/java/org/jlab/utils/groups/IndexedList.java index 23d440b63e..384e2cb259 100644 --- a/common-tools/clas-utils/src/main/java/org/jlab/utils/groups/IndexedList.java +++ b/common-tools/clas-utils/src/main/java/org/jlab/utils/groups/IndexedList.java @@ -345,9 +345,10 @@ public int[] getIndices(long hashcode, int... indices) { * @return */ public int[] getIndices(long hashcode, int nindices) { - int[] indices = new int[nindices]; - for (int i=0; i Date: Mon, 10 Aug 2026 19:33:08 -0400 Subject: [PATCH 03/46] add occupancy table --- .../detector/calib/utils/OccupancyTable.java | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java new file mode 100644 index 0000000000..5eb0cbdc8e --- /dev/null +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java @@ -0,0 +1,47 @@ +package org.jlab.detector.calib.utils; + +import java.util.Map; +import org.jlab.io.base.DataBank; +import org.jlab.io.base.DataEvent; +import org.jlab.utils.groups.IndexedTable; + +/** + * + * @author baltzell + */ +public class OccupancyTable { + + String bankName; + private IndexedTable table; + + public OccupancyTable(String bank, int indexCount) { + bankName = bank; + table = new IndexedTable(indexCount, new String[]{"nhits/I"}); + } + + public void add(int nhits, int... index) { + if (!table.hasEntry(index)) { + table.addEntry(index); + } + table.setIntValue(nhits, "nhits", index); + } + + public void update(DataEvent e) { + DataBank b = e.getBank(bankName); + if (b != null) e.removeBank(bankName); + b = e.createBank(bankName, table.getRowCount()); + Map m = table.getList().getMap(); + int i = 0; + for (Map.Entry entry : m.entrySet()) { + long hash = entry.getKey(); + int sector = IndexedTable.DEFAULT_GENERATOR.getIndex(hash, 0); + int layer = IndexedTable.DEFAULT_GENERATOR.getIndex(hash, 1); + int component = IndexedTable.DEFAULT_GENERATOR.getIndex(hash, 2); + b.setInt("sector", i, sector); + b.setInt("sector", i, layer); + b.setInt("sector", i, component); + b.setInt("nhits", i++, entry.getValue()); + } + e.appendBank(b); + } +} From b39aa6d7e1ac46b6bae573cd63e71e53142104ae Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 10 Aug 2026 21:23:51 -0400 Subject: [PATCH 04/46] complete OccupancyTable class --- .../detector/calib/utils/OccupancyTable.java | 67 +++++++++++++------ 1 file changed, 47 insertions(+), 20 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java index 5eb0cbdc8e..94eda12ea4 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java @@ -11,37 +11,64 @@ */ public class OccupancyTable { - String bankName; + public static final String[] INDEX_NAMES = {"sector","layer","component","order"}; + + private final int indexCount; + private IndexedTable table; - public OccupancyTable(String bank, int indexCount) { - bankName = bank; - table = new IndexedTable(indexCount, new String[]{"nhits/I"}); + public OccupancyTable(int indexCount) { + if (indexCount != 3 && indexCount != 4) throw new RuntimeException(); + this.indexCount = indexCount; + table = new IndexedTable(indexCount, new String[]{"nhits/D"}); } - public void add(int nhits, int... index) { + public void reset() { + table = new IndexedTable(indexCount, new String[]{"nhits/D"}); + } + + public void add(double weight, int... index) { if (!table.hasEntry(index)) { table.addEntry(index); + table.setDoubleValue(0.0, "nhits", index); } - table.setIntValue(nhits, "nhits", index); + table.setDoubleValue(table.getDoubleValue("nhits",index) + weight, "nhits", index); } - public void update(DataEvent e) { - DataBank b = e.getBank(bankName); - if (b != null) e.removeBank(bankName); - b = e.createBank(bankName, table.getRowCount()); - Map m = table.getList().getMap(); + public void add(int... index) { + add(1, index); + } + + public void add(DataBank b) { + final int rows = b.rows(); + for (int i=0; i m = table.getList().getMap(); for (Map.Entry entry : m.entrySet()) { - long hash = entry.getKey(); - int sector = IndexedTable.DEFAULT_GENERATOR.getIndex(hash, 0); - int layer = IndexedTable.DEFAULT_GENERATOR.getIndex(hash, 1); - int component = IndexedTable.DEFAULT_GENERATOR.getIndex(hash, 2); - b.setInt("sector", i, sector); - b.setInt("sector", i, layer); - b.setInt("sector", i, component); - b.setInt("nhits", i++, entry.getValue()); + b.setInt("sector", i, IndexedTable.DEFAULT_GENERATOR.getIndex(entry.getKey(), 0)); + b.setInt("layer", i, IndexedTable.DEFAULT_GENERATOR.getIndex(entry.getKey(), 1)); + b.setInt("component", i, IndexedTable.DEFAULT_GENERATOR.getIndex(entry.getKey(), 2)); + if (indexCount == 4) + b.setInt("order", i, IndexedTable.DEFAULT_GENERATOR.getIndex(entry.getKey(), 3)); + b.setInt("nhits", i, entry.getValue()); + i++; } + } + + public void update(DataEvent e, String bankName) { + DataBank b = e.getBank(bankName); + if (b != null) e.removeBank(bankName); + b = e.createBank(bankName, table.getRowCount()); + update(b); e.appendBank(b); } -} + +} \ No newline at end of file From fdbcf360286c3a01995819f2f367558cb81d9ce5 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 10 Aug 2026 21:38:54 -0400 Subject: [PATCH 05/46] cleanup --- .../java/org/jlab/detector/calib/utils/OccupancyTable.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java index 94eda12ea4..ce3f95128c 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java @@ -20,7 +20,7 @@ public class OccupancyTable { public OccupancyTable(int indexCount) { if (indexCount != 3 && indexCount != 4) throw new RuntimeException(); this.indexCount = indexCount; - table = new IndexedTable(indexCount, new String[]{"nhits/D"}); + reset(); } public void reset() { @@ -49,7 +49,7 @@ else if (indexCount == 4) } } - private void update(DataBank b) { + public void update(DataBank b) { int i = 0; Map m = table.getList().getMap(); for (Map.Entry entry : m.entrySet()) { @@ -71,4 +71,4 @@ public void update(DataEvent e, String bankName) { e.appendBank(b); } -} \ No newline at end of file +} From 76a941bd9f2beaf7a1837e7d056677e434de013b Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Tue, 11 Aug 2026 10:03:27 -0400 Subject: [PATCH 06/46] cleanup --- .../detector/calib/utils/OccupancyTable.java | 25 ++++++++----------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java index ce3f95128c..6548833645 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java @@ -11,20 +11,18 @@ */ public class OccupancyTable { - public static final String[] INDEX_NAMES = {"sector","layer","component","order"}; - - private final int indexCount; - + private String[] indexNames; private IndexedTable table; - public OccupancyTable(int indexCount) { - if (indexCount != 3 && indexCount != 4) throw new RuntimeException(); - this.indexCount = indexCount; - reset(); + public OccupancyTable(String... index) { + if (index.length != 3 && index.length != 4) + throw new IllegalArgumentException("Invalid index length: "+index.length); + indexNames = index; + table = new IndexedTable(indexNames.length, new String[]{"nhits/D"}); } public void reset() { - table = new IndexedTable(indexCount, new String[]{"nhits/D"}); + table = new IndexedTable(indexNames.length, new String[]{"nhits/D"}); } public void add(double weight, int... index) { @@ -42,10 +40,8 @@ public void add(int... index) { public void add(DataBank b) { final int rows = b.rows(); for (int i=0; i Date: Tue, 11 Aug 2026 13:48:59 -0400 Subject: [PATCH 07/46] add bank --- .../detector/calib/utils/OccupancyTable.java | 73 +++++++++++++------ etc/bankdefs/hipo4/occupancy.json | 14 ++++ 2 files changed, 63 insertions(+), 24 deletions(-) create mode 100644 etc/bankdefs/hipo4/occupancy.json diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java index 6548833645..aca5de13c2 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java @@ -2,68 +2,93 @@ import java.util.Map; import org.jlab.io.base.DataBank; -import org.jlab.io.base.DataEvent; import org.jlab.utils.groups.IndexedTable; /** - * + * Utility class for storing occupancy/multiplicity in an IndexedTable and + * writing it to an occupancy bank with format (index... weight [*]) + * * @author baltzell */ public class OccupancyTable { private String[] indexNames; private IndexedTable table; - + public OccupancyTable(String... index) { if (index.length != 3 && index.length != 4) throw new IllegalArgumentException("Invalid index length: "+index.length); indexNames = index; - table = new IndexedTable(indexNames.length, new String[]{"nhits/D"}); + table = new IndexedTable(indexNames.length, new String[]{"occ/D"}); } + /** + * Reset the occupancy table. + */ public void reset() { - table = new IndexedTable(indexNames.length, new String[]{"nhits/D"}); + table = new IndexedTable(indexNames.length, new String[]{"occ/D"}); } + /** + * Fill occupancy, user-defined weight. + * @param weight + * @param index + */ public void add(double weight, int... index) { + final long hash = IndexedTable.DEFAULT_GENERATOR.hashCode(index); if (!table.hasEntry(index)) { table.addEntry(index); - table.setDoubleValue(0.0, "nhits", index); + table.setDoubleValueByHash(0.0, indexNames.length, hash); } - table.setDoubleValue(table.getDoubleValue("nhits",index) + weight, "nhits", index); + table.setDoubleValueByHash(weight + table.getDoubleValueByHash(indexNames.length, hash), indexNames.length, hash); } + /** + * Fill occupancy, unity weight. + * @param index + */ public void add(int... index) { add(1, index); } + /** + * Fill occupancy from hits bank, one per bank row. + * Note, bank index data types are hard-coded here! + * @param b hit bank + */ public void add(DataBank b) { final int rows = b.rows(); for (int i=0; i m = table.getList().getMap(); for (Map.Entry entry : m.entrySet()) { - b.setInt("sector", i, IndexedTable.DEFAULT_GENERATOR.getIndex(entry.getKey(), 0)); - b.setInt("layer", i, IndexedTable.DEFAULT_GENERATOR.getIndex(entry.getKey(), 1)); - b.setInt("component", i, IndexedTable.DEFAULT_GENERATOR.getIndex(entry.getKey(), 2)); - if (indexNames.length == 4) b.setInt("order", i, IndexedTable.DEFAULT_GENERATOR.getIndex(entry.getKey(), 3)); - b.setInt("nhits", i, entry.getValue()); + b.setInt(0, i, IndexedTable.DEFAULT_GENERATOR.getIndex(entry.getKey(), 0)); + b.setInt(1, i, IndexedTable.DEFAULT_GENERATOR.getIndex(entry.getKey(), 1)); + b.setInt(2, i, IndexedTable.DEFAULT_GENERATOR.getIndex(entry.getKey(), 2)); + if (indexNames.length == 4) + b.setInt(3, i, IndexedTable.DEFAULT_GENERATOR.getIndex(entry.getKey(), 3)); + b.setInt(indexNames.length, i, entry.getValue()); i++; } } - - public void update(DataEvent e, String bankName) { - DataBank b = e.getBank(bankName); - if (b != null) e.removeBank(bankName); - b = e.createBank(bankName, table.getRowCount()); - update(b); - e.appendBank(b); - } - -} +} \ No newline at end of file diff --git a/etc/bankdefs/hipo4/occupancy.json b/etc/bankdefs/hipo4/occupancy.json new file mode 100644 index 0000000000..82722ec54f --- /dev/null +++ b/etc/bankdefs/hipo4/occupancy.json @@ -0,0 +1,14 @@ +[ + { + "name": "DC::occ", + "group": 20600, + "item": 20, + "info": "Event Header Bank", + "entries": [ + { "name":"sector" , "type":"B", "info":"sector"}, + { "name":"layer" , "type":"B", "info":"layer"}, + { "name":"component" , "type":"S", "info":"component"}, + { "name":"hits" , "type":"S", "info":"number of hits"} + ] + } +] From b8c346799b758f307f9016c57771a4a079448985 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Wed, 12 Aug 2026 16:44:42 -0400 Subject: [PATCH 08/46] make it work --- .../detector/calib/utils/OccupancyTable.java | 132 +++++++++++------- etc/bankdefs/hipo4/occupancy.json | 2 +- 2 files changed, 80 insertions(+), 54 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java index aca5de13c2..74b489e064 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java @@ -2,93 +2,119 @@ import java.util.Map; import org.jlab.io.base.DataBank; +import org.jlab.io.base.DataEvent; import org.jlab.utils.groups.IndexedTable; +import org.jlab.utils.groups.IndexedTable.IndexedEntry; -/** - * Utility class for storing occupancy/multiplicity in an IndexedTable and - * writing it to an occupancy bank with format (index... weight [*]) - * - * @author baltzell - */ -public class OccupancyTable { +public abstract class OccupancyTable { - private String[] indexNames; - private IndexedTable table; + public static void main(String[] args) { + DC d = new DC(); + d.add(1,1,1); + d.add(1,2,1); + d.add(1,3,1); + d.add(1,3,1); + IndexedTable o = d.getOccupancy(10); + o.show(); + o.getList().show(); + } + + public static class DC extends OccupancyTable { + public DC() { super("DC::occ","sector","layer"); } + @Override + public void add(DataEvent e) { + DataBank b = e.getBank("DC::tot"); + if (b != null) { + final int rows = b.rows(); + for (int i=0; i)table.getList().getMap()).keySet()) { + t.addEntry(IndexedTable.DEFAULT_GENERATOR.getIndex(hash, 0), + IndexedTable.DEFAULT_GENERATOR.getIndex(hash, 1), + IndexedTable.DEFAULT_GENERATOR.getIndex(hash, 2)); + t.setDoubleValueByHash(((double)table.getIntValueByHash(0, hash))/events, 0, hash); } - table.setDoubleValueByHash(weight + table.getDoubleValueByHash(indexNames.length, hash), indexNames.length, hash); + return t; } /** - * Fill occupancy, unity weight. - * @param index + * Reset occupancy table. */ - public void add(int... index) { - add(1, index); + public final void reset() { + table = new IndexedTable(indexNames.length, valueNames); } /** - * Fill occupancy from hits bank, one per bank row. - * Note, bank index data types are hard-coded here! - * @param b hit bank + * Fill occupancy table. + * @param index */ - public void add(DataBank b) { - final int rows = b.rows(); - for (int i=0; i m = table.getList().getMap(); - for (Map.Entry entry : m.entrySet()) { - b.setInt(0, i, IndexedTable.DEFAULT_GENERATOR.getIndex(entry.getKey(), 0)); - b.setInt(1, i, IndexedTable.DEFAULT_GENERATOR.getIndex(entry.getKey(), 1)); - b.setInt(2, i, IndexedTable.DEFAULT_GENERATOR.getIndex(entry.getKey(), 2)); + Map m = table.getList().getMap(); + for (long hash : m.keySet()) { + b.setByte(0, i, (byte)IndexedTable.DEFAULT_GENERATOR.getIndex(hash, 0)); + b.setByte(1, i, (byte)IndexedTable.DEFAULT_GENERATOR.getIndex(hash, 1)); + b.setShort(2, i, (short)IndexedTable.DEFAULT_GENERATOR.getIndex(hash, 2)); if (indexNames.length == 4) - b.setInt(3, i, IndexedTable.DEFAULT_GENERATOR.getIndex(entry.getKey(), 3)); - b.setInt(indexNames.length, i, entry.getValue()); + b.setByte(3, i, (byte)IndexedTable.DEFAULT_GENERATOR.getIndex(hash, 3)); + b.setInt(indexNames.length, i, m.get(hash).getValue(0).intValue()); i++; } } + + /** + * Fill occupancy from hits bank. + * @param e + */ + protected abstract void add(DataEvent e); } \ No newline at end of file diff --git a/etc/bankdefs/hipo4/occupancy.json b/etc/bankdefs/hipo4/occupancy.json index 82722ec54f..10195ecd32 100644 --- a/etc/bankdefs/hipo4/occupancy.json +++ b/etc/bankdefs/hipo4/occupancy.json @@ -8,7 +8,7 @@ { "name":"sector" , "type":"B", "info":"sector"}, { "name":"layer" , "type":"B", "info":"layer"}, { "name":"component" , "type":"S", "info":"component"}, - { "name":"hits" , "type":"S", "info":"number of hits"} + { "name":"hits" , "type":"I", "info":"number of hits"} ] } ] From 0f94ca3b4401cf6961c14e58704658206b231a98 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Wed, 12 Aug 2026 17:03:56 -0400 Subject: [PATCH 09/46] cleanup --- .../jlab/detector/calib/utils/OccupancyTable.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java index 74b489e064..d53fe879c8 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java @@ -58,9 +58,7 @@ public OccupancyTable(String bank) { public final IndexedTable getOccupancy(int events) { IndexedTable t = new IndexedTable(indexNames.length, new String[]{"occ/F"}); for (long hash : ((Map)table.getList().getMap()).keySet()) { - t.addEntry(IndexedTable.DEFAULT_GENERATOR.getIndex(hash, 0), - IndexedTable.DEFAULT_GENERATOR.getIndex(hash, 1), - IndexedTable.DEFAULT_GENERATOR.getIndex(hash, 2)); + t.addEntry(IndexedTable.DEFAULT_GENERATOR.getIndices(hash, indexNames.length)); t.setDoubleValueByHash(((double)table.getIntValueByHash(0, hash))/events, 0, hash); } return t; @@ -102,11 +100,11 @@ public final void update(DataBank b) { int i = 0; Map m = table.getList().getMap(); for (long hash : m.keySet()) { - b.setByte(0, i, (byte)IndexedTable.DEFAULT_GENERATOR.getIndex(hash, 0)); - b.setByte(1, i, (byte)IndexedTable.DEFAULT_GENERATOR.getIndex(hash, 1)); - b.setShort(2, i, (short)IndexedTable.DEFAULT_GENERATOR.getIndex(hash, 2)); - if (indexNames.length == 4) - b.setByte(3, i, (byte)IndexedTable.DEFAULT_GENERATOR.getIndex(hash, 3)); + int[] indices = IndexedTable.DEFAULT_GENERATOR.getIndices(hash, indexNames.length); + b.setByte(0, i, (byte)indices[0]); + b.setByte(1, i, (byte)indices[1]); + b.setShort(2, i, (short)indices[2]); + if (indexNames.length == 4) b.setByte(3, i, (byte)indices[3]); b.setInt(indexNames.length, i, m.get(hash).getValue(0).intValue()); i++; } From b8741b9ab420b6f8d9f8394215e72ed14ca62708 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Wed, 12 Aug 2026 19:22:52 -0400 Subject: [PATCH 10/46] cleanup --- .../detector/calib/utils/OccupancyTable.java | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java index d53fe879c8..3750cd1550 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java @@ -20,32 +20,28 @@ public static void main(String[] args) { } public static class DC extends OccupancyTable { - public DC() { super("DC::occ","sector","layer"); } + public DC() { super("DC::occ","sector","layer","component"); } @Override public void add(DataEvent e) { DataBank b = e.getBank("DC::tot"); - if (b != null) { - final int rows = b.rows(); - for (int i=0; i Date: Wed, 12 Aug 2026 20:19:36 -0400 Subject: [PATCH 11/46] more --- .../detector/calib/utils/OccupancyTable.java | 57 +++++++------------ etc/bankdefs/hipo4/occupancy.json | 2 +- 2 files changed, 23 insertions(+), 36 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java index 3750cd1550..4d00191d88 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java @@ -8,20 +8,8 @@ public abstract class OccupancyTable { - public static void main(String[] args) { - DC d = new DC(); - d.add(1,1,1); - d.add(1,2,1); - d.add(1,3,1); - d.add(1,3,1); - IndexedTable o = d.getOccupancy(10); - o.show(); - o.getList().show(); - } - public static class DC extends OccupancyTable { - public DC() { super("DC::occ","sector","layer","component"); } - @Override + public DC() { super(); } public void add(DataEvent e) { DataBank b = e.getBank("DC::tot"); if (b == null) b = e.getBank("DC::tdc"); @@ -32,16 +20,16 @@ public void add(DataEvent e) { } } - protected String[] valueNames = {"occ/I"}; + protected String[] valueNames = {"occ/F"}; protected String[] indexNames; protected IndexedTable table; - public OccupancyTable(String bank, String... index) { + public OccupancyTable(String... index) { indexNames = index; table = new IndexedTable(indexNames.length, valueNames); } - public OccupancyTable(String bank) { + public OccupancyTable() { indexNames = new String[]{"sector","layer","component"}; table = new IndexedTable(indexNames.length, valueNames); } @@ -55,7 +43,7 @@ public final IndexedTable getOccupancy(int events) { IndexedTable t = new IndexedTable(indexNames.length, new String[]{"occ/F"}); for (long hash : ((Map)table.getList().getMap()).keySet()) { t.addEntry(IndexedTable.DEFAULT_GENERATOR.getIndices(hash, indexNames.length)); - t.setDoubleValueByHash(((double)table.getIntValueByHash(0, hash))/events, 0, hash); + t.setDoubleValueByHash((table.getDoubleValueByHash(0, hash))/events, 0, hash); } return t; } @@ -77,7 +65,7 @@ public final void add(int... index) { table.addEntry(index); table.setIntValueByHash(0, 0, hash); } - table.setIntValueByHash(table.getIntValueByHash(0, hash) + 1, 0, hash); + table.setDoubleValueByHash(table.getDoubleValueByHash(0, hash) + 1, 0, hash); } /** @@ -90,32 +78,31 @@ public final int getRows() { /** * Update an occupancy bank, assuming 3/4-index s/l/c[/o]. - * @param b occupancy bank + * @param bank occupancy bank */ - public final void update(DataBank b) { + public final void update(DataBank bank) { int i = 0; Map m = table.getList().getMap(); for (long hash : m.keySet()) { int[] indices = IndexedTable.DEFAULT_GENERATOR.getIndices(hash, indexNames.length); - b.setByte(0, i, (byte)indices[0]); - b.setByte(1, i, (byte)indices[1]); - b.setShort(2, i, (short)indices[2]); - if (indexNames.length == 4) b.setByte(3, i, (byte)indices[3]); - b.setInt(indexNames.length, i, m.get(hash).getValue(0).intValue()); + bank.setByte(0, i, (byte)indices[0]); + bank.setByte(1, i, (byte)indices[1]); + bank.setShort(2, i, (short)indices[2]); + if (indexNames.length == 4) bank.setByte(3, i, (byte)indices[3]); + bank.setFloat(indexNames.length, i, m.get(hash).getValue(0).intValue()); i++; } } - public final void update(DataEvent e, String bank) { - DataBank b = e.createBank(bank, getRows()); - if (e.hasBank(bank)) e.removeBank(bank); - update(b); - e.appendBank(b); - } - /** - * Fill occupancy from hits bank. - * @param e + * Create occupancy bank, assuming 3/4-indexing, and add it to the event. + * @param event + * @param bank */ - protected abstract void add(DataEvent e); + public final void update(DataEvent event, String bank) { + DataBank b = event.createBank(bank, getRows()); + if (event.hasBank(bank)) event.removeBank(bank); + update(b); + event.appendBank(b); + } } \ No newline at end of file diff --git a/etc/bankdefs/hipo4/occupancy.json b/etc/bankdefs/hipo4/occupancy.json index 10195ecd32..c89164248d 100644 --- a/etc/bankdefs/hipo4/occupancy.json +++ b/etc/bankdefs/hipo4/occupancy.json @@ -8,7 +8,7 @@ { "name":"sector" , "type":"B", "info":"sector"}, { "name":"layer" , "type":"B", "info":"layer"}, { "name":"component" , "type":"S", "info":"component"}, - { "name":"hits" , "type":"I", "info":"number of hits"} + { "name":"hits" , "type":"F", "info":"number of hits"} ] } ] From 76f7676f86d9e054c9634877079352567d367900 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Thu, 13 Aug 2026 14:04:41 -0400 Subject: [PATCH 12/46] claraify it --- .../java/org/jlab/io/clara/Clas12Writer.java | 27 ++++ .../detector/calib/utils/OccupancyTable.java | 135 +++++++++++++----- .../org/jlab/clas/reco/OccupancyEngine.java | 36 +++++ 3 files changed, 162 insertions(+), 36 deletions(-) create mode 100644 common-tools/clas-reco/src/main/java/org/jlab/clas/reco/OccupancyEngine.java diff --git a/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java b/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java index a094b939cd..7902ccf55c 100644 --- a/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java +++ b/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java @@ -8,6 +8,7 @@ import org.jlab.analysis.postprocess.Processor; import org.jlab.clara.std.services.EventWriterException; import org.jlab.detector.calib.utils.ConstantsManager; +import org.jlab.detector.calib.utils.OccupancyTable; import org.jlab.detector.decode.CLASDecoder4; import org.jlab.detector.helicity.HelicitySequence; import org.jlab.detector.helicity.HelicitySequenceDelayed; @@ -35,6 +36,9 @@ public class Clas12Writer extends HipoToHipoWriter { static final String[] TAG1BANKS = {"RUN::scaler","HEL::scaler","RAW::scaler","RAW::epics","HEL::flip","COAT::config"}; + int events; + OccupancyTable[] occupancyTables; + Bank[] occupancyBanks; Bank[] tag1banks; Bank runConfig; Bank helicityAdc; @@ -46,6 +50,7 @@ public class Clas12Writer extends HipoToHipoWriter { boolean postprocess; private void init(JSONObject opts) { + events = 0; fullSchema = new SchemaFactory(); fullSchema.initFromDirectory(FileUtils.getEnvironmentPath("CLAS12DIR","etc/bankdefs/hipo4")); runConfig = new Bank(fullSchema.getSchema("RUN::config")); @@ -61,6 +66,10 @@ private void init(JSONObject opts) { tag1banks = new Bank[TAG1BANKS.length]; for (int i=0; i 0 && evno > 0) eventUnix.put(evno, unix); } + for (int i=0; i)table.getList().getMap()).keySet()) { - t.addEntry(IndexedTable.DEFAULT_GENERATOR.getIndices(hash, indexNames.length)); - t.setDoubleValueByHash((table.getDoubleValueByHash(0, hash))/events, 0, hash); - } - return t; - } - /** * Reset occupancy table. */ @@ -56,18 +43,74 @@ public final void reset() { } /** - * Fill occupancy table. + * Fill occupancy table with a weight. + * @param weight * @param index */ - public final void add(int... index) { + public final void fill(float weight, int... index) { final long hash = IndexedTable.DEFAULT_GENERATOR.hashCode(index); if (!table.hasEntryByHash(hash)) { table.addEntry(index); table.setIntValueByHash(0, 0, hash); } - table.setDoubleValueByHash(table.getDoubleValueByHash(0, hash) + 1, 0, hash); + table.setDoubleValueByHash(table.getDoubleValueByHash(0, hash) + weight, 0, hash); + } + + /** + * Fill occupancy table. + * @param index + */ + public final void fill(int... index) { + fill(1.0f, index); + } + + /** + * + * @param b + * @param weighted + */ + public void fill(DataBank b, boolean weighted) { + final int rows = b.rows(); + int[] indices = new int[indexNames.length]; + for (int i=0; i m = table.getList().getMap(); for (long hash : m.keySet()) { int[] indices = IndexedTable.DEFAULT_GENERATOR.getIndices(hash, indexNames.length); - bank.setByte(0, i, (byte)indices[0]); - bank.setByte(1, i, (byte)indices[1]); - bank.setShort(2, i, (short)indices[2]); - if (indexNames.length == 4) bank.setByte(3, i, (byte)indices[3]); - bank.setFloat(indexNames.length, i, m.get(hash).getValue(0).intValue()); + for (int j=0; j)table.getList().getMap()).keySet()) { + int[] idx = IndexedTable.DEFAULT_GENERATOR.getIndices(hash, indexNames.length); + for (int j=0; j)table.getList().getMap()).keySet()) { + t.addEntry(IndexedTable.DEFAULT_GENERATOR.getIndices(hash, indexNames.length)); + t.setDoubleValueByHash((table.getDoubleValueByHash(0, hash))/events, 0, hash); + } + return t; + } + } \ No newline at end of file diff --git a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/OccupancyEngine.java b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/OccupancyEngine.java new file mode 100644 index 0000000000..ebce35d6a2 --- /dev/null +++ b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/OccupancyEngine.java @@ -0,0 +1,36 @@ +package org.jlab.clas.reco; + +import org.jlab.detector.calib.utils.OccupancyTable; +import org.jlab.io.base.DataEvent; + +/** + * + * @author baltzell + */ +public class OccupancyEngine extends ReconstructionEngine { + + OccupancyTable[] tables = {new OccupancyTable.DC()}; + String[] banks = {"DC::occ"}; + + public OccupancyEngine() { + super("OccE", "baltzell", "0.1"); + } + + @Override + public boolean processDataEventUser(DataEvent event) { + for (int i=0; i Date: Thu, 13 Aug 2026 14:38:29 -0400 Subject: [PATCH 13/46] untagged periodic instead --- .../java/org/jlab/io/clara/Clas12Writer.java | 26 +++++++------------ 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java b/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java index 7902ccf55c..2d35ae9873 100644 --- a/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java +++ b/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java @@ -36,7 +36,7 @@ public class Clas12Writer extends HipoToHipoWriter { static final String[] TAG1BANKS = {"RUN::scaler","HEL::scaler","RAW::scaler","RAW::epics","HEL::flip","COAT::config"}; - int events; + int occupancyEvents; OccupancyTable[] occupancyTables; Bank[] occupancyBanks; Bank[] tag1banks; @@ -50,7 +50,7 @@ public class Clas12Writer extends HipoToHipoWriter { boolean postprocess; private void init(JSONObject opts) { - events = 0; + occupancyEvents = 0; fullSchema = new SchemaFactory(); fullSchema.initFromDirectory(FileUtils.getEnvironmentPath("CLAS12DIR","etc/bankdefs/hipo4")); runConfig = new Bank(fullSchema.getSchema("RUN::config")); @@ -95,34 +95,28 @@ protected void writeEvent(Object event) throws EventWriterException { int evno = runConfig.getInt("event",0); if (unix > 0 && evno > 0) eventUnix.put(evno, unix); } + occupancyEvents++; for (int i=0; i Date: Thu, 13 Aug 2026 15:58:10 -0400 Subject: [PATCH 14/46] cleanup --- .../java/org/jlab/io/clara/Clas12Writer.java | 29 +++++++++++-------- .../detector/calib/utils/OccupancyTable.java | 4 +-- .../org/jlab/clas/reco/OccupancyEngine.java | 2 +- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java b/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java index 2d35ae9873..f654383330 100644 --- a/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java +++ b/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java @@ -85,28 +85,33 @@ protected HipoWriterSorted createWriter(Path file, JSONObject opts) throws Event } } - @Override - protected void writeEvent(Object event) throws EventWriterException { - scalers.add((Event)event); - ((Event)event).read(runConfig); - ((Event)event).read(helicityAdc); - if (runConfig.getRows() > 0) { - int unix = runConfig.getInt("unixtime",0); - int evno = runConfig.getInt("event",0); - if (unix > 0 && evno > 0) eventUnix.put(evno, unix); - } + private void processOccupancy(Event event) { occupancyEvents++; for (int i=0; i 0) { + int unix = runConfig.getInt("unixtime",0); + int evno = runConfig.getInt("event",0); + if (unix > 0 && evno > 0) eventUnix.put(evno, unix); + } + processOccupancy((Event)event); helicities.add(HelicityState.createFromFadcBank(helicityAdc, runConfig, conman)); Event t = CLASDecoder4.createTaggedEvent((Event)event, runConfig, tag1banks); if (!t.isEmpty()) writer.addEvent(t, 1); diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java index 0fd2d27844..c8739077d6 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java @@ -140,7 +140,7 @@ public final DataBank create(DataEvent event, String bank) { * @param events * @param b */ - public final void update(int events, Bank b) { + public final void create(int events, Bank b) { b.setRows(getRows()); int row = 0; for (long hash : ((Map)table.getList().getMap()).keySet()) { @@ -159,7 +159,7 @@ public final void update(int events, Bank b) { * @param events number of events that have been added * @return */ - public final IndexedTable getOccupancy(int events) { + public final IndexedTable create(int events) { IndexedTable t = new IndexedTable(indexNames.length, new String[]{"occ/F"}); for (long hash : ((Map)table.getList().getMap()).keySet()) { t.addEntry(IndexedTable.DEFAULT_GENERATOR.getIndices(hash, indexNames.length)); diff --git a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/OccupancyEngine.java b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/OccupancyEngine.java index ebce35d6a2..3fcb49450e 100644 --- a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/OccupancyEngine.java +++ b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/OccupancyEngine.java @@ -13,7 +13,7 @@ public class OccupancyEngine extends ReconstructionEngine { String[] banks = {"DC::occ"}; public OccupancyEngine() { - super("OccE", "baltzell", "0.1"); + super("Occupancy", "baltzell", "0.1"); } @Override From 74eb33f31cfecce7d19eeea1fbb31e2f18207134 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Thu, 13 Aug 2026 16:02:08 -0400 Subject: [PATCH 15/46] go long --- .../src/main/java/org/jlab/io/clara/Clas12Writer.java | 3 ++- .../java/org/jlab/detector/calib/utils/OccupancyTable.java | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java b/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java index f654383330..66afab0b01 100644 --- a/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java +++ b/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java @@ -36,7 +36,7 @@ public class Clas12Writer extends HipoToHipoWriter { static final String[] TAG1BANKS = {"RUN::scaler","HEL::scaler","RAW::scaler","RAW::epics","HEL::flip","COAT::config"}; - int occupancyEvents; + long occupancyEvents; OccupancyTable[] occupancyTables; Bank[] occupancyBanks; Bank[] tag1banks; @@ -89,6 +89,7 @@ private void processOccupancy(Event event) { occupancyEvents++; for (int i=0; i)table.getList().getMap()).keySet()) { @@ -159,7 +159,7 @@ public final void create(int events, Bank b) { * @param events number of events that have been added * @return */ - public final IndexedTable create(int events) { + public final IndexedTable create(long events) { IndexedTable t = new IndexedTable(indexNames.length, new String[]{"occ/F"}); for (long hash : ((Map)table.getList().getMap()).keySet()) { t.addEntry(IndexedTable.DEFAULT_GENERATOR.getIndices(hash, indexNames.length)); From 9d34200aeaf8895b1693490f50a29d21bf5551a8 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Thu, 13 Aug 2026 16:12:27 -0400 Subject: [PATCH 16/46] cleanup --- .../java/org/jlab/io/clara/Clas12Writer.java | 3 +- .../detector/calib/utils/OccupancyTable.java | 51 ++++++++++--------- .../org/jlab/clas/reco/OccupancyEngine.java | 3 +- 3 files changed, 30 insertions(+), 27 deletions(-) diff --git a/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java b/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java index 66afab0b01..cead1b0607 100644 --- a/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java +++ b/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java @@ -86,13 +86,12 @@ protected HipoWriterSorted createWriter(Path file, JSONObject opts) throws Event } private void processOccupancy(Event event) { - occupancyEvents++; for (int i=0; i)table.getList().getMap()).keySet()) { t.addEntry(IndexedTable.DEFAULT_GENERATOR.getIndices(hash, indexNames.length)); t.setDoubleValueByHash((table.getDoubleValueByHash(0, hash))/events, 0, hash); diff --git a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/OccupancyEngine.java b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/OccupancyEngine.java index 3fcb49450e..1dab369dc1 100644 --- a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/OccupancyEngine.java +++ b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/OccupancyEngine.java @@ -18,9 +18,8 @@ public OccupancyEngine() { @Override public boolean processDataEventUser(DataEvent event) { - for (int i=0; i Date: Thu, 13 Aug 2026 17:19:54 -0400 Subject: [PATCH 17/46] cleanup --- .../java/org/jlab/io/clara/Clas12Writer.java | 41 ++-- .../detector/calib/utils/OccupancyTable.java | 176 ++++++++++-------- .../org/jlab/clas/reco/OccupancyEngine.java | 35 ---- 3 files changed, 117 insertions(+), 135 deletions(-) delete mode 100644 common-tools/clas-reco/src/main/java/org/jlab/clas/reco/OccupancyEngine.java diff --git a/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java b/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java index cead1b0607..dc0b8fc3a4 100644 --- a/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java +++ b/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java @@ -38,7 +38,6 @@ public class Clas12Writer extends HipoToHipoWriter { long occupancyEvents; OccupancyTable[] occupancyTables; - Bank[] occupancyBanks; Bank[] tag1banks; Bank runConfig; Bank helicityAdc; @@ -46,17 +45,17 @@ public class Clas12Writer extends HipoToHipoWriter { TreeMap eventUnix; TreeSet helicities; DaqScalersSequence scalers; - SchemaFactory fullSchema; + SchemaFactory schema; boolean postprocess; private void init(JSONObject opts) { occupancyEvents = 0; - fullSchema = new SchemaFactory(); - fullSchema.initFromDirectory(FileUtils.getEnvironmentPath("CLAS12DIR","etc/bankdefs/hipo4")); - runConfig = new Bank(fullSchema.getSchema("RUN::config")); - helicityAdc = new Bank(fullSchema.getSchema("HEL::adc")); + schema = new SchemaFactory(); + schema.initFromDirectory(FileUtils.getEnvironmentPath("CLAS12DIR","etc/bankdefs/hipo4")); + runConfig = new Bank(schema.getSchema("RUN::config")); + helicityAdc = new Bank(schema.getSchema("HEL::adc")); helicities = new TreeSet<>(); - scalers = new DaqScalersSequence(fullSchema); + scalers = new DaqScalersSequence(schema); conman = new ConstantsManager(); eventUnix = new TreeMap<>(); conman.init("/runcontrol/hwp","/runcontrol/helicity"); @@ -65,11 +64,8 @@ private void init(JSONObject opts) { if (opts.has("timestamp")) conman.setTimeStamp(opts.getString("timestamp")); tag1banks = new Bank[TAG1BANKS.length]; for (int i=0; i 0) event.write(b); + t.reset(); } occupancyEvents = 0; } @@ -120,7 +113,7 @@ protected void writeEvent(Object event) throws EventWriterException { @Override protected void closeWriter() { - HelicitySequence.writeFlips(fullSchema, writer, helicities); + HelicitySequence.writeFlips(schema, writer, helicities); writer.addEvent(getUnixEvent(runConfig),1); super.closeWriter(); if (postprocess) postprocess(); @@ -153,7 +146,7 @@ private int getRunNumber() { * @return */ private Event getUnixEvent(Bank config) { - Bank unix = new Bank(fullSchema.getSchema("RUN::unix")); + Bank unix = new Bank(schema.getSchema("RUN::unix")); unix.setRows(eventUnix.size()); int row = 0; for (int evno : eventUnix.keySet()) { @@ -174,7 +167,7 @@ private void postprocess() { int d = conman.getConstants(getRunNumber(), "/runcontrol/helicity").getIntValue("delay",0,0,0); HelicitySequenceDelayed helicity = new HelicitySequenceDelayed(d); helicity.addStream(helicities); - Processor p = new Processor(List.of(filename), fullSchema, helicity, scalers); + Processor p = new Processor(List.of(filename), schema, helicity, scalers); HipoReader r = new HipoReader(); r.open(filename); Event e = new Event(); diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java index bbd5e6339d..a87b5152b7 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java @@ -4,41 +4,76 @@ import org.jlab.io.base.DataBank; import org.jlab.io.base.DataEvent; import org.jlab.jnp.hipo4.data.Bank; +import org.jlab.jnp.hipo4.data.Event; +import org.jlab.jnp.hipo4.data.SchemaFactory; import org.jlab.utils.groups.IndexedTable; import org.jlab.utils.groups.IndexedTable.IndexedEntry; -public abstract class OccupancyTable { +public class OccupancyTable { - public static class DC extends OccupancyTable { - public DC() { super(); } - /*public void fill(DataEvent e) { - DataBank b = e.getBank("DC::tot"); - if (b == null) b = e.getBank("DC::tdc"); - if (b == null) return; - final int rows = b.rows(); - for (int i=0; i)table.getList().getMap()).keySet()) { + t.addEntry(IndexedTable.DEFAULT_GENERATOR.getIndices(hash, indices.length)); + t.setDoubleValueByHash((table.getDoubleValueByHash(0, hash))/events, 0, hash); + } + return t; } /** @@ -64,113 +99,102 @@ public final void fill(int... index) { } /** - * + * Fill occupancy table from a bank. * @param bank * @param weighted */ - public void fill(DataBank bank, boolean weighted) { - final int rows = bank.rows(); - int[] indices = new int[indexNames.length]; + public void fill(Bank bank, boolean weighted) { + int rows = bank.getRows(); + int[] idx = new int[indices.length]; for (int i=0; i m = table.getList().getMap(); for (long hash : m.keySet()) { - int[] indices = IndexedTable.DEFAULT_GENERATOR.getIndices(hash, indexNames.length); - for (int j=0; j)table.getList().getMap()).keySet()) { - int[] idx = IndexedTable.DEFAULT_GENERATOR.getIndices(hash, indexNames.length); - for (int j=0; j)table.getList().getMap()).keySet()) { - t.addEntry(IndexedTable.DEFAULT_GENERATOR.getIndices(hash, indexNames.length)); - t.setDoubleValueByHash((table.getDoubleValueByHash(0, hash))/events, 0, hash); - } - return t; + return b; } } \ No newline at end of file diff --git a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/OccupancyEngine.java b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/OccupancyEngine.java deleted file mode 100644 index 1dab369dc1..0000000000 --- a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/OccupancyEngine.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.jlab.clas.reco; - -import org.jlab.detector.calib.utils.OccupancyTable; -import org.jlab.io.base.DataEvent; - -/** - * - * @author baltzell - */ -public class OccupancyEngine extends ReconstructionEngine { - - OccupancyTable[] tables = {new OccupancyTable.DC()}; - String[] banks = {"DC::occ"}; - - public OccupancyEngine() { - super("Occupancy", "baltzell", "0.1"); - } - - @Override - public boolean processDataEventUser(DataEvent event) { - for (int i=0; i Date: Thu, 13 Aug 2026 17:27:50 -0400 Subject: [PATCH 18/46] cleanup --- .../detector/calib/utils/OccupancyTable.java | 50 ++++++------------- 1 file changed, 15 insertions(+), 35 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java index a87b5152b7..e580529483 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java @@ -31,14 +31,6 @@ public OccupancyTable(SchemaFactory schema, String hits, String occupancy) { reset(); } - public Bank getHitBank() { - return hitBank; - } - - public Bank getOccupancyBank() { - return occBank; - } - /** * Reset occupancy table. */ @@ -99,7 +91,7 @@ public final void fill(int... index) { } /** - * Fill occupancy table from a bank. + * Fill occupancy table from a user-defined bank. * @param bank * @param weighted */ @@ -126,41 +118,30 @@ public void fill(Event event) { } /** - * Fill occupancy table from a bank. + * Fill occupancy table from a user-defined bank, unweighted. * @param bank - * @param weighted */ - public void fill(DataBank bank, boolean weighted) { - final int rows = bank.rows(); - int[] idx = new int[indices.length]; - for (int i=0; i m = table.getList().getMap(); @@ -170,8 +151,7 @@ public final DataBank create(DataEvent event, boolean weighted) { if (j == 2) b.setShort(j, i, (short)idx[j]); else b.setByte(j, i, (byte)idx[j]); } - if (weighted) b.setFloat(indices.length, i, m.get(hash).getValue(0).intValue()); - else b.setFloat(indices.length, i, m.get(hash).getValue(0).intValue()); + b.setFloat(indices.length, i, ((float)m.get(hash).getValue(0).intValue())/events); i++; } return b; From dae23bca61d2cd3ae8347007084569ecef92c5d9 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Thu, 13 Aug 2026 17:28:59 -0400 Subject: [PATCH 19/46] cleanup --- .../java/org/jlab/detector/calib/utils/OccupancyTable.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java index e580529483..b90cd07de6 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java @@ -13,10 +13,9 @@ public class OccupancyTable { protected Bank hitBank; protected Bank occBank; - + protected IndexedTable table; protected String[] valueNames = {"occ/F"}; protected int[] indices = {0,1,2}; - protected IndexedTable table; public OccupancyTable(SchemaFactory schema, String hits, String occupancy, int... index) { indices = index; From 159895d7b5cd7aa327026a2345c7e91e8fea1d72 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Thu, 13 Aug 2026 17:30:48 -0400 Subject: [PATCH 20/46] cleanup --- .../java/org/jlab/detector/calib/utils/OccupancyTable.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java index b90cd07de6..8c2e32dc2d 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java @@ -157,12 +157,12 @@ public final DataBank create(long events, DataEvent event) { } /** - * Modify the user-provided occupancy bank with normalized occupancies. + * Create an occupancy bank. * @param events * @return */ public Bank create(long events) { - Bank b = new Bank(occBank.getSchema()); + Bank b = new Bank(occBank.getSchema(), getRows()); int row = 0; for (long hash : ((Map)table.getList().getMap()).keySet()) { int[] idx = IndexedTable.DEFAULT_GENERATOR.getIndices(hash, indices.length); From 70637be12a0bab6079d186c728a3dc619efe1184 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Thu, 13 Aug 2026 17:40:03 -0400 Subject: [PATCH 21/46] doc --- .../java/org/jlab/detector/calib/utils/OccupancyTable.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java index 8c2e32dc2d..43d135a297 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java @@ -9,6 +9,11 @@ import org.jlab.utils.groups.IndexedTable; import org.jlab.utils.groups.IndexedTable.IndexedEntry; +/** + * Occupancy bookkeeper with I/O helpers assuming "indexed" banks. + * + * @author baltzell + */ public class OccupancyTable { protected Bank hitBank; From ea2149b77cfffcba5a4d88248fcf67792e118b3d Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Fri, 14 Aug 2026 10:45:31 -0400 Subject: [PATCH 22/46] cleanup --- .../java/org/jlab/io/clara/Clas12Writer.java | 30 +++++-------------- .../detector/calib/utils/OccupancyTable.java | 26 +++++++++++++++- 2 files changed, 33 insertions(+), 23 deletions(-) diff --git a/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java b/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java index dc0b8fc3a4..43d716b1bb 100644 --- a/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java +++ b/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java @@ -36,8 +36,6 @@ public class Clas12Writer extends HipoToHipoWriter { static final String[] TAG1BANKS = {"RUN::scaler","HEL::scaler","RAW::scaler","RAW::epics","HEL::flip","COAT::config"}; - long occupancyEvents; - OccupancyTable[] occupancyTables; Bank[] tag1banks; Bank runConfig; Bank helicityAdc; @@ -46,10 +44,10 @@ public class Clas12Writer extends HipoToHipoWriter { TreeSet helicities; DaqScalersSequence scalers; SchemaFactory schema; + OccupancyTable.Processor occupancy; boolean postprocess; private void init(JSONObject opts) { - occupancyEvents = 0; schema = new SchemaFactory(); schema.initFromDirectory(FileUtils.getEnvironmentPath("CLAS12DIR","etc/bankdefs/hipo4")); runConfig = new Bank(schema.getSchema("RUN::config")); @@ -65,7 +63,7 @@ private void init(JSONObject opts) { tag1banks = new Bank[TAG1BANKS.length]; for (int i=0; i 0) event.write(b); - t.reset(); - } - occupancyEvents = 0; - } - } - @Override protected void writeEvent(Object event) throws EventWriterException { - scalers.add((Event)event); - ((Event)event).read(runConfig); - ((Event)event).read(helicityAdc); + Event e = (Event)event; + scalers.add(e); + e.read(runConfig); + e.read(helicityAdc); if (runConfig.getRows() > 0) { int unix = runConfig.getInt("unixtime",0); int evno = runConfig.getInt("event",0); if (unix > 0 && evno > 0) eventUnix.put(evno, unix); } - processOccupancy((Event)event); + occupancy.process(e); helicities.add(HelicityState.createFromFadcBank(helicityAdc, runConfig, conman)); - Event t = CLASDecoder4.createTaggedEvent((Event)event, runConfig, tag1banks); + Event t = CLASDecoder4.createTaggedEvent(e, runConfig, tag1banks); if (!t.isEmpty()) writer.addEvent(t, 1); super.writeEvent(event); } diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java index 43d135a297..d65abec617 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java @@ -10,7 +10,7 @@ import org.jlab.utils.groups.IndexedTable.IndexedEntry; /** - * Occupancy bookkeeper with I/O helpers assuming "indexed" banks. + * Occupancy bookkeeper based on IndexedTable with I/O helpers for indexed banks. * * @author baltzell */ @@ -181,4 +181,28 @@ public Bank create(long events) { return b; } + + public static final class Processor { + int events=0,prescale; + OccupancyTable[] tables; + public Processor(SchemaFactory schema, int prescale) { + this.prescale = prescale; + tables = new OccupancyTable[]{ + new OccupancyTable(schema,"DC::tot","DC::occ") + }; + } + public void process(Event event) { + for (OccupancyTable t : tables) + t.fill(event); + if (events++ % prescale == 0) { + for (OccupancyTable t : tables) { + Bank b = t.create(events); + if (b.getRows() > 0) event.write(b); + t.reset(); + } + events = 0; + } + } + } + } \ No newline at end of file From bbb7f77111311afd4b223895df21f76bf27fb598 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Fri, 14 Aug 2026 10:49:25 -0400 Subject: [PATCH 23/46] rename --- .../src/main/java/org/jlab/io/clara/Clas12Writer.java | 6 +++--- .../java/org/jlab/detector/calib/utils/OccupancyTable.java | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java b/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java index 43d716b1bb..95549fbc51 100644 --- a/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java +++ b/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java @@ -8,7 +8,7 @@ import org.jlab.analysis.postprocess.Processor; import org.jlab.clara.std.services.EventWriterException; import org.jlab.detector.calib.utils.ConstantsManager; -import org.jlab.detector.calib.utils.OccupancyTable; +import org.jlab.detector.calib.utils.OccupancyTable.OccupancyProcessor; import org.jlab.detector.decode.CLASDecoder4; import org.jlab.detector.helicity.HelicitySequence; import org.jlab.detector.helicity.HelicitySequenceDelayed; @@ -44,7 +44,7 @@ public class Clas12Writer extends HipoToHipoWriter { TreeSet helicities; DaqScalersSequence scalers; SchemaFactory schema; - OccupancyTable.Processor occupancy; + OccupancyProcessor occupancy; boolean postprocess; private void init(JSONObject opts) { @@ -63,7 +63,7 @@ private void init(JSONObject opts) { tag1banks = new Bank[TAG1BANKS.length]; for (int i=0; i Date: Fri, 14 Aug 2026 10:50:13 -0400 Subject: [PATCH 24/46] cleanup --- .../main/java/org/jlab/detector/calib/utils/OccupancyTable.java | 1 - 1 file changed, 1 deletion(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java index 29bfeb132e..f513607cd4 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java @@ -181,7 +181,6 @@ public Bank create(long events) { return b; } - public static final class OccupancyProcessor { int events=0,prescale; OccupancyTable[] tables; From f4e304df30b4b6dcb2bc067d5c97cab75de86845 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Fri, 14 Aug 2026 12:44:13 -0400 Subject: [PATCH 25/46] add more detectors --- .../java/org/jlab/detector/calib/utils/OccupancyTable.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java index f513607cd4..a4893fe8f5 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java @@ -187,7 +187,11 @@ public static final class OccupancyProcessor { public OccupancyProcessor(SchemaFactory schema, int prescale) { this.prescale = prescale; tables = new OccupancyTable[]{ - new OccupancyTable(schema,"DC::tot","DC::occ") + new OccupancyTable(schema,"DC::tot","DC::occ"), + new OccupancyTable(schema,"ECAL::adc","ECAL::adc:occ"), + new OccupancyTable(schema,"ECAL::tdc","ECAL::tdc:occ"), + new OccupancyTable(schema,"FTOF::adc","FTOF::adc:occ"), + new OccupancyTable(schema,"FTOF::tdc","FTOF::tdc:occ"), }; } public void process(Event event) { From d97c024d2dc066b8a26df3e21355d59cefa593d1 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Fri, 14 Aug 2026 16:42:33 -0400 Subject: [PATCH 26/46] update --- .../java/org/jlab/io/clara/Clas12Writer.java | 4 - ...ccupancyTable.java => OccupanceTable.java} | 67 ++++-- .../org/jlab/clas/reco/EngineProcessor.java | 9 +- etc/bankdefs/hipo4/occupancy.json | 208 +++++++++++++++++- etc/services/rgd-clarode.yml | 2 + reconstruction/calib/pom.xml | 5 + .../calibration/service/OccupanceEngine.java | 33 +++ 7 files changed, 301 insertions(+), 27 deletions(-) rename common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/{OccupancyTable.java => OccupanceTable.java} (69%) create mode 100644 reconstruction/calib/src/main/java/org/jlab/calibration/service/OccupanceEngine.java diff --git a/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java b/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java index 95549fbc51..ef9942b2a9 100644 --- a/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java +++ b/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java @@ -8,7 +8,6 @@ import org.jlab.analysis.postprocess.Processor; import org.jlab.clara.std.services.EventWriterException; import org.jlab.detector.calib.utils.ConstantsManager; -import org.jlab.detector.calib.utils.OccupancyTable.OccupancyProcessor; import org.jlab.detector.decode.CLASDecoder4; import org.jlab.detector.helicity.HelicitySequence; import org.jlab.detector.helicity.HelicitySequenceDelayed; @@ -44,7 +43,6 @@ public class Clas12Writer extends HipoToHipoWriter { TreeSet helicities; DaqScalersSequence scalers; SchemaFactory schema; - OccupancyProcessor occupancy; boolean postprocess; private void init(JSONObject opts) { @@ -63,7 +61,6 @@ private void init(JSONObject opts) { tag1banks = new Bank[TAG1BANKS.length]; for (int i=0; i 0 && evno > 0) eventUnix.put(evno, unix); } - occupancy.process(e); helicities.add(HelicityState.createFromFadcBank(helicityAdc, runConfig, conman)); Event t = CLASDecoder4.createTaggedEvent(e, runConfig, tag1banks); if (!t.isEmpty()) writer.addEvent(t, 1); diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java similarity index 69% rename from common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java rename to common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java index a4893fe8f5..23450eced5 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupancyTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java @@ -14,7 +14,7 @@ * * @author baltzell */ -public class OccupancyTable { +public class OccupanceTable { protected Bank hitBank; protected Bank occBank; @@ -22,14 +22,14 @@ public class OccupancyTable { protected String[] valueNames = {"occ/F"}; protected int[] indices = {0,1,2}; - public OccupancyTable(SchemaFactory schema, String hits, String occupancy, int... index) { + public OccupanceTable(SchemaFactory schema, String hits, String occupancy, int... index) { indices = index; hitBank = schema.getBank(hits); occBank = schema.getBank(occupancy); reset(); } - public OccupancyTable(SchemaFactory schema, String hits, String occupancy) { + public OccupanceTable(SchemaFactory schema, String hits, String occupancy) { hitBank = schema.getBank(hits); occBank = schema.getBank(occupancy); reset(); @@ -139,6 +139,14 @@ public void fill(DataBank bank) { } } + /** + * Fill occupancy table from the hit bank, unweighted. + * @param event + */ + public void fill(DataEvent event) { + fill(event.getBank(hitBank.getSchema().getName())); + } + /** * Create an occupancy bank. * @param events @@ -181,31 +189,56 @@ public Bank create(long events) { return b; } - public static final class OccupancyProcessor { + public static final class OccupanceDriver { int events=0,prescale; - OccupancyTable[] tables; - public OccupancyProcessor(SchemaFactory schema, int prescale) { + OccupanceTable[] tables; + public OccupanceDriver(SchemaFactory schema, int prescale) { this.prescale = prescale; - tables = new OccupancyTable[]{ - new OccupancyTable(schema,"DC::tot","DC::occ"), - new OccupancyTable(schema,"ECAL::adc","ECAL::adc:occ"), - new OccupancyTable(schema,"ECAL::tdc","ECAL::tdc:occ"), - new OccupancyTable(schema,"FTOF::adc","FTOF::adc:occ"), - new OccupancyTable(schema,"FTOF::tdc","FTOF::tdc:occ"), + tables = new OccupanceTable[]{ + new OccupanceTable(schema,"DC::tot","DC::occ"), + new OccupanceTable(schema,"ECAL::adc","ECAL::aocc"), + new OccupanceTable(schema,"ECAL::tdc","ECAL::tocc"), + new OccupanceTable(schema,"FTOF::adc","FTOF::aocc"), + new OccupanceTable(schema,"FTOF::tdc","FTOF::tocc"), + new OccupanceTable(schema,"CTOF::adc","CTOF::aocc"), + new OccupanceTable(schema,"CTOF::tdc","CTOF::tocc"), + new OccupanceTable(schema,"HTCC::adc","HTCC::aocc"), + new OccupanceTable(schema,"HTCC::tdc","HTCC::tocc"), + new OccupanceTable(schema,"LTCC::adc","LTCC::aocc"), + new OccupanceTable(schema,"LTCC::tdc","LTCC::tocc"), + new OccupanceTable(schema,"SVT::adc","SVT::occ"), + new OccupanceTable(schema,"BMT::adc","BMT::occ"), + new OccupanceTable(schema,"FTC::adc","FTC::occ"), + new OccupanceTable(schema,"FTH::adc","FTH::occ"), + new OccupanceTable(schema,"FTT::adc","FTT::occ"), + new OccupanceTable(schema,"RICH::tdc","RICH::occ"), + new OccupanceTable(schema,"BAND::tdc","BAND::occ"), }; } public void process(Event event) { - for (OccupancyTable t : tables) - t.fill(event); + for (OccupanceTable t : tables) t.fill(event); if (events++ % prescale == 0) { - for (OccupancyTable t : tables) { - Bank b = t.create(events); - if (b.getRows() > 0) event.write(b); + for (OccupanceTable t : tables) { + if (t.getRows() > 0) event.write(t.create(events)); t.reset(); } events = 0; } } + public void process(DataEvent event) { + for (OccupanceTable t : tables) t.fill(event); + if (events++ % prescale == 0) { + for (OccupanceTable t : tables) { + if (t.getRows() > 0) event.appendBank(t.create(events, event)); + t.reset(); + } + events = 0; + } + } + public void reset() { + for (OccupanceTable t : tables) t.reset(); + events = 0; + } } } \ No newline at end of file diff --git a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/EngineProcessor.java b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/EngineProcessor.java index 5f17e9b6d4..3d4923fea6 100644 --- a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/EngineProcessor.java +++ b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/EngineProcessor.java @@ -115,7 +115,7 @@ public void initDefault(){ String[] names = new String[]{ "MAGFIELDS", "DCCR","DCHB","FTOFHB","EC","HTCC","EBHB", - "DCTB","FTOFTB","EBTB","VTX" + "DCTB","FTOFTB","EBTB","OCC" }; String[] services = new String[]{ @@ -129,7 +129,7 @@ public void initDefault(){ "org.jlab.service.dc.DCTBEngine", "org.jlab.service.ftof.FTOFTBEngine", "org.jlab.service.eb.EBTBEngine", - "org.jlab.rec.service.vtx.VTXEngine" + "org.jlab.calibration.service.OccupanceEngine", }; for(int i = 0; i < names.length; i++){ @@ -145,7 +145,7 @@ public void initAll(){ "CVTFP","CTOF","CND","BAND", "HTCC","LTCC","EBHB", "DCTB","FMT","FTOFTB","CVT","EBTB", - "RICHEB","RTPC","AHDC","ATOF","ALERT", "MC","VTX" + "RICHEB","RTPC","AHDC","ATOF","ALERT", "MC","VTX","OCC" }; String[] services = new String[]{ @@ -178,7 +178,8 @@ public void initAll(){ "org.jlab.service.atof.ATOFEngine", "org.jlab.service.alert.ALERTEngine", "org.jlab.service.mc.TruthMatch", - "org.jlab.rec.service.vtx.VTXEngine" + "org.jlab.rec.service.vtx.VTXEngine", + "org.jlab.calibration.service.OccupanceEngine", }; if(names.length!=services.length) LOGGER.log(Level.SEVERE, "initAll : the list of services does not match the list of service names... "); diff --git a/etc/bankdefs/hipo4/occupancy.json b/etc/bankdefs/hipo4/occupancy.json index c89164248d..b446e57b69 100644 --- a/etc/bankdefs/hipo4/occupancy.json +++ b/etc/bankdefs/hipo4/occupancy.json @@ -1,9 +1,213 @@ [ { "name": "DC::occ", - "group": 20600, + "group": 500, + "item": 10, + "info": "Occupancy Bank", + "entries": [ + { "name":"sector" , "type":"B", "info":"sector"}, + { "name":"layer" , "type":"B", "info":"layer"}, + { "name":"component" , "type":"S", "info":"component"}, + { "name":"hits" , "type":"F", "info":"number of hits"} + ] + }, + { + "name": "ECAL::tocc", + "group": 500, + "item": 11, + "info": "Occupancy Bank", + "entries": [ + { "name":"sector" , "type":"B", "info":"sector"}, + { "name":"layer" , "type":"B", "info":"layer"}, + { "name":"component" , "type":"S", "info":"component"}, + { "name":"hits" , "type":"F", "info":"number of hits"} + ] + }, + { + "name": "ECAL::aocc", + "group": 500, + "item": 12, + "info": "Occupancy Bank", + "entries": [ + { "name":"sector" , "type":"B", "info":"sector"}, + { "name":"layer" , "type":"B", "info":"layer"}, + { "name":"component" , "type":"S", "info":"component"}, + { "name":"hits" , "type":"F", "info":"number of hits"} + ] + }, + { + "name": "FTOF:tocc", + "group": 500, + "item": 13, + "info": "Occupancy Bank", + "entries": [ + { "name":"sector" , "type":"B", "info":"sector"}, + { "name":"layer" , "type":"B", "info":"layer"}, + { "name":"component" , "type":"S", "info":"component"}, + { "name":"hits" , "type":"F", "info":"number of hits"} + ] + }, + { + "name": "FTOF::aocc", + "group": 500, + "item": 14, + "info": "Occupancy Bank", + "entries": [ + { "name":"sector" , "type":"B", "info":"sector"}, + { "name":"layer" , "type":"B", "info":"layer"}, + { "name":"component" , "type":"S", "info":"component"}, + { "name":"hits" , "type":"F", "info":"number of hits"} + ] + }, + { + "name": "CTOF::tocc", + "group": 500, + "item": 15, + "info": "Occupancy Bank", + "entries": [ + { "name":"sector" , "type":"B", "info":"sector"}, + { "name":"layer" , "type":"B", "info":"layer"}, + { "name":"component" , "type":"S", "info":"component"}, + { "name":"hits" , "type":"F", "info":"number of hits"} + ] + }, + { + "name": "CTOF::aocc", + "group": 500, + "item": 16, + "info": "Occupancy Bank", + "entries": [ + { "name":"sector" , "type":"B", "info":"sector"}, + { "name":"layer" , "type":"B", "info":"layer"}, + { "name":"component" , "type":"S", "info":"component"}, + { "name":"hits" , "type":"F", "info":"number of hits"} + ] + }, + { + "name": "HTCC::aocc", + "group": 500, + "item": 17, + "info": "Occupancy Bank", + "entries": [ + { "name":"sector" , "type":"B", "info":"sector"}, + { "name":"layer" , "type":"B", "info":"layer"}, + { "name":"component" , "type":"S", "info":"component"}, + { "name":"hits" , "type":"F", "info":"number of hits"} + ] + }, + { + "name": "HTCC::tocc", + "group": 500, + "item": 18, + "info": "Occupancy Bank", + "entries": [ + { "name":"sector" , "type":"B", "info":"sector"}, + { "name":"layer" , "type":"B", "info":"layer"}, + { "name":"component" , "type":"S", "info":"component"}, + { "name":"hits" , "type":"F", "info":"number of hits"} + ] + }, + { + "name": "LTCC::aocc", + "group": 500, + "item": 19, + "info": "Occupancy Bank", + "entries": [ + { "name":"sector" , "type":"B", "info":"sector"}, + { "name":"layer" , "type":"B", "info":"layer"}, + { "name":"component" , "type":"S", "info":"component"}, + { "name":"hits" , "type":"F", "info":"number of hits"} + ] + }, + { + "name": "LTCC::tocc", + "group": 500, "item": 20, - "info": "Event Header Bank", + "info": "Occupancy Bank", + "entries": [ + { "name":"sector" , "type":"B", "info":"sector"}, + { "name":"layer" , "type":"B", "info":"layer"}, + { "name":"component" , "type":"S", "info":"component"}, + { "name":"hits" , "type":"F", "info":"number of hits"} + ] + }, + { + "name": "SVT::occ", + "group": 500, + "item": 21, + "info": "Occupancy Bank", + "entries": [ + { "name":"sector" , "type":"B", "info":"sector"}, + { "name":"layer" , "type":"B", "info":"layer"}, + { "name":"component" , "type":"S", "info":"component"}, + { "name":"hits" , "type":"F", "info":"number of hits"} + ] + }, + { + "name": "BMT::occ", + "group": 500, + "item": 22, + "info": "Occupancy Bank", + "entries": [ + { "name":"sector" , "type":"B", "info":"sector"}, + { "name":"layer" , "type":"B", "info":"layer"}, + { "name":"component" , "type":"S", "info":"component"}, + { "name":"hits" , "type":"F", "info":"number of hits"} + ] + }, + { + "name": "FTC::occ", + "group": 500, + "item": 23, + "info": "Occupancy Bank", + "entries": [ + { "name":"sector" , "type":"B", "info":"sector"}, + { "name":"layer" , "type":"B", "info":"layer"}, + { "name":"component" , "type":"S", "info":"component"}, + { "name":"hits" , "type":"F", "info":"number of hits"} + ] + }, + { + "name": "FTH::occ", + "group": 500, + "item": 24, + "info": "Occupancy Bank", + "entries": [ + { "name":"sector" , "type":"B", "info":"sector"}, + { "name":"layer" , "type":"B", "info":"layer"}, + { "name":"component" , "type":"S", "info":"component"}, + { "name":"hits" , "type":"F", "info":"number of hits"} + ] + }, + { + "name": "FTT::occ", + "group": 500, + "item": 25, + "info": "Occupancy Bank", + "entries": [ + { "name":"sector" , "type":"B", "info":"sector"}, + { "name":"layer" , "type":"B", "info":"layer"}, + { "name":"component" , "type":"S", "info":"component"}, + { "name":"hits" , "type":"F", "info":"number of hits"} + ] + }, + { + "name": "RICH::occ", + "group": 500, + "item": 26, + "info": "Occupancy Bank", + "entries": [ + { "name":"sector" , "type":"B", "info":"sector"}, + { "name":"layer" , "type":"B", "info":"layer"}, + { "name":"component" , "type":"S", "info":"component"}, + { "name":"hits" , "type":"F", "info":"number of hits"} + ] + }, + { + "name": "BAND::occ", + "group": 500, + "item": 27, + "info": "Occupancy Bank", "entries": [ { "name":"sector" , "type":"B", "info":"sector"}, { "name":"layer" , "type":"B", "info":"layer"}, diff --git a/etc/services/rgd-clarode.yml b/etc/services/rgd-clarode.yml index e46daddc7e..f8147c4532 100644 --- a/etc/services/rgd-clarode.yml +++ b/etc/services/rgd-clarode.yml @@ -83,3 +83,5 @@ services: name: VTX - class: org.jlab.calibration.service.CalibBanksEngine name: CALIB + - class: org.jlab.calibration.service.OccupanceEngine + name: OCC diff --git a/reconstruction/calib/pom.xml b/reconstruction/calib/pom.xml index 77bb856b5f..21ccc45e20 100644 --- a/reconstruction/calib/pom.xml +++ b/reconstruction/calib/pom.xml @@ -34,6 +34,11 @@ clas-reco 14.1.3-SNAPSHOT + + + org.jlab.jnp + jnp-hipo4 + diff --git a/reconstruction/calib/src/main/java/org/jlab/calibration/service/OccupanceEngine.java b/reconstruction/calib/src/main/java/org/jlab/calibration/service/OccupanceEngine.java new file mode 100644 index 0000000000..30e59a264c --- /dev/null +++ b/reconstruction/calib/src/main/java/org/jlab/calibration/service/OccupanceEngine.java @@ -0,0 +1,33 @@ +package org.jlab.calibration.service; + +import org.jlab.io.base.DataEvent; +import org.jlab.clas.reco.ReconstructionEngine; +import org.jlab.detector.calib.utils.OccupanceTable.OccupanceDriver; + +public class OccupanceEngine extends ReconstructionEngine { + + OccupanceDriver occupancy; + + public OccupanceEngine() { + super("Occupance", "baltzell","0.1"); + } + + @Override + public boolean processDataEventUser(DataEvent event) { + occupancy.process(event); + return true; + } + + @Override + public boolean init() { + occupancy = new OccupanceDriver(getSchemaFactory(), + Integer.parseInt(getEngineConfigString("occPrescale","1000"))); + return true; + } + + @Override + public void detectorChanged(int runNumber) { + occupancy.reset(); + } + +} From 02f00e78496839ea80d071dc02d3573e2f8dc898 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Fri, 14 Aug 2026 16:45:41 -0400 Subject: [PATCH 27/46] revert unrelated changes --- .../java/org/jlab/io/clara/Clas12Writer.java | 29 +++++++++---------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java b/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java index ef9942b2a9..a094b939cd 100644 --- a/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java +++ b/common-tools/clara-io/src/main/java/org/jlab/io/clara/Clas12Writer.java @@ -42,16 +42,16 @@ public class Clas12Writer extends HipoToHipoWriter { TreeMap eventUnix; TreeSet helicities; DaqScalersSequence scalers; - SchemaFactory schema; + SchemaFactory fullSchema; boolean postprocess; private void init(JSONObject opts) { - schema = new SchemaFactory(); - schema.initFromDirectory(FileUtils.getEnvironmentPath("CLAS12DIR","etc/bankdefs/hipo4")); - runConfig = new Bank(schema.getSchema("RUN::config")); - helicityAdc = new Bank(schema.getSchema("HEL::adc")); + fullSchema = new SchemaFactory(); + fullSchema.initFromDirectory(FileUtils.getEnvironmentPath("CLAS12DIR","etc/bankdefs/hipo4")); + runConfig = new Bank(fullSchema.getSchema("RUN::config")); + helicityAdc = new Bank(fullSchema.getSchema("HEL::adc")); helicities = new TreeSet<>(); - scalers = new DaqScalersSequence(schema); + scalers = new DaqScalersSequence(fullSchema); conman = new ConstantsManager(); eventUnix = new TreeMap<>(); conman.init("/runcontrol/hwp","/runcontrol/helicity"); @@ -60,7 +60,7 @@ private void init(JSONObject opts) { if (opts.has("timestamp")) conman.setTimeStamp(opts.getString("timestamp")); tag1banks = new Bank[TAG1BANKS.length]; for (int i=0; i 0) { int unix = runConfig.getInt("unixtime",0); int evno = runConfig.getInt("event",0); if (unix > 0 && evno > 0) eventUnix.put(evno, unix); } helicities.add(HelicityState.createFromFadcBank(helicityAdc, runConfig, conman)); - Event t = CLASDecoder4.createTaggedEvent(e, runConfig, tag1banks); + Event t = CLASDecoder4.createTaggedEvent((Event)event, runConfig, tag1banks); if (!t.isEmpty()) writer.addEvent(t, 1); super.writeEvent(event); } @Override protected void closeWriter() { - HelicitySequence.writeFlips(schema, writer, helicities); + HelicitySequence.writeFlips(fullSchema, writer, helicities); writer.addEvent(getUnixEvent(runConfig),1); super.closeWriter(); if (postprocess) postprocess(); @@ -128,7 +127,7 @@ private int getRunNumber() { * @return */ private Event getUnixEvent(Bank config) { - Bank unix = new Bank(schema.getSchema("RUN::unix")); + Bank unix = new Bank(fullSchema.getSchema("RUN::unix")); unix.setRows(eventUnix.size()); int row = 0; for (int evno : eventUnix.keySet()) { @@ -149,7 +148,7 @@ private void postprocess() { int d = conman.getConstants(getRunNumber(), "/runcontrol/helicity").getIntValue("delay",0,0,0); HelicitySequenceDelayed helicity = new HelicitySequenceDelayed(d); helicity.addStream(helicities); - Processor p = new Processor(List.of(filename), schema, helicity, scalers); + Processor p = new Processor(List.of(filename), fullSchema, helicity, scalers); HipoReader r = new HipoReader(); r.open(filename); Event e = new Event(); From f1c6c9eb9f226e995906b75d7c42fcc57662fb32 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Fri, 14 Aug 2026 17:14:26 -0400 Subject: [PATCH 28/46] add occupancy banks to dst (all) schema --- etc/bankdefs/util/bankSplit.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/etc/bankdefs/util/bankSplit.py b/etc/bankdefs/util/bankSplit.py index 52b134174c..591ebad0fd 100755 --- a/etc/bankdefs/util/bankSplit.py +++ b/etc/bankdefs/util/bankSplit.py @@ -1,8 +1,9 @@ #!/usr/bin/env python -import json -import sys import os +import sys +import json +import glob # print usage if len(sys.argv)<2: @@ -54,6 +55,9 @@ def create(dirname, banklist): print("Single json files saved in " + workdirectory + singledirectory) +# occupancy banks: +occ = [os.path.basename(x)[:-5] for x in glob.glob('./singles/occupancy/*.json')] + # these should *always* be kept: mc = ["MC::Event", "MC::GenMatch", "MC::Header", "MC::Lund", "MC::Particle", "MC::RecMatch", "MC::True"] tag1 = ["RUN::config", "RAW::epics", "RAW::scaler", "RUN::scaler", "HEL::scaler", "COAT::config", "HEL::flip", "HEL::online", "HEL::decoder"] @@ -83,7 +87,7 @@ def create(dirname, banklist): trig = ["RAW::vtp","HTCC::rec","ECAL::adc","ECAL::calib","ECAL::clusters","ECAL::hits","ECAL::moments","ECAL::peaks","ECAL::tdc","ECAL::trigger"] # accumulate all the DST banks: -dst = rectbai + rectb + mc + tag1 + dets +dst = rectbai + rectb + mc + tag1 + occ + dets dsthb = dst + rechbai + rechb # generate the calib and mon schema: @@ -112,8 +116,6 @@ def create(dirname, banklist): level3 = list(dst) level3.extend(["DC::tdc", "DC::tot", "ECAL::adc", "ECAL::clusters", "FTOF::tdc", "FTOF::adc", "HitBasedTrkg::HBClusters", "HitBasedTrkg::HBTracks", "HTCC::adc", "RF::adc", "RF::tdc", "RUN::rf", "TimeBasedTrkg::TBClusters", "TimeBasedTrkg::TBTracks"]) -import glob - rgl = glob.glob('./singles/full/ALERT*.json') rgl.extend(glob.glob('./singles/full/AHDC*.json')) rgl.extend(glob.glob('./singles/full/ATOF*.json')) From 2917aeb5680a38dc6a8d8943f7ff34338e0f1480 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Fri, 14 Aug 2026 17:33:24 -0400 Subject: [PATCH 29/46] debug --- .../java/org/jlab/detector/calib/utils/OccupanceTable.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java index 23450eced5..8347f8a663 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java @@ -78,6 +78,9 @@ public final IndexedTable getOccupancy(long events) { * @param index */ public final void fill(float weight, int... index) { + System.err.println(index[0]); + System.err.println(index[1]); + System.err.println(index[2]); final long hash = IndexedTable.DEFAULT_GENERATOR.hashCode(index); if (!table.hasEntryByHash(hash)) { table.addEntry(index); @@ -154,6 +157,7 @@ public void fill(DataEvent event) { * @return */ public final DataBank create(long events, DataEvent event) { + System.err.println(occBank.getSchema().getName()); DataBank b = event.createBank(occBank.getSchema().getName(), getRows()); int i = 0; Map m = table.getList().getMap(); From a1f84856081faeeab1d392c7861b451b50edfdfe Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Fri, 14 Aug 2026 18:03:42 -0400 Subject: [PATCH 30/46] fix bank name --- etc/bankdefs/hipo4/occupancy.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etc/bankdefs/hipo4/occupancy.json b/etc/bankdefs/hipo4/occupancy.json index b446e57b69..66cc4ba045 100644 --- a/etc/bankdefs/hipo4/occupancy.json +++ b/etc/bankdefs/hipo4/occupancy.json @@ -36,7 +36,7 @@ ] }, { - "name": "FTOF:tocc", + "name": "FTOF::tocc", "group": 500, "item": 13, "info": "Occupancy Bank", From 8a64ea75746fefb55a4bc1bb2d049067b5c84482 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Fri, 14 Aug 2026 18:04:18 -0400 Subject: [PATCH 31/46] remove printouts --- .../java/org/jlab/detector/calib/utils/OccupanceTable.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java index 8347f8a663..23450eced5 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java @@ -78,9 +78,6 @@ public final IndexedTable getOccupancy(long events) { * @param index */ public final void fill(float weight, int... index) { - System.err.println(index[0]); - System.err.println(index[1]); - System.err.println(index[2]); final long hash = IndexedTable.DEFAULT_GENERATOR.hashCode(index); if (!table.hasEntryByHash(hash)) { table.addEntry(index); @@ -157,7 +154,6 @@ public void fill(DataEvent event) { * @return */ public final DataBank create(long events, DataEvent event) { - System.err.println(occBank.getSchema().getName()); DataBank b = event.createBank(occBank.getSchema().getName(), getRows()); int i = 0; Map m = table.getList().getMap(); From 3590fad303a1d47087963644c0c77c4f5b3d3109 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Fri, 14 Aug 2026 18:32:45 -0400 Subject: [PATCH 32/46] debug --- .../java/org/jlab/detector/calib/utils/OccupanceTable.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java index 23450eced5..8347f8a663 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java @@ -78,6 +78,9 @@ public final IndexedTable getOccupancy(long events) { * @param index */ public final void fill(float weight, int... index) { + System.err.println(index[0]); + System.err.println(index[1]); + System.err.println(index[2]); final long hash = IndexedTable.DEFAULT_GENERATOR.hashCode(index); if (!table.hasEntryByHash(hash)) { table.addEntry(index); @@ -154,6 +157,7 @@ public void fill(DataEvent event) { * @return */ public final DataBank create(long events, DataEvent event) { + System.err.println(occBank.getSchema().getName()); DataBank b = event.createBank(occBank.getSchema().getName(), getRows()); int i = 0; Map m = table.getList().getMap(); From 35d4abb076f9c039368bbf368864f1eb6b4f289f Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Fri, 14 Aug 2026 18:39:26 -0400 Subject: [PATCH 33/46] ignore negative indices (BMT?) --- .../java/org/jlab/detector/calib/utils/OccupanceTable.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java index 8347f8a663..64f9becc8f 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java @@ -78,9 +78,9 @@ public final IndexedTable getOccupancy(long events) { * @param index */ public final void fill(float weight, int... index) { - System.err.println(index[0]); - System.err.println(index[1]); - System.err.println(index[2]); + for (int i=0; i m = table.getList().getMap(); From c7eedef4b2feda8feaa5b47089a9f37e7172ae1b Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Fri, 14 Aug 2026 18:44:33 -0400 Subject: [PATCH 34/46] cleanup --- .../java/org/jlab/detector/calib/utils/OccupanceTable.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java index 64f9becc8f..8fcb0fe2e3 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java @@ -78,9 +78,8 @@ public final IndexedTable getOccupancy(long events) { * @param index */ public final void fill(float weight, int... index) { - for (int i=0; i Date: Fri, 14 Aug 2026 21:19:38 -0400 Subject: [PATCH 35/46] add column-index accessors --- .../org/jlab/detector/banks/FilteredBank.java | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/banks/FilteredBank.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/banks/FilteredBank.java index 436d49fedb..99b9171e7d 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/banks/FilteredBank.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/banks/FilteredBank.java @@ -135,6 +135,51 @@ public float getFloat(String varName, int index ){ return bank.getFloat(varName, indexList.get(index)); } + /** + * @param column + * @param index filtered index to retrieve + * @return value for the filtered index + */ + public int getByte(int column, int index ){ + return bank.getByte(column, indexList.get(index)); + } + + /** + * @param column + * @param index filtered index to retrieve + * @return value for the filtered index + */ + public int getShort(int column, int index ){ + return bank.getShort(column, indexList.get(index)); + } + + /** + * @param column + * @param index filtered index to retrieve + * @return value for the filtered index + */ + public int getInt(int column, int index ){ + return bank.getInt(column, indexList.get(index)); + } + + /** + * @param column + * @param index filtered index to retrieve + * @return value for the filtered index + */ + public long getLong(int column, int index ){ + return bank.getLong(column, indexList.get(index)); + } + + /** + * @param column + * @param index filtered index to retrieve + * @return value for the filtered index + */ + public float getFloat(int column , int index ){ + return bank.getFloat(column, indexList.get(index)); + } + /** * @param index filtered index to retrieve * @return true bank row index corresponding to the filtered index From d3e6186a2fa949618d785ba706454247b12eeea1 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Fri, 14 Aug 2026 21:26:53 -0400 Subject: [PATCH 36/46] extension class too --- .../org/jlab/detector/banks/RawDataBank.java | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/banks/RawDataBank.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/banks/RawDataBank.java index 2d4cbb5c97..b4b5e844cd 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/banks/RawDataBank.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/banks/RawDataBank.java @@ -98,6 +98,51 @@ public float getFloat(String varName, int index ){ return dataBank.getFloat(varName, indexList.get(index)); } + /** + * @param index filtered index to retrieve + * @return value for the filtered index + */ + @Override + public int getByte(int column, int index ){ + return dataBank.getByte(column, indexList.get(index)); + } + + /** + * @param index filtered index to retrieve + * @return value for the filtered index + */ + @Override + public int getShort(int column, int index ){ + return dataBank.getShort(column, indexList.get(index)); + } + + /** + * @param index filtered index to retrieve + * @return value for the filtered index + */ + @Override + public int getInt(int column, int index ){ + return dataBank.getInt(column, indexList.get(index)); + } + + /** + * @param index filtered index to retrieve + * @return value for the filtered index + */ + @Override + public long getLong(int column, int index ){ + return dataBank.getLong(column, indexList.get(index)); + } + + /** + * @param index filtered index to retrieve + * @return value for the filtered index + */ + @Override + public float getFloat(int column, int index ){ + return dataBank.getFloat(column, indexList.get(index)); + } + public static void main(String[] args){ RawDataBank ftof = new RawDataBank("FTOF::adc"); From e6651bd21e5009d98990ec8fa2f57a673f3b17c5 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Sun, 16 Aug 2026 15:53:07 -0400 Subject: [PATCH 37/46] fix counter, add DC::tdc --- .../detector/calib/utils/OccupanceTable.java | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java index 8fcb0fe2e3..cbfd96af4a 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java @@ -198,6 +198,7 @@ public OccupanceDriver(SchemaFactory schema, int prescale) { this.prescale = prescale; tables = new OccupanceTable[]{ new OccupanceTable(schema,"DC::tot","DC::occ"), + new OccupanceTable(schema,"DC::tdc","DC::occ"), new OccupanceTable(schema,"ECAL::adc","ECAL::aocc"), new OccupanceTable(schema,"ECAL::tdc","ECAL::tocc"), new OccupanceTable(schema,"FTOF::adc","FTOF::aocc"), @@ -217,11 +218,10 @@ public OccupanceDriver(SchemaFactory schema, int prescale) { new OccupanceTable(schema,"BAND::tdc","BAND::occ"), }; } - public void process(Event event) { - for (OccupanceTable t : tables) t.fill(event); - if (events++ % prescale == 0) { + synchronized public void write(DataEvent event) { + if (++events % prescale == 0) { for (OccupanceTable t : tables) { - if (t.getRows() > 0) event.write(t.create(events)); + if (t.getRows() > 0) event.appendBank(t.create(events, event)); t.reset(); } events = 0; @@ -229,13 +229,7 @@ public void process(Event event) { } public void process(DataEvent event) { for (OccupanceTable t : tables) t.fill(event); - if (events++ % prescale == 0) { - for (OccupanceTable t : tables) { - if (t.getRows() > 0) event.appendBank(t.create(events, event)); - t.reset(); - } - events = 0; - } + write(event); } public void reset() { for (OccupanceTable t : tables) t.reset(); From 12f09ec273a866205f82995abb11af48517caeb9 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Sun, 16 Aug 2026 15:53:33 -0400 Subject: [PATCH 38/46] change default occupancy prescale to 100 --- .../java/org/jlab/calibration/service/OccupanceEngine.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reconstruction/calib/src/main/java/org/jlab/calibration/service/OccupanceEngine.java b/reconstruction/calib/src/main/java/org/jlab/calibration/service/OccupanceEngine.java index 30e59a264c..a936181eea 100644 --- a/reconstruction/calib/src/main/java/org/jlab/calibration/service/OccupanceEngine.java +++ b/reconstruction/calib/src/main/java/org/jlab/calibration/service/OccupanceEngine.java @@ -21,7 +21,7 @@ public boolean processDataEventUser(DataEvent event) { @Override public boolean init() { occupancy = new OccupanceDriver(getSchemaFactory(), - Integer.parseInt(getEngineConfigString("occPrescale","1000"))); + Integer.parseInt(getEngineConfigString("prescale","100"))); return true; } @@ -29,5 +29,5 @@ public boolean init() { public void detectorChanged(int runNumber) { occupancy.reset(); } - + } From 38751535ecf16452a393639b51ac2f95f2bf1b6c Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Sun, 16 Aug 2026 17:56:31 -0400 Subject: [PATCH 39/46] cleanup --- .../detector/calib/utils/OccupanceTable.java | 123 +++++++----------- .../calibration/service/OccupanceEngine.java | 2 +- 2 files changed, 51 insertions(+), 74 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java index cbfd96af4a..f7ca692c12 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java @@ -10,76 +10,56 @@ import org.jlab.utils.groups.IndexedTable.IndexedEntry; /** - * Occupancy bookkeeper based on IndexedTable with I/O helpers for indexed banks. + * Occupancy bookkeeper based on IndexedTable, with I/O helpers for indexed banks. * * @author baltzell */ public class OccupanceTable { - protected Bank hitBank; - protected Bank occBank; - protected IndexedTable table; - protected String[] valueNames = {"occ/F"}; - protected int[] indices = {0,1,2}; + IndexedTable table; + Bank hitBank; + Bank occBank; - public OccupanceTable(SchemaFactory schema, String hits, String occupancy, int... index) { - indices = index; + public OccupanceTable(SchemaFactory schema, String hits, String occupancy) { hitBank = schema.getBank(hits); occBank = schema.getBank(occupancy); - reset(); + table = new IndexedTable(3, new String[]{"occ/F"}); } - public OccupanceTable(SchemaFactory schema, String hits, String occupancy) { + public OccupanceTable(SchemaFactory schema, String hits, String occupancy, int indexCount) { hitBank = schema.getBank(hits); occBank = schema.getBank(occupancy); - reset(); + table = new IndexedTable(indexCount, new String[]{"occ/F"}); } /** - * Reset occupancy table. + * Reset the occupancy table. */ public final void reset() { - table = new IndexedTable(indices.length, valueNames); - } - - /** - * Get number of rows for the occupancy table/bank. - * @return rows - */ - public final int getRows() { - return table.getRowCount(); + table = new IndexedTable(table.getList().getIndexSize(), new String[]{"occ/F"}); } /** - * Get the raw occupancy table. - * @return - */ - public final IndexedTable getOccupancy() { - return table; - } - - /** - * Get the normalized occupancy table. + * Get the occupancy table, normalized by number of events. * @param events * @return */ public final IndexedTable getOccupancy(long events) { - IndexedTable t = new IndexedTable(indices.length, valueNames); + IndexedTable t = new IndexedTable(table.getList().getIndexSize(), new String[]{"occ/F"}); for (long hash : ((Map)table.getList().getMap()).keySet()) { - t.addEntry(IndexedTable.DEFAULT_GENERATOR.getIndices(hash, indices.length)); + t.addEntry(IndexedTable.DEFAULT_GENERATOR.getIndices(hash, table.getList().getIndexSize())); t.setDoubleValueByHash((table.getDoubleValueByHash(0, hash))/events, 0, hash); } return t; } /** - * Fill occupancy table with a weight. + * Fill the occupancy table. * @param weight * @param index */ public final void fill(float weight, int... index) { - for (int i=0; i m = table.getList().getMap(); for (long hash : m.keySet()) { - int[] idx = IndexedTable.DEFAULT_GENERATOR.getIndices(hash, indices.length); - for (int j=0; j)table.getList().getMap()).keySet()) { - int[] idx = IndexedTable.DEFAULT_GENERATOR.getIndices(hash, indices.length); - for (int j=0; j 0) event.appendBank(t.create(events, event)); + if (t.table.getRowCount() > 0) event.appendBank(t.create(events, event)); t.reset(); } events = 0; diff --git a/reconstruction/calib/src/main/java/org/jlab/calibration/service/OccupanceEngine.java b/reconstruction/calib/src/main/java/org/jlab/calibration/service/OccupanceEngine.java index a936181eea..63cec499d5 100644 --- a/reconstruction/calib/src/main/java/org/jlab/calibration/service/OccupanceEngine.java +++ b/reconstruction/calib/src/main/java/org/jlab/calibration/service/OccupanceEngine.java @@ -30,4 +30,4 @@ public void detectorChanged(int runNumber) { occupancy.reset(); } -} +} \ No newline at end of file From e214f89cfcf4558fed8c3ee9a4c9c0d88a12e505 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Sun, 16 Aug 2026 18:13:16 -0400 Subject: [PATCH 40/46] cleanup --- .../detector/calib/utils/OccupanceTable.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java index f7ca692c12..6b6bec88e1 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java @@ -63,7 +63,7 @@ public final void fill(float weight, int... index) { final long hash = IndexedTable.DEFAULT_GENERATOR.hashCode(index); if (!table.hasEntryByHash(hash)) { table.addEntry(index); - table.setIntValueByHash(0, 0, hash); + table.setDoubleValueByHash(0.0d, 0, hash); } table.setDoubleValueByHash(table.getDoubleValueByHash(0, hash) + weight, 0, hash); } @@ -146,7 +146,7 @@ public final DataBank create(long events, DataEvent event) { } /** - * Get an occupancy bank normalized by number of events. + * Get an occupancy bank, normalized by number of events. * @param events * @return */ @@ -195,15 +195,6 @@ public OccupanceDriver(SchemaFactory schema, int prescale) { new OccupanceTable(schema,"BAND::tdc","BAND::occ"), }; } - synchronized public void write(DataEvent event) { - if (++events % prescale == 0) { - for (OccupanceTable t : tables) { - if (t.table.getRowCount() > 0) event.appendBank(t.create(events, event)); - t.reset(); - } - events = 0; - } - } public void process(DataEvent event) { for (OccupanceTable t : tables) t.fill(event); write(event); @@ -212,6 +203,15 @@ public void reset() { for (OccupanceTable t : tables) t.reset(); events = 0; } + synchronized void write(DataEvent event) { + if (++events % prescale == 0) { + for (OccupanceTable t : tables) { + if (t.table.getRowCount() > 0) event.appendBank(t.create(events, event)); + t.reset(); + } + events = 0; + } + } } } \ No newline at end of file From 400beba7a1d6201b6847c6c7321e0a268eaeaebd Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 17 Aug 2026 10:13:58 -0400 Subject: [PATCH 41/46] rename occupancy banks --- .../detector/calib/utils/OccupanceTable.java | 47 ++++++++------- etc/bankdefs/hipo4/occupancy.json | 60 +++++++++++++------ 2 files changed, 66 insertions(+), 41 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java index 6b6bec88e1..1388b91e63 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java @@ -20,15 +20,15 @@ public class OccupanceTable { Bank hitBank; Bank occBank; - public OccupanceTable(SchemaFactory schema, String hits, String occupancy) { + public OccupanceTable(SchemaFactory schema, String hits) { hitBank = schema.getBank(hits); - occBank = schema.getBank(occupancy); + occBank = schema.getBank("OCC::"+hits); table = new IndexedTable(3, new String[]{"occ/F"}); } - public OccupanceTable(SchemaFactory schema, String hits, String occupancy, int indexCount) { + public OccupanceTable(SchemaFactory schema, String hits, int indexCount) { hitBank = schema.getBank(hits); - occBank = schema.getBank(occupancy); + occBank = schema.getBank("OCC::"+hits); table = new IndexedTable(indexCount, new String[]{"occ/F"}); } @@ -174,25 +174,26 @@ public static final class OccupanceDriver { public OccupanceDriver(SchemaFactory schema, int prescale) { this.prescale = prescale; tables = new OccupanceTable[]{ - new OccupanceTable(schema,"DC::tot","DC::occ"), - new OccupanceTable(schema,"DC::tdc","DC::occ"), - new OccupanceTable(schema,"ECAL::adc","ECAL::aocc"), - new OccupanceTable(schema,"ECAL::tdc","ECAL::tocc"), - new OccupanceTable(schema,"FTOF::adc","FTOF::aocc"), - new OccupanceTable(schema,"FTOF::tdc","FTOF::tocc"), - new OccupanceTable(schema,"CTOF::adc","CTOF::aocc"), - new OccupanceTable(schema,"CTOF::tdc","CTOF::tocc"), - new OccupanceTable(schema,"HTCC::adc","HTCC::aocc"), - new OccupanceTable(schema,"HTCC::tdc","HTCC::tocc"), - new OccupanceTable(schema,"LTCC::adc","LTCC::aocc"), - new OccupanceTable(schema,"LTCC::tdc","LTCC::tocc"), - new OccupanceTable(schema,"SVT::adc","SVT::occ"), - new OccupanceTable(schema,"BMT::adc","BMT::occ"), - new OccupanceTable(schema,"FTC::adc","FTC::occ"), - new OccupanceTable(schema,"FTH::adc","FTH::occ"), - new OccupanceTable(schema,"FTT::adc","FTT::occ"), - new OccupanceTable(schema,"RICH::tdc","RICH::occ"), - new OccupanceTable(schema,"BAND::tdc","BAND::occ"), + new OccupanceTable(schema,"DC::tot"), + new OccupanceTable(schema,"DC::tdc"), + new OccupanceTable(schema,"ECAL::adc"), + new OccupanceTable(schema,"ECAL::tdc"), + new OccupanceTable(schema,"FTOF::adc"), + new OccupanceTable(schema,"FTOF::tdc"), + new OccupanceTable(schema,"CTOF::adc"), + new OccupanceTable(schema,"CTOF::tdc"), + new OccupanceTable(schema,"HTCC::adc"), + new OccupanceTable(schema,"HTCC::tdc"), + new OccupanceTable(schema,"LTCC::adc"), + new OccupanceTable(schema,"LTCC::tdc"), + new OccupanceTable(schema,"SVT::adc"), + new OccupanceTable(schema,"BMT::adc"), + new OccupanceTable(schema,"FTC::adc"), + new OccupanceTable(schema,"FTH::adc"), + new OccupanceTable(schema,"FTT::adc"), + new OccupanceTable(schema,"RICH::tdc"), + new OccupanceTable(schema,"BAND::adc"), + new OccupanceTable(schema,"BAND::tdc"), }; } public void process(DataEvent event) { diff --git a/etc/bankdefs/hipo4/occupancy.json b/etc/bankdefs/hipo4/occupancy.json index 66cc4ba045..94b40cfe8c 100644 --- a/etc/bankdefs/hipo4/occupancy.json +++ b/etc/bankdefs/hipo4/occupancy.json @@ -1,6 +1,6 @@ [ { - "name": "DC::occ", + "name": "OCC::DC::tdc", "group": 500, "item": 10, "info": "Occupancy Bank", @@ -12,7 +12,7 @@ ] }, { - "name": "ECAL::tocc", + "name": "OCC::DC::tot", "group": 500, "item": 11, "info": "Occupancy Bank", @@ -24,7 +24,7 @@ ] }, { - "name": "ECAL::aocc", + "name": "OCC::ECAL::adc", "group": 500, "item": 12, "info": "Occupancy Bank", @@ -36,7 +36,7 @@ ] }, { - "name": "FTOF::tocc", + "name": "OCC::ECAL::tdc", "group": 500, "item": 13, "info": "Occupancy Bank", @@ -48,7 +48,7 @@ ] }, { - "name": "FTOF::aocc", + "name": "OCC::FTOF::adc", "group": 500, "item": 14, "info": "Occupancy Bank", @@ -60,7 +60,7 @@ ] }, { - "name": "CTOF::tocc", + "name": "OCC::FTOF::tdc", "group": 500, "item": 15, "info": "Occupancy Bank", @@ -72,7 +72,7 @@ ] }, { - "name": "CTOF::aocc", + "name": "OCC::CTOF::adc", "group": 500, "item": 16, "info": "Occupancy Bank", @@ -84,7 +84,7 @@ ] }, { - "name": "HTCC::aocc", + "name": "OCC::CTOF::tdc", "group": 500, "item": 17, "info": "Occupancy Bank", @@ -96,7 +96,7 @@ ] }, { - "name": "HTCC::tocc", + "name": "OCC::HTCC::adc", "group": 500, "item": 18, "info": "Occupancy Bank", @@ -108,7 +108,7 @@ ] }, { - "name": "LTCC::aocc", + "name": "OCC::HTCC::tdc", "group": 500, "item": 19, "info": "Occupancy Bank", @@ -120,7 +120,7 @@ ] }, { - "name": "LTCC::tocc", + "name": "OCC::LTCC::adc", "group": 500, "item": 20, "info": "Occupancy Bank", @@ -132,7 +132,7 @@ ] }, { - "name": "SVT::occ", + "name": "OCC::LTCC::tdc", "group": 500, "item": 21, "info": "Occupancy Bank", @@ -144,7 +144,7 @@ ] }, { - "name": "BMT::occ", + "name": "OCC::BST::adc", "group": 500, "item": 22, "info": "Occupancy Bank", @@ -156,7 +156,7 @@ ] }, { - "name": "FTC::occ", + "name": "OCC::BMT::adc", "group": 500, "item": 23, "info": "Occupancy Bank", @@ -168,7 +168,7 @@ ] }, { - "name": "FTH::occ", + "name": "OCC::FTC::adc", "group": 500, "item": 24, "info": "Occupancy Bank", @@ -180,7 +180,7 @@ ] }, { - "name": "FTT::occ", + "name": "OCC::FTH::adc", "group": 500, "item": 25, "info": "Occupancy Bank", @@ -192,7 +192,7 @@ ] }, { - "name": "RICH::occ", + "name": "OCC::FTT::adc", "group": 500, "item": 26, "info": "Occupancy Bank", @@ -204,7 +204,7 @@ ] }, { - "name": "BAND::occ", + "name": "OCC::RICH::tdc", "group": 500, "item": 27, "info": "Occupancy Bank", @@ -214,5 +214,29 @@ { "name":"component" , "type":"S", "info":"component"}, { "name":"hits" , "type":"F", "info":"number of hits"} ] + }, + { + "name": "OCC::BAND::adc", + "group": 500, + "item": 28, + "info": "Occupancy Bank", + "entries": [ + { "name":"sector" , "type":"B", "info":"sector"}, + { "name":"layer" , "type":"B", "info":"layer"}, + { "name":"component" , "type":"S", "info":"component"}, + { "name":"hits" , "type":"F", "info":"number of hits"} + ] + }, + { + "name": "OCC::BAND::tdc", + "group": 500, + "item": 29, + "info": "Occupancy Bank", + "entries": [ + { "name":"sector" , "type":"B", "info":"sector"}, + { "name":"layer" , "type":"B", "info":"layer"}, + { "name":"component" , "type":"S", "info":"component"}, + { "name":"hits" , "type":"F", "info":"number of hits"} + ] } ] From 71bc319ada689a5744ff4993712bc41c413d461f Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 17 Aug 2026 10:17:43 -0400 Subject: [PATCH 42/46] this should be final --- .../main/java/org/jlab/detector/calib/utils/OccupanceTable.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java index 1388b91e63..c67a90d558 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java @@ -150,7 +150,7 @@ public final DataBank create(long events, DataEvent event) { * @param events * @return */ - public Bank create(long events) { + public final Bank create(long events) { Bank b = new Bank(occBank.getSchema(), table.getRowCount()); int row = 0; for (long hash : ((Map)table.getList().getMap()).keySet()) { From ee9277277a5e79ba22004d436e2ac8f0b86efa38 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 17 Aug 2026 13:24:03 -0400 Subject: [PATCH 43/46] fix bank name --- .../detector/calib/utils/OccupanceTable.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java index c67a90d558..187d2ee908 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java @@ -20,12 +20,23 @@ public class OccupanceTable { Bank hitBank; Bank occBank; + /** + * A 3-index table. + * @param schema + * @param hits name of the hits bank + */ public OccupanceTable(SchemaFactory schema, String hits) { hitBank = schema.getBank(hits); occBank = schema.getBank("OCC::"+hits); table = new IndexedTable(3, new String[]{"occ/F"}); } + /** + * A N-index table. + * @param schema + * @param hits name of the hits bank + * @param indexCount number of inidices in the hits bank + */ public OccupanceTable(SchemaFactory schema, String hits, int indexCount) { hitBank = schema.getBank(hits); occBank = schema.getBank("OCC::"+hits); @@ -33,7 +44,7 @@ public OccupanceTable(SchemaFactory schema, String hits, int indexCount) { } /** - * Reset the occupancy table. + * Zero the occupancy table. */ public final void reset() { table = new IndexedTable(table.getList().getIndexSize(), new String[]{"occ/F"}); @@ -173,7 +184,7 @@ public static final class OccupanceDriver { OccupanceTable[] tables; public OccupanceDriver(SchemaFactory schema, int prescale) { this.prescale = prescale; - tables = new OccupanceTable[]{ + tables = new OccupanceTable[] { new OccupanceTable(schema,"DC::tot"), new OccupanceTable(schema,"DC::tdc"), new OccupanceTable(schema,"ECAL::adc"), @@ -186,7 +197,7 @@ public OccupanceDriver(SchemaFactory schema, int prescale) { new OccupanceTable(schema,"HTCC::tdc"), new OccupanceTable(schema,"LTCC::adc"), new OccupanceTable(schema,"LTCC::tdc"), - new OccupanceTable(schema,"SVT::adc"), + new OccupanceTable(schema,"BST::adc"), new OccupanceTable(schema,"BMT::adc"), new OccupanceTable(schema,"FTC::adc"), new OccupanceTable(schema,"FTH::adc"), From fa5ffe44bbbbef5e01fc8e0d8ab732c2ae3c5c59 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 17 Aug 2026 13:31:50 -0400 Subject: [PATCH 44/46] cleanup --- .../detector/calib/utils/OccupanceTable.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java index 187d2ee908..f854fd5bfc 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java @@ -21,25 +21,25 @@ public class OccupanceTable { Bank occBank; /** - * A 3-index table. + * A 3-index table, e.g., sector/layer/component. * @param schema - * @param hits name of the hits bank + * @param hitsBank name of the hits bank */ - public OccupanceTable(SchemaFactory schema, String hits) { - hitBank = schema.getBank(hits); - occBank = schema.getBank("OCC::"+hits); + public OccupanceTable(SchemaFactory schema, String hitsBank) { + hitBank = schema.getBank(hitsBank); + occBank = schema.getBank("OCC::"+hitsBank); table = new IndexedTable(3, new String[]{"occ/F"}); } /** - * A N-index table. + * An N-index table. * @param schema - * @param hits name of the hits bank + * @param hitsBank name of the hits bank * @param indexCount number of inidices in the hits bank */ - public OccupanceTable(SchemaFactory schema, String hits, int indexCount) { - hitBank = schema.getBank(hits); - occBank = schema.getBank("OCC::"+hits); + public OccupanceTable(SchemaFactory schema, String hitsBank, int indexCount) { + hitBank = schema.getBank(hitsBank); + occBank = schema.getBank("OCC::"+hitsBank); table = new IndexedTable(indexCount, new String[]{"occ/F"}); } From 685fa7aeaab24e58794b36d3d83324361f7edaf2 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 17 Aug 2026 18:36:58 -0400 Subject: [PATCH 45/46] use filtered banks --- .../detector/calib/utils/OccupanceTable.java | 35 +++++++++++-------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java index f854fd5bfc..ab04481870 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java @@ -1,6 +1,9 @@ package org.jlab.detector.calib.utils; import java.util.Map; +import org.jlab.detector.banks.RawBank; +import org.jlab.detector.banks.RawBank.OrderGroups; +import org.jlab.detector.banks.RawDataBank; import org.jlab.io.base.DataBank; import org.jlab.io.base.DataEvent; import org.jlab.jnp.hipo4.data.Bank; @@ -17,29 +20,32 @@ public class OccupanceTable { IndexedTable table; - Bank hitBank; + RawBank hitBank; + RawDataBank hitDataBank; Bank occBank; /** * A 3-index table, e.g., sector/layer/component. * @param schema - * @param hitsBank name of the hits bank + * @param hitBank name of the hit bank */ - public OccupanceTable(SchemaFactory schema, String hitsBank) { - hitBank = schema.getBank(hitsBank); - occBank = schema.getBank("OCC::"+hitsBank); + public OccupanceTable(SchemaFactory schema, String hitBank) { + this.hitBank = new RawBank(schema.getSchema(hitBank), 1000, OrderGroups.NOMINAL); + hitDataBank = new RawDataBank(hitBank, 1000, OrderGroups.NOMINAL); + occBank = schema.getBank("OCC::"+hitBank); table = new IndexedTable(3, new String[]{"occ/F"}); } /** * An N-index table. * @param schema - * @param hitsBank name of the hits bank - * @param indexCount number of inidices in the hits bank + * @param hitBank name of the hit bank + * @param indexCount number of inidices in the hit bank */ - public OccupanceTable(SchemaFactory schema, String hitsBank, int indexCount) { - hitBank = schema.getBank(hitsBank); - occBank = schema.getBank("OCC::"+hitsBank); + public OccupanceTable(SchemaFactory schema, String hitBank, int indexCount) { + this.hitBank = new RawBank(schema.getSchema(hitBank), 1000, OrderGroups.NOMINAL); + hitDataBank = new RawDataBank(hitBank, 1000, OrderGroups.NOMINAL); + occBank = schema.getBank("OCC::"+hitBank); table = new IndexedTable(indexCount, new String[]{"occ/F"}); } @@ -84,7 +90,7 @@ public final void fill(float weight, int... index) { * @param bank * @param weighted */ - public void fill(Bank bank, boolean weighted) { + public void fill(RawBank bank, boolean weighted) { int rows = bank.getRows(); int[] idx = new int[table.getList().getIndexSize()]; for (int i=0; i Date: Mon, 17 Aug 2026 18:42:14 -0400 Subject: [PATCH 46/46] fix bank names --- .../java/org/jlab/detector/calib/utils/OccupanceTable.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java index ab04481870..82514ea959 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/calib/utils/OccupanceTable.java @@ -206,9 +206,9 @@ public OccupanceDriver(SchemaFactory schema, int prescale) { new OccupanceTable(schema,"LTCC::tdc"), new OccupanceTable(schema,"BST::adc"), new OccupanceTable(schema,"BMT::adc"), - new OccupanceTable(schema,"FTC::adc"), - new OccupanceTable(schema,"FTH::adc"), - new OccupanceTable(schema,"FTT::adc"), + new OccupanceTable(schema,"FTCAL::adc"), + new OccupanceTable(schema,"FTHODO::adc"), + new OccupanceTable(schema,"FTTRK::adc"), new OccupanceTable(schema,"RICH::tdc"), new OccupanceTable(schema,"BAND::adc"), new OccupanceTable(schema,"BAND::tdc"),