def reRun(quad, field_b, ws): ''' quad/ws: selected quad/ws object field_b: quad field setpoint ''' quad.setDfltField(field_b) print("Setting Quad0 to {}".format(field_b)) probe = ProbeFactory.getEnvelopeProbe(accSeq, tracker) #---- peak current in [A] peak_current = 0.000 probe.setBeamCurrent(peak_current) eKin_init = probe.getKineticEnergy() / 1.0e+6 #scenario.setStopElementId(ws.getId()) #scenario.setIncludeStopElement(False) scenario.setProbe(probe) scenario.resync() scenario.run() traj = scenario.getProbe().getTrajectory() #for quad in quads: state = traj.stateForElement(quad.getId()) pos = state.getPosition() length = quad.getLength() print "quad=", quad.getId( ), " pos[m]= %8.3f " % pos, "len[m]=%8.3f" % length quad_mtrx = state.getResponseMatrix() # Q #for ws in wss: state = traj.stateForElement(ws.getId()) ws_mtrx = state.getResponseMatrix() # R mtrx_s7 = ws_mtrx.times(quad_mtrx.inverse()) # S 7x7 mtrx_s = [ mtrx_s7.getElem(0, 0), mtrx_s7.getElem(0, 1), mtrx_s7.getElem(1, 0), mtrx_s7.getElem(1, 1) ] # print(mtrx_s) pos = state.getPosition() print "ws=", ws.getId(), " pos[m]= %8.3f " % pos #--------- sizes for each WS and transport matrices xRMS_Size = state.twissParameters()[0].getEnvelopeRadius() print(state.twissParameters()[0]) #--------elements of the transport matrix a11 = ws_mtrx.getElem(0, 0) a12 = ws_mtrx.getElem(0, 1) m_row = [a11**2, 2 * a11 * a12, a12**2] return xRMS_Size, m_row, mtrx_s
def actionPerformed(self, actionEvent): linac_wizard_document = self.transverse_twiss_fitting_controller.linac_wizard_document if (linac_wizard_document.getAccSeq() == null): return accSeq = linac_wizard_document.getAccSeq() quads = linac_wizard_document.ws_lw_controller.quads cavs = linac_wizard_document.ws_lw_controller.cavs env_tracker = AlgorithmFactory.createEnvTrackerAdapt(accSeq) design_probe = ProbeFactory.getEnvelopeProbe(accSeq, env_tracker) twiss_arr = design_probe.getCovariance().computeTwiss() initial_twiss_params_holder = self.transverse_twiss_fitting_controller.initial_twiss_params_holder ph = initial_twiss_params_holder #------------X-------------------- ph.setAlphaX(twiss_arr[0].getAlpha()) ph.setBetaX(twiss_arr[0].getBeta()) ph.setEmittX(twiss_arr[0].getEmittance() * 1.0e+6) ph.setAlphaX_Err(0.) ph.setBetaX_Err(0.) ph.setEmittX_Err(0.) ph.setAlphaX_Step(0.1) ph.setBetaX_Step(0.1) ph.setEmittX_Step(ph.getEmittX() * 0.05) #------------Y-------------------- ph.setAlphaY(twiss_arr[1].getAlpha()) ph.setBetaY(twiss_arr[1].getBeta()) ph.setEmittY(twiss_arr[1].getEmittance() * 1.0e+6) ph.setAlphaY_Err(0.) ph.setBetaY_Err(0.) ph.setEmittY_Err(0.) ph.setAlphaY_Step(0.1) ph.setBetaY_Step(0.1) ph.setEmittY_Step(ph.getEmittY() * 0.05) #------------Z-------------------- ph.setAlphaZ(twiss_arr[2].getAlpha()) ph.setBetaZ(twiss_arr[2].getBeta()) ph.setEmittZ(twiss_arr[2].getEmittance() * 1.0e+6) ph.setAlphaZ_Err(0.) ph.setBetaZ_Err(0.) ph.setEmittZ_Err(0.) ph.setAlphaZ_Step(0.) ph.setBetaZ_Step(0.) ph.setEmittZ_Step(0.) #initial_twiss_params_holder.printParams() self.transverse_twiss_fitting_controller.initTwiss_table.getModel( ).fireTableDataChanged() init_and_fit_params_controller = self.transverse_twiss_fitting_controller.init_and_fit_params_controller init_and_fit_params_controller.eKin_text.setValue( design_probe.getKineticEnergy() / 1.0e+6) init_and_fit_params_controller.current_text.setValue( design_probe.getBeamCurrent() * 1000)
def actionPerformed(self,actionEvent): linac_wizard_document = self.transverse_twiss_fitting_controller.linac_wizard_document if(linac_wizard_document.getAccSeq() == null): return accSeq = linac_wizard_document.getAccSeq() quads = linac_wizard_document.ws_lw_controller.quads cavs = linac_wizard_document.ws_lw_controller.cavs env_tracker = AlgorithmFactory.createEnvTrackerAdapt(accSeq) design_probe = ProbeFactory.getEnvelopeProbe(accSeq,env_tracker) twiss_arr = design_probe.getCovariance().computeTwiss() initial_twiss_params_holder = self.transverse_twiss_fitting_controller.initial_twiss_params_holder ph = initial_twiss_params_holder #------------X-------------------- ph.setAlphaX(twiss_arr[0].getAlpha()) ph.setBetaX(twiss_arr[0].getBeta()) ph.setEmittX(twiss_arr[0].getEmittance()*1.0e+6) ph.setAlphaX_Err(0.) ph.setBetaX_Err(0.) ph.setEmittX_Err(0.) ph.setAlphaX_Step(0.1) ph.setBetaX_Step(0.1) ph.setEmittX_Step(ph.getEmittX()*0.05) #------------Y-------------------- ph.setAlphaY(twiss_arr[1].getAlpha()) ph.setBetaY(twiss_arr[1].getBeta()) ph.setEmittY(twiss_arr[1].getEmittance()*1.0e+6) ph.setAlphaY_Err(0.) ph.setBetaY_Err(0.) ph.setEmittY_Err(0.) ph.setAlphaY_Step(0.1) ph.setBetaY_Step(0.1) ph.setEmittY_Step(ph.getEmittY()*0.05) #------------Z-------------------- ph.setAlphaZ(twiss_arr[2].getAlpha()) ph.setBetaZ(twiss_arr[2].getBeta()) ph.setEmittZ(twiss_arr[2].getEmittance()*1.0e+6) ph.setAlphaZ_Err(0.) ph.setBetaZ_Err(0.) ph.setEmittZ_Err(0.) ph.setAlphaZ_Step(0.) ph.setBetaZ_Step(0.) ph.setEmittZ_Step(0.) #initial_twiss_params_holder.printParams() self.transverse_twiss_fitting_controller.initTwiss_table.getModel().fireTableDataChanged() init_and_fit_params_controller = self.transverse_twiss_fitting_controller.init_and_fit_params_controller init_and_fit_params_controller.eKin_text.setValue(design_probe.getKineticEnergy()/1.0e+6) init_and_fit_params_controller.current_text.setValue(design_probe.getBeamCurrent()*1000)
def __init__(self,main_loop_controller): self.main_loop_controller = main_loop_controller cav_wrappers = self.main_loop_controller.cav_wrappers self.accSeq = self.main_loop_controller.accSeq self.env_tracker = AlgorithmFactory.createEnvTrackerAdapt(self.accSeq) self.env_tracker.setRfGapPhaseCalculation(true) self.env_probe = ProbeFactory.getEnvelopeProbe(self.accSeq,self.env_tracker) self.scenario = Scenario.newScenarioFor(self.accSeq) self.scenario.setSynchronizationMode(Scenario.SYNC_MODE_DESIGN) self.scenario.resync() self.scenario.setProbe(self.env_probe) self.scenario.run() #------------------------------------------------- for cav_wrapper_ind in range(len(cav_wrappers)): cav_wrapper = cav_wrappers[cav_wrapper_ind] gap_list = cav_wrapper.cav.getGapsAsList() gap_first = gap_list.get(0) gap_last = gap_list.get(gap_list.size()-1) ind0 = self.scenario.getTrajectory().indicesForElement(gap_first.getId())[0] - 1 ind1 = self.scenario.getTrajectory().indicesForElement(gap_last.getId())[0] state_in = self.scenario.getTrajectory().stateWithIndex(ind0) state_out = self.scenario.getTrajectory().stateWithIndex(ind1) Ekin_in = state_in.getKineticEnergy()/1.0e+6 Ekin_out = state_out.getKineticEnergy()/1.0e+6 twiss_in = state_in.twissParameters()[2] twiss_out = state_out.twissParameters()[2] z_prim_in = math.sqrt(twiss_in.getGamma()*twiss_in.getEmittance()) z_prim_out = math.sqrt(twiss_out.getGamma()*twiss_out.getEmittance()) beta_gamma_in = state_in.getBeta()*state_in.getGamma() beta_gamma_out = state_out.getBeta()*state_out.getGamma() mass = state_in.getSpeciesRestEnergy()/1.0e+6 delta_Ekin_in = (mass+Ekin_in)*beta_gamma_in**2*z_prim_in delta_Ekin_out = (mass+Ekin_out)*beta_gamma_out**2*z_prim_out cav_wrapper.Ekin_in = Ekin_in cav_wrapper.Ekin_out = Ekin_out cav_wrapper.Ekin_in_design = Ekin_in cav_wrapper.Ekin_in_delta_design = delta_Ekin_in cav_wrapper.Ekin_out_design = Ekin_out cav_wrapper.Ekin_out_delta_design = delta_Ekin_out for cav_wrapper_ind in range(len(cav_wrappers)-1): cav_wrappers[cav_wrapper_ind].Ekin_out_delta_design = cav_wrappers[cav_wrapper_ind+1].Ekin_in_delta_design
def __init__(self,quad_cav_dict,linac_wizard_document): self.quad_cav_dict = quad_cav_dict self.linac_wizard_document = linac_wizard_document self.isOn = true self.size_hor_record_arr = [] self.size_ver_record_arr = [] self.isSelected_ = false #----------- graph data self.gd_exp_hor = BasicGraphData() self.gd_exp_ver = BasicGraphData() self.gd_exp_hor.setDrawLinesOn(false) self.gd_exp_ver.setDrawLinesOn(false) self.gd_exp_hor.setGraphPointSize(11) self.gd_exp_ver.setGraphPointSize(11) self.gd_exp_hor.setGraphColor(Color.BLUE) self.gd_exp_ver.setGraphColor(Color.BLUE) self.gd_model_hor = BasicGraphData() self.gd_model_ver = BasicGraphData() self.gd_model_lon = BasicGraphData() self.gd_model_hor.setGraphColor(Color.RED) self.gd_model_ver.setGraphColor(Color.RED) self.gd_model_lon.setGraphColor(Color.RED) self.gd_model_hor.setLineThick(3) self.gd_model_ver.setLineThick(3) self.gd_model_lon.setLineThick(4) self.gd_model_hor.setDrawPointsOn(false) self.gd_model_ver.setDrawPointsOn(false) self.gd_exp_hor.setGraphProperty(GRAPH_LEGEND_KEY,"LW/WS sizes") self.gd_exp_ver.setGraphProperty(GRAPH_LEGEND_KEY,"LW/WS sizes") self.gd_model_hor.setGraphProperty(GRAPH_LEGEND_KEY,"Model Hor. Size") self.gd_model_ver.setGraphProperty(GRAPH_LEGEND_KEY,"Model Ver. Size") self.gd_model_lon.setGraphProperty(GRAPH_LEGEND_KEY,"Model Longitudinal Size") #------ accelerator model set up accSeq = self.linac_wizard_document.getAccSeq() quads = self.linac_wizard_document.ws_lw_controller.quads cavs = self.linac_wizard_document.ws_lw_controller.cavs #--memorize the initial values self.quad_field_arr = [] for quad in quads: self.quad_field_arr.append([quad,quad.getDfltField()]) self.cav_amp_phase_arr = [] for cav in cavs: self.cav_amp_phase_arr.append([cav,cav.getDfltCavAmp(),cav.getDfltCavPhase()]) #-- set up values from dictionaries [quad_dict,cav_amp_phase_dict] = self.quad_cav_dict for quad in quads: if(quad_dict.has_key(quad)): quad.setDfltField(quad_dict[quad]) for cav in cavs: if(cav_amp_phase_dict.has_key(cav)): cav.updateDesignAmp(cav_amp_phase_dict[cav][0]) cav.updateDesignPhase(cav_amp_phase_dict[cav][1]) self.env_tracker = AlgorithmFactory.createEnvTrackerAdapt(accSeq) self.env_tracker.setRfGapPhaseCalculation(true) self.env_tracker.setUseSpacecharge(true) self.design_probe = ProbeFactory.getEnvelopeProbe(accSeq,self.env_tracker) probe = EnvelopeProbe(self.design_probe) self.scenario = Scenario.newScenarioFor(accSeq) self.scenario.setProbe(probe) self.scenario.setSynchronizationMode(Scenario.SYNC_MODE_DESIGN) self.scenario.resync() self.scenario.run() self.traj = self.scenario.getTrajectory() #---restore the quads and cav parameters for [quad,field] in self.quad_field_arr: quad.setDfltField(field) for [cav,amp,phase] in self.cav_amp_phase_arr: cav.updateDesignAmp(amp) cav.updateDesignPhase(phase)
print "===========================" quads = accSeq.getAllNodesOfType(Quadrupole.s_strType) for quad in quads: print "quad=", quad.getId(), " B=", quad.getDfltField() print "===========================" scenario = Scenario.newScenarioFor(accSeq) scenario.setSynchronizationMode(Scenario.SYNC_MODE_DESIGN) tracker = AlgorithmFactory.createEnvTrackerAdapt(accSeq) tracker.setProbeUpdatePolicy(tracker.UPDATE_ALWAYS) probe = ProbeFactory.getEnvelopeProbe(accSeq, tracker) #---- peak current in [A] peak_current = 0.000 probe.setBeamCurrent(peak_current) #---- initial kinetic energy in [MeV] eKin_init = probe.getKineticEnergy() / 1.0e+6 scenario.setProbe(probe) scenario.resync() scenario.run() traj = scenario.getProbe().getTrajectory() beam_calculator = CalculationsOnBeams(traj)