lcsim/src/org/lcsim/recon/tracking/seedtracker
diff -N FindSeeds.java
--- FindSeeds.java 27 Aug 2008 17:59:02 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,125 +0,0 @@
-/*
- * FindSeeds.java
- *
- * Created on January 22, 2008, 9:39 AM
- *
- */
-
-package org.lcsim.recon.tracking.seedtracker;
-
-import org.lcsim.recon.tracking.seedtracker.diagnostic.ISeedTrackerDiagnostics;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.lcsim.fit.helicaltrack.HelicalTrackHit;
-
-/**
- *
- * @author Richard Partridge
- * @version 1.0
- */
-public class FindSeeds {
- private HitManager _hitmanager;
- private HelixFitter _helixfitter;
- private ConfirmerExtender _confirmer;
- private List<SeedCandidate> _confirmedseeds;
- private List<SeedCandidate> _extendedseeds;
- private ISeedTrackerDiagnostics diag = null;
-
- /** Creates a new instance of FindSeeds */
- public FindSeeds(HitManager hitmanager, HelixFitter helixfitter) {
- _hitmanager = hitmanager;
- _helixfitter = helixfitter;
- _confirmer = new ConfirmerExtender(hitmanager, helixfitter);
- }
-
- public void setDiagnostic(ISeedTrackerDiagnostics d) {
- diag = d;
- }
-
- public boolean FindConfirmedSeeds(SeedStrategy strategy, double bfield) {
-
- if(diag!=null) _confirmer.setDiagnostics(diag);
- // Get the SeedLayers for this strategy
- List<SeedLayer> seedlayerlist = strategy.getLayers(SeedLayer.SeedType.Seed);
- if (seedlayerlist.size() != 3) return false;
-
- _confirmedseeds = new ArrayList<SeedCandidate>();
- _extendedseeds = new ArrayList<SeedCandidate>();
-
- double RMin = strategy.getMinPT() / (0.0003 * bfield);
- double dMax = strategy.getMaxDCA();
-
- // Todo: add code to limit seeds to those that satisfy cuts
-
- int nfit = 0;
- int nseed = 0;
- int nconfirm = 0;
- int maxseeds = _hitmanager.getTrackerHits(seedlayerlist.get(0)).size() *
- _hitmanager.getTrackerHits(seedlayerlist.get(1)).size() *
- _hitmanager.getTrackerHits(seedlayerlist.get(2)).size();
-
- for (HelicalTrackHit hit1 : _hitmanager.getTrackerHits(seedlayerlist.get(0))) {
- double r1 = hit1.r();
- double phi1 = hit1.phi();
- double dphi1mx = Math.asin((2*RMin*dMax - dMax*dMax-r1*r1)/(2*r1*(RMin-dMax)));
- for (HelicalTrackHit hit2 : _hitmanager.getTrackerHits(seedlayerlist.get(1))) {
- double r2 = hit2.r();
- double phi2 = hit2.phi();
- double dphi2mx = Math.asin((2*RMin*dMax - dMax*dMax-r2*r2)/(2*r2*(RMin-dMax)));
- double dphi2 = Math.abs(phi2 - phi1);
- if (dphi2 > Math.PI) dphi2 = 2. * Math.PI - dphi2;
- boolean phicut = dphi2 > Math.abs(dphi2mx-dphi1mx);
- if(diag!=null) diag.fireFinderDPhiCut(2, dphi2, phicut, hit2);
- if (phicut) continue;
- for (HelicalTrackHit hit3 : _hitmanager.getTrackerHits(seedlayerlist.get(2))) {
- double r3 = hit3.r();
- double phi3 = hit3.phi();
- double dphi3mx = Math.asin((2*RMin*dMax - dMax*dMax-r3*r3)/(2*r3*(RMin-dMax)));
- double dphi3 = phi3 - phi2;
- if (dphi3 > Math.PI) dphi3 = 2. * Math.PI - dphi3;
- phicut = dphi3 > Math.abs(dphi3mx-dphi2mx);
- if(diag!=null) diag.fireFinderDPhiCut(3, dphi3, phicut, hit3);
- if (phicut) continue;
- SeedCandidate seed = new SeedCandidate(strategy);
- seed.addHit(hit1);
- seed.addHit(hit2);
- seed.addHit(hit3);
- nseed++;
- boolean success = _helixfitter.FitCandidate(seed, strategy);
- if (!success) continue;
- seed.setHelix(_helixfitter.getHelix());
- nfit++;
-
- success = _confirmer.Confirm(seed, true, strategy);
- if (!success) continue;
-
- List<SeedCandidate> confirmedlist = _confirmer.getResult();
- _confirmedseeds.addAll(confirmedlist);
- nconfirm++;
-
- for (SeedCandidate confirmedseed : confirmedlist) {
-
- success = _confirmer.Extend(confirmedseed, true, strategy);
- if (!success) continue;
-
- List<SeedCandidate> extendedlist = _confirmer.getResult();
- _extendedseeds.addAll(extendedlist);
- }
- }
- }
- }
-
- if(diag!=null) diag.fireFinderDone(maxseeds, nseed, nfit, nconfirm, _confirmedseeds);
-
- return _extendedseeds.size() > 0;
- }
-
- public List<SeedCandidate> getConfirmedSeeds() {
- return _confirmedseeds;
- }
-
- public List<SeedCandidate> getExtendedSeeds() {
- return _extendedseeds;
- }
-}
\ No newline at end of file