Author: [log in to unmask]
Date: Mon Nov 23 07:16:28 2015
New Revision: 3974
Log:
resolution matching c code
Modified:
java/trunk/users/src/main/java/org/hps/users/baltzell/RfFitterDriver.java
Modified: java/trunk/users/src/main/java/org/hps/users/baltzell/RfFitterDriver.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/baltzell/RfFitterDriver.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/baltzell/RfFitterDriver.java Mon Nov 23 07:16:28 2015
@@ -64,9 +64,10 @@
foundRf=true;
times[ii] = fitPulse(hit);
if (ii==1){
+
System.out.println(times[1]-times[0]);
}
-
+
break;
}
}
@@ -93,40 +94,37 @@
double fitThresh[]={-999,-999};
double pedVal[]={-999,-999};
- //use this loop to look for bins containing the peaks (2-3 peaks)
- for (int ii=4; ii<adcSamples.length-4; ii++) {
- //after 2 peaks, stop looking for more
+ // Look for bins containing the peaks (2-3 peaks)
+ for (int ii=4; ii<adcSamples.length; ii++) {
+ // After 2 peaks, stop looking for more
if (iz==2){break;}
- //System.out.println("nsamp:\t"+ii+"\t"+adcSamples[ii]+"\tplus 1:\t"+adcSamples[ii+1]+"\tminus 1:\t"+adcSamples[ii-1]);
- if ((adcSamples[ii+1]>0) && (adcSamples[ii-1]>0) && (adcSamples[ii]>threshold) && ii>12){
- //System.out.println("Passed 1st condition!\t"+iz);
- if ((adcSamples[ii]>adcSamples[ii+1]) && (adcSamples[ii]>adcSamples[ii-1]) ){
- //System.out.println("iz:\t"+iz);
-// ||((adcSamples[ii]==adcSamples[ii+1] && adcSamples[ii]>adcSamples[ii-1]))){//not in c code
+ if ((adcSamples[ii+1]>0) && (adcSamples[ii-1]>0) && (adcSamples[ii]>threshold) && ii>8){
+ if ((adcSamples[ii]>adcSamples[ii+1]) && (adcSamples[ii]>=adcSamples[ii-1]) ){
+
peakBin[iz]=ii;
iz++;
}
}
}
+
int jj=0;
- //choose peak closest to center of window (second peak, ik=1)
+ // Choose peak closest to center of window (second peak, ik=1)
final int ik=1;
pedVal[ik] = (adcSamples[peakBin[ik]-6]+adcSamples[peakBin[ik]-7]+adcSamples[peakBin[ik]-8]+adcSamples[peakBin[ik]-9])/4.0;
fitThresh[ik]= (adcSamples[peakBin[ik]]+pedVal[ik])/3.0;
-
- //calc initial values along the way, we find/fit 3 points:
+
+ // Initial values: we find/fit 3 points:
double itime[] = {-999,-999,-999};
double ifadc[] = {-999,-999,-999};
-
- //find the points of the peak bin to peak bin-5 (look backwards to forwards)
+
+ // Find the points of the peak bin to peak bin-5
for (int ll=0; ll<5; ll++){
if ((adcSamples[peakBin[ik]-5+ll]) > fitThresh[ik]){
- //get one below fit threshold and two points above
+ // One point is below fit threshold and two points are above
if(jj==0 && (adcSamples[peakBin[ik]-6+ll] > pedVal[ik])){
final int zz=fitData.size();
fitData.addPoint();
- //System.out.println("fit points:\t"+zz+"\t"+(peakBin[ik]-6+ll)+"\t"+adcSamples[peakBin[ik]-6+ll]);
itime[zz] = peakBin[ik]-6+ll;
ifadc[zz] = adcSamples[peakBin[ik]-6+ll];
fitData.point(zz).coordinate(0).setValue(peakBin[ik]-6+ll);
@@ -137,42 +135,34 @@
}
final int zz=fitData.size();
fitData.addPoint();
- //System.out.println("fit points:\t"+zz+"\t"+(peakBin[ik]-5+ll)+"\t"+adcSamples[peakBin[ik]-5+ll]);
itime[zz] = peakBin[ik]-5+ll;
ifadc[zz] = adcSamples[peakBin[ik]-5+ll];
fitData.point(zz).coordinate(0).setValue(peakBin[ik]-5+ll);
fitData.point(zz).coordinate(1).setValue(adcSamples[peakBin[ik]-5+ll]);
fitData.point(zz).coordinate(1).setErrorMinus(NOISE);
fitData.point(zz).coordinate(1).setErrorPlus(NOISE);
-
+
jj++;
if (jj==3) {break;}
}
}
-
+
double islope = ((double)(ifadc[2]-ifadc[0]))/(itime[2]-itime[0]);
double icept = ifadc[1] - islope*itime[1];
- //System.out.println("initial parameters, icept:\t"+icept+"\t islope:\t"+islope+"\t itime:\t"+itime[1]);
- // properly initialize fit parameters:
- //fitFunction.setParameter("time",0.0);//itime[1]);
+ // Initialize fit parameters:
fitFunction.setParameter("intercept",icept);
fitFunction.setParameter("slope",islope);
-
+
// this used to be turned on somewhere else on every event, dunno if it still is:
//Logger.getLogger("org.freehep.math.minuit").setLevel(Level.OFF);
-
+
IFitResult fitResults = fitter.fit(fitData,fitFunction);
- //choose to get the time value at this location on the fit:
+ // Read the time value at this location on the fit:
double halfVal = (adcSamples[peakBin[1]]+pedVal[1])/2.0;
- //System.out.println("Fit results:\t"+fitResults.fittedParameter("intercept")+"\t"+fitResults.fittedParameter("slope"));
- //System.out.println("Half height:\t"+halfVal);
+
return NSPERSAMPLE*(halfVal-fitResults.fittedParameter("intercept"))/fitResults.fittedParameter("slope");
+
+ }
-
- }
-
-
-
-
}
|