lcsim/src/org/lcsim/recon/tracking/seedtracker/strategybuilder
diff -u -r1.5 -r1.6
--- StrategyBuilder.java 24 Oct 2008 19:33:50 -0000 1.5
+++ StrategyBuilder.java 25 Oct 2008 00:56:07 -0000 1.6
@@ -84,7 +84,7 @@
//Use default filter if none is specified
if (filter==null) {
filter = new StrategyBasedFilter(prototype);
- }
+ }
}
//In the process step, we build two lists of collections:
@@ -193,7 +193,7 @@
//create startingSet... this will be used so that new strategies aren't extraneously generated
for (SeedStrategy strategy : startingStrategies){
- Set<DumbLayer> subset = getRelevantSet(strategy, true);
+ Set<DumbLayer> subset = StrategyBuilderUtils.getRelevantSet(strategy, true);
startingSet.add(subset);
}
if (verbose) System.out.println(startingStrategies.size()+" starting strategies defined.");
@@ -231,6 +231,7 @@
//Figure out a "good" set of four-layer combinations by brute force...
//We have a scoring algorithm and we find the maximal scoring one.
while (true){
+ if (verbose) System.out.println(setset.size() - usedSets.size() + " entries left to be covered.");
if (usedSets.size() == setset.size()) break; //if we've used all sets, then we're done!
Set<DumbLayer> max = all_subsets.get(0);
@@ -269,7 +270,7 @@
}
}
- if (verbose) System.out.println(setset.size() - usedSets.size() + " entries left to be covered.");
+
}
if(verbose) System.out.println("Done finding strategies");
if(verbose) System.out.println(final_sets.toString());
@@ -281,8 +282,10 @@
List<SeedStrategy> strat_list = new ArrayList<SeedStrategy>();
strat_list.addAll(startingStrategies);
+
+ //Write comments for starting strategies
for (SeedStrategy starter : startingStrategies) {
- int unw_score = scoremap.get(getRelevantSet(starter,true)).numTracks();
+ int unw_score = scoremap.get(StrategyBuilderUtils.getRelevantSet(starter,true)).numTracks();
meta.strategyComments.put(starter, "Num findable tracks (total, not additional): "+unw_score);
}
@@ -400,15 +403,14 @@
}
//sort Strategy list
-
if (verbose) System.out.println("Sorting output");
Collections.sort(strat_list, new Comparator() {
public int compare(Object o1, Object o2) {
SeedStrategy one = (SeedStrategy) o1;
SeedStrategy two = (SeedStrategy) o2;
- return Double.compare(scoremap.get(getRelevantSet(two,true)).numTracks(),
- scoremap.get(getRelevantSet(one,true)).numTracks());
+ return Double.compare(scoremap.get(StrategyBuilderUtils.getRelevantSet(two,true)).numTracks(),
+ scoremap.get(StrategyBuilderUtils.getRelevantSet(one,true)).numTracks());
}
});
@@ -479,15 +481,55 @@
}
//========privates ============//
- private Map<MCParticle, List<SimTrackerHit>> buildMCMap(EventHeader event) {
+ private Map<MCParticle, List<SimTrackerHit>> buildMCMap(final EventHeader event) {
//Build MC Map from SimTrackerHits
Map<MCParticle, List<SimTrackerHit>> mcmap = new HashMap<MCParticle, List<SimTrackerHit>>();
List<SimTrackerHit> allhits = new ArrayList<SimTrackerHit>();
+
+ //This will return the list of lists in a random order... we want the order
+ // to be consistent so that the same hits are ignored due to inefficiency each time
+ List<List<SimTrackerHit>> simhits = event.get(SimTrackerHit.class);
+
+
+ //Each collection should have a unique name, so sorting by name works here
+ Collections.sort(simhits, new Comparator() {
- for (List<SimTrackerHit> l : event.get(SimTrackerHit.class)) {
+ public int compare(Object o1, Object o2) {
+ List<SimTrackerHit> l1 = (List<SimTrackerHit>)o1;
+ List<SimTrackerHit> l2 = (List<SimTrackerHit>)o2;
+
+ return String.CASE_INSENSITIVE_ORDER.compare(event.getMetaData(l1).getName(), event.getMetaData(l2).getName());
+ }
+ });
+
+ for (List<SimTrackerHit> l : simhits) {
+
+ Collections.sort(l, new Comparator() {
+ //This might be a little overkill... but it should have a very
+ //high probability of distinguishing between SimTrackerHits...
+ public int compare(Object o1, Object o2) {
+ SimTrackerHit h1 = (SimTrackerHit) o1;
+ SimTrackerHit h2 = (SimTrackerHit) o2;
+
+ if (h1.getTime()!=h2.getTime()) {
+ return Double.compare(h1.getTime(), h2.getTime());
+ }
+
+ if (h1.getCellID()!=h2.getCellID()) {
+ return Double.compare(h1.getCellID(), h2.getCellID());
+ }
+
+ if (h1.getdEdx()!=h2.getdEdx()) {
+ return Double.compare(h1.getdEdx(), h2.getdEdx());
+ }
+
+ return Double.compare(h1.getPathLength(), h2.getPathLength());
+ }
+ });
+
/**
* We simulate inefficiency in SimTrackerHit => TrackerHit conversion,
* otherwise the strategies will miss certain classes of hits
@@ -519,34 +561,4 @@
return mcmap;
}
- private Set<DumbLayer> getRelevantSet(SeedStrategy strategy, boolean ignoreNorthSouth) {
- Set<DumbLayer> subset = new HashSet<DumbLayer>();
- for (SeedLayer lyr : strategy.getLayers(SeedLayer.SeedType.Seed)) {
-
- BarrelEndcapFlag be = lyr.getBarrelEndcapFlag();
- if (ignoreNorthSouth && be.isEndcap()) be = BarrelEndcapFlag.ENDCAP;
- subset.add(new DumbLayer(lyr.getDetName(), lyr.getLayer(), be));
-
- }
- for (SeedLayer lyr : strategy.getLayers(SeedLayer.SeedType.Confirm)) {
- BarrelEndcapFlag be = lyr.getBarrelEndcapFlag();
- if (ignoreNorthSouth && be.isEndcap()) be = BarrelEndcapFlag.ENDCAP;
- subset.add(new DumbLayer(lyr.getDetName(), lyr.getLayer(), be));
- }
- return subset;
- }
-
-
-
-// private boolean startingCanFind(Set<DumbLayer> set){
-//
-// for (Set<DumbLayer> s : startingSet){
-// if (set.containsAll(s))
-// return true;
-// }
-//
-// return false;
-// }
-
-
}