Author: mgraham Date: Thu Oct 30 08:16:39 2014 New Revision: 1343 Log: Straight track fitting analysis driver Modified: java/trunk/users/src/main/java/org/hps/users/mgraham/StraightTrackAnalysis.java Modified: java/trunk/users/src/main/java/org/hps/users/mgraham/StraightTrackAnalysis.java ============================================================================= --- java/trunk/users/src/main/java/org/hps/users/mgraham/StraightTrackAnalysis.java (original) +++ java/trunk/users/src/main/java/org/hps/users/mgraham/StraightTrackAnalysis.java Thu Oct 30 08:16:39 2014 @@ -1,13 +1,18 @@ package org.hps.users.mgraham; import hep.aida.IHistogram1D; +import java.util.HashMap; import java.util.List; -import org.hps.recon.tracking.nobfield.StraightTrack; +import java.util.Map; +import org.hps.analysis.examples.TrackAnalysis; import org.lcsim.event.EventHeader; +import org.lcsim.event.LCRelation; import org.lcsim.event.RawTrackerHit; +import org.lcsim.event.RelationalTable; import org.lcsim.event.SimTrackerHit; import org.lcsim.event.Track; import org.lcsim.event.TrackerHit; +import org.lcsim.event.base.BaseRelationalTable; import org.lcsim.geometry.Detector; import org.lcsim.util.Driver; import org.lcsim.util.aida.AIDA; @@ -23,6 +28,9 @@ private String mcSvtHitsName = "TrackerHits"; private String rawHitsName = "RawTrackerHitMaker_RawTrackerHits"; private String clustersName = "StripClusterer_SiTrackerHitStrip1D"; + private final String helicalTrackMCRelationsCollectionName = "HelicalTrackMCRelations"; + private final String helicalTrackHitRelationsCollectionName = "HelicalTrackHitRelations"; + private final String rotatedHelicalTrackHitRelationsCollectionName = "RotatedHelicalTrackHitRelations"; private String hthName = "HelicalTrackHits"; private String tracksName = "StraightTracks"; @@ -72,16 +80,57 @@ aida.histogram1D("Number of Layers Hit").fill(totLayers); List<Track> tracks = event.get(Track.class, tracksName); aida.histogram1D("Number of Tracks found").fill(tracks.size()); + + //make some maps and relation tables + Map<Track, TrackAnalysis> tkanalMap = new HashMap<Track, TrackAnalysis>(); + RelationalTable hittomc = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED); + List<LCRelation> mcrelations = event.get(LCRelation.class, helicalTrackMCRelationsCollectionName); + for (LCRelation relation : mcrelations) + if (relation != null && relation.getFrom() != null && relation.getTo() != null) + hittomc.add(relation.getFrom(), relation.getTo()); + + System.out.println("Size of hittomc collection " + hittomc.size()); + RelationalTable mcHittomcP = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED); + // Get the collections of SimTrackerHits + List<List<SimTrackerHit>> simcols = event.get(SimTrackerHit.class); + // Loop over the SimTrackerHits and fill in the relational table + for (List<SimTrackerHit> simlist : simcols) + for (SimTrackerHit simhit : simlist) + if (simhit.getMCParticle() != null) + mcHittomcP.add(simhit, simhit.getMCParticle()); + + RelationalTable trktomc = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED); + RelationalTable rawtomc = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED); + if (event.hasCollection(LCRelation.class, "SVTTrueHitRelations")) { + List<LCRelation> trueHitRelations = event.get(LCRelation.class, "SVTTrueHitRelations"); + for (LCRelation relation : trueHitRelations) + if (relation != null && relation.getFrom() != null && relation.getTo() != null) + rawtomc.add(relation.getFrom(), relation.getTo()); + } + + RelationalTable hittostrip = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED); + List<LCRelation> hitrelations = event.get(LCRelation.class, helicalTrackHitRelationsCollectionName); + for (LCRelation relation : hitrelations) + if (relation != null && relation.getFrom() != null && relation.getTo() != null) + hittostrip.add(relation.getFrom(), relation.getTo()); + + RelationalTable hittorotated = new BaseRelationalTable(RelationalTable.Mode.ONE_TO_ONE, RelationalTable.Weighting.UNWEIGHTED); + List<LCRelation> rotaterelations = event.get(LCRelation.class, rotatedHelicalTrackHitRelationsCollectionName); + for (LCRelation relation : rotaterelations) + if (relation != null && relation.getFrom() != null && relation.getTo() != null) + hittorotated.add(relation.getFrom(), relation.getTo()); + for (Track trk : tracks) { - StraightTrack stght = (StraightTrack) trk; - aida.histogram1D("x0", 50, -2, 2).fill(stght.getTrackParameters()[0]); - aida.histogram1D("y0", 50, -2, 2).fill(stght.getTrackParameters()[2]); - aida.histogram1D("xz slope", 50, -0.2, 0.25).fill(stght.getTrackParameters()[1]); - aida.histogram1D("yz slope", 50, -0.25, 0.25).fill(stght.getTrackParameters()[3]); - aida.histogram1D("track chi2 per ndf", 50, 0, 10).fill(stght.getChi2()/stght.getNDF()); - aida.histogram1D("track nhits", 50, 0, 10).fill(stght.getTrackerHits().size()); +// StraightTrack stght = (StraightTrack) trk; + aida.histogram1D("d0", 50, -2, 2).fill(trk.getTrackParameters()[0]); + aida.histogram1D("z0", 50, -2, 2).fill(trk.getTrackParameters()[3]); + aida.histogram1D("xy slope", 50, -0.2, 0.25).fill(trk.getTrackParameters()[1]); + aida.histogram1D("sz slope", 50, -0.25, 0.25).fill(trk.getTrackParameters()[4]); + aida.histogram1D("track chi2 per ndf", 50, 0, 2).fill(trk.getChi2() / trk.getNDF()); + aida.histogram1D("track nhits", 50, 0, 10).fill(trk.getTrackerHits().size()); + TrackAnalysis tkanal = new TrackAnalysis(trk, hittomc); + } - } } }