コード例 #1
0
def beam_center_gravitational_drop(beam_center_file, sdd=1.13):
    '''
    This method is used for correcting for gravitational drop
    @param beam_center_file :: file where the beam center was found
    @param sdd :: sample detector distance to apply the beam center
    '''
    def calculate_neutron_drop(path_length, wavelength):
        '''
        Calculate the gravitational drop of the neutrons
        path_length in meters
        wavelength in Angstrom
        '''
        wavelength *= 1e-10
        neutron_mass = 1.674927211e-27
        gravity = 9.80665
        h_planck = 6.62606896e-34
        l_2 = (gravity * neutron_mass**2 / (2.0 * h_planck**2 )) * path_length**2
        return wavelength**2 * l_2

    # Get beam center used in the previous reduction
    pm = mantid.PropertyManagerDataService[ReductionSingleton().property_manager]
    beam_center_x = pm['LatestBeamCenterX'].value
    beam_center_y = pm['LatestBeamCenterY'].value
    Logger("CommandInterface").information("Beam Center before: [%.2f, %.2f] pixels" % (beam_center_x, beam_center_y))

    try:
        # check if the workspace still exists
        wsname = "__beam_finder_" + os.path.splitext(beam_center_file)[0]
        ws = mantid.mtd[wsname]
        Logger("CommandInterface").debug("Using Workspace: %s." % (wsname))
    except KeyError:
        # Let's try loading the file. For some reason the beamcenter ws is not there...
        try:
            ws = Load(beam_center_file)
            Logger("CommandInterface").debug("Using filename %s." % (beam_center_file))
        except IOError:
            Logger("CommandInterface").error("Cannot read input file %s." % beam_center_file)
            return

    i = ws.getInstrument()
    y_pixel_size_mm = i.getNumberParameter('y-pixel-size')[0]
    Logger("CommandInterface").debug("Y Pixel size = %.2f mm" % y_pixel_size_mm)
    y_pixel_size = y_pixel_size_mm * 1e-3  # In meters
    distance_detector1 = i.getComponentByName("detector1").getPos()[2]
    path_length = distance_detector1 - sdd
    Logger("CommandInterface").debug("SDD detector1 = %.3f meters. SDD for wing = %.3f meters." % (distance_detector1, sdd))
    Logger("CommandInterface").debug("Path length for gravitational drop = %.3f meters." % (path_length))
    r = ws.run()
    wavelength = r.getProperty("wavelength").value
    Logger("CommandInterface").debug("Wavelength = %.2f A." % (wavelength))

    drop = calculate_neutron_drop(path_length, wavelength)
    Logger("CommandInterface").debug("Gravitational drop = %.6f meters." % (drop))
    # 1 pixel -> y_pixel_size
    # x pixel -> drop
    drop_in_pixels = drop / y_pixel_size
    new_beam_center_y = beam_center_y + drop_in_pixels
    Logger("CommandInterface").information("Beam Center after:   [%.2f, %.2f] pixels" % (beam_center_x, new_beam_center_y))
    return beam_center_x, new_beam_center_y
コード例 #2
0
def beam_center_gravitational_drop(beam_center_file, sdd=1.13):
    '''
    This method is used for correcting for gravitational drop
    @param beam_center_file :: file where the beam center was found
    @param sdd :: sample detector distance to apply the beam center
    '''
    def calculate_neutron_drop(path_length, wavelength):
        '''
        Calculate the gravitational drop of the neutrons
        path_length in meters
        wavelength in Angstrom
        '''
        wavelength *= 1e-10
        neutron_mass = 1.674927211e-27
        gravity = 9.80665
        h_planck = 6.62606896e-34
        l_2 = (gravity * neutron_mass**2 / (2.0 * h_planck**2 )) * path_length**2
        return wavelength**2 * l_2

    # Get beam center used in the previous reduction
    pm = mantid.PropertyManagerDataService[ReductionSingleton().property_manager]
    beam_center_x = pm['LatestBeamCenterX'].value
    beam_center_y = pm['LatestBeamCenterY'].value
    Logger("CommandInterface").information("Beam Center before: [%.2f, %.2f] pixels" % (beam_center_x, beam_center_y))

    try:
        # check if the workspace still exists
        wsname = "__beam_finder_" + os.path.splitext(beam_center_file)[0]
        ws = mantid.mtd[wsname]
        Logger("CommandInterface").debug("Using Workspace: %s." % (wsname))
    except KeyError:
        # Let's try loading the file. For some reason the beamcenter ws is not there...
        try:
            ws = Load(beam_center_file)
            Logger("CommandInterface").debug("Using filename %s." % (beam_center_file))
        except IOError:
            Logger("CommandInterface").error("Cannot read input file %s." % beam_center_file)
            return

    i = ws.getInstrument()
    y_pixel_size_mm = i.getNumberParameter('y-pixel-size')[0]
    Logger("CommandInterface").debug("Y Pixel size = %.2f mm" % y_pixel_size_mm)
    y_pixel_size = y_pixel_size_mm * 1e-3  # In meters
    distance_detector1 = i.getComponentByName("detector1").getPos()[2]
    path_length = distance_detector1 - sdd
    Logger("CommandInterface").debug("SDD detector1 = %.3f meters. SDD for wing = %.3f meters." % (distance_detector1, sdd))
    Logger("CommandInterface").debug("Path length for gravitational drop = %.3f meters." % (path_length))
    r = ws.run()
    wavelength = r.getProperty("wavelength").value
    Logger("CommandInterface").debug("Wavelength = %.2f A." % (wavelength))

    drop = calculate_neutron_drop(path_length, wavelength)
    Logger("CommandInterface").debug("Gravitational drop = %.6f meters." % (drop))
    # 1 pixel -> y_pixel_size
    # x pixel -> drop
    drop_in_pixels = drop / y_pixel_size
    new_beam_center_y = beam_center_y + drop_in_pixels
    Logger("CommandInterface").information("Beam Center after:   [%.2f, %.2f] pixels" % (beam_center_x, new_beam_center_y))
    return beam_center_x, new_beam_center_y
