View Javadoc

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          // System.out.printf("%s\n", name);
26          return findTable(name);
27      }
28  
29      void setupTable(BufferedReader in) throws IOException {
30          // constant string to read Bruce's resolution table ini files
31          String tokenLine = "Cov matrix entry";
32  
33          // Start by reading the parameter file
34          for (;;) {
35              String line = in.readLine();
36              if (line == null)
37                  break;
38  
39              //
40              // ww, 10/05/2000
41              //
42              // transform Bruce's cov matrix element index format into LCDs
43              // ie "Cov matrix entry  n,  n"
44              // to "(n,n):"
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; // lcdtrk starts from 1
55                      sb.append(token);
56                      sb.append(",");
57                      token = tokenizer.nextToken();
58                      elementJ = Integer.parseInt(token) - 1; // lcdtrk starts from 1
59                      sb.append(token);
60                      sb.append("):");
61                  } else {
62                      sb.append("--none--)");
63                  }
64                  line = sb.toString();
65              }
66  
67              // end of addition
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  }