From a37ed5801f9bbcc05fd13d5f4afb23bc5fa8257d Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Wed, 12 Aug 2026 16:48:36 -0400 Subject: [PATCH 01/12] add more helpful helper method --- .../java/org/jlab/utils/groups/IndexedList.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) 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 21b9aca355..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 @@ -334,10 +334,22 @@ public int getIndex(long hashcode, int order) { public int[] getIndices(long hashcode, int... indices) { int[] ret = new int[indices.length]; for (int i=0; i Date: Wed, 12 Aug 2026 17:00:08 -0400 Subject: [PATCH 02/12] 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/12] 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 8a9d35bb5e55d9030d464252e8b67e508616ae93 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 10 Aug 2026 21:23:51 -0400 Subject: [PATCH 04/12] 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 4111458b8791080b62dd88fd73929d47237ba6c4 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 10 Aug 2026 21:38:54 -0400 Subject: [PATCH 05/12] 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 e2e74ce93c51f5847ec2644eff519d5d6a1abda9 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Tue, 11 Aug 2026 10:03:27 -0400 Subject: [PATCH 06/12] 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 11:12:45 -0400 Subject: [PATCH 07/12] add missing method --- .../src/main/java/org/jlab/utils/groups/IndexedTable.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/common-tools/clas-utils/src/main/java/org/jlab/utils/groups/IndexedTable.java b/common-tools/clas-utils/src/main/java/org/jlab/utils/groups/IndexedTable.java index 28dcdf629d..a82bd23715 100644 --- a/common-tools/clas-utils/src/main/java/org/jlab/utils/groups/IndexedTable.java +++ b/common-tools/clas-utils/src/main/java/org/jlab/utils/groups/IndexedTable.java @@ -167,6 +167,10 @@ public void setIntValueByHash(Integer value, int column, long hash) { this.entries.getItemByHash(hash).setValue(column, value); } + public void setDoubleValueByHash(Double value, int column, long hash) { + this.entries.getItemByHash(hash).setValue(column, value); + } + public int getIntValueByHash(int index, long hash) { return entries.getItemByHash(hash).getValue(index).intValue(); } From f8bea7727fac5e6e6852041ef0db99eef7bc0a55 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Tue, 11 Aug 2026 13:48:59 -0400 Subject: [PATCH 08/12] 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 bf9ad640e11e092995a9eb4fce2383f2cdb5cdfe Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Wed, 12 Aug 2026 16:44:42 -0400 Subject: [PATCH 09/12] 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 1afbb6eb7b7e80c010f9de12dd0125d2756a9bb5 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Wed, 12 Aug 2026 17:03:56 -0400 Subject: [PATCH 10/12] 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 6716e44e8a4208b826f175d231dffb177ee9afbe Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Wed, 12 Aug 2026 19:22:52 -0400 Subject: [PATCH 11/12] 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 12/12] 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"} ] } ]