コード例 #3
0
    def setUpClass(self):
        red_ws = Load('irs26176_graphite002_red.nxs')
        red_ws.run().addProperty("deltaE-mode", "Indirect", True)
        red_ws.run().addProperty("Ei", 1.845, True)

        self._red_ws = red_ws

        sqw_ws = Load('iris26176_graphite002_sqw.nxs')
        self._sqw_ws = sqw_ws

        self._arguments = {
            'SampleChemicalFormula': 'H2-O',
            'SampleMassDensity': 1.0,
            'NeutronPathsSingle': 50,
            'NeutronPathsMultiple': 50,
            'Height': 2.0,
            'NumberScatterings': 2
        }

        self._annulus_arguments = self._arguments.copy()
        self._annulus_arguments.update({
            'Shape': 'Annulus',
            'SampleOuterRadius': 2.0
        })
コード例 #4
0
ファイル: md.py プロジェクト: rosswhitfield/corelli
md2 = ConvertToMD(ws2,
                  QDimensions='Q3D',
                  dEAnalysisMode='Elastic',
                  Q3DFrames='Q_sample',
                  MinValues=[-10, -10, -10],
                  MaxValues=[10, 10, 10])

bin1 = BinMD(md1,
             AlignedDim0='Q_sample_x,-10,10,1000',
             AlignedDim1='Q_sample_z,-10,10,1000',
             AlignedDim2='Q_sample_y,-10,10,1')
bin2 = BinMD(md2,
             AlignedDim0='Q_sample_x,-10,10,1000',
             AlignedDim1='Q_sample_z,-10,10,1000',
             AlignedDim2='Q_sample_y,-10,10,1')
bin1 /= ws1.run().getProtonCharge()
bin2 /= ws2.run().getProtonCharge()
diff0 = bin2 - bin1

s1 = bin1.getSignalArray().copy()
#s2=bin2.getSignalArray().copy()

x = np.linspace(-1, 1, 1000)
X, Y = np.meshgrid(x, x)
mask = (X**2 + Y**2 > 1) + (X**2 + Y**2 < 0.25)

s1[mask] = 0

s1_mask = s1 < np.percentile(s1, 99.5)

mask[s1_mask[:, :, 0]] = True
コード例 #5
0
    if ts < running_times[0] or ts > running_times[-1]:
        return False
    running = True
    for i in range(len(running_times) - 1):
        print "ts={}, rt(i)={}, rt(i+1)={}".format(ts,  running_times[i], running_times[i+1])
        if (ts >= running_times[i]) and (ts < running_times[i+1]):
            running = running_values[i]
            print "found ",i, running
            break
    return running

# ----------------------------------------------------------------------------------------------------------------------


w = Load('/mnt/data1/source/github/mantidproject/mantid/builds/debug/ExternalData/Testing/Data/SystemTest/LARMOR/LARMOR00000063.nxs')
r = w.run()
run_start = dt.datetime.strptime(str(r.startTime()).strip(), ISO_TIMESTAMP_FORMAT)

dae_beam_current = r.getLogData('dae_beam_current')
# running log is series of boolean values indicating run status
running_log = w.run().getLogData('running')
running_times = []
for t in running_log.times:
    running_times.append(to_datetime_iso(t))

# create times as offset from run_start
uamps_times, uamps_values = dae_beam_current.times, dae_beam_current.value
delta_t, uamps_datetime = [], []
for t in uamps_times:
    t1, t2 = run_start, to_datetime_iso(t)
    uamps_datetime.append(t2)
コード例 #6
0
    for i in range(len(running_times) - 1):
        print "ts={}, rt(i)={}, rt(i+1)={}".format(ts, running_times[i],
                                                   running_times[i + 1])
        if (ts >= running_times[i]) and (ts < running_times[i + 1]):
            running = running_values[i]
            print "found ", i, running
            break
    return running


# ----------------------------------------------------------------------------------------------------------------------

w = Load(
    '/mnt/data1/source/github/mantidproject/mantid/builds/debug/ExternalData/Testing/Data/SystemTest/LARMOR/LARMOR00000063.nxs'
)
r = w.run()
run_start = dt.datetime.strptime(
    str(r.startTime()).strip(), ISO_TIMESTAMP_FORMAT)

dae_beam_current = r.getLogData('dae_beam_current')
# running log is series of boolean values indicating run status
running_log = w.run().getLogData('running')
running_times = []
for t in running_log.times:
    running_times.append(to_datetime_iso(t))

# create times as offset from run_start
uamps_times, uamps_values = dae_beam_current.times, dae_beam_current.value
delta_t, uamps_datetime = [], []
for t in uamps_times:
    t1, t2 = run_start, to_datetime_iso(t)