コード例 #1
0
ファイル: __init__.py プロジェクト: wcgillis01/chroma
def detector(pmt_radius=14000.0, sphere_radius=14500.0, spiral_step=350.0):
    pmt = build_8inch_pmt_with_lc()
    geo = Detector(water)

    geo.add_solid(Solid(sphere(sphere_radius,nsteps=200), 
                        water, water, 
                        surface=black_surface,
                        color=0xBBFFFFFF))

    for position in spherical_spiral(pmt_radius, spiral_step):
        direction = -normalize(position)

        # Orient PMT that starts facing Y axis
        y_axis = np.array((0.0,1.0,0.0))
        axis = np.cross(direction, y_axis)
        angle = np.arccos(np.dot(y_axis, direction))
        rotation = make_rotation_matrix(angle, axis)

        # Place PMT (note that position is front face of PMT)
        geo.add_pmt(pmt, rotation, position)
        
    
    time_rms = 1.5 # ns
    charge_mean = 1.0
    charge_rms = 0.1 # Don't I wish!
    
    geo.set_time_dist_gaussian(time_rms, -5 * time_rms, 5*time_rms)
    geo.set_charge_dist_gaussian(charge_mean, charge_rms, 0.0, charge_mean + 5*charge_rms)

    logger.info('Demo detector: %d PMTs' % geo.num_channels())
    logger.info('               %1.1f ns time RMS' % time_rms)
    logger.info('               %1.1f%% charge RMS' % (100.0*charge_rms/charge_mean))
    return geo
コード例 #2
0
ファイル: test_detector.py プロジェクト: BenLand100/chroma
    def setUp(self):
        # Setup geometry
        cube = Detector(vacuum)
        cube.add_pmt(Solid(box(10.0,10,10), vacuum, vacuum, surface=r7081hqe_photocathode))
        cube.set_time_dist_gaussian(1.2, -6.0, 6.0)
        cube.set_charge_dist_gaussian(1.0, 0.1, 0.5, 1.5)

        geo = create_geometry_from_obj(cube, update_bvh_cache=False)

        self.geo = geo
        self.sim = Simulation(self.geo, geant4_processes=0)
コード例 #3
0
ファイル: test_detector.py プロジェクト: jhualberta/chroma
    def setUp(self):
        # Setup geometry
        cube = Detector(vacuum)
        cube.add_pmt(
            Solid(box(10.0, 10, 10),
                  vacuum,
                  vacuum,
                  surface=r7081hqe_photocathode))
        cube.set_time_dist_gaussian(1.2, -6.0, 6.0)
        cube.set_charge_dist_gaussian(1.0, 0.1, 0.5, 1.5)

        geo = create_geometry_from_obj(cube, update_bvh_cache=False)

        self.geo = geo
        self.sim = Simulation(self.geo, geant4_processes=0)
コード例 #4
0
    def setUp(self):
        # Setup geometry
        cube = Detector(vacuum)
        cube.add_pmt(
            Solid(box(10.0, 10.0, 10.0),
                  vacuum,
                  vacuum,
                  surface=r7081hqe_photocathode))
        cube.set_time_dist_gaussian(1.2, -6.0, 6.0)
        cube.set_charge_dist_gaussian(1.0, 0.1, 0.5, 1.5)

        geo = create_geometry_from_obj(cube,
                                       update_bvh_cache=True,
                                       read_bvh_cache=False)
        print "Number of channels in detector: ", geo.num_channels()
        self.geo = geo
        self.sim = Simulation(self.geo,
                              geant4_processes=0,
                              nthreads_per_block=1,
                              max_blocks=1)

        self.rfile = rt.TFile("output_test_detector.root", "recreate")
        self.htime = rt.TH1D("htime", "Time;ns", 120, 80, 120)
        self.hcharge = rt.TH1D("hcharge", "Charge;pe", 100, 0.5, 1.5)