Print

Print


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
             }
         }