コード例 #1
0
	def track(self, paramsDict):
		"""
		The drift class implementation of the AccNode class track(probe) method.
		"""
		length = self.getLength(self.getActivePartIndex())
		bunch = paramsDict["bunch"]
		TPB.drift(bunch, length)
コード例 #2
0
	def track(self, paramsDict):
		"""
		The  OverlappingQuadsNode class implementation of the AccNode class track(paramDict) method.
		"""
		index = self.getActivePartIndex()	
		length = self.getLength(index)
		if(index == 0): self.z_value = 0.
		bunch = paramsDict["bunch"]
		momentum = bunch.getSyncParticle().momentum()		
		n_steps = int(length/self.z_step)+1
		z_step = length/n_steps
		for z_ind in range(n_steps):
			z = self.z_value + z_step*(z_ind+0.5)
			G = self.getTotalField(z)
			kq = G/(3.335640952*momentum)
			if(abs(kq) == 0.):
				TPB.drift(bunch,z_step)
				continue
			#------- track through a combined quad
			TPB.quad1(bunch,z_step/4.0, kq)
			TPB.quad2(bunch,z_step/2.0)
			TPB.quad1(bunch,z_step/2.0, kq)
			TPB.quad2(bunch,z_step/2.0)
			TPB.quad1(bunch,z_step/4.0, kq)
		self.z_value += length
コード例 #3
0
    def track(self, paramsDict):
        """
		The drift class implementation of the AccNodeBunchTracker class track(probe) method.
		"""
        length = self.getLength(self.getActivePartIndex())
        bunch = paramsDict["bunch"]
        TPB.drift(bunch, length)
コード例 #4
0
    def track(self, paramsDict):
        """
		The simplest RF gap class implementation of
		the AccNode class track(probe) method.
		"""
        index = self.getActivePartIndex()
        length = self.getLength(index)
        bunch = paramsDict["bunch"]
        syncPart = bunch.getSyncParticle()
        if (index == 0 or index == 2):
            gapOffset = 0.
            if (self.hasParam("gapOffset")):
                gapOffset = self.getParam("gapOffset")
            if (index == 2): gapOffset = -gapOffset
            TPB.drift(bunch, length + gapOffset)
            return
        E0TL = self.getParam("E0TL")
        modePhase = self.getParam("modePhase") * math.pi
        rfCavity = self.getRF_Cavity()
        frequency = rfCavity.getFrequency()
        rfPhase = rfCavity.getPhase() + modePhase
        rf_ampl = rfCavity.getAmp()
        phase = rfPhase
        arrival_time = syncPart.time()
        designArrivalTime = rfCavity.getDesignArrivalTime()
        if (self.__isFirstGap):
            if (rfCavity.isDesignSetUp()):
                #print "debug RF =",self.getName(),"  phase=",(phase*180./math.pi - 180.)
                phase = math.fmod(
                    frequency *
                    (arrival_time - designArrivalTime) * 2.0 * math.pi +
                    rfPhase, 2.0 * math.pi)
                #print "debug RF =",self.getName(),"  phase=",(phase*180./math.pi - 180.)
            else:
                sequence = self.getSequence()
                accLattice = sequence.getLinacAccLattice()
                msg = "The BaseRF_Gap class. You have to run trackDesign on the LinacAccLattice first to initialize all RF Cavities' phases!"
                msg = msg + os.linesep
                msg = msg + "Lattice =" + accLattice.getName()
                msg = msg + os.linesep
                msg = msg + "Sequence =" + sequence.getName()
                msg = msg + os.linesep
                msg = msg + "RF Cavity =" + rfCavity.getName()
                msg = msg + os.linesep
                msg = msg + "Name of element=" + self.getName()
                msg = msg + os.linesep
                msg = msg + "Type of element=" + self.getType()
                msg = msg + os.linesep
                orbitFinalize(msg)
        else:
            phase = math.fmod(
                frequency *
                (arrival_time - designArrivalTime) * 2.0 * math.pi + rfPhase,
                2.0 * math.pi)
        #------------------------------------------------------
        #call rf gap with E0TL phase phase of the gap and a longitudinal shift parameter
        self.cppGapModel.trackBunch(bunch, frequency, E0TL, phase)
        self.setGapPhase(phase)
