Author: [log in to unmask] Date: Mon Nov 10 18:24:53 2014 New Revision: 1491 Log: Modifications to analysis classes to let us use HPS style HelicalTrackHit2D and non-bend only fits Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/FinalStateMonitoring.java java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackMCEfficiency.java java/trunk/analysis/src/main/java/org/hps/analysis/examples/TrackAnalysis.java 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 Mon Nov 10 18:24:53 2014 @@ -40,7 +40,7 @@ String finalStateParticlesColName = "FinalStateParticles"; - String[] fpQuantNames = {"nEle_per_Event", "nPos_per_Event", "nPhoton_per_Event", "nUnAssociatedTracks_per_Event", "avg_delX_at_ECal", "avg_delY_at_ECal", "avg_E_Over_P","avg_mom_beam_elec","sig_mom_beam_elec"}; + String[] fpQuantNames = {"nEle_per_Event", "nPos_per_Event", "nPhoton_per_Event", "nUnAssociatedTracks_per_Event", "avg_delX_at_ECal", "avg_delY_at_ECal", "avg_E_Over_P", "avg_mom_beam_elec", "sig_mom_beam_elec"}; //some counters int nRecoEvents = 0; int nTotEle = 0; @@ -206,10 +206,9 @@ IFitter fitter = fitFactory.createFitter("chi2"); IHistogram1D beamE = aida.histogram1D(plotDir + "Beam Electrons Pz (GeV)"); IFitResult result = fitBeamEnergyPeak(beamE, fitter, "range=\"(-10.0,10.0)\""); - double[] pars=result.fittedParameters(); - for (int i = 0; i < 5; i++) { + double[] pars = result.fittedParameters(); + for (int i = 0; i < 5; i++) System.out.println("Beam Energy Peak: " + result.fittedParameterNames()[i] + " = " + pars[i]); - } monitoredQuantityMap.put(fpQuantNames[0], (double) nTotEle / nRecoEvents); monitoredQuantityMap.put(fpQuantNames[1], (double) nTotPos / nRecoEvents); @@ -225,14 +224,15 @@ IPlotterStyle pstyle = plotter.style(); pstyle.legendBoxStyle().setVisible(false); pstyle.dataStyle().fillStyle().setColor("green"); - pstyle.dataStyle().lineStyle().setColor("black"); - plotter.region(0).plot(beamE); + pstyle.dataStyle().lineStyle().setColor("black"); + plotter.region(0).plot(beamE); plotter.region(0).plot(result.fittedFunction()); - try { - plotter.writeToFile("beamEnergyElectrons.png"); - } catch (IOException ex) { - Logger.getLogger(FinalStateMonitoring.class.getName()).log(Level.SEVERE, null, ex); - } + if (outputPlots) + try { + plotter.writeToFile(outputPlotDir + "beamEnergyElectrons.png"); + } catch (IOException ex) { + Logger.getLogger(FinalStateMonitoring.class.getName()).log(Level.SEVERE, null, ex); + } } @Override @@ -243,9 +243,9 @@ IFitResult fitBeamEnergyPeak(IHistogram1D h1d, IFitter fitter, String range) { // return fitter.fit(h1d, "g", range); - + // return fitter.fit(h1d, "g+p1", init, range); - double[] init = {20.0, 2.2, 0.12, 10, 0.0}; + double[] init = {20.0, 2.2, 0.12, 10, 0.0}; // double[] init = {20.0, 2.2, 0.1}; return fitter.fit(h1d, "g+p1", init); } Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackMCEfficiency.java ============================================================================= --- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackMCEfficiency.java (original) +++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TrackMCEfficiency.java Mon Nov 10 18:24:53 2014 @@ -1,5 +1,6 @@ package org.hps.analysis.dataquality; +import hep.aida.IHistogram1D; import hep.aida.IHistogramFactory; import hep.aida.IProfile1D; import hep.physics.vec.BasicHep3Vector; @@ -8,11 +9,9 @@ import java.util.List; import java.util.Map; import java.util.Set; -import org.hps.analysis.examples.LCIOTrackAnalysis; import org.hps.analysis.examples.TrackAnalysis; import org.hps.recon.tracking.FindableTrack; import org.hps.recon.tracking.FittedRawTrackerHit; -import org.lcsim.detector.tracker.silicon.SiSensor; import org.lcsim.event.EventHeader; import org.lcsim.event.LCRelation; import org.lcsim.event.MCParticle; @@ -20,14 +19,13 @@ import org.lcsim.event.RelationalTable; import org.lcsim.event.SimTrackerHit; import org.lcsim.event.Track; +import org.lcsim.event.TrackState; import org.lcsim.event.TrackerHit; import org.lcsim.event.base.BaseRelationalTable; import org.lcsim.fit.helicaltrack.HelicalTrackCross; import org.lcsim.fit.helicaltrack.HelixParamCalculator; import org.lcsim.geometry.Detector; import org.lcsim.geometry.IDDecoder; -import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHit; -import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHitStrip1D; /** * DQM driver for the monte carlo track efficiency; makes a bunch of efficiency @@ -41,15 +39,14 @@ public class TrackMCEfficiency extends DataQualityMonitor { private String rawTrackerHitCollectionName = "SVTRawTrackerHits"; - private String helicalTrackHitCollectionName = "HelicalTrackHits"; - private String fittedTrackerHitCollectionName = "SVTFittedRawTrackerHits"; + private String trackHitCollectionName = "RotatedHelicalTrackHits"; + private String fittedSVTHitCollectionName = "SVTFittedRawTrackerHits"; private String trackerHitCollectionName = "TrackerHits"; private String siClusterCollectionName = "StripClusterer_SiTrackerHitStrip1D"; - private String rotatedMCRelationsCollectionName = "RotatedHelicalTrackMCRelations"; - private final String helicalTrackHitRelationsCollectionName = "HelicalTrackHitRelations"; - private final String rotatedHelicalTrackHitRelationsCollectionName = "RotatedHelicalTrackHitRelations"; + private String trackHitMCRelationsCollectionName = "RotatedHelicalTrackMCRelations"; + private String detectorFrameHitRelationsCollectionName = "HelicalTrackHitRelations"; + private String trackHitRelationsCollectionName = "RotatedHelicalTrackHitRelations"; private String trackCollectionName = "MatchedTracks"; - private String trackerName = "Tracker"; private Detector detector = null; IDDecoder dec; private IProfile1D peffFindable; @@ -65,13 +62,25 @@ int findableelectrons = 0; int findableTracks = 0; double foundTracks = 0; - private static final String nameStrip = "Tracker_TestRunModule_"; - private List<SiSensor> sensors; - private boolean debugTrackEfficiency = false; + private boolean debugTrackEfficiency = true; private String plotDir = "TrackMCEfficiency/"; - - public void setHelicalTrackHitCollectionName(String helicalTrackHitCollectionName) { - this.helicalTrackHitCollectionName = helicalTrackHitCollectionName; + private String resDir = "TrackMCResolution/"; + private String misidDir = "TrackMCMisId/"; + + public void setTrackHitCollectionName(String trackHitCollectionName) { + this.trackHitCollectionName = trackHitCollectionName; + } + + public void setTrackHitMCRelationsCollectionName(String trackHitMCRelationsCollectionName) { + this.trackHitMCRelationsCollectionName = trackHitMCRelationsCollectionName; + } + + public void setDetectorFrameHitRelationsCollectionName(String detectorFrameHitRelationsCollectionName) { + this.detectorFrameHitRelationsCollectionName = detectorFrameHitRelationsCollectionName; + } + + public void setTrackHitRelationsCollectionName(String trackHitRelationsCollectionName) { + this.trackHitRelationsCollectionName = trackHitRelationsCollectionName; } public void setTrackCollectionName(String trackCollectionName) { @@ -86,17 +95,23 @@ protected void detectorChanged(Detector detector) { this.detector = detector; aida.tree().mkdir(plotDir); + aida.tree().mkdir(resDir); + aida.tree().mkdir(misidDir); aida.tree().cd("/"); IHistogramFactory hf = aida.histogramFactory(); peffFindable = hf.createProfile1D(plotDir + "Findable Efficiency vs p", "", 20, 0., beamP); phieffFindable = hf.createProfile1D(plotDir + "Findable Efficiency vs phi", "", 25, -0.25, 0.25); ctheffFindable = hf.createProfile1D(plotDir + "Findable Efficiency vs cos(theta)", "", 25, -0.25, 0.25); - peffElectrons = hf.createProfile1D(plotDir + "Electrons Efficiency vs p", "", 20, 0., beamP); phieffElectrons = hf.createProfile1D(plotDir + "Electrons Efficiency vs phi", "", 25, -0.25, 0.25); ctheffElectrons = hf.createProfile1D(plotDir + "Electrons Efficiency vs cos(theta)", "", 25, -0.25, 0.25); + IHistogram1D pMCRes = hf.createHistogram1D(resDir + "Momentum Resolution", 50, -0.5, 0.5); + IHistogram1D phi0MCRes = hf.createHistogram1D(resDir + "phi0 Resolution", 50, -0.1, 0.1); + IHistogram1D d0MCRes = hf.createHistogram1D(resDir + "d0 Resolution", 50, -0.5, 0.5); + IHistogram1D z0MCRes = hf.createHistogram1D(resDir + "z0 Resolution", 50, -1.0,1.0); + IHistogram1D tanLambdaMCRes = hf.createHistogram1D(resDir + "tanLambda Resolution", 50, -0.1, 0.1); } @Override @@ -106,22 +121,28 @@ //make sure the required collections exist if (!event.hasCollection(RawTrackerHit.class, rawTrackerHitCollectionName)) { - return; - } - if (!event.hasCollection(LCRelation.class, fittedTrackerHitCollectionName)) { + System.out.println(this.getClass().getSimpleName() + ": no collection found " + rawTrackerHitCollectionName); + return; + } + if (!event.hasCollection(LCRelation.class, fittedSVTHitCollectionName)) { + System.out.println(this.getClass().getSimpleName() + ": no collection found " + fittedSVTHitCollectionName); return; } if (!event.hasCollection(Track.class, trackCollectionName)) { - return; - } - if (!event.hasCollection(LCRelation.class, rotatedMCRelationsCollectionName)) { + System.out.println(this.getClass().getSimpleName() + ": no collection found " + trackCollectionName); + return; + } + if (!event.hasCollection(LCRelation.class, trackHitMCRelationsCollectionName)) { + System.out.println(this.getClass().getSimpleName() + ": no collection found " + trackHitMCRelationsCollectionName); return; } if (!event.hasCollection(TrackerHit.class, siClusterCollectionName)) { + System.out.println(this.getClass().getSimpleName() + ": no collection found " + siClusterCollectionName); return; } if (!event.hasCollection(SimTrackerHit.class, trackerHitCollectionName)) { + System.out.println(this.getClass().getSimpleName() + ": no collection found " + trackerHitCollectionName); return; } // @@ -131,33 +152,27 @@ //make some maps and relation tables Map<Track, TrackAnalysis> tkanalMap = new HashMap<Track, TrackAnalysis>(); RelationalTable hittomc = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED); - List<LCRelation> mcrelations = event.get(LCRelation.class, rotatedMCRelationsCollectionName); - for (LCRelation relation : mcrelations) { - if (relation != null && relation.getFrom() != null && relation.getTo() != null) { + List<LCRelation> mcrelations = event.get(LCRelation.class, trackHitMCRelationsCollectionName); + System.out.println(this.getClass().getSimpleName() + ": number of MC relations = " + mcrelations.size()); + for (LCRelation relation : mcrelations) + if (relation != null && relation.getFrom() != null && relation.getTo() != null) hittomc.add(relation.getFrom(), relation.getTo()); - } - } - + System.out.println(this.getClass().getSimpleName() + ": number of hittomc relations = " + hittomc.size()); RelationalTable mcHittomcP = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED); // Get the collections of SimTrackerHits List<List<SimTrackerHit>> simcols = event.get(SimTrackerHit.class); // Loop over the SimTrackerHits and fill in the relational table - for (List<SimTrackerHit> simlist : simcols) { - for (SimTrackerHit simhit : simlist) { - if (simhit.getMCParticle() != null) { + for (List<SimTrackerHit> simlist : simcols) + for (SimTrackerHit simhit : simlist) + if (simhit.getMCParticle() != null) mcHittomcP.add(simhit, simhit.getMCParticle()); - } - } - } RelationalTable trktomc = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED); RelationalTable rawtomc = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED); if (event.hasCollection(LCRelation.class, "SVTTrueHitRelations")) { List<LCRelation> trueHitRelations = event.get(LCRelation.class, "SVTTrueHitRelations"); - for (LCRelation relation : trueHitRelations) { - if (relation != null && relation.getFrom() != null && relation.getTo() != null) { + for (LCRelation relation : trueHitRelations) + if (relation != null && relation.getFrom() != null && relation.getTo() != null) rawtomc.add(relation.getFrom(), relation.getTo()); - } - } } // make relational table for strip clusters to mc particle List<TrackerHit> siClusters = event.get(TrackerHit.class, siClusterCollectionName); @@ -166,54 +181,46 @@ List<RawTrackerHit> rawHits = cluster.getRawHits(); for (RawTrackerHit rth : rawHits) { Set<SimTrackerHit> simTrackerHits = rawtomc.allFrom(rth); - if (simTrackerHits != null) { - for (SimTrackerHit simhit : simTrackerHits) { + if (simTrackerHits != null) + for (SimTrackerHit simhit : simTrackerHits) clustertosimhit.add(cluster, simhit); - } - } } } //relational tables from mc particle to raw and fitted tracker hits RelationalTable fittomc = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED); - List<LCRelation> fittedTrackerHits = event.get(LCRelation.class, fittedTrackerHitCollectionName); + List<LCRelation> fittedTrackerHits = event.get(LCRelation.class, fittedSVTHitCollectionName); for (LCRelation hit : fittedTrackerHits) { RawTrackerHit rth = FittedRawTrackerHit.getRawTrackerHit(hit); Set<SimTrackerHit> simTrackerHits = rawtomc.allFrom(rth); - if (simTrackerHits != null) { - for (SimTrackerHit simhit : simTrackerHits) { - if (simhit.getMCParticle() != null) { + if (simTrackerHits != null) + for (SimTrackerHit simhit : simTrackerHits) + if (simhit.getMCParticle() != null) fittomc.add(hit, simhit.getMCParticle()); - } - } - } } RelationalTable hittostrip = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED); - List<LCRelation> hitrelations = event.get(LCRelation.class, helicalTrackHitRelationsCollectionName); - for (LCRelation relation : hitrelations) { - if (relation != null && relation.getFrom() != null && relation.getTo() != null) { + List<LCRelation> hitrelations = event.get(LCRelation.class, detectorFrameHitRelationsCollectionName); + for (LCRelation relation : hitrelations) + if (relation != null && relation.getFrom() != null && relation.getTo() != null) hittostrip.add(relation.getFrom(), relation.getTo()); - } - } RelationalTable hittorotated = new BaseRelationalTable(RelationalTable.Mode.ONE_TO_ONE, RelationalTable.Weighting.UNWEIGHTED); - List<LCRelation> rotaterelations = event.get(LCRelation.class, rotatedHelicalTrackHitRelationsCollectionName); - for (LCRelation relation : rotaterelations) { - if (relation != null && relation.getFrom() != null && relation.getTo() != null) { + List<LCRelation> rotaterelations = event.get(LCRelation.class, trackHitRelationsCollectionName); + for (LCRelation relation : rotaterelations) + if (relation != null && relation.getFrom() != null && relation.getTo() != null) hittorotated.add(relation.getFrom(), relation.getTo()); - } - } // Instantiate the class that determines if a track is "findable" FindableTrack findable = new FindableTrack(event); List<Track> tracks = event.get(Track.class, trackCollectionName); + System.out.println(this.getClass().getSimpleName() + ": nTracks = " + tracks.size()); for (Track trk : tracks) { TrackAnalysis tkanal = new TrackAnalysis(trk, hittomc, rawtomc, hittostrip, hittorotated); tkanalMap.put(trk, tkanal); MCParticle mcp = tkanal.getMCParticleNew(); - if (mcp != null) // Create a map between the tracks found and the assigned MC particle - { + if (mcp != null) {// Create a map between the tracks found and the assigned MC particle + System.out.println(this.getClass().getSimpleName() + ": found MCP match"); trktomc.add(trk, tkanal.getMCParticleNew()); } } @@ -235,7 +242,7 @@ double eta = -Math.log(Math.tan(Math.atan2(pt, pz) / 2)); double phi = Math.atan2(px, pz); // Find the number of layers hit by this mc particle -// System.out.println("MC pt=" + pt); + System.out.println("MC pt=" + pt); int nhits = findable.LayersHit(mcp); boolean isFindable = findable.InnerTrackerIsFindable(mcp, nlayers - 2); @@ -256,17 +263,14 @@ //it's the A'...let's see if we found both tracks. List<MCParticle> daughters = mcp.getDaughters(); for (MCParticle d : daughters) { - if (trktomc.allTo(d).isEmpty()) { + if (trktomc.allTo(d).isEmpty()) bothreco = false; - } - if (!findable.InnerTrackerIsFindable(d, nlayers - 2)) { + if (!findable.InnerTrackerIsFindable(d, nlayers - 2)) bothfindable = false; - } } double vtxWgt = 0; - if (bothreco) { + if (bothreco) vtxWgt = 1.0; - } // VxEff.fill(mcp.getOriginX(), vtxWgt); // VyEff.fill(mcp.getOriginY(), vtxWgt); // VzEff.fill(mcp.getOriginZ(), vtxWgt); @@ -282,23 +286,22 @@ _nchMCP++; findableTracks++; double wgt = 0.; - if (ntrk > 0) { + if (ntrk > 0) wgt = 1.; - } foundTracks += wgt; peffFindable.fill(p, wgt); phieffFindable.fill(phi, wgt); ctheffFindable.fill(cth, wgt); if (wgt == 0) { + Set<SimTrackerHit> mchitlist = mcHittomcP.allTo(mcp); Set<HelicalTrackCross> hitlist = hittomc.allTo(mcp); Set<FittedRawTrackerHit> fitlist = fittomc.allTo(mcp); if (debugTrackEfficiency) { - System.out.println("TrackMCEfficiencyMonitoring:: Missed a findable track with MC p = " + p); - if (!hasHTHInEachLayer(hitlist, fitlist)) { - System.out.println("This track failed becasue it's missing a helical track hit"); - } + System.out.println(this.getClass().getSimpleName() + ": Missed a findable track with MC p = " + p); + if (!hasHTHInEachLayer(hitlist, fitlist)) + System.out.println("\t\tThis track failed becasue it's missing a helical track hit"); } } @@ -307,13 +310,26 @@ totelectrons++; // findableelectrons++; double wgt = 0.; - if (ntrk > 0) { + if (ntrk > 0) wgt = 1.; - } foundelectrons += wgt; peffElectrons.fill(p, wgt); phieffElectrons.fill(phi, wgt); ctheffElectrons.fill(cth, wgt); + if (ntrk == 1) { + Track trk = (Track) trklist.toArray()[0]; + TrackState ts = trk.getTrackStates().get(0); + double deld0 = d0 - ts.getD0(); + double delz0 = z0 - ts.getZ0(); + double delp = p - calcMagnitude(ts.getMomentum()); + double delphi0 = phi - ts.getPhi(); + double deltanlam = cth - ts.getTanLambda(); + aida.histogram1D(resDir + "Momentum Resolution").fill(delp); + aida.histogram1D(resDir + "z0 Resolution").fill(delz0); + aida.histogram1D(resDir + "d0 Resolution").fill(deld0); + aida.histogram1D(resDir + "phi0 Resolution").fill(delphi0); + aida.histogram1D(resDir + "tanLambda Resolution").fill(deltanlam); + } // } } @@ -338,13 +354,15 @@ } private boolean hasHTHInEachLayer(Set<HelicalTrackCross> list, Set<FittedRawTrackerHit> fitlist) { + if(list.size()==0) + return false; + if(!(list.toArray()[0] instanceof HelicalTrackCross)) + return false; for (int layer = 1; layer < nlayers - 2; layer += 2) { - boolean hasThisLayer = false; - for (HelicalTrackCross hit : list) { - if (hit.Layer() == layer) { + boolean hasThisLayer = false; + for (HelicalTrackCross hit : list) + if (hit.Layer() == layer) hasThisLayer = true; - } - } if (!hasThisLayer) { System.out.println("Missing reconstructed hit in layer = " + layer); boolean hasFitHitSL1 = false; @@ -366,12 +384,10 @@ } } - if (!hasFitHitSL1) { + if (!hasFitHitSL1) System.out.println("MISSING a hit in SL1!!!"); - } - if (!hasFitHitSL2) { + if (!hasFitHitSL2) System.out.println("MISSING a hit in SL2!!!"); - } return false; } @@ -379,4 +395,8 @@ return true; } + private double calcMagnitude(double[] vec) { + return Math.sqrt(vec[0] * vec[0] + vec[1] * vec[1] + vec[2] * vec[2]); + } + } Modified: java/trunk/analysis/src/main/java/org/hps/analysis/examples/TrackAnalysis.java ============================================================================= --- java/trunk/analysis/src/main/java/org/hps/analysis/examples/TrackAnalysis.java (original) +++ java/trunk/analysis/src/main/java/org/hps/analysis/examples/TrackAnalysis.java Mon Nov 10 18:24:53 2014 @@ -6,9 +6,6 @@ import java.util.List; import java.util.Map; import java.util.Set; -import java.util.TreeMap; - -import hep.physics.matrix.BasicMatrix; import hep.physics.matrix.SymmetricMatrix; import hep.physics.vec.BasicHep3Matrix; import hep.physics.vec.BasicHep3Vector; @@ -16,11 +13,11 @@ import hep.physics.vec.VecOp; import org.apache.commons.math3.linear.Array2DRowRealMatrix; -import org.apache.commons.math3.linear.ArrayRealVector; import org.apache.commons.math3.linear.EigenDecomposition; import org.apache.commons.math3.linear.RealMatrix; import org.lcsim.detector.tracker.silicon.HpsSiSensor; +import org.hps.recon.tracking.axial.HelicalTrack2DHit; import org.lcsim.detector.identifier.IIdentifier; import org.lcsim.detector.identifier.Identifier; import org.lcsim.event.MCParticle; @@ -29,15 +26,11 @@ import org.lcsim.event.SimTrackerHit; import org.lcsim.event.Track; import org.lcsim.event.TrackerHit; -import org.lcsim.fit.helicaltrack.HelicalTrack2DHit; -import org.lcsim.fit.helicaltrack.HelicalTrack3DHit; import org.lcsim.fit.helicaltrack.HelicalTrackCross; -import org.lcsim.fit.helicaltrack.HelicalTrackHit; import org.lcsim.fit.helicaltrack.HelicalTrackStrip; //===> import org.hps.conditions.deprecated.SvtUtils; import static org.hps.recon.tracking.CoordinateTransformations.transformVectorToTracking; -import org.hps.recon.tracking.TrackerHitUtils; /** * @@ -97,7 +90,6 @@ _hasLayerOne = false; // Loop over the hits on the track and make sure we have HelicalTrackHits (which contain the MC particle) for (TrackerHit hit : trk.getTrackerHits()) { - // get the set of MCParticles associated with this hit and update the hit count for each MCParticle Set<MCParticle> mclist = hittomc.allFrom(hit); for (MCParticle mcp : mclist) { @@ -107,7 +99,6 @@ mchits++; mcmap.put(mcp, mchits); } - if (hit instanceof HelicalTrackCross) countHit((HelicalTrackCross) hit); else if (hit instanceof HelicalTrack2DHit)