Author: [log in to unmask]
Date: Tue Feb 16 13:35:43 2016
New Revision: 4229
Log:
Merge in trunk changes to branch.
Added:
java/branches/jeremy-dev/users/src/main/java/org/hps/users/celentan/LedOnlineOfflineComparisonDriver.java
- copied unchanged from r4228, java/trunk/users/src/main/java/org/hps/users/celentan/LedOnlineOfflineComparisonDriver.java
Modified:
java/branches/jeremy-dev/ (props changed)
java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/EcalMonitoring.java
java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/FinalStateMonitoring.java
java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/TridentMonitoring.java
java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/V0Monitoring.java
java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/ecal/FEEClusterPlotter.java
java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-1_5mm-v4-4/HPS-PhysicsRun2016-1_5mm-v4-4.lcdd
java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-1_5mm-v4-4/compact.xml
java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-2mm-v4-4/HPS-PhysicsRun2016-2mm-v4-4.lcdd
java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-2mm-v4-4/compact.xml
java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-3mm-v4-4/HPS-PhysicsRun2016-3mm-v4-4.lcdd
java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-3mm-v4-4/compact.xml
java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-4mm-v4-4/HPS-PhysicsRun2016-4mm-v4-4.lcdd
java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-4mm-v4-4/compact.xml
java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-Nominal-v4-4/HPS-PhysicsRun2016-Nominal-v4-4.lcdd
java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-Nominal-v4-4/compact.xml
java/branches/jeremy-dev/evio/src/main/java/org/hps/evio/AbstractSvtEvioReader.java
java/branches/jeremy-dev/evio/src/main/java/org/hps/evio/AugmentedSvtEvioReader.java
java/branches/jeremy-dev/integration-tests/ (props changed)
java/branches/jeremy-dev/integration-tests/pom.xml
java/branches/jeremy-dev/integration-tests/src/test/java/org/hps/test/it/EvioToLcioTest.java
java/branches/jeremy-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SensorOccupancyPlotsDriver.java
java/branches/jeremy-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtClusterPlots.java
java/branches/jeremy-dev/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalLedSequenceMonitor.java
java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/triggerbank/TIData.java
java/branches/jeremy-dev/run-database/src/main/java/org/hps/run/database/RunManager.java
java/branches/jeremy-dev/steering-files/src/main/resources/org/hps/steering/monitoring/SvtOnlineMonitoring.lcsim
java/branches/jeremy-dev/steering-files/src/main/resources/org/hps/steering/production/DataQualityRecon.lcsim (contents, props changed)
Modified: java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/EcalMonitoring.java
=============================================================================
--- java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/EcalMonitoring.java (original)
+++ java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/EcalMonitoring.java Tue Feb 16 13:35:43 2016
@@ -73,7 +73,14 @@
boolean fillHitPlots = true;
String[] ecalQuantNames = {"avg_N_hits", "avg_Hit_Energy",
"avg_N_clusters", "avg_N_hitsPerCluster", "avg_Cluster_Energy", "avg_ClusterTime"};
- double maxE = 1.1;
+ double beamEnergy = 1.1;
+
+ double maxFactor = 1.5;
+
+ public void setBeamEnergy(double e){
+ beamEnergy = e;
+ }
+
private final String plotHitsDir = "EcalHits/";
private final String plotClustersDir = "EcalClusters/";
private final String plotFidCutDir = "FiducialCut/";
@@ -90,6 +97,7 @@
this.clusterCollectionName = clusterCollectionName;
}
+
public void setFillHitPlots(boolean fill) {
this.fillHitPlots = fill;
}
@@ -102,32 +110,32 @@
// Setup hit plots.
hitCountPlot = aida.histogram1D(plotHitsDir + triggerType + "/"+ calibratedHitCollectionName + " Hit Count In Event", 40, -0.5, 39.5);
hitTimePlot = aida.histogram1D(plotHitsDir + triggerType + "/"+calibratedHitCollectionName + " Hit Time", 50, 0 * 4.0, 50 * 4.0);
- hitEnergyPlot = aida.histogram1D(plotHitsDir + triggerType + "/"+calibratedHitCollectionName + " Hit Energy", 100, -0.1, maxE);
+ hitEnergyPlot = aida.histogram1D(plotHitsDir + triggerType + "/"+calibratedHitCollectionName + " Hit Energy", 100, -0.1, beamEnergy*maxFactor);
fiducialHitCountPlot = aida.histogram1D(plotHitsDir + triggerType + "/"+calibratedHitCollectionName + " Hit Count with Fiducial Cut", 10, -0.5, 9.5);
- fiducialEnergyPlot = aida.histogram1D(plotHitsDir + triggerType + "/"+calibratedHitCollectionName + " Hit Energy with Fiducial Cut", 100, -0.1, maxE);
+ fiducialEnergyPlot = aida.histogram1D(plotHitsDir + triggerType + "/"+calibratedHitCollectionName + " Hit Energy with Fiducial Cut", 100, -0.1, beamEnergy*maxFactor);
}
// Setup cluster plots
clusterCountPlot = aida.histogram1D(plotClustersDir + triggerType + "/"+clusterCollectionName + " Cluster Count per Event", 10, -0.5, 9.5);
clusterSizePlot = aida.histogram1D(plotClustersDir + triggerType + "/"+clusterCollectionName + " Cluster Size", 10, -0.5, 9.5);
- clusterEnergyPlot = aida.histogram1D(plotClustersDir + triggerType + "/"+clusterCollectionName + " Cluster Energy", 100, -0.1, maxE);
+ clusterEnergyPlot = aida.histogram1D(plotClustersDir + triggerType + "/"+clusterCollectionName + " Cluster Energy", 100, -0.1, beamEnergy*maxFactor);
clusterTimes = aida.histogram1D(plotClustersDir + triggerType + "/"+clusterCollectionName + " Cluster Seed Times", 400, 0, 4.0 * 50);
clusterTimeMean = aida.histogram1D(plotClustersDir + triggerType + "/"+clusterCollectionName + " Cluster Time Mean", 400, 0, 4.0 * 50);
clusterTimeSigma = aida.histogram1D(plotClustersDir + triggerType + "/"+clusterCollectionName + " Cluster Time Sigma", 100, 0, 10);
- twoclusterTotEnergy = aida.histogram1D(plotClustersDir + triggerType + "/"+clusterCollectionName + " Two Cluster Energy Sum", 100, 0, maxE);
- twoclusterEnergyAsymmetry = aida.histogram1D(plotClustersDir + triggerType + "/"+clusterCollectionName + " Two Cluster Energy Asymmetry", 100, 0, 1.0);
- energyVsT = aida.histogram2D(plotClustersDir + triggerType + "/"+clusterCollectionName + " Energy vs time", 400, 0.0, 200.0, 100, -0.1, maxE);
+ twoclusterTotEnergy = aida.histogram1D(plotClustersDir + triggerType + "/"+clusterCollectionName + " Two Cluster Energy Sum", 100, 0, beamEnergy*maxFactor);
+ twoclusterEnergyAsymmetry = aida.histogram1D(plotClustersDir + triggerType + "/"+clusterCollectionName + " Two Cluster Energy Asymmetry", 100, 0, beamEnergy*maxFactor);
+ energyVsT = aida.histogram2D(plotClustersDir + triggerType + "/"+clusterCollectionName + " Energy vs time", 400, 0.0, 200.0, 100, -0.1, beamEnergy*maxFactor);
xVsY = aida.histogram2D(plotClustersDir + triggerType + "/"+clusterCollectionName + " X vs Y (NHits >1)", 200, -200.0, 200.0, 85, -85.0, 85.0);
- energyVsX = aida.histogram2D(plotClustersDir + triggerType + "/"+clusterCollectionName + " Energy vs X", 50, 0, 1.6, 50, .0, 200.0);
- energyVsY = aida.histogram2D(plotClustersDir + triggerType + "/"+clusterCollectionName + " Energy vs Y", 50, 0, 1.6, 50, 20.0, 85.0);
- pairsE1vsE2 = aida.histogram2D(plotClustersDir + triggerType + "/"+clusterCollectionName + "Pair E1 vs E2", 50, 0, 2, 50, 0, 2);
+ energyVsX = aida.histogram2D(plotClustersDir + triggerType + "/"+clusterCollectionName + " Energy vs X", 50, 0, maxFactor*beamEnergy, 50, .0, 200.0);
+ energyVsY = aida.histogram2D(plotClustersDir + triggerType + "/"+clusterCollectionName + " Energy vs Y", 50, 0, maxFactor*beamEnergy, 50, 20.0, 85.0);
+ pairsE1vsE2 = aida.histogram2D(plotClustersDir + triggerType + "/"+clusterCollectionName + "Pair E1 vs E2", 50, 0, beamEnergy*maxFactor, 50, 0, beamEnergy*maxFactor);
pairsT1vsT2 = aida.histogram2D(plotClustersDir + triggerType + "/"+clusterCollectionName + "Pair T1 vs T2", 200, 0, 100, 200, 0, 100);
pairsDeltaT = aida.histogram1D(plotClustersDir + triggerType + "/" + clusterCollectionName + " Pair Time Difference", 100, -20.0, 20.0);
fiducialClusterCountPlot = aida.histogram1D(plotClustersDir + triggerType + "/"+plotFidCutDir + clusterCollectionName + " Cluster Count with Fiducal Cut", 10, -0.5, 9.5);
fiducialClusterSizePlot = aida.histogram1D(plotClustersDir+ triggerType + "/" +plotFidCutDir + clusterCollectionName + " Cluster Size with Fiducal Cut", 10, -0.5, 9.5);
- fiducialClusterEnergyPlot = aida.histogram1D(plotClustersDir + triggerType + "/"+plotFidCutDir + clusterCollectionName + " Cluster Energy with Fiducal Cut", 100, -0.1, maxE);
- fiducialenergyVsY = aida.histogram2D(plotClustersDir + triggerType + "/"+plotFidCutDir + clusterCollectionName + " Energy vs Y with Fiducial Cuts", 50, 0, 1.6, 50, 45.0, 85.0);
- fiducialenergyVsX = aida.histogram2D(plotClustersDir+ triggerType + "/" +plotFidCutDir + clusterCollectionName + " Energy vs X with Fiducial Cuts", 50, 0, 1.6, 50, 0.0, 200.0);
+ fiducialClusterEnergyPlot = aida.histogram1D(plotClustersDir + triggerType + "/"+plotFidCutDir + clusterCollectionName + " Cluster Energy with Fiducal Cut", 100, -0.1, beamEnergy*maxFactor);
+ fiducialenergyVsY = aida.histogram2D(plotClustersDir + triggerType + "/"+plotFidCutDir + clusterCollectionName + " Energy vs Y with Fiducial Cuts", 50, 0, beamEnergy*maxFactor, 50, 45.0, 85.0);
+ fiducialenergyVsX = aida.histogram2D(plotClustersDir+ triggerType + "/" +plotFidCutDir + clusterCollectionName + " Energy vs X with Fiducial Cuts", 50, 0, beamEnergy*maxFactor, 50, 0.0, 200.0);
}
Modified: java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/FinalStateMonitoring.java
=============================================================================
--- java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/FinalStateMonitoring.java (original)
+++ java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/FinalStateMonitoring.java Tue Feb 16 13:35:43 2016
@@ -62,7 +62,7 @@
private final String plotDir = "FinalStateParticles/";
double beamEnergy = 1.05; //GeV
double maxFactor = 1.5;
- double feeMomentumCut = 0.8; //GeV
+ double feeMomentumCut = 0.75; //this number, multiplied by the beam energy, is the actual cut
IHistogram1D elePx;
IHistogram1D elePy;
@@ -97,6 +97,10 @@
/* number of unassocaited tracks/event */
IHistogram1D nUnAssTracksHisto;
+
+ public void setBeamEnergy(double e){
+ this.beamEnergy = e;
+ }
public void setFinalStateParticlesColName(String fsp) {
this.finalStateParticlesColName = fsp;
}
@@ -111,24 +115,24 @@
/* Final State Particle Quantities */
/* plot electron & positron momentum separately */
- elePx = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "Electron Px (GeV)", 100, -0.1, 0.200);
- elePy = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "Electron Py (GeV)", 100, -0.1, 0.1);
+ elePx = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "Electron Px (GeV)", 100, -0.1*beamEnergy, 0.200*beamEnergy);
+ elePy = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "Electron Py (GeV)", 100, -0.1*beamEnergy, 0.1*beamEnergy);
elePz = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "Electron Pz (GeV)", 100, 0, beamEnergy * maxFactor);
- elePzBeam = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "Beam Electrons Total P (GeV)", 100, feeMomentumCut, beamEnergy * maxFactor);
- elePzBeamTop = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "Beam Electrons Total P (GeV): Top", 100, feeMomentumCut, beamEnergy * maxFactor);
- elePzBeamBottom = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "Beam Electrons Total P (GeV): Bottom", 100, feeMomentumCut, beamEnergy * maxFactor);
+ elePzBeam = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "Beam Electrons Total P (GeV)", 100, feeMomentumCut*beamEnergy, beamEnergy * maxFactor);
+ elePzBeamTop = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "Beam Electrons Total P (GeV): Top", 100, feeMomentumCut*beamEnergy, beamEnergy * maxFactor);
+ elePzBeamBottom = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "Beam Electrons Total P (GeV): Bottom", 100, feeMomentumCut*beamEnergy, beamEnergy * maxFactor);
elePTop = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "Electron Total P (GeV): Top", 100, 0, beamEnergy * maxFactor);
elePBottom = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "Electron Total P (GeV): Bottom", 100, 0, beamEnergy * maxFactor);
- posPx = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "Positron Px (GeV)", 50, -0.1, 0.200);
- posPy = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "Positron Py (GeV)", 50, -0.1, 0.1);
+ posPx = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "Positron Px (GeV)", 50, -0.1*beamEnergy, 0.200*beamEnergy);
+ posPy = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "Positron Py (GeV)", 50, -0.1*beamEnergy, 0.1*beamEnergy);
posPz = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "Positron Pz (GeV)", 50, 0, beamEnergy * maxFactor);
posPTop = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "Positron Total P (GeV): Top", 100, 0, beamEnergy * maxFactor);
posPBottom = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "Positron Total P (GeV): Bottom", 100, 0, beamEnergy * maxFactor);
/* photon quanties (...right now, just unassociated clusters) */
nPhotonsHisto = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "Number of photons per event", 15, 0, 15);
- enePhoton = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "Photon Energy (GeV)", 50, 0, 2.4);
+ enePhoton = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "Photon Energy (GeV)", 50, 0, 2.4*beamEnergy);
xPhoton = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "Photon X position (mm)", 50, -200, 200);
yPhoton = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "Photon Y position (mm)", 50, -100, 100);
Modified: java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/TridentMonitoring.java
=============================================================================
--- java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/TridentMonitoring.java (original)
+++ java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/TridentMonitoring.java Tue Feb 16 13:35:43 2016
@@ -74,6 +74,36 @@
private final static Logger LOGGER = Logger.getLogger(TridentMonitoring.class.getPackage().getName());
private double ebeam = 1.05;
+
+ public void setBeamEnergy(double ebeam){
+ this.ebeam = ebeam;
+
+ plotsMinMass = 0.03 * ebeam;
+ plotsMaxMass = 0.04 * ebeam;
+
+
+ //v0 plot ranges
+ v0PzMax = 1.25 * ebeam;//GeV
+ v0PzMin = 0.1;// GeV
+ v0PyMax = 0.04 * ebeam;//GeV absolute value
+ v0PxMax = 0.04 * ebeam;//GeV absolute value
+
+ //v0 cuts
+ v0PzMaxCut = 1.25 * ebeam;//GeV
+ v0PzMinCut = 0.1;// GeV
+ v0PyCut = 0.04 * ebeam;//GeV absolute value
+ v0PxCut = 0.04 * ebeam;//GeV absolute value
+
+ // track quality cuts
+ beamPCut = 0.85 * ebeam;
+ minPCut = 0.05;
+// private double trkPyMax = 0.2;
+// private double trkPxMax = 0.2;
+ radCut = 0.8 * ebeam;
+
+
+ }
+
private final BasicHep3Matrix beamAxisRotation = new BasicHep3Matrix();
// private static final int nCuts = 9;
// private final String[] cutNames = {"Trk Quality",
@@ -216,8 +246,8 @@
private final IHistogram1D[][] cutVertexZ = new IHistogram1D[Cut.nCuts][2];
private final IHistogram2D[][] cutVertexZVsMass = new IHistogram2D[Cut.nCuts][2];
- private final double plotsMinMass = 0.03 * ebeam;
- private final double plotsMaxMass = 0.04 * ebeam;
+ private double plotsMinMass = 0.03 * ebeam;
+ private double plotsMaxMass = 0.04 * ebeam;
//clean up event first
private final int nTrkMax = 5;
@@ -228,29 +258,29 @@
private final double maxVertChi2 = 7.0;
//v0 plot ranges
- private final double v0PzMax = 1.25 * ebeam;//GeV
- private final double v0PzMin = 0.1;// GeV
- private final double v0PyMax = 0.04;//GeV absolute value
- private final double v0PxMax = 0.04;//GeV absolute value
+ private double v0PzMax = 1.25 * ebeam;//GeV
+ private double v0PzMin = 0.1;// GeV
+ private double v0PyMax = 0.04 * ebeam;//GeV absolute value
+ private double v0PxMax = 0.04 * ebeam;//GeV absolute value
private final double v0VzMax = 50.0;// mm from target...someday make mass dependent
private final double v0VyMax = 2.0;// mm from target...someday make mass dependent
private final double v0VxMax = 2.0;// mm from target...someday make mass dependent
//v0 cuts
- private final double v0PzMaxCut = 1.25 * ebeam;//GeV
- private final double v0PzMinCut = 0.1;// GeV
- private final double v0PyCut = 0.04;//GeV absolute value
- private final double v0PxCut = 0.04;//GeV absolute value
+ private double v0PzMaxCut = 1.25 * ebeam;//GeV
+ private double v0PzMinCut = 0.1;// GeV
+ private double v0PyCut = 0.04 * ebeam;//GeV absolute value
+ private double v0PxCut = 0.04 * ebeam;//GeV absolute value
private final double v0VzCut = 50.0;// mm from target...someday make mass dependent
private final double v0VyCut = 2.0;// mm from target...someday make mass dependent
private final double v0VxCut = 2.0;// mm from target...someday make mass dependent
// track quality cuts
- private final double beamPCut = 0.85;
- private final double minPCut = 0.05;
+ private double beamPCut = 0.85 * ebeam;
+ private double minPCut = 0.05;
// private double trkPyMax = 0.2;
// private double trkPxMax = 0.2;
- private final double radCut = 0.8 * ebeam;
+ private double radCut = 0.8 * ebeam;
private final double trkTimeDiff = 5.0;
private final double clusterTimeDiffCut = 2.5;
@@ -268,9 +298,7 @@
private float nRecoV0 = 0;
private final float[] nPassCut = new float[Cut.nCuts];
- public void setEbeam(double ebeam) {
- this.ebeam = ebeam;
- }
+
@Override
protected void detectorChanged(Detector detector) {
Modified: java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/V0Monitoring.java
=============================================================================
--- java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/V0Monitoring.java (original)
+++ java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/dataquality/V0Monitoring.java Tue Feb 16 13:35:43 2016
@@ -150,19 +150,40 @@
private final BasicHep3Matrix beamAxisRotation = new BasicHep3Matrix();
double maxFactor = 1.25;
- double feeMomentumCut = 0.8; //GeV
-
- double v0ESumMinCut = 0.8 * beamEnergy;
- double v0ESumMaxCut = 1.25 * beamEnergy;
- double v0MaxPCut = 1.1;//GeV
- double molPSumMin = 0.85;
- double molPSumMax = 1.3;
- double beambeamCut = 0.85;
+
+
double thetaMax = 0.06;
double thetaMin = 0.015;
+
+ public void setBeamEnergy(double e){
+ this.beamEnergy = e;
+ feeMomentumCut = 0.75*beamEnergy; //GeV
+
+ v0ESumMinCut = 0.8 * beamEnergy;
+ v0ESumMaxCut = 1.25 * beamEnergy;
+ /*double v0MaxPCut = 1.1;//GeV
+ double molPSumMin = 0.85;
+ double molPSumMax = 1.3;
+ double beambeamCut = 0.85;
+ */
+ v0MaxPCut = 1.05*beamEnergy;//GeV
+ molPSumMin = 0.80*beamEnergy;
+ molPSumMax = 1.25*beamEnergy;
+ beambeamCut = 0.80*beamEnergy;
+
+ }
+
+ double feeMomentumCut, v0ESumMinCut, v0MaxPCut, v0ESumMaxCut,
+ molPSumMin, molPSumMax, beambeamCut;
+
+
@Override
protected void detectorChanged(Detector detector) {
+ setBeamEnergy(beamEnergy);
+
+
+
beamAxisRotation.setActiveEuler(Math.PI / 2, -0.0305, -Math.PI / 2);
LOGGER.info("Setting up the plotter");
@@ -171,10 +192,13 @@
String trkType = "SeedTrack/";
if (isGBL)
trkType = "GBLTrack/";
+
+ double maxMass = .2*beamEnergy;
+ double maxMassMoller = .1*Math.sqrt(beamEnergy);
/* V0 Quantities */
/* Mass, vertex, chi^2 of fit */
/* unconstrained */
- unconMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/" + "Invariant Mass (GeV)", 100, 0, 0.200);
+ unconMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/" + "Invariant Mass (GeV)", 100, 0, maxMass);
unconVx = aida.histogram1D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/" + "Vx (mm)", 50, -10, 10);
unconVy = aida.histogram1D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/" + "Vy (mm)", 50, -10, 10);
unconVz = aida.histogram1D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/" + "Vz (mm)", 50, -50, 50);
@@ -182,7 +206,7 @@
unconVzVsChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/" + "Vz vs. Chi2", 25, 0, 25, 50, -50, 50);
unconChi2VsTrkChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/" + "Chi2 vs. total track chi2", 50, 0, 50, 50, 0, 25);
/* beamspot constrained */
- bsconMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Mass (GeV)", 100, 0, 0.200);
+ bsconMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Mass (GeV)", 100, 0, maxMass);
bsconVx = aida.histogram1D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Vx (mm)", 50, -10, 10);
bsconVy = aida.histogram1D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Vy (mm)", 50, -10, 10);
bsconVz = aida.histogram1D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Vz (mm)", 50, -50, 50);
@@ -190,7 +214,7 @@
bsconVzVsChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Vz vs. Chi2", 25, 0, 25, 50, -50, 50);
bsconChi2VsTrkChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Chi2 vs. total track chi2", 50, 0, 50, 50, 0, 25);
/* target constrained */
- tarconMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/" + "Mass (GeV)", 100, 0, 0.200);
+ tarconMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/" + "Mass (GeV)", 100, 0, maxMass);
tarconVx = aida.histogram1D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/" + "Vx (mm)", 50, -1, 1);
tarconVy = aida.histogram1D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/" + "Vy (mm)", 50, -1, 1);
tarconVz = aida.histogram1D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/" + "Vz (mm)", 50, -10, 10);
@@ -206,9 +230,9 @@
pEleVspPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "P(e) vs P(p)", 50, 0, beamEnergy * maxFactor, 50, 0, beamEnergy * maxFactor);
pEleVspPosWithCut = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "P(e) vs P(p): Radiative", 50, 0, beamEnergy * maxFactor, 50, 0, beamEnergy * maxFactor);
- pyEleVspyPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Py(e) vs Py(p)", 50, -0.04, 0.04, 50, -0.04, 0.04);
- pxEleVspxPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Px(e) vs Px(p)", 50, -0.04, 0.04, 50, -0.04, 0.04);
- VtxZVsMass = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vz vs Mass", 50, 0, 0.15, 50, -50, 80);
+ pyEleVspyPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Py(e) vs Py(p)", 50, -0.04*beamEnergy, 0.04*beamEnergy, 50, -0.04*beamEnergy, 0.04*beamEnergy);
+ pxEleVspxPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Px(e) vs Px(p)", 50, -0.04*beamEnergy, 0.04*beamEnergy, 50, -0.04*beamEnergy, 0.04*beamEnergy);
+ VtxZVsMass = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vz vs Mass", 50, 0, maxMass, 50, -50, 80);
VtxXVsVtxZ = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vx vs Vz", 100, -10, 10, 100, -50, 80);
VtxYVsVtxZ = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vy vs Vz", 100, -5, 5, 100, -50, 80);
VtxXVsVtxY = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vx vs Vy", 100, -10, 10, 100, -5, 5);
@@ -221,13 +245,13 @@
VtxZVsTrkChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Vz vs Track Chi2", 50, 0, 50, 50, -50, 80);
pEleVspEle = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(e) vs P(e)", 50, 0, beamEnergy * maxFactor, 50, 0, beamEnergy * maxFactor);
phiEleVsphiEle = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/phi(e) vs phi(e)", 50, -Math.PI, Math.PI, 50, -Math.PI, Math.PI);
- pyEleVspyEle = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Py(e) vs Py(e)", 50, -0.04, 0.04, 50, -0.04, 0.04);
- pxEleVspxEle = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Px(e) vs Px(e)", 50, -0.02, 0.06, 50, -0.02, 0.06);
+ pyEleVspyEle = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Py(e) vs Py(e)", 50, -0.04*beamEnergy, 0.04*beamEnergy, 50, -0.04*beamEnergy, 0.04*beamEnergy);
+ pxEleVspxEle = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Px(e) vs Px(e)", 50, -0.02*beamEnergy, 0.06*beamEnergy, 50, -0.02*beamEnergy, 0.06*beamEnergy);
pEleVspEleNoBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(e) vs P(e) NoBeam", 50, 0, beambeamCut, 50, 0, beambeamCut);
pEleVspEleMoller = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(e) vs P(e) Moller", 50, 0, beambeamCut, 50, 0, beambeamCut);
pEleVspEleBeamBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(e) vs P(e) BeamBeam", 50, beambeamCut, beamEnergy * maxFactor, 50, beambeamCut, beamEnergy * maxFactor);
- pyEleVspyEleNoBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Py(e) vs Py(e) NoBeam", 50, -0.04, 0.04, 50, -0.04, 0.04);
- pxEleVspxEleNoBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Px(e) vs Px(e) NoBeam", 50, -0.02, 0.06, 50, -0.02, 0.06);
+ pyEleVspyEleNoBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Py(e) vs Py(e) NoBeam", 50, -0.04*beamEnergy, 0.04*beamEnergy, 50, -0.04*beamEnergy, 0.04*beamEnergy);
+ pxEleVspxEleNoBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Px(e) vs Px(e) NoBeam", 50, -0.02*beamEnergy, 0.06*beamEnergy, 50, -0.02*beamEnergy, 0.06*beamEnergy);
sumChargeHisto = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Total Charge of Event", 5, -2, 3);
numChargeHisto = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Number of Charged Particles", 6, 0, 6);
@@ -236,8 +260,8 @@
pEleVsthetaBeamBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(e) vs Theta BeamBeam", 50, beambeamCut, beamEnergy * maxFactor, 50, thetaMin, thetaMax);
thetaEleVsthetaBeamBeam = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Theta vs Theta BeamBeam", 50, thetaMin, thetaMax, 50, thetaMin, thetaMax);
- mollerMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Mass (GeV)", 100, 0, 0.100);
- mollerMassVtxCut = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Mass (GeV): VtxCut", 100, 0, 0.100);
+ mollerMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Mass (GeV)", 100, 0, maxMassMoller);
+ mollerMassVtxCut = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Mass (GeV): VtxCut", 100, 0, maxMassMoller);
mollerVx = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Vx (mm)", 50, -10, 10);
mollerVy = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Vy (mm)", 50, -2, 2);
mollerVz = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Vz (mm)", 50, -50, 50);
@@ -246,8 +270,8 @@
mollerYVsVtxZ = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Vy vs Vz", 100, -2, 2, 100, -50, 50);
mollerXVsVtxY = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Vx vs Vy", 100, -5, 5, 100, -2, 2);
- mollerUx = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Pair Momentum Direction Ux", 100, .025, .035);
- mollerUy = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Pair Momentum Direction Uy", 100, -.005, .005);
+ mollerUx = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Pair Momentum Direction Ux", 100, .015, .045);
+ mollerUy = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Pair Momentum Direction Uy", 100, -.01, .01);
@@ -471,8 +495,10 @@
mollerYVsVtxZ.fill(bv.getPosition().y(), bv.getPosition().z());
mollerXVsVtxY.fill(bv.getPosition().x(), bv.getPosition().y());
- mollerUx.fill((p1.x()+p2.x())/(p1.z()+p2.z()));
- mollerUy.fill((p1.y()+p2.y())/(p1.z()+p2.z()));
+ double ux = (ele1.getMomentum().x()+ele2.getMomentum().x())/(ele1.getMomentum().z()+ele2.getMomentum().z());
+ double uy = (ele1.getMomentum().y()+ele2.getMomentum().y())/(ele1.getMomentum().z()+ele2.getMomentum().z());
+ mollerUx.fill(ux);
+ mollerUy.fill(uy);
if (Math.abs(bv.getPosition().x()) < 2
&& Math.abs(bv.getPosition().y()) < 0.5) {
Modified: java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/ecal/FEEClusterPlotter.java
=============================================================================
--- java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/ecal/FEEClusterPlotter.java (original)
+++ java/branches/jeremy-dev/analysis/src/main/java/org/hps/analysis/ecal/FEEClusterPlotter.java Tue Feb 16 13:35:43 2016
@@ -52,7 +52,8 @@
aida.tree().cd("/");
for (EcalChannel cc : ecalConditions.getChannelCollection()) {
- aida.histogram1D(getHistoName(cc),200,0.5,1.3);
+ //aida.histogram1D(getHistoName(cc),200,0.5,1.3);
+ aida.histogram1D(getHistoName(cc),200,0.6,2.8);
}
}
@@ -88,8 +89,9 @@
double seedE = seed.getCorrectedEnergy();
double clusE = clus.getEnergy();
double time = seed.getTime();
-
- if ((seedE/clusE > 0.6) && seedE >0.45 && time>30 && time <70){
+
+ //if ((seedE/clusE > 0.6) && seedE >0.45 && time>30 && time <70){
+ if ((seedE/clusE > 0.6) && seedE >0.6 && time>30 && time <70){
EcalChannel cc = findChannel(seed);
aida.histogram1D(getHistoName(cc)).fill(clusE);
Modified: java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-1_5mm-v4-4/HPS-PhysicsRun2016-1_5mm-v4-4.lcdd
=============================================================================
--- java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-1_5mm-v4-4/HPS-PhysicsRun2016-1_5mm-v4-4.lcdd (original)
+++ java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-1_5mm-v4-4/HPS-PhysicsRun2016-1_5mm-v4-4.lcdd Tue Feb 16 13:35:43 2016
@@ -8335,7 +8335,7 @@
</setup>
</gdml>
<fields>
- <box_dipole name="AnalyzingDipole" lunit="mm" funit="tesla" x="21.17" y="0.0" z="457.2" dx="500.0" dy="500.0" dz="540.0" bx="0.0" by="-0.5" bz="0.0" />
+ <box_dipole name="AnalyzingDipole" lunit="mm" funit="tesla" x="21.17" y="0.0" z="457.2" dx="500.0" dy="500.0" dz="540.0" bx="0.0" by="-0.524" bz="0.0" />
</fields>
</lcdd>
Modified: java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-1_5mm-v4-4/compact.xml
=============================================================================
--- java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-1_5mm-v4-4/compact.xml (original)
+++ java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-1_5mm-v4-4/compact.xml Tue Feb 16 13:35:43 2016
@@ -33,7 +33,7 @@
<constant name="dipoleMagnetHeight" value="100*cm" />
<constant name="dipoleMagnetWidth" value="100*cm" />
<constant name="dipoleMagnetLength" value="108*cm" />
- <constant name="constBFieldY" value="-0.5" />
+ <constant name="constBFieldY" value="-0.524" />
<!-- ECAL crystal dimensions -->
@@ -91,17 +91,17 @@
<constant name="z02b" value="0+157.5+3.685" />
<!-- Global Millepede tweak parameters (survey constraints)-->
- <!--
- <constant name="dOmega_top" value="1.56e-5" />
- <constant name="dLambda_top" value="0.16e-3" />
- <constant name="dPhi_top" value="6.87e-3" />
- <constant name="dD0_top" value="-0.72" />
- <constant name="dZ0_top" value="-0.13" />
- <constant name="dOmega_bot" value="2.32e-5" />
- <constant name="dLambda_bot" value="-0.06e-3" />
- <constant name="dPhi_bot" value="17.92e-3" />
- <constant name="dD0_bot" value="-6.71" />
- <constant name="dZ0_bot" value="0.04" />
+ <!--
+ <constant name="dOmega_top" value="1.56e-5" />
+ <constant name="dLambda_top" value="0.16e-3" />
+ <constant name="dPhi_top" value="6.87e-3" />
+ <constant name="dD0_top" value="-0.72" />
+ <constant name="dZ0_top" value="-0.13" />
+ <constant name="dOmega_bot" value="2.32e-5" />
+ <constant name="dLambda_bot" value="-0.06e-3" />
+ <constant name="dPhi_bot" value="17.92e-3" />
+ <constant name="dD0_bot" value="-6.71" />
+ <constant name="dZ0_bot" value="0.04" />
-->
<!-- Global Millepede tweak parameters (mixed constraints: FEE momentum set at 1.05 GeV, top and bottom must agree on d0 and z0)-->
@@ -117,17 +117,17 @@
<constant name="dZ0_bot" value="0.116788238356" />
<!-- Global Millepede tweak parameters (external constraints)-->
- <!--
- <constant name="dOmega_top" value="0.1e-5" />
- <constant name="dLambda_top" value="0.5e-3" />
- <constant name="dPhi_top" value="1.5e-3" />
- <constant name="dD0_top" value="0.8" />
- <constant name="dZ0_top" value="-0.15" />
- <constant name="dOmega_bot" value="2.4e-5" />
- <constant name="dLambda_bot" value="1.5e-3" />
- <constant name="dPhi_bot" value="17e-3" />
- <constant name="dD0_bot" value="-5.6" />
- <constant name="dZ0_bot" value="0.2" />
+ <!--
+ <constant name="dOmega_top" value="0.1e-5" />
+ <constant name="dLambda_top" value="0.5e-3" />
+ <constant name="dPhi_top" value="1.5e-3" />
+ <constant name="dD0_top" value="0.8" />
+ <constant name="dZ0_top" value="-0.15" />
+ <constant name="dOmega_bot" value="2.4e-5" />
+ <constant name="dLambda_bot" value="1.5e-3" />
+ <constant name="dPhi_bot" value="17e-3" />
+ <constant name="dD0_bot" value="-5.6" />
+ <constant name="dZ0_bot" value="0.2" />
-->
</define>
@@ -781,24 +781,24 @@
</millepede_constants>
</detector>
-<!--
- <detector id="30" name="TrackerFieldDef" type="HPSTracker2" readout="TrackerHitsFieldDef" >
- <comment>Boundary planes for magnetic field, also used as scoring planes</comment>
- <module name="TestRunModuleFieldDef">
- <box x="416.052" y="177.8" />
- <module_component thickness="scoringThickness" material = "Vacuum" sensitive="true"/>
- </module>
- <module name="TestRunModuleFieldDefFlare2">
- <box x="416.052" y="177.8+(327.66-177.8)*(dipoleMagnetPositionZ+dipoleMagnetLength/2-913.378)/385.572" />
- <module_component thickness="scoringThickness" material = "Vacuum" sensitive="true"/>
- </module>
- <layer id="1">
- <module_placement name="TestRunModuleFieldDef" id="0" x="dipoleMagnetPositionX" y="0" z="dipoleMagnetPositionZ-dipoleMagnetLength/2" rx="0" ry="0" rz="-PI/2"/>
- </layer>
- <layer id="2">
- <module_placement name="TestRunModuleFieldDefFlare2" id="0" x="dipoleMagnetPositionX" y="0" z="dipoleMagnetPositionZ+dipoleMagnetLength/2" rx="0" ry="0" rz="-PI/2"/>
- </layer>
- </detector>
+<!--
+ <detector id="30" name="TrackerFieldDef" type="HPSTracker2" readout="TrackerHitsFieldDef" >
+ <comment>Boundary planes for magnetic field, also used as scoring planes</comment>
+ <module name="TestRunModuleFieldDef">
+ <box x="416.052" y="177.8" />
+ <module_component thickness="scoringThickness" material = "Vacuum" sensitive="true"/>
+ </module>
+ <module name="TestRunModuleFieldDefFlare2">
+ <box x="416.052" y="177.8+(327.66-177.8)*(dipoleMagnetPositionZ+dipoleMagnetLength/2-913.378)/385.572" />
+ <module_component thickness="scoringThickness" material = "Vacuum" sensitive="true"/>
+ </module>
+ <layer id="1">
+ <module_placement name="TestRunModuleFieldDef" id="0" x="dipoleMagnetPositionX" y="0" z="dipoleMagnetPositionZ-dipoleMagnetLength/2" rx="0" ry="0" rz="-PI/2"/>
+ </layer>
+ <layer id="2">
+ <module_placement name="TestRunModuleFieldDefFlare2" id="0" x="dipoleMagnetPositionX" y="0" z="dipoleMagnetPositionZ+dipoleMagnetLength/2" rx="0" ry="0" rz="-PI/2"/>
+ </layer>
+ </detector>
-->
<detector id="29" name="ECalScoring" type="HPSTracker2" readout="TrackerHitsECal" insideTrackingVolume="false">
@@ -864,9 +864,9 @@
</fields>
-->
- <fields>
- <field type="BoxDipole" name="AnalyzingDipole" x="dipoleMagnetPositionX" y="0*cm" z="dipoleMagnetPositionZ" dx="dipoleMagnetWidth/2.0" dy="dipoleMagnetHeight/2.0" dz="dipoleMagnetLength/2.0" bx="0.0" by="constBFieldY" bz="0.0" />
- </fields>
+ <fields>
+ <field type="BoxDipole" name="AnalyzingDipole" x="dipoleMagnetPositionX" y="0*cm" z="dipoleMagnetPositionZ" dx="dipoleMagnetWidth/2.0" dy="dipoleMagnetHeight/2.0" dz="dipoleMagnetLength/2.0" bx="0.0" by="constBFieldY" bz="0.0" />
+ </fields>
<includes>
<gdmlFile file="gdml/ecal_vacuum_flange_complete_v1.gdml" />
Modified: java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-2mm-v4-4/HPS-PhysicsRun2016-2mm-v4-4.lcdd
=============================================================================
--- java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-2mm-v4-4/HPS-PhysicsRun2016-2mm-v4-4.lcdd (original)
+++ java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-2mm-v4-4/HPS-PhysicsRun2016-2mm-v4-4.lcdd Tue Feb 16 13:35:43 2016
@@ -8335,7 +8335,7 @@
</setup>
</gdml>
<fields>
- <box_dipole name="AnalyzingDipole" lunit="mm" funit="tesla" x="21.17" y="0.0" z="457.2" dx="500.0" dy="500.0" dz="540.0" bx="0.0" by="-0.5" bz="0.0" />
+ <box_dipole name="AnalyzingDipole" lunit="mm" funit="tesla" x="21.17" y="0.0" z="457.2" dx="500.0" dy="500.0" dz="540.0" bx="0.0" by="-0.524" bz="0.0" />
</fields>
</lcdd>
Modified: java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-2mm-v4-4/compact.xml
=============================================================================
--- java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-2mm-v4-4/compact.xml (original)
+++ java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-2mm-v4-4/compact.xml Tue Feb 16 13:35:43 2016
@@ -33,7 +33,7 @@
<constant name="dipoleMagnetHeight" value="100*cm" />
<constant name="dipoleMagnetWidth" value="100*cm" />
<constant name="dipoleMagnetLength" value="108*cm" />
- <constant name="constBFieldY" value="-0.5" />
+ <constant name="constBFieldY" value="-0.524" />
<!-- ECAL crystal dimensions -->
@@ -91,17 +91,17 @@
<constant name="z02b" value="0+157.5+3.685" />
<!-- Global Millepede tweak parameters (survey constraints)-->
- <!--
- <constant name="dOmega_top" value="1.56e-5" />
- <constant name="dLambda_top" value="0.16e-3" />
- <constant name="dPhi_top" value="6.87e-3" />
- <constant name="dD0_top" value="-0.72" />
- <constant name="dZ0_top" value="-0.13" />
- <constant name="dOmega_bot" value="2.32e-5" />
- <constant name="dLambda_bot" value="-0.06e-3" />
- <constant name="dPhi_bot" value="17.92e-3" />
- <constant name="dD0_bot" value="-6.71" />
- <constant name="dZ0_bot" value="0.04" />
+ <!--
+ <constant name="dOmega_top" value="1.56e-5" />
+ <constant name="dLambda_top" value="0.16e-3" />
+ <constant name="dPhi_top" value="6.87e-3" />
+ <constant name="dD0_top" value="-0.72" />
+ <constant name="dZ0_top" value="-0.13" />
+ <constant name="dOmega_bot" value="2.32e-5" />
+ <constant name="dLambda_bot" value="-0.06e-3" />
+ <constant name="dPhi_bot" value="17.92e-3" />
+ <constant name="dD0_bot" value="-6.71" />
+ <constant name="dZ0_bot" value="0.04" />
-->
<!-- Global Millepede tweak parameters (mixed constraints: FEE momentum set at 1.05 GeV, top and bottom must agree on d0 and z0)-->
@@ -117,17 +117,17 @@
<constant name="dZ0_bot" value="0.116788238356" />
<!-- Global Millepede tweak parameters (external constraints)-->
- <!--
- <constant name="dOmega_top" value="0.1e-5" />
- <constant name="dLambda_top" value="0.5e-3" />
- <constant name="dPhi_top" value="1.5e-3" />
- <constant name="dD0_top" value="0.8" />
- <constant name="dZ0_top" value="-0.15" />
- <constant name="dOmega_bot" value="2.4e-5" />
- <constant name="dLambda_bot" value="1.5e-3" />
- <constant name="dPhi_bot" value="17e-3" />
- <constant name="dD0_bot" value="-5.6" />
- <constant name="dZ0_bot" value="0.2" />
+ <!--
+ <constant name="dOmega_top" value="0.1e-5" />
+ <constant name="dLambda_top" value="0.5e-3" />
+ <constant name="dPhi_top" value="1.5e-3" />
+ <constant name="dD0_top" value="0.8" />
+ <constant name="dZ0_top" value="-0.15" />
+ <constant name="dOmega_bot" value="2.4e-5" />
+ <constant name="dLambda_bot" value="1.5e-3" />
+ <constant name="dPhi_bot" value="17e-3" />
+ <constant name="dD0_bot" value="-5.6" />
+ <constant name="dZ0_bot" value="0.2" />
-->
</define>
@@ -781,24 +781,24 @@
</millepede_constants>
</detector>
-<!--
- <detector id="30" name="TrackerFieldDef" type="HPSTracker2" readout="TrackerHitsFieldDef" >
- <comment>Boundary planes for magnetic field, also used as scoring planes</comment>
- <module name="TestRunModuleFieldDef">
- <box x="416.052" y="177.8" />
- <module_component thickness="scoringThickness" material = "Vacuum" sensitive="true"/>
- </module>
- <module name="TestRunModuleFieldDefFlare2">
- <box x="416.052" y="177.8+(327.66-177.8)*(dipoleMagnetPositionZ+dipoleMagnetLength/2-913.378)/385.572" />
- <module_component thickness="scoringThickness" material = "Vacuum" sensitive="true"/>
- </module>
- <layer id="1">
- <module_placement name="TestRunModuleFieldDef" id="0" x="dipoleMagnetPositionX" y="0" z="dipoleMagnetPositionZ-dipoleMagnetLength/2" rx="0" ry="0" rz="-PI/2"/>
- </layer>
- <layer id="2">
- <module_placement name="TestRunModuleFieldDefFlare2" id="0" x="dipoleMagnetPositionX" y="0" z="dipoleMagnetPositionZ+dipoleMagnetLength/2" rx="0" ry="0" rz="-PI/2"/>
- </layer>
- </detector>
+<!--
+ <detector id="30" name="TrackerFieldDef" type="HPSTracker2" readout="TrackerHitsFieldDef" >
+ <comment>Boundary planes for magnetic field, also used as scoring planes</comment>
+ <module name="TestRunModuleFieldDef">
+ <box x="416.052" y="177.8" />
+ <module_component thickness="scoringThickness" material = "Vacuum" sensitive="true"/>
+ </module>
+ <module name="TestRunModuleFieldDefFlare2">
+ <box x="416.052" y="177.8+(327.66-177.8)*(dipoleMagnetPositionZ+dipoleMagnetLength/2-913.378)/385.572" />
+ <module_component thickness="scoringThickness" material = "Vacuum" sensitive="true"/>
+ </module>
+ <layer id="1">
+ <module_placement name="TestRunModuleFieldDef" id="0" x="dipoleMagnetPositionX" y="0" z="dipoleMagnetPositionZ-dipoleMagnetLength/2" rx="0" ry="0" rz="-PI/2"/>
+ </layer>
+ <layer id="2">
+ <module_placement name="TestRunModuleFieldDefFlare2" id="0" x="dipoleMagnetPositionX" y="0" z="dipoleMagnetPositionZ+dipoleMagnetLength/2" rx="0" ry="0" rz="-PI/2"/>
+ </layer>
+ </detector>
-->
<detector id="29" name="ECalScoring" type="HPSTracker2" readout="TrackerHitsECal" insideTrackingVolume="false">
@@ -864,9 +864,9 @@
</fields>
-->
- <fields>
- <field type="BoxDipole" name="AnalyzingDipole" x="dipoleMagnetPositionX" y="0*cm" z="dipoleMagnetPositionZ" dx="dipoleMagnetWidth/2.0" dy="dipoleMagnetHeight/2.0" dz="dipoleMagnetLength/2.0" bx="0.0" by="constBFieldY" bz="0.0" />
- </fields>
+ <fields>
+ <field type="BoxDipole" name="AnalyzingDipole" x="dipoleMagnetPositionX" y="0*cm" z="dipoleMagnetPositionZ" dx="dipoleMagnetWidth/2.0" dy="dipoleMagnetHeight/2.0" dz="dipoleMagnetLength/2.0" bx="0.0" by="constBFieldY" bz="0.0" />
+ </fields>
<includes>
<gdmlFile file="gdml/ecal_vacuum_flange_complete_v1.gdml" />
Modified: java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-3mm-v4-4/HPS-PhysicsRun2016-3mm-v4-4.lcdd
=============================================================================
--- java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-3mm-v4-4/HPS-PhysicsRun2016-3mm-v4-4.lcdd (original)
+++ java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-3mm-v4-4/HPS-PhysicsRun2016-3mm-v4-4.lcdd Tue Feb 16 13:35:43 2016
@@ -8335,7 +8335,7 @@
</setup>
</gdml>
<fields>
- <box_dipole name="AnalyzingDipole" lunit="mm" funit="tesla" x="21.17" y="0.0" z="457.2" dx="500.0" dy="500.0" dz="540.0" bx="0.0" by="-0.5" bz="0.0" />
+ <box_dipole name="AnalyzingDipole" lunit="mm" funit="tesla" x="21.17" y="0.0" z="457.2" dx="500.0" dy="500.0" dz="540.0" bx="0.0" by="-0.524" bz="0.0" />
</fields>
</lcdd>
Modified: java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-3mm-v4-4/compact.xml
=============================================================================
--- java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-3mm-v4-4/compact.xml (original)
+++ java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-3mm-v4-4/compact.xml Tue Feb 16 13:35:43 2016
@@ -33,7 +33,7 @@
<constant name="dipoleMagnetHeight" value="100*cm" />
<constant name="dipoleMagnetWidth" value="100*cm" />
<constant name="dipoleMagnetLength" value="108*cm" />
- <constant name="constBFieldY" value="-0.5" />
+ <constant name="constBFieldY" value="-0.524" />
<!-- ECAL crystal dimensions -->
@@ -91,17 +91,17 @@
<constant name="z02b" value="0+157.5+3.685" />
<!-- Global Millepede tweak parameters (survey constraints)-->
- <!--
- <constant name="dOmega_top" value="1.56e-5" />
- <constant name="dLambda_top" value="0.16e-3" />
- <constant name="dPhi_top" value="6.87e-3" />
- <constant name="dD0_top" value="-0.72" />
- <constant name="dZ0_top" value="-0.13" />
- <constant name="dOmega_bot" value="2.32e-5" />
- <constant name="dLambda_bot" value="-0.06e-3" />
- <constant name="dPhi_bot" value="17.92e-3" />
- <constant name="dD0_bot" value="-6.71" />
- <constant name="dZ0_bot" value="0.04" />
+ <!--
+ <constant name="dOmega_top" value="1.56e-5" />
+ <constant name="dLambda_top" value="0.16e-3" />
+ <constant name="dPhi_top" value="6.87e-3" />
+ <constant name="dD0_top" value="-0.72" />
+ <constant name="dZ0_top" value="-0.13" />
+ <constant name="dOmega_bot" value="2.32e-5" />
+ <constant name="dLambda_bot" value="-0.06e-3" />
+ <constant name="dPhi_bot" value="17.92e-3" />
+ <constant name="dD0_bot" value="-6.71" />
+ <constant name="dZ0_bot" value="0.04" />
-->
<!-- Global Millepede tweak parameters (mixed constraints: FEE momentum set at 1.05 GeV, top and bottom must agree on d0 and z0)-->
@@ -117,17 +117,17 @@
<constant name="dZ0_bot" value="0.116788238356" />
<!-- Global Millepede tweak parameters (external constraints)-->
- <!--
- <constant name="dOmega_top" value="0.1e-5" />
- <constant name="dLambda_top" value="0.5e-3" />
- <constant name="dPhi_top" value="1.5e-3" />
- <constant name="dD0_top" value="0.8" />
- <constant name="dZ0_top" value="-0.15" />
- <constant name="dOmega_bot" value="2.4e-5" />
- <constant name="dLambda_bot" value="1.5e-3" />
- <constant name="dPhi_bot" value="17e-3" />
- <constant name="dD0_bot" value="-5.6" />
- <constant name="dZ0_bot" value="0.2" />
+ <!--
+ <constant name="dOmega_top" value="0.1e-5" />
+ <constant name="dLambda_top" value="0.5e-3" />
+ <constant name="dPhi_top" value="1.5e-3" />
+ <constant name="dD0_top" value="0.8" />
+ <constant name="dZ0_top" value="-0.15" />
+ <constant name="dOmega_bot" value="2.4e-5" />
+ <constant name="dLambda_bot" value="1.5e-3" />
+ <constant name="dPhi_bot" value="17e-3" />
+ <constant name="dD0_bot" value="-5.6" />
+ <constant name="dZ0_bot" value="0.2" />
-->
</define>
@@ -781,24 +781,24 @@
</millepede_constants>
</detector>
-<!--
- <detector id="30" name="TrackerFieldDef" type="HPSTracker2" readout="TrackerHitsFieldDef" >
- <comment>Boundary planes for magnetic field, also used as scoring planes</comment>
- <module name="TestRunModuleFieldDef">
- <box x="416.052" y="177.8" />
- <module_component thickness="scoringThickness" material = "Vacuum" sensitive="true"/>
- </module>
- <module name="TestRunModuleFieldDefFlare2">
- <box x="416.052" y="177.8+(327.66-177.8)*(dipoleMagnetPositionZ+dipoleMagnetLength/2-913.378)/385.572" />
- <module_component thickness="scoringThickness" material = "Vacuum" sensitive="true"/>
- </module>
- <layer id="1">
- <module_placement name="TestRunModuleFieldDef" id="0" x="dipoleMagnetPositionX" y="0" z="dipoleMagnetPositionZ-dipoleMagnetLength/2" rx="0" ry="0" rz="-PI/2"/>
- </layer>
- <layer id="2">
- <module_placement name="TestRunModuleFieldDefFlare2" id="0" x="dipoleMagnetPositionX" y="0" z="dipoleMagnetPositionZ+dipoleMagnetLength/2" rx="0" ry="0" rz="-PI/2"/>
- </layer>
- </detector>
+<!--
+ <detector id="30" name="TrackerFieldDef" type="HPSTracker2" readout="TrackerHitsFieldDef" >
+ <comment>Boundary planes for magnetic field, also used as scoring planes</comment>
+ <module name="TestRunModuleFieldDef">
+ <box x="416.052" y="177.8" />
+ <module_component thickness="scoringThickness" material = "Vacuum" sensitive="true"/>
+ </module>
+ <module name="TestRunModuleFieldDefFlare2">
+ <box x="416.052" y="177.8+(327.66-177.8)*(dipoleMagnetPositionZ+dipoleMagnetLength/2-913.378)/385.572" />
+ <module_component thickness="scoringThickness" material = "Vacuum" sensitive="true"/>
+ </module>
+ <layer id="1">
+ <module_placement name="TestRunModuleFieldDef" id="0" x="dipoleMagnetPositionX" y="0" z="dipoleMagnetPositionZ-dipoleMagnetLength/2" rx="0" ry="0" rz="-PI/2"/>
+ </layer>
+ <layer id="2">
+ <module_placement name="TestRunModuleFieldDefFlare2" id="0" x="dipoleMagnetPositionX" y="0" z="dipoleMagnetPositionZ+dipoleMagnetLength/2" rx="0" ry="0" rz="-PI/2"/>
+ </layer>
+ </detector>
-->
<detector id="29" name="ECalScoring" type="HPSTracker2" readout="TrackerHitsECal" insideTrackingVolume="false">
@@ -864,9 +864,9 @@
</fields>
-->
- <fields>
- <field type="BoxDipole" name="AnalyzingDipole" x="dipoleMagnetPositionX" y="0*cm" z="dipoleMagnetPositionZ" dx="dipoleMagnetWidth/2.0" dy="dipoleMagnetHeight/2.0" dz="dipoleMagnetLength/2.0" bx="0.0" by="constBFieldY" bz="0.0" />
- </fields>
+ <fields>
+ <field type="BoxDipole" name="AnalyzingDipole" x="dipoleMagnetPositionX" y="0*cm" z="dipoleMagnetPositionZ" dx="dipoleMagnetWidth/2.0" dy="dipoleMagnetHeight/2.0" dz="dipoleMagnetLength/2.0" bx="0.0" by="constBFieldY" bz="0.0" />
+ </fields>
<includes>
<gdmlFile file="gdml/ecal_vacuum_flange_complete_v1.gdml" />
Modified: java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-4mm-v4-4/HPS-PhysicsRun2016-4mm-v4-4.lcdd
=============================================================================
--- java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-4mm-v4-4/HPS-PhysicsRun2016-4mm-v4-4.lcdd (original)
+++ java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-4mm-v4-4/HPS-PhysicsRun2016-4mm-v4-4.lcdd Tue Feb 16 13:35:43 2016
@@ -8335,7 +8335,7 @@
</setup>
</gdml>
<fields>
- <box_dipole name="AnalyzingDipole" lunit="mm" funit="tesla" x="21.17" y="0.0" z="457.2" dx="500.0" dy="500.0" dz="540.0" bx="0.0" by="-0.5" bz="0.0" />
+ <box_dipole name="AnalyzingDipole" lunit="mm" funit="tesla" x="21.17" y="0.0" z="457.2" dx="500.0" dy="500.0" dz="540.0" bx="0.0" by="-0.524" bz="0.0" />
</fields>
</lcdd>
Modified: java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-4mm-v4-4/compact.xml
=============================================================================
--- java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-4mm-v4-4/compact.xml (original)
+++ java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-4mm-v4-4/compact.xml Tue Feb 16 13:35:43 2016
@@ -33,7 +33,7 @@
<constant name="dipoleMagnetHeight" value="100*cm" />
<constant name="dipoleMagnetWidth" value="100*cm" />
<constant name="dipoleMagnetLength" value="108*cm" />
- <constant name="constBFieldY" value="-0.5" />
+ <constant name="constBFieldY" value="-0.524" />
<!-- ECAL crystal dimensions -->
@@ -91,17 +91,17 @@
<constant name="z02b" value="0+157.5+3.685" />
<!-- Global Millepede tweak parameters (survey constraints)-->
- <!--
- <constant name="dOmega_top" value="1.56e-5" />
- <constant name="dLambda_top" value="0.16e-3" />
- <constant name="dPhi_top" value="6.87e-3" />
- <constant name="dD0_top" value="-0.72" />
- <constant name="dZ0_top" value="-0.13" />
- <constant name="dOmega_bot" value="2.32e-5" />
- <constant name="dLambda_bot" value="-0.06e-3" />
- <constant name="dPhi_bot" value="17.92e-3" />
- <constant name="dD0_bot" value="-6.71" />
- <constant name="dZ0_bot" value="0.04" />
+ <!--
+ <constant name="dOmega_top" value="1.56e-5" />
+ <constant name="dLambda_top" value="0.16e-3" />
+ <constant name="dPhi_top" value="6.87e-3" />
+ <constant name="dD0_top" value="-0.72" />
+ <constant name="dZ0_top" value="-0.13" />
+ <constant name="dOmega_bot" value="2.32e-5" />
+ <constant name="dLambda_bot" value="-0.06e-3" />
+ <constant name="dPhi_bot" value="17.92e-3" />
+ <constant name="dD0_bot" value="-6.71" />
+ <constant name="dZ0_bot" value="0.04" />
-->
<!-- Global Millepede tweak parameters (mixed constraints: FEE momentum set at 1.05 GeV, top and bottom must agree on d0 and z0)-->
@@ -117,17 +117,17 @@
<constant name="dZ0_bot" value="0.116788238356" />
<!-- Global Millepede tweak parameters (external constraints)-->
- <!--
- <constant name="dOmega_top" value="0.1e-5" />
- <constant name="dLambda_top" value="0.5e-3" />
- <constant name="dPhi_top" value="1.5e-3" />
- <constant name="dD0_top" value="0.8" />
- <constant name="dZ0_top" value="-0.15" />
- <constant name="dOmega_bot" value="2.4e-5" />
- <constant name="dLambda_bot" value="1.5e-3" />
- <constant name="dPhi_bot" value="17e-3" />
- <constant name="dD0_bot" value="-5.6" />
- <constant name="dZ0_bot" value="0.2" />
+ <!--
+ <constant name="dOmega_top" value="0.1e-5" />
+ <constant name="dLambda_top" value="0.5e-3" />
+ <constant name="dPhi_top" value="1.5e-3" />
+ <constant name="dD0_top" value="0.8" />
+ <constant name="dZ0_top" value="-0.15" />
+ <constant name="dOmega_bot" value="2.4e-5" />
+ <constant name="dLambda_bot" value="1.5e-3" />
+ <constant name="dPhi_bot" value="17e-3" />
+ <constant name="dD0_bot" value="-5.6" />
+ <constant name="dZ0_bot" value="0.2" />
-->
</define>
@@ -781,24 +781,24 @@
</millepede_constants>
</detector>
-<!--
- <detector id="30" name="TrackerFieldDef" type="HPSTracker2" readout="TrackerHitsFieldDef" >
- <comment>Boundary planes for magnetic field, also used as scoring planes</comment>
- <module name="TestRunModuleFieldDef">
- <box x="416.052" y="177.8" />
- <module_component thickness="scoringThickness" material = "Vacuum" sensitive="true"/>
- </module>
- <module name="TestRunModuleFieldDefFlare2">
- <box x="416.052" y="177.8+(327.66-177.8)*(dipoleMagnetPositionZ+dipoleMagnetLength/2-913.378)/385.572" />
- <module_component thickness="scoringThickness" material = "Vacuum" sensitive="true"/>
- </module>
- <layer id="1">
- <module_placement name="TestRunModuleFieldDef" id="0" x="dipoleMagnetPositionX" y="0" z="dipoleMagnetPositionZ-dipoleMagnetLength/2" rx="0" ry="0" rz="-PI/2"/>
- </layer>
- <layer id="2">
- <module_placement name="TestRunModuleFieldDefFlare2" id="0" x="dipoleMagnetPositionX" y="0" z="dipoleMagnetPositionZ+dipoleMagnetLength/2" rx="0" ry="0" rz="-PI/2"/>
- </layer>
- </detector>
+<!--
+ <detector id="30" name="TrackerFieldDef" type="HPSTracker2" readout="TrackerHitsFieldDef" >
+ <comment>Boundary planes for magnetic field, also used as scoring planes</comment>
+ <module name="TestRunModuleFieldDef">
+ <box x="416.052" y="177.8" />
+ <module_component thickness="scoringThickness" material = "Vacuum" sensitive="true"/>
+ </module>
+ <module name="TestRunModuleFieldDefFlare2">
+ <box x="416.052" y="177.8+(327.66-177.8)*(dipoleMagnetPositionZ+dipoleMagnetLength/2-913.378)/385.572" />
+ <module_component thickness="scoringThickness" material = "Vacuum" sensitive="true"/>
+ </module>
+ <layer id="1">
+ <module_placement name="TestRunModuleFieldDef" id="0" x="dipoleMagnetPositionX" y="0" z="dipoleMagnetPositionZ-dipoleMagnetLength/2" rx="0" ry="0" rz="-PI/2"/>
+ </layer>
+ <layer id="2">
+ <module_placement name="TestRunModuleFieldDefFlare2" id="0" x="dipoleMagnetPositionX" y="0" z="dipoleMagnetPositionZ+dipoleMagnetLength/2" rx="0" ry="0" rz="-PI/2"/>
+ </layer>
+ </detector>
-->
<detector id="29" name="ECalScoring" type="HPSTracker2" readout="TrackerHitsECal" insideTrackingVolume="false">
@@ -864,9 +864,9 @@
</fields>
-->
- <fields>
- <field type="BoxDipole" name="AnalyzingDipole" x="dipoleMagnetPositionX" y="0*cm" z="dipoleMagnetPositionZ" dx="dipoleMagnetWidth/2.0" dy="dipoleMagnetHeight/2.0" dz="dipoleMagnetLength/2.0" bx="0.0" by="constBFieldY" bz="0.0" />
- </fields>
+ <fields>
+ <field type="BoxDipole" name="AnalyzingDipole" x="dipoleMagnetPositionX" y="0*cm" z="dipoleMagnetPositionZ" dx="dipoleMagnetWidth/2.0" dy="dipoleMagnetHeight/2.0" dz="dipoleMagnetLength/2.0" bx="0.0" by="constBFieldY" bz="0.0" />
+ </fields>
<includes>
<gdmlFile file="gdml/ecal_vacuum_flange_complete_v1.gdml" />
Modified: java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-Nominal-v4-4/HPS-PhysicsRun2016-Nominal-v4-4.lcdd
=============================================================================
--- java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-Nominal-v4-4/HPS-PhysicsRun2016-Nominal-v4-4.lcdd (original)
+++ java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-Nominal-v4-4/HPS-PhysicsRun2016-Nominal-v4-4.lcdd Tue Feb 16 13:35:43 2016
@@ -8335,7 +8335,7 @@
</setup>
</gdml>
<fields>
- <box_dipole name="AnalyzingDipole" lunit="mm" funit="tesla" x="21.17" y="0.0" z="457.2" dx="500.0" dy="500.0" dz="540.0" bx="0.0" by="-0.5" bz="0.0" />
+ <box_dipole name="AnalyzingDipole" lunit="mm" funit="tesla" x="21.17" y="0.0" z="457.2" dx="500.0" dy="500.0" dz="540.0" bx="0.0" by="-0.524" bz="0.0" />
</fields>
</lcdd>
Modified: java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-Nominal-v4-4/compact.xml
=============================================================================
--- java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-Nominal-v4-4/compact.xml (original)
+++ java/branches/jeremy-dev/detector-data/detectors/HPS-PhysicsRun2016-Nominal-v4-4/compact.xml Tue Feb 16 13:35:43 2016
@@ -33,7 +33,7 @@
<constant name="dipoleMagnetHeight" value="100*cm" />
<constant name="dipoleMagnetWidth" value="100*cm" />
<constant name="dipoleMagnetLength" value="108*cm" />
- <constant name="constBFieldY" value="-0.5" />
+ <constant name="constBFieldY" value="-0.524" />
<!-- ECAL crystal dimensions -->
@@ -91,17 +91,17 @@
<constant name="z02b" value="0+157.5+3.685" />
<!-- Global Millepede tweak parameters (survey constraints)-->
- <!--
- <constant name="dOmega_top" value="1.56e-5" />
- <constant name="dLambda_top" value="0.16e-3" />
- <constant name="dPhi_top" value="6.87e-3" />
- <constant name="dD0_top" value="-0.72" />
- <constant name="dZ0_top" value="-0.13" />
- <constant name="dOmega_bot" value="2.32e-5" />
- <constant name="dLambda_bot" value="-0.06e-3" />
- <constant name="dPhi_bot" value="17.92e-3" />
- <constant name="dD0_bot" value="-6.71" />
- <constant name="dZ0_bot" value="0.04" />
+ <!--
+ <constant name="dOmega_top" value="1.56e-5" />
+ <constant name="dLambda_top" value="0.16e-3" />
+ <constant name="dPhi_top" value="6.87e-3" />
+ <constant name="dD0_top" value="-0.72" />
+ <constant name="dZ0_top" value="-0.13" />
+ <constant name="dOmega_bot" value="2.32e-5" />
+ <constant name="dLambda_bot" value="-0.06e-3" />
+ <constant name="dPhi_bot" value="17.92e-3" />
+ <constant name="dD0_bot" value="-6.71" />
+ <constant name="dZ0_bot" value="0.04" />
-->
<!-- Global Millepede tweak parameters (mixed constraints: FEE momentum set at 1.05 GeV, top and bottom must agree on d0 and z0)-->
@@ -117,17 +117,17 @@
<constant name="dZ0_bot" value="0.116788238356" />
<!-- Global Millepede tweak parameters (external constraints)-->
- <!--
- <constant name="dOmega_top" value="0.1e-5" />
- <constant name="dLambda_top" value="0.5e-3" />
- <constant name="dPhi_top" value="1.5e-3" />
- <constant name="dD0_top" value="0.8" />
- <constant name="dZ0_top" value="-0.15" />
- <constant name="dOmega_bot" value="2.4e-5" />
- <constant name="dLambda_bot" value="1.5e-3" />
- <constant name="dPhi_bot" value="17e-3" />
- <constant name="dD0_bot" value="-5.6" />
- <constant name="dZ0_bot" value="0.2" />
+ <!--
+ <constant name="dOmega_top" value="0.1e-5" />
+ <constant name="dLambda_top" value="0.5e-3" />
+ <constant name="dPhi_top" value="1.5e-3" />
+ <constant name="dD0_top" value="0.8" />
+ <constant name="dZ0_top" value="-0.15" />
+ <constant name="dOmega_bot" value="2.4e-5" />
+ <constant name="dLambda_bot" value="1.5e-3" />
+ <constant name="dPhi_bot" value="17e-3" />
+ <constant name="dD0_bot" value="-5.6" />
+ <constant name="dZ0_bot" value="0.2" />
-->
</define>
@@ -781,24 +781,24 @@
</millepede_constants>
</detector>
-<!--
- <detector id="30" name="TrackerFieldDef" type="HPSTracker2" readout="TrackerHitsFieldDef" >
- <comment>Boundary planes for magnetic field, also used as scoring planes</comment>
- <module name="TestRunModuleFieldDef">
- <box x="416.052" y="177.8" />
- <module_component thickness="scoringThickness" material = "Vacuum" sensitive="true"/>
- </module>
- <module name="TestRunModuleFieldDefFlare2">
- <box x="416.052" y="177.8+(327.66-177.8)*(dipoleMagnetPositionZ+dipoleMagnetLength/2-913.378)/385.572" />
- <module_component thickness="scoringThickness" material = "Vacuum" sensitive="true"/>
- </module>
- <layer id="1">
- <module_placement name="TestRunModuleFieldDef" id="0" x="dipoleMagnetPositionX" y="0" z="dipoleMagnetPositionZ-dipoleMagnetLength/2" rx="0" ry="0" rz="-PI/2"/>
- </layer>
- <layer id="2">
- <module_placement name="TestRunModuleFieldDefFlare2" id="0" x="dipoleMagnetPositionX" y="0" z="dipoleMagnetPositionZ+dipoleMagnetLength/2" rx="0" ry="0" rz="-PI/2"/>
- </layer>
- </detector>
+<!--
+ <detector id="30" name="TrackerFieldDef" type="HPSTracker2" readout="TrackerHitsFieldDef" >
+ <comment>Boundary planes for magnetic field, also used as scoring planes</comment>
+ <module name="TestRunModuleFieldDef">
+ <box x="416.052" y="177.8" />
+ <module_component thickness="scoringThickness" material = "Vacuum" sensitive="true"/>
+ </module>
+ <module name="TestRunModuleFieldDefFlare2">
+ <box x="416.052" y="177.8+(327.66-177.8)*(dipoleMagnetPositionZ+dipoleMagnetLength/2-913.378)/385.572" />
+ <module_component thickness="scoringThickness" material = "Vacuum" sensitive="true"/>
+ </module>
+ <layer id="1">
+ <module_placement name="TestRunModuleFieldDef" id="0" x="dipoleMagnetPositionX" y="0" z="dipoleMagnetPositionZ-dipoleMagnetLength/2" rx="0" ry="0" rz="-PI/2"/>
+ </layer>
+ <layer id="2">
+ <module_placement name="TestRunModuleFieldDefFlare2" id="0" x="dipoleMagnetPositionX" y="0" z="dipoleMagnetPositionZ+dipoleMagnetLength/2" rx="0" ry="0" rz="-PI/2"/>
+ </layer>
+ </detector>
-->
<detector id="29" name="ECalScoring" type="HPSTracker2" readout="TrackerHitsECal" insideTrackingVolume="false">
@@ -864,9 +864,9 @@
</fields>
-->
- <fields>
- <field type="BoxDipole" name="AnalyzingDipole" x="dipoleMagnetPositionX" y="0*cm" z="dipoleMagnetPositionZ" dx="dipoleMagnetWidth/2.0" dy="dipoleMagnetHeight/2.0" dz="dipoleMagnetLength/2.0" bx="0.0" by="constBFieldY" bz="0.0" />
- </fields>
+ <fields>
+ <field type="BoxDipole" name="AnalyzingDipole" x="dipoleMagnetPositionX" y="0*cm" z="dipoleMagnetPositionZ" dx="dipoleMagnetWidth/2.0" dy="dipoleMagnetHeight/2.0" dz="dipoleMagnetLength/2.0" bx="0.0" by="constBFieldY" bz="0.0" />
+ </fields>
<includes>
<gdmlFile file="gdml/ecal_vacuum_flange_complete_v1.gdml" />
Modified: java/branches/jeremy-dev/evio/src/main/java/org/hps/evio/AbstractSvtEvioReader.java
=============================================================================
--- java/branches/jeremy-dev/evio/src/main/java/org/hps/evio/AbstractSvtEvioReader.java (original)
+++ java/branches/jeremy-dev/evio/src/main/java/org/hps/evio/AbstractSvtEvioReader.java Tue Feb 16 13:35:43 2016
@@ -232,7 +232,11 @@
SvtHeaderDataInfo headerData = this.extractSvtHeader(dataBank.getHeader().getNumber(), data);
// Check that the multisample count is consistent
- this.checkSvtSampleCount(sampleCount, headerData);
+ try {
+ this.checkSvtSampleCount(sampleCount, headerData);
+ } catch(final SvtEvioHeaderException e) {
+ LOGGER.warning("Caught SVT exception:" + e.getMessage());
+ }
// Add header to list
headers.add(headerData);
@@ -344,7 +348,7 @@
*/
protected void checkSvtSampleCount(int sampleCount, SvtHeaderDataInfo headerData) throws SvtEvioHeaderException {
if( sampleCount != SvtEvioUtils.getSvtTailMultisampleCount(headerData.getTail())*4)
- throw new SvtEvioHeaderException("multisample count is not consistent with bank size.");
+ throw new SvtEvioHeaderException("ROC " + headerData.getNum() + " multisample count " + sampleCount + " is not consistent with bank size " + SvtEvioUtils.getSvtTailMultisampleCount(headerData.getTail()));
}
/**
Modified: java/branches/jeremy-dev/evio/src/main/java/org/hps/evio/AugmentedSvtEvioReader.java
=============================================================================
--- java/branches/jeremy-dev/evio/src/main/java/org/hps/evio/AugmentedSvtEvioReader.java (original)
+++ java/branches/jeremy-dev/evio/src/main/java/org/hps/evio/AugmentedSvtEvioReader.java Tue Feb 16 13:35:43 2016
@@ -32,7 +32,10 @@
@Override
protected void processSvtHeaders(List<SvtHeaderDataInfo> headers, EventHeader lcsimEvent) throws SvtEvioHeaderException {
-
+
+
+ LOGGER.finest("Process " + headers.size() + " SVT headers for run " + lcsimEvent.getRunNumber() + " and event " + lcsimEvent.getEventNumber());
+
// Check that the SVT header data is valid
// Catch the exceptions locally, add stuff to the event, then throw it again
// and handle it outside
@@ -43,6 +46,8 @@
if( !exceptions.isEmpty() ) {
+ LOGGER.finest("Found " + exceptions.size() + " " + SvtEvioHeaderException.class.getSimpleName() + " exceptions");
+
// print some debug info
List<String> exceptionNames = SvtEventHeaderChecker.getSvtEvioHeaderExceptionNames(exceptions);
@@ -68,8 +73,14 @@
throw new SvtEvioHeaderException(exceptions.get(0));
} else {
+
+ LOGGER.finest("No " + SvtEvioHeaderException.class.getSimpleName() + " exceptions found for this event");
+
// add skimming flag - the header is OK since I would never get here otherwise
SvtEventFlagger.voidAddHeaderCheckResultToMetaData(true, lcsimEvent);
+
+
+
}
// Add SVT header data to the event
Modified: java/branches/jeremy-dev/integration-tests/pom.xml
=============================================================================
--- java/branches/jeremy-dev/integration-tests/pom.xml (original)
+++ java/branches/jeremy-dev/integration-tests/pom.xml Tue Feb 16 13:35:43 2016
@@ -87,28 +87,5 @@
</plugins>
</build>
</profile>
- <!-- This profile activates automatically when not running tests on a SLAC Unix system with NFS access. -->
- <profile>
- <id>no-slac-nfs</id>
- <activation>
- <activeByDefault>false</activeByDefault>
- <file>
- <missing>/nfs/slac/g/hps/</missing>
- </file>
- </activation>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <configuration>
- <excludes>
- <exclude>org/hps/test/it/EvioToLcioTest.java</exclude>
- </excludes>
- </configuration>
- </plugin>
- </plugins>
- </build>
- </profile>
</profiles>
</project>
Modified: java/branches/jeremy-dev/integration-tests/src/test/java/org/hps/test/it/EvioToLcioTest.java
=============================================================================
--- java/branches/jeremy-dev/integration-tests/src/test/java/org/hps/test/it/EvioToLcioTest.java (original)
+++ java/branches/jeremy-dev/integration-tests/src/test/java/org/hps/test/it/EvioToLcioTest.java Tue Feb 16 13:35:43 2016
@@ -1,5 +1,6 @@
package org.hps.test.it;
+import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
@@ -7,8 +8,8 @@
import junit.framework.TestCase;
+import org.hps.data.test.TestDataUtility;
import org.hps.evio.EvioToLcio;
-import org.hps.record.epics.EpicsData;
import org.hps.record.scalers.ScalerData;
import org.hps.test.util.TestOutputFile;
import org.lcsim.event.EventHeader;
@@ -20,16 +21,6 @@
/**
* Basic test of converting EVIO to LCIO using the {@link org.hps.evio.EvioToLcio} command line utility on Engineering
* Run 2015 data.
- * <p>
- * This test checks the LCIO output for the:</br>
- * <ul>
- * <li>correct number of EPICS data collections</li>
- * <li>correct number of scaler data collections</li>
- * <li>all expected event collections</li>
- * <li>scaler parameters in event header</li>
- * </ul>
- * <p>
- * The test input is the first file of run 5772 in which scaler data appears around every 100k events.
*
* @author Jeremy McCormick, SLAC
*/
@@ -45,12 +36,7 @@
* Map to keep track of number of events with empty collections.
*/
Map<String, Integer> emptyCollections = new HashMap<String, Integer>();
-
- /**
- * Number of EPICS data collections found.
- */
- int epicsDataCount = 0;
-
+
/**
* Number of events processed.
*/
@@ -60,6 +46,12 @@
* Number of scaler data collections found.
*/
int scalerDataCount = 0;
+
+ CheckDriver() {
+ for (String collectionName : COLLECTION_NAMES) {
+ emptyCollections.put(collectionName, new Integer(0));
+ }
+ }
/**
* Check a collection by making sure it is present in the event and incrementing a counter if it is empty.
@@ -72,13 +64,9 @@
if (!event.hasCollection(type, name)) {
throw new RuntimeException("Missing " + name + " collection.");
}
+ Integer nEmpty = emptyCollections.get(name);
if (event.get(type, name).isEmpty()) {
- Integer nEmpty = emptyCollections.get(name);
- if (nEmpty == null) {
- nEmpty = 0;
- }
++nEmpty;
- // System.out.println(name + " is empty in event " + event.getEventNumber());
emptyCollections.put(name, nEmpty);
}
}
@@ -88,17 +76,7 @@
this.checkCollection(event, COLLECTION_TYPES[i], COLLECTION_NAMES[i]);
}
}
-
- private void checkEpicsData(final EventHeader event) {
- final EpicsData epicsData = EpicsData.read(event);
- if (epicsData != null) {
- if (epicsData.getEpicsHeader() == null) {
- throw new RuntimeException("The EpicsData header is null.");
- }
- ++epicsDataCount;
- }
- }
-
+
private void checkScalarData(final EventHeader event) {
final ScalerData scalerData = ScalerData.read(event);
if (scalerData != null) {
@@ -113,10 +91,7 @@
*/
@Override
public void process(final EventHeader event) {
-
- // Find and check EPICS data.
- this.checkEpicsData(event);
-
+
// Find scaler data.
this.checkScalarData(event);
@@ -128,41 +103,34 @@
}
/**
- * The number of empty collections that are allowed.
- */
- private static int[] ALLOWED_EMPTY = new int[] {45, 0, 0, 0};
-
- /**
* Names of collections to check.
*/
- private static String[] COLLECTION_NAMES = new String[] {"EcalReadoutHits", "FADCGenericHits", "SVTRawTrackerHits",
- "TriggerBank"};
+ private static String[] COLLECTION_NAMES = new String[] {
+ "EcalReadoutHits",
+ "FADCGenericHits",
+ "SVTRawTrackerHits",
+ "TriggerBank"
+ };
/**
* Classes of collections.
*/
- private static Class<?>[] COLLECTION_TYPES = new Class<?>[] {RawTrackerHit.class, GenericObject.class,
- RawTrackerHit.class, GenericObject.class};
-
- /**
- * The number of EPICS collections that should be found.
- */
- private static int EPICS_DATA_COUNT = 7;
-
- /**
- * The default input file (large file at SLAC so the pom.xml file excludes this test on non-SLAC hosts).
- */
- private static final String INPUT_FILE = "/nfs/slac/g/hps3/data/engrun2015/evio/hps_005772.evio.0";
+ private static Class<?>[] COLLECTION_TYPES = new Class<?>[] {
+ RawTrackerHit.class,
+ GenericObject.class,
+ RawTrackerHit.class,
+ GenericObject.class
+ };
/**
* The number of events that should be processed.
*/
- private static int PROCESSED_COUNT = 251823;
+ private static int PROCESSED_COUNT = 1000;
/**
* The number of scaler data collections that should be found.
*/
- private static int SCALER_DATA_COUNT = 3;
+ private static int SCALER_DATA_COUNT = 1;
/**
* Run the test.
@@ -171,13 +139,15 @@
*/
public void testEvioToLcio() throws Exception {
+ final File inputFile = new TestDataUtility().getTestData("run5772_integrationTest.evio");
+
// LCIO output file.
final TestOutputFile outputFile = new TestOutputFile(EvioToLcioTest.class, "hps_005772.slcio");
// Run the command line utility.
final String[] args = new String[] {"-l", outputFile.getPath(), "-d", "HPS-EngRun2015-Nominal-v1", "-r", "-x",
- "/org/hps/steering/EventMarker.lcsim", INPUT_FILE};
- System.out.println("Running EvioToLcio on " + INPUT_FILE);
+ "/org/hps/steering/EventMarker.lcsim", inputFile.getAbsolutePath()};
+ System.out.println("Running EvioToLcio on " + inputFile.getPath());
Logger.getLogger("org.hps.evio").setLevel(Level.WARNING);
System.out.println("org.hps.evio logging level is " + Logger.getLogger("org.hps.evio").getLevel());
EvioToLcio cnv = new EvioToLcio();
@@ -188,9 +158,6 @@
System.out.println("Done running EvioToLcio!");
System.out.println("conversion to LCIO took " + elapsed + " ms");
- // Check that the conversion did not take too long.
- //assertTrue("Conversion from EVIO to LCIO took too long.", elapsed < 2000000);
-
// Read in the LCIO file and run the CheckDriver on it.
System.out.println("Checking LCIO output ...");
final LCSimLoop loop = new LCSimLoop();
@@ -209,22 +176,15 @@
System.out.println("CheckDriver processed " + checkDriver.processedCount + " events.");
assertEquals("Wrong number of events processed by the check Driver.", PROCESSED_COUNT, checkDriver.processedCount);
- // Check that the correct number of EPICS data collections were written out.
- System.out.println("Found " + checkDriver.epicsDataCount + " events with EPICS data.");
- assertTrue("EPICS data count is wrong.", checkDriver.epicsDataCount == EPICS_DATA_COUNT);
-
// Check that the correct number of scaler data collections were written out.
System.out.println("Found " + checkDriver.scalerDataCount + " events with scaler data.");
assertTrue("Scaler data count is wrong.", checkDriver.scalerDataCount == SCALER_DATA_COUNT);
-
- // Check that there were not too many empty collections.
+
+ // Check that there were no empty output collections.
for (int i = 0; i < COLLECTION_NAMES.length; i++) {
final String collection = COLLECTION_NAMES[i];
final Integer nEmpty = checkDriver.emptyCollections.get(collection);
- if (nEmpty != null) {
- System.out.println(collection + " had " + nEmpty + " empty collections.");
- assertTrue(collection + " had too many empty collections.", nEmpty <= ALLOWED_EMPTY[i]);
- }
+ assertTrue("Collection " + collection + " was empty.", nEmpty == 0);
}
}
}
Modified: java/branches/jeremy-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SensorOccupancyPlotsDriver.java
=============================================================================
--- java/branches/jeremy-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SensorOccupancyPlotsDriver.java (original)
+++ java/branches/jeremy-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SensorOccupancyPlotsDriver.java Tue Feb 16 13:35:43 2016
@@ -52,7 +52,6 @@
//static {
// hep.aida.jfree.AnalysisFactory.register();
//}
-
// Plotting
private static ITree tree = null;
private IAnalysisFactory analysisFactory = AIDA.defaultInstance().analysisFactory();
@@ -76,8 +75,6 @@
private String triggerBankCollectionName = "TriggerBank";
private String stripClusterCollectionName = "StripClusterer_SiTrackerHitStrip1D";
- String rootFile = null;
-
private int maxSamplePosition = -1;
private int timeWindowWeight = 1;
private int eventCount = 0;
@@ -109,7 +106,9 @@
private boolean enableClusterTimeCuts = true;
private double clusterTimeCutMax = 4.0;
private double clusterTimeCutMin = -4.0;
-
+
+ private boolean saveRootFile = true;
+
public SensorOccupancyPlotsDriver() {
maxSampleStatus = new SystemStatusImpl(Subsystem.SVT, "Checks that SVT is timed in (max sample plot)", true);
maxSampleStatus.setStatus(StatusCode.UNKNOWN, "Status is unknown.");
@@ -195,6 +194,10 @@
public void setMaxPeakOccupancy(double maxPeakOccupancy) {
this.maxPeakOccupancy = maxPeakOccupancy;
+ }
+
+ public void setSaveRootFile(boolean saveRootFile) {
+ this.saveRootFile = saveRootFile;
}
/**
@@ -405,7 +408,7 @@
plotters.get("Occupancy vs Position").region(SvtPlotUtils.computePlotterRegion(sensor))
.plot(positionPlots.get(sensor.getName()), this.createOccupancyPlotStyle("Distance from Beam [mm]", sensor, false));
plotters.get("Cluster occupancy vs Position").region(SvtPlotUtils.computePlotterRegion(sensor))
- .plot(clusterPositionPlots.get(sensor.getName()), this.createOccupancyPlotStyle("Distance from Beam [mm]", sensor, false));
+ .plot(clusterPositionPlots.get(sensor.getName()), this.createOccupancyPlotStyle("Distance from Beam [mm]", sensor, false));
}
occupancyMap.put(sensor.getName(), new int[640]);
@@ -521,22 +524,22 @@
maxSamplePositionPlots.get(((HpsSiSensor) rawHit.getDetectorElement()).getName()).fill(maxSamplePositionFound);
}
}
-
+
// Fill the strip cluster counts if available
- if(event.hasCollection(SiTrackerHitStrip1D.class, stripClusterCollectionName)) {
+ if (event.hasCollection(SiTrackerHitStrip1D.class, stripClusterCollectionName)) {
List<SiTrackerHitStrip1D> stripHits1D = event.get(SiTrackerHitStrip1D.class, stripClusterCollectionName);
- for(SiTrackerHitStrip1D h : stripHits1D) {
+ for (SiTrackerHitStrip1D h : stripHits1D) {
SiTrackerHitStrip1D global = h.getTransformedHit(TrackerHitType.CoordinateSystem.GLOBAL);
Hep3Vector pos_global = global.getPositionAsVector();
- if(enableClusterTimeCuts) {
- if( h.getTime() < clusterTimeCutMax && h.getTime() > clusterTimeCutMin)
+ if (enableClusterTimeCuts) {
+ if (h.getTime() < clusterTimeCutMax && h.getTime() > clusterTimeCutMin) {
clusterPositionPlotCounts.get(((HpsSiSensor) h.getRawHits().get(0).getDetectorElement()).getName()).fill(pos_global.y());
- } else
+ }
+ } else {
clusterPositionPlotCounts.get(((HpsSiSensor) h.getRawHits().get(0).getDetectorElement()).getName()).fill(pos_global.y());
- }
- }
-
-
+ }
+ }
+ }
if (enableMaxSamplePlots && eventCount > maxSampleMonitorStart && eventCount % maxSampleMonitorPeriod == 0) {
checkMaxSample();
@@ -564,17 +567,17 @@
positionPlots.get(sensor.getName()).fill(stripPosition, stripOccupancy);
}
}
- if(enablePositionPlots) {
+ if (enablePositionPlots) {
clusterPositionPlots.get(sensor.getName()).reset();
IHistogram1D h = clusterPositionPlotCounts.get(sensor.getName());
- for(int bin=0; bin<h.axis().bins(); ++bin) {
+ for (int bin = 0; bin < h.axis().bins(); ++bin) {
int y = h.binEntries(bin);
double stripClusterOccupancy = (double) y / (double) eventCount;
double x = h.axis().binCenter(bin);
- clusterPositionPlots.get(sensor.getName()).fill(x,stripClusterOccupancy);
+ clusterPositionPlots.get(sensor.getName()).fill(x, stripClusterOccupancy);
}
}
-
+
}
}
@@ -705,14 +708,16 @@
@Override
public void endOfData() {
- rootFile = "run" + runNumber + "_occupancy.root";
- RootFileStore store = new RootFileStore(rootFile);
- try {
- store.open();
- store.add(tree);
- store.close();
- } catch (IOException e) {
- e.printStackTrace();
+ if (saveRootFile) {
+ String rootFile = "run" + runNumber + "_occupancy.root";
+ RootFileStore store = new RootFileStore(rootFile);
+ try {
+ store.open();
+ store.add(tree);
+ store.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
}
System.out.println("%===============================================================================%");
Modified: java/branches/jeremy-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtClusterPlots.java
=============================================================================
--- java/branches/jeremy-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtClusterPlots.java (original)
+++ java/branches/jeremy-dev/monitoring-drivers/src/main/java/org/hps/monitoring/drivers/svt/SvtClusterPlots.java Tue Feb 16 13:35:43 2016
@@ -56,11 +56,15 @@
private static Map<String, IHistogram1D> singleHitClusterChargePlots = new HashMap<String, IHistogram1D>();
private static Map<String, IHistogram1D> clusterTimePlots = new HashMap<String, IHistogram1D>();
private static Map<String, IHistogram2D> hitTimeTrigTimePlots = new HashMap<String, IHistogram2D>();
- private static IHistogram1D[] hitTimeTrigTimePlots1D = new IHistogram1D[6];
+ private static IHistogram1D[][] hitTimeTrigTimePlots1D = new IHistogram1D[6][2];
+ private static IHistogram2D[][] hitTimeTrigTimePlots2D = new IHistogram2D[6][2];
+
+ private static final int TOP = 0;
+ private static final int BOTTOM = 1;
private List<HpsSiSensor> sensors;
- private Map<RawTrackerHit, FittedRawTrackerHit> fittedRawTrackerHitMap
- = new HashMap<RawTrackerHit, FittedRawTrackerHit>();
+// private Map<RawTrackerHit, FittedRawTrackerHit> fittedRawTrackerHitMap
+// = new HashMap<RawTrackerHit, FittedRawTrackerHit>();
// Detector name
private static final String SUBDETECTOR_NAME = "Tracker";
@@ -71,10 +75,16 @@
private int runNumber = -1;
+ private boolean saveRootFile = true;
+
private boolean dropSmallHitEvents = true;
public void setDropSmallHitEvents(boolean dropSmallHitEvents) {
this.dropSmallHitEvents = dropSmallHitEvents;
+ }
+
+ public void setSaveRootFile(boolean saveRootFile) {
+ this.saveRootFile = saveRootFile;
}
private int computePlotterRegion(HpsSiSensor sensor) {
@@ -85,20 +95,17 @@
} else {
return 6 * (sensor.getLayerNumber() - 1) + 1;
}
- } else {
-
- if (sensor.isTopLayer()) {
- if (sensor.getSide() == HpsSiSensor.POSITRON_SIDE) {
- return 6 * (sensor.getLayerNumber() - 7) + 2;
- } else {
- return 6 * (sensor.getLayerNumber() - 7) + 3;
- }
- } else if (sensor.isBottomLayer()) {
- if (sensor.getSide() == HpsSiSensor.POSITRON_SIDE) {
- return 6 * (sensor.getLayerNumber() - 7) + 4;
- } else {
- return 6 * (sensor.getLayerNumber() - 7) + 5;
- }
+ } else if (sensor.isTopLayer()) {
+ if (sensor.getSide() == HpsSiSensor.POSITRON_SIDE) {
+ return 6 * (sensor.getLayerNumber() - 7) + 2;
+ } else {
+ return 6 * (sensor.getLayerNumber() - 7) + 3;
+ }
+ } else if (sensor.isBottomLayer()) {
+ if (sensor.getSide() == HpsSiSensor.POSITRON_SIDE) {
+ return 6 * (sensor.getLayerNumber() - 7) + 4;
+ } else {
+ return 6 * (sensor.getLayerNumber() - 7) + 5;
}
}
return -1;
@@ -159,8 +166,7 @@
private void resetPlots() {
// Clear the fitted raw hit map of old values
- fittedRawTrackerHitMap.clear();
-
+// fittedRawTrackerHitMap.clear();
// Since all plots are mapped to the name of a sensor, loop
// through the sensors, get the corresponding plots and clear them.
for (HpsSiSensor sensor : sensors) {
@@ -172,34 +178,40 @@
for (IHistogram2D histogram : hitTimeTrigTimePlots.values()) {
histogram.reset();
}
- }
-
- /**
- * Method that creates a map between a fitted raw hit and it's corresponding
- * raw fit
- *
- * @param fittedHits : List of fitted hits to map
- */
- private void mapFittedRawHits(List<FittedRawTrackerHit> fittedHits) {
-
- // Clear the fitted raw hit map of old values
- fittedRawTrackerHitMap.clear();
-
- // Loop through all fitted hits and map them to their corresponding raw hits
- for (FittedRawTrackerHit fittedHit : fittedHits) {
- fittedRawTrackerHitMap.put(fittedHit.getRawTrackerHit(), fittedHit);
- }
- }
-
- /**
- *
- * @param rawHit
- * @return
- */
- private FittedRawTrackerHit getFittedHit(RawTrackerHit rawHit) {
- return fittedRawTrackerHitMap.get(rawHit);
- }
-
+
+ for (int i = 0; i < 6; i++) {
+ for (int j = 0; j < 2; j++) {
+ hitTimeTrigTimePlots1D[i][j].reset();
+ hitTimeTrigTimePlots2D[i][j].reset();
+ }
+ }
+ }
+
+// /**
+// * Method that creates a map between a fitted raw hit and it's corresponding
+// * raw fit
+// *
+// * @param fittedHits : List of fitted hits to map
+// */
+// private void mapFittedRawHits(List<FittedRawTrackerHit> fittedHits) {
+//
+// // Clear the fitted raw hit map of old values
+// fittedRawTrackerHitMap.clear();
+//
+// // Loop through all fitted hits and map them to their corresponding raw hits
+// for (FittedRawTrackerHit fittedHit : fittedHits) {
+// fittedRawTrackerHitMap.put(fittedHit.getRawTrackerHit(), fittedHit);
+// }
+// }
+//
+// /**
+// *
+// * @param rawHit
+// * @return
+// */
+// private FittedRawTrackerHit getFittedHit(RawTrackerHit rawHit) {
+// return fittedRawTrackerHitMap.get(rawHit);
+// }
protected void detectorChanged(Detector detector) {
// Get the HpsSiSensor objects from the geometry
@@ -237,7 +249,7 @@
.plot(singleHitClusterChargePlots.get(sensor.getName()), this.createStyle(null, "Cluster Amplitude [ADC Counts]", ""));
clusterTimePlots.put(sensor.getName(),
- histogramFactory.createHistogram1D(sensor.getName() + " - Cluster Time", 100, -50, 50));
+ histogramFactory.createHistogram1D(sensor.getName() + " - Cluster Time", 100, -75, 50));
plotters.get("Cluster Time").region(this.computePlotterRegion(sensor))
.plot(clusterTimePlots.get(sensor.getName()), this.createStyle(null, "Cluster Time [ns]", ""));
}
@@ -246,18 +258,25 @@
plotters.get("SVT-trigger timing top-bottom").createRegions(1, 2);
hitTimeTrigTimePlots.put("Top",
- histogramFactory.createHistogram2D("Top Cluster Time vs. Trigger Phase", 100, -50, 50, 6, 0, 24));
+ histogramFactory.createHistogram2D("Top Cluster Time vs. Trigger Phase", 100, -75, 50, 6, 0, 24));
plotters.get("SVT-trigger timing top-bottom").region(0).plot(hitTimeTrigTimePlots.get("Top"), this.createStyle(null, "Cluster Time [ns]", "Trigger Phase[ns]"));
hitTimeTrigTimePlots.put("Bottom",
- histogramFactory.createHistogram2D("Bottom Cluster Time vs. Trigger Phase", 100, -50, 50, 6, 0, 24));
+ histogramFactory.createHistogram2D("Bottom Cluster Time vs. Trigger Phase", 100, -75, 50, 6, 0, 24));
plotters.get("SVT-trigger timing top-bottom").region(1).plot(hitTimeTrigTimePlots.get("Bottom"), this.createStyle(null, "Cluster Time [ns]", "Trigger Phase[ns]"));
plotters.put("SVT-trigger timing by phase", plotterFactory.create("SVT-trigger timing by phase"));
- plotters.get("SVT-trigger timing by phase").createRegions(1, 6);
+ plotters.get("SVT-trigger timing by phase").createRegions(2, 6);
+
+ plotters.put("SVT-trigger timing and amplitude by phase", plotterFactory.create("SVT-trigger timing and amplitude by phase"));
+ plotters.get("SVT-trigger timing and amplitude by phase").createRegions(2, 6);
for (int i = 0; i < 6; i++) {
- hitTimeTrigTimePlots1D[i] = histogramFactory.createHistogram1D("Cluster Time for Phase " + i, 100, -50, 50);
- plotters.get("SVT-trigger timing by phase").region(i).plot(hitTimeTrigTimePlots1D[i], this.createStyle(null, "Cluster Time [ns]", ""));
+ for (int j = 0; j < 2; j++) {
+ hitTimeTrigTimePlots1D[i][j] = histogramFactory.createHistogram1D(String.format("Cluster Time for Phase %d, %s", i, j == TOP ? "Top" : "Bottom"), 100, -75, 50);
+ plotters.get("SVT-trigger timing by phase").region(i + 6 * j).plot(hitTimeTrigTimePlots1D[i][j], this.createStyle(null, "Cluster Time [ns]", ""));
+ hitTimeTrigTimePlots2D[i][j] = histogramFactory.createHistogram2D(String.format("Cluster Amplitude vs. Time for Phase %d, %s", i, j == TOP ? "Top" : "Bottom"), 100, -75, 50, 100, 0, 5000.0);
+ plotters.get("SVT-trigger timing and amplitude by phase").region(i + 6 * j).plot(hitTimeTrigTimePlots2D[i][j], this.createStyle(null, "Cluster Time [ns]", "Cluster Amplitude [ADC Counts]"));
+ }
}
for (IPlotter plotter : plotters.values()) {
@@ -278,17 +297,15 @@
runNumber = event.getRunNumber();
}
- // If the event doesn't contain fitted raw hits, skip it
- if (!event.hasCollection(FittedRawTrackerHit.class, fittedHitsCollectionName)) {
- return;
- }
-
- // Get the list of fitted hits from the event
- List<FittedRawTrackerHit> fittedHits = event.get(FittedRawTrackerHit.class, fittedHitsCollectionName);
-
- // Map the fitted hits to their corresponding raw hits
- this.mapFittedRawHits(fittedHits);
-
+// // If the event doesn't contain fitted raw hits, skip it
+// if (!event.hasCollection(FittedRawTrackerHit.class, fittedHitsCollectionName)) {
+// return;
+// }
+// Get the list of fitted hits from the event
+// List<FittedRawTrackerHit> fittedHits = event.get(FittedRawTrackerHit.class, fittedHitsCollectionName);
+//
+// // Map the fitted hits to their corresponding raw hits
+// this.mapFittedRawHits(fittedHits);
// If the event doesn't contain any clusters, skip it
if (!event.hasCollection(SiTrackerHitStrip1D.class, clusterCollectionName)) {
return;
@@ -319,26 +336,29 @@
}
clusterTimePlots.get(sensor.getName()).fill(cluster.getTime());
- hitTimeTrigTimePlots1D[(int) ((event.getTimeStamp() / 4) % 6)].fill(cluster.getTime());
if (sensor.isTopLayer()) {
+ hitTimeTrigTimePlots1D[(int) ((event.getTimeStamp() / 4) % 6)][TOP].fill(cluster.getTime());
+ hitTimeTrigTimePlots2D[(int) ((event.getTimeStamp() / 4) % 6)][TOP].fill(cluster.getTime(), cluster.getdEdx() / DopedSilicon.ENERGY_EHPAIR);
hitTimeTrigTimePlots.get("Top").fill(cluster.getTime(), event.getTimeStamp() % 24);
} else {
+ hitTimeTrigTimePlots1D[(int) ((event.getTimeStamp() / 4) % 6)][BOTTOM].fill(cluster.getTime());
+ hitTimeTrigTimePlots2D[(int) ((event.getTimeStamp() / 4) % 6)][BOTTOM].fill(cluster.getTime(), cluster.getdEdx() / DopedSilicon.ENERGY_EHPAIR);
hitTimeTrigTimePlots.get("Bottom").fill(cluster.getTime(), event.getTimeStamp() % 24);
}
}
}
public void endOfData() {
-
- String rootFile = "run" + runNumber + "_cluster_analysis.root";
- RootFileStore store = new RootFileStore(rootFile);
- try {
- store.open();
- store.add(tree);
- store.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
+ if (saveRootFile) {
+ String rootFile = "run" + runNumber + "_cluster_analysis.root";
+ RootFileStore store = new RootFileStore(rootFile);
+ try {
+ store.open();
+ store.add(tree);
+ store.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
}
Modified: java/branches/jeremy-dev/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalLedSequenceMonitor.java
=============================================================================
--- java/branches/jeremy-dev/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalLedSequenceMonitor.java (original)
+++ java/branches/jeremy-dev/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalLedSequenceMonitor.java Tue Feb 16 13:35:43 2016
@@ -58,852 +58,836 @@
*/
public class EcalLedSequenceMonitor extends Driver{
- private static final int NUM_CHANNELS = 11 * 47;
- private static final String dbTag = "led";
- private static final String dbTableName = "ecal_led_calibrations";
- private static final int runNumberMax = 9999;
- private static final int nDrivers = 8;
- private static final int nSteps = 100; //should be 56 but here is to avoid seg fault
-
-
-
- String inputCollectionRaw = "EcalReadoutHits";
- String inputCollection = "EcalCalHits";
- AIDA aida;
-
- DatabaseConditionsManager conditionsManager;
-
- private EcalChannelCollection ChannelCollection;
- private EcalLedCollection LedCollection;
- private EcalConditions ecalConditions;
-
- Map < Integer,Integer > LedTopMap; //chid (conditions) --> LED id
- Map < Integer,Integer > LedBotMap; //chid (conditions) --> LED id
-
- Map < Integer,Integer > LedTopMapInverted; //LED id --> chid (conditions)
- Map < Integer,Integer > LedBotMapInverted; //LED id --> chid (conditions)
-
- private boolean useRawEnergy=false;
-
- String outFileName;
-
-
- private int runNumber = 0;
- private int eventN = 0;
- private int id,row,column,chid,ledId,driverId;
- private int[][] expectedSequence = new int[][]{ /*A.C. it is a terrible thing to have this hard-coded here!*/
- //first 4 are the flasher1 sequence, TOP controller
- {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,-1,-1},
- {56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111},
- {112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,-1}, //missing 135 is ok
- {168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223},
- //second 4 are the flasher2 sequence, BOTTOM controller
- {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,-1,-1},
- {56,57,58,59,60,61,62,63,64,65,66,67,68,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,-1}, //missing 69 is OK
- {112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167},
- {168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223},
- };
- private int[][] actualSequence=new int[nDrivers][nSteps];
-
- private int[] iStep = new int[nDrivers];
- private int[] nEvents = new int[NUM_CHANNELS];
- private double[] mMean = new double[NUM_CHANNELS];
- private double[] mRMS = new double[NUM_CHANNELS];
-
- private int nEventsMin=200;
- private int nMinChannelsWithEvents=350;
- private double energy,fillEnergy,fillTime;
- private double energyCut=2; //we expect very high energy from the LEDs..
- private double skipInitial=0.05;
- private double skipMin=0.3;
- private long cellID;
-
-
-
-
- //Histograms-functions-ntuples
- private ArrayList<ITuple> iTuple;
-
- private IFunction fFunction,fFunction1;
- private IProfile1D cProfile;
- private IHistogram2D hMeanCharge2D;
- private ArrayList<IHistogram1D> hCharge;
- private ArrayList<IHistogram2D> hChargeVsEvn;
- private IPlotterFactory factory;
- private IPlotter pPlotter=null;
- private IPlotter pPlotter2=null;
- private IPlotterStyle style ;
- private int[] fitStatus = new int[NUM_CHANNELS];
-
- private boolean doFullAnalysis=false;
- private boolean isMonitoringApp=false;
- private boolean saveTuple=false;
-
- private double[] fPars;
- private double[] fPrevPars;
- private double[] fParErrs;
- private String[] fParNames;
-
-
- private double fEvnMinDraw=0.;
- private double fEvnMaxDraw=80000.;
- private double fChargeMinDraw=0.;
- private double fChargeMaxDraw=100.;
-
- /*Components for user interaction*/
- private JDialog dialog;
- private JLabel label;
- private JFrame frame;
- private JPanel panel;
- String labelString;
- private JButton okButtonRed,okButtonBlue,cancelButton;
- private int m_iteration=0;
- private LedColor m_ret=LedColor.UNKNOWN; //use UNKNONW as CANCEL button
- static Object modalMonitor = new Object();
-
- public void setUseRawEnergy(boolean useRawEnergy) {
- this.useRawEnergy=useRawEnergy;
- }
-
- public void setEnergyCut(double energyCut) {
- this.energyCut=energyCut;
- }
- public void setSkipInitial(double skipInitial) {
- this.skipInitial=skipInitial;
- }
- public void setSkipMin(double skipMin) {
- this.skipMin=skipMin;
- }
-
- public void setEvnMinDraw(double evnMinDraw){
- this.fEvnMinDraw=evnMinDraw;
- }
- public void setEvnMaxDraw(double evnMaxDraw){
- this.fEvnMaxDraw=evnMaxDraw;
- }
- public void setChargeMinDraw(double chargeMinDraw){
- this.fChargeMinDraw=chargeMinDraw;
- }
- public void setChargeMaxDraw(double chargeMaxDraw){
- this.fChargeMaxDraw=chargeMaxDraw;
- }
-
- public void setNEventsMin(int nEeventsMin){
- this.nEventsMin=nEventsMin;
- }
-
- public void setIsMonitoringApp(boolean app){
- this.isMonitoringApp=app;
- }
-
- public void setDoFullAnalysis(boolean fullAnalysis){
- this.doFullAnalysis=fullAnalysis;
- }
-
- public void setSaveTuple(boolean flag){
- this.saveTuple=flag;
- }
-
- @Override
- protected void detectorChanged(Detector detector) {
- System.out.println("LedAnalysis::Detector changed was called");
- System.out.println(fEvnMinDraw+" "+fEvnMaxDraw);
- for (int ii=0;ii<nDrivers;ii++){
- iStep[ii]=0;
- // actualSequence[ii][iStep[ii]]=-1;
- }
-
- // Setup conditions
-
- conditionsManager = DatabaseConditionsManager.getInstance();
-
- LedTopMap = new HashMap< Integer , Integer >(); //key: ecal channel ID. Value: led id
- LedBotMap = new HashMap< Integer , Integer >();
-
- LedTopMapInverted = new HashMap< Integer , Integer >(); //key: led id. Value: ecal channel id
- LedBotMapInverted = new HashMap< Integer , Integer >();
-
-
- ChannelCollection = conditionsManager.getCachedConditions(EcalChannelCollection.class, "ecal_channels").getCachedData();
- LedCollection = conditionsManager.getCachedConditions(EcalLedCollection.class, "ecal_leds").getCachedData();
- ecalConditions = conditionsManager.getEcalConditions();
-
- for (EcalChannel channel : ChannelCollection){
- chid = channel.getChannelId();
- for (EcalLed Led : LedCollection) {
- if (Led.getEcalChannelId()==chid){
- if (channel.getY()>0){
- LedTopMap.put( chid , Led.getLedNumber() );
- LedTopMapInverted.put( Led.getLedNumber(), chid );
- }
- else if (channel.getY()<0){
- LedBotMap.put( chid , Led.getLedNumber() );
- LedBotMapInverted.put( Led.getLedNumber(), chid );
- }
- }
- }
- }
-
-
-
- // Setup plots
- aida = AIDA.defaultInstance();
- aida.tree().cd("/");
- hMeanCharge2D = aida.histogram2D("Average LED response", 47, -23.5, 23.5, 11, -5.5, 5.5);
-
- factory= aida.analysisFactory().createPlotterFactory("Ecal Led Sequence");
- pPlotter= factory.create("Drivers");
- pPlotter.createRegions(4,2);
- if (isMonitoringApp){
- pPlotter2=factory.create("Sequence Map");
- pPlotter2.createRegions(1,1);
- pPlotter2.region(0).plot(hMeanCharge2D);
- }
- iTuple = new ArrayList<ITuple>(NUM_CHANNELS);
- hCharge = new ArrayList<IHistogram1D>(NUM_CHANNELS);
- hChargeVsEvn = new ArrayList<IHistogram2D>(nDrivers);
-
-
-
- //pPlotter2.region(0).plot(hMeanCharge2D);
-
- for (int ii=0;ii<NUM_CHANNELS;ii++){
- int row = EcalMonitoringUtilities.getRowFromHistoID(ii);
- int column = EcalMonitoringUtilities.getColumnFromHistoID(ii);
- iTuple.add(aida.analysisFactory().createTupleFactory(aida.tree()).create("nTuple"+ii,"nTuple"+ii,"int fEvn=0 , double fCharge=0.,double fTime=0.",""));
- }
-
- for (int ii=0;ii<nDrivers;ii++){
- hChargeVsEvn.add(aida.histogram2D("Driver"+ii,100,fEvnMinDraw,fEvnMaxDraw,100,fChargeMinDraw,fChargeMaxDraw));
- pPlotter.region(ii).plot( hChargeVsEvn.get(ii));
- }
-
- pPlotter.show();
- if (isMonitoringApp) pPlotter2.show();
-
- }
-
- @Override
- public void process(EventHeader event) {
- runNumber = event.getRunNumber();
- eventN++;
- if (event.hasCollection(CalorimeterHit.class, inputCollection)) {
- //List<BaseRawCalorimeterHit> hits = event.get(BaseRawCalorimeterHit.class, inputCollectionRaw);
- List<CalorimeterHit> hits = event.get(CalorimeterHit.class, inputCollection);
- for (CalorimeterHit hit : hits) {
-
- column = hit.getIdentifierFieldValue("ix");
- row = hit.getIdentifierFieldValue("iy");
- id = EcalMonitoringUtilities.getHistoIDFromRowColumn(row, column);
- cellID=hit.getCellID();
- chid = ChannelCollection.findGeometric(cellID).getChannelId();
-
- energy = hit.getCorrectedEnergy();
-
- if (useRawEnergy){
- fillEnergy = getRawADCSum(energy,cellID);
- }
- else {
- fillEnergy = energy;
- }
- fillTime = hit.getTime();
-
-
- //find the LED
- if (row>0){
- ledId=LedTopMap.get(chid);
- }
- else if (row<0){
- ledId=LedBotMap.get(chid);
- }
- driverId=getDriver(ledId);
- if (row<0) driverId+=4;
-
-
-
- /*Skip the events under thr*/
- if (energy<energyCut) continue;
-
- /*First, check if this led is the one in the NEXT step. Therefore, increment by 1 the step*/
- if (iStep[driverId]==0){
- actualSequence[driverId][iStep[driverId]]=ledId;
- iStep[driverId]=1;
- }
- else if ((iStep[driverId]==1)&&(ledId!=actualSequence[driverId][0])){
- System.out.println("LedAnalysis:: increment step ("+iStep[driverId]+") for driver "+driverId+" . Led ID: "+ledId+" Column: "+column+" Row: "+row);
- if (iStep[driverId]>0) drawProfiles(actualSequence[driverId][iStep[driverId]-1],driverId);
- actualSequence[driverId][iStep[driverId]]=ledId;
- iStep[driverId]++;
- }
- else if ((iStep[driverId]>1)&&(ledId!=actualSequence[driverId][iStep[driverId]-1])&&(ledId!=actualSequence[driverId][iStep[driverId]-2])){
- System.out.println("LedAnalysis:: increment step ("+iStep[driverId]+") for driver "+driverId+" . Led ID: "+ledId+" Column: "+column+" Row: "+row);
- if (iStep[driverId]>0) drawProfiles(actualSequence[driverId][iStep[driverId]-1],driverId);
- actualSequence[driverId][iStep[driverId]]=ledId;
- iStep[driverId]++;
- }
-
-
-
-
-
-
- if (iStep[driverId]==-1) continue; /*Not yet data*/
-
- /*Put this code here, since we want to always fill the ntuple*/
- iTuple.get(id).fill(0,nEvents[id]);
- iTuple.get(id).fill(1,fillEnergy);
- iTuple.get(id).fill(2,fillTime);
- iTuple.get(id).addRow();
- nEvents[id]++;
-
-
-
- /*Add a debug print */
- if (eventN % 10000==0){
- System.out.println("Debug. Event "+eventN+" LED ID: "+ledId+" DRIVER ID: "+driverId+" ECAL ID: "+id+" ROW: "+row+" COLUMN: "+column+ "HISTO ID: "+id);
- }
- }
- if (eventN % 10000==0){
- System.out.println("\n");
- }
- }
- }
-
- /*
- * The endOfData() method analises each ntuple to find the LED response.
- * We cannot simply fit a gaussian to the energy distribution, since there is a high-energy tail due to the LED being turned on:
- * When the LED turns on, it is "cold", and emits more light. Immediately, it starts to heat, and due to temperature effects the
- * emitted light is less. This is clearly visible if one plots the charge VS the event number: the trend is decreasing, toward a
- * plateau, that corresponds to the value at thermal equilibrium.
- *
- * For (few) channels, the first charge values are close to 0, then charge grows rapidly, then it returns back to the plateau.
- * To handle these, I always cut the first 10% events
- * To properly handle this:
- *
- * 1) First create a profile histogram, charge VS event number.
- * 2) Fit it with something like "A*exp(-event_number/N0)+C. The function does not need to be extra-accurate at this stage
- * 3) Cut the events with event_number < 5*N0.
- * 4) Fit the remaining events with a gaussian.
- */
- @Override
- public void endOfData() {
- System.out.println("LedAnalysis::end of data");
- System.out.println("LedAnalysis:: nEventsMin is: "+nEventsMin);
-
- double e,eMin,eMax;
- double t;
- int n,nBins,nFits,nSkip;
-
- int row, column;
-
- String hName;
- IFunctionFactory fFactory=aida.analysisFactory().createFunctionFactory(aida.tree());
-
- IFitResult fResult;
- IFitter fFitter;
-
- for (int id = 0; id < 11 * 47; id++) {
-
- eMin=9999;
- eMax=-9999;
- row = EcalMonitoringUtilities.getRowFromHistoID(id);
- column = EcalMonitoringUtilities.getColumnFromHistoID(id);
- System.out.println("");
- System.out.println("Doing channel: X= "+column+" Y= "+row);
- System.out.println("Number of entries in analysis ntuple: "+iTuple.get(id).rows());
- System.out.println("Number of recognized events: "+nEvents[id]);
- /*Create the profile. Create it for all the channels, to keep sync.*/
- nBins=nEvents[id]/100;
- if (nBins<=0) nBins=1;
-
- /*Clear previous*/
-
- if (id>0){
- aida.tree().rm("strip");
- aida.tree().rm("fun0");
- aida.tree().rm("fun1");
- }
- /*Create the profile.*/
- cProfile=aida.profile1D("strip",nBins,-0.5,nEvents[id]*(1-skipInitial)+0.5);
- cProfile.reset();
- /*Create the function for the profile fit and the gaus fit*/
- fFunction=fFactory.createFunctionFromScript("fun0",1,"A*exp(-x[0]/tau)+B","A,tau,B","",null);
- fFunction1=fFactory.createFunctionByName("fun1","G");
-
- if (EcalMonitoringUtilities.isInHole(row,column)==true){
- System.out.println("Channel X= "+column+" Y= "+row+" is in hole. Skip");
- hCharge.add(aida.histogram1D("charge_"+id,200,0.,1.)); //create here the histogram to keep sync
- System.out.println("In hole, skip");
- continue;
- }
- else if (nEvents[id]<nEventsMin) {
- hCharge.add(aida.histogram1D("charge_"+id,200,0.,1.)); //create here the histogram to keep sync
- System.err.println("LedAnalysis:: the channel X= "+column+" Y= "+row+" has not enough events "+nEvents[id]+" "+nEventsMin);
-
- continue;
- }
-
- //Fill the profile*/
- nSkip=(int)(nEvents[id]*skipInitial);
- if (nSkip>iTuple.get(id).rows()){
- System.out.println("Can't skip initial events?");
- nSkip=0;
- }
- iTuple.get(id).start();
- iTuple.get(id).skip(nSkip); //This is the work-around for those channels with charge starting from 0 and rapidly growing//
- n=0;
- iTuple.get(id).next();
- while ( iTuple.get(id).next() ){
- e=iTuple.get(id).getDouble(1);
- if (e<eMin) eMin=e;
- if (e>eMax) eMax=e;
- cProfile.fill(1.*n,e);
- n++;
- }
- fFitter=aida.analysisFactory().createFitFactory().createFitter("chi2","","v");
-
- if (doFullAnalysis){
- //Init function parameters
- double[] initialPars={eMax-eMin,nEvents[id]/10.,eMin};
- if (initialPars[0]<0) initialPars[0]=0;
- fFunction.setParameters(initialPars);
-
- //Do the fit
- System.out.println("LedAnalysis:: do profile fit "+id+" "+fFitter.engineName()+" "+fFitter.fitMethodName());
- System.out.println("LedAnalysis:: initial parameters "+initialPars[0]+" "+initialPars[1]+" "+initialPars[2]);
- fResult=fFitter.fit(cProfile,fFunction);
- fPars = fResult.fittedParameters();
- fParErrs = fResult.errors();
- fParNames = fResult.fittedParameterNames();
- System.out.println("LedAnalysis:: Status= "+fResult.fitStatus()+" "+fResult.isValid()+" Chi2 = "+fResult.quality()+" NDF: "+fResult.ndf());
- for(int i=0; i< fResult.fittedFunction().numberOfParameters(); i++ ){
- System.out.println(fParNames[i]+" : "+fPars[i]+" +- "+fParErrs[i]);
- }
- fFunction.setParameters(fPars);
-
-
- //Do again the fit: it is a terrible work-around
- nFits=0;
- if (Double.isNaN(fParErrs[1])){
- fPars=fPrevPars;
- }
- while (Double.isNaN(fParErrs[1])){
- System.out.println("LedAnalysis:: redo fit");
- fFunction.setParameters(fPars);
- fResult=fFitter.fit(cProfile,fFunction);
- fPars = fResult.fittedParameters();
- fParErrs = fResult.errors();
- System.out.println("LedAnalysis:: Status= "+fResult.fitStatus()+" "+fResult.isValid()+" Chi2 = "+fResult.quality()+" NDF: "+fResult.ndf());
- for(int i=0; i< fResult.fittedFunction().numberOfParameters(); i++ ){
- System.out.println(fParNames[i]+" : "+fPars[i]+" +- "+fParErrs[i]);
- }
- fFunction.setParameters(fPars);
- nFits++;
- if (nFits>=10){
- System.out.println("LedAnalysis:: Error, too many fits without convergence");
- break;
- }
- }
- fPrevPars=Arrays.copyOf(fPars,fPars.length);
- System.out.println("LedAnalysis:: fit "+id+" done");
-
- //Now we have the tau parameter. Take ONLY the events that are with N>5*tau/
- //As a cross-check, also verify that tau > Nevents/10, otherwise skip the first Nevents/2
- //and emit warning
- nSkip=(int)( fPars[1]*5);
- if (nSkip < (nEvents[id]*skipMin)){
- System.out.println("LedAnalysis:: Skip number too low: "+nSkip+" Increment it to "+nEvents[id]/2);
- nSkip=(int)(nEvents[id]*skipMin);
- }
- if (nSkip > nEvents[id]){
- System.out.println("LedAnalysis:: Skip number too high, reduce it");
- nSkip=(int)(nEvents[id]*skipMin);
- }
-
- }
- else{
- nSkip=(int)(nEvents[id]*(skipMin+skipInitial));
- }
-
- System.out.println("LedAnalysis:: gaus fit :: Going to skip "+nSkip+" out of "+nEvents[id]);
- System.out.println("eMin is: "+eMin+" eMax is: "+eMax);
- hCharge.add(aida.histogram1D("charge_"+id,200,eMin*0.9,eMax*1.1));
-
-
- iTuple.get(id).start();
- iTuple.get(id).skip(nSkip);
- n=0;
- while (iTuple.get(id).next()){
- e=iTuple.get(id).getDouble(1);
- t=iTuple.get(id).getDouble(2);
- hCharge.get(id).fill(e);
- n++;
- }
-
- /*Finally do the fit with the gaussian*/
- double[] initialPars1={hCharge.get(id).maxBinHeight(),hCharge.get(id).mean(),hCharge.get(id).rms()};
-
- System.out.println("LedAnalysis:: Gaus fit");
- System.out.println("LedAnalysis:: initial parameters "+initialPars1[0]+" "+initialPars1[1]+" "+initialPars1[2]);
-
- fFunction1.setParameters(initialPars1);
- fResult=fFitter.fit(hCharge.get(id),fFunction1);
- fPars = fResult.fittedParameters();
- fParErrs = fResult.errors();
- fParNames = fResult.fittedParameterNames();
- System.out.println("Status= "+fResult.fitStatus()+" "+fResult.isValid()+" Chi2 = "+fResult.quality()+" NDF: "+fResult.ndf());
- for(int i=0; i< fResult.fittedFunction().numberOfParameters(); i++ ){
- System.out.println(fParNames[i]+" : "+fPars[i]+" +- "+fParErrs[i]);
- }
- fFunction1.setParameters(fPars);
- mMean[id]=fPars[1];
- mRMS[id]=fPars[2];
-
- hMeanCharge2D.fill(column,row,mMean[id]);
- System.out.println("\n");
- }//End loop on channels
-
-
-
- if ((pPlotter2!=null)&&(isMonitoringApp)){
- style = pPlotter2.region(0).style();
- style.setParameter("hist2DStyle", "colorMap");
- style.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
- style.dataStyle().fillStyle().setParameter("showZeroHeightBins", Boolean.FALSE.toString());
- pPlotter2.region(0).plot(hMeanCharge2D);
- pPlotter2.region(0).refresh();
- }
- else{
- IPlotterStyle pstyle = aida.analysisFactory().createPlotterFactory().createPlotterStyle();
- pPlotter2 = null;
- pPlotter2 = aida.analysisFactory().createPlotterFactory().create();
- pstyle.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
- pstyle.dataStyle().fillStyle().setParameter("showZeroHeightBins", Boolean.FALSE.toString());
- pstyle.setParameter("hist2DStyle", "colorMap");
- if (pPlotter2!=null){
- pPlotter2.createRegion().plot(hMeanCharge2D,pstyle);
- pPlotter2.show();
- }
- }
-
- if (isMonitoringApp){
- askUploadToDBDialog();
- synchronized (modalMonitor) {
- try{
- modalMonitor.wait(60000); //wait 1 minute for user interaction.
- }
- catch(InterruptedException excp){
- System.out.println("Got exception: "+excp);
- }
- }
- if ((m_ret!=LedColor.UNKNOWN)){
- if (m_ret==LedColor.BLUE) System.out.println("OK, upload to DB BLUE");
- else System.out.println("OK, upload to DB RED");
- try {
- uploadToDB(m_ret);
- } catch (SQLException | DatabaseObjectException | ConditionsObjectException error) {
- throw new RuntimeException("Error uploading to the database ", error);
- }
-
- System.out.println("Save an Elog too");
- uploadToElog();
- }
- else{
- System.out.println("Cancel pressed. Nothing to do");
- }
- }
-
- /*Write a file with the LED values*/
- try {
- if (useRawEnergy){
- outFileName=runNumber+".raw.txt";
- }
- else{
- outFileName=runNumber+".energy.txt";
- }
- PrintWriter writer = new PrintWriter(outFileName, "UTF-8");
-
-
- for (int id = 0; id < 11 * 47; id++) {
-
- row = EcalMonitoringUtilities.getRowFromHistoID(id);
- column = EcalMonitoringUtilities.getColumnFromHistoID(id);
- if (EcalMonitoringUtilities.isInHole(row, column)) continue;
- if ((row == 0) || (column == 0)) continue;
-
- writer.print(column+" "+row+" "+" "+ mMean[id]+" "+mRMS[id]+"\r\n");
-
- }
- writer.close();
-
- }
- catch (FileNotFoundException fnfe) {
-
- System.out.println(fnfe.getMessage());
-
- }
-
- catch (IOException ioe) {
-
- System.out.println(ioe.getMessage());
-
- }
-
-
- System.out.println("EcalLedSequenceMonitor endOfData clear histograms");
- for(int ii = 0; ii < NUM_CHANNELS; ii++) {
- row=EcalMonitoringUtilities.getRowFromHistoID(ii);
- column = EcalMonitoringUtilities.getColumnFromHistoID(ii);
- hName="charge_"+ii;
- try{
- aida.tree().rm(hName);
- }
- catch(IllegalArgumentException ee){
- System.out.println("Got exception "+ee);
- }
-
- if (!saveTuple||(isMonitoringApp)){
- hName="nTuple"+ii;
- try{
- aida.tree().rm(hName);
- }
- catch(IllegalArgumentException ee){
- System.out.println("Got exception "+ee);
- }
- }
-
- }
- System.out.println("EcalLedSequenceMonitor endOfData clear histograms done");
- System.out.println("endOfData end");
- System.out.println("The program is not stucked. It is writing the output AIDA file, this takes time!");
- }/*End endOfData*/
-
-
- /**
- * This function returns the driver number (from 0 to 3) given the LED id.
- * @param led
- * @return
- */
- public int getDriver(int led){
- int ret=-1;
- if ((led>=2)&&(led<56)) ret=0;
- else if ((led>=56)&&(led<112)) ret=1;
- else if ((led>=112)&&(led<168)) ret=2;
- else if ((led>=168)&&(led<224)) ret=3;
- return ret;
- }
-
- /**
- * Very simple method to retrieve the pedestal-subtracted raw Energy.
- * If the gain changes (because we do a re-calibration), I do not want to include this in the LED analysis
- * @param energy
- * @param cellID
- * @return
- */
- public double getRawADCSum(double energy,long cellID){
- EcalChannelConstants channelData = ecalConditions.getChannelConstants(ecalConditions.getChannelCollection().findGeometric(cellID));
- double RawSum=energy / EcalUtils.GeV;
- double gain=channelData.getGain().getGain();
- double ret=RawSum/gain;
- // System.out.println("A:C "+RawSum+" "+ret);
- return ret;
- }
-
- private void uploadToDB(LedColor color) throws DatabaseObjectException, ConditionsObjectException, SQLException {
- int x,y,id;
- double mean,rms;
- System.out.println(String.format("Uploading new led data to the database, runMin=%d, runMax=%d, tag=%s ....",
- runNumber,runNumberMax,dbTag));
-
- conditionsManager = DatabaseConditionsManager.getInstance();
- EcalLedCalibrationCollection led_calibrations = new EcalLedCalibrationCollection();
- led_calibrations.setConnection(conditionsManager.getConnection());
-
- TableMetaData tableMetaData = conditionsManager.findTableMetaData(dbTableName);
- led_calibrations.setTableMetaData(tableMetaData);
-
- for (int cid = 1; cid <= 442; cid++) {/*This is a loop over the channel ID, as in the conditions system*/
- EcalChannel cc = findChannel(cid);
- x = cc.getX(); //This is the column
- y = cc.getY(); //This is the row
- id=EcalMonitoringUtilities.getHistoIDFromRowColumn(y,x);
- mean=mMean[id];
- rms=mRMS[id];
- led_calibrations.add(new EcalLedCalibration(cid,mean,rms,color));
- }
-
- int collectionId = -1;
-
- try {
- collectionId = conditionsManager.getCollectionId(led_calibrations, "loaded by EcalLedSequenceMonitor");
- } catch (Exception e) {
- System.out.println("Got exception on uploadToDB "+ e);
- throw new RuntimeException(e);
- }
- System.err.println("CollectionID: "+collectionId);
- led_calibrations.insert();
- ConditionsRecord conditionsRecord = new ConditionsRecord(
- led_calibrations.getCollectionId(), runNumber, runNumberMax, dbTableName, dbTableName,
- "Generated by LedAnalysis from Run #"+runNumber, dbTag);
- conditionsRecord.setConnection(conditionsManager.getConnection());
- tableMetaData = conditionsManager.findTableMetaData("conditions");
- conditionsRecord.setTableMetaData(tableMetaData);
- conditionsRecord.insert();
-
- System.out.println("Upload to DB done");
- }
-
- private void uploadToElog(){
- String path,exe,command,imgpath;
- path="/home/hpsrun/LedSequenceData";
- exe=path+"/doElog.csh";
- imgpath=path+"/screenshots/"+runNumber+".png";
-
- File f=new File(path);
- if (!f.exists()){
- System.err.println("LedMonitoringSequence:: wrong path");
- return;
- }
- if (pPlotter2==null){
- System.err.println("LedMonitoringSquence:: no plotter");
- return;
- }
- try{
- pPlotter2.writeToFile(imgpath);
- }
- catch(Exception e){
- System.err.println("Exception "+e);
- }
- File f1=new File(exe);
- if (!f1.exists()){
- System.err.println("LedMonitoringSequence:: no script!");
- return;
- }
- command=exe+" "+imgpath;
- try{
- System.out.println("LedMonitoringSequence:: try this command: "+command);
- Runtime.getRuntime().exec(command);
- }
- catch(Exception e){
- System.err.println("Exception "+e);
- }
- }
-
-
- private void drawProfiles(int ledID,int driverID){
-
- int m_column,m_row,m_ledID,m_chID,m_ID,m_driverID;
-
- m_ledID = ledID;
- m_driverID = driverID;
- m_chID = 0;
-
-
- if (m_driverID<=3) m_chID = LedTopMapInverted.get(ledID);
- else m_chID = LedBotMapInverted.get(ledID);
-
- m_column=findChannel(m_chID).getX();
- m_row=findChannel(m_chID).getY();
- m_ID=EcalMonitoringUtilities.getHistoIDFromRowColumn(m_row, m_column);
- /*
+ private static final int NUM_CHANNELS = 11 * 47;
+ private static final String dbTag = "led";
+ private static final String dbTableName = "ecal_led_calibrations";
+ private static final int runNumberMax = 9999;
+ private static final int nDrivers = 8;
+ private static final int nSteps = 100; //should be 56 but here is to avoid seg fault
+
+
+
+ String inputCollectionRaw = "EcalReadoutHits";
+ String inputCollection = "EcalCalHits";
+ AIDA aida;
+
+ DatabaseConditionsManager conditionsManager;
+
+ private EcalChannelCollection ChannelCollection;
+ private EcalLedCollection LedCollection;
+ private EcalConditions ecalConditions;
+
+ Map < Integer,Integer > LedTopMap; //chid (conditions) --> LED id
+ Map < Integer,Integer > LedBotMap; //chid (conditions) --> LED id
+
+ Map < Integer,Integer > LedTopMapInverted; //LED id --> chid (conditions)
+ Map < Integer,Integer > LedBotMapInverted; //LED id --> chid (conditions)
+
+ private boolean useRawEnergy=false;
+
+ String outFileName;
+
+
+ private int runNumber = 0;
+ private int eventN = 0;
+ private int id,row,column,chid,ledId,driverId;
+ private int[][] expectedSequence = new int[][]{ /*A.C. it is a terrible thing to have this hard-coded here!*/
+ //first 4 are the flasher1 sequence, TOP controller
+ {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,-1,-1},
+ {56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111},
+ {112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,-1}, //missing 135 is ok
+ {168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223},
+ //second 4 are the flasher2 sequence, BOTTOM controller
+ {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,-1,-1},
+ {56,57,58,59,60,61,62,63,64,65,66,67,68,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,-1}, //missing 69 is OK
+ {112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167},
+ {168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223},
+ };
+ private int[][] actualSequence=new int[nDrivers][nSteps];
+
+ private int[] iStep = new int[nDrivers];
+ private int[] nEvents = new int[NUM_CHANNELS];
+ private double[] mMean = new double[NUM_CHANNELS];
+ private double[] mRMS = new double[NUM_CHANNELS];
+
+ private int nEventsMin=200;
+ private int nMinChannelsWithEvents=350;
+ private double energy,fillEnergy,fillTime;
+ private double energyCut=2; //we expect very high energy from the LEDs..
+ private double skipInitial=0.05;
+ private double skipMin=0.3;
+ private long cellID;
+
+
+
+
+ //Histograms-functions-ntuples
+ private ArrayList<ITuple> iTuple;
+
+ private IFunction fFunction,fFunction1;
+ private IProfile1D cProfile;
+ private IHistogram2D hMeanCharge2D;
+ private ArrayList<IHistogram1D> hCharge;
+ private ArrayList<IHistogram2D> hChargeVsEvn;
+ private IPlotterFactory factory;
+ private IPlotter pPlotter=null;
+ private IPlotter pPlotter2=null;
+ private IPlotterStyle style ;
+ private int[] fitStatus = new int[NUM_CHANNELS];
+
+ private boolean doFullAnalysis=false;
+ private boolean isMonitoringApp=false;
+ private boolean saveTuple=false;
+
+ private double[] fPars;
+ private double[] fPrevPars;
+ private double[] fParErrs;
+ private String[] fParNames;
+
+
+ private double fEvnMinDraw=0.;
+ private double fEvnMaxDraw=80000.;
+ private double fChargeMinDraw=0.;
+ private double fChargeMaxDraw=100.;
+
+ /*Components for user interaction*/
+ private JDialog dialog;
+ private JLabel label;
+ private JFrame frame;
+ private JPanel panel;
+ String labelString;
+ private JButton okButtonRed,okButtonBlue,cancelButton;
+ private int m_iteration=0;
+ private LedColor m_ret=LedColor.UNKNOWN; //use UNKNONW as CANCEL button
+ static Object modalMonitor = new Object();
+
+ public void setUseRawEnergy(boolean useRawEnergy) {
+ this.useRawEnergy=useRawEnergy;
+ }
+
+ public void setEnergyCut(double energyCut) {
+ this.energyCut=energyCut;
+ }
+ public void setSkipInitial(double skipInitial) {
+ this.skipInitial=skipInitial;
+ }
+ public void setSkipMin(double skipMin) {
+ this.skipMin=skipMin;
+ }
+
+ public void setEvnMinDraw(double evnMinDraw){
+ this.fEvnMinDraw=evnMinDraw;
+ }
+ public void setEvnMaxDraw(double evnMaxDraw){
+ this.fEvnMaxDraw=evnMaxDraw;
+ }
+ public void setChargeMinDraw(double chargeMinDraw){
+ this.fChargeMinDraw=chargeMinDraw;
+ }
+ public void setChargeMaxDraw(double chargeMaxDraw){
+ this.fChargeMaxDraw=chargeMaxDraw;
+ }
+
+ public void setNEventsMin(int nEeventsMin){
+ this.nEventsMin=nEventsMin;
+ }
+
+ public void setIsMonitoringApp(boolean app){
+ this.isMonitoringApp=app;
+ }
+
+ public void setDoFullAnalysis(boolean fullAnalysis){
+ this.doFullAnalysis=fullAnalysis;
+ }
+
+ public void setSaveTuple(boolean flag){
+ this.saveTuple=flag;
+ }
+
+ @Override
+ protected void detectorChanged(Detector detector) {
+ System.out.println("LedAnalysis::Detector changed was called");
+ System.out.println(fEvnMinDraw+" "+fEvnMaxDraw);
+ for (int ii=0;ii<nDrivers;ii++){
+ iStep[ii]=0;
+ // actualSequence[ii][iStep[ii]]=-1;
+ }
+
+ // Setup conditions
+
+ conditionsManager = DatabaseConditionsManager.getInstance();
+
+ LedTopMap = new HashMap< Integer , Integer >(); //key: ecal channel ID. Value: led id
+ LedBotMap = new HashMap< Integer , Integer >();
+
+ LedTopMapInverted = new HashMap< Integer , Integer >(); //key: led id. Value: ecal channel id
+ LedBotMapInverted = new HashMap< Integer , Integer >();
+
+
+ ChannelCollection = conditionsManager.getCachedConditions(EcalChannelCollection.class, "ecal_channels").getCachedData();
+ LedCollection = conditionsManager.getCachedConditions(EcalLedCollection.class, "ecal_leds").getCachedData();
+ ecalConditions = conditionsManager.getEcalConditions();
+
+ for (EcalChannel channel : ChannelCollection){
+ chid = channel.getChannelId();
+ for (EcalLed Led : LedCollection) {
+ if (Led.getEcalChannelId()==chid){
+ if (channel.getY()>0){
+ LedTopMap.put( chid , Led.getLedNumber() );
+ LedTopMapInverted.put( Led.getLedNumber(), chid );
+ }
+ else if (channel.getY()<0){
+ LedBotMap.put( chid , Led.getLedNumber() );
+ LedBotMapInverted.put( Led.getLedNumber(), chid );
+ }
+ }
+ }
+ }
+
+
+
+ // Setup plots
+ aida = AIDA.defaultInstance();
+ aida.tree().cd("/");
+ hMeanCharge2D = aida.histogram2D("Average LED response", 47, -23.5, 23.5, 11, -5.5, 5.5);
+
+ factory= aida.analysisFactory().createPlotterFactory("Ecal Led Sequence");
+ pPlotter= factory.create("Drivers");
+ pPlotter.createRegions(4,2);
+ if (isMonitoringApp){
+ pPlotter2=factory.create("Sequence Map");
+ pPlotter2.createRegions(1,1);
+ pPlotter2.region(0).plot(hMeanCharge2D);
+ }
+ iTuple = new ArrayList<ITuple>(NUM_CHANNELS);
+ hCharge = new ArrayList<IHistogram1D>(NUM_CHANNELS);
+ hChargeVsEvn = new ArrayList<IHistogram2D>(nDrivers);
+
+
+
+ //pPlotter2.region(0).plot(hMeanCharge2D);
+
+ for (int ii=0;ii<NUM_CHANNELS;ii++){
+ int row = EcalMonitoringUtilities.getRowFromHistoID(ii);
+ int column = EcalMonitoringUtilities.getColumnFromHistoID(ii);
+ iTuple.add(aida.analysisFactory().createTupleFactory(aida.tree()).create("nTuple"+ii,"nTuple"+ii,"int fEvn=0 , double fCharge=0.,double fTime=0.",""));
+ }
+
+ for (int ii=0;ii<nDrivers;ii++){
+ hChargeVsEvn.add(aida.histogram2D("Driver"+ii,100,fEvnMinDraw,fEvnMaxDraw,100,fChargeMinDraw,fChargeMaxDraw));
+ pPlotter.region(ii).plot( hChargeVsEvn.get(ii));
+ }
+
+ pPlotter.show();
+ if (isMonitoringApp) pPlotter2.show();
+
+ }
+
+ @Override
+ public void process(EventHeader event) {
+ runNumber = event.getRunNumber();
+ eventN++;
+ if (event.hasCollection(CalorimeterHit.class, inputCollection)) {
+ //List<BaseRawCalorimeterHit> hits = event.get(BaseRawCalorimeterHit.class, inputCollectionRaw);
+ List<CalorimeterHit> hits = event.get(CalorimeterHit.class, inputCollection);
+ for (CalorimeterHit hit : hits) {
+
+ column = hit.getIdentifierFieldValue("ix");
+ row = hit.getIdentifierFieldValue("iy");
+ id = EcalMonitoringUtilities.getHistoIDFromRowColumn(row, column);
+ cellID=hit.getCellID();
+ chid = ChannelCollection.findGeometric(cellID).getChannelId();
+
+ energy = hit.getCorrectedEnergy();
+
+ if (useRawEnergy){
+ fillEnergy = getRawADCSum(energy,cellID);
+ }
+ else {
+ fillEnergy = energy;
+ }
+ fillTime = hit.getTime();
+
+
+ //find the LED
+ if (row>0){
+ ledId=LedTopMap.get(chid);
+ }
+ else if (row<0){
+ ledId=LedBotMap.get(chid);
+ }
+ driverId=getDriver(ledId);
+ if (row<0) driverId+=4;
+
+
+
+ /*Skip the events under thr*/
+ if (energy<energyCut) continue;
+
+ /*First, check if this led is the one in the NEXT step. Therefore, increment by 1 the step*/
+ /*
+ * if (iStep[driverId]==0){
+
+ actualSequence[driverId][iStep[driverId]]=ledId;
+ iStep[driverId]=1;
+ }
+ else if ((iStep[driverId]==1)&&(ledId!=actualSequence[driverId][0])){
+ System.out.println("LedAnalysis:: increment step ("+iStep[driverId]+") for driver "+driverId+" . Led ID: "+ledId+" Column: "+column+" Row: "+row);
+ if (iStep[driverId]>0) drawProfiles(actualSequence[driverId][iStep[driverId]-1],driverId);
+ actualSequence[driverId][iStep[driverId]]=ledId;
+ iStep[driverId]++;
+ }
+ else if ((iStep[driverId]>1)&&(ledId!=actualSequence[driverId][iStep[driverId]-1])&&(ledId!=actualSequence[driverId][iStep[driverId]-2])){
+ System.out.println("LedAnalysis:: increment step ("+iStep[driverId]+") for driver "+driverId+" . Led ID: "+ledId+" Column: "+column+" Row: "+row);
+ if (iStep[driverId]>0) drawProfiles(actualSequence[driverId][iStep[driverId]-1],driverId);
+ actualSequence[driverId][iStep[driverId]]=ledId;
+ iStep[driverId]++;
+ }
+
+
+ // if (iStep[driverId]==-1) continue;
+
+ */
+
+ if (iStep[driverId]==-1) continue; /*Not yet data*/
+
+ /*Put this code here, since we want to always fill the ntuple*/
+ iTuple.get(id).fill(0,nEvents[id]);
+ iTuple.get(id).fill(1,fillEnergy);
+ iTuple.get(id).fill(2,fillTime);
+ iTuple.get(id).addRow();
+ nEvents[id]++;
+
+
+
+ /*Add a debug print */
+ if (eventN % 10000==0){
+ System.out.println("Debug. Event "+eventN+" LED ID: "+ledId+" DRIVER ID: "+driverId+" ECAL ID: "+id+" ROW: "+row+" COLUMN: "+column+ "HISTO ID: "+id);
+ }
+ }
+ if (eventN % 10000==0){
+ System.out.println("\n");
+ }
+ }
+ }
+
+ /*
+ * The endOfData() method analises each ntuple to find the LED response.
+ * We cannot simply fit a gaussian to the energy distribution, since there is a high-energy tail due to the LED being turned on:
+ * When the LED turns on, it is "cold", and emits more light. Immediately, it starts to heat, and due to temperature effects the
+ * emitted light is less. This is clearly visible if one plots the charge VS the event number: the trend is decreasing, toward a
+ * plateau, that corresponds to the value at thermal equilibrium.
+ *
+ * For (few) channels, the first charge values are close to 0, then charge grows rapidly, then it returns back to the plateau.
+ * To handle these, I always cut the first 10% events
+ * To properly handle this:
+ *
+ * 1) First create a profile histogram, charge VS event number.
+ * 2) Fit it with something like "A*exp(-event_number/N0)+C. The function does not need to be extra-accurate at this stage
+ * 3) Cut the events with event_number < 5*N0.
+ * 4) Fit the remaining events with a gaussian.
+ */
+ @Override
+ public void endOfData() {
+ System.out.println("LedAnalysis::end of data");
+ System.out.println("LedAnalysis:: nEventsMin is: "+nEventsMin);
+
+ double e,eMin,eMax;
+ double t;
+ int n,nBins,nSkip;
+
+ int row, column;
+
+ String hName;
+ IFunctionFactory fFactory=aida.analysisFactory().createFunctionFactory(aida.tree());
+
+ IFitResult fResult;
+ IFitter fFitter;
+
+ for (int id = 0; id < 11 * 47; id++) {
+
+ eMin=9999;
+ eMax=-9999;
+ row = EcalMonitoringUtilities.getRowFromHistoID(id);
+ column = EcalMonitoringUtilities.getColumnFromHistoID(id);
+ System.out.println("");
+ System.out.println("Doing channel: X= "+column+" Y= "+row+ "id= "+id);
+ System.out.println("Number of entries in analysis ntuple: "+iTuple.get(id).rows());
+ System.out.println("Number of recognized events: "+nEvents[id]);
+ /*Create the profile. Create it for all the channels, to keep sync.*/
+ nBins=nEvents[id]/100;
+ if (nBins<=0) nBins=1;
+
+ /*Clear previous*/
+
+ if (id>0){
+ aida.tree().rm("strip");
+ aida.tree().rm("fun0");
+ aida.tree().rm("fun1");
+ }
+ /*Create the profile.*/
+ cProfile=aida.profile1D("strip",nBins,-0.5,nEvents[id]*(1-skipInitial)+0.5);
+ cProfile.reset();
+ /*Create the function for the profile fit and the gaus fit*/
+ fFunction=fFactory.createFunctionFromScript("fun0",1,"A*exp(-x[0]/tau)+B","A,tau,B","",null);
+ fFunction1=fFactory.createFunctionByName("fun1","G");
+
+ if (EcalMonitoringUtilities.isInHole(row,column)==true){
+ System.out.println("Channel X= "+column+" Y= "+row+" is in hole. Skip");
+ hCharge.add(aida.histogram1D("charge_"+id,200,0.,1.)); //create here the histogram to keep sync
+ System.out.println("In hole, skip");
+ continue;
+ }
+ else if (nEvents[id]<nEventsMin) {
+ hCharge.add(aida.histogram1D("charge_"+id,200,0.,1.)); //create here the histogram to keep sync
+ System.err.println("LedAnalysis:: the channel X= "+column+" Y= "+row+" has not enough events "+nEvents[id]+" "+nEventsMin);
+
+ continue;
+ }
+
+ //Fill the profile*/
+ nSkip=(int)(nEvents[id]*skipInitial);
+ if (nSkip>iTuple.get(id).rows()){
+ System.out.println("Can't skip initial events?");
+ nSkip=0;
+ }
+ iTuple.get(id).start();
+ iTuple.get(id).skip(nSkip); //This is the work-around for those channels with charge starting from 0 and rapidly growing//
+ n=0;
+ iTuple.get(id).next();
+ while ( iTuple.get(id).next() ){
+ e=iTuple.get(id).getDouble(1);
+ if (e<eMin) eMin=e;
+ if (e>eMax) eMax=e;
+ cProfile.fill(1.*n,e);
+ n++;
+ }
+ fFitter=aida.analysisFactory().createFitFactory().createFitter("chi2","","v");
+
+ if (doFullAnalysis){
+ //Init function parameters
+ double[] initialPars={eMax-eMin,nEvents[id]/10.,eMin};
+ if (initialPars[0]<0) initialPars[0]=0;
+ fFunction.setParameters(initialPars);
+
+ //Do the fit
+ System.out.println("LedAnalysis:: do profile fit "+id+" "+fFitter.engineName()+" "+fFitter.fitMethodName());
+ System.out.println("LedAnalysis:: initial parameters "+initialPars[0]+" "+initialPars[1]+" "+initialPars[2]);
+ fResult=fFitter.fit(cProfile,fFunction);
+ fPars = fResult.fittedParameters();
+ fParErrs = fResult.errors();
+ fParNames = fResult.fittedParameterNames();
+ System.out.println("LedAnalysis:: Status= "+fResult.fitStatus()+" "+fResult.isValid()+" Chi2 = "+fResult.quality()+" NDF: "+fResult.ndf());
+ for(int i=0; i< fResult.fittedFunction().numberOfParameters(); i++ ){
+ System.out.println(fParNames[i]+" : "+fPars[i]+" +- "+fParErrs[i]);
+ }
+ fFunction.setParameters(fPars);
+
+
+ //if fit failed, revert to simpler case
+ if ((fResult.isValid()==false)||Double.isNaN(fParErrs[0])||Double.isNaN(fParErrs[1])||Double.isNaN(fParErrs[2])){
+ System.out.println("LedAnalysis:: fit failed. Reverting to simpler case");
+ nSkip=(int)(nEvents[id]*(skipMin+skipInitial));
+ }
+ else{
+ //Now we have the tau parameter. Take ONLY the events that are with N>5*tau/
+ //As a cross-check, also verify that tau > Nevents/10, otherwise skip the first Nevents/2
+ //and emit warning
+ nSkip=(int)( fPars[1]*5);
+ if (nSkip < (nEvents[id]*skipMin)){
+ System.out.println("LedAnalysis:: Skip number too low: "+nSkip+" Increment it to "+nEvents[id]/2);
+ nSkip=(int)(nEvents[id]*(skipMin+skipInitial));
+ }
+ if (nSkip > nEvents[id]){
+ System.out.println("LedAnalysis:: Skip number too high, reduce it");
+ nSkip=(int)(nEvents[id]*(skipMin+skipInitial));
+ }
+ }
+ }
+ else{
+ nSkip=(int)(nEvents[id]*(skipMin+skipInitial));
+ }
+
+ System.out.println("LedAnalysis:: gaus fit :: Going to skip "+nSkip+" out of "+nEvents[id]);
+ System.out.println("eMin is: "+eMin+" eMax is: "+eMax);
+ hCharge.add(aida.histogram1D("charge_"+id,200,eMin*0.9,eMax*1.1));
+
+
+ iTuple.get(id).start();
+ iTuple.get(id).skip(nSkip);
+ n=0;
+ while (iTuple.get(id).next()){
+ e=iTuple.get(id).getDouble(1);
+ t=iTuple.get(id).getDouble(2);
+ hCharge.get(id).fill(e);
+ n++;
+ }
+
+ /*Finally do the fit with the gaussian*/
+ double[] initialPars1={hCharge.get(id).maxBinHeight(),hCharge.get(id).mean(),hCharge.get(id).rms()};
+
+ System.out.println("LedAnalysis:: Gaus fit");
+ System.out.println("LedAnalysis:: initial parameters "+initialPars1[0]+" "+initialPars1[1]+" "+initialPars1[2]);
+
+ fFunction1.setParameters(initialPars1);
+ fResult=fFitter.fit(hCharge.get(id),fFunction1);
+ fPars = fResult.fittedParameters();
+ fParErrs = fResult.errors();
+ fParNames = fResult.fittedParameterNames();
+ System.out.println("Status= "+fResult.fitStatus()+" "+fResult.isValid()+" Chi2 = "+fResult.quality()+" NDF: "+fResult.ndf());
+ for(int i=0; i< fResult.fittedFunction().numberOfParameters(); i++ ){
+ System.out.println(fParNames[i]+" : "+fPars[i]+" +- "+fParErrs[i]);
+ }
+ fFunction1.setParameters(fPars);
+ mMean[id]=fPars[1];
+ mRMS[id]=fPars[2];
+
+ hMeanCharge2D.fill(column,row,mMean[id]);
+ System.out.println("\n");
+ }//End loop on channels
+
+
+
+ if ((pPlotter2!=null)&&(isMonitoringApp)){
+ style = pPlotter2.region(0).style();
+ style.setParameter("hist2DStyle", "colorMap");
+ style.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+ style.dataStyle().fillStyle().setParameter("showZeroHeightBins", Boolean.FALSE.toString());
+ pPlotter2.region(0).plot(hMeanCharge2D);
+ pPlotter2.region(0).refresh();
+ }
+ else{
+ IPlotterStyle pstyle = aida.analysisFactory().createPlotterFactory().createPlotterStyle();
+ pPlotter2 = null;
+ pPlotter2 = aida.analysisFactory().createPlotterFactory().create();
+ pstyle.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+ pstyle.dataStyle().fillStyle().setParameter("showZeroHeightBins", Boolean.FALSE.toString());
+ pstyle.setParameter("hist2DStyle", "colorMap");
+ if (pPlotter2!=null){
+ pPlotter2.createRegion().plot(hMeanCharge2D,pstyle);
+ pPlotter2.show();
+ }
+ }
+
+ if (isMonitoringApp){
+ askUploadToDBDialog();
+ synchronized (modalMonitor) {
+ try{
+ modalMonitor.wait(60000); //wait 1 minute for user interaction.
+ }
+ catch(InterruptedException excp){
+ System.out.println("Got exception: "+excp);
+ }
+ }
+ if ((m_ret!=LedColor.UNKNOWN)){
+ if (m_ret==LedColor.BLUE) System.out.println("OK, upload to DB BLUE");
+ else System.out.println("OK, upload to DB RED");
+ try {
+ uploadToDB(m_ret);
+ } catch (SQLException | DatabaseObjectException | ConditionsObjectException error) {
+ throw new RuntimeException("Error uploading to the database ", error);
+ }
+
+ System.out.println("Save an Elog too");
+ uploadToElog();
+ }
+ else{
+ System.out.println("Cancel pressed. Nothing to do");
+ }
+ }
+
+ /*Write a file with the LED values*/
+ try {
+ if (useRawEnergy){
+ outFileName=runNumber+".raw.txt";
+ }
+ else{
+ outFileName=runNumber+".energy.txt";
+ }
+ PrintWriter writer = new PrintWriter(outFileName, "UTF-8");
+
+ for (int cid = 1; cid <= 442; cid++) {/*This is a loop over the channel ID, as in the conditions system*/
+ EcalChannel cc = findChannel(cid);
+ column = cc.getX(); //This is the column
+ row = cc.getY(); //This is the row
+ id=EcalMonitoringUtilities.getHistoIDFromRowColumn(row,column);
+ row = EcalMonitoringUtilities.getRowFromHistoID(id);
+ column = EcalMonitoringUtilities.getColumnFromHistoID(id);
+ if (EcalMonitoringUtilities.isInHole(row, column)) continue;
+ if ((row == 0) || (column == 0)) continue;
+
+ writer.print(cid+" "+column+" "+row+" "+" "+ mMean[id]+" "+mRMS[id]+"\r\n");
+
+ }
+ writer.close();
+
+ }
+ catch (FileNotFoundException fnfe) {
+
+ System.out.println(fnfe.getMessage());
+
+ }
+
+ catch (IOException ioe) {
+
+ System.out.println(ioe.getMessage());
+
+ }
+
+
+ System.out.println("EcalLedSequenceMonitor endOfData clear histograms");
+ for(int ii = 0; ii < NUM_CHANNELS; ii++) {
+ row=EcalMonitoringUtilities.getRowFromHistoID(ii);
+ column = EcalMonitoringUtilities.getColumnFromHistoID(ii);
+ hName="charge_"+ii;
+ try{
+ aida.tree().rm(hName);
+ }
+ catch(IllegalArgumentException ee){
+ System.out.println("Got exception "+ee);
+ }
+
+ if (!saveTuple||(isMonitoringApp)){
+ hName="nTuple"+ii;
+ try{
+ aida.tree().rm(hName);
+ }
+ catch(IllegalArgumentException ee){
+ System.out.println("Got exception "+ee);
+ }
+ }
+ }
+ System.out.println("EcalLedSequenceMonitor endOfData clear histograms done");
+ System.out.println("endOfData end");
+ System.out.println("The program is not stucked. It is writing the output AIDA file, this takes time!");
+ }/*End endOfData*/
+
+
+ /**
+ * This function returns the driver number (from 0 to 3) given the LED id.
+ * @param led
+ * @return
+ */
+ public int getDriver(int led){
+ int ret=-1;
+ if ((led>=2)&&(led<56)) ret=0;
+ else if ((led>=56)&&(led<112)) ret=1;
+ else if ((led>=112)&&(led<168)) ret=2;
+ else if ((led>=168)&&(led<224)) ret=3;
+ return ret;
+ }
+
+ /**
+ * Very simple method to retrieve the pedestal-subtracted raw Energy.
+ * If the gain changes (because we do a re-calibration), I do not want to include this in the LED analysis
+ * @param energy
+ * @param cellID
+ * @return
+ */
+ public double getRawADCSum(double energy,long cellID){
+ EcalChannelConstants channelData = ecalConditions.getChannelConstants(ecalConditions.getChannelCollection().findGeometric(cellID));
+ double RawSum=energy / EcalUtils.GeV;
+ double gain=channelData.getGain().getGain();
+ double ret=RawSum/gain;
+ // System.out.println("A:C "+RawSum+" "+ret);
+ return ret;
+ }
+
+ private void uploadToDB(LedColor color) throws DatabaseObjectException, ConditionsObjectException, SQLException {
+ int x,y,id;
+ double mean,rms;
+ System.out.println(String.format("Uploading new led data to the database, runMin=%d, runMax=%d, tag=%s ....",
+ runNumber,runNumberMax,dbTag));
+
+ conditionsManager = DatabaseConditionsManager.getInstance();
+ EcalLedCalibrationCollection led_calibrations = new EcalLedCalibrationCollection();
+ led_calibrations.setConnection(conditionsManager.getConnection());
+
+ TableMetaData tableMetaData = conditionsManager.findTableMetaData(dbTableName);
+ led_calibrations.setTableMetaData(tableMetaData);
+
+ for (int cid = 1; cid <= 442; cid++) {/*This is a loop over the channel ID, as in the conditions system*/
+ EcalChannel cc = findChannel(cid);
+ x = cc.getX(); //This is the column
+ y = cc.getY(); //This is the row
+ id=EcalMonitoringUtilities.getHistoIDFromRowColumn(y,x);
+ mean=mMean[id];
+ rms=mRMS[id];
+ led_calibrations.add(new EcalLedCalibration(cid,mean,rms,color));
+ }
+
+ int collectionId = -1;
+
+ try {
+ collectionId = conditionsManager.getCollectionId(led_calibrations, "loaded by EcalLedSequenceMonitor");
+ } catch (Exception e) {
+ System.out.println("Got exception on uploadToDB "+ e);
+ throw new RuntimeException(e);
+ }
+ System.err.println("CollectionID: "+collectionId);
+ led_calibrations.insert();
+ ConditionsRecord conditionsRecord = new ConditionsRecord(
+ led_calibrations.getCollectionId(), runNumber, runNumberMax, dbTableName, dbTableName,
+ "Generated by LedAnalysis from Run #"+runNumber, dbTag);
+ conditionsRecord.setConnection(conditionsManager.getConnection());
+ tableMetaData = conditionsManager.findTableMetaData("conditions");
+ conditionsRecord.setTableMetaData(tableMetaData);
+ conditionsRecord.insert();
+
+ System.out.println("Upload to DB done");
+ }
+
+ private void uploadToElog(){
+ String path,exe,command,imgpath;
+ path="/home/hpsrun/LedSequenceData";
+ exe=path+"/doElog.csh";
+ imgpath=path+"/screenshots/"+runNumber+".png";
+
+ File f=new File(path);
+ if (!f.exists()){
+ System.err.println("LedMonitoringSequence:: wrong path");
+ return;
+ }
+ if (pPlotter2==null){
+ System.err.println("LedMonitoringSquence:: no plotter");
+ return;
+ }
+ try{
+ pPlotter2.writeToFile(imgpath);
+ }
+ catch(Exception e){
+ System.err.println("Exception "+e);
+ }
+ File f1=new File(exe);
+ if (!f1.exists()){
+ System.err.println("LedMonitoringSequence:: no script!");
+ return;
+ }
+ command=exe+" "+imgpath;
+ try{
+ System.out.println("LedMonitoringSequence:: try this command: "+command);
+ Runtime.getRuntime().exec(command);
+ }
+ catch(Exception e){
+ System.err.println("Exception "+e);
+ }
+ }
+
+
+ private void drawProfiles(int ledID,int driverID){
+
+ int m_column,m_row,m_ledID,m_chID,m_ID,m_driverID;
+
+ m_ledID = ledID;
+ m_driverID = driverID;
+ m_chID = 0;
+
+
+ if (m_driverID<=3) m_chID = LedTopMapInverted.get(ledID);
+ else m_chID = LedBotMapInverted.get(ledID);
+
+ m_column=findChannel(m_chID).getX();
+ m_row=findChannel(m_chID).getY();
+ m_ID=EcalMonitoringUtilities.getHistoIDFromRowColumn(m_row, m_column);
+ /*
System.out.println("Going to draw LED id "+m_ledID+" X= "+m_column+" Y= "+m_row+" driver: "+m_driverID);
System.out.println("Ch_ID: "+m_chID);
System.out.println("Histo ID:"+m_ID);
System.out.println("Events: "+iTuple.get(m_ID).rows());
- */
- hChargeVsEvn.get(m_driverID).reset();
- hChargeVsEvn.get(m_driverID).setTitle("Driver_"+m_driverID+" Led_"+ledID);
- IEvaluator evaluatorX = aida.analysisFactory().createTupleFactory(aida.analysisFactory().createTreeFactory().create()).createEvaluator("fEvn");
- IEvaluator evaluatorY = aida.analysisFactory().createTupleFactory(aida.analysisFactory().createTreeFactory().create()).createEvaluator("fCharge");
-
- iTuple.get(m_ID).project(hChargeVsEvn.get(m_driverID),evaluatorX,evaluatorY);
-
- pPlotter.region(m_driverID).clear();
- pPlotter.region(m_driverID).plot(hChargeVsEvn.get(m_driverID));
- pPlotter.region(m_driverID).refresh();
-
- }
-
- private EcalChannel findChannel(int channel_id) {
- return ecalConditions.getChannelCollection().findChannel(channel_id);
- }
-
-
- private void askUploadToDBDialog(){
- m_ret=LedColor.UNKNOWN;
-
- okButtonRed = new JButton("Yes, red");
- okButtonBlue = new JButton("Yes, blue");
- cancelButton = new JButton("Cancel");
- labelString = "<html> Update conditions to DB <br> for run: <br> "+runNumber+" - "+runNumberMax+" <br> ???? <br> "
- + "Use the monitoring app to look at the map<br>"
- + "(Tab LED sequence)<br>"
- +"Reply in 60 seconds<br>"+"</html>";
- label = new JLabel( labelString);
-
- frame = new JFrame("Upload to DB?");
- frame.setSize(500,250);
- panel = new JPanel();
- frame.add(panel);
-
-
- // dialog = new JDialog((JFrame)null, "User selection");
- // dialog.setSize(200,200);
- // dialog.setLayout(new FlowLayout());
- // dialog.add(label);
- // dialog.add(cancelButton);
- // dialog.add(okButton);
- // dialog.setVisible(true);
- //dialog.pack();
- panel.add(label);
- panel.add(cancelButton);
- panel.add(okButtonBlue);
- panel.add(okButtonRed);
-
-
- frame.setVisible(true);
- okButtonBlue.addActionListener(new ActionListener(){
- public void actionPerformed(ActionEvent event)
- {
- m_ret=LedColor.BLUE;
- frame.dispose();
- synchronized(modalMonitor)
- {
- System.out.println("Blue pressed");
- modalMonitor.notify();
- }
- }
- }
- );
- okButtonRed.addActionListener(new ActionListener(){
- public void actionPerformed(ActionEvent event)
- {
- m_ret=LedColor.RED;
- frame.dispose();
- synchronized(modalMonitor)
- {
- System.out.println("Red pressed");
- modalMonitor.notify();
- }
- }
- }
- );
-
- cancelButton.addActionListener(new ActionListener(){
- public void actionPerformed(ActionEvent event)
- {
- m_ret=LedColor.UNKNOWN;
- frame.dispose();
- synchronized(modalMonitor)
- {
- System.out.println("Cancel pressed");
- modalMonitor.notify();
- }
- }
- }
- );
-
- System.out.println("askUploadDB done");
- }
+ */
+ hChargeVsEvn.get(m_driverID).reset();
+ hChargeVsEvn.get(m_driverID).setTitle("Driver_"+m_driverID+" Led_"+ledID);
+ IEvaluator evaluatorX = aida.analysisFactory().createTupleFactory(aida.analysisFactory().createTreeFactory().create()).createEvaluator("fEvn");
+ IEvaluator evaluatorY = aida.analysisFactory().createTupleFactory(aida.analysisFactory().createTreeFactory().create()).createEvaluator("fCharge");
+
+ iTuple.get(m_ID).project(hChargeVsEvn.get(m_driverID),evaluatorX,evaluatorY);
+
+ pPlotter.region(m_driverID).clear();
+ pPlotter.region(m_driverID).plot(hChargeVsEvn.get(m_driverID));
+ pPlotter.region(m_driverID).refresh();
+
+ }
+
+ private EcalChannel findChannel(int channel_id) {
+ return ecalConditions.getChannelCollection().findChannel(channel_id);
+ }
+
+
+ private void askUploadToDBDialog(){
+ m_ret=LedColor.UNKNOWN;
+
+ okButtonRed = new JButton("Yes, red");
+ okButtonBlue = new JButton("Yes, blue");
+ cancelButton = new JButton("Cancel");
+ labelString = "<html> Update conditions to DB <br> for run: <br> "+runNumber+" - "+runNumberMax+" <br> ???? <br> "
+ + "Use the monitoring app to look at the map<br>"
+ + "(Tab LED sequence)<br>"
+ +"Reply in 60 seconds<br>"+"</html>";
+ label = new JLabel( labelString);
+
+ frame = new JFrame("Upload to DB?");
+ frame.setSize(500,250);
+ panel = new JPanel();
+ frame.add(panel);
+
+
+ // dialog = new JDialog((JFrame)null, "User selection");
+ // dialog.setSize(200,200);
+ // dialog.setLayout(new FlowLayout());
+ // dialog.add(label);
+ // dialog.add(cancelButton);
+ // dialog.add(okButton);
+ // dialog.setVisible(true);
+ //dialog.pack();
+ panel.add(label);
+ panel.add(cancelButton);
+ panel.add(okButtonBlue);
+ panel.add(okButtonRed);
+
+
+ frame.setVisible(true);
+ okButtonBlue.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent event)
+ {
+ m_ret=LedColor.BLUE;
+ frame.dispose();
+ synchronized(modalMonitor)
+ {
+ System.out.println("Blue pressed");
+ modalMonitor.notify();
+ }
+ }
+ }
+ );
+ okButtonRed.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent event)
+ {
+ m_ret=LedColor.RED;
+ frame.dispose();
+ synchronized(modalMonitor)
+ {
+ System.out.println("Red pressed");
+ modalMonitor.notify();
+ }
+ }
+ }
+ );
+
+ cancelButton.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent event)
+ {
+ m_ret=LedColor.UNKNOWN;
+ frame.dispose();
+ synchronized(modalMonitor)
+ {
+ System.out.println("Cancel pressed");
+ modalMonitor.notify();
+ }
+ }
+ }
+ );
+
+ System.out.println("askUploadDB done");
+ }
}
Modified: java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/triggerbank/TIData.java
=============================================================================
--- java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/triggerbank/TIData.java (original)
+++ java/branches/jeremy-dev/record-util/src/main/java/org/hps/record/triggerbank/TIData.java Tue Feb 16 13:35:43 2016
@@ -5,18 +5,25 @@
/**
* Class <code>TIData</code> is an implementation of abstract class
* <code>AbstractIntData</code> that represents a TI trigger bit bank.
- * It contains both a time window length and a set of flags that track
- * whether a trigger of a given type was registered with the event to
- * which this bank is attached.
*
* @author Nathan Baltzell <[log in to unmask]>
*/
public class TIData extends AbstractIntData {
- /** The EvIO bank header tag for TI data banks. */
+
+ /**
+ * The EvIO bank header tag for TI data banks.
+ */
public static final int BANK_TAG = 0xe10a; // EvioEventConstants.TI_TRIGGER_BANK_TAG;
- /** The expected number of entries in the data bank. */
- public static final int BANK_SIZE = 4;
-
+ /**
+ * The expected number of entries in the data bank for the 2015 data.
+ */
+ private static final int BANK_SIZE_2015 = 4;
+ /**
+ * The expected number of entries in the data bank for the 2016 data (after
+ * unprescaled trigger bits were added).
+ */
+ private static final int BANK_SIZE_2016 = 5;
+
// Store the parsed data bank parameters.
private long time = 0;
private boolean singles0 = false;
@@ -25,36 +32,59 @@
private boolean pairs1 = false;
private boolean calib = false;
private boolean pulser = false;
-
- /**
- * Creates a <code>TIData</code> bank from a raw EvIO data bank.
- * It is expected that the EvIO reader will verify that the bank
- * tag is of the appropriate type.
+ private boolean hasUnprescaledTriggerBits = false;
+ private boolean singles0Unprescaled = false;
+ private boolean singles1Unprescaled = false;
+ private boolean pairs0Unprescaled = false;
+ private boolean pairs1Unprescaled = false;
+ private boolean calibUnprescaled = false;
+ private boolean pulserUnprescaled = false;
+
+ /**
+ * Creates a <code>TIData</code> bank from a raw EvIO data bank. It is
+ * expected that the EvIO reader will verify that the bank tag is of the
+ * appropriate type.
+ *
* @param bank - The EvIO data bank.
*/
public TIData(int[] bank) {
super(bank);
decodeData();
}
-
+
/**
* Creates a <code>TIData</code> object from an existing LCIO
* <code>GenericObject</code>.
+ *
* @param tiData - The source data bank object.
*/
public TIData(GenericObject tiData) {
super(tiData, BANK_TAG);
decodeData();
}
-
+
@Override
protected final void decodeData() {
- // Check that the data bank is the expected size. If not, throw
- // and exception.
- if(this.bank.length != BANK_SIZE) {
- throw new RuntimeException("Invalid Data Length: " + bank.length);
- }
-
+ // Check that the data bank is the expected size. If not, throw
+ // and exception.
+ switch (this.bank.length) {
+ case BANK_SIZE_2015:
+// System.out.println("2015-style TI bank");
+ break;
+ case BANK_SIZE_2016:
+// System.out.format("2016-style TI bank, first word %x, last word %x\n", bank[0], bank[4]);
+ hasUnprescaledTriggerBits = true;
+ singles0Unprescaled = ((bank[0]) & 1) == 1;
+ singles1Unprescaled = ((bank[0] >> 1) & 1) == 1;
+ pairs0Unprescaled = ((bank[0] >> 2) & 1) == 1;
+ pairs1Unprescaled = ((bank[0] >> 3) & 1) == 1;
+ calibUnprescaled = ((bank[0] >> 4) & 1) == 1;
+ pulserUnprescaled = ((bank[0] >> 5) & 1) == 1;
+ break;
+ default:
+ throw new RuntimeException("Invalid Data Length: " + bank.length);
+ }
+
// Check each trigger bit to see if it is active. A value of
// 1 indicates a trigger of that type occurred, and 0 that it
// did not.
@@ -64,83 +94,175 @@
pairs1 = ((bank[0] >> 27) & 1) == 1;
calib = ((bank[0] >> 28) & 1) == 1;
pulser = ((bank[0] >> 29) & 1) == 1;
-
- // Get the unprocessed start and end times for the bank.
- long w1 = bank[2] & 0xffffffffL;
- long w2 = bank[3] & 0xffffffffL;
-
- // Process the times into units of clock-cycles.
+
+ // interpret time:
+ final long w1 = bank[2] & 0xffffffffL;
+ final long w2 = bank[3] & 0xffffffffL;
final long timelo = w1;
final long timehi = (w2 & 0xffff) << 32;
-
- // Store the time difference in nanoseconds.
time = 4 * (timelo + timehi);
}
-
+
@Override
public int getTag() {
return BANK_TAG;
}
-
- /**
- * Gets the time window for the bank.
- * @return Returns the time window length in nanoseconds.
- */
+
public long getTime() {
return time;
}
-
+
/**
* Indicates whether a singles 0 trigger was registered.
+ *
* @return Returns <code>true</code> if the trigger occurred, and
* <code>false</code> otherwise.
*/
public boolean isSingle0Trigger() {
return singles0;
}
-
+
/**
* Indicates whether a singles 1 trigger was registered.
+ *
* @return Returns <code>true</code> if the trigger occurred, and
* <code>false</code> otherwise.
*/
public boolean isSingle1Trigger() {
return singles1;
}
-
+
/**
* Indicates whether a pair 0 trigger was registered.
+ *
* @return Returns <code>true</code> if the trigger occurred, and
* <code>false</code> otherwise.
*/
public boolean isPair0Trigger() {
return pairs0;
}
-
+
/**
* Indicates whether a pair 1 trigger was registered.
+ *
* @return Returns <code>true</code> if the trigger occurred, and
* <code>false</code> otherwise.
*/
public boolean isPair1Trigger() {
return pairs1;
}
-
+
/**
* Indicates whether a cosmic trigger was registered.
+ *
* @return Returns <code>true</code> if the trigger occurred, and
* <code>false</code> otherwise.
*/
public boolean isCalibTrigger() {
return calib;
}
-
+
/**
* Indicates whether a random/pulser trigger was registered.
+ *
* @return Returns <code>true</code> if the trigger occurred, and
* <code>false</code> otherwise.
*/
public boolean isPulserTrigger() {
return pulser;
}
-}
+
+ /**
+ * Indicates whether this TI data has unprescaled trigger bits.
+ *
+ * @return Returns <code>true</code> if the TI data has a fifth int
+ * containing unprescaled trigger bits, and <code>false</code> otherwise.
+ */
+ public boolean hasUnprescaledTriggerBits() {
+ return hasUnprescaledTriggerBits;
+ }
+
+ /**
+ * Indicates whether a singles 0 (unprescaled) trigger was registered.
+ *
+ * @return Returns <code>true</code> if the trigger occurred, and
+ * <code>false</code> otherwise. Throws a RuntimeException if this data does
+ * not have unprescaled trigger bits.
+ */
+ public boolean isSingle0UnprescaledTrigger() {
+ if (!hasUnprescaledTriggerBits) {
+ throw new RuntimeException("This TI data does not have unprescaled trigger bits.");
+ }
+ return singles0Unprescaled;
+ }
+
+ /**
+ * Indicates whether a singles 1 (unprescaled) trigger was registered.
+ *
+ * @return Returns <code>true</code> if the trigger occurred, and
+ * <code>false</code> otherwise. Throws a RuntimeException if this data does
+ * not have unprescaled trigger bits.
+ */
+ public boolean isSingle1UnprescaledTrigger() {
+ if (!hasUnprescaledTriggerBits) {
+ throw new RuntimeException("This TI data does not have unprescaled trigger bits.");
+ }
+ return singles1Unprescaled;
+ }
+
+ /**
+ * Indicates whether a pairs 0 (unprescaled) trigger was registered.
+ *
+ * @return Returns <code>true</code> if the trigger occurred, and
+ * <code>false</code> otherwise. Throws a RuntimeException if this data does
+ * not have unprescaled trigger bits.
+ */
+ public boolean isPair0UnprescaledTrigger() {
+ if (!hasUnprescaledTriggerBits) {
+ throw new RuntimeException("This TI data does not have unprescaled trigger bits.");
+ }
+ return pairs0Unprescaled;
+ }
+
+ /**
+ * Indicates whether a pairs 1 (unprescaled) trigger was registered.
+ *
+ * @return Returns <code>true</code> if the trigger occurred, and
+ * <code>false</code> otherwise. Throws a RuntimeException if this data does
+ * not have unprescaled trigger bits.
+ */
+ public boolean isPair1UnprescaledTrigger() {
+ if (!hasUnprescaledTriggerBits) {
+ throw new RuntimeException("This TI data does not have unprescaled trigger bits.");
+ }
+ return pairs1Unprescaled;
+ }
+
+ /**
+ * Indicates whether a cosmic (unprescaled) trigger was registered.
+ *
+ * @return Returns <code>true</code> if the trigger occurred, and
+ * <code>false</code> otherwise. Throws a RuntimeException if this data does
+ * not have unprescaled trigger bits.
+ */
+ public boolean isCalibUnprescaledTrigger() {
+ if (!hasUnprescaledTriggerBits) {
+ throw new RuntimeException("This TI data does not have unprescaled trigger bits.");
+ }
+ return calibUnprescaled;
+ }
+
+ /**
+ * Indicates whether a random/pulser (unprescaled) trigger was registered.
+ *
+ * @return Returns <code>true</code> if the trigger occurred, and
+ * <code>false</code> otherwise. Throws a RuntimeException if this data does
+ * not have unprescaled trigger bits.
+ */
+ public boolean isPulserUnprescaledTrigger() {
+ if (!hasUnprescaledTriggerBits) {
+ throw new RuntimeException("This TI data does not have unprescaled trigger bits.");
+ }
+ return pulserUnprescaled;
+ }
+}
Modified: java/branches/jeremy-dev/run-database/src/main/java/org/hps/run/database/RunManager.java
=============================================================================
--- java/branches/jeremy-dev/run-database/src/main/java/org/hps/run/database/RunManager.java (original)
+++ java/branches/jeremy-dev/run-database/src/main/java/org/hps/run/database/RunManager.java Tue Feb 16 13:35:43 2016
@@ -247,6 +247,15 @@
* @return <code>true</code> if the run exists in the database
*/
public boolean runExists() {
+ if (factory == null) {
+ throw new RuntimeException("factory is null");
+ }
+ if (factory.getRunSummaryDao() == null) {
+ throw new RuntimeException("RunSummaryDao is null");
+ }
+ if (this.run == null) {
+ throw new RuntimeException("run is null");
+ }
return factory.getRunSummaryDao().runSummaryExists(this.run);
}
Modified: java/branches/jeremy-dev/steering-files/src/main/resources/org/hps/steering/monitoring/SvtOnlineMonitoring.lcsim
=============================================================================
--- java/branches/jeremy-dev/steering-files/src/main/resources/org/hps/steering/monitoring/SvtOnlineMonitoring.lcsim (original)
+++ java/branches/jeremy-dev/steering-files/src/main/resources/org/hps/steering/monitoring/SvtOnlineMonitoring.lcsim Tue Feb 16 13:35:43 2016
@@ -22,10 +22,11 @@
<maxSamplePosition>3</maxSamplePosition>
<timeWindowWeight>3</timeWindowWeight>
<resetPeriod>50000</resetPeriod>
+ <saveRootFile>false</saveRootFile>
</driver>
<driver name="SvtHitPlots" type="org.hps.monitoring.drivers.svt.SvtHitPlots">
<doPerChannelsSampleplots>true</doPerChannelsSampleplots>
- <saveRootFile>true</saveRootFile>
+ <saveRootFile>false</saveRootFile>
</driver>
<driver name="SamplesPlots" type="org.hps.monitoring.drivers.svt.SamplesPlots" />
<driver name="PedestalPlots" type="org.hps.monitoring.drivers.svt.PedestalPlots" />
@@ -44,7 +45,9 @@
<neighborDeltaT>8.0</neighborDeltaT>
<debug>false</debug>
</driver>
- <driver name="ClusterPlots" type="org.hps.monitoring.drivers.svt.SvtClusterPlots" />
+ <driver name="ClusterPlots" type="org.hps.monitoring.drivers.svt.SvtClusterPlots">
+ <saveRootFile>false</saveRootFile>
+ </driver>
<driver name="CleanupDriver" type="org.lcsim.recon.tracking.digitization.sisim.config.ReadoutCleanupDriver" />
</drivers>
</lcsim>
Modified: java/branches/jeremy-dev/steering-files/src/main/resources/org/hps/steering/production/DataQualityRecon.lcsim
=============================================================================
--- java/branches/jeremy-dev/steering-files/src/main/resources/org/hps/steering/production/DataQualityRecon.lcsim (original)
+++ java/branches/jeremy-dev/steering-files/src/main/resources/org/hps/steering/production/DataQualityRecon.lcsim Tue Feb 16 13:35:43 2016
@@ -9,7 +9,8 @@
<!-- <driver name="DQMDatabaseDriver"/> -->
<driver name="RawTrackerHitSensorSetup"/>
<driver name="EcalMonitoring"/>
- <driver name="SVTMonitoring"/>
+ <driver name="EcalMonitoringCorr"/>
+ <driver name="SVTMonitoring"/>
<driver name="TrackingMonitoring"/>
<driver name="TrackingResiduals"/>
<driver name="FinalStateMonitoring"/>
@@ -21,6 +22,7 @@
<driver name="TridentMonitoringGBL"/>
<!-- Singles0 -->
<driver name="EcalMonitoringSingles0"/>
+ <driver name="EcalMonitoringCorrSingles0"/>
<driver name="TrackingMonitoringSingles0"/>
<driver name="TrackingMonitoringGBLSingles0"/>
<driver name="TrackingResidualsSingles0"/>
@@ -29,6 +31,7 @@
<driver name="TridentMonitoringSingles0"/>
<!-- Singles1 -->
<driver name="EcalMonitoringSingles1"/>
+ <driver name="EcalMonitoringCorrSingles1"/>
<driver name="TrackingMonitoringSingles1"/>
<driver name="TrackingMonitoringGBLSingles1"/>
<driver name="TrackingResidualsSingles1"/>
@@ -39,7 +42,8 @@
<driver name="V0MonitoringGBLSingles1"/>
<driver name="TridentMonitoringGBLSingles1"/>
<!-- Pairs0 -->
- <driver name="EcalMonitoringPairs0"/>
+ <driver name="EcalMonitoringPairs0"/>
+ <driver name="EcalMonitoringCorrPairs0"/>
<driver name="TrackingMonitoringPairs0"/>
<driver name="TrackingMonitoringGBLPairs0"/>
<driver name="TrackingResidualsPairs0"/>
@@ -47,7 +51,8 @@
<driver name="V0MonitoringPairs0"/>
<driver name="TridentMonitoringPairs0"/>
<!-- Pairs1 -->
- <driver name="EcalMonitoringPairs1"/>
+ <driver name="EcalMonitoringPairs1"/>
+ <driver name="EcalMonitoringCorrPairs1"/>
<driver name="TrackingMonitoringPairs1"/>
<driver name="TrackingMonitoringGBLPairs1"/>
<driver name="TrackingResidualsPairs1"/>
@@ -58,7 +63,7 @@
<driver name="V0MonitoringGBLPairs1"/>
<driver name="TridentMonitoringGBLPairs1"/>
<!-- -->
- <driver name="AidaSaveDriver"/>
+ <!-- <driver name="AidaSaveDriver"/>-->
<driver name="AidaToRootSaveDriver"/>
<driver name="CleanupDriver"/>
</execute>
@@ -79,6 +84,13 @@
<!-- all triggers -->
<driver name="EcalMonitoring" type="org.hps.analysis.dataquality.EcalMonitoring">
<triggerType>all</triggerType>
+ <beamEnergy>${beamEnergy}</beamEnergy>
+ </driver>
+ <driver name="EcalMonitoringCorr" type="org.hps.analysis.dataquality.EcalMonitoring">
+ <triggerType>all</triggerType>
+ <beamEnergy>${beamEnergy}</beamEnergy>
+ <clusterCollectionName>EcalClustersCorr</clusterCollectionName>
+ <fillHitPlots>false</fillHitPlots>
</driver>
<driver name="SVTMonitoring" type="org.hps.analysis.dataquality.SvtMonitoring">
<triggerType>all</triggerType>
@@ -92,12 +104,15 @@
</driver>
<driver name="FinalStateMonitoring" type="org.hps.analysis.dataquality.FinalStateMonitoring">
<triggerType>all</triggerType>
+ <beamEnergy>${beamEnergy}</beamEnergy>
</driver>
<driver name="V0Monitoring" type="org.hps.analysis.dataquality.V0Monitoring">
<triggerType>all</triggerType>
+ <beamEnergy>${beamEnergy}</beamEnergy>
</driver>
<driver name="TridentMonitoring" type="org.hps.analysis.dataquality.TridentMonitoring">
<triggerType>all</triggerType>
+ <beamEnergy>${beamEnergy}</beamEnergy>
</driver>
<driver name="TrackingMonitoringGBL" type="org.hps.analysis.dataquality.TrackingMonitoring">
<trackCollectionName>GBLTracks</trackCollectionName>
@@ -105,20 +120,30 @@
</driver>
<driver name="FinalStateMonitoringGBL" type="org.hps.analysis.dataquality.FinalStateMonitoring">
<triggerType>all</triggerType>
+ <beamEnergy>${beamEnergy}</beamEnergy>
<isGBL>true</isGBL>
</driver>
<driver name="V0MonitoringGBL" type="org.hps.analysis.dataquality.V0Monitoring">
<triggerType>all</triggerType>
<isGBL>true</isGBL>
+ <beamEnergy>${beamEnergy}</beamEnergy>
</driver>
<driver name="TridentMonitoringGBL" type="org.hps.analysis.dataquality.TridentMonitoring">
<triggerType>all</triggerType>
<isGBL>true</isGBL>
+ <beamEnergy>${beamEnergy}</beamEnergy>
</driver>
<!-- singles0 triggers -->
<driver name="EcalMonitoringSingles0" type="org.hps.analysis.dataquality.EcalMonitoring">
<triggerType>singles0</triggerType>
+ <beamEnergy>${beamEnergy}</beamEnergy>
+ </driver>
+ <driver name="EcalMonitoringCorrSingles0" type="org.hps.analysis.dataquality.EcalMonitoring">
+ <triggerType>singles0</triggerType>
+ <beamEnergy>${beamEnergy}</beamEnergy>
+ <clusterCollectionName>EcalClustersCorr</clusterCollectionName>
+ <fillHitPlots>false</fillHitPlots>
</driver>
<driver name="SVTMonitoringSingles0" type="org.hps.analysis.dataquality.SvtMonitoring">
<triggerType>singles0</triggerType>
@@ -135,17 +160,27 @@
</driver>
<driver name="FinalStateMonitoringSingles0" type="org.hps.analysis.dataquality.FinalStateMonitoring">
<triggerType>singles0</triggerType>
+ <beamEnergy>${beamEnergy}</beamEnergy>
</driver>
<driver name="V0MonitoringSingles0" type="org.hps.analysis.dataquality.V0Monitoring">
<triggerType>singles0</triggerType>
+ <beamEnergy>${beamEnergy}</beamEnergy>
</driver>
<driver name="TridentMonitoringSingles0" type="org.hps.analysis.dataquality.TridentMonitoring">
<triggerType>singles0</triggerType>
+ <beamEnergy>${beamEnergy}</beamEnergy>
</driver>
<!-- singles1 triggers -->
<driver name="EcalMonitoringSingles1" type="org.hps.analysis.dataquality.EcalMonitoring">
<triggerType>singles1</triggerType>
+ <beamEnergy>${beamEnergy}</beamEnergy>
+ </driver>
+ <driver name="EcalMonitoringCorrSingles1" type="org.hps.analysis.dataquality.EcalMonitoring">
+ <triggerType>singles1</triggerType>
+ <beamEnergy>${beamEnergy}</beamEnergy>
+ <clusterCollectionName>EcalClustersCorr</clusterCollectionName>
+ <fillHitPlots>false</fillHitPlots>
</driver>
<driver name="SVTMonitoringSingles1" type="org.hps.analysis.dataquality.SvtMonitoring">
<triggerType>singles1</triggerType>
@@ -162,29 +197,42 @@
</driver>
<driver name="FinalStateMonitoringSingles1" type="org.hps.analysis.dataquality.FinalStateMonitoring">
<triggerType>singles1</triggerType>
+ <beamEnergy>${beamEnergy}</beamEnergy>
</driver>
<driver name="V0MonitoringSingles1" type="org.hps.analysis.dataquality.V0Monitoring">
<triggerType>singles1</triggerType>
+ <beamEnergy>${beamEnergy}</beamEnergy>
</driver>
<driver name="TridentMonitoringSingles1" type="org.hps.analysis.dataquality.TridentMonitoring">
- <triggerType>singles1</triggerType>
+ <triggerType>singles1</triggerType>
+ <beamEnergy>${beamEnergy}</beamEnergy>
</driver>
<driver name="FinalStateMonitoringGBLSingles1" type="org.hps.analysis.dataquality.FinalStateMonitoring">
<triggerType>singles1</triggerType>
<isGBL>true</isGBL>
+ <beamEnergy>${beamEnergy}</beamEnergy>
</driver>
<driver name="V0MonitoringGBLSingles1" type="org.hps.analysis.dataquality.V0Monitoring">
<triggerType>singles1</triggerType>
+ <beamEnergy>${beamEnergy}</beamEnergy>
<isGBL>true</isGBL>
</driver>
<driver name="TridentMonitoringGBLSingles1" type="org.hps.analysis.dataquality.TridentMonitoring">
<triggerType>singles1</triggerType>
<isGBL>true</isGBL>
+ <beamEnergy>${beamEnergy}</beamEnergy>
</driver>
<!-- pairs0 triggers -->
<driver name="EcalMonitoringPairs0" type="org.hps.analysis.dataquality.EcalMonitoring">
<triggerType>pairs0</triggerType>
+ <beamEnergy>${beamEnergy}</beamEnergy>
+ </driver>
+ <driver name="EcalMonitoringCorrPairs0" type="org.hps.analysis.dataquality.EcalMonitoring">
+ <triggerType>pairs0</triggerType>
+ <beamEnergy>${beamEnergy}</beamEnergy>
+ <clusterCollectionName>EcalClustersCorr</clusterCollectionName>
+ <fillHitPlots>false</fillHitPlots>
</driver>
<driver name="SVTMonitoringPairs0" type="org.hps.analysis.dataquality.SvtMonitoring">
<triggerType>pairs0</triggerType>
@@ -201,18 +249,28 @@
</driver>
<driver name="FinalStateMonitoringPairs0" type="org.hps.analysis.dataquality.FinalStateMonitoring">
<triggerType>pairs0</triggerType>
+ <beamEnergy>${beamEnergy}</beamEnergy>
</driver>
<driver name="V0MonitoringPairs0" type="org.hps.analysis.dataquality.V0Monitoring">
<triggerType>pairs0</triggerType>
+ <beamEnergy>${beamEnergy}</beamEnergy>
</driver>
<driver name="TridentMonitoringPairs0" type="org.hps.analysis.dataquality.TridentMonitoring">
<triggerType>pairs0</triggerType>
+ <beamEnergy>${beamEnergy}</beamEnergy>
</driver>
<!-- pairs1 triggers -->
<driver name="EcalMonitoringPairs1" type="org.hps.analysis.dataquality.EcalMonitoring">
<triggerType>pairs1</triggerType>
+ <beamEnergy>${beamEnergy}</beamEnergy>
+ </driver>
+ <driver name="EcalMonitoringCorrPairs1" type="org.hps.analysis.dataquality.EcalMonitoring">
+ <triggerType>pairs1</triggerType>
+ <beamEnergy>${beamEnergy}</beamEnergy>
+ <clusterCollectionName>EcalClustersCorr</clusterCollectionName>
+ <fillHitPlots>false</fillHitPlots>
</driver>
<driver name="SVTMonitoringPairs1" type="org.hps.analysis.dataquality.SvtMonitoring">
<triggerType>pairs1</triggerType>
@@ -229,24 +287,30 @@
</driver>
<driver name="FinalStateMonitoringPairs1" type="org.hps.analysis.dataquality.FinalStateMonitoring">
<triggerType>pairs1</triggerType>
+ <beamEnergy>${beamEnergy}</beamEnergy>
</driver>
<driver name="V0MonitoringPairs1" type="org.hps.analysis.dataquality.V0Monitoring">
<triggerType>pairs1</triggerType>
+ <beamEnergy>${beamEnergy}</beamEnergy>
</driver>
<driver name="TridentMonitoringPairs1" type="org.hps.analysis.dataquality.TridentMonitoring">
<triggerType>pairs1</triggerType>
+ <beamEnergy>${beamEnergy}</beamEnergy>
</driver>
<driver name="FinalStateMonitoringGBLPairs1" type="org.hps.analysis.dataquality.FinalStateMonitoring">
<triggerType>pairs1</triggerType>
<isGBL>true</isGBL>
+ <beamEnergy>${beamEnergy}</beamEnergy>
</driver>
<driver name="V0MonitoringGBLPairs1" type="org.hps.analysis.dataquality.V0Monitoring">
<triggerType>pairs1</triggerType>
+ <beamEnergy>${beamEnergy}</beamEnergy>
<isGBL>true</isGBL>
</driver>
<driver name="TridentMonitoringGBLPairs1" type="org.hps.analysis.dataquality.TridentMonitoring">
<triggerType>pairs1</triggerType>
<isGBL>true</isGBL>
+ <beamEnergy>${beamEnergy}</beamEnergy>
</driver>
<driver name="CleanupDriver" type="org.lcsim.recon.tracking.digitization.sisim.config.ReadoutCleanupDriver"/>
|