def read_file(self): self.setStatusMessage("") try: if congruence.checkFileName(self.beam_file_name): beam_out = ShadowBeam() beam_out.loadFromFile(self.beam_file_name) beam_out.history.append(ShadowOEHistoryItem()) # fake Source beam_out._oe_number = 0 # just to create a safe history for possible re-tracing beam_out.traceFromOE(beam_out, self.create_dummy_oe(), history=True) path, file_name = os.path.split(self.beam_file_name) self.setStatusMessage("Current: " + file_name) self.send("Beam", beam_out) except Exception as exception: QtGui.QMessageBox.critical(self, "Error", str(exception), QtGui.QMessageBox.Ok)
def read_file(self): self.setStatusMessage("") try: if congruence.checkFileName(self.beam_file_name): beam_out = ShadowBeam() beam_out.loadFromFile(self.beam_file_name) beam_out.history.append(ShadowOEHistoryItem()) # fake Source beam_out._oe_number = 0 # just to create a safe history for possible re-tracing beam_out.traceFromOE(beam_out, self.create_dummy_oe(), history=True) path, file_name = os.path.split(self.beam_file_name) self.setStatusMessage("Current: " + file_name) self.send("Beam", beam_out) except Exception as exception: QtWidgets.QMessageBox.critical(self, "Error", str(exception), QtWidgets.QMessageBox.Ok)
def from_photon_bunch_to_shadow(self): photon_beam = self.incoming_bunch N = photon_beam.getArrayByKey("number of photons") energies = photon_beam.getArrayByKey("energies") S0 = photon_beam.getArrayByKey("s0") S1 = photon_beam.getArrayByKey("s1") S2 = photon_beam.getArrayByKey("s2") S3 = photon_beam.getArrayByKey("s3") vx = photon_beam.getArrayByKey("vx") vy = photon_beam.getArrayByKey("vy") vz = photon_beam.getArrayByKey("vz") beam = Shadow.Beam(N) A2EV = 2.0 * numpy.pi / (codata.h * codata.c / codata.e * 1e2) for i in range(N): s0 = S0[i] s1 = S1[i] s2 = S2[i] s3 = S3[i] energy = energies[i] if (numpy.abs(s1**2 + s2**2 + s3**2 - s0**2) > 1e-4): s0 = numpy.sqrt(s1**2 + s2**2 + s3**2) print("Warning: Beam is not fully polarized.") Ex2 = 0.5 * (s0 + s1) Ez2 = 0.5 * (s0 - s1) Ex = numpy.sqrt(Ex2) Ez = numpy.sqrt(Ez2) if s0 == s1: sin2delta = 0.0 else: sin2delta = -0.5 * ((s2**2 - s3**2) / (4 * Ex2 * Ez2) - 1) delta = numpy.arcsin(numpy.sign(s3) * numpy.sqrt(sin2delta)) beam.rays[i, 0] = 0.0 # x beam.rays[i, 1] = 0.0 # x beam.rays[i, 2] = 0.0 # x beam.rays[i, 3] = vx[i] # v beam.rays[i, 4] = vy[i] # v beam.rays[i, 5] = vz[i] # v beam.rays[i, 6] = Ex # Es beam.rays[i, 7] = 0.0 # Es beam.rays[i, 8] = 0.0 # Es beam.rays[i, 9] = 1.0 # lost ray flag beam.rays[i, 10] = A2EV * energy # k beam.rays[i, 11] = i # ray index beam.rays[i, 12] = 0.0 # path length beam.rays[i, 13] = 0.0 # phase-s beam.rays[i, 14] = delta # phase-ps beam.rays[i, 15] = 0.0 # Ep beam.rays[i, 16] = 0.0 # Ep beam.rays[i, 17] = Ez # Ep beam_out = ShadowBeam(beam=beam) beam_out.history.append(ShadowOEHistoryItem()) # fake Source beam_out._oe_number = 0 # just to create a safe history for possible re-tracing beam_out.traceFromOE(beam_out, self.create_dummy_oe(), history=True) #self.send("Beam", beam_out) return beam_out
empty_element._oe.DUMMY = 1.0 # self.workspace_units_to_cm empty_element._oe.T_SOURCE = 0.0 empty_element._oe.T_IMAGE = 0.0 empty_element._oe.T_INCIDENCE = 0.0 empty_element._oe.T_REFLECTION = 180.0 empty_element._oe.ALPHA = 0.0 empty_element._oe.FWRITE = 3 empty_element._oe.F_ANGLE = 0 return empty_element app = QApplication(sys.argv) w = PlotScatter() # load a Beam from orangecontrib.shadow.util.shadow_objects import ShadowOEHistoryItem beam_out = ShadowBeam() beam_out.loadFromFile("/home/manuel/Oasys/mirr.02") beam_out.history.append(ShadowOEHistoryItem()) # fake Source beam_out._oe_number = 0 # just to create a safe history for possible re-tracing beam_out.traceFromOE(beam_out, create_dummy_oe(), history=True) w.workspace_units_to_cm = 1.0 w.setBeam(beam_out) w.show() app.exec() w.saveSettings()