Author: [log in to unmask] Date: Thu Sep 24 15:13:24 2015 New Revision: 3704 Log: fix more plots Modified: 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/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 Thu Sep 24 15:13:24 2015 @@ -32,77 +32,91 @@ private double ebeam = 1.05; private BasicHep3Matrix beamAxisRotation = new BasicHep3Matrix(); - - String finalStateParticlesColName = "FinalStateParticles"; - String unconstrainedV0CandidatesColName = "UnconstrainedV0Candidates"; - String beamConV0CandidatesColName = "BeamspotConstrainedV0Candidates"; - String targetV0ConCandidatesColName = "TargetConstrainedV0Candidates"; - String trackListName = "MatchedTracks"; - String[] fpQuantNames = {"nV0_per_Event", "avg_BSCon_mass", "avg_BSCon_Vx", "avg_BSCon_Vy", "avg_BSCon_Vz", "sig_BSCon_Vx", "sig_BSCon_Vy", "sig_BSCon_Vz", "avg_BSCon_Chi2"}; + private static final int nCuts = 6; + private static final int PASS = 0; + private static final int FAIL = 1; + + private String finalStateParticlesColName = "FinalStateParticles"; + private String unconstrainedV0CandidatesColName = "UnconstrainedV0Candidates"; + private String beamConV0CandidatesColName = "BeamspotConstrainedV0Candidates"; + private String targetV0ConCandidatesColName = "TargetConstrainedV0Candidates"; + private String trackListName = "MatchedTracks"; + private String[] fpQuantNames = {"nV0_per_Event", "avg_BSCon_mass", "avg_BSCon_Vx", "avg_BSCon_Vy", "avg_BSCon_Vz", "sig_BSCon_Vx", "sig_BSCon_Vy", "sig_BSCon_Vz", "avg_BSCon_Chi2"}; private final String plotDir = "TridentMonitoring/"; - IHistogram2D trackTime2D; - IHistogram1D trackTimeDiff; - IHistogram2D vertexMassMomentum; - IHistogram2D vertexedTrackMomentum2D; - IHistogram2D pyEleVspyPos; - IHistogram2D pxEleVspxPos; - IHistogram2D vertexPxPy; - IHistogram1D goodVertexMass; - IHistogram2D goodVertexZVsMass; - IHistogram1D vertexX; - IHistogram1D vertexY; - IHistogram1D vertexZ; - IHistogram1D vertexPx; - IHistogram1D vertexPy; - IHistogram1D vertexPz; - IHistogram1D vertexU; - IHistogram1D vertexV; - IHistogram1D nCand; + private IHistogram2D trackTime2D; + private IHistogram1D trackTimeDiff; + private IHistogram2D vertexMassMomentum; + private IHistogram2D vertexedTrackMomentum2D; + private IHistogram2D pyEleVspyPos; + private IHistogram2D pxEleVspxPos; + private IHistogram2D vertexPxPy; + private IHistogram1D goodVertexMass; + private IHistogram2D goodVertexZVsMass; + private IHistogram1D vertexX; + private IHistogram1D vertexY; + private IHistogram1D vertexZ; + private IHistogram1D vertexPx; + private IHistogram1D vertexPy; + private IHistogram1D vertexPz; + private IHistogram1D vertexU; + private IHistogram1D vertexV; + private IHistogram1D nCand; // IHistogram1D vertexW; - IHistogram2D vertexVZ; - IHistogram2D vertexZY; - - IHistogram1D deltaP; - IHistogram1D deltaPRad; - IHistogram1D sumP; - IHistogram2D vertexedTrackMomentum2DRad; +// IHistogram2D vertexVZ; + private IHistogram2D vertexZY; + + private IHistogram1D[][] cutVertexMass = new IHistogram1D[nCuts][2]; + private IHistogram1D[][] cutVertexZ = new IHistogram1D[nCuts][2]; + private IHistogram2D[][] cutVertexZVsMass = new IHistogram2D[nCuts][2]; + + private IHistogram1D deltaP; + private IHistogram1D deltaPRad; + private IHistogram1D sumP; + private IHistogram2D vertexedTrackMomentum2DRad; //clean up event first - int nTrkMax = 5; - int nPosMax = 1; + private int nTrkMax = 5; + private int nPosMax = 1; + + private double maxChi2SeedTrack = 7.0; + private double maxChi2GBLTrack = 15.0; + private double maxVertChi2 = 7.0; //v0 cuts - double v0Chi2 = 10; - double v0PzMax = 1.25 * ebeam;//GeV - double v0PzMin = 0.1;// GeV - double v0PyMax = 0.2;//GeV absolute value - double v0PxMax = 0.2;//GeV absolute value - double v0VzMax = 25.0;// mm from target...someday make mass dependent - double v0VyMax = 1.0;// mm from target...someday make mass dependent - double v0VxMax = 2.0;// mm from target...someday make mass dependent + private double v0PzMax = 1.25 * ebeam;//GeV + private double v0PzMin = 0.1;// GeV + private double v0PyMax = 0.2;//GeV absolute value + private double v0PxMax = 0.2;//GeV absolute value + private double v0VzMax = 50.0;// mm from target...someday make mass dependent + private double v0VyMax = 1.0;// mm from target...someday make mass dependent + private double v0VxMax = 2.0;// mm from target...someday make mass dependent // track quality cuts - double trkChi2 = 10; - double beamPCut = 0.9; - double minPCut = 0.05; - double trkPyMax = 0.2; - double trkPxMax = 0.2; - double radCut = 0.8 * ebeam; - double trkTimeDiff = 16.0; + private double beamPCut = 0.85; + private double minPCut = 0.05; + private double trkPyMax = 0.2; + private double trkPxMax = 0.2; + private double radCut = 0.8 * ebeam; + private double trkTimeDiff = 16.0; + + private double l1IsoMin = 1.0; //cluster matching - boolean reqCluster = false; - int nClustMax = 3; - double eneLossFactor = 0.7; //average E/p roughly - double eneOverPCut = 0.3; //|(E/p)_meas - (E/p)_mean|<eneOverPCut + private boolean reqCluster = false; + private int nClustMax = 3; + private double eneLossFactor = 0.7; //average E/p roughly + private double eneOverPCut = 0.3; //|(E/p)_meas - (E/p)_mean|<eneOverPCut //counters - float nRecoEvents = 0; - float nPassBasicCuts = 0; - float nPassV0Cuts = 0; - float nPassTrkCuts = 0; - float nPassTimeCuts = 0; - - float nPassClusterCuts = 0; + private float nRecoEvents = 0; + private float nPassBasicCuts = 0; + private float nPassTrkQualityCuts = 0; + private float nPassV0QualityCuts = 0; + private float nPassV0Cuts = 0; + private float nPassTrkCuts = 0; + private float nPassTimeCuts = 0; + private float nPassIsoCuts = 0; + + private float nPassClusterCuts = 0; public void setEbeam(double ebeam) { this.ebeam = ebeam; @@ -110,7 +124,7 @@ @Override protected void detectorChanged(Detector detector) { - System.out.println("TridentMonitoring::detectorChanged Setting up the plotter"); + System.out.println("TridendMonitoring::detectorChanged Setting up the plotter"); beamAxisRotation.setActiveEuler(Math.PI / 2, -0.0305, -Math.PI / 2); aida.tree().cd("/"); @@ -156,12 +170,24 @@ 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); +// 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); + + for (int i = 0; i < nCuts; i++) { + for (int pass = 0; pass < 2; pass++) { + cutVertexZ[i][pass] = aida.histogram1D(String.format("%s%s%s/cut%d/%s: Vertex Z position (mm)", plotDir, trkType, triggerType, i, pass == PASS ? "pass" : "fail"), + 100, -v0VzMax, v0VzMax); + cutVertexMass[i][pass] = aida.histogram1D(String.format("%s%s%s/cut%d/%s: Vertex mass (GeV)", plotDir, trkType, triggerType, i, pass == PASS ? "pass" : "fail"), + 100, 0, 0.1 * ebeam); + cutVertexZVsMass[i][pass] = aida.histogram2D(String.format("%s%s%s/cut%d/%s: Vertex Z vs. mass", plotDir, trkType, triggerType, i, pass == PASS ? "pass" : "fail"), + 100, 0, 0.1 * ebeam, 100, -v0VzMax, v0VzMax); + } + } } @Override - public void process(EventHeader event) { + public void process(EventHeader event + ) { /* make sure everything is there */ if (!event.hasCollection(ReconstructedParticle.class, finalStateParticlesColName)) { return; @@ -213,7 +239,7 @@ nPassBasicCuts++;//passed some basic event-level cuts... List<ReconstructedParticle> candidateList = new ArrayList<>(); - ReconstructedParticle bestCandidate; + List<ReconstructedParticle> vertCandidateList = new ArrayList<>(); List<ReconstructedParticle> unConstrainedV0List = event.get(ReconstructedParticle.class, unconstrainedV0CandidatesColName); for (ReconstructedParticle uncV0 : unConstrainedV0List) { if (isGBL != TrackType.isGBL(uncV0.getType())) { @@ -222,26 +248,8 @@ Vertex uncVert = uncV0.getStartVertex(); // v0 & vertex-quality cuts Hep3Vector v0MomRot = VecOp.mult(beamAxisRotation, uncV0.getMomentum()); - if (v0MomRot.z() > v0PzMax || v0MomRot.z() < v0PzMin) { - continue; - } - if (Math.abs(v0MomRot.y()) > v0PyMax) { - continue; - } - if (Math.abs(v0MomRot.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; - } - nPassV0Cuts++; + Hep3Vector v0Vtx = VecOp.mult(beamAxisRotation, uncVert.getPosition()); + 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 @@ -266,27 +274,103 @@ for (Track track : tracks) { trackTimes.add(TrackUtils.getTrackTime(track, hitToStrips, hitToRotated)); } + + Double[] eleIso = TrackUtils.getIsolations(electron.getTracks().get(0), hitToStrips, hitToRotated); + Double[] posIso = TrackUtils.getIsolations(positron.getTracks().get(0), hitToStrips, hitToRotated); + double minL1Iso = -9999; + if (eleIso[0] != null && posIso[0] != null) { + double eleL1Iso = Math.min(Math.abs(eleIso[0]), Math.abs(eleIso[1])); + double posL1Iso = Math.min(Math.abs(posIso[0]), Math.abs(posIso[1])); + minL1Iso = Math.min(eleL1Iso, posL1Iso); +// VtxZVsL1Iso.fill(minL1Iso, uncVert.getPosition().z()); + } + + int cutNum = 0; + boolean trackQualityCut = Math.max(tracks.get(0).getChi2(), tracks.get(1).getChi2()) < (isGBL ? maxChi2GBLTrack : maxChi2SeedTrack); + if (!trackQualityCut) { + cutVertexZ[cutNum][FAIL].fill(v0Vtx.z()); + cutVertexMass[cutNum][FAIL].fill(uncV0.getMass()); + cutVertexZVsMass[cutNum][FAIL].fill(uncV0.getMass(), v0Vtx.z()); + continue; + } + cutVertexZ[cutNum][PASS].fill(v0Vtx.z()); + cutVertexMass[cutNum][PASS].fill(uncV0.getMass()); + cutVertexZVsMass[cutNum][PASS].fill(uncV0.getMass(), v0Vtx.z()); + cutNum++; + nPassTrkQualityCuts++; + + boolean v0QualityCut = uncVert.getChi2() < maxVertChi2; + if (!v0QualityCut) { + cutVertexZ[cutNum][FAIL].fill(v0Vtx.z()); + cutVertexMass[cutNum][FAIL].fill(uncV0.getMass()); + cutVertexZVsMass[cutNum][FAIL].fill(uncV0.getMass(), v0Vtx.z()); + continue; + } + cutVertexZ[cutNum][PASS].fill(v0Vtx.z()); + cutVertexMass[cutNum][PASS].fill(uncV0.getMass()); + cutVertexZVsMass[cutNum][PASS].fill(uncV0.getMass(), v0Vtx.z()); + cutNum++; + nPassV0QualityCuts++; + + boolean vertexMomentumCut = v0MomRot.z() < v0PzMax && v0MomRot.z() > v0PzMin && Math.abs(v0MomRot.x()) < v0PxMax && Math.abs(v0MomRot.y()) < v0PyMax; + boolean vertexPositionCut = Math.abs(v0Vtx.x()) < v0VxMax && Math.abs(v0Vtx.y()) < v0VyMax && Math.abs(v0Vtx.z()) < v0VzMax; + if (!vertexMomentumCut || !vertexPositionCut) { + cutVertexZ[cutNum][FAIL].fill(v0Vtx.z()); + cutVertexMass[cutNum][FAIL].fill(uncV0.getMass()); + cutVertexZVsMass[cutNum][FAIL].fill(uncV0.getMass(), v0Vtx.z()); + continue; + } + cutVertexZ[cutNum][PASS].fill(v0Vtx.z()); + cutVertexMass[cutNum][PASS].fill(uncV0.getMass()); + cutVertexZVsMass[cutNum][PASS].fill(uncV0.getMass(), v0Vtx.z()); + cutNum++; + nPassV0Cuts++; + boolean trackTimeDiffCut = Math.abs(trackTimes.get(0) - trackTimes.get(1)) < trkTimeDiff; if (!trackTimeDiffCut) { - continue; - } + cutVertexZ[cutNum][FAIL].fill(v0Vtx.z()); + cutVertexMass[cutNum][FAIL].fill(uncV0.getMass()); + cutVertexZVsMass[cutNum][FAIL].fill(uncV0.getMass(), v0Vtx.z()); + continue; + } + cutVertexZ[cutNum][PASS].fill(v0Vtx.z()); + cutVertexMass[cutNum][PASS].fill(uncV0.getMass()); + cutVertexZVsMass[cutNum][PASS].fill(uncV0.getMass(), v0Vtx.z()); + cutNum++; nPassTimeCuts++; - if (electron.getMomentum().y() * positron.getMomentum().y() > 0) { - continue; - } + boolean topBottomCut = electron.getMomentum().y() * positron.getMomentum().y() < 0; boolean pMinCut = electron.getMomentum().magnitude() > minPCut && positron.getMomentum().magnitude() > minPCut; - if (!pMinCut) { - continue; - } boolean pMaxCut = electron.getMomentum().magnitude() < beamPCut && positron.getMomentum().magnitude() < beamPCut; - if (!pMaxCut) { - continue; - } + if (!topBottomCut || !pMaxCut || !pMinCut) { + cutVertexZ[cutNum][FAIL].fill(v0Vtx.z()); + cutVertexMass[cutNum][FAIL].fill(uncV0.getMass()); + cutVertexZVsMass[cutNum][FAIL].fill(uncV0.getMass(), v0Vtx.z()); + continue; + } + cutVertexZ[cutNum][PASS].fill(v0Vtx.z()); + cutVertexMass[cutNum][PASS].fill(uncV0.getMass()); + cutVertexZVsMass[cutNum][PASS].fill(uncV0.getMass(), v0Vtx.z()); + cutNum++; nPassTrkCuts++; candidateList.add(uncV0); + + boolean isoCut = minL1Iso > l1IsoMin; + if (!isoCut) { + cutVertexZ[cutNum][FAIL].fill(v0Vtx.z()); + cutVertexMass[cutNum][FAIL].fill(uncV0.getMass()); + cutVertexZVsMass[cutNum][FAIL].fill(uncV0.getMass(), v0Vtx.z()); + continue; + } + cutVertexZ[cutNum][PASS].fill(v0Vtx.z()); + cutVertexMass[cutNum][PASS].fill(uncV0.getMass()); + cutVertexZVsMass[cutNum][PASS].fill(uncV0.getMass(), v0Vtx.z()); + cutNum++; + nPassIsoCuts++; + + vertCandidateList.add(uncV0); } nCand.fill(candidateList.size()); @@ -294,7 +378,7 @@ return; } // pick the best candidate...for now just pick a random one. - bestCandidate = candidateList.get((int) (Math.random() * candidateList.size())); + ReconstructedParticle bestCandidate = candidateList.get((int) (Math.random() * candidateList.size())); //fill some stuff: ReconstructedParticle electron = null, positron = null; @@ -330,7 +414,7 @@ vertexPxPy.fill(pBestV0Rot.x(), pBestV0Rot.y()); goodVertexMass.fill(bestCandidate.getMass()); Vertex uncVert = bestCandidate.getStartVertex(); - Hep3Vector v0Vtx = uncVert.getPosition(); + Hep3Vector v0Vtx = VecOp.mult(beamAxisRotation, uncVert.getPosition()); goodVertexZVsMass.fill(bestCandidate.getMass(), v0Vtx.z()); vertexX.fill(v0Vtx.x()); vertexY.fill(v0Vtx.y()); @@ -341,7 +425,7 @@ vertexU.fill(pBestV0Rot.x() / pBestV0Rot.magnitude()); vertexV.fill(pBestV0Rot.y() / pBestV0Rot.magnitude()); // vertexW.fill(bestCandidate.getMomentum().z()/bestCandidate.getMomentum().magnitude()); - vertexVZ.fill(v0Vtx.z(), pBestV0Rot.y() / pBestV0Rot.magnitude()); +// vertexVZ.fill(v0Vtx.z(), pBestV0Rot.y() / pBestV0Rot.magnitude()); vertexZY.fill(v0Vtx.y(), v0Vtx.z()); if (bestCandidate.getMomentum().magnitude() > radCut) { vertexedTrackMomentum2DRad.fill(electron.getMomentum().magnitude(), positron.getMomentum().magnitude()); @@ -352,21 +436,27 @@ @Override public void printDQMData() { - System.out.println("TridentMonitoring::printDQMData"); + System.out.println("TridendMonitoring::printDQMData"); for (Entry<String, Double> entry : monitoredQuantityMap.entrySet()) { System.out.println(entry.getKey() + " = " + entry.getValue()); } System.out.println("*******************************"); - System.out.println("TridentMonitoring::Tridend Selection Summary"); - - System.out.println("\t\t\tTrident Selection Summary"); + System.out.println("TridendMonitoring::Tridend Selection Summary"); + + System.out.println("\t\t\tTridend Selection Summary"); System.out.println("******************************************************************************************"); System.out.println("Number of Events:\t\t" + nRecoEvents + "\t\t\t" + (nRecoEvents) / nRecoEvents + "\t\t\t" + nRecoEvents / nRecoEvents); System.out.println("N(particle) Cuts:\t\t" + nPassBasicCuts + "\t\t\t" + nPassBasicCuts / nRecoEvents + "\t\t\t" + nPassBasicCuts / nRecoEvents); - System.out.println("V0 Vertex Cuts:\t\t" + nPassV0Cuts + "\t\t\t" + nPassV0Cuts / nPassBasicCuts + "\t\t\t" + nPassV0Cuts / nRecoEvents); - System.out.println("Timing Cuts:\t\t" + nPassTimeCuts + "\t\t\t" + nPassTimeCuts / nPassV0Cuts + "\t\t\t" + nPassTimeCuts / nRecoEvents); + System.out.println("Trk Quality Cuts:\t\t" + nPassTrkQualityCuts + "\t\t\t" + nPassTrkQualityCuts / nPassBasicCuts + "\t\t\t" + nPassTrkQualityCuts / nRecoEvents); + System.out.println("V0 Quality Cuts:\t\t" + nPassV0QualityCuts + "\t\t\t" + nPassV0QualityCuts / nPassTrkQualityCuts + "\t\t\t" + nPassV0QualityCuts / nRecoEvents); + System.out.println("V0 Vertex Cuts:\t\t" + nPassV0Cuts + "\t\t\t" + nPassV0Cuts / nPassV0QualityCuts + "\t\t\t" + nPassV0Cuts / nRecoEvents); + System.out.println("Timing Cuts:\t\t" + nPassTimeCuts + "\t\t\t" + nPassTimeCuts / nPassV0Cuts + "\t\t\t" + nPassTimeCuts / nRecoEvents); System.out.println("Tracking Cuts:\t\t" + nPassTrkCuts + "\t\t\t" + nPassTrkCuts / nPassTimeCuts + "\t\t\t" + nPassTrkCuts / nRecoEvents); + + System.out.println("\t\t\tVertex Selection Summary"); + System.out.println("******************************************************************************************"); + System.out.println("Isolation Cuts:\t\t" + nPassIsoCuts + "\t\t\t" + nPassIsoCuts / nPassTrkCuts + "\t\t\t" + nPassIsoCuts / nRecoEvents); System.out.println("******************************************************************************************"); } @@ -390,7 +480,8 @@ } } - IFitResult fitVertexPosition(IHistogram1D h1d, IFitter fitter, double[] init, String range) { + IFitResult fitVertexPosition(IHistogram1D h1d, IFitter fitter, double[] init, String range + ) { return fitter.fit(h1d, "g+p1", init, 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 Thu Sep 24 15:13:24 2015 @@ -138,7 +138,7 @@ private final String plotDir = "V0Monitoring/"; double beamEnergy = 1.05; //GeV - private BasicHep3Matrix beamAxisRotation = new BasicHep3Matrix(); + private final BasicHep3Matrix beamAxisRotation = new BasicHep3Matrix(); double maxFactor = 1.25; double feeMomentumCut = 0.8; //GeV @@ -265,25 +265,26 @@ continue; Vertex uncVert = uncV0.getStartVertex(); Hep3Vector pVtxRot = VecOp.mult(beamAxisRotation, uncV0.getMomentum()); + Hep3Vector vtxPosRot = VecOp.mult(beamAxisRotation, uncVert.getPosition()); double theta = Math.acos(pVtxRot.z() / pVtxRot.magnitude()); double phi = Math.atan2(pVtxRot.y(), pVtxRot.x()); - unconVx.fill(uncVert.getPosition().x()); - unconVy.fill(uncVert.getPosition().y()); - unconVz.fill(uncVert.getPosition().z()); + unconVx.fill(vtxPosRot.x()); + unconVy.fill(vtxPosRot.y()); + unconVz.fill(vtxPosRot.z()); unconMass.fill(uncV0.getMass()); unconChi2.fill(uncVert.getChi2()); - unconVzVsChi2.fill(uncVert.getChi2(), uncVert.getPosition().z()); - unconChi2VsTrkChi2.fill(uncV0.getParticles().get(0).getTracks().get(0).getChi2() + uncV0.getParticles().get(1).getTracks().get(0).getChi2(), uncVert.getChi2()); - - VtxZVsMass.fill(uncV0.getMass(), uncVert.getPosition().z()); - VtxXVsVtxZ.fill(uncVert.getPosition().x(), uncVert.getPosition().z()); - VtxYVsVtxZ.fill(uncVert.getPosition().y(), uncVert.getPosition().z()); - VtxXVsVtxY.fill(uncVert.getPosition().x(), uncVert.getPosition().y()); - VtxXVsVtxPx.fill(pVtxRot.x(), uncVert.getPosition().x()); - VtxYVsVtxPy.fill(pVtxRot.y(), uncVert.getPosition().y()); - VtxZVsVtxPx.fill(pVtxRot.x(), uncVert.getPosition().z()); - VtxZVsVtxPy.fill(pVtxRot.y(), uncVert.getPosition().z()); - VtxZVsVtxPz.fill(pVtxRot.z(), uncVert.getPosition().z()); + unconVzVsChi2.fill(uncVert.getChi2(), vtxPosRot.z()); + unconChi2VsTrkChi2.fill(Math.max(uncV0.getParticles().get(0).getTracks().get(0).getChi2(), uncV0.getParticles().get(1).getTracks().get(0).getChi2()), uncVert.getChi2()); + + VtxZVsMass.fill(uncV0.getMass(), vtxPosRot.z()); + VtxXVsVtxZ.fill(vtxPosRot.x(), vtxPosRot.z()); + VtxYVsVtxZ.fill(vtxPosRot.y(), vtxPosRot.z()); + VtxXVsVtxY.fill(vtxPosRot.x(), vtxPosRot.y()); + VtxXVsVtxPx.fill(pVtxRot.x(), vtxPosRot.x()); + VtxYVsVtxPy.fill(pVtxRot.y(), vtxPosRot.y()); + VtxZVsVtxPx.fill(pVtxRot.x(), vtxPosRot.z()); + VtxZVsVtxPy.fill(pVtxRot.y(), vtxPosRot.z()); + VtxZVsVtxPz.fill(pVtxRot.z(), vtxPosRot.z()); //this always has 2 tracks. List<ReconstructedParticle> trks = uncV0.getParticles(); @@ -306,7 +307,7 @@ ele = trks.get(1); } if (ele.getCharge() < 0 && pos.getCharge() > 0) { - VtxZVsTrkChi2.fill(uncV0.getParticles().get(0).getTracks().get(0).getChi2() + uncV0.getParticles().get(1).getTracks().get(0).getChi2(), uncVert.getPosition().z()); + VtxZVsTrkChi2.fill(Math.max(uncV0.getParticles().get(0).getTracks().get(0).getChi2(), uncV0.getParticles().get(1).getTracks().get(0).getChi2()), uncVert.getPosition().z()); Double[] eleIso = TrackUtils.getIsolations(ele.getTracks().get(0), hitToStrips, hitToRotated); Double[] posIso = TrackUtils.getIsolations(pos.getTracks().get(0), hitToStrips, hitToRotated); @@ -347,17 +348,18 @@ continue; nTotV0++; Vertex bsVert = bsV0.getStartVertex(); - bsconVx.fill(bsVert.getPosition().x()); - bsconVy.fill(bsVert.getPosition().y()); - bsconVz.fill(bsVert.getPosition().z()); + Hep3Vector vtxPosRot = VecOp.mult(beamAxisRotation, bsVert.getPosition()); + bsconVx.fill(vtxPosRot.x()); + bsconVy.fill(vtxPosRot.y()); + bsconVz.fill(vtxPosRot.z()); bsconMass.fill(bsV0.getMass()); bsconChi2.fill(bsVert.getChi2()); - bsconVzVsChi2.fill(bsVert.getChi2(), bsVert.getPosition().z()); - bsconChi2VsTrkChi2.fill(bsV0.getParticles().get(0).getTracks().get(0).getChi2() + bsV0.getParticles().get(1).getTracks().get(0).getChi2(), bsVert.getChi2()); + bsconVzVsChi2.fill(bsVert.getChi2(), vtxPosRot.z()); + bsconChi2VsTrkChi2.fill(Math.max(bsV0.getParticles().get(0).getTracks().get(0).getChi2(), bsV0.getParticles().get(1).getTracks().get(0).getChi2()), bsVert.getChi2()); sumMass += bsV0.getMass(); - sumVx += bsVert.getPosition().x(); - sumVy += bsVert.getPosition().y(); - sumVz += bsVert.getPosition().z(); + sumVx += vtxPosRot.x(); + sumVy += vtxPosRot.y(); + sumVz += vtxPosRot.z(); sumChi2 += bsVert.getChi2(); } @@ -368,13 +370,14 @@ continue; Vertex tarVert = tarV0.getStartVertex(); - tarconVx.fill(tarVert.getPosition().x()); - tarconVy.fill(tarVert.getPosition().y()); - tarconVz.fill(tarVert.getPosition().z()); + Hep3Vector vtxPosRot = VecOp.mult(beamAxisRotation, tarVert.getPosition()); + tarconVx.fill(vtxPosRot.x()); + tarconVy.fill(vtxPosRot.y()); + tarconVz.fill(vtxPosRot.z()); tarconMass.fill(tarV0.getMass()); tarconChi2.fill(tarVert.getChi2()); - tarconVzVsChi2.fill(tarVert.getChi2(), tarVert.getPosition().z()); - tarconChi2VsTrkChi2.fill(tarV0.getParticles().get(0).getTracks().get(0).getChi2() + tarV0.getParticles().get(1).getTracks().get(0).getChi2(), tarVert.getChi2()); + tarconVzVsChi2.fill(tarVert.getChi2(), vtxPosRot.z()); + tarconChi2VsTrkChi2.fill(Math.max(tarV0.getParticles().get(0).getTracks().get(0).getChi2(), tarV0.getParticles().get(1).getTracks().get(0).getChi2()), tarVert.getChi2()); } List<ReconstructedParticle> finalStateParticles = event.get(ReconstructedParticle.class, finalStateParticlesColName); if (debug)