Author: [log in to unmask] Date: Fri Jan 2 11:35:00 2015 New Revision: 1836 Log: Modify DQM ECAL monitioring/steering to accomodate multiple clustering algorithms in same recon file. Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/EcalMonitoring.java java/trunk/steering-files/src/main/resources/org/hps/steering/production/DataQualityEcalOnlyEngineeringRun.lcsim Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/EcalMonitoring.java ============================================================================= --- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/EcalMonitoring.java (original) +++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/EcalMonitoring.java Fri Jan 2 11:35:00 2015 @@ -54,51 +54,64 @@ IHistogram2D energyVsY; IHistogram2D energyVsX; + int nEvents = 0; + int nTotHits = 0; + int nTotClusters = 0; + double sumHitE = 0; + double sumHitPerCluster = 0; + double sumClusterEnergy = 0; + double sumClusterTime=0; + boolean fillHitPlots = true; private Map<String, Double> monitoredQuantityMap = new HashMap<>(); - String[] ecalQuantNames = {"Good", "Stuff", "For", "ECAL"}; + String[] ecalQuantNames = {"avg_N_hits","avg_Hit_Energy", + "avg_N_clusters", "avg_N_hitsPerCluster","avg_Cluster_Energy","avg_ClusterTime"}; double maxE = 2.5; private final String plotHitsDir = "EcalHits/"; private final String plotClustersDir = "EcalClusters/"; - + public void setReadoutHitCollectionName(String readoutHitCollectionName) { this.readoutHitCollectionName = readoutHitCollectionName; } - + public void setCalibratedHitCollectionName(String calibratedHitCollectionName) { this.calibratedHitCollectionName = calibratedHitCollectionName; } - + public void setClusterCollectionName(String clusterCollectionName) { this.clusterCollectionName = clusterCollectionName; + } + + public void setFillHitPlots(boolean fill) { + this.fillHitPlots = fill; } protected void detectorChanged(Detector detector) { System.out.println("EcalMonitoring::detectorChanged Setting up the plotter"); aida.tree().cd("/"); - - // Setup hit plots. - hitCountPlot = aida.histogram1D(plotHitsDir + "Hit Count In Event", 40, -0.5, 39.5); - hitTimePlot = aida.histogram1D(plotHitsDir + "Hit Time", 50, 0 * 4.0, 50 * 4.0); - hitEnergyPlot = aida.histogram1D(plotHitsDir + "Hit Energy", 100, -0.1, maxE); - fiducialHitCountPlot = aida.histogram1D(plotHitsDir + "Hit Count with Fiducial Cut", 10, -0.5, 9.5); - fiducialEnergyPlot = aida.histogram1D(plotHitsDir + "Hit Energy with Fiducial Cut", 100, -0.1, maxE); - + if (fillHitPlots) { + // Setup hit plots. + hitCountPlot = aida.histogram1D(plotHitsDir + calibratedHitCollectionName + " Hit Count In Event", 40, -0.5, 39.5); + hitTimePlot = aida.histogram1D(plotHitsDir + calibratedHitCollectionName + " Hit Time", 50, 0 * 4.0, 50 * 4.0); + hitEnergyPlot = aida.histogram1D(plotHitsDir + calibratedHitCollectionName + " Hit Energy", 100, -0.1, maxE); + fiducialHitCountPlot = aida.histogram1D(plotHitsDir + calibratedHitCollectionName + " Hit Count with Fiducial Cut", 10, -0.5, 9.5); + fiducialEnergyPlot = aida.histogram1D(plotHitsDir + calibratedHitCollectionName + " Hit Energy with Fiducial Cut", 100, -0.1, maxE); + } // Setup cluster plots - clusterCountPlot = aida.histogram1D(plotClustersDir + "Cluster Count per Event", 10, -0.5, 9.5); - clusterSizePlot = aida.histogram1D(plotClustersDir + "Cluster Size", 10, -0.5, 9.5); - clusterEnergyPlot = aida.histogram1D(plotClustersDir + "Cluster Energy", 100, -0.1, maxE); - clusterTimes = aida.histogram1D(plotClustersDir + "Cluster Time Mean", 200, 0, 4.0 * 50); - clusterTimeSigma = aida.histogram1D(plotClustersDir + "Cluster Time Sigma", 100, 0, 10); - twoclusterTotEnergy = aida.histogram1D(plotClustersDir + "Two Cluster Energy Sum", 100, 0, maxE); - twoclusterEnergyAsymmetry = aida.histogram1D(plotClustersDir + "Two Cluster Energy Asymmetry", 100, 0, 1.0); - energyVsX = aida.histogram2D(plotClustersDir + "Energy vs X", 50, 0, 1.6, 50, .0, 200.0); - energyVsY = aida.histogram2D(plotClustersDir + "Energy vs Y", 50, 0, 1.6, 50, 20.0, 85.0); - - fiducialClusterCountPlot = aida.histogram1D(plotClustersDir + "Cluster Count with Fiducal Cut", 10, -0.5, 9.5); - fiducialClusterSizePlot = aida.histogram1D(plotClustersDir + "Cluster Size with Fiducal Cut", 10, -0.5, 9.5); - fiducialClusterEnergyPlot = aida.histogram1D(plotClustersDir + "Cluster Energy with Fiducal Cut", 100, -0.1, maxE); - fiducialenergyVsY = aida.histogram2D(plotClustersDir + "Energy vs Y with Fiducial Cuts", 50, 0, 1.6, 50, 45.0, 85.0); - fiducialenergyVsX = aida.histogram2D(plotClustersDir + "Energy vs X with Fiducial Cuts", 50, 0, 1.6, 50, 0.0, 200.0); + clusterCountPlot = aida.histogram1D(plotClustersDir + clusterCollectionName + " Cluster Count per Event", 10, -0.5, 9.5); + clusterSizePlot = aida.histogram1D(plotClustersDir + clusterCollectionName + " Cluster Size", 10, -0.5, 9.5); + clusterEnergyPlot = aida.histogram1D(plotClustersDir + clusterCollectionName + " Cluster Energy", 100, -0.1, maxE); + clusterTimes = aida.histogram1D(plotClustersDir + clusterCollectionName + " Cluster Time Mean", 200, 0, 4.0 * 50); + clusterTimeSigma = aida.histogram1D(plotClustersDir + clusterCollectionName + " Cluster Time Sigma", 100, 0, 10); + twoclusterTotEnergy = aida.histogram1D(plotClustersDir + clusterCollectionName + " Two Cluster Energy Sum", 100, 0, maxE); + twoclusterEnergyAsymmetry = aida.histogram1D(plotClustersDir + clusterCollectionName + " Two Cluster Energy Asymmetry", 100, 0, 1.0); + energyVsX = aida.histogram2D(plotClustersDir + clusterCollectionName + " Energy vs X", 50, 0, 1.6, 50, .0, 200.0); + energyVsY = aida.histogram2D(plotClustersDir + clusterCollectionName + " Energy vs Y", 50, 0, 1.6, 50, 20.0, 85.0); + + fiducialClusterCountPlot = aida.histogram1D(plotClustersDir + clusterCollectionName + " Cluster Count with Fiducal Cut", 10, -0.5, 9.5); + fiducialClusterSizePlot = aida.histogram1D(plotClustersDir + clusterCollectionName + " Cluster Size with Fiducal Cut", 10, -0.5, 9.5); + fiducialClusterEnergyPlot = aida.histogram1D(plotClustersDir + clusterCollectionName + " Cluster Energy with Fiducal Cut", 100, -0.1, maxE); + fiducialenergyVsY = aida.histogram2D(plotClustersDir + clusterCollectionName + " Energy vs Y with Fiducial Cuts", 50, 0, 1.6, 50, 45.0, 85.0); + fiducialenergyVsX = aida.histogram2D(plotClustersDir + clusterCollectionName + " Energy vs X with Fiducial Cuts", 50, 0, 1.6, 50, 0.0, 200.0); } @@ -111,19 +124,24 @@ else return; //this might be a non-data event - hitCountPlot.fill(hits.size()); - int fidHitCount = 0; - for (CalorimeterHit hit : hits) { - - hitEnergyPlot.fill(hit.getCorrectedEnergy()); - hitTimePlot.fill(hit.getTime()); - int ix = hit.getIdentifierFieldValue("ix"); - int iy = hit.getIdentifierFieldValue("iy"); - if (Math.abs(iy) > 2) { - fidHitCount++; - fiducialEnergyPlot.fill(hit.getCorrectedEnergy()); - } - fiducialHitCountPlot.fill(fidHitCount); + if (fillHitPlots) { + hitCountPlot.fill(hits.size()); + int fidHitCount = 0; + for (CalorimeterHit hit : hits) { + + hitEnergyPlot.fill(hit.getCorrectedEnergy()); + hitTimePlot.fill(hit.getTime()); + int ix = hit.getIdentifierFieldValue("ix"); + int iy = hit.getIdentifierFieldValue("iy"); + if (Math.abs(iy) > 2) { + fidHitCount++; + fiducialEnergyPlot.fill(hit.getCorrectedEnergy()); + } + fiducialHitCountPlot.fill(fidHitCount); + sumHitE+=hit.getCorrectedEnergy(); + } + nTotHits+=hits.size(); + } List<Cluster> clusters; @@ -131,18 +149,19 @@ clusters = event.get(Cluster.class, clusterCollectionName); else if (event.hasCollection(HPSEcalClusterIC.class, clusterCollectionName)) clusters = event.get(Cluster.class, clusterCollectionName); - else if(event.hasCollection(Cluster.class, clusterCollectionName)) + else if (event.hasCollection(Cluster.class, clusterCollectionName)) clusters = event.get(Cluster.class, clusterCollectionName); else { clusterCountPlot.fill(0); return; } - + nEvents++; clusterCountPlot.fill(clusters.size()); - + nTotClusters+=clusters.size(); int fidcnt = 0; for (Cluster cluster : clusters) { clusterEnergyPlot.fill(cluster.getEnergy()); + sumClusterEnergy+=cluster.getEnergy(); double[] times = new double[cluster.getCalorimeterHits().size()]; double[] energies = new double[cluster.getCalorimeterHits().size()]; CalorimeterHit seed = cluster.getCalorimeterHits().get(0); @@ -152,7 +171,7 @@ energyVsX.fill(cluster.getEnergy(), Math.abs(cluster.getPosition()[0])); energyVsY.fill(cluster.getEnergy(), Math.abs(cluster.getPosition()[1])); } - if (Math.abs(iy) > 2&&cluster.getCalorimeterHits().size()>1) { + if (Math.abs(iy) > 2 && cluster.getCalorimeterHits().size() > 1) { fidcnt++; fiducialClusterSizePlot.fill(cluster.getCalorimeterHits().size()); fiducialClusterEnergyPlot.fill(cluster.getEnergy()); @@ -169,7 +188,9 @@ clusterTimes.fill(StatUtils.mean(times, 0, size)); clusterSizePlot.fill(size); //The number of "hits" in a "cluster" clusterTimeSigma.fill(Math.sqrt(StatUtils.variance(times, 0, size))); - + sumHitPerCluster+=size; + sumClusterTime+=StatUtils.mean(times, 0, size); + } fiducialClusterCountPlot.fill(fidcnt); //make some interesting 2-cluster plots @@ -181,9 +202,8 @@ double e1 = cl1.getEnergy(); double e2 = cl2.getEnergy(); twoclusterTotEnergy.fill(e1 + e2); - twoclusterEnergyAsymmetry.fill(Math.abs(e1 - e2)/(e1+e2)); - } - + twoclusterEnergyAsymmetry.fill(Math.abs(e1 - e2) / (e1 + e2)); + } } @@ -195,7 +215,9 @@ @Override public void printDQMData() { System.out.println("EcalMonitoring::printDQMData"); - + for (Map.Entry<String, Double> entry : monitoredQuantityMap.entrySet()) { + System.out.println(entry.getKey() + " = " + entry.getValue()); + } System.out.println("*******************************"); } @@ -204,6 +226,14 @@ */ @Override public void calculateEndOfRunQuantities() { + if(fillHitPlots){ + monitoredQuantityMap.put(calibratedHitCollectionName+" " +ecalQuantNames[0], (double) nTotHits / nEvents); + monitoredQuantityMap.put(calibratedHitCollectionName+" " +ecalQuantNames[1], (double) sumHitE / nTotHits); + } + monitoredQuantityMap.put(clusterCollectionName+" " +ecalQuantNames[2], (double) nTotClusters / nEvents); + monitoredQuantityMap.put(clusterCollectionName+" " +ecalQuantNames[3], (double) sumHitPerCluster / nTotClusters); + monitoredQuantityMap.put(clusterCollectionName+" " +ecalQuantNames[4], (double) sumClusterEnergy / nTotClusters); + monitoredQuantityMap.put(clusterCollectionName+" " +ecalQuantNames[5], (double) sumClusterTime / nTotClusters); } @Override Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/production/DataQualityEcalOnlyEngineeringRun.lcsim ============================================================================= --- java/trunk/steering-files/src/main/resources/org/hps/steering/production/DataQualityEcalOnlyEngineeringRun.lcsim (original) +++ java/trunk/steering-files/src/main/resources/org/hps/steering/production/DataQualityEcalOnlyEngineeringRun.lcsim Fri Jan 2 11:35:00 2015 @@ -7,6 +7,8 @@ <execute> <driver name="EventMarkerDriver"/> <driver name="EcalMonitoring"/> + <driver name="EcalMonitoringIC"/> + <driver name="EcalMonitoringGTP"/> <driver name="AidaSaveDriver"/> <driver name="CleanupDriver"/> </execute> @@ -18,6 +20,17 @@ <outputFileName>${outputFile}.root</outputFileName> </driver> <driver name="EcalMonitoring" type="org.hps.analysis.dataquality.EcalMonitoring"> + <clusterCollectionName>EcalClusters</clusterCollectionName> + <overwriteDB>false</overwriteDB> + </driver> + <driver name="EcalMonitoringIC" type="org.hps.analysis.dataquality.EcalMonitoring"> + <clusterCollectionName>EcalClustersIC</clusterCollectionName> + <fillHitPlots>false</fillHitPlots> + <overwriteDB>false</overwriteDB> + </driver> + <driver name="EcalMonitoringGTP" type="org.hps.analysis.dataquality.EcalMonitoring"> + <clusterCollectionName>EcalClustersGTP</clusterCollectionName> + <fillHitPlots>false</fillHitPlots> <overwriteDB>false</overwriteDB> </driver> <driver name="CleanupDriver" type="org.lcsim.recon.tracking.digitization.sisim.config.ReadoutCleanupDriver"/>