~christopher-hunt08/maus/beam_selection_development

« back to all changes in this revision

Viewing changes to src/input/InputCppRoot/test_InputCppRoot.py

  • Committer: Chris Rogers
  • Date: 2012-10-13 18:43:00 UTC
  • mfrom: (663.6.137 merge)
  • mto: (663.6.204 merge)
  • mto: This revision was merged to the branch mainline in revision 680.
  • Revision ID: chris.rogers@stfc.ac.uk-20121013184300-ry9q81m45dmtgejr
Bring control room branch into line with trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
35
35
    especially in context of - how are errors handled - 
36
36
    """
37
37
    @classmethod
38
 
    def setUpClass(self): # pylint: disable=C0103, C0202
 
38
    def setUpClass(self): # pylint: disable=C0103, C0202, R0915, R0914
39
39
        """
40
40
        Make a sample TFile
41
41
        """
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)
49
 
        tree.Fill()
 
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)
57
57
        tree.Fill()
58
58
        tree.Fill()
 
59
        spill.SetRunNumber(11)
 
60
        tree.Fill()
 
61
        tree.Fill()
 
62
        spill.SetRunNumber(12)
 
63
        tree.Fill()
 
64
        tree.Fill()
59
65
        tree.Write()
 
66
 
 
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)
 
74
        tree2.Fill()
 
75
        job_header.SetJsonConfiguration("omelette")
 
76
        tree2.Fill()
 
77
        tree2.Write()
 
78
 
 
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)
 
85
        tree3.Fill()
 
86
        tree3.Fill()
 
87
        tree3.Write()
 
88
 
 
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)
 
96
        tree4.Fill()
 
97
        tree4.Fill()
 
98
        run_header.SetRunNumber(11)
 
99
        tree4.Fill()
 
100
        run_header.SetRunNumber(13)
 
101
        tree4.Fill()
 
102
        tree4.Write()
 
103
 
 
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)
 
111
        tree5.Fill()
 
112
        tree5.Fill()
 
113
        run_footer.SetRunNumber(11)
 
114
        tree5.Fill()
 
115
        run_footer.SetRunNumber(13)
 
116
        tree5.Fill()
 
117
        tree5.Write()
 
118
 
60
119
        root_file.Close()
61
120
 
62
121
    def test_birth_death(self):
76
135
        inputter_3 = InputCppRoot.InputCppRoot()
77
136
        inputter_3.death()
78
137
 
79
 
    def test_read_normal_event(self):
80
 
        """
81
 
        Try saving a few standard events
 
138
    def __test_event(self, inputter, checks):
 
139
        """
 
140
        Run the inputter, check that output contains key:value pair.
 
141
        """
 
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))
 
147
 
 
148
    def test_read_events(self):
 
149
        """
 
150
        Try reading a realistic data structure
82
151
        """
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(), "")
87
 
        # normal event
88
 
        json_event = json.loads(inputter.getNextEvent())
89
 
        self.assertEqual \
90
 
           (json_event["spill_number"], 1, msg=json.dumps(json_event, indent=2))
91
 
        # normal event
92
 
        json_event = json.loads(inputter.getNextEvent())
93
 
        self.assertEqual \
94
 
           (json_event["spill_number"], 1, msg=json.dumps(json_event, indent=2))
 
154
        # job header
 
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"})
 
159
        # run 10
 
160
        self.__test_event(inputter, {"maus_event_type":"RunHeader",
 
161
                                     "run_number":10})
 
162
        self.__test_event(inputter, {"maus_event_type":"RunHeader",
 
163
                                     "run_number":10})
 
164
        self.__test_event(inputter, {"maus_event_type":"Spill",
 
165
                                     "run_number":10})
 
166
        self.__test_event(inputter, {"maus_event_type":"Spill",
 
167
                                     "run_number":10})
 
168
        self.__test_event(inputter, {"maus_event_type":"RunFooter",
 
169
                                     "run_number":10})
 
170
        self.__test_event(inputter, {"maus_event_type":"RunFooter",
 
171
                                     "run_number":10})
 
172
        # run 11
 
173
        self.__test_event(inputter, {"maus_event_type":"RunHeader",
 
174
                                     "run_number":11})
 
175
        self.__test_event(inputter, {"maus_event_type":"Spill",
 
176
                                     "run_number":11})
 
177
        self.__test_event(inputter, {"maus_event_type":"Spill",
 
178
                                     "run_number":11})
 
179
        self.__test_event(inputter, {"maus_event_type":"RunFooter",
 
180
                                     "run_number":11})
 
181
        # run 12 & 13 - note this is a bit of a bug
 
182
        self.__test_event(inputter, {"maus_event_type":"RunHeader",
 
183
                                     "run_number":13})
 
184
        self.__test_event(inputter, {"maus_event_type":"Spill",
 
185
                                     "run_number":12})
 
186
        self.__test_event(inputter, {"maus_event_type":"Spill",
 
187
                                     "run_number":12})
 
188
        self.__test_event(inputter, {"maus_event_type":"RunFooter",
 
189
                                     "run_number":13})
 
190
        
 
191
        # job footers
 
192
        self.__test_event(inputter, {"maus_event_type":"JobFooter"})
 
193
        self.__test_event(inputter, {"maus_event_type":"JobFooter"})
 
194
 
95
195
        # out of events
96
 
        self.assertEqual(inputter.getNextEvent(), "")
 
196
        self.assertEqual(inputter.emitter_cpp(), "")
 
197
 
 
198
    def test_read_spills_only(self):
 
199
        """
 
200
        Try reading a data structure with missing tree
 
201
        """
 
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
 
205
 
 
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
 
215
        data.SetSpill(spill)
 
216
        tree2.Fill()
 
217
        tree2.Fill()
 
218
        tree2.Write()
 
219
 
 
220
        root_file.Close()
 
221
 
 
222
        inputter = InputCppRoot.InputCppRoot()
 
223
        inputter.birth(json.dumps({"input_root_file_name":fname}))
 
224
 
 
225
        # job footer
 
226
        self.__test_event(inputter, {"maus_event_type":"Spill"})
 
227
        self.__test_event(inputter, {"maus_event_type":"Spill"})
 
228
        self.assertEqual(inputter.emitter_cpp(), "")
 
229
 
 
230
    def test_read_job_header_footer_only(self):
 
231
        """
 
232
        Try reading a data structure with missing tree
 
233
        """
 
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
 
237
 
 
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
 
247
        data.SetSpill(spill)
 
248
        tree.Write()
 
249
 
 
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)
 
257
        tree2.Fill()
 
258
        job_header.SetJsonConfiguration("omelette")
 
259
        tree2.Fill()
 
260
        tree2.Write()
 
261
 
 
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)
 
268
        tree3.Fill()
 
269
        tree3.Fill()
 
270
        tree3.Write()
 
271
 
 
272
        root_file.Close()
 
273
 
 
274
        inputter = InputCppRoot.InputCppRoot()
 
275
        inputter.birth(json.dumps({"input_root_file_name":fname}))
 
276
        
 
277
        # job header
 
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"})
 
282
        # job footers
 
283
        self.__test_event(inputter, {"maus_event_type":"JobFooter"})
 
284
        self.__test_event(inputter, {"maus_event_type":"JobFooter"})
 
285
        self.assertEqual(inputter.emitter_cpp(), "")
 
286
 
97
287
 
98
288
if __name__ == "__main__":
99
289
    unittest.main()