Author: [log in to unmask] Date: Sun Sep 27 16:26:28 2015 New Revision: 3723 Log: Added test to try and elimanate duplicate tracks from trident analysis portion of MTE analysis driver. Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/MTEAnalysis.java Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/MTEAnalysis.java ============================================================================= --- java/trunk/users/src/main/java/org/hps/users/kmccarty/MTEAnalysis.java (original) +++ java/trunk/users/src/main/java/org/hps/users/kmccarty/MTEAnalysis.java Sun Sep 27 16:26:28 2015 @@ -344,6 +344,11 @@ trackClusters[i] = pair[i].getClusters().get(0); } + // Make sure that the clusters are not the same. + if(trackClusters[0] == trackClusters[1]) { + continue tridentTrackLoop; + } + // Require that the track clusters be within a certain // time window of one another. CalorimeterHit[] seeds = new CalorimeterHit[2]; @@ -356,58 +361,64 @@ // Require that the energy of the electron is below // 900 MeV. - if((pair[0].getCharge() < 0 && pair[0].getMomentum().magnitude() < 0.900) || (pair[1].getCharge() < 0 && pair[1].getMomentum().magnitude() < 0.900)) { - isTrident = true; - tridentPlots.addClusterPair(trackClusters); - if(pair[0].getCharge() > 0) { - positronPlot.fill(pair[1].getMomentum().magnitude()); - electronPlot[TRIDENT].fill(pair[0].getMomentum().magnitude()); - } else { - positronPlot.fill(pair[0].getMomentum().magnitude()); - electronPlot[TRIDENT].fill(pair[1].getMomentum().magnitude()); - } - energyPlot[TRIDENT].fill(VecOp.add(pair[0].getMomentum(), pair[1].getMomentum()).magnitude()); - energy2DPlot[TRIDENT].fill(pair[0].getMomentum().magnitude(), pair[1].getMomentum().magnitude()); - - // Track which clusters have already been added to the - // singles plot so that there are no repeats. - Set<Cluster> plotSet = new HashSet<Cluster>(); - Set<Cluster> plotFiducial = new HashSet<Cluster>(); - - // Fill the all pairs plots. - double pairEnergy = trackClusters[0].getEnergy() + trackClusters[1].getEnergy(); - trEnergySumAll.fill(pairEnergy); - trEnergySum2DAll.fill(trackClusters[1].getEnergy(), trackClusters[0].getEnergy()); - trTimeCoincidenceAll.fill(TriggerModule.getValueTimeCoincidence(trackClusters)); - trSumCoplanarityCalcAll.fill(pairEnergy, getCalculatedCoplanarity(trackClusters)); - trSumCoplanarityAll.fill(pairEnergy, TriggerModule.getValueCoplanarity(trackClusters)); - - // Fill the singles plots. - if(!plotSet.contains(trackClusters[0])) { - plotSet.add(trackClusters[0]); - trTimeEnergyAll.fill(trackClusters[0].getEnergy(), TriggerModule.getClusterTime(trackClusters[0])); - } if(!plotSet.contains(trackClusters[1])) { - plotSet.add(trackClusters[1]); - trTimeEnergyAll.fill(trackClusters[1].getEnergy(), TriggerModule.getClusterTime(trackClusters[1])); - } - - // Fill the fiducial plots if appropriate. - if(inFiducialRegion(trackClusters[0]) && inFiducialRegion(trackClusters[1])) { - trEnergySumFiducial.fill(pairEnergy); - trEnergySum2DFiducial.fill(trackClusters[1].getEnergy(), trackClusters[0].getEnergy()); - trTimeCoincidenceFiducial.fill(TriggerModule.getValueTimeCoincidence(trackClusters)); - trSumCoplanarityCalcFiducial.fill(pairEnergy, getCalculatedCoplanarity(trackClusters)); - trSumCoplanarityFiducial.fill(pairEnergy, TriggerModule.getValueCoplanarity(trackClusters)); - } - - // Fill the singles fiducial plots if appropriate. - if(!plotFiducial.contains(trackClusters[0]) && inFiducialRegion(trackClusters[0])) { - plotFiducial.add(trackClusters[0]); - trTimeEnergyFiducial.fill(trackClusters[0].getEnergy(), TriggerModule.getClusterTime(trackClusters[0])); - } if(!plotFiducial.contains(trackClusters[1]) && inFiducialRegion(trackClusters[1])) { - plotFiducial.add(trackClusters[1]); - trTimeEnergyFiducial.fill(trackClusters[1].getEnergy(), TriggerModule.getClusterTime(trackClusters[1])); - } + boolean electronNotElastic = (pair[0].getCharge() < 0 && pair[0].getMomentum().magnitude() < 0.900) + || (pair[1].getCharge() < 0 && pair[1].getMomentum().magnitude() < 0.900); + if(!electronNotElastic) { + continue tridentTrackLoop; + } + + // If all tests are passed, this is a trident. Note + // this and populate the trident plots. + isTrident = true; + tridentPlots.addClusterPair(trackClusters); + if(pair[0].getCharge() > 0) { + positronPlot.fill(pair[1].getMomentum().magnitude()); + electronPlot[TRIDENT].fill(pair[0].getMomentum().magnitude()); + } else { + positronPlot.fill(pair[0].getMomentum().magnitude()); + electronPlot[TRIDENT].fill(pair[1].getMomentum().magnitude()); + } + energyPlot[TRIDENT].fill(VecOp.add(pair[0].getMomentum(), pair[1].getMomentum()).magnitude()); + energy2DPlot[TRIDENT].fill(pair[0].getMomentum().magnitude(), pair[1].getMomentum().magnitude()); + + // Track which clusters have already been added to the + // singles plot so that there are no repeats. + Set<Cluster> plotSet = new HashSet<Cluster>(); + Set<Cluster> plotFiducial = new HashSet<Cluster>(); + + // Fill the all pairs plots. + double pairEnergy = trackClusters[0].getEnergy() + trackClusters[1].getEnergy(); + trEnergySumAll.fill(pairEnergy); + trEnergySum2DAll.fill(trackClusters[1].getEnergy(), trackClusters[0].getEnergy()); + trTimeCoincidenceAll.fill(TriggerModule.getValueTimeCoincidence(trackClusters)); + trSumCoplanarityCalcAll.fill(pairEnergy, getCalculatedCoplanarity(trackClusters)); + trSumCoplanarityAll.fill(pairEnergy, TriggerModule.getValueCoplanarity(trackClusters)); + + // Fill the singles plots. + if(!plotSet.contains(trackClusters[0])) { + plotSet.add(trackClusters[0]); + trTimeEnergyAll.fill(trackClusters[0].getEnergy(), TriggerModule.getClusterTime(trackClusters[0])); + } if(!plotSet.contains(trackClusters[1])) { + plotSet.add(trackClusters[1]); + trTimeEnergyAll.fill(trackClusters[1].getEnergy(), TriggerModule.getClusterTime(trackClusters[1])); + } + + // Fill the fiducial plots if appropriate. + if(inFiducialRegion(trackClusters[0]) && inFiducialRegion(trackClusters[1])) { + trEnergySumFiducial.fill(pairEnergy); + trEnergySum2DFiducial.fill(trackClusters[1].getEnergy(), trackClusters[0].getEnergy()); + trTimeCoincidenceFiducial.fill(TriggerModule.getValueTimeCoincidence(trackClusters)); + trSumCoplanarityCalcFiducial.fill(pairEnergy, getCalculatedCoplanarity(trackClusters)); + trSumCoplanarityFiducial.fill(pairEnergy, TriggerModule.getValueCoplanarity(trackClusters)); + } + + // Fill the singles fiducial plots if appropriate. + if(!plotFiducial.contains(trackClusters[0]) && inFiducialRegion(trackClusters[0])) { + plotFiducial.add(trackClusters[0]); + trTimeEnergyFiducial.fill(trackClusters[0].getEnergy(), TriggerModule.getClusterTime(trackClusters[0])); + } if(!plotFiducial.contains(trackClusters[1]) && inFiducialRegion(trackClusters[1])) { + plotFiducial.add(trackClusters[1]); + trTimeEnergyFiducial.fill(trackClusters[1].getEnergy(), TriggerModule.getClusterTime(trackClusters[1])); } }