Author: [log in to unmask]
Date: Wed Sep 23 10:06:05 2015
New Revision: 3682
Log:
Revert last commit.
Modified:
java/trunk/users/src/main/java/org/hps/users/jeremym/LuminosityDriver.java
Modified: java/trunk/users/src/main/java/org/hps/users/jeremym/LuminosityDriver.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/jeremym/LuminosityDriver.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/jeremym/LuminosityDriver.java Wed Sep 23 10:06:05 2015
@@ -1,4 +1,7 @@
- package org.hps.users.jeremym;
+package org.hps.users.jeremym;
+
+import java.util.ArrayList;
+import java.util.List;
import org.hps.record.epics.EpicsData;
import org.lcsim.event.EventHeader;
@@ -24,35 +27,49 @@
private static final String EPICS_VARIABLE = "scaler_calc1";
/**
- * Conversion from scaler counts to charge.
- */
- private final double SCALER_COUNTS_TO_CHARGE = 905.937;
-
- /**
* Calculate the luminosity in coulomb given a list of EPICS data.
*
* @param epicsData the list of EPICS data
* @return the calculated luminosity
*/
- private double calculateLuminosity() {
- double scalerCount = lastEpicsData.getValue(EPICS_VARIABLE) -firstEpicsData.getValue(EPICS_VARIABLE);
- return SCALER_COUNTS_TO_CHARGE * scalerCount;
+ private static double calculateLuminosity(final List<EpicsData> epicsDataList) {
+ if (epicsDataList.isEmpty()) {
+ throw new RuntimeException("The EPICS data list is empty.");
+ }
+ double integratedLuminosity = 0;
+ for (int i = 0; i < epicsDataList.size(); i++) {
+ if (i != epicsDataList.size() - 1) {
+
+ // Get a pair of EPICS records.
+ final EpicsData epicsDataStart = epicsDataList.get(i);
+ final EpicsData epicsDataEnd = epicsDataList.get(i + 1);
+
+ // Calculate elapsed time between the EPICS events.
+ int timeLength = epicsDataEnd.getEpicsHeader().getTimestamp()
+ - epicsDataStart.getEpicsHeader().getTimestamp();
+
+ if (timeLength == 0) {
+ // Force at least 1 second time resolution.
+ timeLength = 1;
+ }
+
+ // Get average current over the time period.
+ final double averageCurrent = (epicsDataStart.getValue(EPICS_VARIABLE) + epicsDataEnd
+ .getValue(EPICS_VARIABLE)) / 2.;
+
+ // Add the current for the time period to the integrated luminosity total.
+ integratedLuminosity += timeLength * averageCurrent;
+ }
+ }
+ // Convert from nano coulomb to coulomb.
+ integratedLuminosity *= 10e-9;
+ return integratedLuminosity;
}
/**
- * First EPICS data bank.
+ * The list of EPICS data accumulated during the job.
*/
- private EpicsData firstEpicsData = null;
-
- /**
- * Last EPICS data bank.
- */
- private EpicsData lastEpicsData = null;
-
- /**
- * Current bank used for getting the last bank in {@link #endOfData()}.
- */
- private EpicsData currentEpicsData = null;
+ private final List<EpicsData> epicsDataList = new ArrayList<EpicsData>();
/**
* The final measurement of integrated
@@ -64,8 +81,10 @@
*/
@Override
public void endOfData() {
- lastEpicsData = currentEpicsData;
- luminosity = calculateLuminosity();
+ if (epicsDataList.isEmpty()) {
+ throw new RuntimeException("The EPICS data list is empty.");
+ }
+ luminosity = calculateLuminosity(this.epicsDataList);
}
/**
@@ -89,10 +108,7 @@
if (epicsData.hasKey(EPICS_VARIABLE)) {
System.out.println("adding EPICS data with timestamp " + epicsData.getEpicsHeader().getTimestamp()
+ " and Faraday cup current " + epicsData.getValue(EPICS_VARIABLE));
- if (firstEpicsData == null) {
- firstEpicsData = epicsData;
- }
- currentEpicsData = epicsData;
+ epicsDataList.add(epicsData);
}
}
}
|