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()
Exemplo n.º 2
0
	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()
Exemplo n.º 5
0
	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()		
Exemplo n.º 6
0
	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()