45
45
spill = ROOT.MAUS.Spill() # pylint: disable = E1101
46
46
data = ROOT.MAUS.Data() # pylint: disable = E1101
47
47
tree = ROOT.TTree("Spill", "TTree") # pylint: disable = E1101
48
tree.Branch("data", data, data.my_sizeof(), 1)
48
tree.Branch("data", data, data.GetSizeOf(), 1)
50
49
spill.SetScalars(ROOT.MAUS.Scalars()) # pylint: disable = E1101
51
50
spill.SetEMRSpillData(ROOT.MAUS.EMRSpillData()) # pylint: disable = E1101, C0301
52
51
spill.SetDAQData(ROOT.MAUS.DAQData()) # pylint: disable = E1101
53
52
spill.SetMCEvents(ROOT.MAUS.MCEventArray()) # pylint: disable = E1101
54
53
spill.SetReconEvents(ROOT.MAUS.ReconEventArray()) # pylint: disable = E1101, C0301
55
54
spill.SetSpillNumber(1)
55
spill.SetRunNumber(10)
56
56
data.SetSpill(spill)
59
spill.SetRunNumber(11)
62
spill.SetRunNumber(12)
67
job_header_data = ROOT.MAUS.JobHeaderData() # pylint: disable = E1101
68
job_header = ROOT.MAUS.JobHeader() # pylint: disable = E1101
69
tree2 = ROOT.TTree("JobHeader", "TTree") # pylint: disable = E1101
70
tree2.Branch("job_header", job_header_data,
71
job_header_data.GetSizeOf(), 1)
72
job_header.SetJsonConfiguration("mushrooms")
73
job_header_data.SetJobHeader(job_header)
75
job_header.SetJsonConfiguration("omelette")
79
job_footer_data = ROOT.MAUS.JobFooterData() # pylint: disable = E1101
80
job_footer = ROOT.MAUS.JobFooter() # pylint: disable = E1101
81
tree3 = ROOT.TTree("JobFooter", "TTree") # pylint: disable = E1101
82
tree3.Branch("job_footer", job_footer_data,
83
job_footer_data.GetSizeOf(), 1)
84
job_footer_data.SetJobFooter(job_footer)
89
run_header_data = ROOT.MAUS.RunHeaderData() # pylint: disable = E1101
90
run_header = ROOT.MAUS.RunHeader() # pylint: disable = E1101
91
tree4 = ROOT.TTree("RunHeader", "TTree") # pylint: disable = E1101
92
tree4.Branch("run_header", run_header_data,
93
run_header_data.GetSizeOf(), 1)
94
run_header_data.SetRunHeader(run_header)
95
run_header.SetRunNumber(10)
98
run_header.SetRunNumber(11)
100
run_header.SetRunNumber(13)
104
run_footer_data = ROOT.MAUS.RunFooterData() # pylint: disable = E1101
105
run_footer = ROOT.MAUS.RunFooter() # pylint: disable = E1101
106
tree5 = ROOT.TTree("RunFooter", "TTree") # pylint: disable = E1101
107
tree5.Branch("run_footer", run_footer_data,
108
run_footer_data.GetSizeOf(), 1)
109
run_footer_data.SetRunFooter(run_footer)
110
run_footer.SetRunNumber(10)
113
run_footer.SetRunNumber(11)
115
run_footer.SetRunNumber(13)
62
121
def test_birth_death(self):
76
135
inputter_3 = InputCppRoot.InputCppRoot()
77
136
inputter_3.death()
79
def test_read_normal_event(self):
81
Try saving a few standard events
138
def __test_event(self, inputter, checks):
140
Run the inputter, check that output contains key:value pair.
142
event = inputter.emitter_cpp()
143
json_event = json.loads(event)
144
for key, value in checks.iteritems():
145
self.assertEqual(json_event[key], value,
146
msg=str(key)+":"+str(value)+"\n"+json.dumps(json_event, indent=2))
148
def test_read_events(self):
150
Try reading a realistic data structure
83
152
inputter = InputCppRoot.InputCppRoot()
84
153
inputter.birth(json.dumps({"input_root_file_name":self.fname}))
85
# bad event (no branches set)
86
self.assertEqual(inputter.getNextEvent(), "")
88
json_event = json.loads(inputter.getNextEvent())
90
(json_event["spill_number"], 1, msg=json.dumps(json_event, indent=2))
92
json_event = json.loads(inputter.getNextEvent())
94
(json_event["spill_number"], 1, msg=json.dumps(json_event, indent=2))
155
self.__test_event(inputter, {"maus_event_type":"JobHeader",
156
"json_configuration":"mushrooms"})
157
self.__test_event(inputter, {"maus_event_type":"JobHeader",
158
"json_configuration":"omelette"})
160
self.__test_event(inputter, {"maus_event_type":"RunHeader",
162
self.__test_event(inputter, {"maus_event_type":"RunHeader",
164
self.__test_event(inputter, {"maus_event_type":"Spill",
166
self.__test_event(inputter, {"maus_event_type":"Spill",
168
self.__test_event(inputter, {"maus_event_type":"RunFooter",
170
self.__test_event(inputter, {"maus_event_type":"RunFooter",
173
self.__test_event(inputter, {"maus_event_type":"RunHeader",
175
self.__test_event(inputter, {"maus_event_type":"Spill",
177
self.__test_event(inputter, {"maus_event_type":"Spill",
179
self.__test_event(inputter, {"maus_event_type":"RunFooter",
181
# run 12 & 13 - note this is a bit of a bug
182
self.__test_event(inputter, {"maus_event_type":"RunHeader",
184
self.__test_event(inputter, {"maus_event_type":"Spill",
186
self.__test_event(inputter, {"maus_event_type":"Spill",
188
self.__test_event(inputter, {"maus_event_type":"RunFooter",
192
self.__test_event(inputter, {"maus_event_type":"JobFooter"})
193
self.__test_event(inputter, {"maus_event_type":"JobFooter"})
96
self.assertEqual(inputter.getNextEvent(), "")
196
self.assertEqual(inputter.emitter_cpp(), "")
198
def test_read_spills_only(self):
200
Try reading a data structure with missing tree
202
fname = os.path.join \
203
(os.environ["MAUS_ROOT_DIR"], "tmp", "test_inputCppRoot_2.root")
204
root_file = ROOT.TFile(fname, "RECREATE") # pylint: disable = E1101
206
spill = ROOT.MAUS.Spill() # pylint: disable = E1101
207
data = ROOT.MAUS.Data() # pylint: disable = E1101
208
tree2 = ROOT.TTree("Spill", "TTree") # pylint: disable = E1101
209
tree2.Branch("data", data, data.GetSizeOf(), 1)
210
spill.SetScalars(ROOT.MAUS.Scalars()) # pylint: disable = E1101
211
spill.SetEMRSpillData(ROOT.MAUS.EMRSpillData()) # pylint: disable = E1101, C0301
212
spill.SetDAQData(ROOT.MAUS.DAQData()) # pylint: disable = E1101
213
spill.SetMCEvents(ROOT.MAUS.MCEventArray()) # pylint: disable = E1101
214
spill.SetReconEvents(ROOT.MAUS.ReconEventArray()) # pylint: disable = E1101, C0301
222
inputter = InputCppRoot.InputCppRoot()
223
inputter.birth(json.dumps({"input_root_file_name":fname}))
226
self.__test_event(inputter, {"maus_event_type":"Spill"})
227
self.__test_event(inputter, {"maus_event_type":"Spill"})
228
self.assertEqual(inputter.emitter_cpp(), "")
230
def test_read_job_header_footer_only(self):
232
Try reading a data structure with missing tree
234
fname = os.path.join \
235
(os.environ["MAUS_ROOT_DIR"], "tmp", "test_inputCppRoot_3.root")
236
root_file = ROOT.TFile(fname, "RECREATE") # pylint: disable = E1101
238
spill = ROOT.MAUS.Spill() # pylint: disable = E1101
239
data = ROOT.MAUS.Data() # pylint: disable = E1101
240
tree = ROOT.TTree("Spill", "TTree") # pylint: disable = E1101
241
tree.Branch("data", data, data.GetSizeOf(), 1)
242
spill.SetScalars(ROOT.MAUS.Scalars()) # pylint: disable = E1101
243
spill.SetEMRSpillData(ROOT.MAUS.EMRSpillData()) # pylint: disable = E1101, C0301
244
spill.SetDAQData(ROOT.MAUS.DAQData()) # pylint: disable = E1101
245
spill.SetMCEvents(ROOT.MAUS.MCEventArray()) # pylint: disable = E1101
246
spill.SetReconEvents(ROOT.MAUS.ReconEventArray()) # pylint: disable = E1101, C0301
250
job_header_data = ROOT.MAUS.JobHeaderData() # pylint: disable = E1101
251
job_header = ROOT.MAUS.JobHeader() # pylint: disable = E1101
252
tree2 = ROOT.TTree("JobHeader", "TTree") # pylint: disable = E1101
253
tree2.Branch("job_header", job_header_data,
254
job_header_data.GetSizeOf(), 1)
255
job_header.SetJsonConfiguration("mushrooms")
256
job_header_data.SetJobHeader(job_header)
258
job_header.SetJsonConfiguration("omelette")
262
job_footer_data = ROOT.MAUS.JobFooterData() # pylint: disable = E1101
263
job_footer = ROOT.MAUS.JobFooter() # pylint: disable = E1101
264
tree3 = ROOT.TTree("JobFooter", "TTree") # pylint: disable = E1101
265
tree3.Branch("job_footer", job_footer_data,
266
job_footer_data.GetSizeOf(), 1)
267
job_footer_data.SetJobFooter(job_footer)
274
inputter = InputCppRoot.InputCppRoot()
275
inputter.birth(json.dumps({"input_root_file_name":fname}))
278
self.__test_event(inputter, {"maus_event_type":"JobHeader",
279
"json_configuration":"mushrooms"})
280
self.__test_event(inputter, {"maus_event_type":"JobHeader",
281
"json_configuration":"omelette"})
283
self.__test_event(inputter, {"maus_event_type":"JobFooter"})
284
self.__test_event(inputter, {"maus_event_type":"JobFooter"})
285
self.assertEqual(inputter.emitter_cpp(), "")
98
288
if __name__ == "__main__":