Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -203,64 +204,61 @@ public void translate(List<DetectorDataDgtz> detectorData){
}
}

public void fitPulses(List<DetectorDataDgtz> 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<DetectorDataDgtz> 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);
}
}
}
Expand Down
Loading