示例#1
0
 def __init__(Lambda):
     
     theta_I = ThetaI(Lambda)
     Waist0 = Waist0E(Lambda)
      
     source_k = Optics.SourceGaussian(Lambda, Waist0)
     source_pd = Fundation.PositioningDirectives(
                     ReferTo = 'absolute', 
                     XYCentre = [0,0],
                     Angle = 0)
             
     source = Fundation.OpticalElement(source_k, 
                                 Name = 'Fel1 source', 
                                 IsSource = True,
                                 PositioningDirectives = source_pd)
    plt.xlabel('mm')
    plt.title('|E| (' + oe.Name + ')')

print(__name__)
if __name__ == '__main__':

    tl.Debug.On = True
    N = 7000
    UseCustomSampling = True
    # SOURCE
    #==========================================================================
    Lambda = 32e-9
    Waist0 = Fermi.Waist0E(Lambda)
    s_k = Optics.SourceGaussian(Lambda, Waist0)      # Kernel delle ottiche
    s_pd = Fundation.PositioningDirectives(            # Direttive di posizionamento
                        ReferTo = Fundation.PositioningDirectives.ReferTo.AbsoluteReference,
                        XYCentre = [0.0, 0.0],
                        Angle = 0.0)
    s = OpticalElement(s_k,
                       PositioningDirectives = s_pd,
                       Name = 'source',
                       IsSource = True)

    # PM1A (h)
    #==========================================================================
    pm1a_k = Optics.MirrorPlane(L=0.4, AngleGrazing = deg2rad(2.5) )
    pm1a_pd = Fundation.PositioningDirectives(
                                    ReferTo = 'upstream',
                                    PlaceWhat = 'centre',
                                    PlaceWhere = 'centre',
                                    Distance = 48.0901)
    pm1a = OpticalElement(pm1a_k, 
    def __init__(self):
        super(WisePropagationElements, self).__init__()

        self.__wise_propagation_elements = Fundation.BeamlineElements()
from wiselib2.must import *
from wiselib2.Fundation import OpticalElement

print(__name__)
if __name__ == '__main__':

    tl.Debug.On = True
    
    # SOURCE
    #------------------------------------------------------------
    Lambda = 5e-9
    Waist0 =Fermi.Waist0E(Lambda)
    s_k = Optics.SourceGaussian(Lambda, Waist0)
    s_pd = Fundation.PositioningDirectives(
                        ReferTo = 'absolute', 
                        XYCentre = [0,0],
                        Angle = np.deg2rad(0))
    s = OpticalElement(
                        s_k, 
                        PositioningDirectives = s_pd, 
                        Name = 'source', IsSource = True)


    # KB(h)
    #------------------------------------------------------------    
    f1 = Fermi.Dpi.Kbv.f1
    f2 = Fermi.Dpi.Kbv.f2
    GrazingAngle = Fermi.Dpi.Kbv.GrazingAngle
    
    kb_k = Optics.MirrorElliptic(f1 = f1, f2 = f2 , L= 0.4, Alpha = GrazingAngle)
    kb_k.ComputationSettings.UseIdeal = False
示例#5
0
print(__name__)
if __name__ == '__main__':

    PropagationManager.Instance().add_propagator(WisePropagator())

    tl.Debug.On = True
    N = 7000
    UseCustomSampling = True
    # SOURCE
    #==========================================================================
    Lambda = 32e-9
    Waist0 = Fermi.Waist0E(Lambda)

    s_k = Optics.SourceGaussian(Lambda, Waist0)  # Kernel delle ottiche
    s_pd = Fundation.PositioningDirectives(  # Direttive di posizionamento
        ReferTo=Fundation.PositioningDirectives.ReferTo.AbsoluteReference,
        XYCentre=[0, 0],
        Angle=deg2rad(0))

    s = WiseGaussianSource(name='source',
                           source_gaussian=s_k,
                           position_directives=s_pd)

    # PM1A (h)
    #==========================================================================
    pm1a_k = Optics.MirrorPlane(L=0.4, AngleGrazing=deg2rad(2.5))
    pm1a_pd = Fundation.PositioningDirectives(ReferTo='upstream',
                                              PlaceWhat='centre',
                                              PlaceWhere='centre',
                                              Distance=48090.1)

    pm1a = WisePlaneMirror(name='pm1a',
    def do_best_focus_calculation(self):
        try:
            if self.input_data is None:
                raise Exception("No Input Data!")

            if not self.output_data_best_focus:
                raise Exception("Run computation first!")

            sys.stdout = EmittingStream(textWritten=self.writeStdOut)

            # TODO: TO BE CHECKED THE EQUiVALENT OF THE OLD QUANTITY!!!!
            self.oe_f2 = self.output_data_best_focus.wise_beamline.get_wise_propagation_element(
                -1).PositioningDirectives.Distance

            self.check_fields()
            if self.defocus_start >= self.defocus_stop:
                raise Exception(
                    "Defocus sweep start must be < Defocus sweep stop")
            self.defocus_step = congruence.checkStrictlyPositiveNumber(
                self.defocus_step, "Defocus sweep step")
            if self.defocus_step >= self.defocus_stop - self.defocus_start:
                raise Exception("Defocus step is too big")

            if self.best_focus_slider is None:
                self.best_focus_slider = QSlider(self.tab[1])
                self.best_focus_slider.setGeometry(QRect(0, 0, 320, 50))
                self.best_focus_slider.setMinimumHeight(30)
                self.best_focus_slider.setOrientation(Qt.Horizontal)
                self.best_focus_slider.setInvertedAppearance(False)
                self.best_focus_slider.setInvertedControls(False)

                self.tab[2].layout().addWidget(self.best_focus_slider)
            else:
                self.best_focus_slider.valueChanged.disconnect()

            self.setStatusMessage("")
            self.progressBarInit()

            self.defocus_list = numpy.arange(
                self.defocus_start * self.workspace_units_to_m,
                self.defocus_stop * self.workspace_units_to_m,
                self.defocus_step * self.workspace_units_to_m)

            n_defocus = len(self.defocus_list)

            if self.defocus_list[
                    -1] != self.defocus_stop * self.workspace_units_to_m:
                n_defocus += 1
                self.defocus_list.resize(n_defocus)
                self.defocus_list[
                    -1] = self.defocus_stop * self.workspace_units_to_m

            self.best_focus_slider.setTickInterval(1)
            self.best_focus_slider.setSingleStep(1)
            self.best_focus_slider.setMinimum(0)
            self.best_focus_slider.setMaximum(n_defocus - 1)
            self.best_focus_slider.setValue(0)

            progress_bar_increment = 100 / n_defocus

            n_pools = self.n_pools if self.use_multipool == 1 else 1

            hew_min = numpy.inf
            index_min_list = []

            self.best_focus_index = -1
            self.electric_fields_list = []
            self.positions_list = []
            self.hews_list = []

            import copy
            last_element = self.get_last_element()
            last_element = copy.deepcopy(last_element)

            self.setStatusMessage("Calculating Best Focus Position")

            self.run_calculation = True

            self.defocus_list[numpy.where(
                numpy.abs(self.defocus_list) < 1e-15)] = 0.0

            if self.show_animation == 1:
                for i, defocus in enumerate(self.defocus_list):
                    if not self.run_calculation:
                        if not self.best_focus_slider is None:
                            self.best_focus_slider.valueChanged.connect(
                                self.plot_detail)
                        return

                    ResultList, HewList, SigmaList, More = Fundation.FocusSweep(
                        last_element, [self.defocus_list[i]],
                        DetectorSize=self.length * self.workspace_units_to_m,
                        NPools=n_pools)

                    S = ResultList[0].S
                    E = ResultList[0].Field
                    I = abs(E)**2
                    norm = max(I)
                    norm = 1.0 if norm == 0.0 else norm
                    I = I / norm
                    HEW = HewList[0]

                    # E1
                    self.electric_fields_list.append(E)
                    self.positions_list.append(S)
                    self.hews_list.append(HEW)

                    self.best_focus_slider.setValue(i)

                    self.plot_histo(S * 1e6,
                                    I,
                                    i * progress_bar_increment,
                                    tabs_canvas_index=2,
                                    plot_canvas_index=2,
                                    title="Defocus Sweep: " +
                                    str(self._defocus_sign * defocus /
                                        self.workspace_units_to_m) + " (" +
                                    str(i + 1) + "/" + str(n_defocus) +
                                    "), HEW: " + str(round(HEW * 1e6, 4)) +
                                    " [$\mu$m]",
                                    xtitle="Y [$\mu$m]",
                                    ytitle="Intensity",
                                    log_x=False,
                                    log_y=False)

                    self.tabs.setCurrentIndex(2)

                    hew = round(
                        HEW * 1e6, 11
                    )  # problems with double precision numbers: inconsistent comparisons

                    if hew < hew_min:
                        hew_min = hew
                        index_min_list = [i]
                    elif hew == hew_min:
                        index_min_list.append(i)
            else:  # NOT INTERACTIVE
                ResultList, HewList, SigmaList, More = Fundation.FocusSweep(
                    last_element,
                    self.defocus_list,
                    DetectorSize=self.length * self.workspace_units_to_m,
                    NPools=n_pools)

                i = 0
                for Result, HEW in zip(ResultList, HewList):
                    self.electric_fields_list.append(Result.Field)
                    self.positions_list.append(Result.S)
                    self.hews_list.append(HEW)

                    hew = round(
                        HEW * 1e6, 11
                    )  # problems with double precision numbers: inconsistent comparisons

                    if hew < hew_min:
                        hew_min = hew
                        index_min_list = [i]
                    elif hew == hew_min:
                        index_min_list.append(i)

                    i += 1

            index_min = index_min_list[int(
                len(index_min_list) /
                2)]  # choosing the central value, when hew reach a pletau

            self.best_focus_index = index_min
            best_focus_electric_fields = self.electric_fields_list[index_min]
            best_focus_I = abs(best_focus_electric_fields)**2
            norm = max(best_focus_I)
            norm = 1.0 if norm == 0.0 else norm
            best_focus_I = best_focus_I / norm

            best_focus_positions = self.positions_list[index_min]

            QMessageBox.information(
                self, "Best Focus Calculation",
                "Best Focus Found!\n\nPosition: " +
                str(self.oe_f2 +
                    (self._defocus_sign * self.defocus_list[index_min] /
                     self.workspace_units_to_m)) + "\nHEW: " +
                str(round(self.hews_list[index_min] * 1e6, 4)) + " [" +
                u"\u03BC" + "m]", QMessageBox.Ok)

            self.plot_histo(
                best_focus_positions * 1e6,
                best_focus_I,
                100,
                tabs_canvas_index=2,
                plot_canvas_index=2,
                title="(BEST FOCUS) Defocus Sweep: " +
                str(self._defocus_sign * self.defocus_list[index_min] /
                    self.workspace_units_to_m) + " (" + str(index_min + 1) +
                "/" + str(n_defocus) + "), Position: " +
                str(self.oe_f2 +
                    (self._defocus_sign * self.defocus_list[index_min] /
                     self.workspace_units_to_m)) + ", HEW: " +
                str(round(self.hews_list[index_min] * 1e6, 4)) + " [$\mu$m]",
                xtitle="Y [$\mu$m]",
                ytitle="Intensity",
                log_x=False,
                log_y=False)

            self.plot_histo(self._defocus_sign * self.defocus_list,
                            numpy.multiply(self.hews_list, 1e6),
                            100,
                            tabs_canvas_index=3,
                            plot_canvas_index=3,
                            title="HEW vs Defocus Sweep",
                            xtitle="",
                            ytitle="",
                            log_x=False,
                            log_y=False)

            self.plot_canvas[3].setDefaultPlotLines(True)
            self.plot_canvas[3].setDefaultPlotPoints(True)
            self.plot_canvas[3].setGraphXLabel("Defocus [" +
                                               self.workspace_units_label +
                                               "]")
            self.plot_canvas[3].setGraphYLabel("HEW [$\mu$m]")

            self.best_focus_slider.setValue(index_min)

            self.tabs.setCurrentIndex(3 if self.show_animation == 1 else 2)
            self.setStatusMessage("")

            self.save_button.setEnabled(True)

        except Exception as exception:
            QMessageBox.critical(self, "Error", str(exception), QMessageBox.Ok)

            self.setStatusMessage("Error!")

            #raise exception

        if not self.best_focus_slider is None:
            self.best_focus_slider.valueChanged.connect(self.plot_detail)
        self.progressBarFinished()
示例#7
0
#----------------------------------------------------
tl.Debug.On = False
Lambda = 5e-9

# Gaussian Source (if used)
FermiFactor = {'fel1': 1.25, 'fel2': 1.5}['fel2']
FermiSigma = FermiFactor * Lambda * 1e9
FermiWaist = FermiSigma * np.sqrt(2)
FermiDivergence = Lambda / np.pi / FermiWaist

s = OpticalElement(
    Optics.SourceGaussian(Lambda,
                          FermiWaist,
                          PropagationAngle=0 * 0.0008257924757473173),
    PositioningDirectives=Fundation.PositioningDirectives(ReferTo='absolute',
                                                          XYCentre=[0, 1],
                                                          Angle=np.deg2rad(0)),
    Name='source',
    IsSource=True)

#----------------------------------------------------
# kb1
#----------------------------------------------------
kb1 = OpticalElement(Optics.MirrorElliptic(f1=98.5,
                                           f2=1.180,
                                           L=0.4,
                                           Alpha=np.deg2rad(2)),
                     PositioningDirectives=Fundation.PositioningDirectives(
                         ReferTo='upstream',
                         PlaceWhat='upstream focus',
                         PlaceWhere='centre',