Пример #1
0
	def __init__(self,linac_wizard_document):
		#--- linac_wizard_document the parent document for all controllers
		self.linac_wizard_document = linac_wizard_document	
		#----scl_accSeq is a specific for this controller
		accl = self.linac_wizard_document.accl
		lst = ArrayList()
		for seqName in ["SCLMed","SCLHigh","HEBT1","HEBT2"]:	
			lst.add(accl.getSequence(seqName))
		self.scl_accSeq = AcceleratorSeqCombo("SCL_SEQUENCE", lst)	
		part_tracker = AlgorithmFactory.createParticleTracker(self.scl_accSeq)
		part_probe = ProbeFactory.createParticleProbe(self.scl_accSeq,part_tracker)
		self.mass = part_probe.getSpeciesRestEnergy()
		self.bpm_freq = 402.5e+6
		self.c_light = 2.99792458e+8
		#-------- Ring length 
		self.ring_length = accl.findSequence("Ring").getLength()
		#-------- BPMs and Cavities arrays
		self.bpm_wrappers = []
		self.cav_wrappers = []
		#-------- self.cav0_wrapper is used for all cavities (includind Cav01a) Blanked statistics
		self.cav0_wrapper = null
		self.fillOut_Arrays()	
		#--- the main tabbed pane		
		self.tabbedPane = JTabbedPane()
		#-------- child controllers 
		self.scl_long_tuneup_init_controller = SCL_Long_TuneUp_Init_Controller(self)
		self.scl_long_tuneup_phase_scan_controller = SCL_Long_TuneUp_PhaseScan_Controller(self)
		self.scl_long_tuneup_bpm_offsets_controller = SCL_Long_TuneUp_BPM_Offsets_Controller(self)
		self.scl_long_tuneup_phase_analysis_controller = SCL_Long_TuneUp_PhaseAnalysis_Controller(self)
		self.scl_long_tuneup_rescale_controller = SCL_Long_TuneUp_Rescale_Controller(self)
		self.scl_long_tuneup_energy_meter_controller = SCL_Energy_Meter_Controller(self)	
		self.scl_long_twiss_analysis_controller = SCL_Long_Twiss_Analysis_Controller(self)
		self.scl_long_laser_stripping_controller = SCL_Laser_Stripping_Controller(self)
		#the beamTrigger will be initialized after the user hit "Init" button in SCL_Long_Init_Controller 
		self.beamTrigger = null
		#sets of BPMs for BPM_Batch_Reader will be setup in "Init" button in SCL_Long_Init_Controller 
		self.bpmBatchReader = BPM_Batch_Reader(self)
		#----add all subpanels to the SCL main tab panel
		self.tabbedPane.add("Init",self.scl_long_tuneup_init_controller.getMainPanel())
		self.tabbedPane.add("Phase Scan",self.scl_long_tuneup_phase_scan_controller.getMainPanel())		
		self.tabbedPane.add("BPM Offsets",self.scl_long_tuneup_bpm_offsets_controller.getMainPanel())	
		self.tabbedPane.add("Phase Analysis",self.scl_long_tuneup_phase_analysis_controller.getMainPanel())
		self.tabbedPane.add("Rescale SCL",self.scl_long_tuneup_rescale_controller.getMainPanel())
		self.tabbedPane.add("Energy Meter",self.scl_long_tuneup_energy_meter_controller.getMainPanel())
		self.tabbedPane.add("Long. Twiss",self.scl_long_twiss_analysis_controller.getMainPanel())
		self.tabbedPane.add("Laser Stripping",self.scl_long_laser_stripping_controller.getMainPanel())
