def cleanFittingValues(self): self.long_Twiss_z2_zzp_zp2_err = [0., 0., 0] self.long_Twiss_arr_err = [0., 0., 0] self.fit_bpm_amp_avg_err = 0. for [bpm_wrapper, amp_plotTh] in self.bpm_amp_plotTh_arr: amp_plotTh.removeAllPoints() self.long_Twiss_fit = Twiss() self.long_Twiss_matrix = Twiss()
def calculateDiff2(self): if(self.eKin == 0.): return 0. tr_twiss_analysis_controller = self.linac_wizard_document.tr_twiss_analysis_controller fit_param_index = tr_twiss_analysis_controller.fit_param_index accStatesKeeper = tr_twiss_analysis_controller.accStatesKeeper #--- set up initial Twiss twiss_arr = [] twiss = self.twiss_arr[0] twiss_arr.append(Twiss(twiss.getAlpha(),twiss.getBeta(),twiss.getEmittance()*1.0e-6)) twiss = self.twiss_arr[1] twiss_arr.append(Twiss(twiss.getAlpha(),twiss.getBeta(),twiss.getEmittance()*1.0e-6)) twiss = self.twiss_arr[2] twiss_arr.append(Twiss(twiss.getAlpha(),twiss.getBeta(),twiss.getEmittance()*1.0e-6)) diff2 = 0. n_ws_points = 0. for accState in accStatesKeeper.getAccStatesArr(): if(accState.isOn): probe = EnvelopeProbe(accState.design_probe) probe.setKineticEnergy(self.eKin*1.0e+6) probe.setBeamCurrent(self.current*0.001) probe.setBunchFrequency(402.5e+6) probe.initFromTwiss(twiss_arr) accState.scenario.setProbe(probe) accState.scenario.resyncFromCache() accState.scenario.run() accState.traj = accState.scenario.getTrajectory() for size_record in accState.size_hor_record_arr: if(not size_record.isOn): continue n_ws_points += 1 size = size_record.gauss_sigma if(fit_param_index == 1): size = size_record.custom_gauss_sigma if(fit_param_index == 2): size = size_record.custom_rms_sigma pos = size_record.pos ws_node = size_record.ws_node probe_state = accState.traj.stateForElement(ws_node.getId()) size_theory = probe_state.twissParameters()[0].getEnvelopeRadius()*1000. diff2 += (size_theory - size)**2 #print "debug hor ws=",ws_node.getId()," size=",size," size_theory=",size_theory for size_record in accState.size_ver_record_arr: if(not size_record.isOn): continue n_ws_points += 1 size = size_record.gauss_sigma if(fit_param_index == 1): size = size_record.custom_gauss_sigma if(fit_param_index == 2): size = size_record.custom_rms_sigma pos = size_record.pos ws_node = size_record.ws_node probe_state = accState.traj.stateForElement(ws_node.getId()) size_theory = probe_state.twissParameters()[1].getEnvelopeRadius()*1000. diff2 += (size_theory - size)**2 #print "debug ver ws=",ws_node.getId()," size=",size," size_theory=",size_theory if(n_ws_points > 0): diff2 /= n_ws_points if(diff2 != diff2): return 0. return diff2
def clean(self): self.isReady = false self.long_Twiss_z2_zzp_zp2_err = [0., 0., 0] self.long_Twiss_arr_err = [0., 0., 0] self.long_Twiss_arr_steps = [0., 0., 0] self.fit_bpm_amp_avg_err = 0. for [bpm_wrapper, amp_plotTh] in self.bpm_amp_plotTh_arr: amp_plotTh.removeAllPoints() self.twiss_arr = [Twiss(), Twiss(), Twiss()] self.long_Twiss_fit = Twiss() self.long_Twiss_matrix = Twiss()
def __init__(self, cav_wrapper): self.cav_wrapper = cav_wrapper self.twiss_arr = [Twiss(), Twiss(), Twiss()] self.long_Twiss_fit = Twiss() self.long_Twiss_matrix = Twiss() self.long_Twiss_z2_zzp_zp2_err = [0., 0., 0] #---- alpha, beta, and emittance errors self.long_Twiss_arr_err = [0., 0., 0] #---- alpha, beta, and emittance steps self.long_Twiss_arr_steps = [0., 0., 0] self.fit_bpm_amp_avg_err = 0. self.isReady = false self.update()
def actionPerformed(self,actionEvent): tr_twiss_analysis_controller = self.linac_wizard_document.tr_twiss_analysis_controller transverse_twiss_fitting_controller = tr_twiss_analysis_controller.transverse_twiss_fitting_controller initial_twiss_params_holder = transverse_twiss_fitting_controller.initial_twiss_params_holder (alphaX, betaX, emittX) = initial_twiss_params_holder.getParams(0) (alphaY, betaY, emittY) = initial_twiss_params_holder.getParams(1) (alphaZ, betaZ, emittZ) = initial_twiss_params_holder.getParams(2) if(emittX == 0. or emittY == 0. or emittZ == 0.): return twiss_arr = [] twiss_arr.append(Twiss(alphaX, betaX, emittX)) twiss_arr.append(Twiss(alphaY, betaY, emittY)) twiss_arr.append(Twiss(alphaZ, betaZ, emittZ)) scorer = AccScoreCalculator(self.linac_wizard_document,null,twiss_arr) scorer.count = 0 scorer.min_diff2 = scorer.calculateDiff2() scorer.updateGUI_Elements() scorer.runErrorsCalculator()
def run(self): tr_twiss_analysis_controller = self.linac_wizard_document.tr_twiss_analysis_controller transverse_twiss_fitting_controller = tr_twiss_analysis_controller.transverse_twiss_fitting_controller init_and_fit_params_controller = transverse_twiss_fitting_controller.init_and_fit_params_controller initial_twiss_params_holder = transverse_twiss_fitting_controller.initial_twiss_params_holder final_twiss_params_holder = init_and_fit_params_controller.final_twiss_params_holder nIterations = int(init_and_fit_params_controller.fit_iter_text.getValue()) #print "debug Twiss_Fitter start to run! Iter=",nIterations (alphaX, betaX, emittX) = initial_twiss_params_holder.getParams(0) (alphaY, betaY, emittY) = initial_twiss_params_holder.getParams(1) (alphaZ, betaZ, emittZ) = initial_twiss_params_holder.getParams(2) twiss_arr = [] twiss_arr.append(Twiss(alphaX, betaX, emittX)) twiss_arr.append(Twiss(alphaY, betaY, emittY)) twiss_arr.append(Twiss(alphaZ, betaZ, emittZ)) (alphaXStep, betaXStep, emittXStep) = initial_twiss_params_holder.getParamsStep(0) (alphaYStep, betaYStep, emittYStep) = initial_twiss_params_holder.getParamsStep(1) (alphaZStep, betaZStep, emittZStep) = initial_twiss_params_holder.getParamsStep(2) variables = ArrayList() variables.add(Variable("alphaX", alphaX, - Double.MAX_VALUE, Double.MAX_VALUE)) variables.add(Variable("betaX", betaX, - Double.MAX_VALUE, Double.MAX_VALUE)) variables.add(Variable("emittX", emittX, - Double.MAX_VALUE, Double.MAX_VALUE)) variables.add(Variable("alphaY", alphaY, - Double.MAX_VALUE, Double.MAX_VALUE)) variables.add(Variable("betaY", betaY, - Double.MAX_VALUE, Double.MAX_VALUE)) variables.add(Variable("emittY", emittY, - Double.MAX_VALUE, Double.MAX_VALUE)) variables.add(Variable("alphaZ", alphaZ, - Double.MAX_VALUE, Double.MAX_VALUE)) variables.add(Variable("betaZ", betaZ, - Double.MAX_VALUE, Double.MAX_VALUE)) variables.add(Variable("emittZ", emittZ, - Double.MAX_VALUE, Double.MAX_VALUE)) delta_hint = InitialDelta() variables_fit = ArrayList() #---------- X if(alphaXStep != 0.): variables_fit.add(variables.get(0)) delta_hint.addInitialDelta(variables.get(0), alphaXStep) if(betaXStep != 0.): variables_fit.add(variables.get(1)) delta_hint.addInitialDelta(variables.get(1), betaXStep) if(emittXStep != 0.): variables_fit.add(variables.get(2)) delta_hint.addInitialDelta(variables.get(2), emittXStep) #---------- Y if(alphaYStep != 0.): variables_fit.add(variables.get(3)) delta_hint.addInitialDelta(variables.get(3), alphaYStep) if(betaYStep != 0.): variables_fit.add(variables.get(4)) delta_hint.addInitialDelta(variables.get(4), betaYStep) if(emittYStep != 0.): variables_fit.add(variables.get(5)) delta_hint.addInitialDelta(variables.get(5), emittYStep) #---------- Z if(alphaZStep != 0.): variables_fit.add(variables.get(6)) delta_hint.addInitialDelta(variables.get(6), alphaZStep) if(betaZStep != 0.): variables_fit.add(variables.get(7)) delta_hint.addInitialDelta(variables.get(7), betaZStep) if(emittZStep != 0.): variables_fit.add(variables.get(8)) delta_hint.addInitialDelta(variables.get(8), emittZStep) #------- fitting process with solver if(variables_fit.isEmpty()): return scorer = AccScoreCalculator(self.linac_wizard_document,variables,twiss_arr) maxSolutionStopper = SolveStopperFactory.maxEvaluationsStopper(nIterations) solver = Solver(SimplexSearchAlgorithm(),maxSolutionStopper) self.solver = solver problem = ProblemFactory.getInverseSquareMinimizerProblem(variables_fit,scorer,0.001) problem.addHint(delta_hint) solver.solve(problem) #------- get results trial = solver.getScoreBoard().getBestSolution() scorer.trialToTwiss(trial) twiss_arr = scorer.getTwissArr() (alphaX, betaX, emittX) = (twiss_arr[0].getAlpha(),twiss_arr[0].getBeta(),twiss_arr[0].getEmittance()) (alphaY, betaY, emittY) = (twiss_arr[1].getAlpha(),twiss_arr[1].getBeta(),twiss_arr[1].getEmittance()) (alphaZ, betaZ, emittZ) = (twiss_arr[2].getAlpha(),twiss_arr[2].getBeta(),twiss_arr[2].getEmittance()) final_twiss_params_holder.setParams(0,alphaX, betaX, emittX) final_twiss_params_holder.setParams(1,alphaY, betaY, emittY) final_twiss_params_holder.setParams(2,alphaZ, betaZ, emittZ) init_and_fit_params_controller.finalTwiss_table.getModel().fireTableDataChanged() init_and_fit_params_controller.fit_iter_left_text.setValue(0.) scorer.setUpLastNode(false) scorer.calculateDiff2()