Author: [log in to unmask]
Date: Fri Mar 11 18:32:06 2016
New Revision: 4292
Log:
utility for guessing the phase
Added:
java/trunk/users/src/main/java/org/hps/users/meeg/SVTPhaseOffsetReader.java
- copied, changed from r4288, java/trunk/evio/src/main/java/org/hps/evio/BasicEvioFileReader.java
Copied: java/trunk/users/src/main/java/org/hps/users/meeg/SVTPhaseOffsetReader.java (from r4288, java/trunk/evio/src/main/java/org/hps/evio/BasicEvioFileReader.java)
=============================================================================
--- java/trunk/evio/src/main/java/org/hps/evio/BasicEvioFileReader.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/meeg/SVTPhaseOffsetReader.java Fri Mar 11 18:32:06 2016
@@ -1,7 +1,12 @@
-package org.hps.evio;
+package org.hps.users.meeg;
+import hep.aida.IHistogram1D;
+import hep.aida.IHistogram2D;
import java.io.File;
-import java.util.Date;
+import java.io.IOException;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.HelpFormatter;
@@ -9,25 +14,22 @@
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.commons.cli.PosixParser;
+import org.hps.evio.SvtEvioReader;
import org.hps.record.evio.EvioEventUtilities;
+import org.hps.record.svt.SvtEvioUtils;
import org.hps.record.triggerbank.AbstractIntData.IntBankDefinition;
-import org.hps.record.triggerbank.HeadBankData;
import org.hps.record.triggerbank.TIData;
import org.jlab.coda.jevio.BaseStructure;
-import org.jlab.coda.jevio.CompositeData;
-import org.jlab.coda.jevio.DataType;
import org.jlab.coda.jevio.EvioEvent;
-import org.jlab.coda.jevio.EvioException;
+import org.lcsim.util.aida.AIDA;
-public class BasicEvioFileReader {
+public class SVTPhaseOffsetReader {
static public void main(String[] args) {
Options options = new Options();
- options.addOption(new Option("q", false, "quiet - don't print event contents"));
- options.addOption(new Option("c", false, "print control events"));
- options.addOption(new Option("t", false, "print event timestamps"));
- options.addOption(new Option("s", false, "sequential read (not mem-mapped)"));
+ options.addOption(new Option("d", false, "debug"));
+ options.addOption(new Option("o", true, "output ROOT file name"));
// Parse the command line options.
if (args.length == 0) {
@@ -41,198 +43,124 @@
throw new RuntimeException("Problem parsing command line options.", e);
}
- if (cl.getArgs().length < 1) {
- throw new RuntimeException("Missing EVIO file name.");
+ if (cl.getArgs().length != 1) {
+ throw new RuntimeException("Need EVIO file name.");
}
- boolean quiet = cl.hasOption("q");
- boolean printControlEvents = cl.hasOption("c");
- boolean seqRead = cl.hasOption("s");
- boolean printTimestamps = cl.hasOption("t");
+ AIDA aida = AIDA.defaultInstance();
+ IHistogram2D ratioVsPhase = aida.histogram2D("ratio vs phase", 200, -1.0, 2.0, 6, 0.0, 24.0);
+ IHistogram1D[] ratios = new IHistogram1D[6];
+ for (int i = 0; i < 6; i++) {
+ ratios[i] = aida.histogram1D("ratio, phase " + i, 200, -1.0, 2.0);
+ }
- IntBankDefinition headBankDefinition = new IntBankDefinition(HeadBankData.class, new int[]{0x2e, 0xe10f});
+ boolean debug = cl.hasOption("d");
+ boolean seqRead = true;
+
IntBankDefinition tiBankDefinition = new IntBankDefinition(TIData.class, new int[]{0x2e, 0xe10a});
-// String evioFileName = args[0];
- for (String evioFileName : cl.getArgs()) {
- File evioFile = new File(evioFileName);
- if (!evioFile.exists()) {
- throw new RuntimeException("File " + evioFileName + " does not exist.");
- }
- System.out.println("Opened file " + evioFileName);
- try {
- org.jlab.coda.jevio.EvioReader reader = new org.jlab.coda.jevio.EvioReader(evioFile, true, seqRead);
- int eventN = 1;
- int badEvents = 0;
- int[] lastData = new int[]{0, 0, 0, 0, 0};
- long minDelta = 0, maxDelta = 0;
- long lastTI = 0;
- fileLoop:
- while (true) {
- if (!quiet) {
- System.out.println("Reading event " + eventN);
+ String evioFileName = cl.getArgs()[0];
+ File evioFile = new File(evioFileName);
+ if (!evioFile.exists()) {
+ throw new RuntimeException("File " + evioFileName + " does not exist.");
+ }
+ System.out.println("Opened file " + evioFileName);
+ try {
+ org.jlab.coda.jevio.EvioReader reader = new org.jlab.coda.jevio.EvioReader(evioFile, true, seqRead);
+ int eventN = 1;
+ fileLoop:
+ while (true) {
+ if (debug) {
+ System.out.println("Reading event " + eventN);
+ }
+ try {
+ EvioEvent event = reader.nextEvent();
+ if (event == null) {
+ break fileLoop;
}
- try {
- EvioEvent event = reader.nextEvent();
- if (event == null) {
- break fileLoop;
- }
- reader.parseEvent(event);
- //printBytes(event.getRawBytes()); // DEBUG
- if (!quiet) {
- System.out.println("Successfully read event " + eventN);// + " which contains " + event.getTotalBytes() + " bytes.");
- printBank(event, "");
- }
- if (printControlEvents && EvioEventUtilities.isControlEvent(event) && !EvioEventUtilities.isEpicsEvent(event)) {
- int[] controlEventData = EvioEventUtilities.getControlEventData(event);
- if (controlEventData == null) {
- printBank(event, "");
+ reader.parseEvent(event);
+ //printBytes(event.getRawBytes()); // DEBUG
+ if (EvioEventUtilities.isPhysicsEvent(event)) {
+ BaseStructure tiBank = tiBankDefinition.findBank(event);
+ TIData tiData = null;
+ if (tiBank != null) {
+ tiData = new TIData(tiBank.getIntData());
+ if (debug) {
+ System.out.format("%d %d\n", tiData.getTime(), tiData.getTime() % 24);
}
- System.out.print(event.getHeader().getTag() + "\t");
-
- for (int i = 0; i < controlEventData.length; i++) {
- System.out.print(controlEventData[i] + "\t");
- }
- Date timestamp = new Date(controlEventData[0] * 1000L);
- System.out.println(timestamp);
}
- if (printTimestamps) {
- int thisTimestamp = 0;
- BaseStructure headBank = headBankDefinition.findBank(event);
- if (headBank != null) {
- int[] data = headBank.getIntData();
- thisTimestamp = data[3];
- if (data[3] != 0) {
- if (lastData[3] == 0) {
- System.out.print("first_head\t");
- printInts(data);
- }
- lastData = data;
+ List<BaseStructure> dataBanks = SvtEvioUtils.getDataBanks(event, SvtEvioReader.MIN_ROC_BANK_TAG, SvtEvioReader.MAX_ROC_BANK_TAG, SvtEvioReader.DATA_BANK_TAG, SvtEvioReader.DATA_BANK_TAG);
+ for (BaseStructure data : dataBanks) {
+ List<int[]> multisampleList = SvtEvioUtils.getMultisamples(data.getIntData(), data.getIntData().length - 2, 1);
+ for (int[] multisample : multisampleList) {
+ if (SvtEvioUtils.isMultisampleHeader(multisample) || SvtEvioUtils.isMultisampleTail(multisample)) {
+ continue;
}
- }
- BaseStructure tiBank = tiBankDefinition.findBank(event);
- if (tiBank != null) {
- TIData tiData = new TIData(tiBank.getIntData());
- if (lastTI == 0) {
- System.out.format("first_TItime\t%d\n", tiData.getTime());
- }
- lastTI = tiData.getTime();
- if (thisTimestamp != 0) {
- long delta = thisTimestamp * 1000000000L - tiData.getTime();
- if (minDelta == 0 || minDelta > delta) {
- minDelta = delta;
- }
- if (maxDelta == 0 || maxDelta < delta) {
- maxDelta = delta;
- }
-// System.out.format("%d %d %d %d %d %d\n", thisTimestamp, tiData.getTime(), delta, minDelta, maxDelta, maxDelta-minDelta);
+ short[] samples = SvtEvioUtils.getSamples(multisample);
+// System.out.format("%d %d %d %d %d %d\n", samples[0], samples[1], samples[2], samples[3], samples[4], samples[5]);
+
+ if (tiData != null && samples[3] - samples[0] > 1000) {
+// System.out.format("%f %f %f \n", ((double) (samples[4] - samples[0])), ((double) (samples[2] - samples[0])), ((double) (samples[4] - samples[0])) / ((double) (samples[2] - samples[0])));
+ ratioVsPhase.fill(((double) (samples[4] - samples[2])) / ((double) (samples[3] - samples[0])), tiData.getTime() % 24);
+ ratios[((int) (tiData.getTime() % 24)) / 4].fill(((double) (samples[4] - samples[2])) / ((double) (samples[3] - samples[0])));
}
}
}
- } catch (Exception e) {
- System.out.println("Caught Exception processing event " + eventN + " which was...");
- e.printStackTrace();
- ++badEvents;
}
- ++eventN;
- if (!quiet) {
- System.out.println("-------");
+ } catch (Exception e) {
+ System.out.println("Caught Exception processing event " + eventN + " which was...");
+ e.printStackTrace();
+ }
+ ++eventN;
+ if (debug) {
+ System.out.println("-------");
+ }
+ }
+ double[] peaks = new double[6];
+ double minPeak = Double.MIN_VALUE;
+ int minPhase = -1;
+ for (int i = 0; i < 6; i++) {
+ peaks[i] = -1;
+ double maxValue = Double.MIN_VALUE;
+ for (int j = 0; j <= ratios[i].axis().bins(); j++) {
+ double value = ratios[i].binHeight(j);
+ if (value > maxValue) {
+ maxValue = value;
+ peaks[i] = ratios[i].binMean(j);
}
}
- System.out.println("There were " + badEvents + " bad events out of " + eventN + " total.");
- if (printTimestamps) {
- System.out.print("last_head\t");
- printInts(lastData);
- System.out.format("last_TItime\t%d\n", lastTI);
- System.out.format("ti_offset\t%d\t%d\t%d\n", minDelta, maxDelta, maxDelta - minDelta);
+ if (peaks[i] < minPeak) {
+ minPeak = peaks[i];
+ minPhase = i;
}
- reader.close();
- } catch (Exception e) {
-// throw new RuntimeException(e);
- e.printStackTrace();
+ }
+ boolean isGood = true;
+ System.out.format("phase %d: peak at %f\n", (minPhase) % 6, peaks[(minPhase) % 6]);
+ for (int i = 0; i < 5; i++) {
+ System.out.format("phase %d: peak at %f\n", (minPhase + i + 1) % 6, peaks[(minPhase + i + 1) % 6]);
+ if (peaks[(minPhase + i) % 6] > peaks[(minPhase + i + 1) % 6]) {
+ isGood = false;
+ }
+ }
+ System.out.format("offset phase %d, isGood = %b,\n", minPhase, isGood);
+ reader.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ if (cl.hasOption("o")) {
+ try {
+ aida.saveAs(cl.getOptionValue("o") + ".root");
+ } catch (IOException ex) {
+ Logger.getLogger(SVTPhaseOffsetReader.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
- private static void printInts(int[] data) {
- for (int i = 0; i < data.length; i++) {
- System.out.format("%d\t", data[i]);
- }
- System.out.println();
- }
-
private static void printUsage(Options options) {
- System.out.println("BasicEvioFileReader [options] [evioFiles]");
+ System.out.println("SVTPhaseOffsetReader [options] [evioFiles]");
final HelpFormatter help = new HelpFormatter();
help.printHelp(" ", options);
System.exit(1);
}
-
- private static void printBank(BaseStructure bank, String indent) throws EvioException {
- System.out.println(indent + "Bank contains " + bank.getTotalBytes() + " bytes.");
- System.out.println(indent + "Bank has " + bank.getChildCount() + " sub-banks.");
- System.out.format(indent + "Bank tag: 0x%x length: %d type: %s num: %d\n", bank.getHeader().getTag(), bank.getHeader().getLength(), bank.getHeader().getDataType(), bank.getHeader().getNumber());
- if (bank.getChildCount() > 0) {
- for (BaseStructure child : bank.getChildrenList()) {
- printBank(child, indent + "\t");
- }
- }
- if (bank.getHeader().getDataType() == DataType.COMPOSITE) {
-// for (CompositeData cdata : bank.getCompositeData()) {
- CompositeData cdatalist[] = bank.getCompositeData();
- for (CompositeData cdata : cdatalist) {
- switch (bank.getHeader().getTag()) {
- case 0xe101:
- printWindow(cdata, indent + "\t");
- break;
- case 0xe102:
- printComposite(cdata, indent + "\t");
- break;
- case 0xe103:
- printComposite(cdata, indent + "\t");
- break;
- }
- }
-// }
- }
- if (bank.getHeader().getDataType() == DataType.UINT32) {
- int[] data = bank.getIntData();
- if (data.length < 100) {
- for (int i = 0; i < data.length; i++) {
- System.out.format(indent + "0x%x\n", data[i]);
- }
- }
- }
- }
-
- private static void printComposite(CompositeData cdata, String indent) {
- System.out.println(indent + "Raw byte count: " + cdata.getRawBytes().length);
- System.out.println(cdata.toString(indent));
- }
-
- private static void printWindow(CompositeData cdata, String indent) {
- while (cdata.index() + 1 < cdata.getItems().size()) {
- System.out.println(indent + "Byte count: " + cdata.getRawBytes().length);
- System.out.println(indent + "Slot: " + cdata.getByte());
- System.out.println(indent + "Trigger: " + cdata.getInt());
- System.out.println(indent + "Timestamp: " + cdata.getLong());
- int nchannels = cdata.getNValue();
- System.out.println(indent + "NChannels: " + nchannels);
- for (int j = 0; j < nchannels; j++) {
- System.out.println(indent + "Channel: " + cdata.getByte());
- int nSamples = cdata.getNValue();
- System.out.println(indent + "NSamples: " + nSamples);
- for (int i = 0; i < nSamples; i++) {
- cdata.getShort();
- }
- }
- }
- }
-
- /*
- * private static void printBytes(final byte[] bytes) { for (int i=0;
- * i<bytes.length; i++) { if (i%4==0) System.out.println();
- * System.out.println(Byte.toString(bytes[i])); } }
- */
}
|