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 100b9111dc..6806abd279 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 @@ -8,6 +8,7 @@ import java.util.Map; import java.util.stream.Collectors; import org.jlab.detector.banks.RawBank.OrderType; +import org.jlab.detector.base.DetectorDescriptor; import org.jlab.detector.base.DetectorType; import org.jlab.detector.calib.utils.ConstantsManager; import org.jlab.detector.decode.DetectorDataDgtz.ADCData; @@ -203,64 +204,61 @@ public void translate(List detectorData){ } } - public void fitPulses(List detectorData){ + private void fitPulses(DetectorDataDgtz data, IndexedTable config) { + final DetectorDescriptor desc = data.getDescriptor(); + final DetectorType type = desc.getType(); + final long hash = IndexedTable.DEFAULT_GENERATOR.hashCode( + desc.getCrate(), desc.getSlot(), desc.getChannel()); + final int nsa = config.getIntValueByHash("nsa", hash); + final int nsb = config.getIntValueByHash("nsb", hash); + final int tet = config.getIntValueByHash("tet", hash); + int ped = 0; + if (type == DetectorType.RF) { + ped = config.getIntValueByHash("pedestal", hash); + } + final int nadc = data.getADCSize(); + for (int i = 0; i < nadc; i++) { + ADCData adc = data.getADCData(i); + if(adc.getPulseSize()>0){ + try { + extendedFitter.fit(nsa, nsb, tet, ped, adc.getPulseArray()); + } catch (Exception e) { + System.err.println(">>>> error : fitting pulse "+desc.getCrate()+ + " / "+desc.getSlot()+" / "+desc.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); + } + data.getADCData(i).setADC(nsa, nsb); + } + } - for (DetectorDataDgtz data : detectorData) { + private void fitMicromegaPulses(DetectorDataDgtz data, IndexedTable config) { + final long hash0 = IndexedTable.DEFAULT_GENERATOR.hashCode(0,0,0); + final short adcOffset = (short) config.getDoubleValueByHash("adc_offset", hash0); + final double fineTimeStampResolution = (byte) config.getDoubleValueByHash("dream_clock", hash0); + final double samplingTime = (byte) config.getDoubleValueByHash("sampling_time", hash0); + final int sparseSample = config.getIntValueByHash("sparse", hash0); + ADCData adc = data.getADCData(0); + mvtFitter.fit(adcOffset, fineTimeStampResolution, samplingTime, adc.getPulseArray(), adc.getTimeStamp(), sparseSample); + adc.setHeight((short) (mvtFitter.adcMax)); + adc.setTime((int) (mvtFitter.timeMax)); + adc.setIntegral((int) (mvtFitter.integral)); + adc.setTimeStamp(mvtFitter.timestamp); + } + public void fitPulses(List detectorData){ + for (DetectorDataDgtz data : detectorData) { if (data.getADCSize() == 0) continue; - int crate = data.getDescriptor().getCrate(); - int slot = data.getDescriptor().getSlot(); - int channel = data.getDescriptor().getChannel(); - long hash = IndexedTable.DEFAULT_GENERATOR.hashCode(crate,slot,channel); - long hash0 = IndexedTable.DEFAULT_GENERATOR.hashCode(0,0,0); - boolean ismm = micromegaTypes.contains(data.getDescriptor().getType()); - - for (DetectorType type : fitterTables.keySet()) { - - IndexedTable daq = fitterTables.get(type); - //custom MM fitter - if (ismm && data.getDescriptor().getType() == type) { - short adcOffset = (short) daq.getDoubleValueByHash("adc_offset", hash0); - double fineTimeStampResolution = (byte) daq.getDoubleValueByHash("dream_clock", hash0); - double samplingTime = (byte) daq.getDoubleValueByHash("sampling_time", hash0); - int sparseSample = daq.getIntValueByHash("sparse", hash0); - ADCData adc = data.getADCData(0); - mvtFitter.fit(adcOffset, fineTimeStampResolution, samplingTime, adc.getPulseArray(), adc.getTimeStamp(), sparseSample); - adc.setHeight((short) (mvtFitter.adcMax)); - adc.setTime((int) (mvtFitter.timeMax)); - adc.setIntegral((int) (mvtFitter.integral)); - adc.setTimeStamp(mvtFitter.timestamp); - // first one wins: - break; - } - else if(daq.hasEntryByHash(hash)==true){ - int nsa = daq.getIntValueByHash("nsa", hash); - int nsb = daq.getIntValueByHash("nsb", hash); - int tet = daq.getIntValueByHash("tet", hash); - int ped = 0; - if(data.getDescriptor().getType() == DetectorType.RF && type == DetectorType.RF) { - ped = daq.getIntValueByHash("pedestal", hash); - } - for(int i = 0; i < data.getADCSize(); i++){ - ADCData adc = data.getADCData(i); - if(adc.getPulseSize()>0){ - try { - extendedFitter.fit(nsa, nsb, tet, ped, adc.getPulseArray()); - } catch (Exception e) { - System.out.println(">>>> error : fitting pulse " - + crate + " / " + slot + " / " + channel); - } - int adc_corrected = extendedFitter.adc + extendedFitter.ped*(nsa+nsb); - adc.setHeight((short) this.extendedFitter.pulsePeakValue); - adc.setIntegral(adc_corrected); - adc.setTimeWord(this.extendedFitter.t0); - adc.setPedestal((short) this.extendedFitter.ped); - } - data.getADCData(i).setADC(nsa, nsb); - } - // first one wins: - break; - } + final DetectorType type = data.getDescriptor().getType(); + final IndexedTable daqTable = fitterTables.getOrDefault(type,null); + if (daqTable != null) { + if (micromegaTypes.contains(type)) + fitMicromegaPulses(data, daqTable); + else + fitPulses(data, daqTable); } } }