def analysis(self):
     print "Loading data"
     bunch_list = Bunch.new_list_from_read_builtin('maus_root_virtual_hit', 'maus_output.100.root')
     bunch_list = [bunch for bunch in bunch_list if bunch.bunch_weight() > 10 and bunch[0]['z'] < 3472.001]
     print len(bunch_list)
     delaunay = DelaunayWrapper(bunch_list[0], ['x', 'px', 'y', 'py', 't', 'energy'])
     areas_0 = delaunay.get_areas(bunch_list[0])
     areas_1 = delaunay.get_areas(bunch_list[1])
     self.plot_areas(areas_0, areas_1)
Example #2
0
 def delaunay(self, variables):
     self.delaunay_wrapper = DelaunayWrapper(self.bunch_list[0], variables)
     areas = []
     for i, bunch in enumerate(self.bunch_list):
         try:
             areas.append(self.delaunay_wrapper.get_areas(bunch))
         except Exception as exc:
             if type(exc) == type(RuntimeError()):
                 raise
             print "Delaunay failed at bunch id", i, "z=", bunch[0]['z'], "with", len(bunch), "particles"
             sys.excepthook(*sys.exc_info())
             
     return areas
Example #3
0
 def analysis(self):
     print "Loading data"
     bunch_list = Bunch.new_list_from_read_builtin('maus_root_virtual_hit',
                                                   'maus_output.100.root')
     bunch_list = [
         bunch for bunch in bunch_list
         if bunch.bunch_weight() > 10 and bunch[0]['z'] < 3472.001
     ]
     print len(bunch_list)
     delaunay = DelaunayWrapper(bunch_list[0],
                                ['x', 'px', 'y', 'py', 't', 'energy'])
     areas_0 = delaunay.get_areas(bunch_list[0])
     areas_1 = delaunay.get_areas(bunch_list[1])
     self.plot_areas(areas_0, areas_1)
Example #4
0
class SingleTracking:
    def __init__(self, geometry):
        self.maus = self.get_maus(geometry)
        self.delaunay_wrapper = None

    def get_maus(self, geometry):
        dc = Configuration().getConfigJSON()
        py_dc = json.loads(dc)
        py_dc["simulation_geometry_filename"] = geometry
        py_dc["verbose_level"] = 5
        py_dc["maximum_number_of_steps"] = 1000000
        py_dc["max_track_length"] = self.max_track_length
        py_dc["max_step_length"] = self.step_size
        py_dc["geant4_visualisation"] = False
        py_dc["keep_steps"] = False
        py_dc["particle_decay"] = False
        py_dc["physics_processes"] = self.physics_processes
        if maus_cpp.globals.has_instance():
            maus_cpp.globals.death()
        maus_cpp.globals.birth(json.dumps(py_dc))
        return MAUSTracking(json.dumps(py_dc))


    def track(self, centre_hit, delta):
        primary_list = [centre_hit]
        for key, value in delta.iteritems():
            hit = centre_hit.deepcopy()
            hit[key] += value
            hit.mass_shell_condition('pz')
            primary_list.append(hit)
        # qhull needs 8 particles for some reason - so make an extra one
        hit = centre_hit.deepcopy()
        for key, value in delta.iteritems():
            hit[key] += value
        hit.mass_shell_condition('pz')
        primary_list.append(hit)
        bunch = Bunch.new_from_hits(primary_list)
        return self.track_bunch(bunch)

    def track_bunch(self, bunch):
        primary_list = bunch.hits()
        hit_list_of_lists = self.maus.track_many(primary_list)
        # hit_list_of_lists is sliced by primary; we want to slice by station
        n_events = len(primary_list)
        # we take the min here to stop 
        n_stations = min([len(hit_list) for hit_list in hit_list_of_lists])
        i_list = range(n_events)
        j_list = range(n_stations)
        hit_lost_if_losts = [[hit_list_of_lists[i][j] for i in i_list] for j in j_list]
        # convert to a bunch
        bunch_list = [Bunch.new_from_hits(hit_list) for hit_list in hit_lost_if_losts]
        self.bunch_list = bunch_list
        return bunch_list

    def delaunay(self, variables):
        self.delaunay_wrapper = DelaunayWrapper(self.bunch_list[0], variables)
        areas = []
        for i, bunch in enumerate(self.bunch_list):
            try:
                areas.append(self.delaunay_wrapper.get_areas(bunch))
            except Exception as exc:
                if type(exc) == type(RuntimeError()):
                    raise
                print "Delaunay failed at bunch id", i, "z=", bunch[0]['z'], "with", len(bunch), "particles"
                sys.excepthook(*sys.exc_info())
                
        return areas

    def areas_low_triangle(self, variables):
        areas = [delaunay.get_areas(bunch) for bunch in self.bunch_list]
        return areas

    max_track_length = 8011.
    step_size = 10.
    physics_processes = "none"