1
2
3
4
5
6 package org.lcsim.recon.tracking.seedtracker.strategybuilder;
7
8 import java.util.HashMap;
9 import java.util.HashSet;
10 import java.util.List;
11 import java.util.Map;
12 import java.util.Set;
13
14
15
16
17
18 public class SubsetScorer {
19
20 Map<Set<DumbLayer>,Integer> setmap = new HashMap<Set<DumbLayer>,Integer>();
21 LayerWeight weighter = new LayerWeight();
22 Map<Set<DumbLayer>,Double> adjacencemap = new HashMap<Set<DumbLayer>,Double>();
23
24 public SubsetScorer(List<Set<DumbLayer>> setlist, List<List<DumbLayer>> adjacentSets) {
25
26 for (Set<DumbLayer> set : setlist) {
27 if(setmap.containsKey(set)){
28 setmap.put(set,setmap.get(set).intValue()+1);
29 } else {
30 setmap.put(set,1);
31 }
32 }
33
34 for (List<DumbLayer> list : adjacentSets) {
35
36 Set<DumbLayer> set = new HashSet<DumbLayer>(list.size());
37 set.addAll(list);
38 if(adjacencemap.containsKey(set)){
39 adjacencemap.put(set,adjacencemap.get(set).doubleValue()+1.0);
40 } else {
41 adjacencemap.put(set,1.0);
42 }
43 }
44
45
46 for(Set<DumbLayer> s : adjacencemap.keySet()) {
47 double pct = adjacencemap.get(s) / getUnweightedScore(s);
48 if (pct>1.0) pct = 1.0;
49
50 adjacencemap.put(s, pct);
51 }
52 }
53
54 public void setLayerWeight(LayerWeight lw) {
55 weighter = lw;
56 }
57
58
59 public SubsetScore getScoreObject(Set<DumbLayer> testset) {
60
61 return new SubsetScore(getScore(testset), getUnweightedScore(testset), getAdjacence(testset));
62
63 }
64
65
66
67
68 public double getScore(Set<DumbLayer> testSet) {
69 return getUnweightedScore(testSet) * weighter.getWeight(testSet)
70 * ( 1 +
71 (getAdjacence(testSet))
72 * weighter.getAdjacenceMultiplier()
73 );
74 }
75
76 public int getUnweightedScore(Set<DumbLayer> testSet){
77
78 int ret = 0;
79 for (Set<DumbLayer> s : setmap.keySet()){
80 if (s.containsAll(testSet)) {
81 ret+= setmap.get(s).intValue();
82 }
83 }
84 return ret;
85 }
86
87 public double getAdjacence(Set<DumbLayer> testSet){
88 if (adjacencemap.containsKey(testSet)){
89 return adjacencemap.get(testSet);
90 }
91
92 return 0;
93 }
94
95 public void markUsed(Set<DumbLayer> testSet) {
96 for (Set<DumbLayer> s : setmap.keySet()){
97 if (s.containsAll(testSet)) {
98 setmap.put(s,0);
99 }
100 }
101 }
102
103
104 }