Author: [log in to unmask] Date: Fri Apr 24 16:52:52 2015 New Revision: 2814 Log: more DQM plots; change some histogram ranges Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/SvtMonitoring.java java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackingMonitoring.java java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/V0Monitoring.java java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon.lcsim Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/SvtMonitoring.java ============================================================================= --- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/SvtMonitoring.java (original) +++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/SvtMonitoring.java Fri Apr 24 16:52:52 2015 @@ -8,23 +8,27 @@ import hep.aida.IHistogram2D; import hep.aida.IPlotter; import hep.aida.IPlotterStyle; +import hep.physics.vec.BasicHep3Vector; +import hep.physics.vec.Hep3Vector; import java.io.IOException; import java.sql.SQLException; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; -import org.hps.recon.ecal.triggerbank.AbstractIntData; -import org.hps.recon.ecal.triggerbank.TDCData; -import org.hps.recon.ecal.triggerbank.TIData; +import org.hps.recon.tracking.FittedRawTrackerHit; import org.hps.recon.tracking.ShapeFitParameters; import org.lcsim.detector.tracker.silicon.HpsSiSensor; import org.lcsim.event.EventHeader; import org.lcsim.event.GenericObject; import org.lcsim.event.LCRelation; import org.lcsim.event.RawTrackerHit; +import org.lcsim.event.RelationalTable; +import org.lcsim.event.SimTrackerHit; import org.lcsim.event.TrackerHit; +import org.lcsim.event.base.BaseRelationalTable; import org.lcsim.geometry.Detector; /** @@ -88,8 +92,16 @@ //IHistogram1D occupancyPlot = aida.histogram1D(sensor.getName().replaceAll("Tracker_TestRunModule_", ""), 640, 0, 639); IHistogram1D occupancyPlot = createSensorPlot(plotDir + "occupancy_", sensor, maxChannels, 0, maxChannels - 1); IHistogram1D t0Plot = createSensorPlot(plotDir + "t0Hit_", sensor, 400, -100., 100.); + IHistogram1D nHits = createSensorPlot(plotDir + "nHitsPerEvent_", sensor, 100, -0.5, 99.5); + IHistogram1D pileup = createSensorPlot(plotDir + "nFitsPerHit_", sensor, 3, 0.5, 3.5); + IHistogram1D amplitudePlot = createSensorPlot(plotDir + "amplitude_", sensor, 50, 0, 4000.0); IHistogram2D t0AmpPlot = createSensorPlot2D(plotDir + "t0AmpHit_", sensor, 200, -100., 100., 50, 0, 4000.0); + IHistogram2D t0ChanPlot = createSensorPlot2D(plotDir + "t0ChanBigHit_", sensor, 640, -0.5, 639.5, 200, -100., 100.); + IHistogram2D ampChanPlot = createSensorPlot2D(plotDir + "ampChanHit_", sensor, 640, -0.5, 639.5, 50, 0, 4000); + IHistogram2D chiprobChanPlot = createSensorPlot2D(plotDir + "chiprobChanBigHit_", sensor, 640, -0.5, 639.5, 50, 0, 1.0); + IHistogram2D t0TrigTimeHitPlot = createSensorPlot2D(plotDir + "t0BigHitTrigTime_", sensor, 400, -100., 100., 6, -2, 22); + IHistogram1D chiProbPlot = createSensorPlot(plotDir + "chiProb_", sensor, 50, 0, 1.0); IHistogram1D t0ClusterPlot = createSensorPlot(plotDir + "t0Cluster_", sensor, 400, -100., 100.); IHistogram2D t0TrigTimePlot = createSensorPlot2D(plotDir + "t0ClusterTrigTime_", sensor, 400, -100., 100., 6, -2, 22); @@ -104,30 +116,63 @@ public void process(EventHeader event) { /* increment the strip occupancy arrays */ + Map<String, Integer> hitsPerSensor = new HashMap<String, Integer>(); + if (event.hasCollection(RawTrackerHit.class, rawTrackerHitCollectionName)) { // System.out.println("Found a raw hit collection"); List<RawTrackerHit> rawTrackerHits = event.get(RawTrackerHit.class, rawTrackerHitCollectionName); for (RawTrackerHit hit : rawTrackerHits) { int[] strips = occupancyMap.get(hit.getDetectorElement().getName()); strips[hit.getIdentifierFieldValue("strip")] += 1; + + Integer nHits = hitsPerSensor.get(hit.getDetectorElement().getName()); + if (nHits == null) { + nHits = 0; + } + nHits++; + hitsPerSensor.put(hit.getDetectorElement().getName(), nHits); } ++eventCountRaw; + } + for (HpsSiSensor sensor : sensors) { + IHistogram1D sensorHist = getSensorPlot(plotDir + "nHitsPerEvent_", sensor); + Integer nHits = hitsPerSensor.get(sensor.getName()); + if (nHits == null) { + sensorHist.fill(0); + } else { + sensorHist.fill(nHits); + } } /* fill the FittedTrackerHit related histograms */ if (event.hasCollection(LCRelation.class, fittedTrackerHitCollectionName)) { List<LCRelation> fittedTrackerHits = event.get(LCRelation.class, fittedTrackerHitCollectionName); + + RelationalTable rthtofit = new BaseRelationalTable(RelationalTable.Mode.ONE_TO_MANY, RelationalTable.Weighting.UNWEIGHTED); + for (LCRelation hit : fittedTrackerHits) { + rthtofit.add(FittedRawTrackerHit.getRawTrackerHit(hit), FittedRawTrackerHit.getShapeFitParameters(hit)); + } + for (LCRelation hit : fittedTrackerHits) { RawTrackerHit rth = (RawTrackerHit) hit.getFrom(); GenericObject pars = (GenericObject) hit.getTo(); + String sensorName = getNiceSensorName((HpsSiSensor) rth.getDetectorElement()); //this is a clever way to get the parameters we want from the generic object double t0 = ShapeFitParameters.getT0(pars); double amp = ShapeFitParameters.getAmp(pars); double chiProb = ShapeFitParameters.getChiProb(pars); + int channel = rth.getIdentifierFieldValue("strip"); + getSensorPlot(plotDir + "nFitsPerHit_", sensorName).fill(rthtofit.allFrom(rth).size()); getSensorPlot(plotDir + "t0Hit_", sensorName).fill(t0); getSensorPlot(plotDir + "amplitude_", sensorName).fill(amp); getSensorPlot2D(plotDir + "t0AmpHit_", sensorName).fill(t0, amp); getSensorPlot(plotDir + "chiProb_", sensorName).fill(chiProb); + getSensorPlot2D(plotDir + "ampChanHit_", sensorName).fill(channel, amp); + if (amp > 1000.0) { + getSensorPlot2D(plotDir + "t0ChanBigHit_", sensorName).fill(channel, t0); + getSensorPlot2D(plotDir + "chiprobChanBigHit_", sensorName).fill(channel, chiProb); + getSensorPlot2D(plotDir + "t0BigHitTrigTime_", sensorName).fill(t0, event.getTimeStamp() % 24); + } } ++eventCountFit; } Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackingMonitoring.java ============================================================================= --- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackingMonitoring.java (original) +++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackingMonitoring.java Fri Apr 24 16:52:52 2015 @@ -31,9 +31,12 @@ private final String rotatedHelicalTrackHitRelationsCollectionName = "RotatedHelicalTrackHitRelations"; private String trackCollectionName = "MatchedTracks"; private final String trackerName = "Tracker"; + private static final String nameStrip = "Tracker_TestRunModule_"; String ecalSubdetectorName = "Ecal"; String ecalCollectionName = "EcalClusters"; private Detector detector = null; + private List<HpsSiSensor> sensors; + IDDecoder dec; int nEvents = 0; int nTotTracks = 0; @@ -66,10 +69,20 @@ IHistogram1D trklam = aida.histogram1D(plotDir + "tan(lambda) ", 25, -0.1, 0.1); IHistogram1D trkz0 = aida.histogram1D(plotDir + "z0 ", 25, -1.0, 1.0); IHistogram1D nHits = aida.histogram1D(plotDir + "Hits per Track", 2, 5, 7); - IHistogram1D trackMeanTime = aida.histogram1D(plotDir + "Mean time of hits on track", 200, -20., 20.); + IHistogram1D trackMeanTime = aida.histogram1D(plotDir + "Mean time of hits on track", 400, -100., 100.); IHistogram1D trackRMSTime = aida.histogram1D(plotDir + "RMS time of hits on track", 200, 0., 15.); IHistogram2D trackChi2RMSTime = aida.histogram2D(plotDir + "Track chi2 vs. RMS time of hits", 200, 0., 15., 25, 0, 25.0); IHistogram1D seedRMSTime = aida.histogram1D(plotDir + "RMS time of hits on seed layers", 200, 0., 15.); + + // Make a list of SiSensors in the SVT. + sensors = this.detector.getSubdetector(trackerName).getDetectorElement().findDescendants(HpsSiSensor.class); + + // Setup the occupancy plots. + aida.tree().cd("/"); + for (HpsSiSensor sensor : sensors) { + //IHistogram1D occupancyPlot = aida.histogram1D(sensor.getName().replaceAll("Tracker_TestRunModule_", ""), 640, 0, 639); + IHistogram1D hitTimeResidual = createSensorPlot(plotDir + "hitTimeResidual_", sensor, 100, -20, 20); + } } @@ -141,10 +154,13 @@ Collection<TrackerHit> htsList = hittostrip.allFrom(hittorotated.from(hit)); for (TrackerHit hts : htsList) { rmsTime += Math.pow(hts.getTime() - meanTime, 2); - int layer = ((HpsSiSensor) ((RawTrackerHit) hts.getRawHits().get(0)).getDetectorElement()).getLayerNumber(); + HpsSiSensor sensor = (HpsSiSensor) ((RawTrackerHit) hts.getRawHits().get(0)).getDetectorElement(); + int layer = sensor.getLayerNumber(); if (layer <= 6) { rmsSeedTime += Math.pow(hts.getTime() - meanSeedTime, 2); } + String sensorName = getNiceSensorName(sensor); + getSensorPlot(plotDir + "hitTimeResidual_", sensorName).fill(hts.getTime() - meanTime); } } rmsTime = Math.sqrt(rmsTime / nStrips); @@ -185,4 +201,32 @@ System.out.println("ALTER TABLE dqm ADD " + entry.getKey() + " double;"); } } + + private IHistogram1D getSensorPlot(String prefix, HpsSiSensor sensor) { + String hname = prefix + getNiceSensorName(sensor); + return aida.histogram1D(hname); + } + + private IHistogram1D getSensorPlot(String prefix, String sensorName) { + return aida.histogram1D(prefix + sensorName); + } + + private IHistogram1D createSensorPlot(String prefix, HpsSiSensor sensor, int nchan, double min, double max) { + String hname = prefix + getNiceSensorName(sensor); + IHistogram1D hist = aida.histogram1D(hname, nchan, min, max); + hist.setTitle(sensor.getName().replaceAll(nameStrip, "") + .replace("module", "mod") + .replace("layer", "lyr") + .replace("sensor", "sens")); + + return hist; + } + + private String getNiceSensorName(HpsSiSensor sensor) { + return sensor.getName().replaceAll(nameStrip, "") + .replace("module", "mod") + .replace("layer", "lyr") + .replace("sensor", "sens"); + } + } Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/V0Monitoring.java ============================================================================= --- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/V0Monitoring.java (original) +++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/V0Monitoring.java Fri Apr 24 16:52:52 2015 @@ -56,16 +56,16 @@ /* beamspot constrained */ IHistogram1D nV0 = aida.histogram1D(plotDir + "Number of V0 per event", 10, 0, 10); IHistogram1D bsconMass = aida.histogram1D(plotDir + "BS Constrained Mass (GeV)", 100, 0, 0.200); - IHistogram1D bsconVx = aida.histogram1D(plotDir + "BS Constrained Vx (mm)", 50, -1, 1); - IHistogram1D bsconVy = aida.histogram1D(plotDir + "BS Constrained Vy (mm)", 50, -1, 1); - IHistogram1D bsconVz = aida.histogram1D(plotDir + "BS Constrained Vz (mm)", 50, -10, 10); - IHistogram1D bsconChi2 = aida.histogram1D(plotDir + "BS Constrained Chi2", 25, 0, 25); + IHistogram1D bsconVx = aida.histogram1D(plotDir + "BS Constrained Vx (mm)", 200, -5, 5); + IHistogram1D bsconVy = aida.histogram1D(plotDir + "BS Constrained Vy (mm)", 200, -5, 5); + IHistogram1D bsconVz = aida.histogram1D(plotDir + "BS Constrained Vz (mm)", 200, -50, 50); + IHistogram1D bsconChi2 = aida.histogram1D(plotDir + "BS Constrained Chi2", 100, 0, 100); /* target constrained */ IHistogram1D tarconMass = aida.histogram1D(plotDir + "Target Constrained Mass (GeV)", 100, 0, 0.200); - IHistogram1D tarconVx = aida.histogram1D(plotDir + "Target Constrained Vx (mm)", 50, -1, 1); - IHistogram1D tarconVy = aida.histogram1D(plotDir + "Target Constrained Vy (mm)", 50, -1, 1); - IHistogram1D tarconVz = aida.histogram1D(plotDir + "Target Constrained Vz (mm)", 50, -10, 10); - IHistogram1D tarconChi2 = aida.histogram1D(plotDir + "Target Constrained Chi2", 25, 0, 25); + IHistogram1D tarconVx = aida.histogram1D(plotDir + "Target Constrained Vx (mm)", 200, -5, 5); + IHistogram1D tarconVy = aida.histogram1D(plotDir + "Target Constrained Vy (mm)", 200, -5, 5); + IHistogram1D tarconVz = aida.histogram1D(plotDir + "Target Constrained Vz (mm)", 200, -50, 50); + IHistogram1D tarconChi2 = aida.histogram1D(plotDir + "Target Constrained Chi2", 100, 0, 100); } Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon.lcsim ============================================================================= --- java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon.lcsim (original) +++ java/trunk/steering-files/src/main/resources/org/hps/steering/recon/EngineeringRun2015FullRecon.lcsim Fri Apr 24 16:52:52 2015 @@ -1,5 +1,5 @@ <!-- - Offline reconstruction for 2014 (electron run) data. + Offline reconstruction for 2015 (engineering run with SVT+ECal) data. @author Sho Uemura <[log in to unmask]> --> <lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" @@ -18,10 +18,6 @@ <driver name="TrackDataDriver" /> <!--<driver name="GBLDriver"/>--> <driver name="LCIOWriter"/> - - <!--<driver name="SVTMonitoring"/>--> - <!--<driver name="TrackingMonitoring"/>--> - <driver name="AidaSaveDriver"/> <driver name="CleanupDriver"/> </execute> @@ -108,12 +104,5 @@ <driver name="AidaSaveDriver" type="org.lcsim.job.AidaSaveDriver"> <outputFileName>${outputFile}.root</outputFileName> </driver> - <driver name="TrackingMonitoring" type="org.hps.analysis.dataquality.TrackingMonitoring"> - <overwriteDB>false</overwriteDB> - </driver> - <driver name="SVTMonitoring" type="org.hps.analysis.dataquality.SvtMonitoring"> - <overwriteDB>false</overwriteDB> - </driver> - </drivers> </lcsim>