コード例 #5
0
	def track(self, paramsDict):
		"""
		The simplest RF gap class implementation of
		the AccNode class track(probe) method.
		"""
		index = self.getActivePartIndex()
		length = self.getLength(index)
		bunch = paramsDict["bunch"]		
		syncPart = bunch.getSyncParticle()
		if(index == 0 or index == 2):
			gapOffset = 0.
			if(self.hasParam("gapOffset")): gapOffset = self.getParam("gapOffset")
			if(index == 2): gapOffset = -gapOffset
			TPB.drift(bunch, length + gapOffset)
			return
		E0TL = self.getParam("E0TL")		
		modePhase = self.getParam("modePhase")*math.pi
		rfCavity = self.getRF_Cavity()
		frequency = rfCavity.getFrequency()	
		rfPhase = rfCavity.getPhase() + modePhase
		rf_ampl = rfCavity.getAmp()
		phase = rfPhase
		arrival_time = syncPart.time()
		designArrivalTime = rfCavity.getDesignArrivalTime()
		if(self.__isFirstGap):
			if(rfCavity.isDesignSetUp()):
				#print "debug RF =",self.getName(),"  phase=",(phase*180./math.pi - 180.)
				phase = math.fmod(frequency*(arrival_time - designArrivalTime)*2.0*math.pi + rfPhase,2.0*math.pi)
				#print "debug RF =",self.getName(),"  phase=",(phase*180./math.pi - 180.)
			else:
				sequence = self.getSequence()
				accLattice = sequence.getLinacAccLattice()
				msg = "The BaseRF_Gap class. You have to run trackDesign on the LinacAccLattice first to initialize all RF Cavities' phases!"
				msg = msg + os.linesep
				msg = msg + "Lattice =" + accLattice.getName()				
				msg = msg + os.linesep
				msg = msg + "Sequence =" + sequence.getName()				
				msg = msg + os.linesep
				msg = msg + "RF Cavity =" + rfCavity.getName()				
				msg = msg + os.linesep
				msg = msg + "Name of element=" + self.getName()
				msg = msg + os.linesep
				msg = msg + "Type of element=" + self.getType()
				msg = msg + os.linesep
				orbitFinalize(msg)				
		else:
			phase = math.fmod(frequency*(arrival_time - designArrivalTime)*2.0*math.pi+rfPhase,2.0*math.pi)	
		#------------------------------------------------------
		#call rf gap with E0TL phase phase of the gap and a longitudinal shift parameter	
		self.cppGapModel.trackBunch(bunch,frequency,E0TL,phase)
		self.setGapPhase(phase)
コード例 #6
0
    def track(self, paramsDict):
        """
		The Kick TEAPOT class implementation of
		the AccNodeBunchTracker class track(probe) method.
		"""
        nParts = self.getnParts()
        index = self.getActivePartIndex()
        length = self.getLength(index)
        strength = 1.0
        if (self.waveform):
            strength = self.waveform.getStrength()
        kx = strength * self.getParam("kx") / (nParts - 1)
        ky = strength * self.getParam("ky") / (nParts - 1)
        dE = self.getParam("dE") / (nParts - 1)
        bunch = paramsDict["bunch"]
        useCharge = 1
        if (paramsDict.has_key("useCharge")):
            useCharge = paramsDict["useCharge"]
        if (index == 0):
            TPB.drift(bunch, length)
            TPB.kick(bunch, kx, ky, dE, useCharge)
            return
        if (index > 0 and index < (nParts - 1)):
            TPB.drift(bunch, length)
            TPB.kick(bunch, kx, ky, dE, useCharge)
            return
        if (index == (nParts - 1)):
            TPB.drift(bunch, length)
        return
