1 package org.lcsim.mc.fast.tracking;
2
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.Reader;
6 import java.util.HashMap;
7 import java.util.Map;
8 import java.util.StringTokenizer;
9
10 public class ResolutionTable {
11 private Map hash = new HashMap();
12
13 public ResolutionTable(Reader in) throws IOException {
14 BufferedReader inn = new TrimReader(in);
15 setupTable(inn);
16 inn.close();
17 }
18
19 LookupTable findTable(String name) {
20 return (LookupTable) hash.get(name);
21 }
22
23 public LookupTable findTable(int i, int j) {
24 String name = String.format("(%s,%s):", i + 1, j + 1);
25
26 return findTable(name);
27 }
28
29 void setupTable(BufferedReader in) throws IOException {
30
31 String tokenLine = "Cov matrix entry";
32
33
34 for (;;) {
35 String line = in.readLine();
36 if (line == null)
37 break;
38
39
40
41
42
43
44
45
46 int elementI = 0;
47 int elementJ = 0;
48 if (line.indexOf(tokenLine) > -1) {
49 String nLine = line.substring(line.indexOf(tokenLine) + tokenLine.length());
50 StringBuffer sb = new StringBuffer("(");
51 StringTokenizer tokenizer = new StringTokenizer(nLine, " ,");
52 if (tokenizer.countTokens() == 2) {
53 String token = tokenizer.nextToken();
54 elementI = Integer.parseInt(token) - 1;
55 sb.append(token);
56 sb.append(",");
57 token = tokenizer.nextToken();
58 elementJ = Integer.parseInt(token) - 1;
59 sb.append(token);
60 sb.append("):");
61 } else {
62 sb.append("--none--)");
63 }
64 line = sb.toString();
65 }
66
67
68 if (!line.endsWith(":")) {
69 throw new IOException("Syntax error in ResolutionTable");
70 }
71 hash.put(line, new LookupTable(in, elementI, elementJ));
72 }
73 }
74
75 private class TrimReader extends BufferedReader {
76 TrimReader(Reader source) {
77 super(source);
78 }
79
80 public String readLine() throws IOException {
81 for (;;) {
82 String line = super.readLine();
83 if (line == null)
84 return null;
85 line = line.trim();
86 if (line.length() > 0)
87 return line;
88 }
89 }
90 }
91 }