Author: [log in to unmask] Date: Sun May 17 11:36:48 2015 New Revision: 2994 Log: fixing mode-7 time Modified: java/trunk/users/src/main/java/org/hps/users/holly/EcalRawConverter.java Modified: java/trunk/users/src/main/java/org/hps/users/holly/EcalRawConverter.java ============================================================================= --- java/trunk/users/src/main/java/org/hps/users/holly/EcalRawConverter.java (original) +++ java/trunk/users/src/main/java/org/hps/users/holly/EcalRawConverter.java Sun May 17 11:36:48 2015 @@ -333,7 +333,7 @@ } // pulse time with 4ns resolution: - double pulseTime=thresholdCrossing*nsPerSample; + double pulseTime = thresholdCrossing*nsPerSample; // calculate Mode-7 high-resolution time: if (mode7) { @@ -344,6 +344,29 @@ else if (maxADC>0) { // linear interpolation between threshold crossing and // pulse maximum to find time at pulse half-height: + + final double halfMax = (maxADC+minADC)/2; + int t0 = -1; + for (int ii=thresholdCrossing+1; ii<thresholdCrossing+lastSample; ii++) + { + if (samples[ii]<=halfMax && samples[ii+1]>halfMax) + { + t0 = ii; + break; + } + } + if (t0 > 0) + { + final int t1 = t0 + 1; + final int a0 = samples[t0]; + final int a1 = samples[t1]; + final double slope = (a1 - a0); // units = ADC/sample + final double yint = a1 - slope * t1; // units = ADC + pulseTime = (halfMax - yint ) /slope * nsPerSample; // units = ns + } + + /* + // Why this NAB? double t0 = thresholdCrossing*nsPerSample; double a0 = samples[thresholdCrossing]; double t1 = sampleMaxADC*nsPerSample; @@ -355,6 +378,7 @@ if (slope>0 && tmpTime>0) { pulseTime = tmpTime; } + */ // else another special firmware case } }