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
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 })
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
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)
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)