6 added + 2 removed + 1 modified, total 9 files
lcsim/src/org/lcsim/contrib/Pelham/Example1
diff -N SeedTrackerDiagnostics.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ SeedTrackerDiagnostics.java 13 Aug 2008 18:36:14 -0000 1.1
@@ -0,0 +1,247 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.lcsim.contrib.Pelham.Example1;
+
+import org.lcsim.contrib.seedtracker.*;
+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.contrib.seedtracker.ConfirmerExtender.Task;
+import org.lcsim.contrib.seedtracker.diagnostic.EmptySeedTrackerDiagnostics;
+import org.lcsim.contrib.seedtracker.diagnostic.FindableTracks;
+import org.lcsim.contrib.seedtracker.diagnostic.ISeedTrackerDiagnostics;
+import org.lcsim.contrib.seedtracker.diagnostic.SeedValidator;
+import org.lcsim.event.MCParticle;
+import org.lcsim.fit.helicaltrack.HelicalTrackHit;
+import org.lcsim.math.chisq.ChisqProb;
+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/Pelham/Example1
diff -N AnalysisDriver2.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ AnalysisDriver2.java 13 Aug 2008 18:36:14 -0000 1.1
@@ -0,0 +1,193 @@
+/*
+ * AnalysisDriver.java
+ *
+ * Created on February 11, 2008, 11:47 AM
+ *
+ */
+
+package org.lcsim.contrib.Pelham.Example1;
+
+import org.lcsim.contrib.seedtracker.analysis.HelixParamHistograms;
+import hep.aida.IHistogram1D;
+import java.util.List;
+import java.util.Map;
+import java.util.HashMap;
+
+import org.lcsim.contrib.seedtracker.SeedTrack;
+import org.lcsim.contrib.seedtracker.SeedCandidate;
+import org.lcsim.fit.helicaltrack.HelicalTrackFit;
+import org.lcsim.fit.helicaltrack.HelicalTrackHit;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.Track;
+import org.lcsim.event.MCParticle;
+import org.lcsim.contrib.seedtracker.analysis.HelixParamCalculator;
+import org.lcsim.util.aida.AIDA;
+import org.lcsim.util.Driver;
+
+
+/**
+ *
+ * @author Richard Partridge
+ * @version 1.0
+ */
+public class AnalysisDriver2 extends Driver {
+ private AIDA aida = AIDA.defaultInstance();
+ private IHistogram1D h1,h2,h3,h4,h5,h6;
+
+ /** Creates a new instance of AnalysisDriver */
+ public AnalysisDriver2() {
+ h1 = aida.histogramFactory().createHistogram1D("Dat-Phi", 200, -20, 20);
+ h2 = aida.histogramFactory().createHistogram1D("Dat-Radius", 200, -10000, 10000);
+ h3 = aida.histogramFactory().createHistogram1D("Dat-Z", 200, -20, 20);
+ h4 = aida.histogramFactory().createHistogram1D("MC-Phi", 200, -20, 20);
+ h5 = aida.histogramFactory().createHistogram1D("MC-Radius", 200, -10000, 10000);
+ h6 = aida.histogramFactory().createHistogram1D("MC-Z", 200, -20, 20);
+ }
+
+ /**
+ * 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) {
+ Map<MCParticle, Integer> mcmap = new HashMap<MCParticle, Integer>();
+ if (track instanceof SeedTrack) {
+ SeedCandidate seed = ((SeedTrack) track).getSeedCandidate();
+ for (HelicalTrackHit hit : seed.getHits()) {
+ HelicalTrackFit helix = seed.getHelix();
+ MCParticle particle = hit.getMCParticles().get(0);
+
+
+ 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;
+
+ if (trkmap.containsKey(mcp)) {
+ Track trk = trkmap.get(mcp);
+ if (trk instanceof SeedTrack) {
+ SeedTrack strk = (SeedTrack) trk;
+ HelicalTrackFit fit = strk.getSeedCandidate().getHelix();
+
+ //Class to draw histrogram
+ HelixParamHistograms draw = new HelixParamHistograms(fit,mcp,event);
+
+
+ //---Histrograms------------Histograms--------------Histrograms---\\
+ /*
+ if(mcp.getCharge()>0)
+ {
+ draw.DrawDataPositive();
+ draw.DrawMCPositive();
+ draw.DrawResidualPositive();
+ draw.DrawPullPositive();
+ }
+ else
+ {
+ draw.DrawDataNegative();
+ draw.DrawMCNegative();
+ draw.DrawResidualNegative();
+ draw.DrawPullNegative();
+ }
+ draw.DrawResidual();
+ draw.DrawPull();
+ */
+ //helix from mc partcle for layer hit 1st
+ //simtracker hit where is nrg
+ //pos from tracker hit 2nd
+ //compare fitted helix to mcparticle hits r phi z
+ //fit hit locations compared to
+
+ //Comparing hit locations
+
+ HelixParamCalculator calc = new HelixParamCalculator(mcp,event);
+ //find x0,y0 coordinates
+ double x0 = -1*calc.getDCA()*Math.sin(calc.getPhi0());
+ double y0 = calc.getDCA()*Math.sin(calc.getPhi0());
+ //varible for easier calculation temp = C*s/2
+ double temp = ((calc.getMCOmega()*calc.getArcLength())/2);
+ //find x,y coordinates
+ double x = x0 + (((calc.getArcLength()*Math.sin(temp))/temp)*Math.cos(calc.getPhi0()-temp));
+ double y = y0 + (((calc.getArcLength()*Math.sin(temp))/temp)*Math.sin(calc.getPhi0()-temp));
+
+ //Find MC phi, MC radius (r), MC z coordinate
+ double phi = Math.atan2(Math.sin(calc.getPhi0()-calc.getMCOmega()*(x-x0)),Math.cos(calc.getPhi0()+calc.getMCOmega()*(y-y0)));
+ double r = calc.getRadius();
+ double z = calc.getZ0() + calc.getArcLength()*calc.getSlopeSZPlane();
+
+ //find fit x0,y0
+ double datx0 = -1*fit.dca()*Math.sin(fit.phi0());
+ double daty0 = fit.dca()*Math.sin(fit.phi0());
+ List<HelicalTrackHit> hit = strk.getSeedCandidate().getHits();
+ double xh,yh,s,phih,rh,zh;
+
+ for(int i=0;i<hit.size();i++)
+ {
+ //x,y coordinates from fit
+ xh = hit.get(i).x();
+ yh = hit.get(i).y();
+ //arclength
+ s = (xh-x0)*Math.cos(fit.phi0())+(yh-y0)*Math.sin(fit.phi0());
+ //phi from fit
+ phih = Math.atan2(Math.sin(fit.phi0()-fit.curvature()*(xh-datx0)),Math.cos(fit.phi0()+fit.curvature()*(yh-daty0)));
+ //radius from fit
+ rh = fit.R();
+ //z coordinate
+ zh = fit.z0() + s*fit.slope();
+ //put into histogram
+ h1.fill(phih);
+ h2.fill(rh);
+ h3.fill(zh);
+ }
+ h4.fill(phi);
+ h5.fill(r);
+ h6.fill(z);
+
+
+ aida.histogramFactory().subtract("Residual-Phi", h1, h4);
+ aida.histogramFactory().subtract("Residual-R", h2, h5);
+ aida.histogramFactory().subtract("Residual-Z", h3, h6);
+
+
+ }
+ }
+ 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/Pelham/Example1
diff -N MyStrategy.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ MyStrategy.java 13 Aug 2008 18:36:14 -0000 1.1
@@ -0,0 +1,265 @@
+/*
+ * MyStrategy.java
+ *
+ * Created on April 12, 2008, 8:42 PM
+ *
+ */
+
+package org.lcsim.contrib.Pelham.Example1;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import org.lcsim.contrib.seedtracker.SeedLayer;
+import org.lcsim.contrib.seedtracker.SeedLayer.SeedType;
+import org.lcsim.contrib.seedtracker.SeedStrategy;
+import org.lcsim.contrib.seedtracker.StrategyXMLUtils;
+import org.lcsim.geometry.subdetector.BarrelEndcapFlag;
+
+public class MyStrategy {
+ private List<SeedStrategy> _strategylist = new ArrayList<SeedStrategy>();
+
+ public MyStrategy() {
+
+ BarrelEndcapFlag barrel = BarrelEndcapFlag.BARREL;
+ BarrelEndcapFlag nend = BarrelEndcapFlag.ENDCAP_NORTH;
+ BarrelEndcapFlag send = BarrelEndcapFlag.ENDCAP_SOUTH;
+
+ List<BarrelEndcapFlag> beflags = new ArrayList<BarrelEndcapFlag>();
+ beflags.add(nend);
+ beflags.add(send);
+
+ // Create an outside-in strategy for the barrel
+ List<SeedLayer> lyrlist = new ArrayList<SeedLayer>();
+ lyrlist.add(new SeedLayer("VertexBarrel",0,barrel,SeedType.Extend));
+ lyrlist.add(new SeedLayer("VertexBarrel",1,barrel,SeedType.Extend));
+ lyrlist.add(new SeedLayer("VertexBarrel",2,barrel,SeedType.Extend));
+ lyrlist.add(new SeedLayer("VertexBarrel",3,barrel,SeedType.Extend));
+ lyrlist.add(new SeedLayer("VertexBarrel",4,barrel,SeedType.Extend));
+ lyrlist.add(new SeedLayer("VertexEndcap",0,nend,SeedType.Extend));
+ lyrlist.add(new SeedLayer("VertexEndcap",1,nend,SeedType.Extend));
+ lyrlist.add(new SeedLayer("TrackerForward",0,nend,SeedType.Extend));
+ lyrlist.add(new SeedLayer("VertexEndcap",0,send,SeedType.Extend));
+ lyrlist.add(new SeedLayer("VertexEndcap",1,send,SeedType.Extend));
+ lyrlist.add(new SeedLayer("TrackerForward",0,send,SeedType.Extend));
+ lyrlist.add(new SeedLayer("TrackerBarrel",0,barrel,SeedType.Extend));
+ lyrlist.add(new SeedLayer("TrackerBarrel",1,barrel,SeedType.Confirm));
+ lyrlist.add(new SeedLayer("TrackerBarrel",2,barrel,SeedType.Seed));
+ lyrlist.add(new SeedLayer("TrackerBarrel",3,barrel,SeedType.Seed));
+ lyrlist.add(new SeedLayer("TrackerBarrel",4,barrel,SeedType.Seed));
+ SeedStrategy outsideinbarrel = new SeedStrategy("OutsideInBarrel",lyrlist);
+ _strategylist.add(outsideinbarrel);
+
+ for (BarrelEndcapFlag endcap : beflags) {
+
+
+ // Create an outside-in strategy for the disks
+ List<SeedLayer> lyrlist2 = new ArrayList<SeedLayer>();
+ lyrlist2.add(new SeedLayer("VertexBarrel",0,barrel,SeedType.Extend));
+ lyrlist2.add(new SeedLayer("VertexBarrel",1,barrel,SeedType.Extend));
+ lyrlist2.add(new SeedLayer("VertexBarrel",2,barrel,SeedType.Extend));
+ lyrlist2.add(new SeedLayer("VertexEndcap",0,endcap,SeedType.Extend));
+ lyrlist2.add(new SeedLayer("VertexEndcap",1,endcap,SeedType.Extend));
+ lyrlist2.add(new SeedLayer("VertexEndcap",2,endcap,SeedType.Extend));
+ lyrlist2.add(new SeedLayer("VertexEndcap",3,endcap,SeedType.Extend));
+ lyrlist2.add(new SeedLayer("TrackerForward",0,endcap,SeedType.Extend));
+ lyrlist2.add(new SeedLayer("TrackerForward",1,endcap,SeedType.Extend));
+ lyrlist2.add(new SeedLayer("TrackerBarrel",0,barrel,SeedType.Extend));
+ lyrlist2.add(new SeedLayer("TrackerBarrel",1,barrel,SeedType.Confirm));
+ lyrlist2.add(new SeedLayer("TrackerEndcap",0,endcap,SeedType.Confirm));
+ lyrlist2.add(new SeedLayer("TrackerEndcap",1,endcap,SeedType.Seed));
+ lyrlist2.add(new SeedLayer("TrackerEndcap",2,endcap,SeedType.Seed));
+ lyrlist2.add(new SeedLayer("TrackerEndcap",3,endcap,SeedType.Seed));
+ SeedStrategy outsideinendcap = new SeedStrategy("OutsideInEndcap",lyrlist2);
+ _strategylist.add(outsideinendcap);
+
+ // Create an outside-in strategy for the disks
+ List<SeedLayer> lyrlist3 = new ArrayList<SeedLayer>();
+ lyrlist3.add(new SeedLayer("VertexBarrel",0,barrel,SeedType.Extend));
+ lyrlist3.add(new SeedLayer("VertexBarrel",1,barrel,SeedType.Extend));
+ lyrlist3.add(new SeedLayer("VertexBarrel",2,barrel,SeedType.Extend));
+ lyrlist3.add(new SeedLayer("VertexBarrel",3,barrel,SeedType.Extend));
+ lyrlist3.add(new SeedLayer("VertexEndcap",0,endcap,SeedType.Extend));
+ lyrlist3.add(new SeedLayer("VertexEndcap",1,endcap,SeedType.Extend));
+ lyrlist3.add(new SeedLayer("TrackerForward",0,endcap,SeedType.Extend));
+ lyrlist3.add(new SeedLayer("TrackerBarrel",0,barrel,SeedType.Extend));
+ lyrlist3.add(new SeedLayer("TrackerBarrel",1,barrel,SeedType.Confirm));
+ lyrlist3.add(new SeedLayer("TrackerBarrel",2,barrel,SeedType.Seed));
+ lyrlist3.add(new SeedLayer("TrackerBarrel",3,barrel,SeedType.Seed));
+ lyrlist3.add(new SeedLayer("TrackerEndcap",3,endcap,SeedType.Seed));
+ SeedStrategy outsideinendcap3 = new SeedStrategy("OutsideInEndcap3",lyrlist3);
+ _strategylist.add(outsideinendcap3);
+
+ // Create an outside-in strategy for the disks
+ List<SeedLayer> lyrlist4 = new ArrayList<SeedLayer>();
+ lyrlist4.add(new SeedLayer("VertexBarrel",0,barrel,SeedType.Extend));
+ lyrlist4.add(new SeedLayer("VertexBarrel",1,barrel,SeedType.Extend));
+ lyrlist4.add(new SeedLayer("VertexBarrel",2,barrel,SeedType.Extend));
+ lyrlist4.add(new SeedLayer("VertexBarrel",3,barrel,SeedType.Extend));
+ lyrlist4.add(new SeedLayer("VertexEndcap",0,endcap,SeedType.Extend));
+ lyrlist4.add(new SeedLayer("VertexEndcap",1,endcap,SeedType.Extend));
+ lyrlist4.add(new SeedLayer("VertexEndcap",2,endcap,SeedType.Extend));
+ lyrlist4.add(new SeedLayer("TrackerForward",0,endcap,SeedType.Extend));
+ lyrlist4.add(new SeedLayer("TrackerBarrel",0,barrel,SeedType.Extend));
+ lyrlist4.add(new SeedLayer("TrackerBarrel",1,barrel,SeedType.Confirm));
+ lyrlist4.add(new SeedLayer("TrackerBarrel",2,barrel,SeedType.Seed));
+ lyrlist4.add(new SeedLayer("TrackerEndcap",2,endcap,SeedType.Seed));
+ lyrlist4.add(new SeedLayer("TrackerEndcap",3,endcap,SeedType.Seed));
+ SeedStrategy outsideinendcap4 = new SeedStrategy("OutsideInEndcap4",lyrlist4);
+ _strategylist.add(outsideinendcap4);
+
+ // Create an outside-in strategy for the disks
+ List<SeedLayer> lyrlist5 = new ArrayList<SeedLayer>();
+ lyrlist5.add(new SeedLayer("VertexBarrel",0,barrel,SeedType.Extend));
+ lyrlist5.add(new SeedLayer("VertexBarrel",1,barrel,SeedType.Extend));
+ lyrlist5.add(new SeedLayer("VertexBarrel",2,barrel,SeedType.Extend));
+ lyrlist5.add(new SeedLayer("VertexEndcap",0,endcap,SeedType.Extend));
+ lyrlist5.add(new SeedLayer("VertexEndcap",1,endcap,SeedType.Extend));
+ lyrlist5.add(new SeedLayer("VertexEndcap",2,endcap,SeedType.Extend));
+ lyrlist5.add(new SeedLayer("TrackerForward",0,endcap,SeedType.Extend));
+ lyrlist5.add(new SeedLayer("TrackerBarrel",0,barrel,SeedType.Extend));
+ lyrlist5.add(new SeedLayer("TrackerBarrel",1,barrel,SeedType.Confirm));
+ lyrlist5.add(new SeedLayer("TrackerEndcap",1,endcap,SeedType.Seed));
+ lyrlist5.add(new SeedLayer("TrackerEndcap",2,endcap,SeedType.Seed));
+ lyrlist5.add(new SeedLayer("TrackerEndcap",3,endcap,SeedType.Seed));
+ SeedStrategy outsideinendcap5 = new SeedStrategy("OutsideInEndcap5",lyrlist5);
+ _strategylist.add(outsideinendcap5);
+
+ // Create an outside-in strategy for the disks
+ List<SeedLayer> lyrlist6 = new ArrayList<SeedLayer>();
+ lyrlist6.add(new SeedLayer("VertexBarrel",0,barrel,SeedType.Extend));
+ lyrlist6.add(new SeedLayer("VertexBarrel",1,barrel,SeedType.Extend));
+ lyrlist6.add(new SeedLayer("VertexEndcap",0,endcap,SeedType.Extend));
+ lyrlist6.add(new SeedLayer("VertexEndcap",1,endcap,SeedType.Extend));
+ lyrlist6.add(new SeedLayer("VertexEndcap",2,endcap,SeedType.Extend));
+ lyrlist6.add(new SeedLayer("VertexEndcap",3,endcap,SeedType.Extend));
+ lyrlist6.add(new SeedLayer("TrackerForward",0,endcap,SeedType.Extend));
+ lyrlist6.add(new SeedLayer("TrackerForward",1,endcap,SeedType.Confirm));
+ lyrlist6.add(new SeedLayer("TrackerForward",2,endcap,SeedType.Confirm));
+ lyrlist6.add(new SeedLayer("TrackerEndcap",1,endcap,SeedType.Seed));
+ lyrlist6.add(new SeedLayer("TrackerEndcap",2,endcap,SeedType.Seed));
+ lyrlist6.add(new SeedLayer("TrackerEndcap",3,endcap,SeedType.Seed));
+ SeedStrategy outsideinendcap6 = new SeedStrategy("OutsideInEndcap6",lyrlist6);
+ _strategylist.add(outsideinendcap6);
+
+ // Create an outside-in strategy for the disks
+ List<SeedLayer> lyrlist7 = new ArrayList<SeedLayer>();
+ lyrlist7.add(new SeedLayer("VertexBarrel",0,barrel,SeedType.Extend));
+ lyrlist7.add(new SeedLayer("VertexBarrel",1,barrel,SeedType.Extend));
+ lyrlist7.add(new SeedLayer("VertexEndcap",0,endcap,SeedType.Extend));
+ lyrlist7.add(new SeedLayer("VertexEndcap",1,endcap,SeedType.Extend));
+ lyrlist7.add(new SeedLayer("VertexEndcap",2,endcap,SeedType.Extend));
+ lyrlist7.add(new SeedLayer("VertexEndcap",3,endcap,SeedType.Extend));
+ lyrlist7.add(new SeedLayer("TrackerForward",0,endcap,SeedType.Extend));
+ lyrlist7.add(new SeedLayer("TrackerForward",1,endcap,SeedType.Confirm));
+ lyrlist7.add(new SeedLayer("TrackerForward",2,endcap,SeedType.Seed));
+ lyrlist7.add(new SeedLayer("TrackerEndcap",2,endcap,SeedType.Seed));
+ lyrlist7.add(new SeedLayer("TrackerEndcap",3,endcap,SeedType.Seed));
+ SeedStrategy outsideinendcap7 = new SeedStrategy("OutsideInEndcap7",lyrlist7);
+ _strategylist.add(outsideinendcap7);
+
+ // Create an inside out for the forward region
+ List<SeedLayer> lyrlist8 = new ArrayList<SeedLayer>();
+ lyrlist8.add(new SeedLayer("VertexBarrel",0,barrel,SeedType.Extend));
+ lyrlist8.add(new SeedLayer("VertexBarrel",1,barrel,SeedType.Extend));
+ lyrlist8.add(new SeedLayer("VertexEndcap",0,endcap,SeedType.Seed));
+ lyrlist8.add(new SeedLayer("VertexEndcap",1,endcap,SeedType.Seed));
+ lyrlist8.add(new SeedLayer("VertexEndcap",2,endcap,SeedType.Seed));
+ lyrlist8.add(new SeedLayer("VertexEndcap",3,endcap,SeedType.Confirm));
+ lyrlist8.add(new SeedLayer("TrackerForward",0,endcap,SeedType.Extend));
+ lyrlist8.add(new SeedLayer("TrackerForward",1,endcap,SeedType.Extend));
+ lyrlist8.add(new SeedLayer("TrackerForward",2,endcap,SeedType.Extend));
+ lyrlist8.add(new SeedLayer("TrackerEndcap",2,endcap,SeedType.Extend));
+ lyrlist8.add(new SeedLayer("TrackerEndcap",3,endcap,SeedType.Extend));
+ SeedStrategy outsideinendcap8 = new SeedStrategy("InsideOutEndcap1",lyrlist8);
+ _strategylist.add(outsideinendcap8);
+
+ // Create an inside out for the forward region
+ List<SeedLayer> lyrlist9 = new ArrayList<SeedLayer>();
+ lyrlist9.add(new SeedLayer("VertexBarrel",0,barrel,SeedType.Extend));
+ lyrlist9.add(new SeedLayer("VertexBarrel",1,barrel,SeedType.Extend));
+ lyrlist9.add(new SeedLayer("VertexEndcap",0,endcap,SeedType.Seed));
+ lyrlist9.add(new SeedLayer("VertexEndcap",1,endcap,SeedType.Seed));
+ lyrlist9.add(new SeedLayer("VertexEndcap",2,endcap,SeedType.Seed));
+ lyrlist9.add(new SeedLayer("VertexEndcap",3,endcap,SeedType.Extend));
+ lyrlist9.add(new SeedLayer("TrackerForward",0,endcap,SeedType.Confirm));
+ lyrlist9.add(new SeedLayer("TrackerForward",1,endcap,SeedType.Extend));
+ lyrlist9.add(new SeedLayer("TrackerForward",2,endcap,SeedType.Extend));
+ lyrlist9.add(new SeedLayer("TrackerEndcap",2,endcap,SeedType.Extend));
+ lyrlist9.add(new SeedLayer("TrackerEndcap",3,endcap,SeedType.Extend));
+ SeedStrategy outsideinendcap9 = new SeedStrategy("InsideOutEndcap2",lyrlist9);
+ _strategylist.add(outsideinendcap9);
+
+ // Create an inside out for the forward region
+ List<SeedLayer> lyrlist10 = new ArrayList<SeedLayer>();
+ lyrlist10.add(new SeedLayer("VertexBarrel",0,barrel,SeedType.Seed));
+ lyrlist10.add(new SeedLayer("VertexBarrel",1,barrel,SeedType.Seed));
+ lyrlist10.add(new SeedLayer("VertexBarrel",2,barrel,SeedType.Extend));
+ lyrlist10.add(new SeedLayer("VertexBarrel",3,barrel,SeedType.Extend));
+ lyrlist10.add(new SeedLayer("VertexBarrel",4,barrel,SeedType.Extend));
+ lyrlist10.add(new SeedLayer("TrackerBarrel",0,barrel,SeedType.Seed));
+ lyrlist10.add(new SeedLayer("TrackerBarrel",1,barrel,SeedType.Confirm));
+ lyrlist10.add(new SeedLayer("TrackerBarrel",2,barrel,SeedType.Extend));
+ lyrlist10.add(new SeedLayer("TrackerBarrel",3,barrel,SeedType.Extend));
+ lyrlist10.add(new SeedLayer("TrackerBarrel",4,barrel,SeedType.Extend));
+ lyrlist10.add(new SeedLayer("VertexEndcap",0,endcap,SeedType.Extend));
+ lyrlist10.add(new SeedLayer("VertexEndcap",1,endcap,SeedType.Extend));
+ lyrlist10.add(new SeedLayer("VertexEndcap",2,endcap,SeedType.Extend));
+ lyrlist10.add(new SeedLayer("VertexEndcap",3,endcap,SeedType.Extend));
+ lyrlist10.add(new SeedLayer("TrackerForward",0,endcap,SeedType.Extend));
+ lyrlist10.add(new SeedLayer("TrackerForward",1,endcap,SeedType.Extend));
+ lyrlist10.add(new SeedLayer("TrackerForward",2,endcap,SeedType.Extend));
+ lyrlist10.add(new SeedLayer("TrackerEndcap",2,endcap,SeedType.Extend));
+ lyrlist10.add(new SeedLayer("TrackerEndcap",3,endcap,SeedType.Extend));
+ SeedStrategy outsideinendcap10 = new SeedStrategy("InsideOutEndcap3",lyrlist10);
+ _strategylist.add(outsideinendcap10);
+
+ // Create an inside out for the forward region
+ List<SeedLayer> lyrlist11 = new ArrayList<SeedLayer>();
+ lyrlist11.add(new SeedLayer("VertexBarrel",0,barrel,SeedType.Extend));
+ lyrlist11.add(new SeedLayer("VertexBarrel",1,barrel,SeedType.Extend));
+ lyrlist11.add(new SeedLayer("VertexBarrel",2,barrel,SeedType.Extend));
+ lyrlist11.add(new SeedLayer("VertexBarrel",3,barrel,SeedType.Extend));
+ lyrlist11.add(new SeedLayer("VertexBarrel",4,barrel,SeedType.Extend));
+ lyrlist11.add(new SeedLayer("TrackerBarrel",0,barrel,SeedType.Extend));
+ lyrlist11.add(new SeedLayer("TrackerBarrel",1,barrel,SeedType.Extend));
+ lyrlist11.add(new SeedLayer("TrackerBarrel",2,barrel,SeedType.Extend));
+ lyrlist11.add(new SeedLayer("TrackerBarrel",3,barrel,SeedType.Extend));
+ lyrlist11.add(new SeedLayer("TrackerBarrel",4,barrel,SeedType.Extend));
+ lyrlist11.add(new SeedLayer("VertexEndcap",0,endcap,SeedType.Extend));
+ lyrlist11.add(new SeedLayer("VertexEndcap",1,endcap,SeedType.Seed));
+ lyrlist11.add(new SeedLayer("VertexEndcap",2,endcap,SeedType.Seed));
+ lyrlist11.add(new SeedLayer("VertexEndcap",3,endcap,SeedType.Seed));
+ lyrlist11.add(new SeedLayer("TrackerForward",0,endcap,SeedType.Confirm));
+ lyrlist11.add(new SeedLayer("TrackerForward",1,endcap,SeedType.Extend));
+ lyrlist11.add(new SeedLayer("TrackerForward",2,endcap,SeedType.Extend));
+ lyrlist11.add(new SeedLayer("TrackerEndcap",2,endcap,SeedType.Extend));
+ lyrlist11.add(new SeedLayer("TrackerEndcap",3,endcap,SeedType.Extend));
+ SeedStrategy outsideinendcap11 = new SeedStrategy("InsideOutEndcap4",lyrlist11);
+ _strategylist.add(outsideinendcap11);
+
+ }
+
+ for (SeedStrategy strategy : _strategylist) {
+ // Set parameters for this strategy
+ strategy.putMinPT(1.0); // Set minimum pT at 1 GeV
+ strategy.putMaxDCA(10.0); // Set maximum d0 at 1 mm
+ strategy.putMaxZ0(10.0); // Set maximum z0 at 1 mm
+ strategy.putMinConfirm(1); // Require at least 1 confirm hit
+ strategy.putMinHits(7); // Require at least 7 total hits
+ strategy.putMaxChisq(50.); // Set maximum chi^2 at 50
+ strategy.putBadHitChisq(15.); // Set chi^2 change that gives preference to excluding the hit
+ }
+ }
+
+ public List<SeedStrategy> getStrategies() {
+ return _strategylist;
+ }
+
+ public static void main(String[] args){
+ MyStrategy strat = new MyStrategy();
+
+ StrategyXMLUtils.writeStrategyListToFile(strat.getStrategies(), new File("C:\\out.xml"));
+
+ }
+}
lcsim/src/org/lcsim/contrib/Pelham/Example1
diff -N VSExampleSegmenter.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ VSExampleSegmenter.java 13 Aug 2008 18:36:14 -0000 1.1
@@ -0,0 +1,64 @@
+package org.lcsim.contrib.Pelham.Example1;
+
+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/08/13 18:36:14 keaheyp 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);
+
+ // 15 degrees stereo wedges in Forward Tracker
+
+ DiskTrackerToWedgesSegmenter trackerForwardSegmenter = new DiskTrackerToWedgesSegmenter("TrackerForward");
+ trackerForwardSegmenter.setStripLength(10.*SystemOfUnits.cm);
+ trackerForwardSegmenter.setStripWidth(25.*SystemOfUnits.micrometer);
+ trackerForwardSegmenter.setNumberOfPhiSlices(24);
+ setSegmenter("TrackerForward", trackerForwardSegmenter);
+
+ // 15 degrees stereo wedges in outer Tracker Endcap
+
+ DiskTrackerToWedgesSegmenter trackerEndcapSegmenter = new DiskTrackerToWedgesSegmenter("TrackerEndcap");
+ trackerEndcapSegmenter.setNumberOfRadialSlices(new int[]{3,5,8,10, 10});
+ trackerEndcapSegmenter.setStripWidth(25.*SystemOfUnits.micrometer);
+ trackerEndcapSegmenter.setNumberOfPhiSlices(24);
+ setSegmenter("TrackerEndcap", trackerEndcapSegmenter);
+ }
+
+// -- Private parts : ---------------------------------------------------------
+
+}
lcsim/src/org/lcsim/contrib/Pelham/Example1
diff -N VSExampleDriver.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ VSExampleDriver.java 13 Aug 2008 18:36:14 -0000 1.1
@@ -0,0 +1,128 @@
+package org.lcsim.contrib.Pelham.Example1;
+
+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/08/13 18:36:14 keaheyp 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/Pelham/Example1
diff -N MyTrackerDriver.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ MyTrackerDriver.java 13 Aug 2008 18:36:14 -0000 1.1
@@ -0,0 +1,57 @@
+/*
+ * MyTrackerDriver.java
+ *
+ * Created on March 29, 2006, 4:58 PM
+ *
+ */
+
+package org.lcsim.contrib.Pelham.Example1;
+
+import java.io.File;
+import org.lcsim.contrib.seedtracker.SeedTracker;
+//import org.lcsim.contrib.seedtracker.diagnostic.SeedTrackerDiagnostics;
+import org.lcsim.contrib.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
+{ private int counter=0;
+ 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);
+
+ // Create a list of strategies to be used in track finding
+ MyStrategy strategylist = new MyStrategy();
+
+ // Add a driver to do the track finding
+ SeedTracker st = new SeedTracker(strategylist.getStrategies());
+ //st.setDiagnostics(new SeedTrackDiag());
+ add(st);
+
+ // Add an example analysis driver
+ add(new HistogramAnalysisDriver());
+
+ }
+ public void process(EventHeader event)
+ {
+ System.out.println("Event Number:"+counter);
+ counter++;
+ super.process(event);
+ return;
+ }
+}
lcsim/src/org/lcsim/contrib/Pelham/Example1
diff -u -r1.3 -r1.4
--- HistogramAnalysisDriver.java 7 Aug 2008 21:07:09 -0000 1.3
+++ HistogramAnalysisDriver.java 13 Aug 2008 18:36:14 -0000 1.4
@@ -8,27 +8,23 @@
package org.lcsim.contrib.Pelham.Example1;
-import hep.aida.IHistogram1D;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
+import org.lcsim.contrib.seedtracker.analysis.TrackHitHistograms;
+import org.lcsim.contrib.seedtracker.analysis.HelixParamHistograms;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
-import java.util.HashSet;
import org.lcsim.contrib.seedtracker.SeedTrack;
import org.lcsim.contrib.seedtracker.SeedCandidate;
import org.lcsim.contrib.seedtracker.analysis.AnalysisUtils;
+import org.lcsim.contrib.seedtracker.analysis.EfficiencyHistograms;
import org.lcsim.fit.helicaltrack.HelicalTrackFit;
import org.lcsim.fit.helicaltrack.HelicalTrackHit;
import org.lcsim.contrib.seedtracker.analysis.HelixParamCalculator;
+import org.lcsim.contrib.seedtracker.analysis.PurityHistograms;
import org.lcsim.event.EventHeader;
import org.lcsim.event.Track;
import org.lcsim.event.MCParticle;
-import org.lcsim.event.RawTrackerHit;
-import org.lcsim.fit.helicaltrack.HelicalTrackFitter;
-import org.lcsim.fit.helicaltrack.HelicalTrackFitter.FitStatus;
import org.lcsim.util.aida.AIDA;
import org.lcsim.util.Driver;
@@ -40,27 +36,20 @@
*/
public class HistogramAnalysisDriver extends Driver {
private AIDA aida = AIDA.defaultInstance();
- IHistogram1D thetaeff,pteff,dcaeff,z0eff,phi0eff,tanLeff,omegaeff,eff;
- private double foundtracks=0,findabletracks=0,effi;
/** Creates a new instance of AnalysisDriver */
public HistogramAnalysisDriver() {
- aida.tree().mkdir("Efficiency");
- thetaeff = aida.histogramFactory().createHistogram1D("Efficiency/Theta","", 90, 0., 180., "type=efficiency");
- pteff = aida.histogramFactory().createHistogram1D("Efficiency/Pt","", 100, 0., 50., "type=efficiency");
- aida.tree().mkdir("Efficiency/HelixParam");
- dcaeff = aida.histogramFactory().createHistogram1D("Efficiency/HelixParam/DCA","", 120, -4., 4., "type=efficiency");
- z0eff = aida.histogramFactory().createHistogram1D("Efficiency/HelixParam/z0","", 120, -4., 4., "type=efficiency");
- phi0eff = aida.histogramFactory().createHistogram1D("Efficiency/HelixParam/phi0","", 120, 0., 360., "type=efficiency");
- tanLeff = aida.histogramFactory().createHistogram1D("Efficiency/HelixParam/tanL","", 120, -10., 10., "type=efficiency");
- omegaeff = aida.histogramFactory().createHistogram1D("Efficiency/HelixParam/Omega","", 120, -.02, .02, "type=efficiency");
- eff = aida.histogramFactory().createHistogram1D("Efficiency/efficiency",200,0,3);
+
}
/**
* Process the current event
* @param event EventHeader for this event
*/
+ PurityHistograms draw3 = new PurityHistograms();
+ EfficiencyHistograms draw4 = new EfficiencyHistograms();
public void process(EventHeader event){
+
+
List<Track> tracklist = event.getTracks();
Map<MCParticle, Track> trkmap = new HashMap<MCParticle, Track>();
@@ -109,7 +98,8 @@
//Class to draw histrogram
HelixParamHistograms draw = new HelixParamHistograms(fit,mcp,event);
HelixParamCalculator calc = new HelixParamCalculator(mcp, 5);
-
+ AnalysisUtils util = new AnalysisUtils();
+
//---Helix Parameter Histrograms------------Helix Parameter Histrograms---\\
aida.histogram1D("p", 200, 0, 50).fill(calc.getMCMomentum());
if(mcp.getCharge()>0)
@@ -126,8 +116,7 @@
draw.DrawPull();
- List<HelicalTrackHit> hit = strk.getSeedCandidate().getHits();
- TrackHitHistograms draw2 = new TrackHitHistograms(fit, mcp,event,hit);
+ TrackHitHistograms draw2 = new TrackHitHistograms(fit, mcp,event);
//---MCParticle vs HelicalTrackFit----------------------------MCParticle vs HelicalTrackFit---
draw2.drawMCParticlevHelicalTrackHit();
@@ -135,209 +124,14 @@
//---SimTracker vs HelicalTrackFit---------------------------SimTracker vs HelicalTrackFit---
draw2.drawSimTrackervHelicalTrack();
- Map<MCParticle,Integer> occurrences = new HashMap<MCParticle,Integer>();
- double purity=0;
- double mostoccured;
- int index;
-
- for (HelicalTrackHit h : strk.getSeedCandidate().getHits()){
- List<MCParticle> mcpl = h.getMCParticles();
- for(MCParticle part : mcpl){
- if(occurrences.containsKey(part)){
- index = occurrences.get(part);
- occurrences.put(part,index+1);
- }
- else {
- occurrences.put(part, 1);
- }
- }
-
- }
- if(occurrences.size()==1){
- purity =1;
- }
- else{
- mostoccured = -1;
- for(MCParticle p : occurrences.keySet()){
- int occured = occurrences.get(p);
- if(occured>mostoccured){
- mostoccured = occured;
- }
- }
- purity = mostoccured / strk.getSeedCandidate().getHits().size();
- }
- int hitsize = strk.getSeedCandidate().getHits().size();
- String stratname = strk.getStrategy().getName();
- if(purity<.5)aida.histogram1D("Purity/Purity<.5 only", 200, 0, 1.1).fill(purity);
- //1D histograms
- aida.histogram1D("Purity/Strat: "+stratname, 200,0,1.1).fill(purity);
- aida.histogram1D("Purity/Purity", 200, 0, 1.1).fill(purity);
- if(purity!=1)aida.histogram1D("Purity/Purity<1 only", 200, 0, 1.1).fill(purity);
- aida.histogram1D("Purity/Purity to hits: "+hitsize, 300, 0, 1.1).fill(purity);
- //2D histograms
- aida.histogram1D("Purity/Hits v Purity", 200, 0, 20,"type=efficiency").fill(hitsize,purity);
- aida.histogram1D("Purity/Theta v Purity", 100, 10, 100, "type=efficiency").fill(180*calc.getTheta()/Math.PI,purity);
- aida.histogram1D("Purity/Pt v Purity", 200, 0, 70,"type=efficiency").fill(calc.getMCTransverseMomentum(),purity);
-
-
- }
- }
- HelixParamCalculator calc = new HelixParamCalculator(mcp, 5);
- double wgt=0;
- double theta = calc.getTheta();
- double pt = calc.getMCTransverseMomentum();
- double dca = calc.getDCA();
- double z0 = calc.getZ0();
- double degreetheta = 180*theta / Math.PI;
- Map<MCParticle,List<String>> hitlayermap = new HashMap<MCParticle,List<String>>();
- Map<MCParticle,List<HelicalTrackHit>> hitordermap = new HashMap<MCParticle,List<HelicalTrackHit>>();
- //!!
- List<HelicalTrackHit> listjmk = event.get(HelicalTrackHit.class,"HelicalTrackHits");
- List<MCParticle> temp = new ArrayList<MCParticle>();
- AnalysisUtils util = new AnalysisUtils();
- //!!
- HelicalTrackFitter fitme = new HelicalTrackFitter();
-
- Collections.sort(listjmk, new Comparator() {
-
- public int compare(Object o1, Object o2) {
- HelicalTrackHit h1 = (HelicalTrackHit) o1;
- HelicalTrackHit h2 = (HelicalTrackHit) o2;
-
- double t1, t2;
- try{
- t1 = ((RawTrackerHit)h1.getRawHits().get(0)).getSimTrackerHit().get(0).getTime();
- t2 = ((RawTrackerHit)h2.getRawHits().get(0)).getSimTrackerHit().get(0).getTime();
- } catch(NullPointerException npe) {
- t1 = h1.getTime();
- t2 = h2.getTime();
- }
-
- return Double.compare(t1, t2);
- }
- });
-
- for(HelicalTrackHit hito : listjmk){
- List<MCParticle> mplist = hito.getMCParticles();
- for(MCParticle mp : mplist){
- if(hitlayermap.containsKey(mp)){
- hitlayermap.get(mp).add(hito.getLayerIdentifier());
- hitordermap.get(mp).add(hito);
- }
- else{
- ArrayList<String> layers = new ArrayList<String>();
- layers.add(hito.getLayerIdentifier());
- hitlayermap.put(mp, layers);
- ArrayList<HelicalTrackHit> trackhits = new ArrayList<HelicalTrackHit>();
- trackhits.add(hito);
- hitordermap.put(mp, trackhits);
- temp.add(mp);
- }
- }
- }
- List<MCParticle> testlist = util.FindMCParticleInAllHits(listjmk);
- if(testlist.containsAll(temp)){System.out.println("true");}
- HashSet<String> bleh = new HashSet<String>();
- if(hitlayermap.containsKey(mcp)){
- for(String e : hitlayermap.get(mcp)){
- bleh.add(e);
- }
- }
-
- if(hitlayermap.containsKey(mcp) && bleh.size()>=7){
-
- if(trkmap.containsKey(mcp)){
- wgt=1;
- eff.fill(1);
- foundtracks++;
- findabletracks++;
- //pass to fitter in sim tracker give any strategy, 'helix fitter" first try helicaltrackfitter
- }
- else if(pt>1.1 && Math.abs(dca) < 9 && Math.abs(z0) < 9 && Math.cos(theta) < 0.985 ){
- findabletracks++;
- eff.fill(2);
- if(hitordermap.containsKey(mcp)){
-
- FitStatus status = fitme.fit(hitordermap.get(mcp));
- if(status==FitStatus.Success){
- System.out.println("Fitted Successfully From Analysis Driver");
- HelicalTrackFit trackfit = fitme.getFit();
- System.out.println("P: "+mcp.getMomentum().toString());
- for(HelicalTrackHit h : hitordermap.get(mcp)){
- System.out.print(h.getLayerIdentifier()+"(time:"+h.getTime()+")");
- System.out.print("("+h.getPosition()[0]+",");
- System.out.print(h.getPosition()[1]+",");
- System.out.print(h.getPosition()[2]+")");
- System.out.println();
- }
- System.out.println("chisq0: "+trackfit.chisq()[0]);
- System.out.println("chisq1: "+trackfit.chisq()[1]);
- System.out.println("chisqtot: "+trackfit.chisqtot());
- System.out.println();
-
- }
- else{
- System.out.println("Failed to fit: "+status.toString());
- }
- }
- aida.histogram1D("Efficiency/NoNHit/MissCount", 100, 0., 2.).fill(1);
- aida.histogram1D("Efficiency/NoNHit/Size", 100, 0., 15.).fill(hitlayermap.get(mcp).size());
- aida.histogram1D("Efficiency/NoNHit/p", 100, 0., 10.).fill(calc.getMCMomentum());
- aida.histogram1D("Efficiency/NoNHit/pt", 100, 0., 14.).fill(calc.getMCTransverseMomentum());
- //aida.histogram1D("Efficiency/NoNHit/Endpoint", 100, -5000., 5000).fill(mcp.getEndPoint().x()*mcp.getEndPoint().x()+mcp.getEndPoint().y()*mcp.getEndPoint().y());
- aida.histogram1D("Efficiency/NoNHit/theta", 100, 0., 180).fill(180*calc.getTheta()/Math.PI);
- aida.histogram1D("Efficiency/NoNHit/theta", 100, 0., 180).fill(180*calc.getTheta()/Math.PI);
- if(aida.histogram1D("Efficiency/NoNHit/layer hit path/"+hitlayermap.get(mcp).toString(), 100, 0., 360).entries()>1){
- aida.histogram1D("Efficiency/NoNHit/layer hit path/"+hitlayermap.get(mcp).toString(), 100, 0., 360).setTitle("Interesting");
- }
- aida.histogram1D("Efficiency/NoNHit/layer hit path/"+hitlayermap.get(mcp).toString(), 100, 0, 360).fill(180*calc.getTheta()/Math.PI);
-
- }
- //particle type
+ //---Purity---------------------------Purity---
+ draw3.drawPurityHistograms(mcp, trk);
-
- //p vec,endpoint,daughters,charge
-
- //how many hits
- //sim final state
-
- if(pt>1.1 && Math.abs(dca) < 9 && Math.abs(z0) < 9){
- thetaeff.fill(degreetheta, wgt);
- tanLeff.fill(calc.getSlopeSZPlane(), wgt);
- aida.histogram1D("Efficiency/MCType/tanL/"+mcp.getType().getName(),120, -10., 10., "type=efficiency").fill(calc.getSlopeSZPlane(), wgt);
- }
- //Pt Cuts: Cos(theta) DCA z0
- if (Math.cos(theta) < 0.985 && Math.abs(dca) < 9 && Math.abs(z0) < 9) {
- pteff.fill(pt,wgt);
- aida.histogram1D("Efficiency/MCType/Pt/"+mcp.getType().getName(), 100, 0., 50., "type=efficiency").fill(pt, wgt);
- }
- //Omega Cut: Pt
- if(pt>1.1){
- omegaeff.fill(calc.getMCOmega(), wgt);
- aida.histogram1D("Efficiency/MCType/Omega/"+mcp.getType().getName(), 120, -.02, .02, "type=efficiency").fill(calc.getMCOmega(), wgt);
- }
- //Z0 Cuts: Pt DCA Cos(theta)
- if(pt>1.1 && Math.abs(dca) < 9 && Math.cos(theta) < 0.985){
- z0eff.fill(calc.getZ0(), wgt);
- aida.histogram1D("Efficiency/MCType/z0/"+mcp.getType().getName(), 120, -4., 4., "type=efficiency").fill(calc.getZ0(), wgt);
- }
- //DCA Cuts: Pt Cos(theta) z0
- if(pt>1.1 && Math.cos(theta) < 0.985 && Math.abs(z0) < 9){
- dcaeff.fill(calc.getDCA(), wgt);
- aida.histogram1D("Efficiency/MCType/DCA/"+mcp.getType().getName(), 120, -4., 4., "type=efficiency").fill(calc.getDCA(), wgt);
- }
- //Phi0 Cuts: Pt Cos(theta) z0 DCA
- if(pt>1.1 && Math.cos(theta) < 0.985 && Math.abs(z0) < 9 && Math.abs(dca) < 9){
- phi0eff.fill(180*calc.getPhi0()/Math.PI, wgt);
- aida.histogram1D("Efficiency/MCType/phi0/"+mcp.getType().getName(), 120, 0., 360., "type=efficiency").fill(calc.getDCA(), wgt);
- }
- }
+ }
+ }
+ //--Efficiency---------------------------Efficiency---
+ draw4.drawEfficiencyHistograms(mcp,event);
}
- effi = (foundtracks/findabletracks)*100;
- System.out.println("%:"+ effi);
- return;
- }
-
-
}
+ }
lcsim/src/org/lcsim/contrib/Pelham/Example1
diff -N HelixParamHistograms.java
--- HelixParamHistograms.java 25 Jul 2008 18:40:42 -0000 1.3
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,177 +0,0 @@
-package org.lcsim.contrib.Pelham.Example1;
-
-
-import org.lcsim.fit.helicaltrack.HelicalTrackFit;
-import org.lcsim.event.MCParticle;
-import org.lcsim.event.EventHeader;
-import org.lcsim.util.aida.AIDA;
-import org.lcsim.fit.helicaltrack.HelixParamCalculator;
-
-/**
- *
- * @author Pelham Keahey
- * Thursday, July 3rd 2008
- */
-public class HelixParamHistograms {
- //helix from mc partcle for layer hit 1st
- //simtracker hit where is nrg
- //pos from tracker hit 2nd
- //compare fitted helix to mcparticle hits r phi z
- private AIDA aida = AIDA.defaultInstance();
- //Histrogram Variables
- private double datom,dtl,ddca,dphi0,dz,dm,dtm;
- private double mcom,mctl,mcdca,mcphi0,mcz,mcm,mctm;
- //Error Variables
- private double curverror,sloperror,dcaerror,phi0error,z0error;
-
- //Constructor for Histrogram Drawer, Calculations done inside as well
- public HelixParamHistograms(HelicalTrackFit fit,MCParticle mcp,EventHeader event)
- {
-
-
- HelixParamCalculator calc = new HelixParamCalculator(mcp,event);
- //************ Data Calculations for MOMENTUM, OMEGA, TRANS. MOMENTUM *********
- dm = fit.p(calc.getMagField());
- datom = fit.curvature();
- dtm = fit.pT(calc.getMagField());
-
-
- //************* MCParticles Calculations for MOMENTUM, OMEGA, TRANS. MOMENTUM ******
- mcm = calc.getMCMomentum();
- mcom = calc.getMCOmega();
- mctm = calc.getMCTransverseMomentum();
-
-
- //************ Tan Lamda Calculations tanL tsnL tan L *************
- dtl = fit.slope();
- mctl = calc.getSlopeSZPlane();
-
-
- //************ DCA Calculations DCA DCA DCA DCA DCA DCA *************
- ddca = fit.dca();
- mcdca = calc.getDCA();
-
-
- //******* phi0 Calculation phi0 phi0 phi0 phi0 ******************
- dphi0 = fit.phi0();
- mcphi0 = calc.getPhi0();
-
-
- //******* z0 Calculations z0 z0 z0 z0 z0 z0 z0 ************************
- dz = fit.z0();
- mcz= calc.getZ0();
-
-
- //Get error for calculating the pull
- curverror = fit.getCurveError();
- sloperror = fit.getSlopeError();
- dcaerror = fit.getDcaError();
- phi0error = fit.getPhi0Error();
- z0error = fit.getZ0Error();
-
-
- }
- public void DrawDataPositive()
- {
-
- aida.histogram1D("HelixParam/1Dat-Positive/Omega", 300, -1*Math.pow(10, -3), Math.pow(10,-3)).fill(datom);
- aida.histogram1D("HelixParam/1Dat-Positive/tanL", 200, -8., 8.).fill(dtl);
- aida.histogram1D("HelixParam/1Dat-Positive/DCA", 200, -.1, .1).fill(ddca);
- aida.histogram1D("HelixParam/1Dat-Positive/phi0", 200, -1., 3*Math.PI).fill(dphi0);
- aida.histogram1D("HelixParam/1Dat-Positive/z0" , 200, -.1, .1).fill(dz);
- aida.histogram1D("HelixParam/1Dat-Positive/Momentum", 200, 0., 200.).fill(dm);
- aida.histogram1D("HelixParam/1Dat-Positive/Trans.Momentum", 200, 0., 150.).fill(dtm);
- }
- public void DrawDataNegative()
- {
- aida.histogram1D("HelixParam/2Dat-Negative/Omega", 300, -1*Math.pow(10, -3), Math.pow(10,-3)).fill(datom);
- aida.histogram1D("HelixParam/2Dat-Negative/tanL", 200, -8., 8.).fill(dtl);
- aida.histogram1D("HelixParam/2Dat-Negative/DCA", 200, -.1, .1).fill(ddca);
- aida.histogram1D("HelixParam/2Dat-Negative/phi0", 200, -1., 3*Math.PI).fill(dphi0);
- aida.histogram1D("HelixParam/2Dat-Negative/z0" , 200, -.1, .1).fill(dz);
- aida.histogram1D("HelixParam/2Dat-Negative/Momentum", 200, 0., 200.).fill(dm);
- aida.histogram1D("HelixParam/2Dat-Negative/Trans.Momentum", 200, 0., 150.).fill(dtm);
- }
- public void DrawMCPositive()
- {
-
- aida.histogram1D("HelixParam/3MC-Positive/Omega", 300, -1*Math.pow(10, -3), Math.pow(10,-3)).fill(mcom);
- aida.histogram1D("HelixParam/3MC-Positive/tanL", 200, -8., 8.).fill(mctl);
- aida.histogram1D("HelixParam/3MC-Positive/DCA", 200, -.01, .01).fill(mcdca);
- aida.histogram1D("HelixParam/3MC-Positive/phi0", 200, -1., 3*Math.PI).fill(mcphi0);
- aida.histogram1D("HelixParam/3MC-Positive/z0" , 200, -.001, .001).fill(mcz);
- aida.histogram1D("HelixParam/3MC-Positive/Momentum", 200, 0., 200.).fill(mcm);
- aida.histogram1D("HelixParam/3MC-Positive/Trans.Momentum", 200, 0., 150.).fill(mctm);
- }
- public void DrawMCNegative()
- {
- aida.histogram1D("HelixParam/4MC-Negative/Omega", 300, -1*Math.pow(10, -3), Math.pow(10,-3)).fill(mcom);
- aida.histogram1D("HelixParam/4MC-Negative/tanL", 200, -8., 8.).fill(mctl);
- aida.histogram1D("HelixParam/4MC-Negative/DCA", 200, -.01, .01).fill(mcdca);
- aida.histogram1D("HelixParam/4MC-Negative/phi0", 200, -1., 3*Math.PI).fill(mcphi0);
- aida.histogram1D("HelixParam/4MC-Negative/z0" , 200, -.001, .001).fill(mcz);
- aida.histogram1D("HelixParam/4MC-Negative/Momentum", 200, 0., 200.).fill(mcm);
- aida.histogram1D("HelixParam/4MC-Negative/Trans.Momentum", 200, 0., 150.).fill(mctm);
-
- }
- public void DrawResidualPositive()
- {
- aida.histogram1D("HelixParam/Residual-Positive/Momentum" , 200, -10., 10.).fill(dm-mcm);
- aida.histogram1D("HelixParam/Residual-Positive/Trans.Momentum", 200, -5., 5.).fill(dtm-mctm);
- aida.histogram1D("HelixParam/Residual-Positive/Omega" , 300, -5*Math.pow(10, -6), 5*Math.pow(10,-6)).fill(datom-mcom);
- aida.histogram1D("HelixParam/Residual-Positive/tanL" , 300, -.01, .01).fill(dtl-mctl);
- aida.histogram1D("HelixParam/Residual-Positive/DCA" , 200, -.1, .1).fill(ddca-mcdca);
- aida.histogram1D("HelixParam/Residual-Positive/phi0" , 200, -.002, .002).fill(dphi0-mcphi0);
- aida.histogram1D("HelixParam/Residual-Positive/z0" , 200, -.1, .1).fill(dz-mcz);
-
- }
- public void DrawResidualNegative()
- {
- aida.histogram1D("HelixParam/Residual-Negative/Momentum" , 200, -10., 10.).fill(dm-mcm);
- aida.histogram1D("HelixParam/Residual-Negative/Trans.Momentum", 200, -5., 5.).fill(dtm-mctm);
- aida.histogram1D("HelixParam/Residual-Negative/Omega" , 300, -5*Math.pow(10, -6), 5*Math.pow(10,-6)).fill(datom-mcom);
- aida.histogram1D("HelixParam/Residual-Negative/tanL" , 300, -.01, .01).fill(dtl-mctl);
- aida.histogram1D("HelixParam/Residual-Negative/DCA" , 200, -.1, .1).fill(ddca-mcdca);
- aida.histogram1D("HelixParam/Residual-Negative/phi0" , 200, -.002, .002).fill(dphi0-mcphi0);
- aida.histogram1D("HelixParam/Residual-Negative/z0" , 200, -.1, .1).fill(dz-mcz);
-
- }
- public void DrawResidual()
- {
- aida.histogram1D("HelixParam/Residual-both/Momentum" , 200, -10., 10.).fill(dm-mcm);
- aida.histogram1D("HelixParam/Residual-both/Trans.Momentum", 200, -5., 5.).fill(dtm-mctm);
- aida.histogram1D("HelixParam/Residual-both/Omega" , 300, -5*Math.pow(10, -6), 5*Math.pow(10,-6)).fill(datom-mcom);
- aida.histogram1D("HelixParam/Residual-both/tanL" , 300, -.01, .01).fill(dtl-mctl);
- aida.histogram1D("HelixParam/Residual-both/DCA" , 200, -.1, .1).fill(ddca-mcdca);
- aida.histogram1D("HelixParam/Residual-both/phi0" , 200, -.002, .002).fill(dphi0-mcphi0);
- aida.histogram1D("HelixParam/Residual-both/z0" , 200, -.1, .1).fill(dz-mcz);
-
- }
- public void DrawPullPositive()
- {
- aida.histogram1D("HelixParam/Pull-Positive/Omega", 300, -10, 10).fill((datom-mcom)/curverror);
- aida.histogram1D("HelixParam/Pull-Positive/tanL" , 300, -11, 11).fill((dtl-mctl)/sloperror);
- aida.histogram1D("HelixParam/Pull-Positive/dca" , 300, -10, 10).fill((ddca-mcdca)/dcaerror);
- aida.histogram1D("HelixParam/Pull-Positive/phi0" , 300, -11, 11).fill((dphi0-mcphi0)/phi0error);
- aida.histogram1D("HelixParam/Pull-Positive/z0" , 300, -50, 50).fill((dz-mcz)/z0error);
-
- }
- public void DrawPullNegative()
- {
- aida.histogram1D("HelixParam/Pull-Negative/Omega", 300, -10, 10).fill((datom-mcom)/curverror);
- aida.histogram1D("HelixParam/Pull-Negative/tanL" , 300, -11, 11).fill((dtl-mctl)/sloperror);
- aida.histogram1D("HelixParam/Pull-Negative/dca" , 300, -10, 10).fill((ddca-mcdca)/dcaerror);
- aida.histogram1D("HelixParam/Pull-Negative/phi0" , 300, -11, 11).fill((dphi0-mcphi0)/phi0error);
- aida.histogram1D("HelixParam/Pull-Negative/z0" , 300, -50, 50).fill((dz-mcz)/z0error);
- }
- public void DrawPull()
- {
- aida.histogram1D("HelixParam/Pull-Both/Omega", 300, -10, 10).fill((datom-mcom)/curverror);
- aida.histogram1D("HelixParam/Pull-Both/tanL" , 300, -11, 11).fill((dtl-mctl)/sloperror);
- aida.histogram1D("HelixParam/Pull-Both/dca " , 300, -10, 10).fill((ddca-mcdca)/dcaerror);
- aida.histogram1D("HelixParam/Pull-Both/phi0" , 300, -11, 11).fill((dphi0-mcphi0)/phi0error);
- aida.histogram1D("HelixParam/Pull-Both/z0 " , 300, -50, 50).fill((dz-mcz)/z0error);
- }
-
-
-}
lcsim/src/org/lcsim/contrib/Pelham/Example1
diff -N TrackHitHistograms.java
--- TrackHitHistograms.java 25 Jul 2008 22:10:10 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,305 +0,0 @@
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-
-package org.lcsim.contrib.Pelham.Example1;
-import java.util.Map;
-import hep.physics.vec.BasicHep3Vector;
-import hep.physics.vec.VecOp;
-import java.util.ArrayList;
-import org.lcsim.fit.helicaltrack.HelicalTrackFit;
-import org.lcsim.event.MCParticle;
-import org.lcsim.event.EventHeader;
-import org.lcsim.fit.helicaltrack.HelicalTrackHit;
-import org.lcsim.fit.helicaltrack.HelixParamCalculator;
-import org.lcsim.util.aida.AIDA;
-import java.util.List;
-import org.lcsim.event.SimTrackerHit;
-import org.lcsim.fit.helicaltrack.HelicalTrackCross;
-import org.lcsim.fit.helicaltrack.HelicalTrackStrip;
-import org.lcsim.fit.helicaltrack.HelixUtils;
-import java.util.HashMap;
-
-/**
- *
- * @author Pelham Keahey
- */
-public class TrackHitHistograms {
-
- private AIDA aida = AIDA.defaultInstance();
- private double phi,r,z;
- private double phih,rh,zh;
- private double simr,simz,simphi;
- HelicalTrackFit fit;
- MCParticle mcp;
- EventHeader event;
- List<HelicalTrackHit> hitlist;
-
- /**
- *
- * @param pfit
- * @param pmcp
- * @param pevent
- * @param phit
- */
- public TrackHitHistograms(HelicalTrackFit pfit, MCParticle pmcp, EventHeader pevent,List<HelicalTrackHit> phit)
- {
- fit=pfit;
- event = pevent;
- mcp=pmcp;
- hitlist = phit;
-
-
- }
- public void drawMCParticlevHelicalTrackHit()
- {
- HelixParamCalculator calc = new HelixParamCalculator(mcp, event);
- double [] pars = new double[5];
- pars[0]=calc.getDCA();
- pars[1]=calc.getPhi0();
- pars[2]=calc.getMCOmega();
- pars[3]=calc.getZ0();
- pars[4]=calc.getSlopeSZPlane();
-
- for(HelicalTrackHit hit : hitlist)
- {
- Map<HelicalTrackHit, Double> lol = new HashMap<HelicalTrackHit, Double>();
- lol.put(hit, calc.getArcLength());
-
- HelicalTrackFit test = new HelicalTrackFit(pars,null, null, null, lol, null);
- //Calculations for MC particle
- //find x0,y0 coordinates
- double x0 = calc.getX0();
- double y0 = calc.getY0();
-
- //find the pathlength of the helix directly from the hit
- double pathlength;
- double closer=999999999,difference;
-
- List<Double> listd;
- HelixUtils util = new HelixUtils();
- if(hit.BarrelEndcapFlag().isBarrel()){
- listd = util.PathToCylinder(fit, hit.r(), 5000, 10);
- closer = 999999999;
- pathlength = listd.get(0);
- for(double temp : listd){
- BasicHep3Vector tempvec = (BasicHep3Vector) util.PointOnHelix(fit, temp);
- difference = Math.abs(hit.z()-tempvec.z());
- if(difference<closer){
- closer = difference;
- pathlength = temp;
- //System.out.println(arclength+":"+pathlength+"fitmap vs pathcylinderbarrel");
- }
- }
-
- }
- else{
- pathlength = util.PathToZPlane(fit, hit.z());
- //System.out.println(arclength+":"+pathlength+"fitmap vs pathcylinderendcap");
- }
-
- //varible for easier calculation temp = C*s/2
- double temp = ((calc.getMCOmega()*pathlength)/2);
-
- //find x,y coordinates
- double x = x0 + (((pathlength*Math.sin(temp))/temp)*Math.cos(calc.getPhi0()-temp));
- double y = y0 + (((pathlength*Math.sin(temp))/temp)*Math.sin(calc.getPhi0()-temp));
-
- //Find MC phi, MC radius (r), MC z coordinate EDIT
- phi = Math.atan2(y, x);
- if(phi<0)
- {
- phi+=2*Math.PI;
- }
- r = Math.sqrt(x*x + y*y);
- z = calc.getZ0() + pathlength*calc.getSlopeSZPlane();
-
- //Calculations directly from hit
-
- //Calculations directly from HelicalTrackHit
- phih = hit.phi();
- rh = hit.r();
- zh = hit.z();
-
- if(hit.getLayerIdentifier().contains("Tracker"))
- {
- if(hit.BarrelEndcapFlag().isBarrel())
- {
-
- //Residual Histograms
- aida.histogram1D("MCParticleVSHelicalTrackFit/Residual-Tracker/Barrel/r*phi/r*phi-"+hit.getLayerIdentifier(), 200, -25, 25).fill((r*phi)-(rh*phih));
- aida.histogram1D("MCParticleVSHelicalTrackFit/Residual-Tracker/Barrel/R/R-"+hit.getLayerIdentifier() , 200, -.1,.1).fill(r-rh);
- aida.histogram1D("MCParticleVSHelicalTrackFit/Residual-Tracker/Barrel/Z/Z-"+hit.getLayerIdentifier() , 200, -55,55).fill(z-zh);
- }
- }
- if(hit.getLayerIdentifier().contains("Tracker"))
- {
- if(hit.BarrelEndcapFlag().isEndcap())
- {
-
- //Residual Histograms
- aida.histogram1D("MCParticleVSHelicalTrackFit/Residual-Tracker/EndCap/r*phi/r*phi-"+hit.getLayerIdentifier(), 200, -25, 25).fill((r*phi)-(rh*phih));
- aida.histogram1D("MCParticleVSHelicalTrackFit/Residual-Tracker/EndCap/R/R-"+hit.getLayerIdentifier() , 200, -.1,.1).fill(r-rh);
- aida.histogram1D("MCParticleVSHelicalTrackFit/Residual-Tracker/EndCap/Z/Z-"+hit.getLayerIdentifier() , 200, -5,5).fill(z-zh);
- }
- }
- if(hit.getLayerIdentifier().contains("Vertex"))
- {
- if(hit.BarrelEndcapFlag().isBarrel())
- {
-
- //Residual Histograms
- aida.histogram1D("MCParticleVSHelicalTrackFit/Residual-Vertex/Barrel/r*phi/r*phi-"+hit.getLayerIdentifier(), 200, -.5, .5).fill((r*phi)-(rh*phih));
- aida.histogram1D("MCParticleVSHelicalTrackFit/Residual-Vertex/Barrel/R/R-"+hit.getLayerIdentifier() , 200, -.1,.1).fill(r-rh);
- aida.histogram1D("MCParticleVSHelicalTrackFit/Residual-Vertex/Barrel/Z/Z-"+hit.getLayerIdentifier() , 200, -55,55).fill(z-zh);
- }
- }
- if(hit.getLayerIdentifier().contains("Vertex"))
- {
- if(hit.BarrelEndcapFlag().isEndcap())
- {
-
- //Residual Histograms
- aida.histogram1D("MCParticleVSHelicalTrackFit/Residual-Vertex/EndCap/r*phi/r*phi-"+hit.getLayerIdentifier(), 200, -30, 30).fill((r*phi)-(rh*phih));
- aida.histogram1D("MCParticleVSHelicalTrackFit/Residual-Vertex/EndCap/R/R-"+hit.getLayerIdentifier() , 200, -.1,.1).fill(r-rh);
- aida.histogram1D("MCParticleVSHelicalTrackFit/Residual-Vertex/EndCap/Z/Z-"+hit.getLayerIdentifier() , 200, -55,55).fill(z-zh);
- }
- }
- }
- }
- public void drawSimTrackervHelicalTrack()
- {
-
- List<SimTrackerHit> simhitlist = new ArrayList<SimTrackerHit>();
-
- for(List<SimTrackerHit> l : event.get(SimTrackerHit.class))
- {
- simhitlist.addAll(l);
- }
-
- double [] alld;
- double distancex,distancey,distancez;
- double closest=999999999,testclose;
- double zstripdiff;
- double closestdiff;
- double smallres;
- double us,resunmeas;
-
-
- for(HelicalTrackHit hit : hitlist)
- {
- if(hit instanceof HelicalTrackCross)
- {
- smallres = 999999999;
- HelicalTrackCross cross = (HelicalTrackCross) hit;
-
- for(HelicalTrackStrip strip : cross.getStrips())
- {
- SimTrackerHit closesthit =null;
- closestdiff = 999999999;
- for(SimTrackerHit simhit : simhitlist)
- {
- BasicHep3Vector simclose = new BasicHep3Vector(simhit.getPoint());
- zstripdiff = Math.abs(simclose.z()- strip.origin().z());
- if(zstripdiff<closestdiff)
- {
- closestdiff = zstripdiff;
- closesthit = simhit;
- }
-
- }
- BasicHep3Vector closesthitvec = new BasicHep3Vector(closesthit.getPoint());
- BasicHep3Vector diffvector = new BasicHep3Vector();
- diffvector = (BasicHep3Vector) VecOp.sub(closesthitvec, strip.origin());
- us = VecOp.dot(diffvector, strip.u());
- resunmeas = strip.umeas() - us;
- if(resunmeas<smallres)
- {
- smallres = resunmeas;
- }
- aida.histogram1D("Unmeasured/EndCaps/"+Math.round(strip.origin().z())+":ZPOS Unmeasured Strip ", 200, -1,1).fill(smallres);
-
- }
- }
- }
- for(HelicalTrackHit hit : hitlist)
- {
- SimTrackerHit hitholder = null;
- closest = 999999999;
- for(SimTrackerHit simhit : simhitlist)
- {
-
- //Search for the closest points
- alld = simhit.getPoint();
- distancex = hit.x()-alld[0];
- distancey = hit.y()-alld[1];
- distancez = hit.z()-alld[2];
- testclose = Math.sqrt((distancex*distancex) + (distancey*distancey)+(distancez*distancez));
- if(testclose<closest)
- {
- closest=testclose;
- hitholder = simhit;
- }
-
-
- }
-
- alld = hitholder.getPoint();
- simr = Math.sqrt((alld[0]*alld[0])+(alld[1]*alld[1]));
- simz = alld[2];
- simphi = Math.atan2(alld[1], alld[0]);
- if(simphi<0)
- {
- simphi+=2*Math.PI;
- }
-
- rh = hit.r();
- zh = hit.z();
- phih = hit.phi();
-
- if(hit.getLayerIdentifier().contains("Tracker"))
- {
-
- if(hit.BarrelEndcapFlag().isBarrel())
- {
- //Residual Histograms: SimTrackerHit - HelicalTrackHit
- aida.histogram1D("SimTrackerVSHelicalTrack/Tracker/Barrel/Residual/r*phi/R*Phi"+hit.getLayerIdentifier(), 200, -1,1).fill((simr*simphi)-(rh*phih));
- aida.histogram1D("SimTrackerVSHelicalTrack/Tracker/Barrel/Residual/R/R"+hit.getLayerIdentifier(), 200, -.5,.5).fill(simr-rh);
- aida.histogram1D("SimTrackerVSHelicalTrack/Tracker/Barrel/Residual/Z/Z"+hit.getLayerIdentifier(), 200, -55,55).fill(simz-zh);
- }
-
- else
- {
- //Residual Histograms: SimTrackerHit - HelicalTrackHit
- aida.histogram1D("SimTrackerVSHelicalTrack/Tracker/Endcap/Residual/r*phi/R*Phi"+hit.getLayerIdentifier(), 200, -10, 10).fill((simr*simphi)-(rh*phih));
- aida.histogram1D("SimTrackerVSHelicalTrack/Tracker/Endcap/Residual/R/R"+hit.getLayerIdentifier(), 200, -3,3).fill(simr-rh);
- aida.histogram1D("SimTrackerVSHelicalTrack/Tracker/Endcap/Residual/Z/Z"+hit.getLayerIdentifier(), 200, -3,3).fill(simz-zh);
- }
- }
- else
- {
- if(hit.BarrelEndcapFlag().isBarrel())
- {
-
- //Residual Histograms: SimTrackerHit - HelicalTrackHit
- aida.histogram1D("SimTrackerVSHelicalTrack/Vertex/Barrel/Residual/r*phi/R*Phi"+hit.getLayerIdentifier(), 200, -1,1).fill((simr*simphi)-(rh*phih));
- aida.histogram1D("SimTrackerVSHelicalTrack/Vertex/Barrel/Residual/R/R"+hit.getLayerIdentifier(), 200, -1,1).fill(simr-rh);
- aida.histogram1D("SimTrackerVSHelicalTrack/Vertex/Barrel/Residual/Z/Z"+hit.getLayerIdentifier(), 200, -1,1).fill(simz-zh);
- }
- else
- {
-
- //Residual Histograms: SimTrackerHit - HelicalTrackHit
- aida.histogram1D("SimTrackerVSHelicalTrack/Vertex/Endcap/Residual/r*phi/R*Phi"+hit.getLayerIdentifier(), 200, -1, 1).fill((simr*simphi)-(rh*phih));
- aida.histogram1D("SimTrackerVSHelicalTrack/Vertex/Endcap/Residual/R/R"+hit.getLayerIdentifier(), 200, -1,1).fill(simr-rh);
- aida.histogram1D("SimTrackerVSHelicalTrack/Vertex/Endcap/Residual/Z/Z"+hit.getLayerIdentifier(), 200, -1,1).fill(simz-zh);
- }
- }
- }
- }
-
-
-
-
-}
CVSspam 0.2.8