Author: [log in to unmask] Date: Wed Sep 9 12:27:20 2015 New Revision: 3566 Log: Data quality plots for pass-2; some reorginization for plotting GBL & SeedTrack stuff separately. Added: java/trunk/steering-files/src/main/resources/org/hps/steering/production/DataQualityRecon_Pass2.lcsim - copied, changed from r3549, java/trunk/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2015TrigPairs1.lcsim Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/DataQualityMonitor.java java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/FinalStateMonitoring.java java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackingMonitoring.java java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackingResiduals.java java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TridentMonitoring.java java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/V0Monitoring.java Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/DataQualityMonitor.java ============================================================================= --- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/DataQualityMonitor.java (original) +++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/DataQualityMonitor.java Wed Sep 9 12:27:20 2015 @@ -37,9 +37,14 @@ protected String outputPlotDir = "DQMOutputPlots/"; String triggerType = "all";//allowed types are "" (blank) or "all", singles0, singles1, pairs0,pairs1 + boolean isGBL = false; public void setTriggerType(String type) { this.triggerType = type; + } + + public void setIsGBL(boolean isgbl) { + this.isGBL = isgbl; } public void setRecoVersion(String recoVersion) { @@ -171,6 +176,10 @@ } } + public String getTriggerType() { + return triggerType; + } + public boolean matchTriggerType(TIData triggerData) { if (triggerType.contentEquals("") || triggerType.contentEquals("all")) return true; @@ -203,7 +212,6 @@ //override this method to do something interesting //like print the DQM data log file - public void printDQMData() { } @@ -212,4 +220,5 @@ //format for making the db column headers public void printDQMStrings() { } + } Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/FinalStateMonitoring.java ============================================================================= --- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/FinalStateMonitoring.java (original) +++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/FinalStateMonitoring.java Wed Sep 9 12:27:20 2015 @@ -91,7 +91,7 @@ IHistogram1D timeMatchDeltaT; /* number of unassocaited tracks/event */ IHistogram1D nUnAssTracksHisto; - + public void setFinalStateParticlesColName(String fsp) { this.finalStateParticlesColName = fsp; } @@ -100,41 +100,44 @@ protected void detectorChanged(Detector detector) { System.out.println("FinalStateMonitoring::detectorChanged Setting up the plotter"); aida.tree().cd("/"); - + String trkType="SeedTrack/"; + if(isGBL) + trkType="GBLTrack/"; + /* Final State Particle Quantities */ /* plot electron & positron momentum separately */ - elePx = aida.histogram1D(plotDir + finalStateParticlesColName + "/" + triggerType + "/" + "Electron Px (GeV)", 100, -0.1, 0.200); - elePy = aida.histogram1D(plotDir + finalStateParticlesColName + "/" + triggerType + "/" + "Electron Py (GeV)", 100, -0.1, 0.1); - elePz = aida.histogram1D(plotDir + finalStateParticlesColName + "/" + triggerType + "/" + "Electron Pz (GeV)", 100, 0, beamEnergy * maxFactor); - elePzBeam = aida.histogram1D(plotDir + finalStateParticlesColName + "/" + triggerType + "/" + "Beam Electrons Total P (GeV)", 100, feeMomentumCut, beamEnergy * maxFactor); - elePzBeamTop = aida.histogram1D(plotDir + finalStateParticlesColName + "/" + triggerType + "/" + "Beam Electrons Total P (GeV): Top", 100, feeMomentumCut, beamEnergy * maxFactor); - elePzBeamBottom = aida.histogram1D(plotDir + finalStateParticlesColName + "/" + triggerType + "/" + "Beam Electrons Total P (GeV): Bottom", 100, feeMomentumCut, beamEnergy * maxFactor); - elePTop = aida.histogram1D(plotDir + finalStateParticlesColName + "/" + triggerType + "/" + "Electron Total P (GeV): Top", 100, 0, beamEnergy * maxFactor); - elePBottom = aida.histogram1D(plotDir + finalStateParticlesColName + "/" + triggerType + "/" + "Electron Total P (GeV): Bottom", 100, 0, beamEnergy * maxFactor); - - posPx = aida.histogram1D(plotDir + finalStateParticlesColName + "/" + triggerType + "/" + "Positron Px (GeV)", 50, -0.1, 0.200); - posPy = aida.histogram1D(plotDir + finalStateParticlesColName + "/" + triggerType + "/" + "Positron Py (GeV)", 50, -0.1, 0.1); - posPz = aida.histogram1D(plotDir + finalStateParticlesColName + "/" + triggerType + "/" + "Positron Pz (GeV)", 50, 0, beamEnergy * maxFactor); - posPTop = aida.histogram1D(plotDir + finalStateParticlesColName + "/" + triggerType + "/" + "Positron Total P (GeV): Top", 100, 0, beamEnergy * maxFactor); - posPBottom = aida.histogram1D(plotDir + finalStateParticlesColName + "/" + triggerType + "/" + "Positron Total P (GeV): Bottom", 100, 0, beamEnergy * maxFactor); + 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); + 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); + 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); + 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 + finalStateParticlesColName + "/" + triggerType + "/" + "Number of photons per event", 15, 0, 15); - enePhoton = aida.histogram1D(plotDir + finalStateParticlesColName + "/" + triggerType + "/" + "Photon Energy (GeV)", 50, 0, 2.4); - xPhoton = aida.histogram1D(plotDir + finalStateParticlesColName + "/" + triggerType + "/" + "Photon X position (mm)", 50, -200, 200); - yPhoton = aida.histogram1D(plotDir + finalStateParticlesColName + "/" + triggerType + "/" + "Photon Y position (mm)", 50, -100, 100); + 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); + 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); /* tracks with associated clusters */ - eneOverp = aida.histogram1D(plotDir + finalStateParticlesColName + "/" + triggerType + "/" + "Cluster Energy Over TrackMomentum", 50, 0, 2.0); - deltaXAtCal = aida.histogram1D(plotDir + finalStateParticlesColName + "/" + triggerType + "/" + "delta X @ ECal (mm)", 50, -50, 50.0); - deltaYAtCal = aida.histogram1D(plotDir + finalStateParticlesColName + "/" + triggerType + "/" + "delta Y @ ECal (mm)", 50, -50, 50.0); -// trackXvsECalX = aida.histogram2D(plotDir + finalStateParticlesColName + "/" + triggerType + "/" + "track X vs ECal X", 50, -300, 300.0, 50, -300, 300.0); -// trackYvsECalY = aida.histogram2D(plotDir + finalStateParticlesColName + "/" + triggerType + "/" + "track Y vs ECal Y", 50, -100, 100.0, 50, -100, 100.0); - trackPvsECalE = aida.histogram2D(plotDir + finalStateParticlesColName + "/" + triggerType + "/" + "track mom vs ECal E", 50, 0.1, beamEnergy * maxFactor, 50, 0.1, beamEnergy * maxFactor); - trackTvsECalT = aida.histogram2D(plotDir + finalStateParticlesColName + "/" + triggerType + "/" + "track T vs ECal T", 200, 0.0, 200.0, 100, -25.0, 25.0); - timeMatchDeltaT = aida.histogram1D(plotDir + finalStateParticlesColName + "/" + triggerType + "/" + "ECal T minus track T", 200, -25, 175); + eneOverp = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "Cluster Energy Over TrackMomentum", 50, 0, 2.0); + deltaXAtCal = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "delta X @ ECal (mm)", 50, -50, 50.0); + deltaYAtCal = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "delta Y @ ECal (mm)", 50, -50, 50.0); +// trackXvsECalX = aida.histogram2D(plotDir +trkType+ triggerType + "/" + "track X vs ECal X", 50, -300, 300.0, 50, -300, 300.0); +// trackYvsECalY = aida.histogram2D(plotDir +trkType+ triggerType + "/" + "track Y vs ECal Y", 50, -100, 100.0, 50, -100, 100.0); + trackPvsECalE = aida.histogram2D(plotDir +trkType+ triggerType + "/" + "track mom vs ECal E", 50, 0.1, beamEnergy * maxFactor, 50, 0.1, beamEnergy * maxFactor); + trackTvsECalT = aida.histogram2D(plotDir +trkType+ triggerType + "/" + "track T vs ECal T", 200, 0.0, 200.0, 100, -25.0, 25.0); + timeMatchDeltaT = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "ECal T minus track T", 200, -25, 175); /* number of unassocaited tracks/event */ - nUnAssTracksHisto = aida.histogram1D(plotDir + finalStateParticlesColName + "/" + triggerType + "/" + "Number of unassociated tracks per event", 5, 0, 5); + nUnAssTracksHisto = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "Number of unassociated tracks per event", 5, 0, 5); } @Override @@ -167,7 +170,8 @@ if (debug) { System.out.println("PDGID = " + fsPart.getParticleIDUsed() + "; charge = " + fsPart.getCharge() + "; pz = " + fsPart.getMomentum().x()); } - + if(isGBL^fsPart.getType()<32)//XOR!!!! + continue; // Extrapolate the track to the Ecal cluster position boolean isPhoton = false; boolean hasCluster = true; 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 Wed Sep 9 12:27:20 2015 @@ -184,18 +184,18 @@ trkYAtECALTop = aida.histogram1D(plotDir + trackCollectionName + "/" + triggerType + "/" + "Track Y at ECAL: Top", 100, 0, 100); trkYAtECALBot = aida.histogram1D(plotDir + trackCollectionName + "/" + triggerType + "/" + "Track Y at ECAL: Bot", 100, 0, 100); for (int i = 1; i <= nmodules; i++) { - xvsyTop[i - 1] = aida.histogram2D(plotDir + triggerType + "/" + hthplotDir + "Module " + i + " Top", 250, -100, 150, 30, 0, 60); - xvsyBot[i - 1] = aida.histogram2D(plotDir + triggerType + "/" + hthplotDir + "Module " + i + " Bottom", 250, -100, 150, 30, 0, 60); - xvsyOnTrackTop[i - 1] = aida.histogram2D(plotDir + triggerType + "/" + hthplotDir + "Module " + i + " Top, Hits On Tracks", 250, -100, 150, 30, 0, 60); - xvsyOnTrackBot[i - 1] = aida.histogram2D(plotDir + triggerType + "/" + hthplotDir + "Module " + i + " Bottom, Hits On Tracks", 250, -100, 150, 30, 0, 60); - timevstimeTop[i - 1] = aida.histogram2D(plotDir + triggerType + "/" + hthplotDir + "Module " + i + " Top: Hit Times", 30, -15, 15, 30, -15, 15); - timevstimeBot[i - 1] = aida.histogram2D(plotDir + triggerType + "/" + hthplotDir + "Module " + i + " Bottom: Hit Times", 30, -15, 15, 30, -15, 15); - hthTop[i - 1] = aida.histogram1D(plotDir + triggerType + "/" + hthplotDir + "Module " + i + " Top: Track Hits", 25, 0, 25); - hthBot[i - 1] = aida.histogram1D(plotDir + triggerType + "/" + hthplotDir + "Module " + i + " Bottom: Track Hits", 25, 0, 25); - timevstimeOnTrackTop[i - 1] = aida.histogram2D(plotDir + triggerType + "/" + hthplotDir + "Module " + i + " Top: Hit Times, Hits On Tracks", 30, -15, 15, 30, -15, 15); - timevstimeOnTrackBot[i - 1] = aida.histogram2D(plotDir + triggerType + "/" + hthplotDir + "Module " + i + " Bottom: Hit Times, Hits On Tracks", 30, -15, 15, 30, -15, 15); - deltaTOnTrackTop[i - 1] = aida.histogram1D(plotDir + triggerType + "/" + hthplotDir + "Module " + i + " Top: Hit Time Differences, Hits On Tracks", 50, -25, 25); - deltaTOnTrackBot[i - 1] = aida.histogram1D(plotDir + triggerType + "/" + hthplotDir + "Module " + i + " Bottom: Hit Time Differences, Hits On Tracks", 50, -25, 25); + xvsyTop[i - 1] = aida.histogram2D(hthplotDir + triggerType + "/"+ "Module " + i + " Top", 250, -100, 150, 30, 0, 60); + xvsyBot[i - 1] = aida.histogram2D(hthplotDir + triggerType + "/"+ "Module " + i + " Bottom", 250, -100, 150, 30, 0, 60); + xvsyOnTrackTop[i - 1] = aida.histogram2D(hthplotDir + triggerType + "/"+ "Module " + i + " Top, Hits On Tracks", 250, -100, 150, 30, 0, 60); + xvsyOnTrackBot[i - 1] = aida.histogram2D(hthplotDir + triggerType + "/"+ "Module " + i + " Bottom, Hits On Tracks", 250, -100, 150, 30, 0, 60); + timevstimeTop[i - 1] = aida.histogram2D(hthplotDir + triggerType + "/"+ "Module " + i + " Top: Hit Times", 30, -15, 15, 30, -15, 15); + timevstimeBot[i - 1] = aida.histogram2D(hthplotDir + triggerType + "/"+ "Module " + i + " Bottom: Hit Times", 30, -15, 15, 30, -15, 15); + hthTop[i - 1] = aida.histogram1D(hthplotDir + triggerType + "/"+ "Module " + i + " Top: Track Hits", 25, 0, 25); + hthBot[i - 1] = aida.histogram1D(hthplotDir + triggerType + "/"+ "Module " + i + " Bottom: Track Hits", 25, 0, 25); + timevstimeOnTrackTop[i - 1] = aida.histogram2D(hthplotDir + triggerType + "/"+ "Module " + i + " Top: Hit Times, Hits On Tracks", 30, -15, 15, 30, -15, 15); + timevstimeOnTrackBot[i - 1] = aida.histogram2D(hthplotDir + triggerType + "/"+ "Module " + i + " Bottom: Hit Times, Hits On Tracks", 30, -15, 15, 30, -15, 15); + deltaTOnTrackTop[i - 1] = aida.histogram1D(hthplotDir + triggerType + "/"+ "Module " + i + " Top: Hit Time Differences, Hits On Tracks", 50, -25, 25); + deltaTOnTrackBot[i - 1] = aida.histogram1D(hthplotDir + triggerType + "/"+ "Module " + i + " Bottom: Hit Time Differences, Hits On Tracks", 50, -25, 25); } trkChi2Pos = aida.histogram1D(plotDir + trackCollectionName + "/" + triggerType + "/" + positronDir + "Track Chi2", 25, 0, 25.0); Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackingResiduals.java ============================================================================= --- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackingResiduals.java (original) +++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackingResiduals.java Wed Sep 9 12:27:20 2015 @@ -132,7 +132,7 @@ for (GenericObject gblSCD : gblSCDList) { double umeas = gblSCD.getDoubleVal(GBLStripClusterData.GBLDOUBLE.UMEAS);//TODO: implement generic methods into GBLStripClusterData so this isn't hard coded double utrk = gblSCD.getDoubleVal(GBLStripClusterData.GBLDOUBLE.TPOSU);//implement generic methods into GBLStripClusterData so this isn't hard coded -// double vtrk = gblSCD.getDoubleVal(GBLStripClusterData.GBLDOUBLE.TPOSV);//implement generic methods into GBLStripClusterData so this isn't hard coded + double vtrk = gblSCD.getDoubleVal(GBLStripClusterData.GBLDOUBLE.TPOSV);//implement generic methods into GBLStripClusterData so this isn't hard coded double resid = umeas - utrk; double tanlambda = gblSCD.getDoubleVal(GBLStripClusterData.GBLDOUBLE.TLAMBDA);//use the slope as a proxy for the top/bottom half of tracker Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TridentMonitoring.java ============================================================================= --- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TridentMonitoring.java (original) +++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TridentMonitoring.java Wed Sep 9 12:27:20 2015 @@ -106,7 +106,9 @@ protected void detectorChanged(Detector detector) { System.out.println("TridentMonitoring::detectorChanged Setting up the plotter"); aida.tree().cd("/"); - + String trkType = "SeedTrack/"; + if (isGBL) + trkType = "GBLTrack/"; /* V0 Quantities */ /* Mass, vertex, chi^2 of fit */ /* beamspot constrained */ @@ -122,54 +124,48 @@ // IHistogram1D tarconVy = aida.histogram1D(plotDir + triggerType + "/"+ triggerType + "/"+"Target Constrained Vy (mm)", 50, -1, 1); // IHistogram1D tarconVz = aida.histogram1D(plotDir + triggerType + "/"+ triggerType + "/"+"Target Constrained Vz (mm)", 50, -10, 10); // IHistogram1D tarconChi2 = aida.histogram1D(plotDir + triggerType + "/"+ triggerType + "/"+"Target Constrained Chi2", 25, 0, 25); - pyEleVspyPos = aida.histogram2D(plotDir + triggerType + "/" + "Py(e) vs Py(p)", 50, -0.04, 0.04, 50, -0.04, 0.04); - pxEleVspxPos = aida.histogram2D(plotDir + triggerType + "/" + "Px(e) vs Px(p)", 50, -0.02, 0.06, 50, -0.02, 0.06); - trackTimeDiff = aida.histogram1D(plotDir + triggerType + "/" + "Track time difference", 100, -10, 10); - trackTime2D = aida.histogram2D(plotDir + triggerType + "/" + "Track time vs. track time", 100, -10, 10, 100, -10, 10); - vertexMassMomentum = aida.histogram2D(plotDir + triggerType + "/" + "Vertex mass vs. vertex momentum", 100, 0, 1.1, 100, 0, 0.1); - vertexedTrackMomentum2D = aida.histogram2D(plotDir + triggerType + "/" + "Positron vs. electron momentum", 100, 0, 1.1, 100, 0, 1.1); - vertexedTrackMomentum2DRad = aida.histogram2D(plotDir + triggerType + "/" + "Positron vs. electron momentum: Radiative", 100, 0, 1.1, 100, 0, 1.1); - vertexPxPy = aida.histogram2D(plotDir + triggerType + "/" + "Vertex Py vs. Px", 100, -0.02, 0.06, 100, -0.04, 0.04); - goodVertexMass = aida.histogram1D(plotDir + triggerType + "/" + "Good vertex mass", 100, 0, 0.11); - deltaP = aida.histogram1D(plotDir + triggerType + "/" + "Positron - electron momentum", 100, -1., 1.0); - deltaPRad = aida.histogram1D(plotDir + triggerType + "/" + "Positron - electron momentum", 100, -1., 1.0); - sumP = aida.histogram1D(plotDir + triggerType + "/" + "Positron + electron momentum", 100, 0.2, 1.25); - vertexX = aida.histogram1D(plotDir + triggerType + "/" + "Vertex X Position (mm)", 100, -v0VxMax, v0VxMax); - vertexY = aida.histogram1D(plotDir + triggerType + "/" + "Vertex Y Position (mm)", 100, -v0VyMax, v0VyMax); - vertexZ = aida.histogram1D(plotDir + triggerType + "/" + "Vertex Z Position (mm)", 100, -v0VzMax, v0VzMax); - vertexPx = aida.histogram1D(plotDir + triggerType + "/" + "Vertex Px (GeV)", 100, -0.1, 0.1); - vertexPy = aida.histogram1D(plotDir + triggerType + "/" + "Vertex Py (GeV)", 100, -0.1, 0.1); - vertexPz = aida.histogram1D(plotDir + triggerType + "/" + "Vertex Pz (GeV)", 100, 0.0, v0PzMax); - vertexU = aida.histogram1D(plotDir + triggerType + "/" + "Vertex Px over Ptot (GeV)", 100, -0.1, 0.1); - vertexV = aida.histogram1D(plotDir + triggerType + "/" + "Vertex Py over Ptot (GeV)", 100, -0.1, 0.1); -// vertexW = aida.histogram1D(plotDir + triggerType + "/" + "Vertex Pz overPtot (GeV)", 100, 0.95, 1.0); - vertexVZ = aida.histogram2D(plotDir + triggerType + "/" + "Vertex Py over Ptot vs. Z", 100, -v0VzMax, v0VzMax, 100, -0.1, 0.1); - vertexZY = aida.histogram2D(plotDir + triggerType + "/" + "Vertex Z vs. Y", 100, -v0VyMax, v0VyMax, 100, -v0VzMax, v0VzMax); + pyEleVspyPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Py(e) vs Py(p)", 50, -0.04, 0.04, 50, -0.04, 0.04); + pxEleVspxPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Px(e) vs Px(p)", 50, -0.02, 0.06, 50, -0.02, 0.06); + trackTimeDiff = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Track time difference", 100, -10, 10); + trackTime2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Track time vs. track time", 100, -10, 10, 100, -10, 10); + vertexMassMomentum = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex mass vs. vertex momentum", 100, 0, 1.1, 100, 0, 0.1); + vertexedTrackMomentum2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Positron vs. electron momentum", 100, 0, 1.1, 100, 0, 1.1); + vertexedTrackMomentum2DRad = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Positron vs. electron momentum: Radiative", 100, 0, 1.1, 100, 0, 1.1); + vertexPxPy = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex Py vs. Px", 100, -0.02, 0.06, 100, -0.04, 0.04); + goodVertexMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Good vertex mass", 100, 0, 0.11); + deltaP = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Positron - electron momentum", 100, -1., 1.0); + deltaPRad = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Positron - electron momentum", 100, -1., 1.0); + sumP = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Positron + electron momentum", 100, 0.2, 1.25); + vertexX = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex X Position (mm)", 100, -v0VxMax, v0VxMax); + vertexY = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex Y Position (mm)", 100, -v0VyMax, v0VyMax); + vertexZ = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex Z Position (mm)", 100, -v0VzMax, v0VzMax); + vertexPx = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex Px (GeV)", 100, -0.1, 0.1); + vertexPy = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex Py (GeV)", 100, -0.1, 0.1); + vertexPz = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex Pz (GeV)", 100, 0.0, v0PzMax); + vertexU = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex Px over Ptot (GeV)", 100, -0.1, 0.1); + vertexV = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex Py over Ptot (GeV)", 100, -0.1, 0.1); +// vertexW = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "Vertex Pz overPtot (GeV)", 100, 0.95, 1.0); + vertexVZ = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex Py over Ptot vs. Z", 100, -v0VzMax, v0VzMax, 100, -0.1, 0.1); + vertexZY = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex Z vs. Y", 100, -v0VyMax, v0VyMax, 100, -v0VzMax, v0VzMax); } @Override public void process(EventHeader event) { /* make sure everything is there */ - if (!event.hasCollection(ReconstructedParticle.class, finalStateParticlesColName)) { - return; - } - if (!event.hasCollection(ReconstructedParticle.class, unconstrainedV0CandidatesColName)) { - return; - } - if (!event.hasCollection(ReconstructedParticle.class, beamConV0CandidatesColName)) { - return; - } - if (!event.hasCollection(ReconstructedParticle.class, targetV0ConCandidatesColName)) { - return; - } - if (!event.hasCollection(Track.class, trackListName)) { - return; - } + if (!event.hasCollection(ReconstructedParticle.class, finalStateParticlesColName)) + return; + if (!event.hasCollection(ReconstructedParticle.class, unconstrainedV0CandidatesColName)) + return; + if (!event.hasCollection(ReconstructedParticle.class, beamConV0CandidatesColName)) + return; + if (!event.hasCollection(ReconstructedParticle.class, targetV0ConCandidatesColName)) + return; + if (!event.hasCollection(Track.class, trackListName)) + return; //check to see if this event is from the correct trigger (or "all"); - if (!matchTrigger(event)) { - return; - } + if (!matchTrigger(event)) + return; nRecoEvents++; @@ -178,19 +174,15 @@ List<Track> trks = event.get(Track.class, trackListName); int ntracks = trks.size(); - if (ntracks > nTrkMax || ntracks < 2) { - return; - } + if (ntracks > nTrkMax || ntracks < 2) + return; List<ReconstructedParticle> fspList = event.get(ReconstructedParticle.class, finalStateParticlesColName); int npos = 0; - for (ReconstructedParticle fsp : fspList) { - if (fsp.getCharge() > 0) { + for (ReconstructedParticle fsp : fspList) + if (fsp.getCharge() > 0) npos++; - } - } - if (npos < 1 || npos > nPosMax) { - return; - } + if (npos < 1 || npos > nPosMax) + return; nPassBasicCuts++;//passed some basic event-level cuts... @@ -200,50 +192,39 @@ // v0 & vertex-quality cuts // Hep3Vector v0Mom = uncV0.getMomentum(); Hep3Vector v0Mom = VecOp.add(uncV0.getParticles().get(1).getMomentum(), uncV0.getParticles().get(0).getMomentum()); - if (v0Mom.z() > v0PzMax || v0Mom.z() < v0PzMin) { - continue; - } - if (Math.abs(v0Mom.y()) > v0PyMax) { - continue; - } - if (Math.abs(v0Mom.x()) > v0PxMax) { - continue; - } + if (v0Mom.z() > v0PzMax || v0Mom.z() < v0PzMin) + continue; + if (Math.abs(v0Mom.y()) > v0PyMax) + continue; + if (Math.abs(v0Mom.x()) > v0PxMax) + continue; Hep3Vector v0Vtx = uncVert.getPosition(); - if (Math.abs(v0Vtx.z()) > v0VzMax) { - continue; - } - if (Math.abs(v0Vtx.y()) > v0VyMax) { - continue; - } - if (Math.abs(v0Vtx.x()) > v0VxMax) { - continue; - } + if (Math.abs(v0Vtx.z()) > v0VzMax) + continue; + if (Math.abs(v0Vtx.y()) > v0VyMax) + continue; + if (Math.abs(v0Vtx.x()) > v0VxMax) + continue; List<Track> tracks = new ArrayList<Track>(); ReconstructedParticle electron = null, positron = null; for (ReconstructedParticle particle : uncV0.getParticles()) // tracks.addAll(particle.getTracks()); //add add electron first, then positron...down below - { - if (particle.getCharge() > 0) { + + if (particle.getCharge() > 0) positron = particle; - } else if (particle.getCharge() < 0) { + else if (particle.getCharge() < 0) electron = particle; - } else { + else throw new RuntimeException("expected only electron and positron in vertex, got something with charge 0"); - } - } - if (electron == null || positron == null) { + if (electron == null || positron == null) throw new RuntimeException("vertex needs e+ and e- but is missing one or both"); - } tracks.add(electron.getTracks().get(0)); tracks.add(positron.getTracks().get(0)); - if (tracks.size() != 2) { + if (tracks.size() != 2) throw new RuntimeException("expected two tracks in vertex, got " + tracks.size()); - } List<Double> trackTimes = new ArrayList<Double>(); - for (Track track : tracks) { + for (Track track : tracks) trackTimes.add(TrackUtils.getTrackTime(track, hitToStrips, hitToRotated)); - } trackTime2D.fill(trackTimes.get(0), trackTimes.get(1)); trackTimeDiff.fill(trackTimes.get(0) - trackTimes.get(1)); boolean trackTimeDiffCut = Math.abs(trackTimes.get(0) - trackTimes.get(1)) < trkTimeDiff; @@ -270,10 +251,10 @@ vertexPx.fill(uncV0.getMomentum().x()); vertexPy.fill(uncV0.getMomentum().y()); vertexPz.fill(uncV0.getMomentum().z()); - vertexU.fill(uncV0.getMomentum().x()/uncV0.getMomentum().magnitude()); - vertexV.fill(uncV0.getMomentum().y()/uncV0.getMomentum().magnitude()); + vertexU.fill(uncV0.getMomentum().x() / uncV0.getMomentum().magnitude()); + vertexV.fill(uncV0.getMomentum().y() / uncV0.getMomentum().magnitude()); // vertexW.fill(uncV0.getMomentum().z()/uncV0.getMomentum().magnitude()); - vertexVZ.fill(v0Vtx.z(), uncV0.getMomentum().y()/uncV0.getMomentum().magnitude()); + vertexVZ.fill(v0Vtx.z(), uncV0.getMomentum().y() / uncV0.getMomentum().magnitude()); vertexZY.fill(v0Vtx.y(), v0Vtx.z()); } } @@ -284,9 +265,8 @@ @Override public void printDQMData() { System.out.println("TridentMonitoring::printDQMData"); - for (Entry<String, Double> entry : monitoredQuantityMap.entrySet()) { + for (Entry<String, Double> entry : monitoredQuantityMap.entrySet()) System.out.println(entry.getKey() + " = " + entry.getValue()); - } System.out.println("*******************************"); } @@ -305,9 +285,8 @@ @Override public void printDQMStrings() { for (int i = 0; i < 9; i++)//TODO: do this in a smarter way...loop over the map - { + System.out.println("ALTER TABLE dqm ADD " + fpQuantNames[i] + " double;"); - } } IFitResult fitVertexPosition(IHistogram1D h1d, IFitter fitter, double[] init, String range) { 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 Wed Sep 9 12:27:20 2015 @@ -139,90 +139,88 @@ protected void detectorChanged(Detector detector) { System.out.println("V0Monitoring::detectorChanged Setting up the plotter"); aida.tree().cd("/"); - + String xtra = "Extras"; + String trkType = "SeedTrack/"; + if (isGBL) + trkType = "GBLTrack/"; /* V0 Quantities */ /* Mass, vertex, chi^2 of fit */ /* unconstrained */ - unconMass = aida.histogram1D(plotDir + triggerType + "/" + "Unconstrained Mass (GeV)", 100, 0, 0.200); - unconVx = aida.histogram1D(plotDir + triggerType + "/" + "Unconstrained Vx (mm)", 50, -10, 10); - unconVy = aida.histogram1D(plotDir + triggerType + "/" + "Unconstrained Vy (mm)", 50, -10, 10); - unconVz = aida.histogram1D(plotDir + triggerType + "/" + "Unconstrained Vz (mm)", 50, -50, 50); - unconChi2 = aida.histogram1D(plotDir + triggerType + "/" + "Unconstrained Chi2", 25, 0, 25); + unconMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/" + "Invariant Mass (GeV)", 100, 0, 0.200); + 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); + unconChi2 = aida.histogram1D(plotDir + trkType + triggerType + "/" + unconstrainedV0CandidatesColName + "/" + "Chi2", 25, 0, 25); /* beamspot constrained */ - - nV0 = aida.histogram1D(plotDir + triggerType + "/" + "Number of V0 per event", 10, 0, 10); - v0Time = aida.histogram1D(plotDir + triggerType + "/" + "V0 mean time", 100, -25, 25); - v0Dt = aida.histogram1D(plotDir + triggerType + "/" + "V0 time difference", 100, -25, 25); - trigTimeV0Time = aida.histogram2D(plotDir + triggerType + "/" + "Trigger phase vs. V0 mean time", 100, -25, 25, 6, 0, 24); - trigTime = aida.histogram1D(plotDir + triggerType + "/" + "Trigger phase", 6, 0, 24); - - bsconMass = aida.histogram1D(plotDir + triggerType + "/" + "BS Constrained Mass (GeV)", 100, 0, 0.200); - bsconVx = aida.histogram1D(plotDir + triggerType + "/" + "BS Constrained Vx (mm)", 50, -10, 10); - bsconVy = aida.histogram1D(plotDir + triggerType + "/" + "BS Constrained Vy (mm)", 50, -10, 10); - bsconVz = aida.histogram1D(plotDir + triggerType + "/" + "BS Constrained Vz (mm)", 50, -50, 50); - bsconChi2 = aida.histogram1D(plotDir + triggerType + "/" + "BS Constrained Chi2", 25, 0, 25); + bsconMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Mass (GeV)", 100, 0, 0.200); + 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); + bsconChi2 = aida.histogram1D(plotDir + trkType + triggerType + "/" + beamConV0CandidatesColName + "/" + "Chi2", 25, 0, 25); /* target constrained */ - tarconMass = aida.histogram1D(plotDir + triggerType + "/" + "Target Constrained Mass (GeV)", 100, 0, 0.200); - tarconVx = aida.histogram1D(plotDir + triggerType + "/" + "Target Constrained Vx (mm)", 50, -1, 1); - tarconVy = aida.histogram1D(plotDir + triggerType + "/" + "Target Constrained Vy (mm)", 50, -1, 1); - tarconVz = aida.histogram1D(plotDir + triggerType + "/" + "Target Constrained Vz (mm)", 50, -10, 10); - tarconChi2 = aida.histogram1D(plotDir + triggerType + "/" + "Target Constrained Chi2", 25, 0, 25); - pEleVspPos = aida.histogram2D(plotDir + triggerType + "/" + "P(e) vs P(p)", 50, 0, beamEnergy * maxFactor, 50, 0, beamEnergy * maxFactor); - pEleVspPosWithCut = aida.histogram2D(plotDir + triggerType + "/" + "P(e) vs P(p): Radiative", 50, 0, beamEnergy * maxFactor, 50, 0, beamEnergy * maxFactor); - pyEleVspyPos = aida.histogram2D(plotDir + triggerType + "/" + "Py(e) vs Py(p)", 50, -0.04, 0.04, 50, -0.04, 0.04); - pxEleVspxPos = aida.histogram2D(plotDir + triggerType + "/" + "Px(e) vs Px(p)", 50, -0.02, 0.06, 50, -0.02, 0.06); - massVsVtxZ = aida.histogram2D(plotDir + triggerType + "/" + "Mass vs Vz", 50, 0, 0.15, 50, -50, 80); - VtxXVsVtxZ = aida.histogram2D(plotDir + triggerType + "/" + "Vx vs Vz", 100, -10, 10, 100, -50, 80); - VtxYVsVtxZ = aida.histogram2D(plotDir + triggerType + "/" + "Vy vs Vz", 100, -5, 5, 100, -50, 80); - VtxXVsVtxY = aida.histogram2D(plotDir + triggerType + "/" + "Vx vs Vy", 100, -10, 10, 100, -5, 5); - L1IsoVsVz = aida.histogram2D(plotDir + triggerType + "/" + "L1 Isolation vs Vz", 50, -50, 80, 100, 0.0, 5.0); - pEleVspEle = aida.histogram2D(plotDir + triggerType + "/" + "2 Electron/P(e) vs P(e)", 50, 0, beamEnergy * maxFactor, 50, 0, beamEnergy * maxFactor); - pyEleVspyEle = aida.histogram2D(plotDir + triggerType + "/" + "2 Electron/Py(e) vs Py(e)", 50, -0.04, 0.04, 50, -0.04, 0.04); - pxEleVspxEle = aida.histogram2D(plotDir + triggerType + "/" + "2 Electron/Px(e) vs Px(e)", 50, -0.02, 0.06, 50, -0.02, 0.06); - pEleVspEleNoBeam = aida.histogram2D(plotDir + triggerType + "/" + "2 Electron/P(e) vs P(e) NoBeam", 50, 0, beambeamCut, 50, 0, beambeamCut); - pEleVspEleMoller = aida.histogram2D(plotDir + triggerType + "/" + "2 Electron/P(e) vs P(e) Moller", 50, 0, beambeamCut, 50, 0, beambeamCut); - pEleVspEleBeamBeam = aida.histogram2D(plotDir + triggerType + "/" + "2 Electron/P(e) vs P(e) BeamBeam", 50, beambeamCut, beamEnergy * maxFactor, 50, beambeamCut, beamEnergy * maxFactor); - pyEleVspyEleNoBeam = aida.histogram2D(plotDir + triggerType + "/" + "2 Electron/Py(e) vs Py(e) NoBeam", 50, -0.04, 0.04, 50, -0.04, 0.04); - pxEleVspxEleNoBeam = aida.histogram2D(plotDir + triggerType + "/" + "2 Electron/Px(e) vs Px(e) NoBeam", 50, -0.02, 0.06, 50, -0.02, 0.06); - sumChargeHisto = aida.histogram1D(plotDir + triggerType + "/" + "Total Charge of Event", 5, -2, 3); - numChargeHisto = aida.histogram1D(plotDir + triggerType + "/" + "Number of Charged Particles", 6, 0, 6); - - pEleVsthetaMoller = aida.histogram2D(plotDir + triggerType + "/" + "2 Electron/P(e) vs Theta Moller", 50, 0, beambeamCut, 50, thetaMin, thetaMax); - thetaEleVsthetaMoller = aida.histogram2D(plotDir + triggerType + "/" + "2 Electron/Theta vs Theta Moller", 50, thetaMin, thetaMax, 50, thetaMin, thetaMax); - pEleVsthetaBeamBeam = aida.histogram2D(plotDir + triggerType + "/" + "2 Electron/P(e) vs Theta BeamBeam", 50, beambeamCut, beamEnergy * maxFactor, 50, thetaMin, thetaMax); - thetaEleVsthetaBeamBeam = aida.histogram2D(plotDir + triggerType + "/" + "2 Electron/Theta vs Theta BeamBeam", 50, thetaMin, thetaMax, 50, thetaMin, thetaMax); - - mollerMass = aida.histogram1D(plotDir + triggerType + "/" + "2 Electron/Moller Mass (GeV)", 100, 0, 0.100); - mollerMassVtxCut = aida.histogram1D(plotDir + triggerType + "/" + "2 Electron/Moller Mass (GeV): VtxCut", 100, 0, 0.100); - mollerVx = aida.histogram1D(plotDir + triggerType + "/" + "2 Electron/Moller Vx (mm)", 50, -10, 10); - mollerVy = aida.histogram1D(plotDir + triggerType + "/" + "2 Electron/Moller Vy (mm)", 50, -2, 2); - mollerVz = aida.histogram1D(plotDir + triggerType + "/" + "2 Electron/Moller Vz (mm)", 50, -50, 50); - mollerVzVtxCut = aida.histogram1D(plotDir + triggerType + "/" + "2 Electron/Moller Vz (mm): VtxCut", 50, -50, 50); - mollerXVsVtxZ = aida.histogram2D(plotDir + triggerType + "/" + "2 Electron/Moller Vx vs Vz", 100, -5, 5, 100, -50, 50); - mollerYVsVtxZ = aida.histogram2D(plotDir + triggerType + "/" + "2 Electron/Moller Vy vs Vz", 100, -2, 2, 100, -50, 50); - mollerXVsVtxY = aida.histogram2D(plotDir + triggerType + "/" + "2 Electron/Moller Vx vs Vy", 100, -5, 5, 100, -2, 2); + tarconMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/" + "Mass (GeV)", 100, 0, 0.200); + 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); + tarconChi2 = aida.histogram1D(plotDir + trkType + triggerType + "/" + targetV0ConCandidatesColName + "/" + "Chi2", 25, 0, 25); + + nV0 = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Number of V0 per event", 10, 0, 10); + v0Time = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "V0 mean time", 100, -25, 25); + v0Dt = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "V0 time difference", 100, -25, 25); + trigTimeV0Time = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Trigger phase vs. V0 mean time", 100, -25, 25, 6, 0, 24); + trigTime = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Trigger phase", 6, 0, 24); + + 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.02, 0.06, 50, -0.02, 0.06); + massVsVtxZ = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "Mass vs Vz", 50, 0, 0.15, 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); + L1IsoVsVz = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "L1 Isolation vs Vz", 50, -50, 80, 100, 0.0, 5.0); + pEleVspEle = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(e) vs P(e)", 50, 0, beamEnergy * maxFactor, 50, 0, beamEnergy * maxFactor); + 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); + 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); + 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); + + pEleVsthetaMoller = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/P(e) vs Theta Moller", 50, 0, beambeamCut, 50, thetaMin, thetaMax); + thetaEleVsthetaMoller = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Theta vs Theta Moller", 50, thetaMin, thetaMax, 50, thetaMin, thetaMax); + 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); + 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); + mollerVzVtxCut = aida.histogram1D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Vz (mm): VtxCut", 50, -50, 50); + mollerXVsVtxZ = aida.histogram2D(plotDir + trkType + triggerType + "/" + xtra + "/" + "2 Electron/Moller Vx vs Vz", 100, -5, 5, 100, -50, 50); + 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); } @Override public void process(EventHeader event) { /* make sure everything is there */ - if (!event.hasCollection(ReconstructedParticle.class, finalStateParticlesColName)) { + if (!event.hasCollection(ReconstructedParticle.class, finalStateParticlesColName)) return; - } - if (!event.hasCollection(ReconstructedParticle.class, unconstrainedV0CandidatesColName)) { + if (!event.hasCollection(ReconstructedParticle.class, unconstrainedV0CandidatesColName)) return; - } - if (!event.hasCollection(ReconstructedParticle.class, beamConV0CandidatesColName)) { + if (!event.hasCollection(ReconstructedParticle.class, beamConV0CandidatesColName)) return; - } - if (!event.hasCollection(ReconstructedParticle.class, targetV0ConCandidatesColName)) { + if (!event.hasCollection(ReconstructedParticle.class, targetV0ConCandidatesColName)) return; - } //check to see if this event is from the correct trigger (or "all"); - if (!matchTrigger(event)) { + if (!matchTrigger(event)) return; - } nRecoEvents++; @@ -231,6 +229,7 @@ List<ReconstructedParticle> unonstrainedV0List = event.get(ReconstructedParticle.class, unconstrainedV0CandidatesColName); for (ReconstructedParticle uncV0 : unonstrainedV0List) { + Vertex uncVert = uncV0.getStartVertex(); unconVx.fill(uncVert.getPosition().x()); unconVy.fill(uncVert.getPosition().y()); @@ -253,9 +252,9 @@ // pos = trks.get(0).getTracks().get(0); // ele = trks.get(1).getTracks().get(0); // } -// aida.histogram2D(plotDir + triggerType + "/" + "P(e) vs P(p)").fill(getMomentum(ele), getMomentum(pos)); -// aida.histogram2D(plotDir + triggerType + "/" + "Px(e) vs Px(p)").fill(ele.getTrackStates().get(0).getMomentum()[1], pos.getTrackStates().get(0).getMomentum()[1]); -// aida.histogram2D(plotDir + triggerType + "/" + "Py(e) vs Py(p)").fill(ele.getTrackStates().get(0).getMomentum()[2], pos.getTrackStates().get(0).getMomentum()[2]); +// aida.histogram2D(plotDir + trkType + triggerType + "/" + "P(e) vs P(p)").fill(getMomentum(ele), getMomentum(pos)); +// aida.histogram2D(plotDir + trkType + triggerType + "/" + "Px(e) vs Px(p)").fill(ele.getTrackStates().get(0).getMomentum()[1], pos.getTrackStates().get(0).getMomentum()[1]); +// aida.histogram2D(plotDir + trkType + triggerType + "/" + "Py(e) vs Py(p)").fill(ele.getTrackStates().get(0).getMomentum()[2], pos.getTrackStates().get(0).getMomentum()[2]); ReconstructedParticle ele = trks.get(0); ReconstructedParticle pos = trks.get(1); //ReconParticles have the charge correct. @@ -280,9 +279,8 @@ pxEleVspxPos.fill(ele.getMomentum().x(), pos.getMomentum().x()); pyEleVspyPos.fill(ele.getMomentum().y(), pos.getMomentum().y()); if (pe < v0MaxPCut && pp < v0MaxPCut && (pe + pp) > v0ESumMinCut && (pe + pp) < v0ESumMaxCut)//enrich radiative-like events - { + pEleVspPosWithCut.fill(pe, pp); - } } double eleT = TrackUtils.getTrackTime(ele.getTracks().get(0), hitToStrips, hitToRotated); @@ -321,29 +319,25 @@ tarconChi2.fill(tarVert.getChi2()); } List<ReconstructedParticle> finalStateParticles = event.get(ReconstructedParticle.class, finalStateParticlesColName); - if (debug) { + if (debug) System.out.println("This events has " + finalStateParticles.size() + " final state particles"); - } ReconstructedParticle ele1 = null; ReconstructedParticle ele2 = null; int sumCharge = 0; int numChargedParticles = 0; for (ReconstructedParticle fsPart : finalStateParticles) { - if (debug) { + if (debug) System.out.println("PDGID = " + fsPart.getParticleIDUsed() + "; charge = " + fsPart.getCharge() + "; pz = " + fsPart.getMomentum().x()); - } double charge = fsPart.getCharge(); sumCharge += charge; if (charge != 0) { numChargedParticles++; - if (charge < 1) { - if (ele1 == null) { + if (charge < 1) + if (ele1 == null) ele1 = fsPart; - } else if (!hasSharedStrips(ele1, fsPart, hitToStrips, hitToRotated)) { + else if (!hasSharedStrips(ele1, fsPart, hitToStrips, hitToRotated)) ele2 = fsPart; - } - } } } sumChargeHisto.fill(sumCharge); @@ -408,9 +402,8 @@ @Override public void printDQMData() { System.out.println("V0Monitoring::printDQMData"); - for (Entry<String, Double> entry : monitoredQuantityMap.entrySet()) { + for (Entry<String, Double> entry : monitoredQuantityMap.entrySet()) System.out.println(entry.getKey() + " = " + entry.getValue()); - } System.out.println("*******************************"); } @@ -435,9 +428,8 @@ double[] parsVy = resVy.fittedParameters(); double[] parsVz = resVz.fittedParameters(); - for (int i = 0; i < 5; i++) { + for (int i = 0; i < 5; i++) System.out.println("Vertex Fit Parameters: " + resVx.fittedParameterNames()[i] + " = " + parsVx[i] + "; " + parsVy[i] + "; " + parsVz[i]); - } IPlotter plotter = analysisFactory.createPlotterFactory().create("Vertex Position"); plotter.createRegions(1, 3); @@ -451,13 +443,12 @@ plotter.region(1).plot(resVy.fittedFunction()); plotter.region(2).plot(bsconVz); plotter.region(2).plot(resVz.fittedFunction()); - if (outputPlots) { + if (outputPlots) try { plotter.writeToFile(outputPlotDir + "vertex.png"); } catch (IOException ex) { Logger.getLogger(V0Monitoring.class.getName()).log(Level.SEVERE, null, ex); } - } // monitoredQuantityMap.put(fpQuantNames[2], sumVx / nTotV0); // monitoredQuantityMap.put(fpQuantNames[3], sumVy / nTotV0); @@ -478,9 +469,8 @@ @Override public void printDQMStrings() { for (int i = 0; i < 9; i++)//TODO: do this in a smarter way...loop over the map - { + System.out.println("ALTER TABLE dqm ADD " + fpQuantNames[i] + " double;"); - } } IFitResult fitVertexPosition(IHistogram1D h1d, IFitter fitter, double[] init, String range Copied: java/trunk/steering-files/src/main/resources/org/hps/steering/production/DataQualityRecon_Pass2.lcsim (from r3549, java/trunk/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2015TrigPairs1.lcsim) ============================================================================= --- java/trunk/steering-files/src/main/resources/org/hps/steering/readout/EngineeringRun2015TrigPairs1.lcsim (original) +++ java/trunk/steering-files/src/main/resources/org/hps/steering/production/DataQualityRecon_Pass2.lcsim Wed Sep 9 12:27:20 2015 @@ -1,116 +1,251 @@ -<?xml version="1.0" encoding="UTF-8"?> -<lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd"> - <!-- - Steering file for readout for the EngRun 2015 MC - @author Matt Graham <[log in to unmask]> - --> - <control> - <printInputFiles>true</printInputFiles> - <printDriversDetailed>true</printDriversDetailed> - </control> - <execute> - <driver name="ConditionsDriver"/> - <driver name="EventMarkerDriver" /> -<!-- Readout Simulation --> - <driver name="EcalReadout"/> - <driver name="EcalConverter"/> - <driver name="EcalClustererGTP"/> - <driver name="PairTrigger1"/> - <driver name="SimpleSVTReadout" /> - <driver name="TestRunReconToLcio"/> - <driver name="AidaSaveDriver"/> - <driver name="ClockDriver"/> - <driver name="CleanupDriver" /> - </execute> - <drivers> +<!-- + Steering file for running DataQualityMonitoring classes on reconstructed data + @author Matt Graham <[log in to unmask]> +--> +<lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" + xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd"> + <execute> + <driver name="EventMarkerDriver"/> + <!-- <driver name="DQMDatabaseDriver"/> --> + <driver name="RawTrackerHitSensorSetup"/> + <driver name="EcalMonitoring"/> + <driver name="SVTMonitoring"/> + <driver name="TrackingMonitoring"/> + <driver name="TrackingResiduals"/> + <driver name="FinalStateMonitoring"/> + <driver name="V0Monitoring"/> + <driver name="TridentMonitoring"/> + <driver name="TrackingMonitoringGBL"/> + <driver name="FinalStateMonitoringGBL"/> + <driver name="V0MonitoringGBL"/> + <driver name="TridentMonitoringGBL"/> + <!-- Singles0 --> + <driver name="EcalMonitoringSingles0"/> + <driver name="TrackingMonitoringSingles0"/> + <driver name="TrackingMonitoringGBLSingles0"/> + <driver name="TrackingResidualsSingles0"/> + <driver name="FinalStateMonitoringSingles0"/> + <driver name="V0MonitoringSingles0"/> + <driver name="TridentMonitoringSingles0"/> + <!-- Singles1 --> + <driver name="EcalMonitoringSingles1"/> + <driver name="TrackingMonitoringSingles1"/> + <driver name="TrackingMonitoringGBLSingles1"/> + <driver name="TrackingResidualsSingles1"/> + <driver name="FinalStateMonitoringSingles1"/> + <driver name="V0MonitoringSingles1"/> + <driver name="TridentMonitoringSingles1"/> + <driver name="FinalStateMonitoringGBLSingles1"/> + <driver name="V0MonitoringGBLSingles1"/> + <driver name="TridentMonitoringGBLSingles1"/> + <!-- Pairs0 --> + <driver name="EcalMonitoringPairs0"/> + <driver name="TrackingMonitoringPairs0"/> + <driver name="TrackingMonitoringGBLPairs0"/> + <driver name="TrackingResidualsPairs0"/> + <driver name="FinalStateMonitoringPairs0"/> + <driver name="V0MonitoringPairs0"/> + <driver name="TridentMonitoringPairs0"/> + <!-- Pairs1 --> + <driver name="EcalMonitoringPairs1"/> + <driver name="TrackingMonitoringPairs1"/> + <driver name="TrackingMonitoringGBLPairs1"/> + <driver name="TrackingResidualsPairs1"/> + <driver name="FinalStateMonitoringPairs1"/> + <driver name="V0MonitoringPairs1"/> + <driver name="TridentMonitoringPairs1"/> + <driver name="FinalStateMonitoringGBLPairs1"/> + <driver name="V0MonitoringGBLPairs1"/> + <driver name="TridentMonitoringGBLPairs1"/> + <!-- --> + <driver name="AidaSaveDriver"/> + <driver name="CleanupDriver"/> + </execute> + <drivers> <driver name="EventMarkerDriver" type="org.lcsim.job.EventMarkerDriver"> <eventInterval>1000</eventInterval> - </driver> - <driver name="ConditionsDriver" type="org.hps.conditions.ConditionsDriver"> - <detectorName>${detector}</detectorName> - <runNumber>${run}</runNumber> - <freeze>true</freeze> - </driver> - <driver name="EcalReadout" type="org.hps.readout.ecal.FADCEcalReadoutDriver"> - <coincidenceWindow>1</coincidenceWindow> - <ecalName>Ecal</ecalName> - <ecalCollectionName>EcalHits</ecalCollectionName> - <ecalRawCollectionName>EcalRawHits</ecalRawCollectionName> - <addNoise>true</addNoise> - <use2014Gain>false</use2014Gain> - <numSamplesAfter>25</numSamplesAfter> - <numSamplesBefore>5</numSamplesBefore> - <readoutThreshold>12</readoutThreshold> - <triggerThreshold>12</triggerThreshold> - <readoutWindow>50</readoutWindow> - <readoutLatency>77</readoutLatency> - <mode>1</mode> - </driver> - <driver name="EcalConverter" type="org.hps.recon.ecal.EcalRawConverterDriver"> - <rawCollectionName>EcalRawHits</rawCollectionName> - <ecalCollectionName>EcalCorrectedHits</ecalCollectionName> - <applyBadCrystalMap>false</applyBadCrystalMap> - <nsa>100</nsa> - <nsb>20</nsb> - <use2014Gain>false</use2014Gain> + </driver> + <driver name="RawTrackerHitSensorSetup" type="org.lcsim.recon.tracking.digitization.sisim.config.RawTrackerHitSensorSetup"> + <readoutCollections>SVTRawTrackerHits</readoutCollections> + </driver> + <driver name="AidaSaveDriver" type="org.lcsim.job.AidaSaveDriver"> + <outputFileName>${outputFile}.root</outputFileName> + </driver> + + <!-- all triggers --> + <driver name="EcalMonitoring" type="org.hps.analysis.dataquality.EcalMonitoring"> + <triggerType>all</triggerType> + </driver> + <driver name="SVTMonitoring" type="org.hps.analysis.dataquality.SvtMonitoring"> + <triggerType>all</triggerType> + </driver> + <driver name="TrackingMonitoring" type="org.hps.analysis.dataquality.TrackingMonitoring"> + <triggerType>all</triggerType> + </driver> + + <driver name="TrackingResiduals" type="org.hps.analysis.dataquality.TrackingResiduals"> + <triggerType>all</triggerType> + </driver> + <driver name="FinalStateMonitoring" type="org.hps.analysis.dataquality.FinalStateMonitoring"> + <triggerType>all</triggerType> + </driver> + <driver name="V0Monitoring" type="org.hps.analysis.dataquality.V0Monitoring"> + <triggerType>all</triggerType> + </driver> + <driver name="TridentMonitoring" type="org.hps.analysis.dataquality.TridentMonitoring"> + <triggerType>all</triggerType> + </driver> + <driver name="TrackingMonitoringGBL" type="org.hps.analysis.dataquality.TrackingMonitoring"> + <trackCollectionName>GBLTracks</trackCollectionName> + <triggerType>all</triggerType> + </driver> + <driver name="FinalStateMonitoringGBL" type="org.hps.analysis.dataquality.FinalStateMonitoring"> + <triggerType>all</triggerType> + <isGBL>true</isGBL> + </driver> + <driver name="V0MonitoringGBL" type="org.hps.analysis.dataquality.V0Monitoring"> + <triggerType>all</triggerType> + <isGBL>true</isGBL> + </driver> + <driver name="TridentMonitoringGBL" type="org.hps.analysis.dataquality.TridentMonitoring"> + <triggerType>all</triggerType> + <isGBL>true</isGBL> + </driver> + + <!-- singles0 triggers --> + <driver name="EcalMonitoringSingles0" type="org.hps.analysis.dataquality.EcalMonitoring"> + <triggerType>singles0</triggerType> + </driver> + <driver name="SVTMonitoringSingles0" type="org.hps.analysis.dataquality.SvtMonitoring"> + <triggerType>singles0</triggerType> + </driver> + <driver name="TrackingMonitoringGBLSingles0" type="org.hps.analysis.dataquality.TrackingMonitoring"> + <trackCollectionName>GBLTracks</trackCollectionName> + <triggerType>singles0</triggerType> + </driver> + <driver name="TrackingMonitoringSingles0" type="org.hps.analysis.dataquality.TrackingMonitoring"> + <triggerType>singles0</triggerType> + </driver> + <driver name="TrackingResidualsSingles0" type="org.hps.analysis.dataquality.TrackingResiduals"> + <triggerType>singles0</triggerType> + </driver> + <driver name="FinalStateMonitoringSingles0" type="org.hps.analysis.dataquality.FinalStateMonitoring"> + <triggerType>singles0</triggerType> + </driver> + <driver name="V0MonitoringSingles0" type="org.hps.analysis.dataquality.V0Monitoring"> + <triggerType>singles0</triggerType> + </driver> + <driver name="TridentMonitoringSingles0" type="org.hps.analysis.dataquality.TridentMonitoring"> + <triggerType>singles0</triggerType> + </driver> + + <!-- singles1 triggers --> + <driver name="EcalMonitoringSingles1" type="org.hps.analysis.dataquality.EcalMonitoring"> + <triggerType>singles1</triggerType> + </driver> + <driver name="SVTMonitoringSingles1" type="org.hps.analysis.dataquality.SvtMonitoring"> + <triggerType>singles1</triggerType> </driver> - <driver name="EcalClustererGTP" type="org.hps.recon.ecal.cluster.GTPClusterDriver"> - <!-- - Hit Time Coincidence: +/-16 ns - Seed Energy Threshold: 50 MeV - --> - <inputHitCollectionName>EcalCorrectedHits</inputHitCollectionName> - <outputClusterCollectionName>EcalClustersGTP</outputClusterCollectionName> - <clusterWindow>4</clusterWindow> - <seedEnergyThreshold>0.050</seedEnergyThreshold> - <logLevel>SEVERE</logLevel> - </driver> - <driver name="PairTrigger1" type="org.hps.readout.ecal.FADCPrimaryTriggerDriver"> - <!-- - Hits Per Cluster Min: 1 - Cluster Time Coincidence: +/-12 ns - Cluster Energy Min: 54 MeV - Cluster Energy Max: 630 MeV - 2-Cluster Energy-Sum Min: 180 MeV - 2-Cluster Energy-Sum Min: 860 MeV - 2-Cluster Energy-Diff Max: 540 MeV - Coplanarity Maximum: 30 deg - Energy-Dist Slope: 5.5 MeV/mm - Energy-Dist Minimum: 600 MeV - --> - <clusterCollectionName>EcalClustersGTP</clusterCollectionName> - <deadTime>32</deadTime> - <seedEnergyLow>0.050</seedEnergyLow> - <minHitCount>1</minHitCount> - <pairCoincidence>3</pairCoincidence> - <clusterEnergyLow>0.054</clusterEnergyLow> - <clusterEnergyHigh>0.630</clusterEnergyHigh> - <energySumLow>0.180</energySumLow> - <energySumHigh>0.860</energySumHigh> - <energyDifferenceHigh>0.540</energyDifferenceHigh> - <coplanarityHigh>30</coplanarityHigh> - <energySlopeParamF>0.0055</energySlopeParamF> - <energySlopeLow>0.600</energySlopeLow> - <prescale>1</prescale> - <outputFileName>${outputFile}.triggers.pairs1</outputFileName> - <!--<verbose>true</verbose>--> - </driver> - <driver name="SimpleSVTReadout" type="org.hps.readout.svt.SimpleSvtReadout"> - <enablePileupCut>false</enablePileupCut> - <useTimingConditions>true</useTimingConditions> - </driver> - <driver name="RawTrackerHitSensorSetup" type="org.lcsim.recon.tracking.digitization.sisim.config.RawTrackerHitSensorSetup" /> - - <driver name="AidaSaveDriver" type="org.lcsim.job.AidaSaveDriver"> - <outputFileName>./${outputFile}.root</outputFileName> - </driver> - <driver name="ClockDriver" type="org.hps.readout.ecal.ClockDriver"/> - <driver name="CleanupDriver" type="org.lcsim.recon.tracking.digitization.sisim.config.ReadoutCleanupDriver" /> - <driver name="TestRunReconToLcio" type="org.hps.evio.TestRunTriggeredReconToLcio"> - <outputFile>${outputFile}.slcio</outputFile> - <rejectBackground>false</rejectBackground> - <writeSvtData>true</writeSvtData> - <ecalMode>1</ecalMode> - </driver> + <driver name="TrackingMonitoringSingles1" type="org.hps.analysis.dataquality.TrackingMonitoring"> + <triggerType>singles1</triggerType> + </driver> + <driver name="TrackingMonitoringGBLSingles1" type="org.hps.analysis.dataquality.TrackingMonitoring"> + <trackCollectionName>GBLTracks</trackCollectionName> + <triggerType>singles1</triggerType> + </driver> + <driver name="TrackingResidualsSingles1" type="org.hps.analysis.dataquality.TrackingResiduals"> + <triggerType>singles1</triggerType> + </driver> + <driver name="FinalStateMonitoringSingles1" type="org.hps.analysis.dataquality.FinalStateMonitoring"> + <triggerType>singles1</triggerType> + </driver> + <driver name="V0MonitoringSingles1" type="org.hps.analysis.dataquality.V0Monitoring"> + <triggerType>singles1</triggerType> + </driver> + <driver name="TridentMonitoringSingles1" type="org.hps.analysis.dataquality.TridentMonitoring"> + <triggerType>singles1</triggerType> + </driver> + <driver name="FinalStateMonitoringGBLSingles1" type="org.hps.analysis.dataquality.FinalStateMonitoring"> + <triggerType>singles1</triggerType> + <isGBL>true</isGBL> + </driver> + <driver name="V0MonitoringGBLSingles1" type="org.hps.analysis.dataquality.V0Monitoring"> + <triggerType>singles1</triggerType> + <isGBL>true</isGBL> + </driver> + <driver name="TridentMonitoringGBLSingles1" type="org.hps.analysis.dataquality.TridentMonitoring"> + <triggerType>singles1</triggerType> + <isGBL>true</isGBL> + </driver> + + <!-- pairs0 triggers --> + <driver name="EcalMonitoringPairs0" type="org.hps.analysis.dataquality.EcalMonitoring"> + <triggerType>pairs0</triggerType> + </driver> + <driver name="SVTMonitoringPairs0" type="org.hps.analysis.dataquality.SvtMonitoring"> + <triggerType>pairs0</triggerType> + </driver> + <driver name="TrackingMonitoringPairs0" type="org.hps.analysis.dataquality.TrackingMonitoring"> + <triggerType>pairs0</triggerType> + </driver> + <driver name="TrackingMonitoringGBLPairs0" type="org.hps.analysis.dataquality.TrackingMonitoring"> + <trackCollectionName>GBLTracks</trackCollectionName> + <triggerType>pairs0</triggerType> + </driver> + <driver name="TrackingResidualsPairs0" type="org.hps.analysis.dataquality.TrackingResiduals"> + <triggerType>pairs0</triggerType> + </driver> + <driver name="FinalStateMonitoringPairs0" type="org.hps.analysis.dataquality.FinalStateMonitoring"> + <triggerType>pairs0</triggerType> + </driver> + <driver name="V0MonitoringPairs0" type="org.hps.analysis.dataquality.V0Monitoring"> + <triggerType>pairs0</triggerType> + </driver> + <driver name="TridentMonitoringPairs0" type="org.hps.analysis.dataquality.TridentMonitoring"> + <triggerType>pairs0</triggerType> + </driver> + + + <!-- pairs1 triggers --> + <driver name="EcalMonitoringPairs1" type="org.hps.analysis.dataquality.EcalMonitoring"> + <triggerType>pairs1</triggerType> + </driver> + <driver name="SVTMonitoringPairs1" type="org.hps.analysis.dataquality.SvtMonitoring"> + <triggerType>pairs1</triggerType> + </driver> + <driver name="TrackingMonitoringPairs1" type="org.hps.analysis.dataquality.TrackingMonitoring"> + <triggerType>pairs1</triggerType> + </driver> + <driver name="TrackingMonitoringGBLPairs1" type="org.hps.analysis.dataquality.TrackingMonitoring"> + <trackCollectionName>GBLTracks</trackCollectionName> + <triggerType>pairs1</triggerType> + </driver> + <driver name="TrackingResidualsPairs1" type="org.hps.analysis.dataquality.TrackingResiduals"> + <triggerType>pairs1</triggerType> + </driver> + <driver name="FinalStateMonitoringPairs1" type="org.hps.analysis.dataquality.FinalStateMonitoring"> + <triggerType>pairs1</triggerType> + </driver> + <driver name="V0MonitoringPairs1" type="org.hps.analysis.dataquality.V0Monitoring"> + <triggerType>pairs1</triggerType> + </driver> + <driver name="TridentMonitoringPairs1" type="org.hps.analysis.dataquality.TridentMonitoring"> + <triggerType>pairs1</triggerType> + </driver> + <driver name="FinalStateMonitoringGBLPairs1" type="org.hps.analysis.dataquality.FinalStateMonitoring"> + <triggerType>pairs1</triggerType> + <isGBL>true</isGBL> + </driver> + <driver name="V0MonitoringGBLPairs1" type="org.hps.analysis.dataquality.V0Monitoring"> + <triggerType>pairs1</triggerType> + <isGBL>true</isGBL> + </driver> + <driver name="TridentMonitoringGBLPairs1" type="org.hps.analysis.dataquality.TridentMonitoring"> + <triggerType>pairs1</triggerType> + <isGBL>true</isGBL> + </driver> + + <driver name="CleanupDriver" type="org.lcsim.recon.tracking.digitization.sisim.config.ReadoutCleanupDriver"/> + </drivers> </lcsim>