From 07bfa7a1dd908b9a2012a20acbbc681430648bcd Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 2 Nov 2026 11:27:25 -0500 Subject: [PATCH 01/12] removed unused stuff --- .../detector/decode/ExtendedFADCFitter.java | 70 ++----------------- 1 file changed, 4 insertions(+), 66 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/ExtendedFADCFitter.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/ExtendedFADCFitter.java index 245c5c84d8..eb84f9b74f 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/ExtendedFADCFitter.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/ExtendedFADCFitter.java @@ -6,41 +6,16 @@ */ public class ExtendedFADCFitter implements IFADCFitter { - private int pedistalMinBin = 1; - private int pedistalMaxBin = 5; + private final int pedistalMaxBin = 5; int p1=1,p2=15; - int mmsum,summing_in_progress; public int t0,adc,ped,pedsum; public int thresholdCrossing,pulsePeakValue, pulsePeakPosition, pulseWidth; public double baseline, rms; private int tcourse, tfine; - public ExtendedFADCFitter(){ - - } - - public void fitCourseTime(int nsa, int nsb, int tet, int pedr, short[] pulse) { - pedsum=0;adc=0;mmsum=0;summing_in_progress=0; - for (int mm=0; mmp1 && mm<=p2) pedsum+=pulse[mm]; - if(mm==p2) pedsum=pedsum/(p2-p1); - if(mm>p2) { - if (pedr==0) ped=pedsum; - if (pedr!=0) ped=pedr; - if ((summing_in_progress==0) && pulse[mm]>ped+tet) { - summing_in_progress=1; - tcourse = mm; - t0 = (tcourse << 6); - for (int ii=1; ii0 && mmsum>(nsa+nsb)) summing_in_progress=-1; - if(summing_in_progress>0) {adc+=(pulse[mm]-ped); mmsum++;} - } - } - } + public ExtendedFADCFitter(){} public void fit(int nsa, int nsb, int tet, int pedr, short[] pulse) { t0=0; adc=0; ped=0; pedsum=0; baseline=0; rms=0; @@ -115,51 +90,14 @@ public void fit(int nsa, int nsb, int tet, int pedr, short[] pulse) { t0 = (tcourse << 6) + tfine; } if(s1>-1 && s0>-1) { - int a0 = pulse[s1]; - int a1 = pulse[s1+1]; pulseWidth = s1 - s0; } } } - - private double findPedestal(DetectorDataDgtz.ADCData data){ - int ped = 0; - for(int i = this.pedistalMinBin; i < this.pedistalMaxBin; i++){ - ped += data.getPulseValue(i); - } - double ped_norm = ((double) ped) / (Math.abs(this.pedistalMaxBin-this.pedistalMinBin)); - return ped_norm; - } - - private int findMaximumADC(DetectorDataDgtz.ADCData data){ - int bin = this.pedistalMaxBin ; - int max = data.getPulseValue(pedistalMaxBin); - - for(int i = this.pedistalMaxBin; i < data.getPulseSize(); i++){ - if(data.getPulseValue(i)>max){ - max = data.getPulseValue(i); - bin = i; - } - } - return bin; - } - - private int findPulseIntegral(DetectorDataDgtz.ADCData data, int maxValueBin, int nsa, int nsb){ - int min_bin = maxValueBin - nsb; - int max_bin = maxValueBin + nsa; - if(min_bin>=0&&max_binthis.pedistalMaxBin){ - double ped = this.findPedestal(data); - } + throw new UnsupportedOperationException("Not supported yet."); } - + } From 65c427947f03ba6679b72f93110d3ab07017c8ed Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 2 Nov 2026 11:30:28 -0500 Subject: [PATCH 02/12] remove deprecated method --- .../org/jlab/detector/decode/FADCData.java | 97 ------------------- 1 file changed, 97 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/FADCData.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/FADCData.java index fb3670a76a..643342474c 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/FADCData.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/FADCData.java @@ -130,103 +130,6 @@ public List getDecoded(){ return result; } - public void decode(){ - - List result = new ArrayList<>(); - - short[] bucket = new short[16]; - - //int channel; - //int minimum; - int nwords; - int nskip; - int position = 0; - int headerWord; - int pedestal ; - int compressedWord; - byte[] array = new byte[4]; - - System.out.println(desc.toString()); - System.out.println("------------------------------------------------------"); - for(int i = 0 ; i < adcBuffer.length/2; i++){ - System.out.print(String.format("%04X ", adcBuffer[i*2+1])); - System.out.print(String.format("%04X ", adcBuffer[i*2])); - if((i+1)%8==0) System.out.println(); - } - System.out.println(); - System.out.println("------------------------------------------------------"); - ByteBuffer buffer = ByteBuffer.wrap(array); - buffer.order(ByteOrder.LITTLE_ENDIAN); - - while(position> 23) & 0x0F; - nwords = (headerWord&0x07); - nskip = (dataH>>4) &0x0F; - pedestal = (headerWord>>8)&0x0FFF; - compressedWord = (headerWord>>27)&0x0F; - - position+=2; - if(compressedWord==5){ - - short value; - result.clear(); - for(int i = 0; i < 4; i++){ - value = (short) (adcBuffer[position+i]&0x000F); - - bucket[i*4] = (short) (value+pedestal); - result.add( (short) (value+pedestal)); - - value = (short) ((adcBuffer[position+i] >> 4)&0x000F); - - bucket[i*4+1] = (short) (value+pedestal); - result.add( (short) (value+pedestal)); - - value = (short) ((adcBuffer[position+i] >> 8)&0x000F); - bucket[i*4+2] = (short) (value+pedestal); - result.add( (short) (value+pedestal)); - - value = (short) ((adcBuffer[position+i] >> 12)&0x000F); - bucket[i*4+3] = (short) (value+pedestal); - result.add( (short) (value+pedestal)); - } - - position += 4; - - if(nwords>0){ - - for(int i = 0; i < nwords*2; i++){ - short first = (short) ( (adcBuffer[i+position]&0x00FF) << 4); - short second = (short) ( ((adcBuffer[i+position] >>8)&0x00FF)<<4); - if( (nskip+i*2)<=15) - bucket[nskip+i*2] += first; - if( (nskip+i*2+1)<=15) - bucket[nskip+i*2+1] += second; - } - - position += nwords*2; - } - result.clear(); - for(int k = 0 ; k < bucket.length; k++){ - result.add(bucket[k]); - } - for(int i = 0; i < result.size(); i++){ - System.out.print(String.format("%6d", result.get(i))); - } - System.out.println(); - } - } - } - public void show(){ int length = 0; if(adcBuffer!=null) length = adcBuffer.length; From 418b05ca4f77aa72fe648ed2668a40a6eb5c9d8c Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 2 Nov 2026 12:52:17 -0500 Subject: [PATCH 03/12] cleanup --- .../detector/decode/ExtendedFADCFitter.java | 24 ++-- .../org/jlab/detector/decode/IFADCFitter.java | 18 +-- .../decode/SuperExtendedFADCFitter.java | 113 ++++++++++++++++++ 3 files changed, 135 insertions(+), 20 deletions(-) create mode 100644 common-tools/clas-detector/src/main/java/org/jlab/detector/decode/SuperExtendedFADCFitter.java diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/ExtendedFADCFitter.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/ExtendedFADCFitter.java index eb84f9b74f..de0c5f1a41 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/ExtendedFADCFitter.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/ExtendedFADCFitter.java @@ -4,21 +4,17 @@ * * @author gavalian */ -public class ExtendedFADCFitter implements IFADCFitter { +public class ExtendedFADCFitter extends IFADCFitter.Peak implements IFADCFitter { private final int pedistalMaxBin = 5; - - int p1=1,p2=15; - - public int t0,adc,ped,pedsum; - public int thresholdCrossing,pulsePeakValue, pulsePeakPosition, pulseWidth; - public double baseline, rms; - private int tcourse, tfine; + private final int p1 = 1; + private final int p2 = 15; public ExtendedFADCFitter(){} - public void fit(int nsa, int nsb, int tet, int pedr, short[] pulse) { - t0=0; adc=0; ped=0; pedsum=0; baseline=0; rms=0; + @Override + public Peak fit(int nsa, int nsb, int tet, int pedr, short[] pulse) { + t0=0; adc=0; ped=0; baseline=0; rms=0; thresholdCrossing=0; pulsePeakValue=0; pulsePeakPosition=0; pulseWidth=0; tcourse=0; tfine=0; double noise = 0; @@ -28,12 +24,13 @@ public void fit(int nsa, int nsb, int tet, int pedr, short[] pulse) { int ppos = 0; // calculate pedestal means and noise if (pedr!=0) ped=pedr; // use default mode 7 pedestal range (1-4) + int pedsum = 0; if(pulse.length hits = new ArrayList<>(); + + t0=0; adc=0; ped=0; baseline=0; rms=0; tcourse=0; tfine=0; + thresholdCrossing=0; pulsePeakValue=0; pulsePeakPosition=0; pulseWidth=0; + + if (pedr != 0) { + // user-defined pedestal: + baseline = ped = pedr; + } + else { + // not enough samples, just set pedestal and abort: + int pedsum = 0; + if (pulse.length halfMax) { + + // define timing: + int a0 = pulse[halfBinUp]; + int a1 = pulse[halfBinUp+1]; + f.tcourse = halfBinUp; + f.tfine = ((int) ((halfMax - a0)/(a1-a0) * 64)); + f.t0 = (tcourse << 6) + tfine; + + // find the half-max crossing downwards: + for (int halfBinDown = halfBinUp; halfBinDown halfMax && pulse[halfBinDown+1] <= halfMax) { + f.pulseWidth = halfBinDown - halfBinUp; + break; + } + } + break; + } + } + + // add the new hit we just made: + hits.add(f); + + // move search bin forward: + crossBin = f.pulsePeakPosition; + break; + } + } + } + } + return hits.stream().toArray(Peak[]::new); + } + + @Override + public Peak fit(int nsa, int nsb, int tet, int pedr, short[] pulse) { + throw new UnsupportedOperationException("Not supported yet."); + } + +} From e10590ddf9a0fdb083f662b6f596001780b3c801 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 2 Nov 2026 15:23:48 -0500 Subject: [PATCH 04/12] do it --- .../org/jlab/detector/decode/CLASDecoder.java | 50 +++++++++++-------- .../detector/decode/DetectorEventDecoder.java | 35 ++++++++++--- .../detector/decode/ExtendedFADCFitter.java | 21 ++++---- .../org/jlab/detector/decode/IFADCFitter.java | 8 ++- .../decode/SuperExtendedFADCFitter.java | 18 +++---- 5 files changed, 75 insertions(+), 57 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/CLASDecoder.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/CLASDecoder.java index 3d32f87807..40b6977ee6 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/CLASDecoder.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/CLASDecoder.java @@ -217,30 +217,36 @@ public Bank getDataBankADC(String name, DetectorType type){ List adcDGTZ = this.getEntriesADC(type); if (adcDGTZ.isEmpty()) return null; - Bank adcBANK = new Bank(schemaFactory.getSchema(name), adcDGTZ.size()); - + Bank adcBANK = new Bank(schemaFactory.getSchema(name), + adcDGTZ.stream().mapToInt(b -> b.getADCSize()).sum()); + + int row = 0; for(int i = 0; i < adcDGTZ.size(); i++){ - adcBANK.putByte( 0, i, (byte) adcDGTZ.get(i).getDescriptor().getSector()); - adcBANK.putByte( 1, i, (byte) adcDGTZ.get(i).getDescriptor().getLayer()); - adcBANK.putShort(2, i, (short) adcDGTZ.get(i).getDescriptor().getComponent()); - adcBANK.putByte( 3, i, (byte) adcDGTZ.get(i).getDescriptor().getOrder()); - adcBANK.putInt( 4, i, adcDGTZ.get(i).getADCData(0).getADC()); - if (type == DetectorType.BMT || type == DetectorType.FMT || type == DetectorType.FTTRK) { - adcBANK.putInt( 4, i, adcDGTZ.get(i).getADCData(0).getHeight()); - adcBANK.putInt( 7, i, adcDGTZ.get(i).getADCData(0).getIntegral()); - adcBANK.putLong(8, i, adcDGTZ.get(i).getADCData(0).getTimeStamp()); - } - if(type == DetectorType.BAND) { - adcBANK.putInt( 5, i, adcDGTZ.get(i).getADCData(0).getHeight()); - adcBANK.putFloat(6, i, (float) adcDGTZ.get(i).getADCData(0).getTime()); - adcBANK.putShort(7, i, (short) adcDGTZ.get(i).getADCData(0).getPedestal()); - } - else { - adcBANK.putFloat(5, i, (float) adcDGTZ.get(i).getADCData(0).getTime()); - adcBANK.putShort(6, i, (short) adcDGTZ.get(i).getADCData(0).getPedestal()); + for (int j = 0; j transTableNames = new HashMap<>(); private final HashMap fitterTableNames = new HashMap<>(); - private final ExtendedFADCFitter extendedFitter = new ExtendedFADCFitter(); + private final SuperExtendedFADCFitter extendedFitter = new SuperExtendedFADCFitter(); private final MVTFitter mvtFitter = new MVTFitter(); private HashMap fitterTables = new HashMap<>(); @@ -219,17 +220,37 @@ private void fitPulses(DetectorDataDgtz data, IndexedTable cfg) { ADCData adc = data.getADCData(i); if(adc.getPulseSize()>0){ try { - extendedFitter.fit(nsa, nsb, tet, ped, adc.getPulseArray()); + Peak[] hits = extendedFitter.fit(nsa, nsb, tet, ped, adc.getPulseArray()); + if (hits.length > 0) { + adc.setIntegral(hits[0].adc + hits[0].ped*(nsa+nsb)); + adc.setHeight((short) hits[0].pulsePeakValue); + adc.setTimeWord(hits[0].t0); + adc.setPedestal((short) hits[0].ped); + adc.setADC(nsa, nsb); + // and extra hits get a new object here: + for (int j = 1; j < hits.length; j++) { + ADCData a = new ADCData(); + a.setTimeStamp(adc.getTimeStamp()); + a.setOrder(adc.getOrder()); + a.setIntegral(hits[j].adc + hits[j].ped*(nsa+nsb)); + a.setHeight((short) hits[j].pulsePeakValue); + a.setTimeWord(hits[j].t0); + a.setPedestal((short) hits[j].ped); + a.setADC(nsa, nsb); + data.addADC(a); + } + } + } catch (Exception e) { + e.printStackTrace(); System.err.println(">>>> error : fitting pulse "+dd.getCrate()+ " / "+dd.getSlot()+" / "+dd.getChannel()); } - adc.setIntegral(extendedFitter.adc + extendedFitter.ped*(nsa+nsb)); - adc.setHeight((short) this.extendedFitter.pulsePeakValue); - adc.setTimeWord(this.extendedFitter.t0); - adc.setPedestal((short) this.extendedFitter.ped); + //adc.setIntegral(extendedFitter.adc + extendedFitter.ped*(nsa+nsb)); + //adc.setHeight((short) this.extendedFitter.pulsePeakValue); + //adc.setTimeWord(this.extendedFitter.t0); + //adc.setPedestal((short) this.extendedFitter.ped); } - data.getADCData(i).setADC(nsa, nsb); } } diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/ExtendedFADCFitter.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/ExtendedFADCFitter.java index de0c5f1a41..40848f8231 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/ExtendedFADCFitter.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/ExtendedFADCFitter.java @@ -1,10 +1,12 @@ package org.jlab.detector.decode; +import org.jlab.detector.decode.IFADCFitter.Peak; + /** * * @author gavalian */ -public class ExtendedFADCFitter extends IFADCFitter.Peak implements IFADCFitter { +public class ExtendedFADCFitter extends Peak implements IFADCFitter { private final int pedistalMaxBin = 5; private final int p1 = 1; @@ -13,10 +15,10 @@ public class ExtendedFADCFitter extends IFADCFitter.Peak implements IFADCFitter public ExtendedFADCFitter(){} @Override - public Peak fit(int nsa, int nsb, int tet, int pedr, short[] pulse) { + public Peak[] fit(int nsa, int nsb, int tet, int pedr, short[] pulse) { t0=0; adc=0; ped=0; baseline=0; rms=0; thresholdCrossing=0; pulsePeakValue=0; pulsePeakPosition=0; pulseWidth=0; - tcourse=0; tfine=0; + tcoarse=0; tfine=0; double noise = 0; int tstart = pedistalMaxBin+1; int tcross = 0; @@ -30,7 +32,7 @@ public Peak fit(int nsa, int nsb, int tet, int pedr, short[] pulse) { pedsum += pulse[bin]; } ped=pedsum/pulse.length; - return this; + return new Peak[]{this}; } if (pedr==0) { tstart = p2+1; @@ -81,21 +83,16 @@ public Peak fit(int nsa, int nsb, int tet, int pedr, short[] pulse) { int a0 = pulse[s0]; int a1 = pulse[s0+1]; // set course time to be the sample before the 50% crossing - tcourse = s0; + tcoarse = s0; // set the fine time from interpolation between the two samples before and after the 50% crossing (6 bits resolution) tfine = ((int) ((halfMax - a0)/(a1-a0) * 64)); - t0 = (tcourse << 6) + tfine; + t0 = (tcoarse << 6) + tfine; } if(s1>-1 && s0>-1) { pulseWidth = s1 - s0; } } - return this; - } - - @Override - public Peak[] multiFit(int nsa, int nsb, int tet, int pedr, short[] pulse) { - throw new UnsupportedOperationException("Not supported yet."); + return new Peak[]{this}; } } diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/IFADCFitter.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/IFADCFitter.java index e470a011ca..fb80c2c865 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/IFADCFitter.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/IFADCFitter.java @@ -2,14 +2,12 @@ public interface IFADCFitter { - public Peak fit(int nsa, int nsb, int tet, int pedr, short[] pulse); - - public Peak[] multiFit(int nsa, int nsb, int tet, int pedr, short[] pulse); - public static class Peak { - public int t0, adc, ped, tcourse, tfine; + public int t0, adc, ped, tcoarse, tfine; public int thresholdCrossing, pulsePeakValue, pulsePeakPosition, pulseWidth; public double baseline, rms; } + public Peak[] fit(int nsa, int nsb, int tet, int pedr, short[] pulse); + } diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/SuperExtendedFADCFitter.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/SuperExtendedFADCFitter.java index efc09c8093..04e5d33732 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/SuperExtendedFADCFitter.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/SuperExtendedFADCFitter.java @@ -2,8 +2,9 @@ import java.util.ArrayList; import java.util.List; +import org.jlab.detector.decode.IFADCFitter.Peak; -public class SuperExtendedFADCFitter extends IFADCFitter.Peak implements IFADCFitter { +public class SuperExtendedFADCFitter extends Peak implements IFADCFitter { static final int PED_BIN1=1; static final int PED_BIN2=15; @@ -11,11 +12,11 @@ public class SuperExtendedFADCFitter extends IFADCFitter.Peak implements IFADCFi public SuperExtendedFADCFitter(){} @Override - public Peak[] multiFit(int nsa, int nsb, int tet, int pedr, short[] pulse) { + public Peak[] fit(int nsa, int nsb, int tet, int pedr, short[] pulse) { - List hits = new ArrayList<>(); + List hits = new ArrayList<>(3); - t0=0; adc=0; ped=0; baseline=0; rms=0; tcourse=0; tfine=0; + t0=0; adc=0; ped=0; baseline=0; rms=0; tcoarse=0; tfine=0; thresholdCrossing=0; pulsePeakValue=0; pulsePeakPosition=0; pulseWidth=0; if (pedr != 0) { @@ -77,9 +78,9 @@ else if (belowThreshold) { // define timing: int a0 = pulse[halfBinUp]; int a1 = pulse[halfBinUp+1]; - f.tcourse = halfBinUp; + f.tcoarse = halfBinUp; f.tfine = ((int) ((halfMax - a0)/(a1-a0) * 64)); - f.t0 = (tcourse << 6) + tfine; + f.t0 = (tcoarse << 6) + tfine; // find the half-max crossing downwards: for (int halfBinDown = halfBinUp; halfBinDown Date: Mon, 2 Nov 2026 15:27:40 -0500 Subject: [PATCH 05/12] cleanup --- .../java/org/jlab/detector/decode/DetectorEventDecoder.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/DetectorEventDecoder.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/DetectorEventDecoder.java index 055641ff73..d12861aa26 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/DetectorEventDecoder.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/DetectorEventDecoder.java @@ -227,7 +227,7 @@ private void fitPulses(DetectorDataDgtz data, IndexedTable cfg) { adc.setTimeWord(hits[0].t0); adc.setPedestal((short) hits[0].ped); adc.setADC(nsa, nsb); - // and extra hits get a new object here: + // extra hits get a new object here: for (int j = 1; j < hits.length; j++) { ADCData a = new ADCData(); a.setTimeStamp(adc.getTimeStamp()); @@ -246,10 +246,6 @@ private void fitPulses(DetectorDataDgtz data, IndexedTable cfg) { System.err.println(">>>> error : fitting pulse "+dd.getCrate()+ " / "+dd.getSlot()+" / "+dd.getChannel()); } - //adc.setIntegral(extendedFitter.adc + extendedFitter.ped*(nsa+nsb)); - //adc.setHeight((short) this.extendedFitter.pulsePeakValue); - //adc.setTimeWord(this.extendedFitter.t0); - //adc.setPedestal((short) this.extendedFitter.ped); } } } From 2e2504b56973b7f09a4fe6207ade356a505bba85 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 2 Nov 2026 15:40:53 -0500 Subject: [PATCH 06/12] indexing bugfix --- .../java/org/jlab/detector/decode/SuperExtendedFADCFitter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/SuperExtendedFADCFitter.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/SuperExtendedFADCFitter.java index 04e5d33732..f84987a9b7 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/SuperExtendedFADCFitter.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/SuperExtendedFADCFitter.java @@ -83,7 +83,7 @@ else if (belowThreshold) { f.t0 = (tcoarse << 6) + tfine; // find the half-max crossing downwards: - for (int halfBinDown = halfBinUp; halfBinDown halfMax && pulse[halfBinDown+1] <= halfMax) { f.pulseWidth = halfBinDown - halfBinUp; break; From 50a591730f29be913182e2d7b9d504d95f1ed32e Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 2 Nov 2026 15:50:31 -0500 Subject: [PATCH 07/12] cleanup --- .../jlab/detector/decode/SuperExtendedFADCFitter.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/SuperExtendedFADCFitter.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/SuperExtendedFADCFitter.java index f84987a9b7..44b1a817d3 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/SuperExtendedFADCFitter.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/SuperExtendedFADCFitter.java @@ -58,7 +58,7 @@ else if (belowThreshold) { for (int maxBin = crossBin; maxBin halfMax) { - // define timing: + // found half-height, now define timing: int a0 = pulse[halfBinUp]; int a1 = pulse[halfBinUp+1]; f.tcoarse = halfBinUp; @@ -97,7 +98,7 @@ else if (belowThreshold) { hits.add(f); // move search bin forward: - crossBin = f.pulsePeakPosition; + crossBin = f.pulsePeakPosition+1; break; } } From ca19f221a6b3bfd0ccbf322ae0cfcb11158db1bc Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 2 Nov 2026 15:53:44 -0500 Subject: [PATCH 08/12] fix index limit --- .../org/jlab/detector/decode/SuperExtendedFADCFitter.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/SuperExtendedFADCFitter.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/SuperExtendedFADCFitter.java index 44b1a817d3..f84efe691b 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/SuperExtendedFADCFitter.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/SuperExtendedFADCFitter.java @@ -66,14 +66,13 @@ else if (belowThreshold) { f.pulsePeakValue = pulse[maxBin-1]; // define its energy: - final int eLimit = Math.min(pulse.length, crossBin + nsa); - for (int eBin = Math.max(crossBin-nsb,0); eBin < eLimit; eBin++) + for (int eBin = Math.max(crossBin-nsb,0); eBin halfMax) { // found half-height, now define timing: From 176eeb87a004c8b3461ad388685f309099fced34 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 2 Nov 2026 17:47:05 -0500 Subject: [PATCH 09/12] cleanup --- .../org/jlab/detector/decode/DetectorEventDecoder.java | 4 ++-- .../java/org/jlab/detector/decode/ExtendedFADCFitter.java | 2 +- ...tendedFADCFitter.java => ExtendedFADCMultiFitter.java} | 6 +++--- .../src/main/java/org/jlab/detector/decode/FADCData.java | 6 ++++++ .../main/java/org/jlab/detector/decode/IFADCFitter.java | 8 ++------ 5 files changed, 14 insertions(+), 12 deletions(-) rename common-tools/clas-detector/src/main/java/org/jlab/detector/decode/{SuperExtendedFADCFitter.java => ExtendedFADCMultiFitter.java} (96%) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/DetectorEventDecoder.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/DetectorEventDecoder.java index d12861aa26..df80c73cc7 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/DetectorEventDecoder.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/DetectorEventDecoder.java @@ -12,7 +12,7 @@ import org.jlab.detector.base.DetectorType; import org.jlab.detector.calib.utils.ConstantsManager; import org.jlab.detector.decode.DetectorDataDgtz.ADCData; -import org.jlab.detector.decode.IFADCFitter.Peak; +import org.jlab.detector.decode.FADCData.Peak; import org.jlab.utils.groups.IndexedTable; /** @@ -31,7 +31,7 @@ public class DetectorEventDecoder { private final HashMap transTableNames = new HashMap<>(); private final HashMap fitterTableNames = new HashMap<>(); - private final SuperExtendedFADCFitter extendedFitter = new SuperExtendedFADCFitter(); + private final ExtendedFADCMultiFitter extendedFitter = new ExtendedFADCMultiFitter(); private final MVTFitter mvtFitter = new MVTFitter(); private HashMap fitterTables = new HashMap<>(); diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/ExtendedFADCFitter.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/ExtendedFADCFitter.java index 40848f8231..fcf44ab242 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/ExtendedFADCFitter.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/ExtendedFADCFitter.java @@ -1,6 +1,6 @@ package org.jlab.detector.decode; -import org.jlab.detector.decode.IFADCFitter.Peak; +import org.jlab.detector.decode.FADCData.Peak; /** * diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/SuperExtendedFADCFitter.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/ExtendedFADCMultiFitter.java similarity index 96% rename from common-tools/clas-detector/src/main/java/org/jlab/detector/decode/SuperExtendedFADCFitter.java rename to common-tools/clas-detector/src/main/java/org/jlab/detector/decode/ExtendedFADCMultiFitter.java index f84efe691b..2ae20968a0 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/SuperExtendedFADCFitter.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/ExtendedFADCMultiFitter.java @@ -2,14 +2,14 @@ import java.util.ArrayList; import java.util.List; -import org.jlab.detector.decode.IFADCFitter.Peak; +import org.jlab.detector.decode.FADCData.Peak; -public class SuperExtendedFADCFitter extends Peak implements IFADCFitter { +public class ExtendedFADCMultiFitter extends Peak implements IFADCFitter { static final int PED_BIN1=1; static final int PED_BIN2=15; - public SuperExtendedFADCFitter(){} + public ExtendedFADCMultiFitter(){} @Override public Peak[] fit(int nsa, int nsb, int tet, int pedr, short[] pulse) { diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/FADCData.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/FADCData.java index 643342474c..fe2df0f8b8 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/FADCData.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/FADCData.java @@ -12,6 +12,12 @@ */ public class FADCData { + public static class Peak { + public int t0, adc, ped, tcoarse, tfine; + public int thresholdCrossing, pulsePeakValue, pulsePeakPosition, pulseWidth; + public double baseline, rms; + } + private final DetectorDescriptor desc = new DetectorDescriptor(); private short[] adcBuffer = null; diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/IFADCFitter.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/IFADCFitter.java index fb80c2c865..1bbe5a69f7 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/IFADCFitter.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/IFADCFitter.java @@ -1,12 +1,8 @@ package org.jlab.detector.decode; -public interface IFADCFitter { +import org.jlab.detector.decode.FADCData.Peak; - public static class Peak { - public int t0, adc, ped, tcoarse, tfine; - public int thresholdCrossing, pulsePeakValue, pulsePeakPosition, pulseWidth; - public double baseline, rms; - } +public interface IFADCFitter { public Peak[] fit(int nsa, int nsb, int tet, int pedr, short[] pulse); From 537bea8ae746560582ab1707557356696f209bbd Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Mon, 2 Nov 2026 19:10:20 -0500 Subject: [PATCH 10/12] fix, cleanup --- .../jlab/detector/decode/ExtendedFADCFitter.java | 5 +---- .../detector/decode/ExtendedFADCMultiFitter.java | 16 ++++------------ .../java/org/jlab/detector/decode/FADCData.java | 6 +++++- 3 files changed, 10 insertions(+), 17 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/ExtendedFADCFitter.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/ExtendedFADCFitter.java index fcf44ab242..7fea41bf18 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/ExtendedFADCFitter.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/ExtendedFADCFitter.java @@ -16,9 +16,7 @@ public ExtendedFADCFitter(){} @Override public Peak[] fit(int nsa, int nsb, int tet, int pedr, short[] pulse) { - t0=0; adc=0; ped=0; baseline=0; rms=0; - thresholdCrossing=0; pulsePeakValue=0; pulsePeakPosition=0; pulseWidth=0; - tcoarse=0; tfine=0; + zero(); double noise = 0; int tstart = pedistalMaxBin+1; int tcross = 0; @@ -26,7 +24,6 @@ public Peak[] fit(int nsa, int nsb, int tet, int pedr, short[] pulse) { int ppos = 0; // calculate pedestal means and noise if (pedr!=0) ped=pedr; // use default mode 7 pedestal range (1-4) - int pedsum = 0; if(pulse.length hits = new ArrayList<>(3); + zero(); - t0=0; adc=0; ped=0; baseline=0; rms=0; tcoarse=0; tfine=0; - thresholdCrossing=0; pulsePeakValue=0; pulsePeakPosition=0; pulseWidth=0; + if (pulse.length < PED_BIN2+1) return new Peak[]{this}; if (pedr != 0) { // user-defined pedestal: baseline = ped = pedr; } else { - // not enough samples, just set pedestal and abort: - int pedsum = 0; - if (pulse.length hits = new ArrayList<>(3); for (int crossBin = PED_BIN2+1; crossBin Date: Mon, 2 Nov 2026 19:50:13 -0500 Subject: [PATCH 11/12] hmm --- .../org/jlab/detector/decode/ExtendedFADCMultiFitter.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/ExtendedFADCMultiFitter.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/ExtendedFADCMultiFitter.java index d5168be787..102a9d1df8 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/ExtendedFADCMultiFitter.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/ExtendedFADCMultiFitter.java @@ -53,7 +53,7 @@ else if (belowThreshold) { // found maximum, now make a new hit: Peak f = new Peak(); f.ped = ped; - f.thresholdCrossing = crossBin; + f.t0 = f.thresholdCrossing = f.tcoarse = crossBin; f.pulsePeakPosition = maxBin-1; f.pulsePeakValue = pulse[maxBin-1]; @@ -61,7 +61,7 @@ else if (belowThreshold) { for (int eBin = Math.max(crossBin-nsb,0); eBin Date: Mon, 2 Nov 2026 19:50:25 -0500 Subject: [PATCH 12/12] hmm --- .../java/org/jlab/detector/decode/ExtendedFADCMultiFitter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/ExtendedFADCMultiFitter.java b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/ExtendedFADCMultiFitter.java index 102a9d1df8..2a4d9dd8ec 100644 --- a/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/ExtendedFADCMultiFitter.java +++ b/common-tools/clas-detector/src/main/java/org/jlab/detector/decode/ExtendedFADCMultiFitter.java @@ -52,6 +52,7 @@ else if (belowThreshold) { // found maximum, now make a new hit: Peak f = new Peak(); + hits.add(f); f.ped = ped; f.t0 = f.thresholdCrossing = f.tcoarse = crossBin; f.pulsePeakPosition = maxBin-1; @@ -86,7 +87,6 @@ else if (belowThreshold) { } // add the new hit we just made: - hits.add(f); // move search bin forward: crossBin = f.pulsePeakPosition + 1;