diff --git a/recon/src/main/java/org/hps/recon/utils/TrackTruthMatcher.java b/recon/src/main/java/org/hps/recon/utils/TrackTruthMatcher.java index 41a268a7c..7c7ac9279 100644 --- a/recon/src/main/java/org/hps/recon/utils/TrackTruthMatcher.java +++ b/recon/src/main/java/org/hps/recon/utils/TrackTruthMatcher.java @@ -13,7 +13,6 @@ import org.lcsim.event.SimTrackerHit; import org.lcsim.event.Track; import org.lcsim.event.TrackerHit; - import hep.physics.vec.BasicHep3Vector; public class TrackTruthMatcher { @@ -29,7 +28,8 @@ public class TrackTruthMatcher { private Map> _mcpsOnLayerMap = new HashMap>(); private Set _layersOnTrack = new HashSet(); private Map> _stripHitsToMCPsMap = new HashMap>(); - + private int _totalLayers=14; + public TrackTruthMatcher(Track track, RelationalTable rawtomc){ doAnalysis(track, rawtomc); } @@ -118,7 +118,26 @@ public Set getLayersOnTrack(){ public List getMCPsOnRawTrackerHit(RawTrackerHit rawhit){ return this._stripHitsToMCPsMap.get(rawhit); } - + + // getGoodHitLayers and getCorrectlyMissingLayers + // give layers where tracking is doing the "right thing" + // ...following the MC particle track + public Set getGoodHitLayers(){ + return getLayerHitsForAllMCPs().get(this._mcp); + } + + public Set getCorrectlyMissingLayers(List simHits){ + Set correctMissingLayers = new HashSet(); + Set trackLayers = getLayersOnTrack(); + Set mcpLayers= getLayersHitByMCP(this._mcp, simHits); + for(Integer i=1; i<=_totalLayers; i++){ + if(!trackLayers.contains(i) && !mcpLayers.contains(i)) + correctMissingLayers.add(i); + } + return correctMissingLayers; + } + + //getBadLayerHits, combination of "wrongHit" and "noMCP" ... see below public Set getBadHitLayers(){ Set badLayers = new HashSet(); Set trackLayers = getLayersOnTrack(); @@ -130,11 +149,57 @@ public Set getBadHitLayers(){ } return badLayers; } + + //two ways to get a "bad" hit on track: + //getWrongHitLayers: MC particle left hit on the layer but we picked a different one + //getNonMCPHitLayers: no MC particle hit on layer but we found a hit anyway + public Set getWrongHitLayers(List simHits){ + Set wrongLayers = new HashSet(); + Set trackLayers = getLayersOnTrack(); + Set goodLayers = getGoodHitLayers(); //this checks if the hit on track is from main mcp + Set mcpLayers= getLayersHitByMCP(this._mcp, simHits); + for(Integer i=1; i<=_totalLayers; i++){ + if(trackLayers.contains(i) && !goodLayers.contains(i) && mcpLayers.contains(i)) + wrongLayers.add(i); + } + return wrongLayers; + } - public Set getGoodHitLayers(){ - return getLayerHitsForAllMCPs().get(this._mcp); + public Set getNonMCPHitLayers(List simHits){ + Set extraLayers = new HashSet(); + Set trackLayers = getLayersOnTrack(); + Set goodLayers = getGoodHitLayers(); //this checks if the hit on track is from main mcp + Set mcpLayers= getLayersHitByMCP(this._mcp, simHits); + //regarding (!goodLayers.contains(i) && !mcpLayers.contains(i))): + //if the mcp hit isn't in a layer, it also can't be in goodLayers + //but keep it this way just to make obvious + for(Integer i=1; i<=_totalLayers; i++){ + if(trackLayers.contains(i) && !goodLayers.contains(i) && !mcpLayers.contains(i)) + extraLayers.add(i); + } + return extraLayers; + } + + //getMissedHitLayers account for layers we have an MC particle hit, but no hit on track + //this doesn't show up in either "goodLayers" or "badLayers" because that loops over hits-on-track + public Set getMissedHitLayers(List simHits){ + Set missedLayers = new HashSet(); + Set trackLayers = getLayersOnTrack(); + Set goodLayers = getGoodHitLayers(); //this checks if the hit on track is from main mcp + Set mcpLayers= getLayersHitByMCP(this._mcp, simHits); + for(Integer i=1; i<=_totalLayers; i++){ + if(!trackLayers.contains(i) && mcpLayers.contains(i)) + missedLayers.add(i); + } + return missedLayers; } + + public Set getMCPHitLayers(List simHits){ + return getLayersHitByMCP(this._mcp, simHits); + } + + public void getMCPsOnTrack(Track track, RelationalTable rawtomc){ double trackPmag = new BasicHep3Vector(track.getTrackStates().get(0).getMomentum()).magnitude(); @@ -260,6 +325,20 @@ public List getMCParticlesOnRawTrackerHit(RawTrackerHit rawhit, Rela return mcpList; } + + public Set getLayersHitByMCP(MCParticle mcp, List simhits){ + Set layerhitsMap = new HashSet(); + for(SimTrackerHit simhit : simhits){ + MCParticle simhitmcp = simhit.getMCParticle(); + if(simhitmcp == mcp){ + int layer = simhit.getLayer(); + if(!layerhitsMap.contains(layer)) + layerhitsMap.add(layer); + } + } + return layerhitsMap; + } + } diff --git a/recon/src/main/java/org/hps/recon/utils/TrackTruthRelationsDriver.java b/recon/src/main/java/org/hps/recon/utils/TrackTruthRelationsDriver.java index b39e129f1..d95f4a8c5 100644 --- a/recon/src/main/java/org/hps/recon/utils/TrackTruthRelationsDriver.java +++ b/recon/src/main/java/org/hps/recon/utils/TrackTruthRelationsDriver.java @@ -1,5 +1,5 @@ package org.hps.recon.utils; - +import org.lcsim.util.aida.AIDA; import hep.aida.IAnalysisFactory; import hep.aida.IHistogram1D; import hep.aida.IHistogram2D; @@ -20,6 +20,7 @@ import java.util.Set; import org.hps.recon.tracking.TrackTruthInfo; +import org.hps.recon.tracking.TrackData; import org.lcsim.event.LCRelation; import org.lcsim.event.RelationalTable; @@ -49,7 +50,7 @@ * It also saves a TruthTrack */ public class TrackTruthRelationsDriver extends Driver { - + private AIDA aidaTruth; // era public //Write output to LCIO protected boolean writeToLCIO = false; @@ -69,7 +70,10 @@ public class TrackTruthRelationsDriver extends Driver { //(bestMCP_Nhits/Total_Nhits) must be > purity cut //Where "hit" is counted only once per layer - private double purityCut = 0.8; + private double purityCut = 0.5; + ArrayList chargeNames=new ArrayList(); + ArrayList trackTypes=new ArrayList(); + ArrayList matchTypes=new ArrayList(); //Define Plot tools private ITree tree; @@ -101,8 +105,6 @@ public void setNGoodHitsRequired(int input){ public void setEnablePlots(boolean input){ this.enablePlots = input; - if(enablePlots) - this.bookHistograms(); } public void setTrackCollectionName(String input) { @@ -110,6 +112,7 @@ public void setTrackCollectionName(String input) { } public void saveHistograms() { + /* String rootFile = String.format("TrackToMCParticleRelations.root",this.trackCollectionName); RootFileStore store = new RootFileStore(rootFile); try { @@ -119,870 +122,318 @@ public void saveHistograms() { } catch (IOException e) { e.printStackTrace(); } + */ } //Book Histograms public void bookHistograms(){ plots1D = new HashMap(); plots2D = new HashMap(); - tree = IAnalysisFactory.create().createTreeFactory().create(); - histogramFactory = IAnalysisFactory.create().createHistogramFactory(tree); - -//Plots for all Truth Matched Tracks, regradless of purity - - //Reco Tracks - //ele - plots1D.put(String.format("ele_reco_track_momentum"), - histogramFactory.createHistogram1D(String.format("ele_reco_track_momentum"), 800, 0, 8)); - - plots1D.put(String.format("ele_reco_track_tanlambda"), - histogramFactory.createHistogram1D(String.format("ele_reco_track_tanlambda"), 1000, -1, 1)); - - plots1D.put(String.format("ele_reco_track_d0"), - histogramFactory.createHistogram1D(String.format("ele_reco_track_d0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_reco_track_z0"), - histogramFactory.createHistogram1D(String.format("ele_reco_track_z0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_reco_track_phi0"), - histogramFactory.createHistogram1D(String.format("ele_reco_track_phi0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_reco_track_C"), - histogramFactory.createHistogram1D(String.format("ele_reco_track_C"), 2000, -0.1, 0.1)); - - plots2D.put(String.format("ele_reco_track_momentum_v_nhits"), - histogramFactory.createHistogram2D(String.format("ele_reco_track_momentum_v_nhits"), 800, 0, 8, 15, 0, 15)); - //pos - plots1D.put(String.format("pos_reco_track_momentum"), - histogramFactory.createHistogram1D(String.format("pos_reco_track_momentum"), 800, 0, 8)); - - plots1D.put(String.format("pos_reco_track_tanlambda"), - histogramFactory.createHistogram1D(String.format("pos_reco_track_tanlambda"), 1000, -1, 1)); - - plots1D.put(String.format("pos_reco_track_d0"), - histogramFactory.createHistogram1D(String.format("pos_reco_track_d0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_reco_track_z0"), - histogramFactory.createHistogram1D(String.format("pos_reco_track_z0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_reco_track_phi0"), - histogramFactory.createHistogram1D(String.format("pos_reco_track_phi0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_reco_track_C"), - histogramFactory.createHistogram1D(String.format("pos_reco_track_C"), 2000, -0.10, 0.10)); - - plots2D.put(String.format("pos_reco_track_momentum_v_nhits"), - histogramFactory.createHistogram2D(String.format("pos_reco_track_momentum_v_nhits"), 800, 0, 8, 15, 0, 15)); - - //Truth Tracks - - //ele - plots2D.put(String.format("ele_truth_track_v_matched_mcp_momentum"), - histogramFactory.createHistogram2D(String.format("ele_truth_track_v_matched_mcp_momentum"), 1600, -8, 8, 1600, -8, 8)); - - plots1D.put(String.format("ele_truth_track_momentum"), - histogramFactory.createHistogram1D(String.format("ele_truth_track_momentum"), 800, 0, 8)); - - plots1D.put(String.format("ele_truth_track_tanlambda"), - histogramFactory.createHistogram1D(String.format("ele_truth_track_tanlambda"), 1000, -1, 1)); - - plots1D.put(String.format("ele_truth_track_phi0"), - histogramFactory.createHistogram1D(String.format("ele_truth_track_phi0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_truth_track_d0"), - histogramFactory.createHistogram1D(String.format("ele_truth_track_d0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_truth_track_z0"), - histogramFactory.createHistogram1D(String.format("ele_truth_track_z0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_truth_track_C"), - histogramFactory.createHistogram1D(String.format("ele_truth_track_C"), 2000, -0.10, 0.10)); - - plots1D.put(String.format("ele_truth_track_mcp_momentum"), - histogramFactory.createHistogram1D(String.format("ele_truth_track_mcp_momentum"), 800, 0, 8)); - - plots2D.put(String.format("ele_truth_tracks_trackP_v_nHits_on_track"), - histogramFactory.createHistogram2D(String.format("ele_truth_tracks_trackP_v_nHits_on_track"), 800, 0, 800, 15, 0, 15)); - - plots2D.put(String.format("ele_truth_track_momentum_v_probability"), - histogramFactory.createHistogram2D(String.format("ele_truth_track_momentum_v_probability"), 800, 0, 8, 40, 0, 2)); - - plots2D.put(String.format("ele_truth_track_tanlambda_v_probability"), - histogramFactory.createHistogram2D(String.format("ele_truth_track_tanlambda_v_probability"), 1000, -1, 1, 40, 0, 2)); - - plots2D.put(String.format("ele_truth_track_phi0_v_probability"), - histogramFactory.createHistogram2D(String.format("ele_truth_track_phi0_v_probability"), 2000, -10, 10, 40, 0, 2)); - - plots2D.put(String.format("ele_truth_track_z0_v_probability"), - histogramFactory.createHistogram2D(String.format("ele_truth_track_z0_v_probability"), 2000, -10, 10, 40, 0, 2)); - - plots2D.put(String.format("ele_truth_track_d0_v_probability"), - histogramFactory.createHistogram2D(String.format("ele_truth_track_d0_v_probability"), 2000, -10, 10, 40, 0, 2)); - - plots2D.put(String.format("ele_truth_track_C_v_probability"), - histogramFactory.createHistogram2D(String.format("ele_truth_track_C_v_probability"), 2000, -0.10, 0.10, 40, 0, 2)); - - plots1D.put(String.format("ele_multi_mcp_truth_prob"), - histogramFactory.createHistogram1D(String.format("ele_multi_mcp_truth_prob"), 40, 0, 2)); - - plots1D.put(String.format("ele_mcp_truth_prob"), - histogramFactory.createHistogram1D(String.format("ele_mcp_truth_prob"), 40, 0, 2)); - - plots1D.put(String.format("ele_n_mcps_on_track"), histogramFactory.createHistogram1D(String.format("ele_n_mcps_on_track"), 30, 0, 30)); - - plots1D.put(String.format("ele_n_hits"), histogramFactory.createHistogram1D(String.format("ele_n_hits"), 15, 0, 15)); - - plots1D.put(String.format("ele_n_goodhits"), histogramFactory.createHistogram1D(String.format("ele_n_goodhits"), 15, 0, 15)); - - plots1D.put(String.format("ele_n_badhits"), histogramFactory.createHistogram1D(String.format("ele_n_badhits"), 15, 0, 15)); - - plots1D.put(String.format("ele_purity"), histogramFactory.createHistogram1D(String.format("ele_purity"), 40, 0, 2)); - - plots2D.put(String.format("ele_purity_v_nMCPs_on_track"), histogramFactory.createHistogram2D(String.format("ele_purity_v_nMCPs_on_track"), 40, 0, 2, 20, 0, 20)); - - plots1D.put(String.format("ele_layers_hit"), histogramFactory.createHistogram1D(String.format("ele_layers_hit"), 15, 0, 15)); - - plots1D.put(String.format("ele_n_mcps_on_layer"), histogramFactory.createHistogram1D(String.format("ele_n_mcps_on_layer"), 20, 0, 20)); - - plots1D.put(String.format("ele_n_striphits_on_layer"), - histogramFactory.createHistogram1D(String.format("ele_n_striphits_on_layer"), 20, 0, 20)); - - plots1D.put(String.format("ele_n_mcps_on_striphit"), - histogramFactory.createHistogram1D(String.format("ele_n_mcps_on_striphit"), 10, 0, 10)); - - plots2D.put(String.format("ele_n_mcps_per_layer"), - histogramFactory.createHistogram2D(String.format("ele_n_mcps_per_layer"), 20, 0, 20, 15, 0, 15)); - - plots2D.put(String.format("ele_n_striphits_per_layer"), - histogramFactory.createHistogram2D(String.format("ele_n_striphits_per_layer"), 20, 0, 20, 15, 0, 15)); - - plots2D.put(String.format("ele_n_mcps_on_layer_striphits"), - histogramFactory.createHistogram2D(String.format("ele_n_mcps_on_layer_striphits"), 20, 0, 20, 15, 0, 15)); - - plots1D.put(String.format("ele_truth_track_good_hit_layers"), - histogramFactory.createHistogram1D(String.format("ele_truth_track_good_hit_layers"), 15, 0, 15)); - - plots1D.put(String.format("ele_truth_track_bad_hit_layers"), - histogramFactory.createHistogram1D(String.format("ele_truth_track_good_bad_layers"), 15, 0, 15)); - - - //pos - plots1D.put(String.format("pos_truth_track_momentum"), - histogramFactory.createHistogram1D(String.format("pos_truth_track_momentum"), 800, 0, 8)); - - plots1D.put(String.format("pos_truth_track_tanlambda"), - histogramFactory.createHistogram1D(String.format("pos_truth_track_tanlambda"), 1000, -1, 1)); - - plots1D.put(String.format("pos_truth_track_phi0"), - histogramFactory.createHistogram1D(String.format("pos_truth_track_phi0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_truth_track_d0"), - histogramFactory.createHistogram1D(String.format("pos_truth_track_d0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_truth_track_z0"), - histogramFactory.createHistogram1D(String.format("pos_truth_track_z0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_truth_track_C"), - histogramFactory.createHistogram1D(String.format("pos_truth_track_C"), 2000, -0.10, 0.10)); - - plots2D.put(String.format("pos_truth_track_momentum_v_probability"), - histogramFactory.createHistogram2D(String.format("pos_truth_track_momentum_v_probability"), 800, 0, 8, 40, 0, 2)); - - plots2D.put(String.format("pos_truth_track_tanlambda_v_probability"), - histogramFactory.createHistogram2D(String.format("pos_truth_track_tanlambda_v_probability"), 1000, -1, 1, 40, 0, 2)); - - plots2D.put(String.format("pos_truth_track_phi0_v_probability"), - histogramFactory.createHistogram2D(String.format("pos_truth_track_phi0_v_probability"), 2000, -10, 10, 40, 0, 2)); - - plots2D.put(String.format("pos_truth_track_z0_v_probability"), - histogramFactory.createHistogram2D(String.format("pos_truth_track_z0_v_probability"), 2000, -10, 10, 40, 0, 2)); - - plots2D.put(String.format("pos_truth_track_d0_v_probability"), - histogramFactory.createHistogram2D(String.format("pos_truth_track_d0_v_probability"), 2000, -10, 10, 40, 0, 2)); - - plots2D.put(String.format("pos_truth_track_C_v_probability"), - histogramFactory.createHistogram2D(String.format("pos_truth_track_C_v_probability"), 2000, -0.10, 0.10, 40, 0, 2)); - - plots1D.put(String.format("pos_multi_mcp_truth_prob"), - histogramFactory.createHistogram1D(String.format("pos_multi_mcp_truth_prob"), 40, 0, 2)); - - plots1D.put(String.format("pos_mcp_truth_prob"), - histogramFactory.createHistogram1D(String.format("pos_mcp_truth_prob"), 40, 0, 2)); - - plots1D.put(String.format("pos_n_mcps_on_track"), histogramFactory.createHistogram1D(String.format("pos_n_mcps_on_track"), 30, 0, 30)); - - plots1D.put(String.format("pos_n_hits"), histogramFactory.createHistogram1D(String.format("pos_n_hits"), 15, 0, 15)); - - plots1D.put(String.format("pos_n_goodhits"), histogramFactory.createHistogram1D(String.format("pos_n_goodhits"), 15, 0, 15)); - - plots1D.put(String.format("pos_n_badhits"), histogramFactory.createHistogram1D(String.format("pos_n_badhits"), 15, 0, 15)); - - plots1D.put(String.format("pos_purity"), histogramFactory.createHistogram1D(String.format("pos_purity"), 40, 0, 2)); - - plots2D.put(String.format("pos_purity_v_nMCPs_on_track"), histogramFactory.createHistogram2D(String.format("pos_purity_v_nMCPs_on_track"), 40, 0, 2, 20, 0, 20)); - - plots1D.put(String.format("pos_layers_hit"), histogramFactory.createHistogram1D(String.format("pos_layers_hit"), 15, 0, 15)); - - plots1D.put(String.format("pos_n_mcps_on_layer"), histogramFactory.createHistogram1D(String.format("pos_n_mcps_on_layer"), 20, 0, 20)); - - plots1D.put(String.format("pos_n_striphits_on_layer"), - histogramFactory.createHistogram1D(String.format("pos_n_striphits_on_layer"), 20, 0, 20)); - - plots1D.put(String.format("pos_n_mcps_on_striphit"), - histogramFactory.createHistogram1D(String.format("pos_n_mcps_on_striphit"), 10, 0, 10)); - - plots2D.put(String.format("pos_n_mcps_per_layer"), - histogramFactory.createHistogram2D(String.format("pos_n_mcps_per_layer"), 20, 0, 20, 15, 0, 15)); - - plots2D.put(String.format("pos_n_striphits_per_layer"), - histogramFactory.createHistogram2D(String.format("pos_n_striphits_per_layer"), 20, 0, 20, 15, 0, 15)); - - plots2D.put(String.format("pos_n_mcps_on_layer_striphits"), - histogramFactory.createHistogram2D(String.format("pos_n_mcps_on_layer_striphits"), 20, 0, 20, 15, 0, 15)); - - plots2D.put(String.format("pos_truth_track_v_matched_mcp_momentum"), - histogramFactory.createHistogram2D(String.format("pos_truth_track_v_matched_mcp_momentum"), 1600, -8, 8, 1600, -8, 8)); - - - plots1D.put(String.format("pos_truth_track_mcp_momentum"), - histogramFactory.createHistogram1D(String.format("pos_truth_track_mcp_momentum"), 800, 0, 8)); - - - plots2D.put(String.format("pos_truth_tracks_trackP_v_nHits_on_track"), - histogramFactory.createHistogram2D(String.format("pos_truth_tracks_trackP_v_nHits_on_track"), 800, 0, 800, 15, 0, 15)); - - plots1D.put(String.format("pos_truth_track_good_hit_layers"), - histogramFactory.createHistogram1D(String.format("pos_truth_track_good_hit_layers"), 15, 0, 15)); - - plots1D.put(String.format("pos_truth_track_bad_hit_layers"), - histogramFactory.createHistogram1D(String.format("pos_truth_track_bad_hit_layers"), 15, 0, 15)); - -//Purity = 1 Plots - - //ele - plots1D.put(String.format("ele_truth_track_purity_eq_1_momentum"), - histogramFactory.createHistogram1D(String.format("ele_truth_track_purity_eq_1_momentum"), 800, 0, 8)); - - plots1D.put(String.format("ele_truth_track_purity_eq_1_tanlambda"), - histogramFactory.createHistogram1D(String.format("ele_truth_track_purity_eq_1_tanlambda"), 1000, -1, 1)); - - plots1D.put(String.format("ele_truth_track_purity_eq_1_phi0"), - histogramFactory.createHistogram1D(String.format("ele_truth_track_purity_eq_1_phi0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_truth_track_purity_eq_1_d0"), - histogramFactory.createHistogram1D(String.format("ele_truth_track_purity_eq_1_d0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_truth_track_purity_eq_1_z0"), - histogramFactory.createHistogram1D(String.format("ele_truth_track_purity_eq_1_z0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_truth_track_purity_eq_1_C"), - histogramFactory.createHistogram1D(String.format("ele_truth_track_purity_eq_1_C"), 2000, -10, 10)); - - plots2D.put(String.format("ele_truth_track_purity_eq_1_v_matched_mcp_momentum"), - histogramFactory.createHistogram2D(String.format("ele_truth_track_purity_eq_1_v_matched_mcp_momentum"), 1600, -8, 8, 1600, -8, 8)); - - //pos - plots1D.put(String.format("pos_truth_track_purity_eq_1_momentum"), - histogramFactory.createHistogram1D(String.format("pos_truth_track_purity_eq_1_momentum"), 800, 0, 8)); - - plots1D.put(String.format("pos_truth_track_purity_eq_1_tanlambda"), - histogramFactory.createHistogram1D(String.format("pos_truth_track_purity_eq_1_tanlambda"), 1000, -1, 1)); - - plots1D.put(String.format("pos_truth_track_purity_eq_1_phi0"), - histogramFactory.createHistogram1D(String.format("pos_truth_track_purity_eq_1_phi0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_truth_track_purity_eq_1_d0"), - histogramFactory.createHistogram1D(String.format("pos_truth_track_purity_eq_1_d0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_truth_track_purity_eq_1_z0"), - histogramFactory.createHistogram1D(String.format("pos_truth_track_purity_eq_1_z0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_truth_track_purity_eq_1_C"), - histogramFactory.createHistogram1D(String.format("pos_truth_track_purity_eq_1_C"), 2000, -10, 10)); - - plots2D.put(String.format("pos_truth_track_purity_eq_1_v_matched_mcp_momentum"), - histogramFactory.createHistogram2D(String.format("pos_truth_track_purity_eq_1_v_matched_mcp_momentum"), 1600, -8, 8, 1600, -8, 8)); - -//Plots for "Real" Tracks that pass purity cut - - plots1D.put(String.format("ele_real_track_n_mcps_on_track"), - histogramFactory.createHistogram1D(String.format("ele_real_track_n_mcps_on_track"), 30, 0, 30)); - - plots1D.put(String.format("ele_real_track_n_hits"), - histogramFactory.createHistogram1D(String.format("ele_real_track_n_hits"), 15, 0, 15)); - - plots1D.put(String.format("ele_real_track_n_goodhits"), - histogramFactory.createHistogram1D(String.format("ele_real_track_n_goodhits"), 15, 0, 15)); - - plots1D.put(String.format("ele_real_track_n_badhits"), - histogramFactory.createHistogram1D(String.format("ele_real_track_n_badhits"), 15, 0, 15)); - - plots1D.put(String.format("ele_real_track_purity"), - histogramFactory.createHistogram1D(String.format("ele_real_track_purity"), 40, 0, 2)); - - plots1D.put(String.format("ele_real_track_layers_hit"), - histogramFactory.createHistogram1D(String.format("ele_real_track_layers_hit"), 15, 0, 15)); - - plots1D.put(String.format("ele_real_track_n_mcps_on_layer"), - histogramFactory.createHistogram1D(String.format("ele_real_track_n_mcps_on_layer"), 20, 0, 20)); - - plots1D.put(String.format("ele_real_track_n_striphits_on_layer"), - histogramFactory.createHistogram1D(String.format("ele_real_track_n_striphits_on_layer"), 20, 0, 20)); - - plots1D.put(String.format("ele_real_track_n_mcps_on_striphit"), - histogramFactory.createHistogram1D(String.format("ele_real_track_n_mcps_on_striphit"), 10, 0, 10)); - - plots2D.put(String.format("ele_real_track_n_mcps_per_layer"), - histogramFactory.createHistogram2D(String.format("ele_real_track_n_mcps_per_layer"), 20, 0, 20, 15, 0, 15)); - - plots2D.put(String.format("ele_real_track_n_striphits_per_layer"), - histogramFactory.createHistogram2D(String.format("ele_real_track_n_striphits_per_layer"), 20, 0, 20, 15, 0, 15)); - - plots2D.put(String.format("ele_real_track_n_mcps_on_layer_striphits"), - histogramFactory.createHistogram2D(String.format("ele_real_track_n_mcps_on_layer_striphits"), 20, 0, 20, 15, 0, 15)); - - plots1D.put(String.format("ele_real_track_good_hit_layers"), - histogramFactory.createHistogram1D(String.format("ele_real_track_good_hit_layers"), 15, 0, 15)); - - plots1D.put(String.format("ele_real_track_bad_hit_layers"), - histogramFactory.createHistogram1D(String.format("ele_real_track_bad_hit_layers"), 15, 0, 15)); - - plots2D.put(String.format("ele_real_track_v_matched_mcp_momentum"), - histogramFactory.createHistogram2D(String.format("ele_real_track_v_matched_mcp_momentum"), 1600, -8, 8, 1600, -8, 8)); - - plots1D.put(String.format("ele_real_track_momentum"), - histogramFactory.createHistogram1D(String.format("ele_real_track_momentum"), 800, 0, 8)); - - plots1D.put(String.format("ele_real_track_tanlambda"), - histogramFactory.createHistogram1D(String.format("ele_real_track_tanlambda"), 1000, -1, 1)); - - plots1D.put(String.format("ele_real_track_phi0"), - histogramFactory.createHistogram1D(String.format("ele_real_track_phi0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_real_track_d0"), - histogramFactory.createHistogram1D(String.format("ele_real_track_d0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_real_track_z0"), - histogramFactory.createHistogram1D(String.format("ele_real_track_z0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_real_track_C"), - histogramFactory.createHistogram1D(String.format("ele_real_track_C"), 2000, -0.10, 0.10)); - - plots1D.put(String.format("ele_real_track_mcp_momentum"), - histogramFactory.createHistogram1D(String.format("ele_real_track_mcp_momentum"), 800, 0, 8)); - - plots1D.put(String.format("ele_real_track_mcp_tanlambda"), - histogramFactory.createHistogram1D(String.format("ele_real_track_mcp_tanlambda"), 1000, -1, 1)); - - plots1D.put(String.format("ele_real_track_mcp_phi0"), - histogramFactory.createHistogram1D(String.format("ele_real_track_mcp_phi0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_real_track_mcp_d0"), - histogramFactory.createHistogram1D(String.format("ele_real_track_mcp_d0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_real_track_mcp_z0"), - histogramFactory.createHistogram1D(String.format("ele_real_track_mcp_z0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_real_track_mcp_C"), - histogramFactory.createHistogram1D(String.format("ele_real_track_mcp_C"), 2000, -0.10, 0.10)); - - plots1D.put(String.format("ele_real_track_nhits_gteq_12_mcp_momentum"), - histogramFactory.createHistogram1D(String.format("ele_real_track_nhits_gteq_12_mcp_momentum"), 800, 0, 8)); - - plots1D.put(String.format("ele_real_duplicate_tracks_mcp_momentum"), - histogramFactory.createHistogram1D(String.format("ele_real_duplicate_tracks_mcp_momentum"), 800, 0, 8)); - - plots1D.put(String.format("ele_real_duplicate_tracks_mcp_tanlambda"), - histogramFactory.createHistogram1D(String.format("ele_real_duplicate_tracks_mcp_tanlambda"), 1000, -1, 1)); - - plots1D.put(String.format("ele_real_duplicate_tracks_mcp_phi0"), - histogramFactory.createHistogram1D(String.format("ele_real_duplicate_tracks_mcp_phi0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_real_duplicate_tracks_mcp_d0"), - histogramFactory.createHistogram1D(String.format("ele_real_duplicate_tracks_mcp_d0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_real_duplicate_tracks_mcp_z0"), - histogramFactory.createHistogram1D(String.format("ele_real_duplicate_tracks_mcp_z0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_real_duplicate_tracks_mcp_C"), - histogramFactory.createHistogram1D(String.format("ele_real_duplicate_tracks_mcp_C"), 2000, -0.10, 0.10)); - - - //reco track - plots1D.put(String.format("ele_real_track_momentum"), - histogramFactory.createHistogram1D(String.format("ele_real_track_momentum"), 800, 0, 8)); - - plots1D.put(String.format("ele_real_track_tanlambda"), - histogramFactory.createHistogram1D(String.format("ele_real_track_tanlambda"), 1000, -1, 1)); - - plots1D.put(String.format("ele_real_track_phi0"), - histogramFactory.createHistogram1D(String.format("ele_real_track_phi0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_real_track_d0"), - histogramFactory.createHistogram1D(String.format("ele_real_track_d0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_real_track_z0"), - histogramFactory.createHistogram1D(String.format("ele_real_track_z0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_real_track_C"), - histogramFactory.createHistogram1D(String.format("ele_real_track_C"), 2000, -0.10, 0.10)); - - plots1D.put(String.format("ele_real_duplicate_tracks_momentum"), - histogramFactory.createHistogram1D(String.format("ele_real_duplicate_tracks_momentum"), 800, 0, 8)); - - plots1D.put(String.format("ele_real_duplicate_tracks_tanlambda"), - histogramFactory.createHistogram1D(String.format("ele_real_duplicate_tracks_tanlambda"), 1000, -1, 1)); - - plots1D.put(String.format("ele_real_duplicate_tracks_phi0"), - histogramFactory.createHistogram1D(String.format("ele_real_duplicate_tracks_phi0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_real_duplicate_tracks_d0"), - histogramFactory.createHistogram1D(String.format("ele_real_duplicate_tracks_d0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_real_duplicate_tracks_z0"), - histogramFactory.createHistogram1D(String.format("ele_real_duplicate_tracks_z0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_real_duplicate_tracks_C"), - histogramFactory.createHistogram1D(String.format("ele_real_duplicate_tracks_C"), 2000, -10, 10)); - //pos - - plots1D.put(String.format("pos_real_track_n_mcps_on_track"), - histogramFactory.createHistogram1D(String.format("pos_real_track_n_mcps_on_track"), 30, 0, 30)); - - plots1D.put(String.format("pos_real_track_n_hits"), - histogramFactory.createHistogram1D(String.format("pos_real_track_n_hits"), 15, 0, 15)); - - plots1D.put(String.format("pos_real_track_n_goodhits"), - histogramFactory.createHistogram1D(String.format("pos_real_track_n_goodhits"), 15, 0, 15)); - - plots1D.put(String.format("pos_real_track_n_badhits"), - histogramFactory.createHistogram1D(String.format("pos_real_track_n_badhits"), 15, 0, 15)); - - plots1D.put(String.format("pos_real_track_purity"), - histogramFactory.createHistogram1D(String.format("pos_real_track_purity"), 40, 0, 2)); - - plots1D.put(String.format("pos_real_track_layers_hit"), - histogramFactory.createHistogram1D(String.format("pos_real_track_layers_hit"), 15, 0, 15)); - - plots1D.put(String.format("pos_real_track_n_mcps_on_layer"), - histogramFactory.createHistogram1D(String.format("pos_real_track_n_mcps_on_layer"), 20, 0, 20)); - - plots1D.put(String.format("pos_real_track_n_striphits_on_layer"), - histogramFactory.createHistogram1D(String.format("pos_real_track_n_striphits_on_layer"), 20, 0, 20)); - - plots1D.put(String.format("pos_real_track_n_mcps_on_striphit"), - histogramFactory.createHistogram1D(String.format("pos_real_track_n_mcps_on_striphit"), 10, 0, 10)); - - plots2D.put(String.format("pos_real_track_n_mcps_per_layer"), - histogramFactory.createHistogram2D(String.format("pos_real_track_n_mcps_per_layer"), 20, 0, 20, 15, 0, 15)); - - plots2D.put(String.format("pos_real_track_n_striphits_per_layer"), - histogramFactory.createHistogram2D(String.format("pos_real_track_n_striphits_per_layer"), 20, 0, 20, 15, 0, 15)); - - plots2D.put(String.format("pos_real_track_n_mcps_on_layer_striphits"), - histogramFactory.createHistogram2D(String.format("pos_real_track_n_mcps_on_layer_striphits"), 20, 0, 20, 15, 0, 15)); - - plots1D.put(String.format("pos_real_track_good_hit_layers"), - histogramFactory.createHistogram1D(String.format("pos_real_track_good_hit_layers"), 15, 0, 15)); - - plots1D.put(String.format("pos_real_track_bad_hit_layers"), - histogramFactory.createHistogram1D(String.format("pos_real_track_bad_hit_layers"), 15, 0, 15)); - - plots2D.put(String.format("pos_real_track_v_matched_mcp_momentum"), - histogramFactory.createHistogram2D(String.format("pos_real_track_v_matched_mcp_momentum"), 1600, -8, 8, 1600, -8, 8)); - - plots1D.put(String.format("pos_real_track_momentum"), - histogramFactory.createHistogram1D(String.format("pos_real_track_momentum"), 800, 0, 8)); - - plots1D.put(String.format("pos_real_track_tanlambda"), - histogramFactory.createHistogram1D(String.format("pos_real_track_tanlambda"), 1000, -1, 1)); - - plots1D.put(String.format("pos_real_track_phi0"), - histogramFactory.createHistogram1D(String.format("pos_real_track_phi0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_real_track_d0"), - histogramFactory.createHistogram1D(String.format("pos_real_track_d0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_real_track_z0"), - histogramFactory.createHistogram1D(String.format("pos_real_track_z0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_real_track_C"), - histogramFactory.createHistogram1D(String.format("pos_real_track_C"), 2000, -0.10, 0.10)); - - plots1D.put(String.format("pos_real_track_mcp_momentum"), - histogramFactory.createHistogram1D(String.format("pos_real_track_mcp_momentum"), 800, 0, 8)); - - plots1D.put(String.format("pos_real_track_mcp_tanlambda"), - histogramFactory.createHistogram1D(String.format("pos_real_track_mcp_tanlambda"), 1000, -1, 1)); - - plots1D.put(String.format("pos_real_track_mcp_phi0"), - histogramFactory.createHistogram1D(String.format("pos_real_track_mcp_phi0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_real_track_mcp_d0"), - histogramFactory.createHistogram1D(String.format("pos_real_track_mcp_d0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_real_track_mcp_z0"), - histogramFactory.createHistogram1D(String.format("pos_real_track_mcp_z0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_real_track_mcp_C"), - histogramFactory.createHistogram1D(String.format("pos_real_track_mcp_C"), 2000, -0.10, 0.10)); - - plots1D.put(String.format("pos_real_track_nhits_gteq_12_mcp_momentum"), - histogramFactory.createHistogram1D(String.format("pos_real_track_nhits_gteq_12_mcp_momentum"), 800, 0, 8)); - - plots1D.put(String.format("pos_real_duplicate_tracks_mcp_momentum"), - histogramFactory.createHistogram1D(String.format("pos_real_duplicate_tracks_mcp_momentum"), 800, 0, 8)); - - plots1D.put(String.format("pos_real_duplicate_tracks_mcp_tanlambda"), - histogramFactory.createHistogram1D(String.format("pos_real_duplicate_tracks_mcp_tanlambda"), 1000, -1, 1)); - - plots1D.put(String.format("pos_real_duplicate_tracks_mcp_phi0"), - histogramFactory.createHistogram1D(String.format("pos_real_duplicate_tracks_mcp_phi0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_real_duplicate_tracks_mcp_d0"), - histogramFactory.createHistogram1D(String.format("pos_real_duplicate_tracks_mcp_d0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_real_duplicate_tracks_mcp_z0"), - histogramFactory.createHistogram1D(String.format("pos_real_duplicate_tracks_mcp_z0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_real_duplicate_tracks_mcp_C"), - histogramFactory.createHistogram1D(String.format("pos_real_duplicate_tracks_mcp_C"), 2000, -0.10, 0.10)); - - //reco track - plots1D.put(String.format("pos_real_track_momentum"), - histogramFactory.createHistogram1D(String.format("pos_real_track_momentum"), 800, 0, 8)); - - plots1D.put(String.format("pos_real_track_tanlambda"), - histogramFactory.createHistogram1D(String.format("pos_real_track_tanlambda"), 1000, -1, 1)); - - plots1D.put(String.format("pos_real_track_phi0"), - histogramFactory.createHistogram1D(String.format("pos_real_track_phi0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_real_track_d0"), - histogramFactory.createHistogram1D(String.format("pos_real_track_d0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_real_track_z0"), - histogramFactory.createHistogram1D(String.format("pos_real_track_z0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_real_track_C"), - histogramFactory.createHistogram1D(String.format("pos_real_track_C"), 2000, -0.10, 0.10)); - - plots1D.put(String.format("pos_real_duplicate_tracks_momentum"), - histogramFactory.createHistogram1D(String.format("pos_real_duplicate_tracks_momentum"), 800, 0, 8)); - - plots1D.put(String.format("pos_real_duplicate_tracks_tanlambda"), - histogramFactory.createHistogram1D(String.format("pos_real_duplicate_tracks_tanlambda"), 1000, -1, 1)); - - plots1D.put(String.format("pos_real_duplicate_tracks_phi0"), - histogramFactory.createHistogram1D(String.format("pos_real_duplicate_tracks_phi0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_real_duplicate_tracks_d0"), - histogramFactory.createHistogram1D(String.format("pos_real_duplicate_tracks_d0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_real_duplicate_tracks_z0"), - histogramFactory.createHistogram1D(String.format("pos_real_duplicate_tracks_z0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_real_duplicate_tracks_C"), - histogramFactory.createHistogram1D(String.format("pos_real_duplicate_tracks_C"), 2000, -10, 10)); - -//Plots for "Fake" Tracks that fail purity cut - - //ele - plots1D.put(String.format("ele_fake_track_n_mcps_on_track"), - histogramFactory.createHistogram1D(String.format("ele_fake_track_n_mcps_on_track"), 30, 0, 30)); - - plots1D.put(String.format("ele_fake_track_n_hits"), - histogramFactory.createHistogram1D(String.format("ele_fake_track_n_hits"), 15, 0, 15)); - - plots1D.put(String.format("ele_fake_track_n_goodhits"), - histogramFactory.createHistogram1D(String.format("ele_fake_track_n_goodhits"), 15, 0, 15)); - - plots1D.put(String.format("ele_fake_track_n_badhits"), - histogramFactory.createHistogram1D(String.format("ele_fake_track_n_badhits"), 15, 0, 15)); - - plots1D.put(String.format("ele_fake_track_purity"), - histogramFactory.createHistogram1D(String.format("ele_fake_track_purity"), 40, 0, 2)); - - plots1D.put(String.format("ele_fake_track_layers_hit"), - histogramFactory.createHistogram1D(String.format("ele_fake_track_layers_hit"), 15, 0, 15)); - - plots1D.put(String.format("ele_fake_track_n_mcps_on_layer"), - histogramFactory.createHistogram1D(String.format("ele_fake_track_n_mcps_on_layer"), 20, 0, 20)); - - plots1D.put(String.format("ele_fake_track_n_striphits_on_layer"), - histogramFactory.createHistogram1D(String.format("ele_fake_track_n_striphits_on_layer"), 20, 0, 20)); - - plots1D.put(String.format("ele_fake_track_n_mcps_on_striphit"), - histogramFactory.createHistogram1D(String.format("ele_fake_track_n_mcps_on_striphit"), 10, 0, 10)); - - plots2D.put(String.format("ele_fake_track_n_mcps_per_layer"), - histogramFactory.createHistogram2D(String.format("ele_fake_track_n_mcps_per_layer"), 20, 0, 20, 15, 0, 15)); - - plots2D.put(String.format("ele_fake_track_n_striphits_per_layer"), - histogramFactory.createHistogram2D(String.format("ele_fake_track_n_striphits_per_layer"), 20, 0, 20, 15, 0, 15)); - - plots2D.put(String.format("ele_fake_track_n_mcps_on_layer_striphits"), - histogramFactory.createHistogram2D(String.format("ele_fake_track_n_mcps_on_layer_striphits"), 20, 0, 20, 15, 0, 15)); - - plots2D.put(String.format("ele_fake_track_v_matched_mcp_momentum"), - histogramFactory.createHistogram2D(String.format("ele_fake_track_v_matched_mcp_momentum"), 1600, -8, 8, 1600, -8, 8)); - - plots1D.put(String.format("ele_fake_track_momentum"), - histogramFactory.createHistogram1D(String.format("ele_fake_track_momentum"), 800, 0, 8)); - - plots1D.put(String.format("ele_fake_track_tanlambda"), - histogramFactory.createHistogram1D(String.format("ele_fake_track_tanlambda"), 1000, -1, 1)); - - plots1D.put(String.format("ele_fake_track_phi0"), - histogramFactory.createHistogram1D(String.format("ele_fake_track_phi0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_fake_track_d0"), - histogramFactory.createHistogram1D(String.format("ele_fake_track_d0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_fake_track_z0"), - histogramFactory.createHistogram1D(String.format("ele_fake_track_z0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_fake_track_C"), - histogramFactory.createHistogram1D(String.format("ele_fake_track_C"), 2000, -0.10, 0.10)); - - //plots1D.put(String.format("ele_fake_duplicate_tracks_mcp_momentum"), - // histogramFactory.createHistogram1D(String.format("ele_fake_duplicate_tracks_mcp_momentum"), 800, 0, 8)); - //pos - plots1D.put(String.format("pos_fake_track_n_mcps_on_track"), - histogramFactory.createHistogram1D(String.format("pos_fake_track_n_mcps_on_track"), 30, 0, 30)); - - plots1D.put(String.format("pos_fake_track_n_hits"), - histogramFactory.createHistogram1D(String.format("pos_fake_track_n_hits"), 15, 0, 15)); - - plots1D.put(String.format("pos_fake_track_n_goodhits"), - histogramFactory.createHistogram1D(String.format("pos_fake_track_n_goodhits"), 15, 0, 15)); - - plots1D.put(String.format("pos_fake_track_n_badhits"), - histogramFactory.createHistogram1D(String.format("pos_fake_track_n_badhits"), 15, 0, 15)); - - plots1D.put(String.format("pos_fake_track_purity"), - histogramFactory.createHistogram1D(String.format("pos_fake_track_purity"), 40, 0, 2)); - - plots1D.put(String.format("pos_fake_track_layers_hit"), - histogramFactory.createHistogram1D(String.format("pos_fake_track_layers_hit"), 15, 0, 15)); - - plots1D.put(String.format("pos_fake_track_n_mcps_on_layer"), - histogramFactory.createHistogram1D(String.format("pos_fake_track_n_mcps_on_layer"), 20, 0, 20)); - - plots1D.put(String.format("pos_fake_track_n_striphits_on_layer"), - histogramFactory.createHistogram1D(String.format("pos_fake_track_n_striphits_on_layer"), 20, 0, 20)); - - plots1D.put(String.format("pos_fake_track_n_mcps_on_striphit"), - histogramFactory.createHistogram1D(String.format("pos_fake_track_n_mcps_on_striphit"), 10, 0, 10)); - - plots2D.put(String.format("pos_fake_track_n_mcps_per_layer"), - histogramFactory.createHistogram2D(String.format("pos_fake_track_n_mcps_per_layer"), 20, 0, 20, 15, 0, 15)); - - plots2D.put(String.format("pos_fake_track_n_striphits_per_layer"), - histogramFactory.createHistogram2D(String.format("pos_fake_track_n_striphits_per_layer"), 20, 0, 20, 15, 0, 15)); - - plots2D.put(String.format("pos_fake_track_n_mcps_on_layer_striphits"), - histogramFactory.createHistogram2D(String.format("pos_fake_track_n_mcps_on_layer_striphits"), 20, 0, 20, 15, 0, 15)); - - plots2D.put(String.format("pos_fake_track_v_matched_mcp_momentum"), - histogramFactory.createHistogram2D(String.format("pos_fake_track_v_matched_mcp_momentum"), 1600, -8, 8, 1600, -8, 8)); - - plots1D.put(String.format("pos_fake_track_momentum"), - histogramFactory.createHistogram1D(String.format("pos_fake_track_momentum"), 800, 0, 8)); - - plots1D.put(String.format("pos_fake_track_tanlambda"), - histogramFactory.createHistogram1D(String.format("pos_fake_track_tanlambda"), 1000, -1, 1)); - - plots1D.put(String.format("pos_fake_track_phi0"), - histogramFactory.createHistogram1D(String.format("pos_fake_track_phi0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_fake_track_d0"), - histogramFactory.createHistogram1D(String.format("pos_fake_track_d0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_fake_track_z0"), - histogramFactory.createHistogram1D(String.format("pos_fake_track_z0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_fake_track_C"), - histogramFactory.createHistogram1D(String.format("pos_fake_track_C"), 2000, -0.10, 0.10)); - - //plots1D.put(String.format("pos_fake_duplicate_tracks_mcp_momentum"), - // histogramFactory.createHistogram1D(String.format("pos_fake_duplicate_tracks_mcp_momentum"), 800, 0, 8)); - -// - plots2D.put(String.format("old_truth_track_v_matched_mcp_momentum"), - histogramFactory.createHistogram2D(String.format("old_truth_track_v_matched_mcp_momentum"), 1600, -8, 8, 1600, -8, 8)); - - //MCParticle plots - - //DEBUG PLOTS - - plots1D.put(String.format("mcp_helicalTrackFit_phi"), - histogramFactory.createHistogram1D(String.format("mcp_helicalTrackFit_phi"), 2000, -10, 10)); - // - - //ele - plots1D.put(String.format("ele_mcp_px"), - histogramFactory.createHistogram1D(String.format("ele_mcp_px"), 1600, -8, 8)); - - plots1D.put(String.format("ele_mcp_py"), - histogramFactory.createHistogram1D(String.format("ele_mcp_py"), 1600, -8, 8)); - - plots1D.put(String.format("ele_mcp_pz"), - histogramFactory.createHistogram1D(String.format("ele_mcp_pz"), 1600, -8, 8)); - - plots2D.put(String.format("ele_mcp_px_v_py"), - histogramFactory.createHistogram2D(String.format("ele_mcp_px_v_py"), 1600, -8, 8, 1600, -8, 8)); - - plots2D.put(String.format("ele_mcp_px_v_pz"), - histogramFactory.createHistogram2D(String.format("ele_mcp_px_v_pz"), 1600, -8, 8, 1600, -8, 8)); - - plots2D.put(String.format("ele_mcp_py_v_pz"), - histogramFactory.createHistogram2D(String.format("ele_mcp_py_v_pz"), 1600, -8, 8, 1600, -8, 8)); - - plots1D.put(String.format("ele_mcp_momentum"), - histogramFactory.createHistogram1D(String.format("ele_mcp_momentum"), 800, 0, 8)); - - plots1D.put(String.format("ele_mcp_tanlambda"), - histogramFactory.createHistogram1D(String.format("ele_mcp_tanlambda"), 1000, -1, 1)); - - plots1D.put(String.format("ele_mcp_phi0"), - histogramFactory.createHistogram1D(String.format("ele_mcp_phi0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_mcp_d0"), - histogramFactory.createHistogram1D(String.format("ele_mcp_d0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_mcp_z0"), - histogramFactory.createHistogram1D(String.format("ele_mcp_z0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_mcp_C"), - histogramFactory.createHistogram1D(String.format("ele_mcp_C"), 2000, -0.10, 0.10)); - - plots2D.put(String.format("ele_mcp_momentum_v_tanlambda"), - histogramFactory.createHistogram2D(String.format("ele_mcp_momentum_v_tanlambda"), 800, 0, 8, 1000, -1, 1)); - - plots2D.put(String.format("ele_mcp_momentum_v_phi0"), - histogramFactory.createHistogram2D(String.format("ele_mcp_momentum_v_phi0"), 800, 0, 8, 2000, -10, 10)); - - plots2D.put(String.format("ele_mcp_momentum_v_d0"), - histogramFactory.createHistogram2D(String.format("ele_mcp_momentum_v_d0"), 800, 0, 8, 2000, -10, 10)); - - plots2D.put(String.format("ele_mcp_momentum_v_z0"), - histogramFactory.createHistogram2D(String.format("ele_mcp_momentum_v_z0"), 800, 0, 8, 2000, -10, 10)); - - plots2D.put(String.format("ele_mcp_momentum_v_C"), - histogramFactory.createHistogram2D(String.format("ele_mcp_momentum_v_C"), 800, 0, 8, 2000, -10, 10)); - //pos - plots1D.put(String.format("pos_mcp_px"), - histogramFactory.createHistogram1D(String.format("pos_mcp_px"), 1600, -8, 8)); - - plots1D.put(String.format("pos_mcp_py"), - histogramFactory.createHistogram1D(String.format("pos_mcp_py"), 1600, -8, 8)); - - plots1D.put(String.format("pos_mcp_pz"), - histogramFactory.createHistogram1D(String.format("pos_mcp_pz"), 1600, -8, 8)); - - plots2D.put(String.format("pos_mcp_px_v_py"), - histogramFactory.createHistogram2D(String.format("pos_mcp_px_v_py"), 1600, -8, 8, 1600, -8, 8)); - - plots2D.put(String.format("pos_mcp_px_v_pz"), - histogramFactory.createHistogram2D(String.format("pos_mcp_px_v_pz"), 1600, -8, 8, 1600, -8, 8)); - - plots2D.put(String.format("pos_mcp_py_v_pz"), - histogramFactory.createHistogram2D(String.format("pos_mcp_py_v_pz"), 1600, -8, 8, 1600, -8, 8)); - - plots1D.put(String.format("pos_mcp_momentum"), - histogramFactory.createHistogram1D(String.format("pos_mcp_momentum"), 800, 0, 8)); - - plots1D.put(String.format("pos_mcp_tanlambda"), - histogramFactory.createHistogram1D(String.format("pos_mcp_tanlambda"), 1000, -1, 1)); - - plots1D.put(String.format("pos_mcp_phi0"), - histogramFactory.createHistogram1D(String.format("pos_mcp_phi0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_mcp_d0"), - histogramFactory.createHistogram1D(String.format("pos_mcp_d0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_mcp_z0"), - histogramFactory.createHistogram1D(String.format("pos_mcp_z0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_mcp_C"), - histogramFactory.createHistogram1D(String.format("pos_mcp_C"), 2000, -0.10, 0.10)); - - plots2D.put(String.format("pos_mcp_momentum_v_tanlambda"), - histogramFactory.createHistogram2D(String.format("pos_mcp_momentum_v_tanlambda"), 800, 0, 8, 1000, -1, 1)); - - plots2D.put(String.format("pos_mcp_momentum_v_phi0"), - histogramFactory.createHistogram2D(String.format("pos_mcp_momentum_v_phi0"), 800, 0, 8, 2000, -10, 10)); - - plots2D.put(String.format("pos_mcp_momentum_v_d0"), - histogramFactory.createHistogram2D(String.format("pos_mcp_momentum_v_d0"), 800, 0, 8, 2000, -10, 10)); - - plots2D.put(String.format("pos_mcp_momentum_v_z0"), - histogramFactory.createHistogram2D(String.format("pos_mcp_momentum_v_z0"), 800, 0, 8, 2000, -10, 10)); - - plots2D.put(String.format("pos_mcp_momentum_v_C"), - histogramFactory.createHistogram2D(String.format("pos_mcp_momentum_v_C"), 800, 0, 8, 2000, -10, 10)); - + IAnalysisFactory af = aidaTruth.analysisFactory(); + histogramFactory = aidaTruth.histogramFactory(); + + //Plots for all Truth Matched Tracks, regradless of purity + double pMax=4.5; + double d0Max=2.0; + double z0Max=0.5; + double tanLMax=0.1; + double phi0Max=0.2; + double curveMax=0.001; + + chargeNames.add("ele"); + chargeNames.add("pos"); + + trackTypes.add("reco"); + trackTypes.add("real"); + trackTypes.add("fake"); + trackTypes.add("truth"); + trackTypes.add("trackable"); + + + for(String ch: chargeNames){ + for(String trkType: trackTypes){ + plots1D.put(ch+"_"+trkType+"_track_momentum", + histogramFactory.createHistogram1D(ch+"_"+trkType+"_track_momentum", 100, 0, pMax)); + plots1D.put(String.format(ch+"_"+trkType+"_track_tanlambda"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_track_tanlambda"), 100, -tanLMax, tanLMax)); + + plots1D.put(String.format(ch+"_"+trkType+"_track_d0"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_track_d0"), 100, -d0Max, d0Max)); + + plots1D.put(String.format(ch+"_"+trkType+"_track_z0"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_track_z0"), 100, -z0Max, z0Max)); + + plots1D.put(String.format(ch+"_"+trkType+"_track_phi0"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_track_phi0"), 100, -phi0Max, phi0Max)); + + plots1D.put(String.format(ch+"_"+trkType+"_track_time"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_track_time"), 100, -60, 60)); + + plots1D.put(String.format(ch+"_"+trkType+"_track_C"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_track_C"), 100, -curveMax, curveMax)); + + plots1D.put(String.format(ch+"_"+trkType+"_track_layers_hit"), histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_track_layers_hit"), 15, 0, 15)); + + + if(trkType.equals("real")){ + plots1D.put(ch+"_"+trkType+"_duplicate_tracks_momentum", + histogramFactory.createHistogram1D(ch+"_"+trkType+"_duplicate_tracks_momentum", 100, 0, pMax)); + plots1D.put(String.format(ch+"_"+trkType+"_duplicate_tracks_tanlambda"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_duplicate_tracks_tanlambda"), 100, -tanLMax, tanLMax)); + + plots1D.put(String.format(ch+"_"+trkType+"_duplicate_tracks_d0"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_duplicate_tracks_d0"), 100, -d0Max, d0Max)); + + plots1D.put(String.format(ch+"_"+trkType+"_duplicate_tracks_z0"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_duplicate_tracks_z0"), 100, -z0Max, z0Max)); + + plots1D.put(String.format(ch+"_"+trkType+"_duplicate_tracks_phi0"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_duplicate_tracks_phi0"), 100, -phi0Max, phi0Max)); + + plots1D.put(String.format(ch+"_"+trkType+"_duplicate_tracks_time"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_duplicate_tracks_time"), 100, -60, 60)); + + plots1D.put(String.format(ch+"_"+trkType+"_duplicate_tracks_C"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_duplicate_tracks_C"), 100, -curveMax, curveMax)); + plots1D.put(String.format(ch+"_"+trkType+"_duplicate_tracks_mcp_momentum"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_duplicate_tracks_mcp_momentum"), 100, 0, pMax)); + + plots1D.put(String.format(ch+"_"+trkType+"_duplicate_tracks_mcp_tanlambda"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_duplicate_tracks_mcp_tanlambda"), 100, -tanLMax, tanLMax)); + + plots1D.put(String.format(ch+"_"+trkType+"_duplicate_tracks_mcp_phi0"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_duplicate_tracks_mcp_phi0"), 100, -phi0Max, phi0Max)); + + plots1D.put(String.format(ch+"_"+trkType+"_duplicate_tracks_mcp_d0"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_duplicate_tracks_mcp_d0"), 100, -d0Max, d0Max)); + + plots1D.put(String.format(ch+"_"+trkType+"_duplicate_tracks_mcp_z0"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_duplicate_tracks_mcp_z0"), 100, -z0Max, z0Max)); + + plots1D.put(String.format(ch+"_"+trkType+"_duplicate_tracks_mcp_C"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_duplicate_tracks_mcp_C"), 100, -0.10, 0.10)); + + plots1D.put(String.format(ch+"_"+trkType+"_track_mcp_good_hit_layers"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_track_mcp_good_hit_layers"), 15, 0, 15)); + + plots1D.put(String.format(ch+"_"+trkType+"_track_mcp_bad_hit_layers"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_track_mcp_bad_hit_layers"), 15, 0, 15)); + + plots1D.put(String.format(ch+"_"+trkType+"_track_mcp_correctly_missing_hit_layers"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_track_mcp_correctly_missing_hit_layers"), 15, 0, 15)); + + plots1D.put(String.format(ch+"_"+trkType+"_track_mcp_wrong_hit_layers"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_track_mcp_wrong_hit_layers"), 15, 0, 15)); + + plots1D.put(String.format(ch+"_"+trkType+"_track_mcp_no_mcp_hit_layers"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_track_mcp_no_mcp_hit_layers"), 15, 0, 15)); + + plots1D.put(String.format(ch+"_"+trkType+"_track_mcp_missed_hit_layers"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_track_mcp_missed_hit_layers"), 15, 0, 15)); + + plots1D.put(String.format(ch+"_"+trkType+"_track_mcp_all_hit_layers"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_track_mcp_all_hit_layers"), 15, 0, 15)); + } + + plots2D.put(String.format(ch+"_"+trkType+"_track_momentum_v_nhits"), + histogramFactory.createHistogram2D(String.format(ch+"_"+trkType+"_track_momentum_v_nhits"), 100, 0, pMax, 15, 0, 15)); + + plots1D.put(String.format(ch+"_"+trkType+"_track_n_mcps_on_track"), histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_track_n_mcps_on_track"), 30, 0, 30)); + + plots1D.put(String.format(ch+"_"+trkType+"_track_n_hits"), histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_track_n_hits"), 15, 0, 15)); + + plots1D.put(String.format(ch+"_"+trkType+"_track_n_goodhits"), histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_track_n_goodhits"), 15, 0, 15)); + + plots1D.put(String.format(ch+"_"+trkType+"_track_n_badhits"), histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_track_n_badhits"), 15, 0, 15)); + + plots1D.put(String.format(ch+"_"+trkType+"_track_purity"), histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_track_purity"), 40, 0, 1.2)); + + plots1D.put(String.format(ch+"_"+trkType+"_track_n_mcps_on_layer"), histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_track_n_mcps_on_layer"), 20, 0, 20)); + + plots1D.put(String.format(ch+"_"+trkType+"_track_n_striphits_on_layer"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_track_n_striphits_on_layer"), 20, 0, 20)); + + plots1D.put(String.format(ch+"_"+trkType+"_track_n_mcps_on_striphit"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_track_n_mcps_on_striphit"), 10, 0, 10)); + + plots2D.put(String.format(ch+"_"+trkType+"_track_n_mcps_per_layer"), + histogramFactory.createHistogram2D(String.format(ch+"_"+trkType+"_track_n_mcps_per_layer"), 20, 0, 20, 15, 0, 15)); + + plots2D.put(String.format(ch+"_"+trkType+"_track_n_striphits_per_layer"), + histogramFactory.createHistogram2D(String.format(ch+"_"+trkType+"_track_n_striphits_per_layer"), 20, 0, 20, 15, 0, 15)); + + plots2D.put(String.format(ch+"_"+trkType+"_track_n_mcps_on_layer_striphits"), + histogramFactory.createHistogram2D(String.format(ch+"_"+trkType+"_track_n_mcps_on_layer_striphits"), 20, 0, 20, 15, 0, 15)); + + plots1D.put(String.format(ch+"_"+trkType+"_track_good_hit_layers"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_track_good_hit_layers"), 15, 0, 15)); + + plots1D.put(String.format(ch+"_"+trkType+"_track_bad_hit_layers"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_track_bad_hit_layers"), 15, 0, 15)); + + plots2D.put(String.format(ch+"_"+trkType+"_track_v_matched_mcp_momentum"), + histogramFactory.createHistogram2D(String.format(ch+"_"+trkType+"_track_v_matched_mcp_momentum"), 100, -8, 8, 100, -8, 8)); + + plots1D.put(String.format(ch+"_"+trkType+"_track_mcp_momentum"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_track_mcp_momentum"), 100, 0, pMax)); + + plots1D.put(String.format(ch+"_"+trkType+"_track_mcp_tanlambda"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_track_mcp_tanlambda"), 100, -tanLMax, tanLMax)); + + plots1D.put(String.format(ch+"_"+trkType+"_track_mcp_phi0"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_track_mcp_phi0"), 100, -phi0Max, phi0Max)); + + plots1D.put(String.format(ch+"_"+trkType+"_track_mcp_d0"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_track_mcp_d0"), 100, -d0Max, d0Max)); + + plots1D.put(String.format(ch+"_"+trkType+"_track_mcp_z0"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_track_mcp_z0"), 100, -z0Max, z0Max)); + + plots1D.put(String.format(ch+"_"+trkType+"_track_mcp_C"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_track_mcp_C"), 100, -0.10, 0.10)); + + plots1D.put(String.format(ch+"_"+trkType+"_track_nhits_gteq_12_mcp_momentum"), + histogramFactory.createHistogram1D(String.format(ch+"_"+trkType+"_track_nhits_gteq_12_mcp_momentum"), 100, 0, pMax)); + + + } + + + plots1D.put(String.format(ch+"_truth_track_mcp_truth_prob"), + histogramFactory.createHistogram1D(String.format(ch+"_truth_track_mcp_truth_prob"), 40, 0, 1.2)); + + plots2D.put(String.format(ch+"_truth_track_purity_v_nMCPs_on_track"), histogramFactory.createHistogram2D(String.format(ch+"_purity_v_nMCPs_on_track"), 40, 0, 2, 10,0,10)); + + + plots2D.put(String.format(ch+"_truth_track_momentum_v_nHits_on_track"), + histogramFactory.createHistogram2D(String.format(ch+"_truth_track_momentum_v_nHits_on_track"), 100, 0, pMax, 15, 0, 15)); + + plots2D.put(String.format(ch+"_truth_track_momentum_v_probability"), + histogramFactory.createHistogram2D(String.format(ch+"_truth_track_momentum_v_probability"), 100, 0, pMax, 40, 0, 1.2)); + + plots2D.put(String.format(ch+"_truth_track_tanlambda_v_probability"), + histogramFactory.createHistogram2D(String.format(ch+"_truth_track_tanlambda_v_probability"), 100, -tanLMax, tanLMax, 40, 0, 1.2)); + + plots2D.put(String.format(ch+"_truth_track_phi0_v_probability"), + histogramFactory.createHistogram2D(String.format(ch+"_truth_track_phi0_v_probability"), 100, -phi0Max, phi0Max, 40, 0, 1.2)); + + plots2D.put(String.format(ch+"_truth_track_z0_v_probability"), + histogramFactory.createHistogram2D(String.format(ch+"_truth_track_z0_v_probability"), 100, -z0Max, z0Max, 40, 0, 1.2)); + + plots2D.put(String.format(ch+"_truth_track_d0_v_probability"), + histogramFactory.createHistogram2D(String.format(ch+"_truth_track_d0_v_probability"), 100, -d0Max, d0Max, 40, 0, 1.2)); + + plots2D.put(String.format(ch+"_truth_track_C_v_probability"), + histogramFactory.createHistogram2D(String.format(ch+"_truth_track_C_v_probability"), 100, -0.10, 0.10, 40, 0, 1.2)); + + plots1D.put(String.format(ch+"_truth_track_multi_mcp_truth_prob"), + histogramFactory.createHistogram1D(String.format(ch+"_multi_mcp_truth_prob"), 40, 0, 1.2)); + + plots1D.put(String.format(ch+"_truth_track_purity_eq_1_momentum"), + histogramFactory.createHistogram1D(String.format(ch+"_truth_track_purity_eq_1_momentum"), 100, 0, pMax)); + + plots1D.put(String.format(ch+"_truth_track_purity_eq_1_tanlambda"), + histogramFactory.createHistogram1D(String.format(ch+"_truth_track_purity_eq_1_tanlambda"), 100, -tanLMax, tanLMax)); + + plots1D.put(String.format(ch+"_truth_track_purity_eq_1_phi0"), + histogramFactory.createHistogram1D(String.format(ch+"_truth_track_purity_eq_1_phi0"), 100, -phi0Max, phi0Max)); + + plots1D.put(String.format(ch+"_truth_track_purity_eq_1_d0"), + histogramFactory.createHistogram1D(String.format(ch+"_truth_track_purity_eq_1_d0"), 100, -d0Max, d0Max)); + + plots1D.put(String.format(ch+"_truth_track_purity_eq_1_z0"), + histogramFactory.createHistogram1D(String.format(ch+"_truth_track_purity_eq_1_z0"), 100, -z0Max, z0Max)); + + plots1D.put(String.format(ch+"_truth_track_purity_eq_1_C"), + histogramFactory.createHistogram1D(String.format(ch+"_truth_track_purity_eq_1_C"), 100, -curveMax, curveMax)); + + plots2D.put(String.format(ch+"_truth_track_purity_eq_1_v_matched_mcp_momentum"), + histogramFactory.createHistogram2D(String.format(ch+"_truth_track_purity_eq_1_v_matched_mcp_momentum"), 100, 0 , pMax, 100, 0,pMax)); + + plots1D.put(String.format(ch+"_trackable_track_mcp_nSimTrackerHits"), + histogramFactory.createHistogram1D(String.format(ch+"_trackable_track_mcp_nSimTrackerHits"), 15, 0, 15)); + + plots2D.put(String.format(ch+"_trackable_track_mcp_momentum_v_nSimTrackerHits"), + histogramFactory.createHistogram2D(String.format(ch+"_trackable_track_mcp_momentum_v_nSimTrackerHits"), 800, 0, 8, 15, 0, 15)); + + plots1D.put(ch+"_trackable_track_all_mcp_layers_hit", + histogramFactory.createHistogram1D(String.format(ch+"_trackable_track_all_mcp_layers_hit"), 15, 0, 15)); + + plots2D.put(String.format(ch+"_mcp_momentum_v_nLayersHit"), + histogramFactory.createHistogram2D(String.format(ch+"_mcp_momentum_v_nLayersHit"), 800, 0, 8, 15, 0, 15)); + + plots1D.put(String.format(ch+"_mcp_px"), + histogramFactory.createHistogram1D(String.format(ch+"_mcp_px"), 100, -0.1, 0.1)); + + plots1D.put(String.format(ch+"_mcp_py"), + histogramFactory.createHistogram1D(String.format(ch+"_mcp_py"), 100, -0.1, 0.1)); + + plots1D.put(String.format(ch+"_mcp_pz"), + histogramFactory.createHistogram1D(String.format(ch+"_mcp_pz"), 100, -8, 8)); + + plots2D.put(String.format(ch+"_mcp_px_v_py"), + histogramFactory.createHistogram2D(String.format(ch+"_mcp_px_v_py"), 100, -0.1, 0.1, 100, -0.1, 0.1)); + + plots2D.put(String.format(ch+"_mcp_px_v_pz"), + histogramFactory.createHistogram2D(String.format(ch+"_mcp_px_v_pz"), 100, -8, 8, 100, -0.1, 0.1)); + + plots2D.put(String.format(ch+"_mcp_py_v_pz"), + histogramFactory.createHistogram2D(String.format(ch+"_mcp_py_v_pz"), 100, -8, 8, 100, -0.1, 0.1)); + + plots1D.put(String.format(ch+"_mcp_momentum"), + histogramFactory.createHistogram1D(String.format(ch+"_mcp_momentum"), 100, 0, pMax)); + + plots1D.put(String.format(ch+"_mcp_tanlambda"), + histogramFactory.createHistogram1D(String.format(ch+"_mcp_tanlambda"), 100, -tanLMax, tanLMax)); + + plots1D.put(String.format(ch+"_mcp_phi0"), + histogramFactory.createHistogram1D(String.format(ch+"_mcp_phi0"), 100, -phi0Max, phi0Max)); + + plots1D.put(String.format(ch+"_mcp_d0"), + histogramFactory.createHistogram1D(String.format(ch+"_mcp_d0"), 100, -d0Max, d0Max)); + + plots1D.put(String.format(ch+"_mcp_z0"), + histogramFactory.createHistogram1D(String.format(ch+"_mcp_z0"), 100, -z0Max, z0Max)); + + plots1D.put(String.format(ch+"_mcp_C"), + histogramFactory.createHistogram1D(String.format(ch+"_mcp_C"), 100, -0.10, 0.10)); + + plots2D.put(String.format(ch+"_mcp_momentum_v_tanlambda"), + histogramFactory.createHistogram2D(String.format(ch+"_mcp_momentum_v_tanlambda"), 100, 0, pMax, 100, -tanLMax, tanLMax)); + + plots2D.put(String.format(ch+"_mcp_momentum_v_phi0"), + histogramFactory.createHistogram2D(String.format(ch+"_mcp_momentum_v_phi0"), 100, 0, pMax, 100, -phi0Max, phi0Max)); + + plots2D.put(String.format(ch+"_mcp_momentum_v_d0"), + histogramFactory.createHistogram2D(String.format(ch+"_mcp_momentum_v_d0"), 100, 0, pMax, 100, -d0Max, d0Max)); + + plots2D.put(String.format(ch+"_mcp_momentum_v_z0"), + histogramFactory.createHistogram2D(String.format(ch+"_mcp_momentum_v_z0"), 100, 0, pMax, 100, -z0Max, z0Max)); + + plots2D.put(String.format(ch+"_mcp_momentum_v_C"), + histogramFactory.createHistogram2D(String.format(ch+"_mcp_momentum_v_C"), 100, 0, pMax, 100, -curveMax, curveMax)); + + String[] misTagList={"good_L1L2","bad_L1L2","bad_L1Only","bad_L2Only"}; + String[] trkVarList={"_momentum","_tanlambda","_phi0","_time","_d0","_z0","_C"}; + Double[] varMinList={0.,-tanLMax,-phi0Max,-60.,-d0Max*2,-z0Max*2,-curveMax}; + Double[] varMaxList={pMax,tanLMax,phi0Max,60.,d0Max*2,z0Max*2,curveMax}; + for(String misTag: misTagList){ + int iv=0; + for(String trkVar: trkVarList){ + plots1D.put(ch+"_real_trackable_track_"+misTag+trkVar, + histogramFactory.createHistogram1D(ch+"_real_trackable_track_"+misTag+trkVar,100,varMinList[iv],varMaxList[iv])); + iv++; + } + } + + } + //Trackable MCP Plots - plots1D.put(String.format("mcp_tanlambda"), histogramFactory.createHistogram1D(String.format("mcp_tanlambda"), 1000, -1, 1)); + plots1D.put(String.format("mcp_tanlambda"), histogramFactory.createHistogram1D(String.format("mcp_tanlambda"), 100, -tanLMax, tanLMax)); plots2D.put(String.format("mcp_momentum_v_tanlambda"), - histogramFactory.createHistogram2D(String.format("mcp_momentum_v_tanlambda"), 800, 0, 8, 1000, -1, 1)); - - //ele - plots1D.put(String.format("ele_trackable_mcp_nSimTrackerHits"), - histogramFactory.createHistogram1D(String.format("ele_trackable_mcp_nSimTrackerHits"), 15, 0, 15)); - - plots2D.put(String.format("ele_trackable_mcp_momentum_v_nSimTrackerHits"), - histogramFactory.createHistogram2D(String.format("ele_trackable_mcp_momentum_v_nSimTrackerHits"), 800, 0, 8, 15, 0, 15)); - - plots2D.put(String.format("ele_mcp_momentum_v_nLayersHit"), - histogramFactory.createHistogram2D(String.format("ele_mcp_momentum_v_nLayersHit"), 800, 0, 8, 15, 0, 15)); - - plots1D.put(String.format("ele_trackable_mcp_momentum"), - histogramFactory.createHistogram1D(String.format("ele_trackable_mcp_momentum"), 800, 0, 8)); - - plots1D.put(String.format("ele_trackable_mcp_tanlambda"), - histogramFactory.createHistogram1D(String.format("ele_trackable_mcp_tanlambda"), 1000, -1, 1)); - - plots1D.put(String.format("ele_trackable_mcp_phi0"), - histogramFactory.createHistogram1D(String.format("ele_trackable_mcp_phi0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_trackable_mcp_d0"), - histogramFactory.createHistogram1D(String.format("ele_trackable_mcp_d0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_trackable_mcp_z0"), - histogramFactory.createHistogram1D(String.format("ele_trackable_mcp_z0"), 2000, -10, 10)); - - plots1D.put(String.format("ele_trackable_mcp_C"), - histogramFactory.createHistogram1D(String.format("ele_trackable_mcp_C"), 2000, -0.10, 0.10)); - //pos - plots2D.put(String.format("pos_mcp_momentum_v_nLayersHit"), - histogramFactory.createHistogram2D(String.format("pos_mcp_momentum_v_nLayersHit"), 800, 0, 8, 15, 0, 15)); - - plots1D.put(String.format("pos_trackable_mcp_nSimTrackerHits"), - histogramFactory.createHistogram1D(String.format("pos_trackable_mcp_nSimTrackerHits"), 15, 0, 15)); - - plots2D.put(String.format("pos_trackable_mcp_momentum_v_nSimTrackerHits"), - histogramFactory.createHistogram2D(String.format("pos_trackable_mcp_momentum_v_nSimTrackerHits"), 800, 0, 8, 15, 0, 15)); - - plots1D.put(String.format("pos_trackable_mcp_momentum"), - histogramFactory.createHistogram1D(String.format("pos_trackable_mcp_momentum"), 800, 0, 8)); - - plots1D.put(String.format("pos_trackable_mcp_tanlambda"), - histogramFactory.createHistogram1D(String.format("pos_trackable_mcp_tanlambda"), 1000, -1, 1)); - - plots1D.put(String.format("pos_trackable_mcp_phi0"), - histogramFactory.createHistogram1D(String.format("pos_trackable_mcp_phi0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_trackable_mcp_d0"), - histogramFactory.createHistogram1D(String.format("pos_trackable_mcp_d0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_trackable_mcp_z0"), - histogramFactory.createHistogram1D(String.format("pos_trackable_mcp_z0"), 2000, -10, 10)); - - plots1D.put(String.format("pos_trackable_mcp_C"), - histogramFactory.createHistogram1D(String.format("pos_trackable_mcp_C"), 2000, -0.10, 0.10)); + histogramFactory.createHistogram2D(String.format("mcp_momentum_v_tanlambda"), 100, 0, pMax, 100, -tanLMax, tanLMax)); + } public void endOfData() { @@ -1007,6 +458,13 @@ public void setTrackCollectionNames(String [] trackCollectionNames) { @Override protected void detectorChanged(Detector detector) { + if (aidaTruth == null) + aidaTruth = AIDA.defaultInstance(); + aidaTruth.tree().cd("/"); + aidaTruth.tree().mkdirs("TrkTruth"); + aidaTruth.tree().cd("TrkTruth"); + if(enablePlots) + this.bookHistograms(); Hep3Vector fieldInTracker = TrackUtils.getBField(detector); bfield = Math.abs(fieldInTracker.y()); bfield_y = fieldInTracker.y(); @@ -1058,10 +516,10 @@ protected void process(EventHeader event) { List mcps = new ArrayList(); for (Track track : trackCollection) { - System.out.println("Number of trackstates = " + track.getTrackStates().size()); - for(TrackState trackstate : track.getTrackStates()){ - System.out.println("location = " + trackstate.getLocation()); - } + // System.out.println("Number of trackstates = " + track.getTrackStates().size()); + // for(TrackState trackstate : track.getTrackStates()){ + // System.out.println("location = " + trackstate.getLocation()); + //} boolean realTrack = true; int charge = -1* (int)Math.signum(track.getTrackStates().get(0).getOmega()); @@ -1071,7 +529,8 @@ protected void process(EventHeader event) { double track_z0 = track.getTrackStates().get(0).getZ0(); double track_C = track.getTrackStates().get(0).getOmega(); double track_phi = track.getTrackStates().get(0).getPhi(); - + double track_time = TrackData.getTrackTime(TrackData.getTrackData(event, track)); + double track_chi2_ndf = track.getChi2()/track.getNDF(); /* //Check match quality of old Track->MCP matching TrackTruthMatching ttm = new TrackTruthMatching(track, rawtomc, allsimhits, false); @@ -1082,7 +541,10 @@ protected void process(EventHeader event) { plots2D.get("old_truth_track_v_matched_mcp_momentum").fill(charge*trackPmag,((int)mcp_matt.getCharge())*mcp_matt.getMomentum().magnitude()); } */ - + String chTag="ele"; + if(charge>0) + chTag="pos"; + //Use New TrackTruthMatching tool to match Track -> MCP TrackTruthMatcher tt = new TrackTruthMatcher(track, rawtomc, 0.0, 0); @@ -1093,25 +555,15 @@ protected void process(EventHeader event) { continue; //Fill plot with all Reco Tracks momentum - if(charge < 0){ - plots1D.get("ele_reco_track_momentum").fill(trackPmag); - plots1D.get("ele_reco_track_tanlambda").fill(tanlambda); - plots1D.get("ele_reco_track_d0").fill(track_d0); - plots1D.get("ele_reco_track_z0").fill(track_z0); - plots1D.get("ele_reco_track_C").fill(track_C); - plots1D.get("ele_reco_track_phi0").fill(track_phi); - plots2D.get("ele_reco_track_momentum_v_nhits").fill(trackPmag, nHits); - } - else{ - plots1D.get("pos_reco_track_momentum").fill(trackPmag); - plots1D.get("pos_reco_track_tanlambda").fill(tanlambda); - plots1D.get("pos_reco_track_d0").fill(track_d0); - plots1D.get("pos_reco_track_z0").fill(track_z0); - plots1D.get("pos_reco_track_C").fill(track_C); - plots1D.get("pos_reco_track_phi0").fill(track_phi); - plots2D.get("pos_reco_track_momentum_v_nhits").fill(trackPmag, nHits); - } - + plots1D.get(chTag+"_reco_track_momentum").fill(trackPmag); + plots1D.get(chTag+"_reco_track_tanlambda").fill(tanlambda); + plots1D.get(chTag+"_reco_track_d0").fill(track_d0); + plots1D.get(chTag+"_reco_track_z0").fill(track_z0); + plots1D.get(chTag+"_reco_track_C").fill(track_C); + plots1D.get(chTag+"_reco_track_phi0").fill(track_phi); + plots1D.get(chTag+"_reco_track_time").fill(track_time); + plots2D.get(chTag+"_reco_track_momentum_v_nhits").fill(trackPmag, nHits); + //get Track MCP if it has one MCParticle mcp = tt.getMCParticle(); @@ -1133,129 +585,68 @@ protected void process(EventHeader event) { //First fill plots for all cases where a Track is matched to a //MCP, regardless of match purity. - if(charge < 0){ - plots2D.get("ele_truth_tracks_trackP_v_nHits_on_track").fill(trackPmag, nHits); - plots1D.get("ele_truth_track_momentum").fill(trackPmag); - plots1D.get("ele_truth_track_tanlambda").fill(tanlambda); - plots1D.get("ele_truth_track_phi0").fill(track_phi); - plots1D.get("ele_truth_track_d0").fill(track_d0); - plots1D.get("ele_truth_track_z0").fill(track_z0); - plots1D.get("ele_truth_track_C").fill(track_C); - plots2D.get("ele_truth_track_v_matched_mcp_momentum").fill(charge*trackPmag,((int)mcp.getCharge())*mcp.getMomentum().magnitude()); - //truth probability for tracks - plots2D.get("ele_truth_track_momentum_v_probability").fill(trackPmag, tt.getPurity()); - plots2D.get("ele_truth_track_tanlambda_v_probability").fill(tanlambda, tt.getPurity()); - plots2D.get("ele_truth_track_d0_v_probability").fill(track_d0, tt.getPurity()); - plots2D.get("ele_truth_track_z0_v_probability").fill(track_z0, tt.getPurity()); - plots2D.get("ele_truth_track_phi0_v_probability").fill(track_phi, tt.getPurity()); - plots2D.get("ele_truth_track_C_v_probability").fill(track_C, tt.getPurity()); - - if(tt.getLayerHitsForAllMCPs().size() > 1){ - plots1D.get("ele_multi_mcp_truth_prob").fill(tt.getPurity()); - } - if(tt.getPurity() > 0.5){ - plots1D.get("ele_mcp_truth_prob").fill(tt.getPurity()); - } - plots2D.get("ele_purity_v_nMCPs_on_track").fill(tt.getPurity(), tt.getLayerHitsForAllMCPs().size()); - plots1D.get("ele_n_mcps_on_track").fill(tt.getLayerHitsForAllMCPs().size()); - plots1D.get("ele_n_hits").fill(tt.getNHits()); - plots1D.get("ele_purity").fill(tt.getPurity()); - plots1D.get("ele_n_goodhits").fill(tt.getNGoodHits()); - plots1D.get("ele_n_badhits").fill(tt.getNBadHits()); - for(Integer layer : tt.getLayersOnTrack()){ - plots1D.get("ele_layers_hit").fill(layer); - plots1D.get("ele_n_mcps_on_layer").fill(tt.getMCPsOnLayer(layer).size()); - plots2D.get("ele_n_mcps_per_layer").fill(layer,tt.getMCPsOnLayer(layer).size()); - plots1D.get("ele_n_striphits_on_layer").fill(tt.getStripHitsOnLayer(layer).size()); - plots2D.get("ele_n_striphits_per_layer").fill(layer,tt.getStripHitsOnLayer(layer).size()); - for(RawTrackerHit rawhit : tt.getStripHitsOnLayer(layer)){ - plots1D.get("ele_n_mcps_on_striphit").fill(tt.getMCPsOnRawTrackerHit(rawhit).size()); - plots2D.get("ele_n_mcps_on_layer_striphits").fill(layer,tt.getMCPsOnRawTrackerHit(rawhit).size()); - } - } - //plot good and bad hit layers - for(Integer layer : tt.getGoodHitLayers()){ - plots1D.get("ele_truth_track_good_hit_layers").fill(layer); - } - for(Integer layer : tt.getBadHitLayers()){ - plots1D.get("ele_truth_track_bad_hit_layers").fill(layer); - } - } - - else{ - plots2D.get("pos_purity_v_nMCPs_on_track").fill(tt.getPurity(), tt.getLayerHitsForAllMCPs().size()); - plots2D.get("pos_truth_tracks_trackP_v_nHits_on_track").fill(trackPmag, nHits); - plots1D.get("pos_truth_track_momentum").fill(trackPmag); - plots1D.get("pos_truth_track_tanlambda").fill(tanlambda); - plots1D.get("pos_truth_track_phi0").fill(track_phi); - plots1D.get("pos_truth_track_d0").fill(track_d0); - plots1D.get("pos_truth_track_z0").fill(track_z0); - plots1D.get("pos_truth_track_C").fill(track_C); - plots2D.get("pos_truth_track_v_matched_mcp_momentum").fill(charge*trackPmag,((int)mcp.getCharge())*mcp.getMomentum().magnitude()); - //Truth Tracks Probability - plots2D.get("pos_truth_track_momentum_v_probability").fill(trackPmag, tt.getPurity()); - plots2D.get("pos_truth_track_tanlambda_v_probability").fill(tanlambda, tt.getPurity()); - plots2D.get("pos_truth_track_d0_v_probability").fill(track_d0, tt.getPurity()); - plots2D.get("pos_truth_track_z0_v_probability").fill(track_z0, tt.getPurity()); - plots2D.get("pos_truth_track_phi0_v_probability").fill(track_phi, tt.getPurity()); - plots2D.get("pos_truth_track_C_v_probability").fill(track_C, tt.getPurity()); - if(tt.getLayerHitsForAllMCPs().size() > 1){ - plots1D.get("pos_multi_mcp_truth_prob").fill(tt.getPurity()); - } - if(tt.getPurity() > 0.5){ - plots1D.get("pos_mcp_truth_prob").fill(tt.getPurity()); - } - plots1D.get("pos_n_mcps_on_track").fill(tt.getLayerHitsForAllMCPs().size()); - plots1D.get("pos_n_hits").fill(tt.getNHits()); - plots1D.get("pos_purity").fill(tt.getPurity()); - plots1D.get("pos_n_goodhits").fill(tt.getNGoodHits()); - plots1D.get("pos_n_badhits").fill(tt.getNBadHits()); - for(Integer layer : tt.getLayersOnTrack()){ - plots1D.get("pos_layers_hit").fill(layer); - plots1D.get("pos_n_mcps_on_layer").fill(tt.getMCPsOnLayer(layer).size()); - plots2D.get("pos_n_mcps_per_layer").fill(layer,tt.getMCPsOnLayer(layer).size()); - plots1D.get("pos_n_striphits_on_layer").fill(tt.getStripHitsOnLayer(layer).size()); - plots2D.get("pos_n_striphits_per_layer").fill(layer,tt.getStripHitsOnLayer(layer).size()); - for(RawTrackerHit rawhit : tt.getStripHitsOnLayer(layer)){ - plots1D.get("pos_n_mcps_on_striphit").fill(tt.getMCPsOnRawTrackerHit(rawhit).size()); - plots2D.get("pos_n_mcps_on_layer_striphits").fill(layer,tt.getMCPsOnRawTrackerHit(rawhit).size()); - } - } - - //plot good and bad hit layers - for(Integer layer : tt.getGoodHitLayers()){ - plots1D.get("pos_truth_track_good_hit_layers").fill(layer); - } - for(Integer layer : tt.getBadHitLayers()){ - plots1D.get("pos_truth_track_bad_hit_layers").fill(layer); - } - } + plots2D.get(chTag+"_truth_track_momentum_v_nHits_on_track").fill(trackPmag, nHits); + plots1D.get(chTag+"_truth_track_momentum").fill(trackPmag); + plots1D.get(chTag+"_truth_track_tanlambda").fill(tanlambda); + plots1D.get(chTag+"_truth_track_phi0").fill(track_phi); + plots1D.get(chTag+"_truth_track_d0").fill(track_d0); + plots1D.get(chTag+"_truth_track_z0").fill(track_z0); + plots1D.get(chTag+"_truth_track_C").fill(track_C); + + plots2D.get(chTag+"_truth_track_v_matched_mcp_momentum").fill(charge*trackPmag,((int)mcp.getCharge())*mcp.getMomentum().magnitude()); + //truth probability for tracks + plots2D.get(chTag+"_truth_track_momentum_v_probability").fill(trackPmag, tt.getPurity()); + plots2D.get(chTag+"_truth_track_tanlambda_v_probability").fill(tanlambda, tt.getPurity()); + plots2D.get(chTag+"_truth_track_d0_v_probability").fill(track_d0, tt.getPurity()); + plots2D.get(chTag+"_truth_track_z0_v_probability").fill(track_z0, tt.getPurity()); + plots2D.get(chTag+"_truth_track_phi0_v_probability").fill(track_phi, tt.getPurity()); + plots2D.get(chTag+"_truth_track_C_v_probability").fill(track_C, tt.getPurity()); + + if(tt.getLayerHitsForAllMCPs().size() > 1){ + plots1D.get(chTag+"_truth_track_multi_mcp_truth_prob").fill(tt.getPurity()); + } + if(tt.getPurity() > purityCut){ + plots1D.get(chTag+"_truth_track_mcp_truth_prob").fill(tt.getPurity()); + } + plots2D.get(chTag+"_truth_track_purity_v_nMCPs_on_track").fill(tt.getPurity(), tt.getLayerHitsForAllMCPs().size()); + plots1D.get(chTag+"_truth_track_n_mcps_on_track").fill(tt.getLayerHitsForAllMCPs().size()); + + plots1D.get(chTag+"_reco_track_n_hits").fill(tt.getNHits()); + plots1D.get(chTag+"_reco_track_purity").fill(tt.getPurity()); + plots1D.get(chTag+"_reco_track_n_goodhits").fill(tt.getNGoodHits()); + plots1D.get(chTag+"_reco_track_n_badhits").fill(tt.getNBadHits()); + for(Integer layer : tt.getLayersOnTrack()){ + plots1D.get(chTag+"_reco_track_layers_hit").fill(layer); + plots1D.get(chTag+"_reco_track_n_mcps_on_layer").fill(tt.getMCPsOnLayer(layer).size()); + plots2D.get(chTag+"_reco_track_n_mcps_per_layer").fill(layer,tt.getMCPsOnLayer(layer).size()); + plots1D.get(chTag+"_reco_track_n_striphits_on_layer").fill(tt.getStripHitsOnLayer(layer).size()); + plots2D.get(chTag+"_reco_track_n_striphits_per_layer").fill(layer,tt.getStripHitsOnLayer(layer).size()); + for(RawTrackerHit rawhit : tt.getStripHitsOnLayer(layer)){ + plots1D.get(chTag+"_reco_track_n_mcps_on_striphit").fill(tt.getMCPsOnRawTrackerHit(rawhit).size()); + plots2D.get(chTag+"_reco_track_n_mcps_on_layer_striphits").fill(layer,tt.getMCPsOnRawTrackerHit(rawhit).size()); + } + } + //plot good and bad hit layers + for(Integer layer : tt.getGoodHitLayers()){ + plots1D.get(chTag+"_truth_track_good_hit_layers").fill(layer); + } + for(Integer layer : tt.getBadHitLayers()){ + plots1D.get(chTag+"_truth_track_bad_hit_layers").fill(layer); + } + //Plots for Track->MCP purity = 100% if(purity == 1){ - - if(charge < 0){ - plots1D.get("ele_truth_track_purity_eq_1_momentum").fill(trackPmag); - plots1D.get("ele_truth_track_purity_eq_1_tanlambda").fill(tanlambda); - plots1D.get("ele_truth_track_purity_eq_1_phi0").fill(track_phi); - plots1D.get("ele_truth_track_purity_eq_1_d0").fill(track_d0); - plots1D.get("ele_truth_track_purity_eq_1_z0").fill(track_z0); - plots1D.get("ele_truth_track_purity_eq_1_C").fill(track_C); - plots2D.get("ele_truth_track_purity_eq_1_v_matched_mcp_momentum").fill(charge*trackPmag,((int)mcp.getCharge())*mcp.getMomentum().magnitude()); - } - - else{ - plots1D.get("pos_truth_track_purity_eq_1_momentum").fill(trackPmag); - plots1D.get("pos_truth_track_purity_eq_1_tanlambda").fill(tanlambda); - plots1D.get("pos_truth_track_purity_eq_1_phi0").fill(track_phi); - plots1D.get("pos_truth_track_purity_eq_1_d0").fill(track_d0); - plots1D.get("pos_truth_track_purity_eq_1_z0").fill(track_z0); - plots1D.get("pos_truth_track_purity_eq_1_C").fill(track_C); - plots2D.get("pos_truth_track_purity_eq_1_v_matched_mcp_momentum").fill(charge*trackPmag,((int)mcp.getCharge())*mcp.getMomentum().magnitude()); - } - + + plots1D.get(chTag+"_truth_track_purity_eq_1_momentum").fill(trackPmag); + plots1D.get(chTag+"_truth_track_purity_eq_1_tanlambda").fill(tanlambda); + plots1D.get(chTag+"_truth_track_purity_eq_1_phi0").fill(track_phi); + plots1D.get(chTag+"_truth_track_purity_eq_1_d0").fill(track_d0); + plots1D.get(chTag+"_truth_track_purity_eq_1_z0").fill(track_z0); + plots1D.get(chTag+"_truth_track_purity_eq_1_C").fill(track_C); + plots2D.get(chTag+"_truth_track_purity_eq_1_v_matched_mcp_momentum").fill(charge*trackPmag,((int)mcp.getCharge())*mcp.getMomentum().magnitude()); } - + //If Track passes purity cut, identify Track as real if(purity < this.purityCut) @@ -1263,212 +654,182 @@ protected void process(EventHeader event) { //If Track fails purity cut, identify Track as fake if(!realTrack){ - if(charge < 0){ - plots1D.get("ele_fake_track_momentum").fill(trackPmag); - plots1D.get("ele_fake_track_tanlambda").fill(tanlambda); - plots1D.get("ele_fake_track_phi0").fill(track_phi); - plots1D.get("ele_fake_track_d0").fill(track_d0); - plots1D.get("ele_fake_track_z0").fill(track_z0); - plots1D.get("ele_fake_track_C").fill(track_C); - - plots2D.get("ele_fake_track_v_matched_mcp_momentum").fill(charge*trackPmag,((int)mcp.getCharge())*mcp.getMomentum().magnitude()); - plots1D.get("ele_fake_track_n_mcps_on_track").fill(tt.getLayerHitsForAllMCPs().size()); - plots1D.get("ele_fake_track_n_hits").fill(tt.getNHits()); - plots1D.get("ele_fake_track_purity").fill(tt.getPurity()); - plots1D.get("ele_fake_track_n_goodhits").fill(tt.getNGoodHits()); - plots1D.get("ele_fake_track_n_badhits").fill(tt.getNBadHits()); - for(Integer layer : tt.getLayersOnTrack()){ - plots1D.get("ele_fake_track_layers_hit").fill(layer); - plots1D.get("ele_fake_track_n_mcps_on_layer").fill(tt.getMCPsOnLayer(layer).size()); - plots2D.get("ele_fake_track_n_mcps_per_layer").fill(layer,tt.getMCPsOnLayer(layer).size()); - plots1D.get("ele_fake_track_n_striphits_on_layer").fill(tt.getStripHitsOnLayer(layer).size()); - plots2D.get("ele_fake_track_n_striphits_per_layer").fill(layer,tt.getStripHitsOnLayer(layer).size()); - for(RawTrackerHit rawhit : tt.getStripHitsOnLayer(layer)){ - plots1D.get("ele_fake_track_n_mcps_on_striphit").fill(tt.getMCPsOnRawTrackerHit(rawhit).size()); - plots2D.get("ele_fake_track_n_mcps_on_layer_striphits").fill(layer,tt.getMCPsOnRawTrackerHit(rawhit).size()); - } - } - - } - - else{ - plots1D.get("pos_fake_track_momentum").fill(trackPmag); - plots1D.get("pos_fake_track_tanlambda").fill(tanlambda); - plots1D.get("pos_fake_track_phi0").fill(track_phi); - plots1D.get("pos_fake_track_d0").fill(track_d0); - plots1D.get("pos_fake_track_z0").fill(track_z0); - plots1D.get("pos_fake_track_C").fill(track_C); - - plots2D.get("pos_fake_track_v_matched_mcp_momentum").fill(charge*trackPmag,((int)mcp.getCharge())*mcp.getMomentum().magnitude()); - plots1D.get("pos_fake_track_n_mcps_on_track").fill(tt.getLayerHitsForAllMCPs().size()); - plots1D.get("pos_fake_track_n_hits").fill(tt.getNHits()); - plots1D.get("pos_fake_track_purity").fill(tt.getPurity()); - plots1D.get("pos_fake_track_n_goodhits").fill(tt.getNGoodHits()); - plots1D.get("pos_fake_track_n_badhits").fill(tt.getNBadHits()); - for(Integer layer : tt.getLayersOnTrack()){ - plots1D.get("pos_fake_track_layers_hit").fill(layer); - plots1D.get("pos_fake_track_n_mcps_on_layer").fill(tt.getMCPsOnLayer(layer).size()); - plots2D.get("pos_fake_track_n_mcps_per_layer").fill(layer,tt.getMCPsOnLayer(layer).size()); - plots1D.get("pos_fake_track_n_striphits_on_layer").fill(tt.getStripHitsOnLayer(layer).size()); - plots2D.get("pos_fake_track_n_striphits_per_layer").fill(layer,tt.getStripHitsOnLayer(layer).size()); - for(RawTrackerHit rawhit : tt.getStripHitsOnLayer(layer)){ - plots1D.get("pos_fake_track_n_mcps_on_striphit").fill(tt.getMCPsOnRawTrackerHit(rawhit).size()); - plots2D.get("pos_fake_track_n_mcps_on_layer_striphits").fill(layer,tt.getMCPsOnRawTrackerHit(rawhit).size()); - } - } - - } + + plots1D.get(chTag+"_fake_track_momentum").fill(trackPmag); + plots1D.get(chTag+"_fake_track_tanlambda").fill(tanlambda); + plots1D.get(chTag+"_fake_track_phi0").fill(track_phi); + plots1D.get(chTag+"_fake_track_time").fill(track_time); + plots1D.get(chTag+"_fake_track_d0").fill(track_d0); + plots1D.get(chTag+"_fake_track_z0").fill(track_z0); + plots1D.get(chTag+"_fake_track_C").fill(track_C); + + plots2D.get(chTag+"_fake_track_v_matched_mcp_momentum").fill(charge*trackPmag,((int)mcp.getCharge())*mcp.getMomentum().magnitude()); + plots1D.get(chTag+"_fake_track_n_mcps_on_track").fill(tt.getLayerHitsForAllMCPs().size()); + plots1D.get(chTag+"_fake_track_n_hits").fill(tt.getNHits()); + plots1D.get(chTag+"_fake_track_purity").fill(tt.getPurity()); + plots1D.get(chTag+"_fake_track_n_goodhits").fill(tt.getNGoodHits()); + plots1D.get(chTag+"_fake_track_n_badhits").fill(tt.getNBadHits()); + for(Integer layer : tt.getLayersOnTrack()){ + plots1D.get(chTag+"_fake_track_layers_hit").fill(layer); + plots1D.get(chTag+"_fake_track_n_mcps_on_layer").fill(tt.getMCPsOnLayer(layer).size()); + plots2D.get(chTag+"_fake_track_n_mcps_per_layer").fill(layer,tt.getMCPsOnLayer(layer).size()); + plots1D.get(chTag+"_fake_track_n_striphits_on_layer").fill(tt.getStripHitsOnLayer(layer).size()); + plots2D.get(chTag+"_fake_track_n_striphits_per_layer").fill(layer,tt.getStripHitsOnLayer(layer).size()); + for(RawTrackerHit rawhit : tt.getStripHitsOnLayer(layer)){ + plots1D.get(chTag+"_fake_track_n_mcps_on_striphit").fill(tt.getMCPsOnRawTrackerHit(rawhit).size()); + plots2D.get(chTag+"_fake_track_n_mcps_on_layer_striphits").fill(layer,tt.getMCPsOnRawTrackerHit(rawhit).size()); + } + } + } //If Track is real if(realTrack){ - if(charge < 0){ - if(!mcps.contains(mcp)){ - plots1D.get("ele_real_track_momentum").fill(trackPmag); - plots1D.get("ele_real_track_tanlambda").fill(tanlambda); - plots1D.get("ele_real_track_phi0").fill(track_phi); - plots1D.get("ele_real_track_d0").fill(track_d0); - plots1D.get("ele_real_track_z0").fill(track_z0); - plots1D.get("ele_real_track_C").fill(track_C); - } - - else{ - plots1D.get("ele_real_duplicate_tracks_momentum").fill(trackPmag); - plots1D.get("ele_real_duplicate_tracks_tanlambda").fill(tanlambda); - plots1D.get("ele_real_duplicate_tracks_phi0").fill(track_phi); - plots1D.get("ele_real_duplicate_tracks_d0").fill(track_d0); - plots1D.get("ele_real_duplicate_tracks_z0").fill(track_z0); - plots1D.get("ele_real_duplicate_tracks_C").fill(track_C); - } - - plots2D.get("ele_real_track_v_matched_mcp_momentum").fill(charge*trackPmag,((int)mcp.getCharge())*mcp.getMomentum().magnitude()); - plots1D.get("ele_real_track_n_mcps_on_track").fill(tt.getLayerHitsForAllMCPs().size()); - plots1D.get("ele_real_track_n_hits").fill(tt.getNHits()); - plots1D.get("ele_real_track_purity").fill(tt.getPurity()); - plots1D.get("ele_real_track_n_goodhits").fill(tt.getNGoodHits()); - plots1D.get("ele_real_track_n_badhits").fill(tt.getNBadHits()); - for(Integer layer : tt.getLayersOnTrack()){ - plots1D.get("ele_real_track_layers_hit").fill(layer); - plots1D.get("ele_real_track_n_mcps_on_layer").fill(tt.getMCPsOnLayer(layer).size()); - plots2D.get("ele_real_track_n_mcps_per_layer").fill(layer,tt.getMCPsOnLayer(layer).size()); - plots1D.get("ele_real_track_n_striphits_on_layer").fill(tt.getStripHitsOnLayer(layer).size()); - plots2D.get("ele_real_track_n_striphits_per_layer").fill(layer,tt.getStripHitsOnLayer(layer).size()); - for(RawTrackerHit rawhit : tt.getStripHitsOnLayer(layer)){ - plots1D.get("ele_real_track_n_mcps_on_striphit").fill(tt.getMCPsOnRawTrackerHit(rawhit).size()); - plots2D.get("ele_real_track_n_mcps_on_layer_striphits").fill(layer,tt.getMCPsOnRawTrackerHit(rawhit).size()); - } - } - - //plot good and bad hit layers - for(Integer layer : tt.getGoodHitLayers()){ - plots1D.get("ele_real_track_good_hit_layers").fill(layer); - } - for(Integer layer : tt.getBadHitLayers()){ - plots1D.get("ele_real_track_bad_hit_layers").fill(layer); - } - } - - else{ - if(!mcps.contains(mcp)){ - plots1D.get("pos_real_track_momentum").fill(trackPmag); - plots1D.get("pos_real_track_tanlambda").fill(tanlambda); - plots1D.get("pos_real_track_phi0").fill(track_phi); - plots1D.get("pos_real_track_d0").fill(track_d0); - plots1D.get("pos_real_track_z0").fill(track_z0); - plots1D.get("pos_real_track_C").fill(track_C); - } - - else{ - plots1D.get("pos_real_duplicate_tracks_momentum").fill(trackPmag); - plots1D.get("pos_real_duplicate_tracks_tanlambda").fill(tanlambda); - plots1D.get("pos_real_duplicate_tracks_phi0").fill(track_phi); - plots1D.get("pos_real_duplicate_tracks_d0").fill(track_d0); - plots1D.get("pos_real_duplicate_tracks_z0").fill(track_z0); - plots1D.get("pos_real_duplicate_tracks_C").fill(track_C); - } - - plots2D.get("pos_real_track_v_matched_mcp_momentum").fill(charge*trackPmag,((int)mcp.getCharge())*mcp.getMomentum().magnitude()); - plots1D.get("pos_real_track_n_mcps_on_track").fill(tt.getLayerHitsForAllMCPs().size()); - plots1D.get("pos_real_track_n_hits").fill(tt.getNHits()); - plots1D.get("pos_real_track_purity").fill(tt.getPurity()); - plots1D.get("pos_real_track_n_goodhits").fill(tt.getNGoodHits()); - plots1D.get("pos_real_track_n_badhits").fill(tt.getNBadHits()); - for(Integer layer : tt.getLayersOnTrack()){ - plots1D.get("pos_real_track_layers_hit").fill(layer); - plots1D.get("pos_real_track_n_mcps_on_layer").fill(tt.getMCPsOnLayer(layer).size()); - plots2D.get("pos_real_track_n_mcps_per_layer").fill(layer,tt.getMCPsOnLayer(layer).size()); - plots1D.get("pos_real_track_n_striphits_on_layer").fill(tt.getStripHitsOnLayer(layer).size()); - plots2D.get("pos_real_track_n_striphits_per_layer").fill(layer,tt.getStripHitsOnLayer(layer).size()); - for(RawTrackerHit rawhit : tt.getStripHitsOnLayer(layer)){ - plots1D.get("pos_real_track_n_mcps_on_striphit").fill(tt.getMCPsOnRawTrackerHit(rawhit).size()); - plots2D.get("pos_real_track_n_mcps_on_layer_striphits").fill(layer,tt.getMCPsOnRawTrackerHit(rawhit).size()); - } - } - - //plot good and bad hit layers - for(Integer layer : tt.getGoodHitLayers()){ - plots1D.get("pos_real_track_good_hit_layers").fill(layer); - } - for(Integer layer : tt.getBadHitLayers()){ - plots1D.get("pos_real_track_bad_hit_layers").fill(layer); - } - } - - //MCP based plots - - //Explicity require fill numerator with subset of - //denominator + if(!mcps.contains(mcp)){ + plots1D.get(chTag+"_real_track_momentum").fill(trackPmag); + plots1D.get(chTag+"_real_track_tanlambda").fill(tanlambda); + plots1D.get(chTag+"_real_track_phi0").fill(track_phi); + plots1D.get(chTag+"_real_track_time").fill(track_time); + plots1D.get(chTag+"_real_track_d0").fill(track_d0); + plots1D.get(chTag+"_real_track_z0").fill(track_z0); + plots1D.get(chTag+"_real_track_C").fill(track_C); + } + + else{ + plots1D.get(chTag+"_real_duplicate_tracks_momentum").fill(trackPmag); + plots1D.get(chTag+"_real_duplicate_tracks_tanlambda").fill(tanlambda); + plots1D.get(chTag+"_real_duplicate_tracks_phi0").fill(track_phi); + plots1D.get(chTag+"_real_duplicate_tracks_time").fill(track_time); + plots1D.get(chTag+"_real_duplicate_tracks_d0").fill(track_d0); + plots1D.get(chTag+"_real_duplicate_tracks_z0").fill(track_z0); + plots1D.get(chTag+"_real_duplicate_tracks_C").fill(track_C); + } + + plots2D.get(chTag+"_real_track_v_matched_mcp_momentum").fill(charge*trackPmag,((int)mcp.getCharge())*mcp.getMomentum().magnitude()); + plots1D.get(chTag+"_real_track_n_mcps_on_track").fill(tt.getLayerHitsForAllMCPs().size()); + plots1D.get(chTag+"_real_track_n_hits").fill(tt.getNHits()); + plots1D.get(chTag+"_real_track_purity").fill(tt.getPurity()); + plots1D.get(chTag+"_real_track_n_goodhits").fill(tt.getNGoodHits()); + plots1D.get(chTag+"_real_track_n_badhits").fill(tt.getNBadHits()); + for(Integer layer : tt.getLayersOnTrack()){ + plots1D.get(chTag+"_real_track_layers_hit").fill(layer); + plots1D.get(chTag+"_real_track_n_mcps_on_layer").fill(tt.getMCPsOnLayer(layer).size()); + plots2D.get(chTag+"_real_track_n_mcps_per_layer").fill(layer,tt.getMCPsOnLayer(layer).size()); + plots1D.get(chTag+"_real_track_n_striphits_on_layer").fill(tt.getStripHitsOnLayer(layer).size()); + plots2D.get(chTag+"_real_track_n_striphits_per_layer").fill(layer,tt.getStripHitsOnLayer(layer).size()); + for(RawTrackerHit rawhit : tt.getStripHitsOnLayer(layer)){ + plots1D.get(chTag+"_real_track_n_mcps_on_striphit").fill(tt.getMCPsOnRawTrackerHit(rawhit).size()); + plots2D.get(chTag+"_real_track_n_mcps_on_layer_striphits").fill(layer,tt.getMCPsOnRawTrackerHit(rawhit).size()); + } + } + + //plot good and bad hit layers + for(Integer layer : tt.getGoodHitLayers()){ + plots1D.get(chTag+"_real_track_good_hit_layers").fill(layer); + } + for(Integer layer : tt.getBadHitLayers()){ + plots1D.get(chTag+"_real_track_bad_hit_layers").fill(layer); + } + + + //MCP based plots requiring trackable tracks (mc hits on layers > nHitsRequired) + //Explicity require fill numerator with subset of denominator + //the denominators are labeled "trackable-track" + // NOTE: this is kinda confusing, think about new labeling if(trackableMCPMap.containsKey(mcp) ){ - if(mcp.getCharge() < 0){ - if(!mcps.contains(mcp)){ - plots1D.get("ele_real_track_mcp_momentum").fill(mcp.getMomentum().magnitude()); - plots1D.get("ele_real_track_mcp_tanlambda").fill(mcp_slope); - plots1D.get("ele_real_track_mcp_phi0").fill(mcp_phi); - plots1D.get("ele_real_track_mcp_d0").fill(mcp_d0); - plots1D.get("ele_real_track_mcp_z0").fill(mcp_z0); - plots1D.get("ele_real_track_mcp_C").fill(mcp_C); - if(nHits >= 12) - plots1D.get("ele_real_track_nhits_gteq_12_mcp_momentum").fill(mcp.getMomentum().magnitude()); - } - - else{ - plots1D.get("ele_real_duplicate_tracks_mcp_momentum").fill(mcp.getMomentum().magnitude()); - plots1D.get("ele_real_duplicate_tracks_mcp_tanlambda").fill(mcp_slope); - plots1D.get("ele_real_duplicate_tracks_mcp_phi0").fill(mcp_phi); - plots1D.get("ele_real_duplicate_tracks_mcp_d0").fill(mcp_d0); - plots1D.get("ele_real_duplicate_tracks_mcp_z0").fill(mcp_z0); - plots1D.get("ele_real_duplicate_tracks_mcp_C").fill(mcp_C); - } - } - else{ - if(!mcps.contains(mcp)){ - if(nHits >= 12) - plots1D.get("pos_real_track_nhits_gteq_12_mcp_momentum").fill(mcp.getMomentum().magnitude()); - plots1D.get("pos_real_track_mcp_momentum").fill(mcp.getMomentum().magnitude()); - plots1D.get("pos_real_track_mcp_tanlambda").fill(mcp_slope); - plots1D.get("pos_real_track_mcp_phi0").fill(mcp_phi); - plots1D.get("pos_real_track_mcp_d0").fill(mcp_d0); - plots1D.get("pos_real_track_mcp_z0").fill(mcp_z0); - plots1D.get("pos_real_track_mcp_C").fill(mcp_C); - } - else{ - plots1D.get("pos_real_duplicate_tracks_mcp_momentum").fill(mcp.getMomentum().magnitude()); - plots1D.get("pos_real_duplicate_tracks_mcp_tanlambda").fill(mcp_slope); - plots1D.get("pos_real_duplicate_tracks_mcp_phi0").fill(mcp_phi); - plots1D.get("pos_real_duplicate_tracks_mcp_d0").fill(mcp_d0); - plots1D.get("pos_real_duplicate_tracks_mcp_z0").fill(mcp_z0); - plots1D.get("pos_real_duplicate_tracks_mcp_C").fill(mcp_C); - } - } + + if(!mcps.contains(mcp)){ + plots1D.get(chTag+"_real_track_mcp_momentum").fill(mcp.getMomentum().magnitude()); + plots1D.get(chTag+"_real_track_mcp_tanlambda").fill(mcp_slope); + plots1D.get(chTag+"_real_track_mcp_phi0").fill(mcp_phi); + plots1D.get(chTag+"_real_track_mcp_d0").fill(mcp_d0); + plots1D.get(chTag+"_real_track_mcp_z0").fill(mcp_z0); + plots1D.get(chTag+"_real_track_mcp_C").fill(mcp_C); + + // do a layer accounting + // NOTE: this comes from tt so it requires that the track be found!!! + Set goodHitLayers=tt.getGoodHitLayers(); + Set badHitLayers=tt.getBadHitLayers(); + Set correctlyMissingLayers=tt.getCorrectlyMissingLayers(allsimhits); + Set wrongLayers=tt.getWrongHitLayers(allsimhits); + Set nonMCPLayers=tt.getNonMCPHitLayers(allsimhits); + Set missedLayers=tt.getMissedHitLayers(allsimhits); + Set mcpLayers=tt.getMCPHitLayers(allsimhits); + + boolean wrongL1=false; + boolean wrongL2=false; + + for(Integer layer : goodHitLayers){ + plots1D.get(chTag+"_real_track_mcp_good_hit_layers").fill(layer); + } + + for(Integer layer : badHitLayers){ + plots1D.get(chTag+"_real_track_mcp_bad_hit_layers").fill(layer); + } + + for(Integer layer : correctlyMissingLayers){ + plots1D.get(chTag+"_real_track_mcp_correctly_missing_hit_layers").fill(layer); + } + + for(Integer layer : wrongLayers){ + plots1D.get(chTag+"_real_track_mcp_wrong_hit_layers").fill(layer); + if (layer == 1) + wrongL1=true; + if (layer == 2) + wrongL2=true; + } + + for(Integer layer : nonMCPLayers){ + plots1D.get(chTag+"_real_track_mcp_no_mcp_hit_layers").fill(layer); + } + + for(Integer layer : missedLayers){ + plots1D.get(chTag+"_real_track_mcp_missed_hit_layers").fill(layer); + } + + for(Integer layer : mcpLayers){ + plots1D.get(chTag+"_real_track_mcp_all_hit_layers").fill(layer); + } + if(tt.getLayersOnTrack().contains(1) + && tt.getLayersOnTrack().contains(2)){ + String misTag="good_L1L2"; + if(wrongL1 && wrongL2) + misTag="bad_L1L2"; + else if(wrongL1) + misTag="bad_L1Only"; + else if(wrongL2) + misTag="bad_L2Only"; + + plots1D.get(chTag+"_real_trackable_track_"+misTag+"_momentum").fill(trackPmag); + plots1D.get(chTag+"_real_trackable_track_"+misTag+"_tanlambda").fill(tanlambda); + plots1D.get(chTag+"_real_trackable_track_"+misTag+"_phi0").fill(track_phi); + plots1D.get(chTag+"_real_trackable_track_"+misTag+"_time").fill(track_time); + plots1D.get(chTag+"_real_trackable_track_"+misTag+"_d0").fill(track_d0); + plots1D.get(chTag+"_real_trackable_track_"+misTag+"_z0").fill(track_z0); + plots1D.get(chTag+"_real_trackable_track_"+misTag+"_C").fill(track_C); + } + + if(nHits >= 12) + plots1D.get(chTag+"_real_track_nhits_gteq_12_mcp_momentum").fill(mcp.getMomentum().magnitude()); + } + + else{ + plots1D.get(chTag+"_real_duplicate_tracks_mcp_momentum").fill(mcp.getMomentum().magnitude()); + plots1D.get(chTag+"_real_duplicate_tracks_mcp_tanlambda").fill(mcp_slope); + plots1D.get(chTag+"_real_duplicate_tracks_mcp_phi0").fill(mcp_phi); + plots1D.get(chTag+"_real_duplicate_tracks_mcp_d0").fill(mcp_d0); + plots1D.get(chTag+"_real_duplicate_tracks_mcp_z0").fill(mcp_z0); + plots1D.get(chTag+"_real_duplicate_tracks_mcp_C").fill(mcp_C); + } } //Add this MCP to a list to check for duplicate Track->MCP //matches mcps.add(mcp); } - + //Add track<->truth relations for all Tracks matched to a MCP //with purity >= 0.5 - if(purity >= 0.5){ + if(purity >= purityCut){ //Add track to mcp relations trackToMCParticleRelations.add(new BaseLCRelation(track,mcp)); @@ -1531,8 +892,8 @@ protected void process(EventHeader event) { public double[] getMCPTrackParameters(MCParticle mcp, double bfield){ HelicalTrackFit mcp_htf = TrackUtils.getHTF(mcp,bfield); - if(enablePlots) - plots1D.get("mcp_helicalTrackFit_phi").fill(mcp_htf.phi0()); + // if(enablePlots) + // plots1D.get("mcp_helicalTrackFit_phi").fill(mcp_htf.phi0()); BaseTrack truth_trk = new BaseTrack(); truth_trk.setTrackParameters(mcp_htf.parameters(),bfield); truth_trk.getTrackStates().clear(); @@ -1564,7 +925,9 @@ public Map>> getTrackableMCPs(List< continue; int charge = (int) particle.getCharge(); - + String chTag="ele"; + if(charge>0) + chTag="pos"; //Fit MCP to helical track to get params double[] mcpParams = getMCPTrackParameters(particle, bfield); double d0 = mcpParams[0]; @@ -1578,46 +941,25 @@ public Map>> getTrackableMCPs(List< double pz = particle.getPZ(); //plots for all charged MCPs - if(charge < 0){ - plots1D.get("ele_mcp_px").fill(px); - plots1D.get("ele_mcp_py").fill(py); - plots1D.get("ele_mcp_pz").fill(pz); - plots2D.get("ele_mcp_px_v_py").fill(px,py); - plots2D.get("ele_mcp_px_v_pz").fill(px,pz); - plots2D.get("ele_mcp_py_v_pz").fill(py,pz); - - plots1D.get("ele_mcp_momentum").fill(momentum); - plots1D.get("ele_mcp_tanlambda").fill(tanlambda); - plots2D.get("ele_mcp_momentum_v_tanlambda").fill(momentum, tanlambda); - plots1D.get("ele_mcp_d0").fill(d0); - plots2D.get("ele_mcp_momentum_v_d0").fill(momentum, d0); - plots1D.get("ele_mcp_z0").fill(z0); - plots2D.get("ele_mcp_momentum_v_z0").fill(momentum, z0); - plots1D.get("ele_mcp_C").fill(C); - plots2D.get("ele_mcp_momentum_v_C").fill(momentum, C); - plots1D.get("ele_mcp_phi0").fill(phi0); - plots2D.get("ele_mcp_momentum_v_phi0").fill(momentum, phi0); - } - else{ - plots1D.get("pos_mcp_px").fill(px); - plots1D.get("pos_mcp_py").fill(py); - plots1D.get("pos_mcp_pz").fill(pz); - plots2D.get("pos_mcp_px_v_py").fill(px,py); - plots2D.get("pos_mcp_px_v_pz").fill(px,pz); - plots2D.get("pos_mcp_py_v_pz").fill(py,pz); - - plots1D.get("pos_mcp_momentum").fill(momentum); - plots1D.get("pos_mcp_tanlambda").fill(tanlambda); - plots2D.get("pos_mcp_momentum_v_tanlambda").fill(momentum, tanlambda); - plots1D.get("pos_mcp_d0").fill(d0); - plots2D.get("pos_mcp_momentum_v_d0").fill(momentum, d0); - plots1D.get("pos_mcp_z0").fill(z0); - plots2D.get("pos_mcp_momentum_v_z0").fill(momentum, z0); - plots1D.get("pos_mcp_C").fill(C); - plots2D.get("pos_mcp_momentum_v_C").fill(momentum, C); - plots1D.get("pos_mcp_phi0").fill(phi0); - plots2D.get("pos_mcp_momentum_v_phi0").fill(momentum, phi0); - } + + plots1D.get(chTag+"_mcp_px").fill(px); + plots1D.get(chTag+"_mcp_py").fill(py); + plots1D.get(chTag+"_mcp_pz").fill(pz); + plots2D.get(chTag+"_mcp_px_v_py").fill(px,py); + plots2D.get(chTag+"_mcp_px_v_pz").fill(px,pz); + plots2D.get(chTag+"_mcp_py_v_pz").fill(py,pz); + + plots1D.get(chTag+"_mcp_momentum").fill(momentum); + plots1D.get(chTag+"_mcp_tanlambda").fill(tanlambda); + plots2D.get(chTag+"_mcp_momentum_v_tanlambda").fill(momentum, tanlambda); + plots1D.get(chTag+"_mcp_d0").fill(d0); + plots2D.get(chTag+"_mcp_momentum_v_d0").fill(momentum, d0); + plots1D.get(chTag+"_mcp_z0").fill(z0); + plots2D.get(chTag+"_mcp_momentum_v_z0").fill(momentum, z0); + plots1D.get(chTag+"_mcp_C").fill(C); + plots2D.get(chTag+"_mcp_momentum_v_C").fill(momentum, C); + plots1D.get(chTag+"_mcp_phi0").fill(phi0); + plots2D.get(chTag+"_mcp_momentum_v_phi0").fill(momentum, phi0); Map> layerhitsMap = new HashMap>(); for(SimTrackerHit simhit : simhits){ @@ -1639,41 +981,51 @@ public Map>> getTrackableMCPs(List< } //Check n layers hit - if(particle.getCharge() < 0) - plots2D.get("ele_mcp_momentum_v_nLayersHit").fill(particle.getMomentum().magnitude(), layerhitsMap.size()); - else - plots2D.get("pos_mcp_momentum_v_nLayersHit").fill(particle.getMomentum().magnitude(), layerhitsMap.size()); + plots2D.get(chTag+"_mcp_momentum_v_nLayersHit").fill(particle.getMomentum().magnitude(), layerhitsMap.size()); //Require minimum number of SimTrackerHits if(layerhitsMap.size() < NhitsRequired) continue; - if(particle.getCharge() < 0){ - plots1D.get("ele_trackable_mcp_nSimTrackerHits").fill(layerhitsMap.size()); - plots2D.get("ele_trackable_mcp_momentum_v_nSimTrackerHits").fill(particle.getMomentum().magnitude(), layerhitsMap.size()); - plots1D.get("ele_trackable_mcp_momentum").fill(particle.getMomentum().magnitude()); - plots1D.get("ele_trackable_mcp_tanlambda").fill(tanlambda); - plots1D.get("ele_trackable_mcp_phi0").fill(phi0); - plots1D.get("ele_trackable_mcp_d0").fill(d0); - plots1D.get("ele_trackable_mcp_z0").fill(z0); - plots1D.get("ele_trackable_mcp_C").fill(C); - } - else{ - plots1D.get("pos_trackable_mcp_nSimTrackerHits").fill(layerhitsMap.size()); - plots2D.get("pos_trackable_mcp_momentum_v_nSimTrackerHits").fill(particle.getMomentum().magnitude(), layerhitsMap.size()); - plots1D.get("pos_trackable_mcp_momentum").fill(particle.getMomentum().magnitude()); - plots1D.get("pos_trackable_mcp_tanlambda").fill(tanlambda); - plots1D.get("pos_trackable_mcp_phi0").fill(phi0); - plots1D.get("pos_trackable_mcp_d0").fill(d0); - plots1D.get("pos_trackable_mcp_z0").fill(z0); - plots1D.get("pos_trackable_mcp_C").fill(C); - } + + plots1D.get(chTag+"_trackable_track_mcp_nSimTrackerHits").fill(layerhitsMap.size()); + plots2D.get(chTag+"_trackable_track_mcp_momentum_v_nSimTrackerHits").fill(particle.getMomentum().magnitude(), layerhitsMap.size()); + plots1D.get(chTag+"_trackable_track_mcp_momentum").fill(particle.getMomentum().magnitude()); + plots1D.get(chTag+"_trackable_track_mcp_tanlambda").fill(tanlambda); + plots1D.get(chTag+"_trackable_track_mcp_phi0").fill(phi0); + plots1D.get(chTag+"_trackable_track_mcp_d0").fill(d0); + plots1D.get(chTag+"_trackable_track_mcp_z0").fill(z0); + plots1D.get(chTag+"_trackable_track_mcp_C").fill(C); + for (Integer layer : layerhitsMap.keySet()) + plots1D.get(chTag+"_trackable_track_all_mcp_layers_hit").fill(layer); trackableMCPs.put(particle, layerhitsMap); } return trackableMCPs; } + /* + public void getLayersHitByMCParticle(MCParticle particle, List simhits){ + Map> layerhitsMap = new HashMap>(); + for(SimTrackerHit simhit : simhits){ + MCParticle simhitmcp = simhit.getMCParticle(); + if(simhitmcp == particle){ + int layer = simhit.getLayer(); + Set rawhits = rawtomc.allTo(simhit); + if(!layerhitsMap.containsKey(layer)){ + List tmp = new ArrayList(); + tmp.add(simhit); + layerhitsMap.put(layer, tmp); + } + else{ + List tmp = layerhitsMap.get(layer); + tmp.add(simhit); + layerhitsMap.put(layer, tmp); + } + } + } + } + */ /* public void getTrackStateAtEachLayer(){ List sensors = detector.getSubdetector("Tracker").getDetectorElement().findDescendants(HpsSiSensor.class); diff --git a/steering-files/src/main/resources/org/hps/steering/recon/PhysicsRun2021MCRecon_KF_WithSpacing_pass3.lcsim b/steering-files/src/main/resources/org/hps/steering/recon/PhysicsRun2021MCRecon_KF_WithSpacing_pass3.lcsim index d079056db..f8f185712 100644 --- a/steering-files/src/main/resources/org/hps/steering/recon/PhysicsRun2021MCRecon_KF_WithSpacing_pass3.lcsim +++ b/steering-files/src/main/resources/org/hps/steering/recon/PhysicsRun2021MCRecon_KF_WithSpacing_pass3.lcsim @@ -154,7 +154,8 @@ 38.0487 3.98915 11.777395 - 0 + 10 + 9 3 3 39.95028 diff --git a/steering-files/src/main/resources/org/hps/steering/recon/PhysicsRun2021MCRecon_KF_WithSpacing_pass3_withplots.lcsim b/steering-files/src/main/resources/org/hps/steering/recon/PhysicsRun2021MCRecon_KF_WithSpacing_pass3_withplots.lcsim new file mode 100644 index 000000000..a972b8315 --- /dev/null +++ b/steering-files/src/main/resources/org/hps/steering/recon/PhysicsRun2021MCRecon_KF_WithSpacing_pass3_withplots.lcsim @@ -0,0 +1,225 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + EcalCalHits EcalClusters EcalClustersCorr FinalStateParticles UnconstrainedMollerCandidates UnconstrainedMollerVertices UnconstrainedV0Candidates UnconstrainedV0Vertices TargetConstrainedMollerCandidates TargetConstrainedMollerVertices TargetConstrainedV0Candidates TargetConstrainedV0Vertices BeamspotConstrainedMollerCandidates BeamspotConstrainedMollerVertices BeamspotConstrainedV0Candidates BeamspotConstrainedV0Vertices GBLKinkData GBLKinkDataRelations MatchedToGBLTrackRelations HelicalTrackHits HelicalTrackHitRelations MatchedTracks GBLTracks MatchedToGBLTrackRelations PartialTracks RotatedHelicalTrackHits RotatedHelicalTrackHitRelations SVTFittedRawTrackerHits SVTShapeFitParameters StripClusterer_SiTrackerHitStrip1D TrackData TrackDataRelations TrackResiduals TrackResidualsRelations + + + 1000 + + + + + + WARNING + EcalClusters + + + EcalClusters + EcalClustersCorr + + + + HodoscopeReadoutHits + CONFIG + true + + + true + HodoscopeReadoutHits + 8 + CONFIG + true + + + + + SVTRawTrackerHits + + + + .5 + 1 + Pileup + Migrad + + true + + + + 155 + + true + + true + + false + + true + + false + + false + true + false + + + + 24.0 + 3.0 + false + 400 + 4.0 + 1.0 + 3.0 + 3.0 + true + true + false + + + + EcalClustersCorr + KalmanFullTracks + KalmanFullTracks + TrackClusterMatcherMinDistance + UnconstrainedV0Candidates_KF + UnconstrainedV0Vertices_KF + BeamspotConstrainedV0Candidates_KF + BeamspotConstrainedV0Vertices_KF + TargetConstrainedV0Candidates_KF + TargetConstrainedV0Vertices_KF + FinalStateParticles_KF + OtherElectrons_KF + true + 0.0 + 0.3 + 0.0 + 0.02 + -0.5 + 25 + 40 + false + 0.0 + 40.0 + 7.0 + 7.0 + false + false + true + true + true + false + true + UnconstrainedMollerCandidates_KF + UnconstrainedMollerVertices_KF + BeamspotConstrainedMollerCandidates_KF + BeamspotConstrainedMollerVertices_KF + TargetConstrainedMollerCandidates_KF + TargetConstrainedMollerVertices_KF + + + + 3 + 1 + 8.757651 + 38.0487 + 3.98915 + 11.777395 + ${minHitsTopIterOne} + ${minHitsBotIterOne} + + + 3 + 3 + ${maxTimeRange} + 8.186345 + + 13.52662 + 7.00678 + + 9.771546584 + 1.7652935 + 5 + false + 466 + .725912 + + -0.5 + 0.5 + 0.0 + 0.3 + 0.0 + 0.02 + 7.204329 + false + + + + + KalmanFullTracks + true + false + + + + + ${outputFile}.slcio + + + + + ${outputFile}.root + false + 0.9 + + KalmanFullTracks + 5 + 0.1 + 4.8 + 9999 + true + + false + + + + + diff --git a/tracking/src/main/java/org/hps/recon/tracking/kalman/KFOutputDriver.java b/tracking/src/main/java/org/hps/recon/tracking/kalman/KFOutputDriver.java index a3ec010ec..dda774901 100644 --- a/tracking/src/main/java/org/hps/recon/tracking/kalman/KFOutputDriver.java +++ b/tracking/src/main/java/org/hps/recon/tracking/kalman/KFOutputDriver.java @@ -12,6 +12,8 @@ import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; +import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHit; +import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHitStrip1D; import org.hps.recon.tracking.FittedRawTrackerHit; import org.hps.recon.tracking.ShapeFitParameters; @@ -32,6 +34,7 @@ import org.lcsim.event.TrackState; import org.lcsim.event.base.BaseTrackState; import org.lcsim.event.TrackerHit; +import org.lcsim.event.base.BaseTrackerHit; import org.lcsim.event.base.BaseRelationalTable; import org.lcsim.fit.helicaltrack.HelicalTrackCross; import org.lcsim.geometry.Detector; @@ -63,8 +66,11 @@ public class KFOutputDriver extends Driver { private String trackResidualsRelColName = "KFUnbiasResRelations"; private Map fittedRawTrackerHitMap = new HashMap(); private String fittedHitsCollectionName = "SVTFittedRawTrackerHits"; + private String siHitsCollectionName = "StripClusterer_SiTrackerHitStrip1D"; + // private String dataRelationCollection = KFKinkData.DATA_RELATION_COLLECTION; - List _fittedHits; + List _fittedHits; + List _siClusters; private List sensors = new ArrayList(); private double bfield; public boolean debug = false; @@ -102,7 +108,7 @@ public class KFOutputDriver extends Driver { private int nHits = 10; - private boolean useParticles = true; + private boolean useParticles = false; private Pair _trkTimeSigma; @@ -236,6 +242,8 @@ public void process(EventHeader event) { if(b_doRawHitPlots){ // Get the list of fitted hits from the event _fittedHits = event.get(LCRelation.class, fittedHitsCollectionName); + _siClusters=event.get(SiTrackerHitStrip1D.class, siHitsCollectionName); + this.mapFittedRawHits(_fittedHits); } int TrackType = 0; if (!useParticles) { @@ -349,8 +357,8 @@ public void process(EventHeader event) { if (useParticles) doEoPPlots(trk,TrackClusterPairs.get(trk)); - - + if (b_doRawHitPlots) + doAllHits(); } } @@ -380,14 +388,14 @@ private void doEoPPlots(Track track, Cluster cluster) { aidaKF.histogram1D(trkpFolder+"trk-cluTime_"+charge+"_"+vol).fill(trkCluTime); aidaKF.histogram1D(trkpFolder+"trk-cluTime_"+vol).fill(trkCluTime); - aidaKF.histogram2D(eopFolder+"EoP_vs_trackP_"+charge+"_"+vol).fill(trackp,eop); - aidaKF.histogram2D(eopFolder+"EoP_vs_tanLambda_"+charge+"_"+vol).fill(tanL,eop); - aidaKF.histogram2D(eopFolder+"EoP_vs_phi_"+charge+"_"+vol).fill(phi,eop); - - aidaKF.histogram2D(eopFolder+"EoP_vs_tanLambda").fill(tanL,eop); - aidaKF.histogram2D(eopFolder+"EoP_vs_phi").fill(phi,eop); - - // aidaKF.histogram3D(eopFolder+"EoP_vs_tanLambda_phi").fill(tanL, + aidaKF.histogram2D(eopFolder+"EoP_vs_trackP_"+charge+"_"+vol).fill(trackp,eop); + aidaKF.histogram2D(eopFolder+"EoP_vs_tanLambda_"+charge+"_"+vol).fill(tanL,eop); + aidaKF.histogram2D(eopFolder+"EoP_vs_phi_"+charge+"_"+vol).fill(phi,eop); + + aidaKF.histogram2D(eopFolder+"EoP_vs_tanLambda").fill(tanL,eop); + aidaKF.histogram2D(eopFolder+"EoP_vs_phi").fill(phi,eop); + + // aidaKF.histogram3D(eopFolder+"EoP_vs_tanLambda_phi").fill(tanL, // phi, // eop); @@ -549,7 +557,31 @@ private void FillKFTrackPlot(String str, String isTop, String charge, double val */ + private void doAllHits(){ + + // Map the fitted hits to their corresponding raw hits + // private Map fittedRawTrackerHitMap = new HashMap(); + for (Map.Entry entry : fittedRawTrackerHitMap.entrySet()) { + LCRelation fitRth=entry.getValue(); + RawTrackerHit rth=entry.getKey(); + HpsSiSensor sensor = (HpsSiSensor) rth.getDetectorElement(); + double t0 = FittedRawTrackerHit.getT0(fitRth); + double amplitude = FittedRawTrackerHit.getAmp(fitRth); + double chi2Prob = ShapeFitParameters.getChiProb(FittedRawTrackerHit.getShapeFitParameters(fitRth)); + aidaKF.histogram1D(hitFolder+"all_hits_raw_hit_t0_"+sensor.getName()).fill(t0); + aidaKF.histogram1D(hitFolder+"all_hits_raw_hit_amplitude_"+sensor.getName()).fill(amplitude); + aidaKF.histogram1D(hitFolder+"all_hits_raw_hit_chisq_"+sensor.getName()).fill(chi2Prob); + } + + for(TrackerHit cl: _siClusters){ + List rawhits = cl.getRawHits(); + HpsSiSensor sensor = (HpsSiSensor) rawhits.get(0).getDetectorElement(); + // HpsSiSensor sensor = (HpsSiSensor)((RawTrackerHit) (cl.getRawHits().get(0)).getDetectorElement()); + aidaKF.histogram1D(hitFolder+"all_cluster_hit_t0_"+sensor.getName()).fill(cl.getTime()); + } + } + private void doBasicKFtrack(Track trk, Map sensorHits) { TrackState trackState = trk.getTrackStates().get(0); @@ -631,6 +663,12 @@ private void doBasicKFtrack(Track trk, Map sensorHits) aidaKF.histogram1D(trkpFolder+"nHits" + isTop).fill(nhits); aidaKF.histogram1D(trkpFolder+"nHits" + isTop+charge).fill(nhits); + //fill the layers with hit on track + for(TrackerHit tkh: trk.getTrackerHits()){ + List rawhits = tkh.getRawHits(); + int stripLayer = ((HpsSiSensor) ((RawTrackerHit)rawhits.get(0)).getDetectorElement()).getLayerNumber(); + FillKFTrackPlot(trkpFolder+"LayersHit",isTop,charge,stripLayer); + } Hep3Vector beamspot = CoordinateTransformations.transformVectorToDetector(TrackUtils.extrapolateHelixToXPlane(trackState, 0)); if (debug) System.out.printf("beamspot %s transformed \n", beamspot.toString()); @@ -687,15 +725,14 @@ private void doBasicKFtrack(Track trk, Map sensorHits) } if(b_doRawHitPlots){ - - // Map the fitted hits to their corresponding raw hits - this.mapFittedRawHits(_fittedHits); + for(TrackerHit tkh: trk.getTrackerHits()){ List rawhits = tkh.getRawHits(); + HpsSiSensor sensor = (HpsSiSensor) rawhits.get(0).getDetectorElement(); + aidaKF.histogram1D(hitFolder+"cluster_hit_t0_"+sensor.getName()).fill(tkh.getTime()); for(RawTrackerHit rth: rawhits){ //need the rth->fited - HpsSiSensor sensor = (HpsSiSensor) rth.getDetectorElement(); double t0 = FittedRawTrackerHit.getT0(getFittedHit(rth)); double amplitude = FittedRawTrackerHit.getAmp(getFittedHit(rth)); double chi2Prob = ShapeFitParameters.getChiProb(FittedRawTrackerHit.getShapeFitParameters(getFittedHit(rth))); @@ -1153,7 +1190,15 @@ private void setupPlots() { aidaKF.histogram1D(hitFolder+"raw_hit_t0_"+sensor.getName(),200, -100, 100.0); aidaKF.histogram1D(hitFolder+"raw_hit_amplitude_"+sensor.getName(),200, 0.0, 4000.0); aidaKF.histogram1D(hitFolder+"raw_hit_chisq_"+sensor.getName(),200, 0.0, 2.0); - + + aidaKF.histogram1D(hitFolder+"all_hits_raw_hit_t0_"+sensor.getName(),200, -100, 100.0); + aidaKF.histogram1D(hitFolder+"all_hits_raw_hit_amplitude_"+sensor.getName(),200, 0.0, 4000.0); + aidaKF.histogram1D(hitFolder+"all_hits_raw_hit_chisq_"+sensor.getName(),200, 0.0, 2.0); + + + aidaKF.histogram1D(hitFolder+"cluster_hit_t0_"+sensor.getName(),200, -100, 100.0); + aidaKF.histogram1D(hitFolder+"all_cluster_hit_t0_"+sensor.getName(),200, -100, 100.0); + xmax = 0.0006; @@ -1187,7 +1232,7 @@ private void setupPlots() { //For momentum int nbins_p = 150; - double pmax = 4.; + double pmax = 4.5; double z0max = 1; double d0max = 5; @@ -1203,7 +1248,7 @@ private void setupPlots() { aidaKF.histogram1D(trkpFolder+"z0"+vol+charge,nbins_t,-1.3,1.3); aidaKF.histogram1D(trkpFolder+"phi"+vol+charge,nbins_t,-0.06,0.06); aidaKF.histogram1D(trkpFolder+"tanLambda"+vol+charge,nbins_t,-0.2,0.2); - aidaKF.histogram1D(trkpFolder+"trkTime"+vol+charge,nbins_t,-20,20); + aidaKF.histogram1D(trkpFolder+"trkTime"+vol+charge,nbins_t,-100,100); aidaKF.histogram1D(trkpFolder+"trkTimeSD"+vol+charge,nbins_t,0,10); aidaKF.histogram1D(trkpFolder+"p"+vol+charge,nbins_p,0.,pmax); @@ -1217,6 +1262,7 @@ private void setupPlots() { aidaKF.histogram1D(trkpFolder+"Chi2"+vol+charge,nbins_t*2,0,200); aidaKF.histogram1D(trkpFolder+"Chi2oNDF"+vol+charge,nbins_t*2,0,50); aidaKF.histogram1D(trkpFolder+"nHits"+vol+charge,15,0,15); + aidaKF.histogram1D(trkpFolder+"LayersHit"+vol+charge,15,0,15); aidaKF.histogram1D(trkpFolder+"trk_extr_or_x"+vol+charge,nbins_t,-3,3); aidaKF.histogram1D(trkpFolder+"trk_extr_or_y"+vol+charge,nbins_t,-3,3); aidaKF.histogram1D(trkpFolder+"trk_extr_bs_x"+vol+charge, 2*nbins_t, -5, 5); diff --git a/tracking/src/main/java/org/hps/recon/tracking/kalman/KalmanParams.java b/tracking/src/main/java/org/hps/recon/tracking/kalman/KalmanParams.java index eb0bb209c..f11006b5c 100644 --- a/tracking/src/main/java/org/hps/recon/tracking/kalman/KalmanParams.java +++ b/tracking/src/main/java/org/hps/recon/tracking/kalman/KalmanParams.java @@ -18,7 +18,9 @@ public class KalmanParams { double[] dzMax; double[] chi2mx1; int minHits0; - int[] minHits1; + // int[] minHits1; + int[] minHitsTop; //separate minHits for top/bottom...minHits1 can go away + int[] minHitsBot; double mxChi2Inc; double minChi2IncBad; double mxChi2Vtx; @@ -65,7 +67,9 @@ public void print() { System.out.format(" Maximum dz at target plane for seeds: %8.2f, %8.2f (mm)\n", dzMax[0], dzMax[1]); System.out.format(" Maximum chi^2/hit for a good track: %8.2f, %8.2f\n", chi2mx1[0], chi2mx1[1]); System.out.format(" Minimum number of hits in the initial outward filtering: %d\n", minHits0); - System.out.format(" Minimum number of hits for a good track: %d, %d\n", minHits1[0], minHits1[1]); + // System.out.format(" Minimum number of hits for a good track: %d, %d\n", minHits1[0], minHits1[1]); + System.out.format(" Minimum number of hits for a good track in Top: %d, %d\n", minHitsTop[0], minHitsTop[1]); + System.out.format(" Minimum number of hits for a good track in Bottom: %d, %d\n", minHitsBot[0], minHitsBot[1]); System.out.format(" Minimum number of stereo hits: %d %d\n", minStereo[0], minStereo[1]); System.out.format(" Minimum number of axial hits: %d\n", minAxial); System.out.format(" Maximum chi^2 increment to add a hit to a track, or minimum to remove a hit: %8.2f\n", mxChi2Inc); @@ -108,7 +112,9 @@ public KalmanParams() { dRhoMax = new double[mxTrials]; dzMax = new double[mxTrials]; chi2mx1 = new double[mxTrials]; - minHits1 = new int[mxTrials]; + // minHits1 = new int[mxTrials]; + minHitsTop = new int[mxTrials]; + minHitsBot = new int[mxTrials]; mxResid = new double[mxTrials]; minStereo = new int[mxTrials]; @@ -137,8 +143,12 @@ public KalmanParams() { chi2mx1[1] = 32.0; mxChi2Vtx = 1.0; // Maximum chi**2 for 5-hit tracks with vertex constraint minHits0 = 5; // Minimum number of hits in the initial outward filtering (including 5 from the seed) - minHits1[0] = 7; // Minimum number of hits for a good track - minHits1[1] = 6; + // minHits1[0] = 7; // Minimum number of hits for a good track + // minHits1[1] = 6; + minHitsTop[0] = 7; // Minimum number of hits for a good track in Top + minHitsTop[1] = 6; + minHitsBot[0] = 7; // Minimum number of hits for a good track in Bottom + minHitsBot[1] = 6; mxChi2Inc = 10.; // Maximum increment to the chi^2 to add a hit to a completed track minChi2IncBad = 10.; // Threshold for removing a bad hit from a track candidate mxResid[0] = 50.; // Maximum residual, in units of detector resolution, for picking up a hit @@ -368,14 +378,67 @@ public void setMaxChi2Vtx(double xMx) { mxChi2Vtx = xMx; } - public void setMinHits(int minH) { + // public void setMinHits(int minH) { + // if (minH < 5) { + // logger.log(Level.WARNING,String.format("Minimum number of hits = %d not allowed.", minH)); + // return; + // } + // logger.log(Level.CONFIG,String.format("Setting the minimum number of hits to %d.", minH)); + // minHits1[1] = minH; + // minHits1[0] = Math.max(minHits1[0], minH+1); + // } + // public void setMinHits1(int minH) { + // if (minH < 5) { + // logger.log(Level.WARNING,String.format("Minimum number of hits = %d not allowed.", minH)); + // return; + // } + // logger.log(Level.CONFIG,String.format("Setting the minimum number of hits for first iteration to %d.", minH)); + // minHits1[0] = minH; + // } + + // public void setMinHits2(int minH) { + // if (minH < 5) { + // logger.log(Level.WARNING,String.format("Minimum number of hits = %d not allowed.", minH)); + // return; + // } + // logger.log(Level.CONFIG,String.format("Setting the minimum number of hits for second iteration to %d.", minH)); + // minHits1[1] = minH; + // } + + public void setMinHitsTopIter1(int minH) { + if (minH < 5) { + logger.log(Level.WARNING,String.format("Minimum number of hits = %d not allowed.", minH)); + return; + } + logger.log(Level.CONFIG,String.format("Setting the minimum number of hits for top: first iteration to %d.", minH)); + minHitsTop[0] = minH; + } + + public void setMinHitsTopIter2(int minH) { + if (minH < 5) { + logger.log(Level.WARNING,String.format("Minimum number of hits = %d not allowed.", minH)); + return; + } + logger.log(Level.CONFIG,String.format("Setting the minimum number of hits for top: second iteration to %d.", minH)); + minHitsTop[1] = minH; + } + + public void setMinHitsBotIter1(int minH) { + if (minH < 5) { + logger.log(Level.WARNING,String.format("Minimum number of hits = %d not allowed.", minH)); + return; + } + logger.log(Level.CONFIG,String.format("Setting the minimum number of hits for bot: first iteration to %d.", minH)); + minHitsBot[0] = minH; + } + + public void setMinHitsBotIter2(int minH) { if (minH < 5) { logger.log(Level.WARNING,String.format("Minimum number of hits = %d not allowed.", minH)); return; } - logger.log(Level.CONFIG,String.format("Setting the minimum number of hits to %d.", minH)); - minHits1[1] = minH; - minHits1[0] = Math.max(minHits1[0], minH+1); + logger.log(Level.CONFIG,String.format("Setting the minimum number of hits for bot: second iteration to %d.", minH)); + minHitsBot[1] = minH; } public void setMinStereo(int minS) { diff --git a/tracking/src/main/java/org/hps/recon/tracking/kalman/KalmanPatRecDriver.java b/tracking/src/main/java/org/hps/recon/tracking/kalman/KalmanPatRecDriver.java index 9118deb45..0fbf7e927 100644 --- a/tracking/src/main/java/org/hps/recon/tracking/kalman/KalmanPatRecDriver.java +++ b/tracking/src/main/java/org/hps/recon/tracking/kalman/KalmanPatRecDriver.java @@ -74,7 +74,11 @@ public class KalmanPatRecDriver extends Driver { private double maxD0; // Maximum dRho (or D0) at the target plane for a seed and the final track private double maxZ0; // Maximum dz (or Z0) at the target plane for a seed and the final track private double maxChi2; // Maximum Kalman chi^2 per hit for a track candidate - private int minHits; // Minimum number of hits on a track + // private int minHits; // Minimum number of hits on a track + private int minHitsTopIter1; // Minimum number of hits on a track--top, first iteration + private int minHitsTopIter2; // Minimum number of hits on a track--top, second iteration + private int minHitsBotIter1; // Minimum number of hits on a track--bottom, first iteration + private int minHitsBotIter2; // Minimum number of hits on a track--bottom, second iteration private int minStereo; // Minimum number of stereo hits on a track private int maxSharedHits; // Maximum number of hits on a track that are shared with another track private double maxTimeRange; // Maximum time range in ns spanned by all the hits on a track @@ -220,7 +224,11 @@ public void detectorChanged(Detector det) { if (maxD0 != 0.0) kPar.setMaxdRho(maxD0); if (maxZ0 != 0.0) kPar.setMaxdZ(maxZ0); if (maxChi2 != 0.0) kPar.setMaxChi2(maxChi2); - if (minHits != 0) kPar.setMinHits(minHits); + // if (minHits != 0) kPar.setMinHits(minHits); + if (minHitsTopIter1 != 0) kPar.setMinHitsTopIter1(minHitsTopIter1); + if (minHitsTopIter2 != 0) kPar.setMinHitsTopIter2(minHitsTopIter2); + if (minHitsBotIter1 != 0) kPar.setMinHitsBotIter1(minHitsBotIter1); + if (minHitsBotIter2 != 0) kPar.setMinHitsBotIter2(minHitsBotIter2); if (minStereo != 0) kPar.setMinStereo(minStereo); if (maxSharedHits != 0) kPar.setMaxShared(maxSharedHits); if (maxTimeRange != 0.0) kPar.setMaxTimeRange(maxTimeRange); @@ -646,9 +654,23 @@ public void setMaxZ0(double maxZ0) { public void setMaxChi2(double maxChi2) { this.maxChi2 = maxChi2; } - public void setMinHits(int minHits) { - this.minHits = minHits; + // public void setMinHits(int minHits) { + // this.minHits = minHits; + // } + public void setMinHitsTopIter1(int minHits) { + System.out.println("setting minHitsTopIter1 to"+minHits); + this.minHitsTopIter1 = minHits; } + public void setMinHitsTopIter2(int minHits) { + this.minHitsTopIter2 = minHits; + } + public void setMinHitsBotIter1(int minHits) { + System.out.println("setting minHitsBotIter1 to"+minHits); + this.minHitsBotIter1 = minHits; + } + public void setMinHitsBotIter2(int minHits) { + this.minHitsBotIter2 = minHits; + } public void setMinStereo(int minStereo) { this.minStereo = minStereo; } diff --git a/tracking/src/main/java/org/hps/recon/tracking/kalman/KalmanPatRecHPS.java b/tracking/src/main/java/org/hps/recon/tracking/kalman/KalmanPatRecHPS.java index 1e66fb744..5210cd3a4 100644 --- a/tracking/src/main/java/org/hps/recon/tracking/kalman/KalmanPatRecHPS.java +++ b/tracking/src/main/java/org/hps/recon/tracking/kalman/KalmanPatRecHPS.java @@ -61,7 +61,7 @@ class KalmanPatRecHPS { private Plane p0; private static long startTime; static int [] nBadCov = {0, 0}; - private ArrayList candidateList; + private ArrayList candidateList; KalmanPatRecHPS(KalmanParams kPar) { startTime = (long)0.; @@ -202,8 +202,12 @@ ArrayList kalmanPatRec(EventHeader event, Map } } candidateList.clear(); + int minHits1=kPar.minHitsBot[trial]; + if(topBottom == 1) //it's the top, so get minHitsTop + minHits1=kPar.minHitsTop[trial]; + for (int iList = 0; iList kPar.maxListIter1) break; + if (trial == 0 && iList > kPar.maxListIter1) break; int[] list = kPar.lyrList[topBottom].get(iList); int nLyrs = list.length; int middleLyr = 2; @@ -571,10 +575,10 @@ ArrayList kalmanPatRec(EventHeader event, Map } candidateList.add(candidateTrack); // Save the candidate in this list - if (candidateTrack.hits.size() < kPar.minHits1[trial]) { + if (candidateTrack.hits.size() < minHits1) { if (debug) { System.out.format("KalmanPatRecHPS: Filtering of %d to layer 0 has too few hits, %d<%d. Skip to the next seed.\n", - candidateTrack.ID, candidateTrack.hits.size(), kPar.minHits1[trial]); + candidateTrack.ID, candidateTrack.hits.size(), minHits1); } candidateTrack.good = false; continue seedLoop; @@ -686,7 +690,7 @@ ArrayList kalmanPatRec(EventHeader event, Map } // Check if the track can be improved by removing hits - if (removeBadHits(candidateTrack, trial)) { + if (removeBadHits(candidateTrack, minHits1, trial)) { if (debug) System.out.format("KalmanPatRecHPS: Refit candidate track %d after removing a hit.\n", candidateTrack.ID); if (candidateTrack.reFit()) { if (debug) candidateTrack.print("after refitting and smoothing", false); @@ -819,6 +823,7 @@ ArrayList kalmanPatRec(EventHeader event, Map } } } + // Here we have a good track candidate. Mark the hits in KalHit as used by this candidate. if (candidateList.contains(candidateTrack)) { @@ -891,11 +896,14 @@ ArrayList kalmanPatRec(EventHeader event, Map } if (resurrect) { if (debug) { - System.out.format(" # hits=%d vs %d, # stereo=%d vs %d, # axial=%d vs %d, helix=%s\n", - tkr.numHits(), kPar.minHits1[trial], tkr.numStereo(), kPar.minStereo[trial], tkr.numHits()-tkr.numStereo(), - kPar.minAxial, tkr.sites.get(0).aS.helix.a.toString()); + if(tkr.sites.get(0).aS != null) + System.out.format(" resurrecting? # hits=%d vs %d, # stereo=%d vs %d, # axial=%d vs %d, helix=%s\n", + tkr.numHits(), minHits1, tkr.numStereo(), kPar.minStereo[trial], tkr.numHits()-tkr.numStereo(), + kPar.minAxial, tkr.sites.get(0).aS.helix.a.toString()); + else + System.out.println(" resurrecting? state at 0 = null ?????"); } - if (tkr.numHits() >= kPar.minHits1[trial] && tkr.numStereo() >= kPar.minStereo[trial]) { + if (tkr.numHits() >= minHits1 && tkr.numStereo() >= kPar.minStereo[trial]) { int nAxial = tkr.numHits() - tkr.numStereo(); if (nAxial >= kPar.minAxial) { StateVector aS0 = tkr.sites.get(0).aS; @@ -1179,6 +1187,11 @@ ArrayList kalmanPatRec(EventHeader event, Map //} if (m.hits.get(site.hitID).tracks.size()>1) nShared++; } + + int minHitsFinal=kPar.minHitsBot[KalmanParams.mxTrials - 1]; + if (topBottom==1) + minHitsFinal=kPar.minHitsTop[KalmanParams.mxTrials - 1]; + boolean removeIt = false; if (nStereo < kPar.minStereo[1]) { if (debug) System.out.format("KalmanPatRecHPS: removing KalTrack %d for %d stereo hits\n", tkr.ID,nStereo); @@ -1186,7 +1199,7 @@ ArrayList kalmanPatRec(EventHeader event, Map } else if (nAxial < kPar.minAxial) { if (debug) System.out.format("KalmanPatRecHPS: removing KalTrack %d for %d axial hits\n", tkr.ID,nAxial); removeIt = true; - } else if (nAxial + nStereo < kPar.minHits1[KalmanParams.mxTrials - 1]) { + } else if (nAxial + nStereo < minHitsFinal) { if (debug) System.out.format("KalmanPatRecHPS: removing KalTrack %d for %d hits\n", tkr.ID,nStereo+nAxial); removeIt = true; } else if (nAxial + nStereo - nShared < kPar.minHits0) { @@ -1375,10 +1388,10 @@ private void printCandidateList() { } // Remove the worst hit from lousy track candidates - private boolean removeBadHits(TrackCandidate tkr, int trial) { + private boolean removeBadHits(TrackCandidate tkr, int minHits, int trial) { if (tkr.chi2s/(double) tkr.hits.size() < kPar.chi2mx1[trial]) return false; - if (tkr.hits.size() <= kPar.minHits1[trial]) return false; + if (tkr.hits.size() <= minHits) return false; double mxChi2 = 0.; int idxBad = -1; diff --git a/tracking/src/main/java/org/hps/recon/tracking/kalman/Measurement.java b/tracking/src/main/java/org/hps/recon/tracking/kalman/Measurement.java index c5a5d9bbb..1f64aedbf 100644 --- a/tracking/src/main/java/org/hps/recon/tracking/kalman/Measurement.java +++ b/tracking/src/main/java/org/hps/recon/tracking/kalman/Measurement.java @@ -22,9 +22,10 @@ class Measurement { // x = xStrip; sigma = resolution; time = t; + timeErr=666.; energy = E; tracks = new ArrayList(); - vTrue = 0.; + vTrue = 0.; rGlobal = null; tksMC = null; } @@ -34,7 +35,11 @@ class Measurement { // x = xStrip; sigma = resolution; time = t; - timeErr = terr; + //make sure error is a number + if(Double.isNaN(terr)) + timeErr=666.; + else + timeErr = terr; energy = E; tracks = new ArrayList(); vTrue = 0.; diff --git a/tracking/src/main/java/org/hps/recon/tracking/kalman/PatRecTest.java b/tracking/src/main/java/org/hps/recon/tracking/kalman/PatRecTest.java index c93bd26c5..2758f03b6 100644 --- a/tracking/src/main/java/org/hps/recon/tracking/kalman/PatRecTest.java +++ b/tracking/src/main/java/org/hps/recon/tracking/kalman/PatRecTest.java @@ -51,7 +51,7 @@ class PatRecTest { // Set pattern recognition parameters KalmanParams kPar = new KalmanParams(); kPar.setIterations(2); - kPar.setMinHits(5); + // kPar.setMinHits(5); KalmanPatRecHPS patRec = new KalmanPatRecHPS(kPar); // Definition of the magnetic field