Author: [log in to unmask]
Date: Thu Mar 17 19:00:23 2016
New Revision: 4305
Log:
option to read header error file
Modified:
java/trunk/users/src/main/java/org/hps/users/meeg/SvtChargeIntegrator.java
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 Thu Mar 17 19:00:23 2016
@@ -6,17 +6,19 @@
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.TimeZone;
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.PosixParser;
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.PosixParser;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;
@@ -49,6 +51,7 @@
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"));
+ options.addOption(new Option("e", true, "header error file"));
final CommandLineParser parser = new PosixParser();
CommandLine cl = null;
@@ -62,6 +65,26 @@
boolean useTI = cl.hasOption("t");
boolean useCrawlerTI = cl.hasOption("c");
+ Map<Integer, Long> runErrorMap = new HashMap<Integer, Long>();
+ if (cl.hasOption("e")) {
+ try {
+ BufferedReader br = new BufferedReader(new FileReader(cl.getOptionValue("e")));
+ String line;
+ System.err.println("header error file header: " + br.readLine()); //discard the first line
+ while ((line = br.readLine()) != null) {
+ String arr[] = line.split(" +");
+ int run = Integer.parseInt(arr[1]);
+ long errorTime = Long.parseLong(arr[4]);
+ runErrorMap.put(run, errorTime);
+// System.out.format("%d %d\n", run, errorTime);
+ }
+ } catch (FileNotFoundException ex) {
+ Logger.getLogger(SvtChargeIntegrator.class.getName()).log(Level.SEVERE, null, ex);
+ } catch (IOException ex) {
+ Logger.getLogger(SvtChargeIntegrator.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ }
+
if (cl.getArgs().length != 2) {
printUsage(options);
return;
@@ -89,9 +112,9 @@
String line;
System.err.println("myaData header: " + br.readLine()); //discard the first line
if (perRun) {
- System.out.println("run_num\tnominal_position\tnEvents\ttotalQ\ttotalQ_withbias\ttotalQ_atnom\tgatedQ\tgatedQ_withbias\tgatedQ_atnom\tgoodQ\tgoodQ_withbias\tgoodQ_atnom");
+ System.out.println("run_num\tnominal_position\tnEvents\ttotalQ\ttotalQ_withbias\ttotalQ_atnom\ttotalQ_noerror\tgatedQ\tgatedQ_withbias\tgatedQ_atnom\tgatedQ_noerror\tgoodQ\tgoodQ_withbias\tgoodQ_atnom\tgoodQ_noerror");
} else {
- System.out.println("run_num\tfile_num\tnominal_position\tnEvents\ttotalQ\ttotalQ_withbias\ttotalQ_atnom\tgatedQ\tgatedQ_withbias\tgatedQ_atnom\tgoodQ\tgoodQ_withbias\tgoodQ_atnom");
+ System.out.println("run_num\tfile_num\tnominal_position\tnEvents\ttotalQ\ttotalQ_withbias\ttotalQ_atnom\ttotalQ_noerror\tgatedQ\tgatedQ_withbias\tgatedQ_atnom\tgatedQ_noerror\tgoodQ\tgoodQ_withbias\tgoodQ_atnom\tgoodQ_noerror");
}
int currentRun = 0;
@@ -129,9 +152,6 @@
if (tiTimeOffset == 0) {
continue;
}
- if (tiTimeOffset == 0) {
- continue;
- }
}
try {
@@ -212,25 +232,40 @@
if (firstTI == 0 || lastTI == 0) {
continue;
}
- startDate = new Date((long) ((firstTI + tiTimeOffset) / 1e6));
- endDate = new Date((long) ((lastTI + tiTimeOffset) / 1e6));
+ startDate = new Date((firstTI + tiTimeOffset) / 1000000);
+ endDate = new Date((lastTI + tiTimeOffset) / 1000000);
} else {
if (firstTime == 0 || lastTime == 0) {
continue;
}
startDate = new Date(firstTime * 1000);
endDate = new Date(lastTime * 1000);
+ }
+
+ Long errorTime = runErrorMap.get(runNum);
+ Date errorDate = null;
+ if (errorTime != null) {
+ errorDate = new Date(errorTime / 1000000);
+ boolean isGood = Math.abs(errorDate.getTime() - startDate.getTime()) < 10 * 60 * 60 * 1000; //10 hours
+ if (!isGood && useTI) {
+ errorDate = new Date((errorTime + tiTimeOffset) / 1000000);
+// boolean isPlusOffsetGood = Math.abs(errorDatePlusOffset.getTime() - startDate.getTime()) < 10 * 60 * 60 * 1000; //10 hours
+// System.out.format("%d, %d, %d: %s (good: %b), %s (good: %b)\n", runNum, errorTime, tiTimeOffset, errorDate, isGood, errorDatePlusOffset, isPlusOffsetGood);
+ }
}
double totalCharge = 0;
double totalChargeWithBias = 0;
double totalChargeWithBiasAtNominal = 0;
+ double totalChargeWithBiasAtNominalNoError = 0;
double totalGatedCharge = 0;
double totalGatedChargeWithBias = 0;
double totalGatedChargeWithBiasAtNominal = 0;
+ double totalGatedChargeWithBiasAtNominalNoError = 0;
double totalGoodCharge = 0;
double totalGoodChargeWithBias = 0;
double totalGoodChargeWithBiasAtNominal = 0;
+ double totalGoodChargeWithBiasAtNominalNoError = 0;
br.mark(1000);
while ((line = br.readLine()) != null) {
@@ -289,14 +324,23 @@
long dtStart = Math.max(startDate.getTime(), lastDate.getTime());
long dtEnd = Math.min(date.getTime(), endDate.getTime());
double dt = (dtEnd - dtStart) / 1000.0;
+ double errorDt = 0;
if (biasConstant != null) {
long biasStart = Math.max(dtStart, biasConstant.getStart());
long biasEnd = Math.min(dtEnd, biasConstant.getEnd());
- biasDt = (biasEnd - biasStart) / 1000.0;
+ biasDt = Math.max(0, 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;
+ positionDt = Math.max(0, positionEnd - positionStart) / 1000.0;
+
+ long errorEnd = positionStart;
+ if (errorDate == null) {
+ errorEnd = positionEnd;
+ } else if (errorDate.getTime() > dtStart) {
+ errorEnd = Math.min(positionEnd, errorDate.getTime());
+ }
+ errorDt = Math.max(0, errorEnd - positionStart) / 1000.0;
}
}
// 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);
@@ -311,6 +355,10 @@
totalChargeWithBiasAtNominal += positionDt * current;
totalGatedChargeWithBiasAtNominal += positionDt * current * livetime;
totalGoodChargeWithBiasAtNominal += positionDt * current * livetime * efficiency;
+
+ totalChargeWithBiasAtNominalNoError += errorDt * current;
+ totalGatedChargeWithBiasAtNominalNoError += errorDt * current * livetime;
+ totalGoodChargeWithBiasAtNominalNoError += errorDt * current * livetime * efficiency;
}
}
}
@@ -326,11 +374,11 @@
}
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\t%.3f\t%.3f\t%.3f\n", runNum, nominalPosition, nEvents, totalCharge, totalChargeWithBias, totalChargeWithBiasAtNominal, totalGatedCharge, totalGatedChargeWithBias, totalGatedChargeWithBiasAtNominal, totalGoodCharge, totalGoodChargeWithBias, totalGoodChargeWithBiasAtNominal);
+ System.out.format("%d\t%s\t%d\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\n", runNum, nominalPosition, nEvents, totalCharge, totalChargeWithBias, totalChargeWithBiasAtNominal, totalChargeWithBiasAtNominalNoError, totalGatedCharge, totalGatedChargeWithBias, totalGatedChargeWithBiasAtNominal, totalGatedChargeWithBiasAtNominalNoError, totalGoodCharge, totalGoodChargeWithBias, totalGoodChargeWithBiasAtNominal, totalGoodChargeWithBiasAtNominalNoError);
} 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\t%.3f\t%.3f\t%.3f\n", runNum, fileNum, nominalPosition, nEvents, totalCharge, totalChargeWithBias, totalChargeWithBiasAtNominal, totalGatedCharge, totalGatedChargeWithBias, totalGatedChargeWithBiasAtNominal, totalGoodCharge, totalGoodChargeWithBias, totalGoodChargeWithBiasAtNominal);
+ System.out.format("%d\t%d\t%s\t%d\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\n", runNum, fileNum, nominalPosition, nEvents, totalCharge, totalChargeWithBias, totalChargeWithBiasAtNominal, totalChargeWithBiasAtNominalNoError, totalGatedCharge, totalGatedChargeWithBias, totalGatedChargeWithBiasAtNominal, totalGatedChargeWithBiasAtNominalNoError, totalGoodCharge, totalGoodChargeWithBias, totalGoodChargeWithBiasAtNominal, totalGoodChargeWithBiasAtNominalNoError);
}
}
} catch (Exception ex) {
|