Author: [log in to unmask] Date: Fri Nov 20 18:58:08 2015 New Revision: 3969 Log: move stuff around to match the tech note Modified: java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasConditionsLoader.java java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasMyaDataReader.java java/trunk/users/src/main/java/org/hps/users/meeg/SvtChargeIntegrator.java Modified: java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasConditionsLoader.java ============================================================================= --- java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasConditionsLoader.java (original) +++ java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasConditionsLoader.java Fri Nov 20 18:58:08 2015 @@ -6,22 +6,15 @@ import hep.aida.IPlotter; import hep.aida.IPlotterStyle; -import java.io.BufferedReader; import java.io.File; -import java.io.FileReader; -import java.io.IOException; import java.sql.SQLException; -import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.GregorianCalendar; -import java.util.HashMap; import java.util.HashSet; import java.util.List; -import java.util.Map; import java.util.Set; -import java.util.TimeZone; import java.util.logging.Logger; import org.apache.commons.cli.CommandLine; @@ -180,7 +173,7 @@ options.addOption(new Option("t", false, "use run table format (from crawler) for bias")); options.addOption(new Option("d", false, "discard first line of MYA data (for myaData output)")); options.addOption(new Option("g", false, "Actually load stuff into DB")); - options.addOption(new Option("b", true, "beam current file")); +// options.addOption(new Option("b", true, "beam current file")); options.addOption(new Option("s", false, "Show plots")); final CommandLineParser parser = new DefaultParser(); @@ -261,9 +254,9 @@ } } - if (cl.hasOption("b") && cl.hasOption("m") && cl.hasOption("p")) { - readBeamData(new File(cl.getOptionValue("b")), runList, positionRunRanges, biasRunRanges); - } +// if (cl.hasOption("b") && cl.hasOption("m") && cl.hasOption("p")) { +// readBeamData(new File(cl.getOptionValue("b")), runList, positionRunRanges, biasRunRanges); +// } // load to DB if (cl.hasOption("g")) { @@ -427,111 +420,111 @@ } } - private static void readBeamData(File file, List<RunData> runList, List<SvtPositionRunRange> positionRanges, List<SvtBiasRunRange> biasRanges) { - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); - dateFormat.setTimeZone(TimeZone.getTimeZone("America/New_York")); - - Map<Integer, SvtPositionRunRange> positionRangeMap = new HashMap<Integer, SvtPositionRunRange>(); - for (SvtPositionRunRange range : positionRanges) { - positionRangeMap.put(range.getRun().getRun(), range); - } - Map<Integer, SvtBiasRunRange> biasRangeMap = new HashMap<Integer, SvtBiasRunRange>(); - for (SvtBiasRunRange range : biasRanges) { - biasRangeMap.put(range.getRun().getRun(), range); - } - - try { - BufferedReader br = new BufferedReader(new FileReader(file)); - String line; - System.out.println("myaData header: " + br.readLine()); //discard the first line - System.out.println("run\ttotalQ\ttotalQBias\tfracBias\ttotalQNom\tfracNom\ttotalQ1pt5\tfrac1pt5\ttotalGatedQ\ttotalGatedQBias\tfracGatedBias\ttotalGatedQNom\tfracGatedNom\ttotalGatedQ1pt5\tfracGated1pt5"); - - for (RunData run : runList) { - double totalCharge = 0; - double totalChargeWithBias = 0; - double totalChargeWithBiasAtNominal = 0; - double totalChargeWithBiasAt1pt5 = 0; - double totalGatedCharge = 0; - double totalGatedChargeWithBias = 0; - double totalGatedChargeWithBiasAtNominal = 0; - double totalGatedChargeWithBiasAt1pt5 = 0; - Date lastDate = null; - - while ((line = br.readLine()) != null) { - String arr[] = line.split(" +"); - - if (arr.length != 4) { - throw new java.text.ParseException("this line is not correct.", 0); - } - Date date = dateFormat.parse(arr[0] + " " + arr[1]); - if (date.after(run.getEndDate())) { - break; - } - if (date.before(run.getStartDate())) { - continue; - } - - double current, livetime; - if (arr[2].equals("<undefined>")) { - current = 0; - } else { - current = Double.parseDouble(arr[2]); - } - if (arr[3].equals("<undefined>")) { - livetime = 0; - } else { - livetime = Math.min(100.0, Math.max(0.0, Double.parseDouble(arr[3]))) / 100.0; - } - - if (date.after(run.getStartDate())) { - if (lastDate != null) { - double dt = (date.getTime() - lastDate.getTime()) / 1000.0; - double dq = dt * current; // nC - double dqGated = dt * current * livetime; // nC - - totalCharge += dq; - totalGatedCharge += dqGated; - SvtBiasRunRange biasRunRange = biasRangeMap.get(run.getRun()); - if (biasRunRange != null) { - for (SvtBiasMyaRange biasRange : biasRunRange.getRanges()) { - if (biasRange.includes(date)) { - totalChargeWithBias += dq; - totalGatedChargeWithBias += dqGated; - - SvtPositionRunRange positionRunRange = positionRangeMap.get(run.getRun()); - if (positionRunRange != null) { - for (SvtPositionMyaRange positionRange : positionRunRange.getRanges()) { - if (positionRange.includes(date)) { - if (Math.abs(positionRange.getBottom()) < 0.0001 && Math.abs(positionRange.getTop()) < 0.0001) { - totalChargeWithBiasAtNominal += dq; - totalGatedChargeWithBiasAtNominal += dqGated; - } else if (Math.abs(positionRange.getBottom() - 0.0033) < 0.0001 && Math.abs(positionRange.getTop() - 0.0031) < 0.0001) { - totalChargeWithBiasAt1pt5 += dq; - totalGatedChargeWithBiasAt1pt5 += dqGated; - } - break; - } - } - } - - break; - } - } - } - - } - } - lastDate = date; - } -// System.out.format("run\t%d\ttotalQ\t%.0f\ttotalQBias\t%.0f\tfracBias\t%f\ttotalQNom\t%.0f\tfracNom\t%f\ttotalQ1pt5\t%.0f\tfrac1pt5\t%f\ttotalGatedQ\t%.0f\ttotalGatedQBias\t%.0f\tfracGatedBias\t%f\ttotalGatedQNom\t%.0f\tfracGatedNom\t%f\ttotalGatedQ1pt5\t%.0f\tfracGated1pt5\t%f\n", run.getRun(), totalCharge, totalChargeWithBias, totalChargeWithBias / totalCharge, totalChargeWithBiasAtNominal, totalChargeWithBiasAtNominal / totalCharge, totalChargeWithBiasAt1pt5, totalChargeWithBiasAt1pt5 / totalCharge, totalGatedCharge, totalGatedChargeWithBias, totalGatedChargeWithBias / totalGatedCharge, totalGatedChargeWithBiasAtNominal, totalGatedChargeWithBiasAtNominal / totalGatedCharge, totalGatedChargeWithBiasAt1pt5, totalGatedChargeWithBiasAt1pt5 / totalGatedCharge); - System.out.format("%d\t%.0f\t%.0f\t%f\t%.0f\t%f\t%.0f\t%f\t%.0f\t%.0f\t%f\t%.0f\t%f\t%.0f\t%f\n", run.getRun(), totalCharge, totalChargeWithBias, totalChargeWithBias / totalCharge, totalChargeWithBiasAtNominal, totalChargeWithBiasAtNominal / totalCharge, totalChargeWithBiasAt1pt5, totalChargeWithBiasAt1pt5 / totalCharge, totalGatedCharge, totalGatedChargeWithBias, totalGatedChargeWithBias / totalGatedCharge, totalGatedChargeWithBiasAtNominal, totalGatedChargeWithBiasAtNominal / totalGatedCharge, totalGatedChargeWithBiasAt1pt5, totalGatedChargeWithBiasAt1pt5 / totalGatedCharge); - } - br.close(); - - } catch (IOException e) { - throw new RuntimeException(e); - } catch (java.text.ParseException e) { - throw new RuntimeException(e); - } - } +// private static void readBeamData(File file, List<RunData> runList, List<SvtPositionRunRange> positionRanges, List<SvtBiasRunRange> biasRanges) { +// SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); +// dateFormat.setTimeZone(TimeZone.getTimeZone("America/New_York")); +// +// Map<Integer, SvtPositionRunRange> positionRangeMap = new HashMap<Integer, SvtPositionRunRange>(); +// for (SvtPositionRunRange range : positionRanges) { +// positionRangeMap.put(range.getRun().getRun(), range); +// } +// Map<Integer, SvtBiasRunRange> biasRangeMap = new HashMap<Integer, SvtBiasRunRange>(); +// for (SvtBiasRunRange range : biasRanges) { +// biasRangeMap.put(range.getRun().getRun(), range); +// } +// +// try { +// BufferedReader br = new BufferedReader(new FileReader(file)); +// String line; +// System.out.println("myaData header: " + br.readLine()); //discard the first line +// System.out.println("run\ttotalQ\ttotalQBias\tfracBias\ttotalQNom\tfracNom\ttotalQ1pt5\tfrac1pt5\ttotalGatedQ\ttotalGatedQBias\tfracGatedBias\ttotalGatedQNom\tfracGatedNom\ttotalGatedQ1pt5\tfracGated1pt5"); +// +// for (RunData run : runList) { +// double totalCharge = 0; +// double totalChargeWithBias = 0; +// double totalChargeWithBiasAtNominal = 0; +// double totalChargeWithBiasAt1pt5 = 0; +// double totalGatedCharge = 0; +// double totalGatedChargeWithBias = 0; +// double totalGatedChargeWithBiasAtNominal = 0; +// double totalGatedChargeWithBiasAt1pt5 = 0; +// Date lastDate = null; +// +// while ((line = br.readLine()) != null) { +// String arr[] = line.split(" +"); +// +// if (arr.length != 4) { +// throw new java.text.ParseException("this line is not correct.", 0); +// } +// Date date = dateFormat.parse(arr[0] + " " + arr[1]); +// if (date.after(run.getEndDate())) { +// break; +// } +// if (date.before(run.getStartDate())) { +// continue; +// } +// +// double current, livetime; +// if (arr[2].equals("<undefined>")) { +// current = 0; +// } else { +// current = Double.parseDouble(arr[2]); +// } +// if (arr[3].equals("<undefined>")) { +// livetime = 0; +// } else { +// livetime = Math.min(100.0, Math.max(0.0, Double.parseDouble(arr[3]))) / 100.0; +// } +// +// if (date.after(run.getStartDate())) { +// if (lastDate != null) { +// double dt = (date.getTime() - lastDate.getTime()) / 1000.0; +// double dq = dt * current; // nC +// double dqGated = dt * current * livetime; // nC +// +// totalCharge += dq; +// totalGatedCharge += dqGated; +// SvtBiasRunRange biasRunRange = biasRangeMap.get(run.getRun()); +// if (biasRunRange != null) { +// for (SvtBiasMyaRange biasRange : biasRunRange.getRanges()) { +// if (biasRange.includes(date)) { +// totalChargeWithBias += dq; +// totalGatedChargeWithBias += dqGated; +// +// SvtPositionRunRange positionRunRange = positionRangeMap.get(run.getRun()); +// if (positionRunRange != null) { +// for (SvtPositionMyaRange positionRange : positionRunRange.getRanges()) { +// if (positionRange.includes(date)) { +// if (Math.abs(positionRange.getBottom()) < 0.0001 && Math.abs(positionRange.getTop()) < 0.0001) { +// totalChargeWithBiasAtNominal += dq; +// totalGatedChargeWithBiasAtNominal += dqGated; +// } else if (Math.abs(positionRange.getBottom() - 0.0033) < 0.0001 && Math.abs(positionRange.getTop() - 0.0031) < 0.0001) { +// totalChargeWithBiasAt1pt5 += dq; +// totalGatedChargeWithBiasAt1pt5 += dqGated; +// } +// break; +// } +// } +// } +// +// break; +// } +// } +// } +// +// } +// } +// lastDate = date; +// } +//// System.out.format("run\t%d\ttotalQ\t%.0f\ttotalQBias\t%.0f\tfracBias\t%f\ttotalQNom\t%.0f\tfracNom\t%f\ttotalQ1pt5\t%.0f\tfrac1pt5\t%f\ttotalGatedQ\t%.0f\ttotalGatedQBias\t%.0f\tfracGatedBias\t%f\ttotalGatedQNom\t%.0f\tfracGatedNom\t%f\ttotalGatedQ1pt5\t%.0f\tfracGated1pt5\t%f\n", run.getRun(), totalCharge, totalChargeWithBias, totalChargeWithBias / totalCharge, totalChargeWithBiasAtNominal, totalChargeWithBiasAtNominal / totalCharge, totalChargeWithBiasAt1pt5, totalChargeWithBiasAt1pt5 / totalCharge, totalGatedCharge, totalGatedChargeWithBias, totalGatedChargeWithBias / totalGatedCharge, totalGatedChargeWithBiasAtNominal, totalGatedChargeWithBiasAtNominal / totalGatedCharge, totalGatedChargeWithBiasAt1pt5, totalGatedChargeWithBiasAt1pt5 / totalGatedCharge); +// System.out.format("%d\t%.0f\t%.0f\t%f\t%.0f\t%f\t%.0f\t%f\t%.0f\t%.0f\t%f\t%.0f\t%f\t%.0f\t%f\n", run.getRun(), totalCharge, totalChargeWithBias, totalChargeWithBias / totalCharge, totalChargeWithBiasAtNominal, totalChargeWithBiasAtNominal / totalCharge, totalChargeWithBiasAt1pt5, totalChargeWithBiasAt1pt5 / totalCharge, totalGatedCharge, totalGatedChargeWithBias, totalGatedChargeWithBias / totalGatedCharge, totalGatedChargeWithBiasAtNominal, totalGatedChargeWithBiasAtNominal / totalGatedCharge, totalGatedChargeWithBiasAt1pt5, totalGatedChargeWithBiasAt1pt5 / totalGatedCharge); +// } +// br.close(); +// +// } catch (IOException e) { +// throw new RuntimeException(e); +// } catch (java.text.ParseException e) { +// throw new RuntimeException(e); +// } +// } } Modified: java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasMyaDataReader.java ============================================================================= --- java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasMyaDataReader.java (original) +++ java/trunk/conditions/src/main/java/org/hps/conditions/svt/SvtBiasMyaDataReader.java Fri Nov 20 18:58:08 2015 @@ -141,10 +141,6 @@ records = parser.getRecords(); - // Remove first two rows of headers. - records.remove(0); - records.remove(0); - parser.close(); } catch (FileNotFoundException ex) { Logger.getLogger(SvtBiasMyaDataReader.class.getName()).log(Level.SEVERE, null, ex); Modified: java/trunk/users/src/main/java/org/hps/users/meeg/SvtChargeIntegrator.java ============================================================================= --- java/trunk/users/src/main/java/org/hps/users/meeg/SvtChargeIntegrator.java (original) +++ java/trunk/users/src/main/java/org/hps/users/meeg/SvtChargeIntegrator.java Fri Nov 20 18:58:08 2015 @@ -12,10 +12,11 @@ import java.util.logging.Logger; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; +import org.apache.commons.cli.DefaultParser; import org.apache.commons.cli.HelpFormatter; +import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; -import org.apache.commons.cli.DefaultParser; import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVParser; import org.apache.commons.csv.CSVRecord; @@ -33,36 +34,20 @@ */ public class SvtChargeIntegrator { - /** - * Initialize the logger. - */ - private static Logger LOGGER = Logger.getLogger(SvtChargeIntegrator.class.getPackage().getName()); - private static final double angleTolerance = 1e-4; - - /** - * Default constructor - */ - public SvtChargeIntegrator() { - } /** * Load SVT HV bias constants into the conditions database. * - * @param args the command line arguments (requires a CVS run log file and a - * MYA dump file.) + * @param args the command line arguments (requires a CSV run/file log file + * and a MYA dump file.) */ public static void main(String[] args) { Options options = new Options(); -// options.addOption(new Option("c", true, "CSV run file")); -// options.addOption(new Option("m", true, "MYA dump file for bias")); -// options.addOption(new Option("p", true, "MYA dump file for motor positions")); -// options.addOption(new Option("t", false, "use run table format (from crawler) for bias")); -// options.addOption(new Option("d", false, "discard first line of MYA data (for myaData output)")); -// options.addOption(new Option("g", false, "Actually load stuff into DB")); -// options.addOption(new Option("b", true, "beam current file")); -// options.addOption(new Option("s", false, "Show plots")); + options.addOption(new Option("r", false, "use per-run CSV log file (default is per-file)")); + options.addOption(new Option("t", false, "use TI timestamp instead of Unix time (higher precision, but requires TI time offset in run DB)")); + options.addOption(new Option("c", false, "get TI time offset from CSV log file instead of run DB")); final CommandLineParser parser = new DefaultParser(); CommandLine cl = null; @@ -72,23 +57,22 @@ throw new RuntimeException("Cannot parse.", e); } -// if (!cl.hasOption("c") || (!cl.hasOption("m") && !cl.hasOption("p"))) { -// printUsage(options); -// return; -// } + boolean perRun = cl.hasOption("r"); + boolean useTI = cl.hasOption("t"); + boolean useCrawlerTI = cl.hasOption("c"); + + if (cl.getArgs().length != 2) { + printUsage(options); + return; + } + List<CSVRecord> records = null; try { FileReader reader = new FileReader(cl.getArgs()[0]); - final CSVFormat format = CSVFormat.DEFAULT; - - final CSVParser csvParser; - csvParser = new CSVParser(reader, format); + final CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT); records = csvParser.getRecords(); -// // Remove first two rows of headers. -// records.remove(0); -// records.remove(0); csvParser.close(); } catch (FileNotFoundException ex) { Logger.getLogger(SvtChargeIntegrator.class.getName()).log(Level.SEVERE, null, ex); @@ -96,18 +80,6 @@ Logger.getLogger(SvtChargeIntegrator.class.getName()).log(Level.SEVERE, null, ex); } -// for (CSVRecord record : records) { -// int runNum = Integer.parseInt(record.get(0)); -// int fileNum = Integer.parseInt(record.get(1)); -//// int nEvents = Integer.parseInt(record.get(2)); -//// int badEvents = Integer.parseInt(record.get(3)); -//// int firstTimestamp = Integer.parseInt(record.get(4)); -//// int lastTimestamp = Integer.parseInt(record.get(5)); -// long firstTI = Long.parseLong(record.get(6)); -// long lastTI = Long.parseLong(record.get(7)); -//// long tiOffset = Long.parseLong(record.get(8)); -//// data.add(new FileData(runNum, fileNum, firstTI, lastTI, record)); -// } SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); dateFormat.setTimeZone(TimeZone.getTimeZone("America/New_York")); @@ -115,8 +87,11 @@ BufferedReader br = new BufferedReader(new FileReader(cl.getArgs()[1])); String line; System.err.println("myaData header: " + br.readLine()); //discard the first line -// System.out.println("run\ttotalQ\ttotalQBias\tfracBias\ttotalQNom\tfracNom\ttotalQ1pt5\tfrac1pt5\ttotalGatedQ\ttotalGatedQBias\tfracGatedBias\ttotalGatedQNom\tfracGatedNom\ttotalGatedQ1pt5\tfracGated1pt5"); - System.out.println("run_num\tfile_num\tnominal_position\tnEvents\ttotalQ\ttotalQ_withbias\ttotalQ_atnom\tgatedQ\tgatedQ_withbias\tgatedQ_atnom"); + if (perRun) { + System.out.println("run_num\tnominal_position\tnEvents\ttotalQ\ttotalQ_withbias\ttotalQ_atnom\tgatedQ\tgatedQ_withbias\tgatedQ_atnom"); + } else { + System.out.println("run_num\tfile_num\tnominal_position\tnEvents\ttotalQ\ttotalQ_withbias\ttotalQ_atnom\tgatedQ\tgatedQ_withbias\tgatedQ_atnom"); + } int currentRun = 0; double nominalAngleTop = -999; @@ -127,54 +102,98 @@ SvtMotorPositionCollection svtPositionConstants = null; SvtAlignmentConstant.SvtAlignmentConstantCollection alignmentConstants = null; Date date = null; - Date lastDate = null; + Date lastDate; for (CSVRecord record : records) { int runNum = Integer.parseInt(record.get(0)); - int fileNum = Integer.parseInt(record.get(1)); - long firstTI = Long.parseLong(record.get(6)); - long lastTI = Long.parseLong(record.get(7)); + if (useCrawlerTI) { + if (perRun) { + tiTimeOffset = Long.parseLong(record.get(12)); + } else { + tiTimeOffset = Long.parseLong(record.get(8)); + } + if (tiTimeOffset == 0) { + continue; + } + } if (runNum != currentRun) { - RunManager.getRunManager().setRun(runNum); - if (!RunManager.getRunManager().runExists() || RunManager.getRunManager().getTriggerConfig().getTiTimeOffset() == null) { - continue; - } + if (useTI && !useCrawlerTI) { + RunManager.getRunManager().setRun(runNum); + if (!RunManager.getRunManager().runExists() || RunManager.getRunManager().getTriggerConfig().getTiTimeOffset() == null) { + continue; + } + tiTimeOffset = RunManager.getRunManager().getTriggerConfig().getTiTimeOffset(); + } + try { DatabaseConditionsManager.getInstance().setDetector("HPS-EngRun2015-Nominal-v3", runNum); - - svtBiasConstants = DatabaseConditionsManager.getInstance().getCachedConditions(SvtBiasConstant.SvtBiasConstantCollection.class, "svt_bias_constants").getCachedData(); - svtPositionConstants = DatabaseConditionsManager.getInstance().getCachedConditions(SvtMotorPosition.SvtMotorPositionCollection.class, "svt_motor_positions").getCachedData(); - alignmentConstants = DatabaseConditionsManager.getInstance().getCachedConditions(SvtAlignmentConstant.SvtAlignmentConstantCollection.class, "svt_alignments").getCachedData(); } catch (Exception ex) { continue; } - tiTimeOffset = RunManager.getRunManager().getTriggerConfig().getTiTimeOffset(); - - for (final SvtAlignmentConstant constant : alignmentConstants) { - switch (constant.getParameter()) { - case 13100: - nominalAngleTop = constant.getValue(); - break; - case 23100: - nominalAngleBottom = -constant.getValue(); - break; - } - } - - if (Math.abs(nominalAngleBottom) < angleTolerance && Math.abs(nominalAngleTop) < angleTolerance) { - nominalPosition = "0pt5"; - } else if (Math.abs(nominalAngleBottom - 0.0033) < angleTolerance && Math.abs(nominalAngleTop - 0.0031) < angleTolerance) { - nominalPosition = "1pt5"; - } else { + try { + svtBiasConstants = DatabaseConditionsManager.getInstance().getCachedConditions(SvtBiasConstant.SvtBiasConstantCollection.class, "svt_bias_constants").getCachedData(); + } catch (Exception ex) { + svtBiasConstants = null; + } + try { + svtPositionConstants = DatabaseConditionsManager.getInstance().getCachedConditions(SvtMotorPosition.SvtMotorPositionCollection.class, "svt_motor_positions").getCachedData(); + } catch (Exception ex) { + svtPositionConstants = null; + } + + try { + alignmentConstants = DatabaseConditionsManager.getInstance().getCachedConditions(SvtAlignmentConstant.SvtAlignmentConstantCollection.class, "svt_alignments").getCachedData(); + for (final SvtAlignmentConstant constant : alignmentConstants) { + switch (constant.getParameter()) { + case 13100: + nominalAngleTop = constant.getValue(); + break; + case 23100: + nominalAngleBottom = -constant.getValue(); + break; + } + } + if (Math.abs(nominalAngleBottom) < angleTolerance && Math.abs(nominalAngleTop) < angleTolerance) { + nominalPosition = "0pt5"; + } else if (Math.abs(nominalAngleBottom - 0.0033) < angleTolerance && Math.abs(nominalAngleTop - 0.0031) < angleTolerance) { + nominalPosition = "1pt5"; + } else { + nominalPosition = "unknown"; + } + } catch (Exception ex) { + alignmentConstants = null; nominalPosition = "unknown"; } + currentRun = runNum; } - Date startDate = new Date((long) ((firstTI + tiTimeOffset) / 1e6)); - Date endDate = new Date((long) ((lastTI + tiTimeOffset) / 1e6)); + Date startDate, endDate; + long firstTime, lastTime;//Unix time from head bank + long firstTI, lastTI;//TI timestamp from TI bank + + if (perRun) { + firstTime = Long.parseLong(record.get(7)); + lastTime = Long.parseLong(record.get(8)); + firstTI = Long.parseLong(record.get(10)); + lastTI = Long.parseLong(record.get(11)); + + } else { + firstTime = Long.parseLong(record.get(4)); + lastTime = Long.parseLong(record.get(5)); + firstTI = Long.parseLong(record.get(6)); + lastTI = Long.parseLong(record.get(7)); + } + + if (useTI) { + startDate = new Date((long) ((firstTI + tiTimeOffset) / 1e6)); + endDate = new Date((long) ((lastTI + tiTimeOffset) / 1e6)); + } else { + startDate = new Date(firstTime * 1000); + endDate = new Date(lastTime * 1000); + } double totalCharge = 0; double totalChargeWithBias = 0; @@ -210,14 +229,23 @@ boolean biasGood = false; boolean positionGood = false; - - SvtBiasConstant biasConstant = svtBiasConstants.find(date); - if (biasConstant != null) { - biasGood = true; - } + SvtBiasConstant biasConstant = null; + if (svtBiasConstants != null) { + biasConstant = svtBiasConstants.find(date); + if (biasConstant == null && lastDate != null) { + biasConstant = svtBiasConstants.find(lastDate); + } + if (biasConstant != null) { + biasGood = true; + } + } + SvtMotorPosition positionConstant = null; if (svtPositionConstants != null) { - SvtMotorPosition positionConstant = svtPositionConstants.find(date); - if (positionConstant != null) { + positionConstant = svtPositionConstants.find(date); + if (positionConstant == null && lastDate != null) { + positionConstant = svtPositionConstants.find(lastDate); + } + if (positionConstant != null && alignmentConstants != null) { // System.out.format("%f %f %f %f\n", positionConstant.getBottom(), nominalAngleBottom, positionConstant.getTop(), nominalAngleTop); if (Math.abs(positionConstant.getBottom() - nominalAngleBottom) < angleTolerance && Math.abs(positionConstant.getTop() - nominalAngleTop) < angleTolerance) { positionGood = true; @@ -226,18 +254,32 @@ } if (lastDate != null) { - double dt = (Math.min(date.getTime(), endDate.getTime()) - Math.max(startDate.getTime(), lastDate.getTime())) / 1000.0; + double biasDt = 0; + double positionDt = 0; + long dtStart = Math.max(startDate.getTime(), lastDate.getTime()); + long dtEnd = Math.min(date.getTime(), endDate.getTime()); + double dt = (dtEnd - dtStart) / 1000.0; + if (biasConstant != null) { + long biasStart = Math.max(dtStart, biasConstant.getStart()); + long biasEnd = Math.min(dtEnd, biasConstant.getEnd()); + biasDt = (biasEnd - biasStart) / 1000.0; + if (positionConstant != null) { + long positionStart = Math.max(biasStart, positionConstant.getStart()); + long positionEnd = Math.min(biasEnd, positionConstant.getEnd()); + positionDt = (positionEnd - positionStart) / 1000.0; + } + } double dq = dt * current; // nC double dqGated = dt * current * livetime; // nC // System.out.format("start %d end %d date %d lastDate %d current %f dt %f\n", startDate.getTime(), endDate.getTime(), date.getTime(), lastDate.getTime(), current, dt); totalCharge += dq; totalGatedCharge += dqGated; if (biasGood) { - totalChargeWithBias += dq; - totalGatedChargeWithBias += dqGated; + totalChargeWithBias += biasDt * current; + totalGatedChargeWithBias += biasDt * current * livetime; if (positionGood) { - totalChargeWithBiasAtNominal += dq; - totalGatedChargeWithBiasAtNominal += dqGated; + totalChargeWithBiasAtNominal += positionDt * current; + totalGatedChargeWithBiasAtNominal += positionDt * current * livetime; } } } @@ -248,8 +290,14 @@ } br.mark(1000); } - int nEvents = Integer.parseInt(record.get(2)); - System.out.format("%d\t%d\t%s\t%d\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\n", runNum, fileNum, nominalPosition, nEvents, totalCharge, totalChargeWithBias, totalChargeWithBiasAtNominal, totalGatedCharge, totalGatedChargeWithBias, totalGatedChargeWithBiasAtNominal); + if (perRun) { + int nEvents = Integer.parseInt(record.get(9)); + System.out.format("%d\t%s\t%d\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\n", runNum, nominalPosition, nEvents, totalCharge, totalChargeWithBias, totalChargeWithBiasAtNominal, totalGatedCharge, totalGatedChargeWithBias, totalGatedChargeWithBiasAtNominal); + } else { + int fileNum = Integer.parseInt(record.get(1)); + int nEvents = Integer.parseInt(record.get(2)); + System.out.format("%d\t%d\t%s\t%d\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\n", runNum, fileNum, nominalPosition, nEvents, totalCharge, totalChargeWithBias, totalChargeWithBiasAtNominal, totalGatedCharge, totalGatedChargeWithBias, totalGatedChargeWithBiasAtNominal); + } } } catch (Exception ex) { Logger.getLogger(SvtChargeIntegrator.class.getName()).log(Level.SEVERE, null, ex); @@ -259,7 +307,7 @@ private static void printUsage(Options options) { HelpFormatter formatter = new HelpFormatter(); + System.err.println("SvtChargeIntegrator <CSV log file> <MYA dump file>"); formatter.printHelp("Need to adhere to these options", options); - } }