5 added files
lcsim/src/org/lcsim/contrib/Partridge/TrackingTest
diff -N AnalysisDriver.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ AnalysisDriver.java 4 Sep 2008 22:47:29 -0000 1.1
@@ -0,0 +1,146 @@
+/*
+ * AnalysisDriver.java
+ *
+ * Created on February 11, 2008, 11:47 AM
+ *
+ */
+
+package org.lcsim.contrib.Partridge.TrackingTest;
+
+import hep.aida.IHistogram1D;
+import hep.physics.vec.Hep3Vector;
+
+import java.util.List;
+import java.util.Map;
+import java.util.HashMap;
+
+import org.lcsim.constants.Constants;
+import org.lcsim.recon.tracking.seedtracker.SeedTrack;
+import org.lcsim.recon.tracking.seedtracker.SeedCandidate;
+import org.lcsim.fit.helicaltrack.HelicalTrackFit;
+import org.lcsim.event.TrackerHit;
+import org.lcsim.fit.helicaltrack.HelicalTrackHit;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.Track;
+import org.lcsim.event.MCParticle;
+import org.lcsim.util.aida.AIDA;
+import org.lcsim.util.Driver;
+
+
+/**
+ *
+ * @author Richard Partridge
+ * @version 1.0
+ */
+public class AnalysisDriver extends Driver {
+ private AIDA aida = AIDA.defaultInstance();
+ private IHistogram1D h1;
+ private IHistogram1D h2;
+
+ /** Creates a new instance of AnalysisDriver */
+ public AnalysisDriver() {
+ h1 = aida.histogramFactory().createHistogram1D("pT Efficiency", "", 100, 0., 50., "type=efficiency");
+ h2 = aida.histogramFactory().createHistogram1D("theta Efficiency", "", 360, 0., 180., "type=efficiency");
+
+ }
+
+ /**
+ * Process the current event
+ * @param event EventHeader for this event
+ */
+ public void process(EventHeader event) {
+ List<Track> tracklist = event.getTracks();
+ Map<MCParticle, Track> trkmap = new HashMap<MCParticle, Track>();
+ for (Track track : tracklist) {
+ List<TrackerHit> hitlist = track.getTrackerHits();
+ Map<MCParticle, Integer> mcmap = new HashMap<MCParticle, Integer>();
+ if (track instanceof SeedTrack) {
+ SeedCandidate seed = ((SeedTrack) track).getSeedCandidate();
+ for (HelicalTrackHit hit : seed.getHits()) {
+ double x = hit.getCorrectedPosition().x();
+ double y = hit.getCorrectedPosition().y();
+ HelicalTrackFit helix = seed.getHelix();
+ if (hit.getMCParticles().size() == 0) {
+ System.out.println("Hit with no MCParticles:"+hit.toString());
+ continue;
+ }
+ MCParticle particle = hit.getMCParticles().get(0);
+ Hep3Vector p = particle.getMomentum();
+ double phi = Math.atan2(p.y(), p.x());
+ double R = Math.sqrt(p.x()*p.x() + p.y()*p.y()) / (5. * Constants.fieldConversion);
+ double RS = R;
+ if (particle.getCharge() < 0.) RS = -1. * RS;
+ Hep3Vector start = particle.getOrigin();
+ double xc = start.x() + RS * Math.sin(phi);
+ double yc = start.y() - RS * Math.cos(phi);
+// double xc = helix.xc();
+// double yc = helix.yc();
+// double R = Math.abs(helix.R());
+ double RHit = Math.sqrt((x-xc)*(x-xc) + (y-yc)*(y-yc));
+ double drphi_ms = 0.;
+ if (helix.ScatterMap().containsKey(hit)) drphi_ms = helix.ScatterMap().get(hit).drphi();
+ double drphi_res = hit.drphi();
+ double drphi = Math.sqrt(drphi_ms*drphi_ms + drphi_res*drphi_res);
+ aida.cloud1D("r-phi residual for layer "+hit.getLayerIdentifier()).fill(RHit-R);
+ aida.cloud1D("Pull for layer "+hit.getLayerIdentifier()).fill((RHit - R)/drphi);
+ aida.cloud1D("Hit resolution for layer "+hit.getLayerIdentifier()).fill(drphi_res);
+ aida.cloud2D("Hit MS resolution for layer "+hit.getLayerIdentifier()).fill(drphi_ms, helix.pT(5.));
+ List<MCParticle> mclist = hit.getMCParticles();
+ for (MCParticle mcp : mclist) {
+ if (mcmap.containsKey(mcp)) {
+ int entries = mcmap.get(mcp) + 1;
+ mcmap.put(mcp, entries);
+ } else
+ mcmap.put(mcp, 1);
+ }
+ }
+ MCParticle mcmatch = null;
+ int nmatch = 0;
+ for (Map.Entry<MCParticle, Integer> me : mcmap.entrySet()) {
+ if (me.getValue() > nmatch) {
+ nmatch = me.getValue();
+ mcmatch = me.getKey();
+ }
+ }
+ if (trkmap.containsKey(mcmatch)) System.out.println("more than one track associated with an MCParticle!!");
+ else trkmap.put(mcmatch, track);
+ }
+ }
+
+ List<MCParticle> mclist = event.getMCParticles();
+ for (MCParticle mcp : mclist) {
+ if (mcp.getCharge() == 0) continue;
+ if (mcp.getGeneratorStatus() != mcp.FINAL_STATE) continue;
+ double px = mcp.getPX();
+ double py = mcp.getPY();
+ double pz = mcp.getPZ();
+ double pt = Math.sqrt(px*px + py*py);
+ double p = Math.sqrt(pt*pt + pz*pz);
+ double cth = pz / p;
+ double theta = 180. * Math.acos(cth) / Math.PI;
+ double wgt = 0.;
+ if (trkmap.containsKey(mcp)) wgt = 1.;
+ if (pt > 1.1) {
+ aida.profile1D("Efficiency vs theta", 90, 0., 180.).fill(theta, wgt);
+ h2.fill(theta, wgt);
+ aida.histogram1D("MC angle", 90, 0., 180.).fill(theta);
+ }
+ if (Math.abs(cth) < 0.985) {
+ aida.profile1D("Efficiency vs pT", 100, 0., 50.).fill(pt, wgt);
+ h1.fill(pt,wgt);
+ aida.histogram1D("MC pT", 100, 0., 50.).fill(pt);
+ }
+ if (!trkmap.containsKey(mcp)) {
+ List<HelicalTrackHit> hits = event.get(HelicalTrackHit.class, "HelicalTrackHits");
+ if (hits.size() > 6) {
+ System.out.println("Failed to find track. Found "+hits.size()+" hits @ theta = "
+ +180.*Math.acos(mcp.getMomentum().z() / mcp.getMomentum().magnitude())/Math.PI);
+ for (HelicalTrackHit hit : hits) {
+ System.out.println("Hit in "+hit.getLayerIdentifier()+" at x= "+hit.x()+" y= "+hit.y()+" z= "+hit.z());
+ }
+ }
+ }
+ }
+ return;
+ }
+}
\ No newline at end of file
lcsim/src/org/lcsim/contrib/Partridge/TrackingTest
diff -N MyTrackerDriver.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ MyTrackerDriver.java 4 Sep 2008 22:47:29 -0000 1.1
@@ -0,0 +1,71 @@
+/*
+ * MyTrackerDriver.java
+ *
+ * Created on March 29, 2006, 4:58 PM
+ *
+ */
+
+package org.lcsim.contrib.Partridge.TrackingTest;
+
+import java.util.List;
+//import org.lcsim.contrib.Pelham.Example1.HistogramAnalysisDriver;
+import org.lcsim.recon.tracking.seedtracker.SeedStrategy;
+import org.lcsim.recon.tracking.seedtracker.SeedTracker;
+//import org.lcsim.contrib.seedtracker.diagnostic.SeedTrackerDiagnostics;
+import org.lcsim.recon.tracking.seedtracker.StrategyXMLUtils;
+import org.lcsim.event.EventHeader;
+import org.lcsim.fit.helicaltrack.HelicalTrackHitDriver;
+import org.lcsim.fit.helicaltrack.HelicalTrackHitDriver.HitType;
+import org.lcsim.util.Driver;
+
+/**
+ * Driver for testing the SeedTracker track finding algorithm. This driver causes
+ * the SmearMCHits and SeedTracker drivers to be invoked for each event.
+ * @author Richard Partridge
+ * @version 1.0
+ */
+public class MyTrackerDriver extends Driver
+{
+ public MyTrackerDriver()
+ {
+ // Add the hit digitization driver (this example uses the virtual segment digitization code)
+ add(new VSExampleDriver());
+
+ // Add a driver to create HelicalTrackHits from the digitized hits
+ HelicalTrackHitDriver hitdriver = new HelicalTrackHitDriver();
+ hitdriver.addCollection("NewTrackerHits",HitType.VirtualSegmentation);
+ add(hitdriver);
+
+ // Obtain a trained list of strategies from a saved resource.
+ // Because resources are loaded from inside the compiled JAR file,
+ // it is necessary to recompile when modifying a saved resource.
+ // StrategyXMLUtils.getDefaultStrategiesPrefix() will provide the correct
+ // prefix in the resource tree (i.e. "/org/lcsim/contrib/seedtracker/strategybuilder/strategies/")
+ List<SeedStrategy> stratlist = StrategyXMLUtils.getStrategyListFromResource(StrategyXMLUtils.getDefaultStrategiesPrefix()+"autogen_zpole_sid01.xml");
+
+ // For development / modifications, one may choose to load a strategy
+ // list from a local file instead of a resource. The line below shows
+ // an example of how to do this
+
+// List<SeedStrategy> stratlist = StrategyXMLUtils.getStrategyListFromFile(new File("/path/to/file/strategies.xml"));
+
+
+ // Add a driver to do the track finding
+ SeedTracker st = new SeedTracker(stratlist);
+
+ //Enable diagnostics
+// st.setDiagnostics(new SeedTrackerDiagnostics());
+
+ //Add the Driver
+ add(st);
+
+ // Add an example analysis driver
+ add (new AnalysisDriver());
+
+ }
+ public void process(EventHeader event)
+ {
+ super.process(event);
+ return;
+ }
+}
lcsim/src/org/lcsim/contrib/Partridge/TrackingTest
diff -N SeedTrackerDiagnostics.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ SeedTrackerDiagnostics.java 4 Sep 2008 22:47:29 -0000 1.1
@@ -0,0 +1,249 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.lcsim.recon.tracking.seedtracker.example;
+
+import hep.physics.vec.Hep3Vector;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import org.lcsim.recon.tracking.seedtracker.ConfirmerExtender.Task;
+import org.lcsim.recon.tracking.seedtracker.diagnostic.EmptySeedTrackerDiagnostics;
+import org.lcsim.recon.tracking.seedtracker.diagnostic.FindableTracks;
+import org.lcsim.recon.tracking.seedtracker.diagnostic.ISeedTrackerDiagnostics;
+import org.lcsim.recon.tracking.seedtracker.diagnostic.SeedValidator;
+import org.lcsim.event.MCParticle;
+import org.lcsim.fit.helicaltrack.HelicalTrackHit;
+import org.lcsim.math.chisq.ChisqProb;
+import org.lcsim.recon.tracking.seedtracker.HelixFitter;
+import org.lcsim.recon.tracking.seedtracker.SeedCandidate;
+import org.lcsim.recon.tracking.seedtracker.SeedStrategy;
+import org.lcsim.util.aida.AIDA;
+
+/**
+ *
+ * @author cozzy
+ */
+public class SeedTrackerDiagnostics extends EmptySeedTrackerDiagnostics implements ISeedTrackerDiagnostics{
+
+ AIDA aida = AIDA.defaultInstance();
+
+ private double purity_cutoff = 0.0;
+ private String prefix = "";
+ private boolean debugOut = true;
+
+ public SeedTrackerDiagnostics(){
+
+ }
+
+ /**
+ * Generates diagnostic plots given a list of seed candidates and a strategy.
+ * @param seedlist
+ * @param strategy
+ */
+ @Override
+ public void fireFinalDiagnostics(List<SeedCandidate> seedlist){
+
+ System.out.println(" After merging: "+seedlist.size());
+ Map<SeedCandidate,SeedValidator> vmap = generateValidators(seedlist);
+ makePurityPlots(vmap);
+ Set<MCParticle> likelyMCs = generateLikelyMCSet(vmap);
+ makeEfficiencyPlots(likelyMCs,currentStrategy);
+ }
+
+ /**
+ * Sets the purity cutoff for a track's MC to be considered found when
+ * calculating efficiency. Default is 0.0.
+ * @param new_purity_cutoff
+ */
+ public void setPurityCutoff(double new_purity_cutoff){
+ purity_cutoff = new_purity_cutoff;
+ }
+
+ /**
+ * Sets the prefix to be appended to the beginning of each plot (for example, a strategy name
+ * @param str the new prefix
+ */
+ public void setPrefix(String str){
+ this.prefix = str;
+ }
+
+
+ @Override
+ public void fireStrategyChanged(SeedStrategy strategy) {
+ setPrefix("chisq cut = "+strategy.getMaxChisq()+"/");
+ super.fireStrategyChanged(strategy);
+ }
+
+
+ @Override
+ public void fireMergeIsBetterDiagnostics(SeedCandidate newSeed, SeedCandidate oldSeed, boolean returnValue) {
+ if (returnValue){
+
+ SeedValidator oldV = new SeedValidator(oldSeed);
+ SeedValidator newV = new SeedValidator(newSeed);
+
+ if (oldV.getPurity() > newV.getPurity()){
+ makeBadDecisionPlots(newSeed,oldSeed, oldV,newV);
+ }
+ }
+ }
+
+ @Override
+ public void fireFinderDone(int maxseeds, int nseed, int nfit, int nconfirm, List<SeedCandidate> confirmedSeeds) {
+// System.out.println("Possible seeds: "+maxseeds);
+// System.out.print(" Trial seeds: "+nseed);
+// System.out.println(" Fitted seeds: "+nfit);
+// System.out.println(" Confirmed seeds: "+nconfirm);
+// System.out.println(" Confirmed seed candidates: "+confirmedSeeds.size());
+ }
+
+ @Override
+ public void fireConfirmerExtenderWorkingSeedInfo(Task task, SeedCandidate seed, List<HelicalTrackHit> hitlist) {
+ if (debugOut) {
+ System.out.println("Oldcirclechisq: "+seed.getHelix().chisq()[0]);
+ System.out.println("Oldchisq: "+seed.getHelix().chisqtot());
+ System.out.println("Oldhits: "+seed.getHits().size());
+ System.out.println("Old Helix: "+seed.getHelix().toString());
+ }
+ return;
+ }
+
+ @Override
+ public void fireConfirmerExtenderFitNoSuccess(Task task, SeedCandidate Seed, HelicalTrackHit hit, HelixFitter fitter, boolean optimize) {
+ if (debugOut) System.out.println("Circlechissq" + fitter.getCircleFit().chisq());
+ }
+
+ @Override
+ public void fireConfirmerExtenderFitSuccess(Task task, SeedCandidate Seed, HelicalTrackHit hit, HelixFitter fitter, double chisqbest, boolean optimize) {
+ if (debugOut) {
+ System.out.println("Good fit");
+ System.out.println("Chisq: "+fitter.getHelix().chisqtot());
+ System.out.println("Circle Chisq: "+fitter.getHelix().chisq()[0]);
+ System.out.println("New Helix: "+fitter.getHelix().toString());
+ }
+ }
+
+ @Override
+ public void fireConfirmerExtenderLayerDone(Task task, int numSeeds, List<SeedCandidate> seedlist) {
+ if (debugOut){
+ System.out.println(" "+task.toString()+" seeds: "+numSeeds);
+ System.out.println(" "+task.toString()+" seed candidates: "+seedlist.size());
+ }
+ }
+
+ private void makeBadDecisionPlots(SeedCandidate newseed, SeedCandidate seed, SeedValidator oldV, SeedValidator newV) {
+
+ aida.cloud1D(prefix+"Bad Decision newseed chisq").fill(newseed.getHelix().chisqtot());
+ aida.cloud1D(prefix+"Bad Decision oldseed chisq").fill(seed.getHelix().chisqtot());
+ aida.cloud2D(prefix+"Bad Decision newseed vs. oldseed chisq").fill(newseed.getHelix().chisqtot(), seed.getHelix().chisqtot());
+ aida.cloud1D(prefix+"Bad Decision old seedpurity").fill(oldV.getPurity());
+ aida.cloud1D(prefix+"Bad Decision new seedpurity").fill(newV.getPurity());
+
+
+ if(oldV.getVerdict().isGoodValue()){
+ Hep3Vector p = oldV.getLikelyMC().getMomentum();
+ double pt = Math.sqrt(p.x() * p.x() + p.y() * p.y());
+ aida.cloud1D(prefix+"Bad Decision real particle transverse momentum").fill(pt);
+
+ Hep3Vector r = oldV.getLikelyMC().getOrigin();
+ double rc = Math.sqrt(r.x()*r.x()+r.y()*r.y());
+ aida.cloud1D(prefix + "Bad Decision real particle start radius (cylindrical)").fill(rc);
+ }
+
+ }
+
+
+ //makes purity plots
+ private void makePurityPlots(Map<SeedCandidate, SeedValidator> vmap) {
+
+ for (SeedCandidate s : vmap.keySet()) {
+
+ SeedValidator v = vmap.get(s);
+
+ if (v.getVerdict().isGoodValue()) {
+ aida.cloud1D(prefix+"Good seeds chisq").fill(s.getHelix().chisqtot());
+ aida.cloud1D(prefix+"Good seeds numhits").fill(s.getHits().size());
+ aida.cloud1D(prefix+"Good seeds pt").fill(s.getHelix().pT(5.0));
+ } else {
+ aida.cloud1D(prefix+"Bad seeds chisq").fill(s.getHelix().chisqtot());
+ aida.cloud1D(prefix+"Bad seeds numhits").fill(s.getHits().size());
+ aida.cloud1D(prefix+"Bad seeds pt").fill(s.getHelix().pT(5.0));
+ }
+
+ aida.cloud1D(prefix+"purity").fill(v.getPurity());
+ aida.cloud2D(prefix+"purity vs. numHits").fill(v.getPurity(), s.getHits().size());
+ aida.cloud2D(prefix+"purity vs. pt").fill(v.getPurity(), s.getHelix().pT(5.0));
+ aida.cloud2D(prefix+"purity vs. cth").fill(v.getPurity(), s.getHelix().cth());
+ aida.cloud2D(prefix+"purity vs. chisq").fill(v.getPurity(), s.getHelix().chisqtot());
+
+ double chisqdof = ChisqProb.gammq(s.getHelix().chisqtot(), s.getHits().size()-1);
+
+ aida.cloud2D(prefix+"purity vs. (1 - chisq_cdf(chisq,ndof)").fill(v.getPurity(), chisqdof);
+ aida.cloud2D(prefix+"purity cs. dca").fill(v.getPurity(), s.getHelix().dca());
+ }
+ }
+
+ private void makeEfficiencyPlots(Set<MCParticle> likelyMCs, SeedStrategy strat){
+
+ FindableTracks findable = new FindableTracks(strat, hitManager);
+ findable.setBField(bField);
+
+ List<MCParticle> MCs = new ArrayList<MCParticle>();
+ MCs.addAll(event.getMCParticles());
+
+ Iterator iter = MCs.iterator();
+
+ //remove all none findable MCs
+ while(iter.hasNext()){
+ if(!findable.isFindable((MCParticle)iter.next()))
+ iter.remove();
+ }
+
+ int numFindable = MCs.size();
+ aida.cloud1D(prefix+"Number findable").fill(numFindable);
+
+
+ // remove all the MC's we've found... this gives us findable - found
+ MCs.removeAll(likelyMCs);
+
+ int numFound = numFindable - MCs.size(); // findable - (findable - found) = found
+
+ aida.cloud1D(prefix+"Num found (purity cutoff="+purity_cutoff+") ").fill(numFound);
+
+ if(numFindable > 0){
+ double eff = (double) numFound / (double) numFindable;
+ aida.cloud1D(prefix+"Efficiency").fill(eff);
+ }
+
+ }
+
+
+ private Map<SeedCandidate,SeedValidator> generateValidators(List<SeedCandidate> seedlist) {
+
+ Map<SeedCandidate,SeedValidator> ret = new HashMap<SeedCandidate,SeedValidator>();
+ for (SeedCandidate s : seedlist) {
+ ret.put(s, new SeedValidator(s));
+ }
+
+ return ret;
+ }
+
+ private Set<MCParticle> generateLikelyMCSet(Map<SeedCandidate, SeedValidator> vmap) {
+
+ Set<MCParticle> set = new HashSet<MCParticle>();
+
+ for (SeedValidator v : vmap.values()) {
+ if(v.getPurity()<purity_cutoff) continue;
+ set.add(v.getLikelyMC());
+ }
+ return set;
+ }
+}
+
\ No newline at end of file
lcsim/src/org/lcsim/contrib/Partridge/TrackingTest
diff -N VSExampleDriver.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ VSExampleDriver.java 4 Sep 2008 22:47:29 -0000 1.1
@@ -0,0 +1,128 @@
+package org.lcsim.contrib.Partridge.TrackingTest;
+
+import java.util.*;
+
+import hep.aida.*;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.SimTrackerHit;
+import org.lcsim.recon.cat.util.NoSuchParameterException;
+import org.lcsim.units.clhep.SystemOfUnits;
+import org.lcsim.util.Driver;
+import org.lcsim.util.aida.AIDA;
+import hep.physics.vec.BasicHep3Vector;
+import hep.physics.vec.Hep3Vector;
+import hep.physics.vec.VecOp;
+
+import org.lcsim.contrib.onoprien.tracking.clustering.ClusteringDriver;
+import org.lcsim.contrib.onoprien.tracking.clustering.clusterers.NearestNeighborClusterer;
+import org.lcsim.contrib.onoprien.tracking.digitization.SimToDigiDriver;
+import org.lcsim.contrib.onoprien.tracking.digitization.SimToDigiConverter;
+import org.lcsim.contrib.onoprien.tracking.digitization.algorithms.ConverterSimple;
+import org.lcsim.contrib.onoprien.tracking.geom.SegmentationManager;
+import org.lcsim.contrib.onoprien.tracking.geom.Segmenter;
+import org.lcsim.contrib.onoprien.tracking.geom.Sensor;
+import org.lcsim.contrib.onoprien.tracking.geom.SensorType;
+import org.lcsim.contrib.onoprien.tracking.hit.DigiTrackerHit;
+import org.lcsim.contrib.onoprien.tracking.hit.TrackerCluster;
+import org.lcsim.contrib.onoprien.tracking.hit.TrackerHit;
+import org.lcsim.contrib.onoprien.tracking.hitmaking.HitMakingDriver;
+import org.lcsim.contrib.onoprien.tracking.hitmaking.TrackerHitConverter;
+import org.lcsim.contrib.onoprien.tracking.hitmaking.TrackerHitMaker;
+import org.lcsim.contrib.onoprien.tracking.hitmaking.hitmakers.TrackerHitMakerBasic;
+import org.lcsim.contrib.onoprien.tracking.mctruth.MCTruth;
+import org.lcsim.contrib.onoprien.tracking.mctruth.MCTruthDriver;
+import org.lcsim.contrib.onoprien.tracking.mctruth.SimGroup;
+
+/**
+ * An Example of how to define virtual segmentation of the tracker,
+ * and use {@link TrackerHitConverter} to create
+ * "standard" <tt>org.lcsim.event.TrackerHits</tt>.
+ * Parameters are chosen to define reasonable segmentation for SiD01.
+ *
+ *
+ *
+ * @author D. Onoprienko
+ * @version $Id: VSExampleDriver.java,v 1.1 2008/09/04 22:47:29 partridge Exp $
+ */
+public class VSExampleDriver extends Driver {
+
+// -- Constructors : ----------------------------------------------------------
+
+ public VSExampleDriver() {
+
+ add(new MCTruthDriver());
+
+ // Segmentation description :
+
+ Segmenter segmenter = new VSExampleSegmenter();
+ SegmentationManager segMan = new SegmentationManager(segmenter);
+ SegmentationManager.setDefaultInstance(segMan);
+ add(segMan);
+
+ // Digitization :
+
+ SimToDigiConverter converter = new ConverterSimple();
+ SimToDigiDriver conversionDriver = new SimToDigiDriver(converter);
+ conversionDriver.set("ADD_INPUT_LIST_NAME", "TkrBarrHits");
+ conversionDriver.set("ADD_INPUT_LIST_NAME", "VtxBarrHits");
+ conversionDriver.set("ADD_INPUT_LIST_NAME", "TkrEndcapHits");
+ conversionDriver.set("ADD_INPUT_LIST_NAME", "VtxEndcapHits");
+ conversionDriver.set("ADD_INPUT_LIST_NAME", "TkrForwardHits");
+ conversionDriver.set("OUTPUT_MAP_NAME", "DigiTrackerHits");
+ add(conversionDriver);
+
+ // Clustering :
+
+ ClusteringDriver clusteringDriver = new ClusteringDriver(new NearestNeighborClusterer());
+ clusteringDriver.set("INPUT_MAP_NAME","DigiTrackerHits");
+ clusteringDriver.set("OUTPUT_MAP_NAME","TrackerClusters");
+ add(clusteringDriver);
+
+ // Hit making :
+
+ TrackerHitMaker hitMaker = new TrackerHitMakerBasic();
+ HitMakingDriver hitMakingDriver = new HitMakingDriver(hitMaker);
+ hitMakingDriver.set("INPUT_MAP_NAME","TrackerClusters");
+ hitMakingDriver.set("OUTPUT_MAP_NAME","NewTrackerHits");
+ add(hitMakingDriver);
+
+ // Conversion to "standard" org.lcsim.event.TrackerHit : ------------------
+
+// TrackerHitConverter hitConverter = new TrackerHitConverter();
+// hitConverter.set("INPUT_CLUSTER_MAP_NAME", "TrackerClusters");
+// hitConverter.set("OUTPUT_HIT_LIST_NAME", "StandardTrackerHits");
+// add(hitConverter);
+ }
+
+
+// -- Event processing : ------------------------------------------------------
+
+ public void process(EventHeader event) {
+
+// System.out.println(" ");
+// System.out.println("Event "+event.getEventNumber());
+
+ super.process(event);
+
+ MCTruth mcTruth = (MCTruth) event.get("MCTruth");
+
+// System.out.println(" ");
+
+ int n = 0;
+ HashMap<Sensor, List<DigiTrackerHit>> digiMap =
+ (HashMap<Sensor, List<DigiTrackerHit>>) event.get("DigiTrackerHits");
+ for (List<DigiTrackerHit> digiList : digiMap.values()) n += digiList.size();
+// System.out.println("Created " + n + " DigiTrackerHits on " + digiMap.keySet().size() + " sensors");
+
+ n = 0;
+ HashMap<Sensor, List<TrackerCluster>> clusterMap =
+ (HashMap<Sensor, List<TrackerCluster>>) event.get("TrackerClusters");
+ for (List<TrackerCluster> clusterList : clusterMap.values()) n += clusterList.size();
+// System.out.println("Created " + n + " TrackerClusters on " + clusterMap.keySet().size() + " sensors");
+
+// n = 0;
+// List<org.lcsim.event.TrackerHit> oldHitList = (List<org.lcsim.event.TrackerHit>) event.get("StandardTrackerHits");
+// System.out.println("Created " + oldHitList.size() + " org.lcsim.event.TrackerHits");
+ }
+
+}
lcsim/src/org/lcsim/contrib/Partridge/TrackingTest
diff -N VSExampleSegmenter.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ VSExampleSegmenter.java 4 Sep 2008 22:47:29 -0000 1.1
@@ -0,0 +1,63 @@
+package org.lcsim.contrib.Partridge.TrackingTest;
+
+import org.lcsim.units.clhep.SystemOfUnits;
+
+import org.lcsim.contrib.onoprien.tracking.geom.segmenters.CylindricalBarrelSegmenter;
+import org.lcsim.contrib.onoprien.tracking.geom.segmenters.DiskTrackerToWedgesSegmenter;
+import org.lcsim.contrib.onoprien.tracking.geom.segmenters.DiskTrackerToRingsSegmenter;
+import org.lcsim.contrib.onoprien.tracking.geom.segmenters.SubdetectorBasedSegmenter;
+
+/**
+ *
+ *
+ *
+ *
+ * @author D. Onoprienko
+ * @version $Id: VSExampleSegmenter.java,v 1.1 2008/09/04 22:47:29 partridge Exp $
+ */
+public class VSExampleSegmenter extends SubdetectorBasedSegmenter {
+
+// -- Constructors : ----------------------------------------------------------
+
+ public VSExampleSegmenter() {
+
+ // 25 um pixels in VTX Barrel
+
+ CylindricalBarrelSegmenter vtxBarrelSegmenter = new CylindricalBarrelSegmenter("VertexBarrel");
+ vtxBarrelSegmenter.setStripLength(25.*SystemOfUnits.micrometer);
+ vtxBarrelSegmenter.setStripWidth(25.*SystemOfUnits.micrometer);
+ setSegmenter("VertexBarrel", vtxBarrelSegmenter);
+
+ // 10 cm x 25 um strips in outer Tracker Barrel
+
+ CylindricalBarrelSegmenter trackerBarrelSegmenter = new CylindricalBarrelSegmenter("TrackerBarrel");
+ trackerBarrelSegmenter.setStripLength(10.*SystemOfUnits.cm);
+ trackerBarrelSegmenter.setStripWidth(25.*SystemOfUnits.micrometer);
+ setSegmenter("TrackerBarrel", trackerBarrelSegmenter);
+
+ // 25 um pixels in VTX Endcap
+
+ DiskTrackerToRingsSegmenter vtxEndcapSegmenter = new DiskTrackerToRingsSegmenter("VertexEndcap");
+ vtxEndcapSegmenter.setStripLength(25.*SystemOfUnits.micrometer);
+ vtxEndcapSegmenter.setStripWidth(25.*SystemOfUnits.micrometer);
+ setSegmenter("VertexEndcap", vtxEndcapSegmenter);
+
+ // 25 um pixels in Forward Tracker
+
+ DiskTrackerToRingsSegmenter trackerForwardSegmenter = new DiskTrackerToRingsSegmenter("TrackerForward");
+ trackerForwardSegmenter.setStripLength(25.*SystemOfUnits.micrometer);
+ trackerForwardSegmenter.setStripWidth(25.*SystemOfUnits.micrometer);
+ setSegmenter("TrackerForward", trackerForwardSegmenter);
+
+ // 15 degrees stereo wedges in outer Tracker Endcap
+
+ DiskTrackerToWedgesSegmenter trackerEndcapSegmenter = new DiskTrackerToWedgesSegmenter("TrackerEndcap");
+ trackerEndcapSegmenter.setNumberOfRadialSlices(new int[]{3,5,8,10});
+ trackerEndcapSegmenter.setStripWidth(25.*SystemOfUnits.micrometer);
+ trackerEndcapSegmenter.setNumberOfPhiSlices(24);
+ setSegmenter("TrackerEndcap", trackerEndcapSegmenter);
+ }
+
+// -- Private parts : ---------------------------------------------------------
+
+}
CVSspam 0.2.8