def trackProbe(self,eKin_in): """ Returns the Trajectory. The input energy is in MeV """ part_probe = ParticleProbe(self.part_probe_init) part_probe.setKineticEnergy(eKin_in*1.0e+6) self.scenario.setProbe(part_probe) self.scenario.run() return self.scenario.getTrajectory()
def getModelEnergyOut(self,eKin_in,amp,phase,phase_shift): if(self.active_cav_wrapper == null): return 0. self.setModelAmpPhaseToActiveCav(amp,phase,phase_shift) part_probe = ParticleProbe(self.part_probe_init) part_probe.setKineticEnergy(eKin_in*1.0e+6) self.scenario.setProbe(part_probe) self.scenario.resync() self.scenario.run() return self.scenario.getTrajectory().finalState().getKineticEnergy()/1.0e+6
def calcForNewAmpsAndPhases(self): self.setRescaledModelCavityAmplitudes() cav_wrappers = self.scl_long_tuneup_controller.cav_wrappers for cav_wrapper in cav_wrappers: amp = cav_wrapper.rescaleBacket.designAmp phase = self.new_cav_amp_phase_dict[cav_wrapper][1] self.new_cav_amp_phase_dict[cav_wrapper] = [amp,phase] self.scenario.resync() #---set up phases : we should reproduce the rf gap avg. phases from the proxies max_limit_phase_diff = 0.01 max_phase_diff = 1.0 min_cav_amp = 0.5 max_iter = 30 it = 0 while(max_phase_diff > max_limit_phase_diff): it += 1 for cav_wrapper in cav_wrappers: irfGap = self.cavToGapsDict[cav_wrapper][0] phase = self.new_cav_amp_phase_dict[cav_wrapper][1] irfGap.setPhase(phase*math.pi/180.) part_probe = ParticleProbe(self.part_probe_init) eKin_in = self.scl_long_tuneup_controller.cav_wrappers[0].eKin_in part_probe.setKineticEnergy(eKin_in*1.0e+6) self.scenario.setProbe(part_probe) self.scenario.run() max_phase_diff = 0.0 for cav_wrapper in cav_wrappers: phase_rf_gaps_avg = self.getAvgGapPhase(cav_wrapper) phase_diff = phase_rf_gaps_avg - cav_wrapper.rescaleBacket.avg_gap_phase #print "debug cav=",cav_wrapper.alias," phase_diff=",phase_diff," phase avg =",phase_rf_gaps_avg," design avg=",cav_wrapper.avg_gap_phase #print "debug ======= amp=",cav_wrapper.cav.getDfltCavAmp()," phase=",self.cavToGapsDict[cav_wrapper][0].getPhase()*180./math.pi if(cav_wrapper.rescaleBacket.designAmp > min_cav_amp): self.new_cav_amp_phase_dict[cav_wrapper][1] -= phase_diff/1.3 phase_diff = math.fabs(phase_diff) if(max_phase_diff < phase_diff): max_phase_diff = phase_diff eKin_out = self.scenario.getTrajectory().finalState().getKineticEnergy()/1.0e+6 #print "debug eKin_out=",eKin_out if(it > max_iter): break #---- update the cavities' new model phases for cav_wrapper in cav_wrappers: phase = self.new_cav_amp_phase_dict[cav_wrapper][1] cav_wrapper.rescaleBacket.designPhase = makePhaseNear(phase,0.) #print "debug iter=",it eKin_out = self.scenario.getTrajectory().finalState().getKineticEnergy()/1.0e+6 cav_wrappers[len(cav_wrappers)-1].rescaleBacket.eKin_out = eKin_out eKin_in = self.scenario.getTrajectory().initialState().getKineticEnergy()/1.0e+6 cav_wrappers[0].rescaleBacket.eKin_in = eKin_in scl_long_tuneup_rescale_controller = self.scl_long_tuneup_controller.scl_long_tuneup_rescale_controller scl_long_tuneup_operations_rescale_controller = scl_long_tuneup_rescale_controller.scl_long_tuneup_operations_rescale_controller init_amp_phases_panel = scl_long_tuneup_operations_rescale_controller.init_amp_phases_panel init_amp_phases_panel.energy_text.setValue(eKin_out) self.restoreInitAmpPhases() return eKin_out
def calcForNewAmpsAndPhases(self): self.setRescaledModelCavityAmplitudes() cav_wrappers = self.scl_long_tuneup_controller.cav_wrappers for cav_wrapper in cav_wrappers: amp = cav_wrapper.rescaleBacket.designAmp phase = self.new_cav_amp_phase_dict[cav_wrapper][1] self.new_cav_amp_phase_dict[cav_wrapper] = [amp,phase] self.scenario.resync() #---set up phases : we should reproduce the rf gap avg. phases from the proxies max_limit_phase_diff = 0.01 max_phase_diff = 1.0 min_cav_amp = 0.5 max_iter = 30 it = 0 while(max_phase_diff > max_limit_phase_diff): it += 1 for cav_wrapper in cav_wrappers: irfGap = self.cavToGapsDict[cav_wrapper][0] phase = self.new_cav_amp_phase_dict[cav_wrapper][1] irfGap.setPhase(phase*math.pi/180.) part_probe = ParticleProbe(self.part_probe_init) eKin_in = self.scl_long_tuneup_controller.cav_wrappers[0].eKin_in part_probe.setKineticEnergy(eKin_in*1.0e+6) self.scenario.setProbe(part_probe) self.scenario.run() max_phase_diff = 0.0 for cav_wrapper in cav_wrappers: phase_rf_gaps_avg = self.getAvgGapPhase(cav_wrapper) phase_diff = phase_rf_gaps_avg - cav_wrapper.rescaleBacket.avg_gap_phase #print "debug cav=",cav_wrapper.alias," phase_diff=",phase_diff," phase avg =",phase_rf_gaps_avg," design avg=",cav_wrapper.avg_gap_phase #print "debug ======= amp=",cav_wrapper.cav.getDfltCavAmp()," phase=",self.cavToGapsDict[cav_wrapper][0].getPhase()*180./math.pi if(cav_wrapper.rescaleBacket.designAmp > min_cav_amp): self.new_cav_amp_phase_dict[cav_wrapper][1] -= phase_diff/1.3 phase_diff = math.fabs(phase_diff) if(max_phase_diff < phase_diff): max_phase_diff = phase_diff eKin_out = self.scenario.getTrajectory().finalState().getKineticEnergy()/1.0e+6 #print "debug eKin_out=",eKin_out if(it > max_iter): break #---- update the cavities' new model phases for cav_wrapper in cav_wrappers: phase = self.new_cav_amp_phase_dict[cav_wrapper][1] cav_wrapper.rescaleBacket.designPhase = makePhaseNear(phase,0.) #print "debug iter=",it eKin_out = self.scenario.getTrajectory().finalState().getKineticEnergy()/1.0e+6 scl_long_tuneup_rescale_controller = self.scl_long_tuneup_controller.scl_long_tuneup_rescale_controller init_amp_phases_panel = scl_long_tuneup_rescale_controller.init_amp_phases_panel init_amp_phases_panel.energy_text.setValue(eKin_out) self.restoreInitAmpPhases() return eKin_out
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.part_tracker = AlgorithmFactory.createParticleTracker(self.accSeq) self.part_tracker.setRfGapPhaseCalculation(true) self.part_probe_init = ProbeFactory.createParticleProbe(self.accSeq,self.part_tracker) self.scenario = Scenario.newScenarioFor(self.accSeq) self.scenario.setSynchronizationMode(Scenario.SYNC_MODE_DESIGN) self.scenario.resync() part_probe = ParticleProbe(self.part_probe_init) part_probe.setKineticEnergy(self.part_probe_init.getKineticEnergy()) self.scenario.setProbe(part_probe) self.scenario.run() #------------------------------------------------- # The cavToGapsDict is needed for reference to the irfGap to set phase and do not use scenario.resync() rfGaps = self.accSeq.getAllNodesWithQualifier(AndTypeQualifier().and((OrTypeQualifier()).or(RfGap.s_strType))) self.cavToGapsDict = {} self.cavEnergyInOutDict = {} for cav_wrapper in cav_wrappers: self.cavToGapsDict[cav_wrapper] = [] for rfGap in rfGaps: if(rfGap.getParent().getId() == cav_wrapper.cav.getId()): irfGaps = self.scenario.elementsMappedTo(rfGap) self.cavToGapsDict[cav_wrapper].append(irfGaps[0]) for cav_wrapper_ind in range(len(cav_wrappers)): cav_wrapper = cav_wrappers[cav_wrapper_ind] irfGaps = self.cavToGapsDict[cav_wrapper] nGaps = len(irfGaps) state_in = self.scenario.getTrajectory().statesForElement(irfGaps[0].getId()).get(0) if(cav_wrapper_ind > 0): irfGaps_0 = self.cavToGapsDict[cav_wrappers[cav_wrapper_ind-1]] irfGap_0 = irfGaps_0[len(irfGaps_0)-1] state_in = self.scenario.getTrajectory().statesForElement(irfGap_0.getId()).get(0) state_out = self.scenario.getTrajectory().statesForElement(irfGaps[nGaps-1].getId()).get(0) #print "debug cav=",cav_wrapper.alias," eKin_in=",state_in.getKineticEnergy()/1.0e+6," eKin_out=",state_out.getKineticEnergy()/1.0e+6 self.cavEnergyInOutDict[cav_wrapper] = (state_in.getKineticEnergy()/1.0e+6,state_out.getKineticEnergy()/1.0e+6) # cav_wrappers_param_dict[cav_wrapper] = (cavAmp,phase) self.cav_wrappers_param_dict = {} self.cav_amp_phase_dict = {} for cav_wrapper in cav_wrappers: amp = cav_wrapper.cav.getDfltCavAmp() phase = cav_wrapper.cav.getDfltCavPhase() self.cav_amp_phase_dict[cav_wrapper] = (amp,phase) #---------------------------------------------------------------- self.active_cav_wrapper = null self.gap_first = null self.gap_last = null self.gap_list = null
def fillOutEneregyVsPhase(self,eKin_in,amp,phase_shift,phase_arr): self.scan_gd.removeAllPoints() if(self.active_cav_wrapper == null): return self.active_cav_wrapper.cav.updateDesignAmp(amp) self.scenario.resync() irfGap = self.cavToGapsDict[self.active_cav_wrapper][0] for phase in phase_arr: part_probe = ParticleProbe(self.part_probe_init) part_probe.setKineticEnergy(eKin_in*1.0e+6) self.scenario.setProbe(part_probe) #self.active_cav_wrapper.cav.updateDesignPhase(phase-phase_shift) #self.scenario.resync() irfGap.setPhase((phase-phase_shift)*math.pi/180.) self.scenario.run() eKin_out = self.scenario.getTrajectory().finalState().getKineticEnergy()/1.0e+6 self.scan_gd.addPoint(phase,eKin_out) return self.scan_gd
def initTrackingModelAndArrivalTimes(self): # It fills out the arrival time for the our base case # It also returns the energy self.setAnalysisModelCavityAmplitudes() part_probe = ParticleProbe(self.part_probe_init) eKin_in = self.scl_long_tuneup_controller.cav_wrappers[0].eKin_in part_probe.setKineticEnergy(eKin_in*1.0e+6) self.scenario.setProbe(part_probe) self.scenario.resync() self.scenario.run() cav_wrappers = self.scl_long_tuneup_controller.cav_wrappers for cav_wrapper in cav_wrappers: if(self.cavToGapsDict.has_key(cav_wrapper)): irfGap = self.cavToGapsDict[cav_wrapper][0] state = self.scenario.getTrajectory().stateForElement(irfGap.getId()) cav_wrapper.rescaleBacket.arrivalTime = state.getTime() self.new_cav_amp_phase_dict[cav_wrapper][1] = cav_wrapper.designPhase self.modelArrivalTimesIsReady = true self.restoreInitAmpPhases() return self.scenario.getTrajectory().finalState().getKineticEnergy()/1.0e+6
def __init__(self,mebt_main_orbit_diff_cntrl): self.mebt_main_orbit_diff_cntrl = mebt_main_orbit_diff_cntrl self.accSeq = self.mebt_main_orbit_diff_cntrl.accSeq self.scenario = Scenario.newScenarioFor(self.accSeq) self.scenario.setSynchronizationMode(Scenario.SYNC_MODE_DESIGN) self.scenario.unsetStartNode() self.scenario.unsetStopNode() self.part_tracker = AlgorithmFactory.createParticleTracker(self.accSeq) self.part_tracker.setRfGapPhaseCalculation(true) self.part_probe_init = ProbeFactory.createParticleProbe(self.accSeq,self.part_tracker) self.scenario.resync() part_probe = ParticleProbe(self.part_probe_init) self.scenario.setProbe(part_probe) self.scenario.run() self.traj = self.scenario.getTrajectory()
def runModel(self): quad_wrappers = self.mebt_main_orbit_diff_cntrl.quad_wrappers for quad_wrapper in quad_wrappers: quad_wrapper.magnet.setDfltField(quad_wrapper.field) dc_wrappers = self.mebt_main_orbit_diff_cntrl.dc_wrappers for dc_wrapper in dc_wrappers: dc_wrapper.magnet.setDfltField(dc_wrapper.field) #""" self.scenario = Scenario.newScenarioFor(self.accSeq) self.scenario.setSynchronizationMode(Scenario.SYNC_MODE_DESIGN) self.scenario.unsetStartNode() self.scenario.unsetStopNode() #""" self.scenario.resync() part_probe = ParticleProbe(self.part_probe_init) self.scenario.setProbe(part_probe) self.scenario.run() self.traj = self.scenario.getTrajectory()