コード例 #7
0
ファイル: teapot.py プロジェクト: yunluo0921/py-orbit
    def track(self, paramsDict):
        """
		The Multipole Combined Function TEAPOT  class
		implementation of the AccNodeBunchTracker class track(probe) method.
		"""
        nParts = self.getnParts()
        index = self.getActivePartIndex()
        length = self.getLength(index)
        bunch = paramsDict["bunch"]
        useCharge = 1
        if (paramsDict.has_key("useCharge")):
            useCharge = paramsDict["useCharge"]
        poleArr = self.getParam("poles")
        klArr = self.getParam("kls")
        skewArr = self.getParam("skews")
        if (index == 0):
            TPB.drift(bunch, length)
            return
        if (index > 0 and index < (nParts - 1)):
            for i in xrange(len(poleArr)):
                pole = poleArr[i]
                kl = klArr[i] / (nParts - 1)
                skew = skewArr[i]
                TPB.multp(bunch, pole, kl, skew, useCharge)
            TPB.drift(bunch, length)
            return
        if (index == (nParts - 1)):
            for i in xrange(len(poleArr)):
                pole = poleArr[i]
                kl = klArr[i] / (nParts - 1)
                skew = skewArr[i]
                TPB.multp(bunch, pole, kl, skew, useCharge)
            TPB.drift(bunch, length)
        return
コード例 #8
0
ファイル: teapot.py プロジェクト: luxiaohan/py-orbit-code
	def track(self, paramsDict):
		"""
		The Multipole Combined Function TEAPOT  class
		implementation of the AccNodeBunchTracker class track(probe) method.
		"""
		nParts = self.getnParts()
		index = self.getActivePartIndex()
		length = self.getLength(index)
		bunch = paramsDict["bunch"]
		useCharge = 1
		if(paramsDict.has_key("useCharge")): useCharge = paramsDict["useCharge"]			
		poleArr = self.getParam("poles")
		klArr = self.getParam("kls")
		skewArr = self.getParam("skews")
		if(index == 0):
			TPB.drift(bunch, length)
			return
		if(index > 0 and index < (nParts-1)):
			for i in xrange(len(poleArr)):
				pole = poleArr[i]
				kl = klArr[i]/(nParts - 1)
				skew = skewArr[i]
				TPB.multp(bunch,pole,kl,skew,useCharge)
			TPB.drift(bunch, length)
			return
		if(index == (nParts-1)):
			for i in xrange(len(poleArr)):
				pole = poleArr[i]
				kl = klArr[i]/(nParts - 1)
				skew = skewArr[i]
				TPB.multp(bunch,pole,kl,skew,useCharge)
			TPB.drift(bunch, length)
		return
コード例 #9
0
ファイル: teapot.py プロジェクト: luxiaohan/py-orbit-code
	def track(self, paramsDict):
		"""
		The Kick TEAPOT  class implementation of
		the AccNodeBunchTracker class track(probe) method.
		"""
		nParts = self.getnParts()
		index = self.getActivePartIndex()
		length = self.getLength(index)
		strength = 1.0
		if(self.waveform):
			strength = self.waveform.getKickFactor()
		kx = strength * self.getParam("kx")/(nParts-1)
		ky = strength * self.getParam("ky")/(nParts-1)
		dE = self.getParam("dE")/(nParts-1)
		bunch = paramsDict["bunch"]
		useCharge = 1
		if(paramsDict.has_key("useCharge")): useCharge = paramsDict["useCharge"]
		if(index == 0):
			TPB.drift(bunch, length)
			TPB.kick(bunch,kx,ky,dE,useCharge)
			return
		if(index > 0 and index < (nParts-1)):
			TPB.drift(bunch, length)
			TPB.kick(bunch,kx,ky,dE,useCharge)
			return
		if(index == (nParts-1)):
			TPB.drift(bunch, length)
		return
コード例 #10
0
ファイル: teapot.py プロジェクト: austin-hoover/py-orbit
    def track(self, paramsDict):
        """
		The Kick TEAPOT  class implementation of
		the AccNodeBunchTracker class track(probe) method.
		"""
        nParts = self.getnParts()
        index = self.getActivePartIndex()
        length = self.getLength(index)
        amplitude = self.waveform.getAmplitude() if self.waveform else 1.0
        kx = amplitude * self.getParam("kx") / (nParts - 1)
        ky = amplitude * self.getParam("ky") / (nParts - 1)
        dE = self.getParam("dE") / (nParts - 1)
        bunch = paramsDict["bunch"]
        useCharge = 1
        if paramsDict.has_key("useCharge"):
            useCharge = paramsDict["useCharge"]
        if index == 0:
            TPB.drift(bunch, length)
            TPB.kick(bunch, kx, ky, dE, useCharge)
            return
        if index > 0 and index < nParts - 1:
            TPB.drift(bunch, length)
            TPB.kick(bunch, kx, ky, dE, useCharge)
            return
        if index == nParts - 1:
            TPB.drift(bunch, length)
        return
