Skip to content

Commit 922f865

Browse files
committed
cleanup
1 parent 4cee7e4 commit 922f865

File tree

1 file changed

+126
-100
lines changed

1 file changed

+126
-100
lines changed
Lines changed: 126 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,40 @@
11
package org.jlab.utils;
22

3+
import java.util.ArrayList;
4+
import java.util.HashMap;
5+
import java.util.Map;
36
import org.jlab.jnp.hipo4.io.HipoReader;
47
import org.jlab.jnp.hipo4.data.Bank;
58
import org.jlab.jnp.hipo4.data.Event;
69
import org.jlab.jnp.hipo4.data.Schema;
7-
import java.util.HashMap;
10+
import org.jlab.jnp.hipo4.data.SchemaFactory;
811
import org.jlab.utils.options.OptionParser;
912

1013
public class HipoDiff {
1114

15+
static int nrow = 0;
16+
static int nevent = -1;
17+
static int nentry = 0;
18+
static int nbadevent = 0;
19+
static int nbadrow = 0;
20+
static int nbadentry = 0;
21+
static double tolerance;
22+
static boolean verboseMode = false;
23+
static boolean quietMode = false;
24+
static Bank runConfigBank = null;
25+
static SchemaFactory schemaFactory = null;
26+
static ArrayList<Bank> banksA = new ArrayList<>();
27+
static ArrayList<Bank> banksB = new ArrayList<>();
28+
static HashMap<String, HashMap<String,Integer>> badEntries = new HashMap<>();
29+
1230
public static void main(String args[]) {
1331

1432
OptionParser op = new OptionParser("hipo-diff");
1533
op.addOption("-t", "0.00001", "absolute tolerance for comparisons");
1634
op.addOption("-n", "-1", "number of events");
17-
op.addRequired("-b", "name of bank to diff");
35+
op.addOption("-q", null, "quiet mode");
36+
op.addOption("-Q", null, "verbose mode");
37+
op.addOption("-b", null,"name of bank to diff");
1838
op.setRequiresInputList(true);
1939
op.parse(args);
2040
if (op.getInputList().size() != 2) {
@@ -23,120 +43,126 @@ public static void main(String args[]) {
2343
System.exit(1);
2444
}
2545

26-
final String bankName = op.getOption("-b").stringValue();
27-
final double tolerance = op.getOption("-t").doubleValue();
46+
verboseMode = op.getOption("-Q").stringValue() != null;
47+
quietMode = op.getOption("-q").stringValue() != null;
2848
final int nmax = op.getOption("-n").intValue();
49+
tolerance = op.getOption("-t").doubleValue();
2950

3051
HipoReader readerA = new HipoReader();
3152
HipoReader readerB = new HipoReader();
3253
readerA.open(op.getInputList().get(0));
3354
readerB.open(op.getInputList().get(1));
34-
35-
Schema schema = readerA.getSchemaFactory().getSchema(bankName);
36-
Bank bankA = new Bank(schema);
37-
Bank bankB = new Bank(schema);
38-
39-
Bank runConfigBank = new Bank(readerA.getSchemaFactory().getSchema("RUN::config"));
40-
Event event = new Event();
41-
42-
int nevent = -1;
43-
int nrow = 0;
44-
int nentry = 0;
45-
int nbadevent = 0;
46-
int nbadrow = 0;
47-
int nbadentry = 0;
48-
HashMap<String, Integer> badEntries = new HashMap<>();
49-
50-
while (readerA.hasNext() && readerB.hasNext() && (nmax<1 || nevent<nmax)) {
51-
52-
if (++nevent % 10000 == 0) {
53-
System.out.println("Analyzed " + nevent + " events");
54-
}
55-
56-
readerA.nextEvent(event);
57-
event.read(bankA);
58-
readerB.nextEvent(event);
59-
event.read(bankB);
60-
61-
event.read(runConfigBank);
62-
63-
if (bankA.getRows() != bankB.getRows()) {
64-
System.out.println("========================= Different number of rows:");
65-
runConfigBank.show();
66-
bankA.show();
67-
bankB.show();
68-
nbadevent++;
69-
System.out.println("=========================");
55+
Event eventA = new Event();
56+
Event eventB = new Event();
57+
58+
schemaFactory = readerA.getSchemaFactory();
59+
runConfigBank = new Bank(schemaFactory.getSchema("RUN::config"));
60+
if (op.getOption("-b").stringValue() == null) {
61+
for (Schema s : schemaFactory.getSchemaList()) {
62+
banksA.add(new Bank(s));
63+
banksB.add(new Bank(s));
7064
}
65+
}
66+
else {
67+
banksA.add(new Bank(schemaFactory.getSchema(op.getOption("-b").stringValue())));
68+
banksB.add(new Bank(schemaFactory.getSchema(op.getOption("-b").stringValue())));
69+
}
7170

72-
else {
73-
for (int i = 0; i < bankA.getRows(); i++) {
74-
boolean mismatch = false;
75-
nrow++;
76-
for (int j = 0; j < schema.getElements(); j++) {
77-
final int type = schema.getType(j);
78-
final String name = schema.getElementName(j);
79-
int element = -1;
80-
String values = "";
81-
nentry++;
82-
switch (type) {
83-
case 1:
84-
if (bankA.getByte(name, i) != bankB.getByte(name, i)) {
85-
element = j;
86-
values += bankA.getByte(name, i) + "/" + bankB.getByte(name, i);
87-
}
88-
break;
89-
case 2:
90-
if (bankA.getShort(name, i) != bankB.getShort(name, i)) {
91-
element = j;
92-
values += bankA.getShort(name, i) + "/" + bankB.getShort(name, i);
93-
}
94-
break;
95-
case 3:
96-
if (bankA.getInt(name, i) != bankB.getInt(name, i)) {
97-
element = j;
98-
values += bankA.getInt(name, i) + "/" + bankB.getInt(name, i);
99-
}
100-
break;
101-
case 4:
102-
if ((!Double.isNaN(bankA.getFloat(name, i)) || !Double.isNaN(bankB.getFloat(name, i)))
103-
&& (!Double.isInfinite(bankA.getFloat(name, i)) || !Double.isInfinite(bankB.getFloat(name, i)))
104-
&& Math.abs(bankA.getFloat(name, i) - bankB.getFloat(name, i)) > tolerance) {
105-
element = j;
106-
values += bankA.getFloat(name, i) + "/" + bankB.getFloat(name, i);
107-
}
108-
break;
109-
}
110-
if (element >= 0) {
111-
System.out.println("mismatch at event " + runConfigBank.getInt("event", 0)
112-
+ " in row " + i
113-
+ " for variable " + name
114-
+ " with values " + values);
115-
mismatch = true;
116-
nbadentry++;
117-
if (badEntries.containsKey(schema.getElementName(element))) {
118-
int nbad = badEntries.get(schema.getElementName(element)) + 1;
119-
badEntries.replace(schema.getElementName(element), nbad);
120-
} else {
121-
badEntries.put(schema.getElementName(element), 1);
122-
}
123-
}
124-
}
125-
if (mismatch) {
126-
nbadrow++;
127-
}
128-
}
129-
}
71+
while (readerA.hasNext() && readerB.hasNext() && (nmax < 1 || nevent < nmax)) {
72+
if (++nevent % 10000 == 0) System.out.println("Analyzed " + nevent + " events");
73+
readerA.nextEvent(eventA);
74+
readerB.nextEvent(eventB);
75+
eventA.read(runConfigBank);
76+
compare(eventA, eventB);
13077
}
13178
System.out.println("\n Analyzed " + nevent + " with " + nbadevent + " bad banks");
13279
System.out.println(nbadrow + "/" + nrow + " mismatched rows");
13380
System.out.println(nbadentry + "/" + nentry + " mismatched entry");
13481
for (String name : badEntries.keySet()) {
13582
System.out.println(name + " " + badEntries.get(name));
13683
}
84+
System.exit(nbadevent + nbadrow + nbadentry);
85+
}
13786

138-
if (nbadevent + nbadrow + nbadentry > 0) {
139-
System.exit(7);
87+
public static void compare(Event a, Event b) {
88+
for (int i=0; i<banksA.size(); i++) {
89+
a.read(banksA.get(i));
90+
b.read(banksB.get(i));
91+
compare(banksA.get(i),banksB.get(i));
92+
}
93+
}
94+
95+
public static void compare(Bank a, Bank b) {
96+
97+
if (a.getRows() != b.getRows()) {
98+
System.out.println("========================= Different number of rows:");
99+
runConfigBank.show();
100+
a.show();
101+
b.show();
102+
nbadevent++;
103+
System.out.println("=========================");
104+
}
105+
else {
106+
for (int i = 0; i < a.getRows(); i++) {
107+
boolean mismatch = false;
108+
nrow++;
109+
for (int j = 0; j < a.getSchema().getElements(); j++) {
110+
final int type = a.getSchema().getType(j);
111+
final String name = a.getSchema().getElementName(j);
112+
int element = -1;
113+
String values = "";
114+
nentry++;
115+
switch (type) {
116+
case 1:
117+
if (a.getByte(name, i) != b.getByte(name, i)) {
118+
element = j;
119+
values += a.getByte(name, i) + "/" + b.getByte(name, i);
120+
}
121+
break;
122+
case 2:
123+
if (a.getShort(name, i) != b.getShort(name, i)) {
124+
element = j;
125+
values += a.getShort(name, i) + "/" + b.getShort(name, i);
126+
}
127+
break;
128+
case 3:
129+
if (a.getInt(name, i) != b.getInt(name, i)) {
130+
element = j;
131+
values += a.getInt(name, i) + "/" + b.getInt(name, i);
132+
}
133+
break;
134+
case 4:
135+
if ((!Double.isNaN(a.getFloat(name, i)) || !Double.isNaN(b.getFloat(name, i)))
136+
&& (!Double.isInfinite(a.getFloat(name, i)) || !Double.isInfinite(b.getFloat(name, i)))
137+
&& Math.abs(a.getFloat(name, i) - b.getFloat(name, i)) > tolerance) {
138+
element = j;
139+
values += a.getFloat(name, i) + "/" + b.getFloat(name, i);
140+
}
141+
break;
142+
}
143+
if (element >= 0) {
144+
if (verboseMode) {
145+
System.out.println("Bank.show "+a.getSchema().getName());
146+
a.show();
147+
b.show();
148+
}
149+
if (!quietMode) {
150+
System.out.println(a.getSchema().getName()+" mismatch at event " + runConfigBank.getInt("event", 0)
151+
+ " in row " + i + " for variable " + name + " with values " + values);
152+
}
153+
mismatch = true;
154+
nbadentry++;
155+
String bankName = a.getSchema().getName();
156+
String elementName = a.getSchema().getElementName(element);
157+
if (!badEntries.containsKey(bankName)) badEntries.put(bankName, new HashMap<>());
158+
Map<String,Integer> m = badEntries.get(bankName);
159+
if (!m.containsKey(elementName)) m.put(elementName, 0);
160+
m.put(elementName, m.get(elementName)+1);
161+
}
162+
}
163+
if (mismatch) nbadrow++;
164+
}
140165
}
141166
}
167+
142168
}

0 commit comments

Comments
 (0)