Пример #2
0
class SCL_Long_TuneUp_Controller:
	def __init__(self,linac_wizard_document):
		#--- linac_wizard_document the parent document for all controllers
		self.linac_wizard_document = linac_wizard_document	
		#----scl_accSeq is a specific for this controller
		accl = self.linac_wizard_document.accl
		lst = ArrayList()
		for seqName in ["SCLMed","SCLHigh","HEBT1","HEBT2"]:	
			lst.add(accl.getSequence(seqName))
		self.scl_accSeq = AcceleratorSeqCombo("SCL_SEQUENCE", lst)	
		part_tracker = AlgorithmFactory.createParticleTracker(self.scl_accSeq)
		part_probe = ProbeFactory.createParticleProbe(self.scl_accSeq,part_tracker)
		self.mass = part_probe.getSpeciesRestEnergy()
		self.bpm_freq = 402.5e+6
		self.c_light = 2.99792458e+8
		#-------- Ring length 
		self.ring_length = accl.findSequence("Ring").getLength()
		#-------- BPMs and Cavities arrays
		self.bpm_wrappers = []
		self.cav_wrappers = []
		#-------- self.cav0_wrapper is used for all cavities (includind Cav01a) Blanked statistics
		self.cav0_wrapper = null
		self.fillOut_Arrays()	
		#--- the main tabbed pane		
		self.tabbedPane = JTabbedPane()
		#-------- child controllers 
		self.scl_long_tuneup_init_controller = SCL_Long_TuneUp_Init_Controller(self)
		self.scl_long_tuneup_phase_scan_controller = SCL_Long_TuneUp_PhaseScan_Controller(self)
		self.scl_long_tuneup_bpm_offsets_controller = SCL_Long_TuneUp_BPM_Offsets_Controller(self)
		self.scl_long_tuneup_phase_analysis_controller = SCL_Long_TuneUp_PhaseAnalysis_Controller(self)
		self.scl_long_tuneup_rescale_controller = SCL_Long_TuneUp_Rescale_Controller(self)
		self.scl_long_tuneup_energy_meter_controller = SCL_Energy_Meter_Controller(self)	
		self.scl_long_twiss_analysis_controller = SCL_Long_Twiss_Analysis_Controller(self)
		self.scl_long_laser_stripping_controller = SCL_Laser_Stripping_Controller(self)
		#the beamTrigger will be initialized after the user hit "Init" button in SCL_Long_Init_Controller 
		self.beamTrigger = null
		#sets of BPMs for BPM_Batch_Reader will be setup in "Init" button in SCL_Long_Init_Controller 
		self.bpmBatchReader = BPM_Batch_Reader(self)
		#----add all subpanels to the SCL main tab panel
		self.tabbedPane.add("Init",self.scl_long_tuneup_init_controller.getMainPanel())
		self.tabbedPane.add("Phase Scan",self.scl_long_tuneup_phase_scan_controller.getMainPanel())		
		self.tabbedPane.add("BPM Offsets",self.scl_long_tuneup_bpm_offsets_controller.getMainPanel())	
		self.tabbedPane.add("Phase Analysis",self.scl_long_tuneup_phase_analysis_controller.getMainPanel())
		self.tabbedPane.add("Rescale SCL",self.scl_long_tuneup_rescale_controller.getMainPanel())
		self.tabbedPane.add("Energy Meter",self.scl_long_tuneup_energy_meter_controller.getMainPanel())
		self.tabbedPane.add("Long. Twiss",self.scl_long_twiss_analysis_controller.getMainPanel())
		self.tabbedPane.add("Laser Stripping",self.scl_long_laser_stripping_controller.getMainPanel())
		
	def getMainPanel(self):
		return self.tabbedPane
		
	def fillOut_Arrays(self):
		bpms = self.scl_accSeq.getAllNodesWithQualifier((AndTypeQualifier().and((OrTypeQualifier()).or(BPM.s_strType))).andStatus(true))
		for bpm in bpms:
			#print "debug bpm=",bpm.getId()
			bpm_wrapper = BPM_Wrapper(bpm)
			bpm_wrapper.setPosition(self.scl_accSeq)
			self.bpm_wrappers.append(bpm_wrapper)
		rf_gaps = self.scl_accSeq.getAllNodesWithQualifier(AndTypeQualifier().and((OrTypeQualifier()).or(RfGap.s_strType)))	
		cavs = []
		for rf_gap in rf_gaps:
			cav = rf_gap.getParent()
			if((cav not in cavs) and cav.getStatus()):
				#print "debug cav=",cav.getId()				
				cavs.append(cav)
				cav_wrapper = SCL_Cavity_Wrapper(cav)
				cav_wrapper.setPosition(self.scl_accSeq)
				cav_wrapper.setUpBPM_Wrappers(self.bpm_wrappers,self)
				amp = cav.getDfltCavAmp()
				phase = cav.getDfltCavPhase()				
				cav_wrapper.initDesignAmp = amp
				cav_wrapper.initDesignPhase = phase
				cav_wrapper.designAmp = 0.
				cav_wrapper.designPhase = 0.
				if(amp < 0.1 ):
					cav_wrapper.isGood = false
				self.cav_wrappers.append(cav_wrapper)
		self.cav_wrappers[0].eKin_in = 185.6
		self.cav0_wrapper = SCL_Cavity_Wrapper(cavs[0])
		self.cav0_wrapper.alias = "AllOff"
		self.cav0_wrapper.setUpBPM_Wrappers(self.cav_wrappers[0].bpm_wrappers,self)
		self.cav0_wrapper.scanPhaseShift = 0.
		
	def getMessageTextField(self):
		return self.linac_wizard_document.getMessageTextField()
		
	def getBPM_Wrapper(self,alias):
		for bpm_wrapper in self.bpm_wrappers:
			if(alias == bpm_wrapper.alias): return bpm_wrapper
		return null
		
	def getBPM_WrapperForBPM_Id(self,bpm_id):
		for bpm_wrapper in self.bpm_wrappers:
			if(bpm_id == bpm_wrapper.bpm.getId()): return bpm_wrapper
		return null			
		
	def getCav_Wrapper(self,alias):
		if(alias == self.cav0_wrapper.alias): return self.cav0_wrapper
		for cav_wrapper in self.cav_wrappers:
			if(alias == cav_wrapper.alias): return cav_wrapper
		return null		
		
	def getCav_WrapperForCavId(self,cav_id):
		for cav_wrapper in self.cav_wrappers:
			if(cav_id == cav_wrapper.cav.getId()): return cav_wrapper
		return null	
		
	def clean(self):
		for bpm_wrapper in self.bpm_wrappers:
			bpm_wrapper.clean()
		self.cav0_wrapper.clean()
		for cav_wrapper in self.cav_wrappers:
			cav_wrapper.clean()
		self.cav_wrappers[0].eKin_in = 185.6
		self.scl_long_tuneup_energy_meter_controller.clean()
		self.scl_long_twiss_analysis_controller.clean()
		
	def updateAllTables(self):
		self.scl_long_tuneup_init_controller.bpm_table.getModel().fireTableDataChanged()
		self.scl_long_tuneup_init_controller.cav_table.getModel().fireTableDataChanged()
		self.scl_long_tuneup_phase_scan_controller.cavs_table.getModel().fireTableDataChanged()
		self.scl_long_tuneup_phase_scan_controller.bpms_table.getModel().fireTableDataChanged()
		self.scl_long_tuneup_bpm_offsets_controller.bpm_offsets_table.getModel().fireTableDataChanged()
		self.scl_long_tuneup_phase_analysis_controller.cavs_table.getModel().fireTableDataChanged()
		self.scl_long_tuneup_rescale_controller.updateTables()
		self.scl_long_tuneup_energy_meter_controller.updateTables()
		self.scl_long_twiss_analysis_controller.updateTables()
		
	def writeDataToXML(self,root_da):
		if(self.isWorthToSave()):
			scl_phase_scan_da = root_da.createChild("SCL_Longitudinal_Tuneup_Data")
			#---- write parameters of the scan
			scan_parameters_da = scl_phase_scan_da.createChild("SCAN_Parameters")
			bpm_amp_limit = self.scl_long_tuneup_phase_scan_controller.post_scan_panel.amp_limit_text.getValue()
			rf_phase_step = self.scl_long_tuneup_phase_scan_controller.start_stop_scan_panel.phase_step_text.getValue()
			time_wait = self.scl_long_tuneup_phase_scan_controller.set_phase_shift_panel.time_wait_text.getValue()
			min_bpm_dist = self.scl_long_tuneup_init_controller.min_bpm_dist_txt.getValue()
			max_bpm_dist = self.scl_long_tuneup_init_controller.max_bpm_dist_txt.getValue()
			scan_parameters_da.setValue("bpm_amp_limit",bpm_amp_limit)			
			scan_parameters_da.setValue("rf_phase_step",rf_phase_step)
			scan_parameters_da.setValue("time_wait",time_wait)
			scan_parameters_da.setValue("min_bpm_dist",min_bpm_dist)
			scan_parameters_da.setValue("max_bpm_dist",max_bpm_dist)
			#---- write BPMs and Cavities params
			bpm_wrappers_da = scl_phase_scan_da.createChild("BPMs_Parameters_and_Data")
			for bpm_wrapper in self.bpm_wrappers:
				bpm_wrapper.writeDataToXML(bpm_wrappers_da)
			cav_wrappers_da = scl_phase_scan_da.createChild("Cavs_Parameters_and_Data")
			self.cav0_wrapper.writeDataToXML(cav_wrappers_da)
			for cav_wrapper in self.cav_wrappers:
				cav_wrapper.writeDataToXML(cav_wrappers_da)
			self.scl_long_twiss_analysis_controller.writeDataToXML(scl_phase_scan_da)		
			self.scl_long_tuneup_init_controller.scl_quad_fields_dict_holder.writeDataToXML(scl_phase_scan_da)					
		#------ write info from other controllers
		self.scl_long_tuneup_energy_meter_controller.writeDataToXML(root_da)
	
	def readDataFromXML(self,root_da):		
		#----------- SCL Long. Scan data ---------------------------------
		list_da = root_da.childAdaptors("SCL_Longitudinal_Tuneup_Data")
		if(not list_da.isEmpty()):
			scl_phase_scan_da = list_da.get(0)
			#---- get general scan parameters
			scan_parameters_da = scl_phase_scan_da.childAdaptor("SCAN_Parameters")
			if(scan_parameters_da != null):
				if(scan_parameters_da.hasAttribute("bpm_amp_limit")):
					bpm_amp_limit = scan_parameters_da.doubleValue("bpm_amp_limit")
					self.scl_long_tuneup_phase_scan_controller.post_scan_panel.amp_limit_text.setValue(bpm_amp_limit)
				if(scan_parameters_da.hasAttribute("rf_phase_step")):
					rf_phase_step = scan_parameters_da.doubleValue("rf_phase_step")
					self.scl_long_tuneup_phase_scan_controller.start_stop_scan_panel.phase_step_text.setValue(rf_phase_step)
				if(scan_parameters_da.hasAttribute("time_wait")):
					time_wait = scan_parameters_da.doubleValue("time_wait")
					self.scl_long_tuneup_phase_scan_controller.set_phase_shift_panel.time_wait_text.setValue(time_wait)
				if(scan_parameters_da.hasAttribute("min_bpm_dist")):
					min_bpm_dist = scan_parameters_da.doubleValue("min_bpm_dist")
					self.scl_long_tuneup_init_controller.min_bpm_dist_txt.setValue(min_bpm_dist)
				if(scan_parameters_da.hasAttribute("max_bpm_dist")):
					max_bpm_dist = scan_parameters_da.doubleValue("max_bpm_dist")
					self.scl_long_tuneup_init_controller.max_bpm_dist_txt.setValue(max_bpm_dist)	
			#---- get BPM amd Cav information
			bpm_wrappers_missing = self.bpm_wrappers[:]
			bpm_wrappers_da = scl_phase_scan_da.childAdaptor("BPMs_Parameters_and_Data")
			for bpm_wrapper_da in bpm_wrappers_da.childAdaptors():
				bpm_wrapper = self.getBPM_Wrapper(bpm_wrapper_da.stringValue("alias"))
				if(bpm_wrapper != null):
					#print "debug bpm=",bpm_wrapper.alias
					bpm_wrapper.readDataFromXML(bpm_wrapper_da,self)
					bpm_wrappers_missing.remove(bpm_wrapper)
			for bpm_wrapper in bpm_wrappers_missing:
				bpm_wrapper.isGood = false
			#----------- cavities ------------------------------------------
			cav_wrappers_da = scl_phase_scan_da.childAdaptor("Cavs_Parameters_and_Data")
			for cav_wrapper_da in cav_wrappers_da.childAdaptors():
				cav_wrapper = self.getCav_Wrapper(cav_wrapper_da.name())
				if(cav_wrapper != null):
					#print "debug cav=",cav_wrapper.alias
					cav_wrapper.readDataFromXML(cav_wrapper_da,self)
			#------ read info from other longitudinal scan controllers
			self.scl_long_twiss_analysis_controller.readDataFromXML(scl_phase_scan_da)	
			self.scl_long_tuneup_init_controller.scl_quad_fields_dict_holder.readDataFromXML(scl_phase_scan_da)			
		#------ read info from other controllers
		self.scl_long_tuneup_energy_meter_controller.readDataFromXML(root_da)
	
	def putFoundConfigInAccelerator(self):
		# This method will be called from linac setup controller to 
		# update accelerator from the found cavities amplitudes and phases
		# After this method the design amp and phases will be different
		for cav_wrapper in self.cav_wrappers:
			if(cav_wrapper.isGood):
				cav_wrapper.cav.updateDesignAmp(cav_wrapper.designAmp)
				cav_wrapper.cav.updateDesignPhase(cav_wrapper.designPhase)
			else:
				cav_wrapper.cav.updateDesignAmp(0.)
				cav_wrapper.cav.updateDesignPhase(0.)				
				
	def isWorthToSave(self):
		is_worth = false
		for cav_wrapper in self.cav_wrappers:
			if(cav_wrapper.isGood):
				if(cav_wrapper.isMeasured or cav_wrapper.isAnalyzed):
					is_worth = true
					break
		return is_worth