コード例 #11
0
    def trackDesign(self, paramsDict):
        """
		The RF First Gap node setups the design time of passage 
		of the bunch through this node.
		"""
        index = self.getActivePartIndex()
        length = self.getLength(index)
        bunch = paramsDict["bunch"]
        if (index == 0 or index == 2):
            gapOffset = 0.
            if (self.hasParam("gapOffset")):
                gapOffset = self.getParam("gapOffset")
            if (index == 2): gapOffset = -gapOffset
            TPB.drift(bunch, length + gapOffset)
            return
        E0TL = self.getParam("E0TL")
        rfCavity = self.getRF_Cavity()
        modePhase = self.getParam("modePhase") * math.pi
        arrival_time = bunch.getSyncParticle().time()
        frequency = rfCavity.getFrequency()
        rfPhase = rfCavity.getPhase() + modePhase
        rf_ampl = rfCavity.getDesignAmp()
        phase = rfPhase
        if (self.__isFirstGap):
            rfCavity.setDesignArrivalTime(arrival_time)
            rfCavity.setDesignSetUp(True)
            rfCavity._setDesignPhase(rfCavity.getPhase())
            rfCavity._setDesignAmp(rfCavity.getAmp())
        else:
            first_gap_arr_time = rfCavity.getDesignArrivalTime()
            #print "debug name=",self.getName()," delta_phase=",frequency*(arrival_time - first_gap_arr_time)*360.0," rfPhase=",rfPhase*180/math.pi
            phase = math.fmod(
                frequency *
                (arrival_time - first_gap_arr_time) * 2.0 * math.pi + rfPhase,
                2.0 * math.pi)
        #print "debug name=",self.getName()," arr_time=",arrival_time," phase=",phase*180./math.pi," E0TL=",E0TL*1.0e+3," freq=",frequency
        #------------------------------------------------------
        #call rf gap with E0TL phase phase of the gap and a longitudinal shift parameter
        self.cppGapModel.trackBunch(bunch, frequency, E0TL, phase)
        self.setGapPhase(phase)
コード例 #12
0
	def trackDesign(self, paramsDict):
		"""
		The RF First Gap node setups the design time of passage 
		of the bunch through this node.
		"""
		index = self.getActivePartIndex()
		length = self.getLength(index)
		bunch = paramsDict["bunch"]
		if(index == 0 or index == 2):
			gapOffset = 0.
			if(self.hasParam("gapOffset")): gapOffset = self.getParam("gapOffset")
			if(index == 2): gapOffset = -gapOffset
			TPB.drift(bunch, length + gapOffset)
			return		
		E0TL = self.getParam("E0TL")			
		rfCavity = self.getRF_Cavity()
		modePhase = self.getParam("modePhase")*math.pi	
		arrival_time = bunch.getSyncParticle().time()
		frequency = rfCavity.getFrequency()
		rfPhase = rfCavity.getPhase() + modePhase
		rf_ampl = rfCavity.getDesignAmp()
		phase = rfPhase
		if(self.__isFirstGap):
			rfCavity.setDesignArrivalTime(arrival_time)
			rfCavity.setDesignSetUp(True)		
			rfCavity._setDesignPhase(rfCavity.getPhase())
			rfCavity._setDesignAmp(rfCavity.getAmp())
		else:
			first_gap_arr_time = rfCavity.getDesignArrivalTime()
			#print "debug name=",self.getName()," delta_phase=",frequency*(arrival_time - first_gap_arr_time)*360.0," rfPhase=",rfPhase*180/math.pi
			phase = math.fmod(frequency*(arrival_time - first_gap_arr_time)*2.0*math.pi+rfPhase,2.0*math.pi)		
		#print "debug name=",self.getName()," arr_time=",arrival_time," phase=",phase*180./math.pi," E0TL=",E0TL*1.0e+3," freq=",frequency
		#------------------------------------------------------
		#call rf gap with E0TL phase phase of the gap and a longitudinal shift parameter	
		self.cppGapModel.trackBunch(bunch,frequency,E0TL,phase)
		self.setGapPhase(phase)