Example #1
0
def get_chi_terms(MADTwiss,filesF,plane,name,ListOfZeroDPPX,ListOfZeroDPPY):

    # bmps
    files = filesF[0]

    dbpms = utils.bpm.intersect(files)
    dbpms = utils.bpm.model_intersect(dbpms, MADTwiss)


    # initiliasing variables
    XIT=[]
    XITi=[]
    XITr=[]
    XIrmsT=[]
    XI_phase_T=[]
    XI_phaseRMS_T=[]

    POS1=[]
    POS2=[]
    POS3=[]

    XITMODEL=[]
    XITMODELi=[]
    XITMODELr=[]
    XITMODEL_phase=[]

    BPMS=[]
    invarianceJx=[]
    invarianceJy=[]

    for i in range(0,len(dbpms)): # ask rogelio
        bn1=str.upper(dbpms[i][1])
        BPMS.append(bn1)

    #### invariance
    for j in range(0,len(ListOfZeroDPPX)):
        # Since betax,rmsbbx,bpms(return_value[0:3]) are not used, slice the return value([3]) (vimaier)
        invariantJX = ( beta.beta_from_amplitude(MADTwiss,ListOfZeroDPPX,'H') )[3]
        # Since betay,rmsbby,bpms(return_value[0:3]) are not used, slice the return value([3]) (vimaier)
        invariantJY= ( beta.beta_from_amplitude(MADTwiss,ListOfZeroDPPY,'V') )[3]
        invarianceJx.append(invariantJX[0])
        invarianceJy.append(invariantJY[0])

    if DEBUG:
        print "invarianceJX:",invarianceJx
    #### model chi
    MADTwiss.chiterms(BPMS)
    if name=='chi3000':
        MODEL=MADTwiss.chi
    elif name=='chi4000':
        MODEL=MADTwiss.chi4000


    for i in range(0,len(MODEL)):

        MODEL[i]=MODEL[i]
        amp=abs(MODEL[i])
        ampi=MODEL[i].imag
        ampr=MODEL[i].real

        if(MODEL[i].real==0. ):

            phase=0

        else:

            phase=np.arctan2(MODEL[i].imag,MODEL[i].real)%1


        XITMODEL.append(amp)
        XITMODELi.append(ampi)
        XITMODELr.append(ampr)
        XITMODEL_phase.append(phase)

    XIMODEl=[XITMODEL,XITMODELi,XITMODELr,XITMODEL_phase]

    for i in range(0,len(dbpms)-2):

        XI=[]
        XIi=[]
        XIr=[]
        XIrms=[]
        XI_phase=[]
        XI_phaseRMS=[]

        bn1=str.upper(dbpms[i][1])
        bn2=str.upper(dbpms[i+1][1])
        bn3=str.upper(dbpms[i+2][1])

        filej=ListOfZeroDPPX[0]

        pos1=filej.S[filej.indx[bn1]]
        pos2=filej.S[filej.indx[bn2]]
        pos3=filej.S[filej.indx[bn3]]


        POS1.append(pos1)
        POS2.append(pos2)
        POS3.append(pos3)

        imaM=XITMODELi[i]
        realM=XITMODELr[i]

        for j in range(0,len(files)):
            jx=files[j]




            # for chi3000
            if name=='chi3000':
                phase1=jx.PHASE_20[jx.indx[bn1]]
                phase2=jx.PHASE_20[jx.indx[bn2]]
                phase3=jx.PHASE_20[jx.indx[bn3]]
                phase_SL=[phase1,phase2,phase3]

                terms=[3,0,0,0]
                amp1=jx.AMP_20[jx.indx[bn1]]
                amp2=jx.AMP_20[jx.indx[bn2]]
                amp3=jx.AMP_20[jx.indx[bn3]]
                amp=[amp1,amp2,amp3]

            # for chi4000
            elif name=='chi4000':
                phase1=jx.PHASE_30[jx.indx[bn1]]
                phase2=jx.PHASE_30[jx.indx[bn2]]
                phase3=jx.PHASE_30[jx.indx[bn3]]
                phase_SL=[phase1,phase2,phase3]

                terms=[4,0,0,0]
                amp1=jx.AMP_30[jx.indx[bn1]]
                amp2=jx.AMP_30[jx.indx[bn2]]
                amp3=jx.AMP_30[jx.indx[bn3]]
                amp=[amp1,amp2,amp3]

            phase11=jx.MUX[jx.indx[bn1]]
            phase12=jx.MUX[jx.indx[bn2]]
            phase13=jx.MUX[jx.indx[bn3]]
            phase=[phase11,phase12,phase13]


            J=[ invarianceJx[j],invarianceJy[j]]



            chi = _compute_chi_terms(amp,phase_SL,phase,terms,J,'H',imaM,realM)



            XI.append(chi[0])
            XIi.append(chi[1])
            XIr.append(chi[2])
            XI_phase.append(chi[3])



        XI=np.array(XI)
        XIi=np.array(XIi)
        XIr=np.array(XIr)
        try:
            XIrms=math.sqrt(np.average(XI*XI)-np.average(XI)**2+2.2e-16)
        except:
            XIrms=0
        XI_phase=np.array(XI_phase)
        try:
            XI_phaseRMS=math.sqrt(np.average(XI_phase*XI_phase)-np.average(XI_phase)**2+2.2e-16)
        except:
            XI_phaseRMS=0


        XIT.append(np.average(XI))
        XITi.append(np.average(XIi))
        XITr.append(np.average(XIr))
        XIrmsT.append(XIrms)
        XI_phase_T.append(np.average(XI_phase))
        XI_phaseRMS_T.append(XI_phaseRMS)

        POS=[POS1,POS2,POS3]

        XItot=[XIT,XITi,XITr,XIrmsT,XI_phase_T,XI_phaseRMS_T]

    return [dbpms,POS,XItot,XIMODEl]
Example #2
0
def Getoctopole(MADTwiss, plane, twiss_files, phaseI, Q, fname, fM, NAMES):
    """
    for finding secondary lines of the octuple (@ Glenn Vanbavinckhove)
    """
    # intersects BPMs
    dbpms = Utilities.bpm.intersect(twiss_files[0])
    dbpms = Utilities.bpm.model_intersect(dbpms, MADTwiss)

    # value definition
    hMODELT = []
    hMODELTi = []
    hMODELTr = []
    h_phase_MODELT = []

    AT = []
    A_RMST = []

    phaseT = []
    phase_RMST = []

    hT = []
    hTi = []
    hTr = []
    h_RMST = []

    h_phaseT = []
    h_phase_RMST = []

    invarianceJx = []
    invarianceJy = []

    # finding the invariances
    for j in range(0, len(twiss_files[0])):
        singleFilex = [twiss_files[0][j]]
        singleFiley = [twiss_files[1][j]]

        # Since beta,rmsbb,bpms(return_value[0:3]) are not used, slice return value([3])(vimaier)
        invariantJx = (beta.beta_from_amplitude(MADTwiss, singleFilex, "H"))[3]

        # Since beta,rmsbb,bpms(return_value[0:3]) are not used, slice return value([3])(vimaier)
        invariantJy = (beta.beta_from_amplitude(MADTwiss, singleFiley, "V"))[3]

        invarianceJx.append(invariantJx)
        invarianceJy.append(invariantJy)

    # for the model
    for i in range(0, len(dbpms)):

        bpm = str.upper(dbpms[i][1])

        # TODO: think about the thing with bpm_name_according_to_tw_file = tw.NAME[tw.indx[bpm_name]]
        # Maybe change name in twiss ctor to upper.
        bpmC = MADTwiss.NAME[MADTwiss.indx[bpm]]

        for j in range(0, len(NAMES)):
            try:
                name = NAMES[j]

                if name == bpmC:

                    amp = abs(fM[j])
                    ampr = fM[i].real
                    ampi = fM[j].imag
                    phase = np.arctan2(ampi, ampr) % 1

                    hMODELT.append(amp)
                    hMODELTr.append(ampr)
                    hMODELTi.append(ampi)
                    h_phase_MODELT.append(phase)

            except:
                print "name " + str(NAMES[j]) + " is not found in dictionary"
            hMODEL = [hMODELT, hMODELTi, hMODELTr, h_phase_MODELT]

    # calculation of f,q,h,qh
    for i in range(0, len(dbpms) - 1):
        bn1 = str.upper(dbpms[i][1])
        bn2 = str.upper(dbpms[i + 1][1])

        dell = phaseI[bn1][0] - 0.25

        # internal value definition
        AS = []
        A_SRMS = []
        phaseS = []
        phase_RMSS = []

        hS = []
        hSi = []
        hSr = []
        h_RMSS = []
        h_phaseS = []
        h_phase_RMSS = []

        for j in range(0, len(twiss_files[0])):

            single_twiss = twiss_files[0][j]

            # for f4000
            if fname == "f4000":

                [A, phi] = ComplexSecondaryLine(
                    dell,
                    single_twiss.AMP_30[single_twiss.indx[bn1]],
                    single_twiss.AMP_30[single_twiss.indx[bn2]],
                    single_twiss.PHASE_30[single_twiss.indx[bn1]],
                    single_twiss.PHASE_30[single_twiss.indx[bn2]],
                )

                factor = float(8 * invarianceJx[j][0] ** 1.5)  # 1 to fit with model
                term = float(4 * Q[0])
                termj = 4
                M2M = 0.5

            # ------ converting
            h = _convert_f_term_to_h_term(A, phi, termj, factor, term, M2M)

            # ----- adding the terms
            AS.append(A)
            phaseS.append(phi)
            hSi.append(h[0])
            hSr.append(h[1])
            hS.append(h[2])
            h_phaseS.append(h[3])

        # array and taking average for all the input files for one BPM
        AS = np.array(AS)
        A_SRMS = math.sqrt(np.average(AS * AS) - (np.average(AS)) ** 2 + 2.2e-16)

        phaseS = np.array(phaseS)
        try:
            phase_RMSS = math.sqrt(np.average(phaseS * phaseS) - (np.average(phaseS)) ** 2 + 2.2e-16)
        except:
            phase_RMSS = 0

        hS = np.array(hS)
        hSi = np.array(hSi)
        hSr = np.array(hSr)
        try:
            h_RMSS = math.sqrt(np.average(hS * hS) - (np.average(hS)) ** 2 + 2.2e-16)
        except:
            h_RMSS = 0

        h_phaseS = np.array(h_phaseS)
        try:
            phase_rms = np.average(h_phaseS * h_phaseS) - (np.average(h_phaseS)) ** 2 + 2.2e-16
        except:
            phase_rms = 0
        h_phase_RMSS = math.sqrt(phase_rms)

        # real output
        AT.append(np.average(AS))
        A_RMST.append(A_SRMS)

        phaseT.append(np.average(phaseS))
        phase_RMST.append(phase_RMSS)

        hT.append(np.average(hS))
        hTi.append(np.average(hSi))
        hTr.append(np.average(hSr))
        h_RMST.append(h_RMSS)

        h_phaseT.append(np.average(h_phaseS))
        h_phase_RMST.append(h_phase_RMSS)

        A = [AT, A_RMST, phaseT, phase_RMST]
        h = [hT, hTi, hTr, h_RMST, h_phaseT, h_phase_RMST]

    return [A, h, hMODEL, dbpms]
Example #3
0
def Getsextupole(MADTwiss, amp20list, phase, tune, j, k):
    """
    function written to calculate resonance driving terms
    """
    # constructing complex amplitude and phase using two BPM method

    bpms = Utilities.bpm.intersect(amp20list)
    bpms = Utilities.bpm.model_intersect(bpms, MADTwiss)

    # Since beta,rmsbb(return_value[0:2]) are not used, slice return value([2:4])(vimaier)
    [bpms, invariantJx] = (beta.beta_from_amplitude(MADTwiss, amp20list, "H"))[2:4]
    sqrt2jx = invariantJx[0]

    Q = tune + float(str(MADTwiss.Q1).split(".")[0])

    afactor = 1 - cos(2 * (j - k) * np.pi * Q)  # (2*sin(np.pi*(j-k)*Q))
    # print (2*sin(np.pi*(j-k)*Q)),(1-cos(6*np.pi*Q))
    # sys.exit()
    pfactor = np.pi * (j - k) * Q

    htot = {}

    for i in range(len(bpms)):

        if i < (len(bpms) - 1):
            bpm = bpms[i][1]
            bpm1 = bpms[i + 1][1]
            s = bpms[i][0]
        else:
            bpm = bpms[i][1]
            bpm1 = bpms[0][1]
            s = bpms[i][0]

        amp_i_list = []
        phase_i_list = []

        hlist = []
        hplist = []

        flist = []
        fplist = []

        for fileamp in amp20list:
            amp_201 = fileamp.AMP_20[fileamp.indx[bpm]] * fileamp.AMPX[fileamp.indx[bpm]]
            amp_202 = fileamp.AMP_20[fileamp.indx[bpm1]] * fileamp.AMPX[fileamp.indx[bpm1]]

            phase_201 = fileamp.PHASE_20[fileamp.indx[bpm]]
            phase_202 = fileamp.PHASE_20[fileamp.indx[bpm1]]

            delta = phase[bpm.upper()][0] - 0.25
            edelta = phase[bpm.upper()][1]

            # computing complex line
            # Since eampi,ephasei(return_value[2:4]) are not used, slice return value([0:1])(vimaier)
            ampi, phasei = (ComplexSecondaryLineExtended(delta, edelta, amp_201, amp_202, phase_201, phase_202))[0:2]

            if ampi != 0.0:

                amp_i_list.append(ampi)
                phase_i_list.append(phasei)

                if j == 3 and k == 0:
                    factor = math.sqrt(2)  ### factor
                    fterm = ampi / (factor * 2 * j * sqrt2jx ** 2)
                    pterm = (phasei - phase[bpm.upper()][0] + 0.25) % 1

                    hterm = fterm / afactor

                    hpterm = (pterm - pfactor) % 1

                elif j == 2 and k == 1:
                    factor = math.sqrt(2)  ### factor
                    fterm = ampi / (factor * 2 * j * sqrt2jx ** 2)
                    pterm = (phasei - phase[bpm][0] + 0.25) % 1

                    hterm = fterm / afactor

                    hpterm = (pterm - pfactor) % 1

                flist.append(fterm)
                fplist.append(pterm)
                hlist.append(hterm)
                hplist.append(hpterm)

        if len(amp_i_list) != 0.0:
            al = np.mean(amp_i_list)
            alstd = np.std(amp_i_list)

            pl = np.mean(phase_i_list)
            plstd = np.mean(phasei)

            fl = np.mean(flist)
            fstd = np.std(flist)

            fpl = np.mean(fplist)
            fpstd = np.std(fplist)

            hl = np.mean(hlist)
            hstd = np.std(hlist)

            hpl = np.mean(hplist)
            hpstd = np.std(hplist)

            htot[bpm] = [bpm, s, al, alstd, pl, plstd, fl, fstd, fpl, fpstd, hl, hstd, hpl, hpstd]

    return htot, afactor, pfactor
Example #4
0
def get_chi_terms(MADTwiss,filesF,plane,name,ListOfZeroDPPX,ListOfZeroDPPY):

    # bmps
    files = filesF[0]

    dbpms = utils.bpm.intersect(files)
    dbpms = utils.bpm.model_intersect(dbpms, MADTwiss)


    # initiliasing variables
    XIT=[]
    XITi=[]
    XITr=[]
    XIrmsT=[]
    XI_phase_T=[]
    XI_phaseRMS_T=[]

    POS1=[]
    POS2=[]
    POS3=[]

    XITMODEL=[]
    XITMODELi=[]
    XITMODELr=[]
    XITMODEL_phase=[]

    BPMS=[]
    invarianceJx=[]
    invarianceJy=[]

    for i in range(0,len(dbpms)): # ask rogelio
        bn1=str.upper(dbpms[i][1])
        BPMS.append(bn1)

    #### invariance
    for j in range(0,len(ListOfZeroDPPX)):
        # Since betax,rmsbbx,bpms(return_value[0:3]) are not used, slice the return value([3]) (vimaier)
        invariantJX = ( beta.beta_from_amplitude(MADTwiss,ListOfZeroDPPX,'H') )[3]
        # Since betay,rmsbby,bpms(return_value[0:3]) are not used, slice the return value([3]) (vimaier)
        invariantJY= ( beta.beta_from_amplitude(MADTwiss,ListOfZeroDPPY,'V') )[3]
        invarianceJx.append(invariantJX[0])
        invarianceJy.append(invariantJY[0])

    LOGGER.debug("invarianceJX: {}".format(invarianceJx))
    
    #### model chi
    MADTwiss.chiterms(BPMS)
    if name=='chi3000':
        MODEL=MADTwiss.chi
    elif name=='chi4000':
        MODEL=MADTwiss.chi4000


    for i in range(0,len(MODEL)):

        MODEL[i]=MODEL[i]
        amp=abs(MODEL[i])
        ampi=MODEL[i].imag
        ampr=MODEL[i].real

        if(MODEL[i].real==0. ):

            phase=0

        else:

            phase=np.arctan2(MODEL[i].imag,MODEL[i].real)%1


        XITMODEL.append(amp)
        XITMODELi.append(ampi)
        XITMODELr.append(ampr)
        XITMODEL_phase.append(phase)

    XIMODEl=[XITMODEL,XITMODELi,XITMODELr,XITMODEL_phase]

    for i in range(0,len(dbpms)-2):

        XI=[]
        XIi=[]
        XIr=[]
        XIrms=[]
        XI_phase=[]
        XI_phaseRMS=[]

        bn1=str.upper(dbpms[i][1])
        bn2=str.upper(dbpms[i+1][1])
        bn3=str.upper(dbpms[i+2][1])

        filej=ListOfZeroDPPX[0]

        pos1=filej.S[filej.indx[bn1]]
        pos2=filej.S[filej.indx[bn2]]
        pos3=filej.S[filej.indx[bn3]]


        POS1.append(pos1)
        POS2.append(pos2)
        POS3.append(pos3)

        imaM=XITMODELi[i]
        realM=XITMODELr[i]

        for j in range(0,len(files)):
            jx=files[j]




            # for chi3000
            if name=='chi3000':
                phase1=jx.PHASE_20[jx.indx[bn1]]
                phase2=jx.PHASE_20[jx.indx[bn2]]
                phase3=jx.PHASE_20[jx.indx[bn3]]
                phase_SL=[phase1,phase2,phase3]

                terms=[3,0,0,0]
                amp1=jx.AMP_20[jx.indx[bn1]]
                amp2=jx.AMP_20[jx.indx[bn2]]
                amp3=jx.AMP_20[jx.indx[bn3]]
                amp=[amp1,amp2,amp3]

            # for chi4000
            elif name=='chi4000':
                phase1=jx.PHASE_30[jx.indx[bn1]]
                phase2=jx.PHASE_30[jx.indx[bn2]]
                phase3=jx.PHASE_30[jx.indx[bn3]]
                phase_SL=[phase1,phase2,phase3]

                terms=[4,0,0,0]
                amp1=jx.AMP_30[jx.indx[bn1]]
                amp2=jx.AMP_30[jx.indx[bn2]]
                amp3=jx.AMP_30[jx.indx[bn3]]
                amp=[amp1,amp2,amp3]

            phase11=jx.MUX[jx.indx[bn1]]
            phase12=jx.MUX[jx.indx[bn2]]
            phase13=jx.MUX[jx.indx[bn3]]
            phase=[phase11,phase12,phase13]


            J=[ invarianceJx[j],invarianceJy[j]]



            chi = _compute_chi_terms(amp,phase_SL,phase,terms,J,'H',imaM,realM)



            XI.append(chi[0])
            XIi.append(chi[1])
            XIr.append(chi[2])
            XI_phase.append(chi[3])



        XI=np.array(XI)
        XIi=np.array(XIi)
        XIr=np.array(XIr)
        try:
            XIrms=math.sqrt(np.average(XI*XI)-np.average(XI)**2+2.2e-16)
        except:
            XIrms=0
        XI_phase=np.array(XI_phase)
        try:
            XI_phaseRMS=math.sqrt(np.average(XI_phase*XI_phase)-np.average(XI_phase)**2+2.2e-16)
        except:
            XI_phaseRMS=0


        XIT.append(np.average(XI))
        XITi.append(np.average(XIi))
        XITr.append(np.average(XIr))
        XIrmsT.append(XIrms)
        XI_phase_T.append(np.average(XI_phase))
        XI_phaseRMS_T.append(XI_phaseRMS)

        POS=[POS1,POS2,POS3]

        XItot=[XIT,XITi,XITr,XIrmsT,XI_phase_T,XI_phaseRMS_T]

    return [dbpms,POS,XItot,XIMODEl]
Example #5
0
def Getoctopole(MADTwiss, plane, twiss_files, phaseI, Q, fname, fM, NAMES):
    '''
    for finding secondary lines of the octuple (@ Glenn Vanbavinckhove)
    '''
    # intersects BPMs
    dbpms = utils.bpm.intersect(twiss_files[0])
    dbpms = utils.bpm.model_intersect(dbpms, MADTwiss)

    # value definition
    hMODELT = []
    hMODELTi = []
    hMODELTr = []
    h_phase_MODELT = []

    AT = []
    A_RMST = []

    phaseT = []
    phase_RMST = []

    hT = []
    hTi = []
    hTr = []
    h_RMST = []

    h_phaseT = []
    h_phase_RMST = []

    invarianceJx = []
    invarianceJy = []

    # finding the invariances
    for j in range(0, len(twiss_files[0])):
        singleFilex = [twiss_files[0][j]]
        singleFiley = [twiss_files[1][j]]

        # Since beta,rmsbb,bpms(return_value[0:3]) are not used, slice return value([3])(vimaier)
        invariantJx = (beta.beta_from_amplitude(MADTwiss, singleFilex, 'H'))[3]

        # Since beta,rmsbb,bpms(return_value[0:3]) are not used, slice return value([3])(vimaier)
        invariantJy = (beta.beta_from_amplitude(MADTwiss, singleFiley, 'V'))[3]

        invarianceJx.append(invariantJx)
        invarianceJy.append(invariantJy)

    # for the model
    for i in range(0, len(dbpms)):

        bpm = str.upper(dbpms[i][1])

        #TODO: think about the thing with bpm_name_according_to_tw_file = tw.NAME[tw.indx[bpm_name]]
        #Maybe change name in twiss ctor to upper.
        bpmC = MADTwiss.NAME[MADTwiss.indx[bpm]]

        for j in range(0, len(NAMES)):
            try:
                name = NAMES[j]

                if name == bpmC:

                    amp = abs(fM[j])
                    ampr = fM[i].real
                    ampi = fM[j].imag
                    phase = np.arctan2(ampi, ampr) % 1

                    hMODELT.append(amp)
                    hMODELTr.append(ampr)
                    hMODELTi.append(ampi)
                    h_phase_MODELT.append(phase)

            except:
                print 'name ' + str(NAMES[j]) + ' is not found in dictionary'
            hMODEL = [hMODELT, hMODELTi, hMODELTr, h_phase_MODELT]

    #calculation of f,q,h,qh
    for i in range(0, len(dbpms) - 1):
        bn1 = str.upper(dbpms[i][1])
        bn2 = str.upper(dbpms[i + 1][1])

        dell = phaseI[bn1][0] - 0.25

        # internal value definition
        AS = []
        A_SRMS = []
        phaseS = []
        phase_RMSS = []

        hS = []
        hSi = []
        hSr = []
        h_RMSS = []
        h_phaseS = []
        h_phase_RMSS = []

        for j in range(0, len(twiss_files[0])):

            single_twiss = twiss_files[0][j]

            # for f4000
            if fname == 'f4000':

                [A, phi] = ComplexSecondaryLine(
                    dell, single_twiss.AMP_30[single_twiss.indx[bn1]],
                    single_twiss.AMP_30[single_twiss.indx[bn2]],
                    single_twiss.PHASE_30[single_twiss.indx[bn1]],
                    single_twiss.PHASE_30[single_twiss.indx[bn2]])

                factor = float(8 *
                               invarianceJx[j][0]**1.5)  # 1 to fit with model
                term = float(4 * Q[0])
                termj = 4
                M2M = 0.5

            #------ converting
            h = _convert_f_term_to_h_term(A, phi, termj, factor, term, M2M)

            #----- adding the terms
            AS.append(A)
            phaseS.append(phi)
            hSi.append(h[0])
            hSr.append(h[1])
            hS.append(h[2])
            h_phaseS.append(h[3])

        # array and taking average for all the input files for one BPM
        AS = np.array(AS)
        A_SRMS = math.sqrt(np.average(AS * AS) - (np.average(AS))**2 + 2.2e-16)

        phaseS = np.array(phaseS)
        try:
            phase_RMSS = math.sqrt(
                np.average(phaseS * phaseS) - (np.average(phaseS))**2 +
                2.2e-16)
        except:
            phase_RMSS = 0

        hS = np.array(hS)
        hSi = np.array(hSi)
        hSr = np.array(hSr)
        try:
            h_RMSS = math.sqrt(
                np.average(hS * hS) - (np.average(hS))**2 + 2.2e-16)
        except:
            h_RMSS = 0

        h_phaseS = np.array(h_phaseS)
        try:
            phase_rms = np.average(
                h_phaseS * h_phaseS) - (np.average(h_phaseS))**2 + 2.2e-16
        except:
            phase_rms = 0
        h_phase_RMSS = math.sqrt(phase_rms)

        # real output
        AT.append(np.average(AS))
        A_RMST.append(A_SRMS)

        phaseT.append(np.average(phaseS))
        phase_RMST.append(phase_RMSS)

        hT.append(np.average(hS))
        hTi.append(np.average(hSi))
        hTr.append(np.average(hSr))
        h_RMST.append(h_RMSS)

        h_phaseT.append(np.average(h_phaseS))
        h_phase_RMST.append(h_phase_RMSS)

        A = [AT, A_RMST, phaseT, phase_RMST]
        h = [hT, hTi, hTr, h_RMST, h_phaseT, h_phase_RMST]

    return [A, h, hMODEL, dbpms]
Example #6
0
def Getsextupole(MADTwiss, amp20list, phase, tune, j, k):
    '''
    function written to calculate resonance driving terms
    '''
    # constructing complex amplitude and phase using two BPM method

    bpms = utils.bpm.intersect(amp20list)
    bpms = utils.bpm.model_intersect(bpms, MADTwiss)

    # Since beta,rmsbb(return_value[0:2]) are not used, slice return value([2:4])(vimaier)
    [bpms, invariantJx] = (beta.beta_from_amplitude(MADTwiss, amp20list,
                                                    'H'))[2:4]
    sqrt2jx = invariantJx[0]

    Q = tune + float(str(MADTwiss.Q1).split(".")[0])

    afactor = (1 - cos(2 * (j - k) * np.pi * Q))
    pfactor = (np.pi * (j - k) * Q)

    htot = {}

    for i in range(len(bpms)):

        if i < (len(bpms) - 1):
            bpm = bpms[i][1]
            bpm1 = bpms[i + 1][1]
            s = bpms[i][0]
        else:
            bpm = bpms[i][1]
            bpm1 = bpms[0][1]
            s = bpms[i][0]

        amp_i_list = []
        phase_i_list = []

        hlist = []
        hplist = []

        flist = []
        fplist = []

        for fileamp in amp20list:
            amp_201 = fileamp.AMP_20[fileamp.indx[bpm]] * fileamp.AMPX[
                fileamp.indx[bpm]]
            amp_202 = fileamp.AMP_20[fileamp.indx[bpm1]] * fileamp.AMPX[
                fileamp.indx[bpm1]]

            phase_201 = fileamp.PHASE_20[fileamp.indx[bpm]]
            phase_202 = fileamp.PHASE_20[fileamp.indx[bpm1]]

            delta = phase[bpm.upper()][0] - 0.25
            edelta = phase[bpm.upper()][1]

            #computing complex line
            # Since eampi,ephasei(return_value[2:4]) are not used, slice return value([0:1])(vimaier)
            ampi, phasei = (ComplexSecondaryLineExtended(
                delta, edelta, amp_201, amp_202, phase_201, phase_202))[0:2]

            if ampi != 0.0:

                amp_i_list.append(ampi)
                phase_i_list.append(phasei)

                if (j == 3 and k == 0):
                    factor = math.sqrt(2)  ### factor
                    fterm = ampi / (factor * 2 * j * sqrt2jx**2)
                    pterm = (phasei - phase[bpm.upper()][0] + 0.25) % 1

                    hterm = fterm / afactor

                    hpterm = (pterm - pfactor) % 1

                elif (j == 2 and k == 1):
                    factor = math.sqrt(2)  ### factor
                    fterm = ampi / (factor * 2 * j * sqrt2jx**2)
                    pterm = (phasei - phase[bpm][0] + 0.25) % 1

                    hterm = fterm / afactor

                    hpterm = (pterm - pfactor) % 1

                flist.append(fterm)
                fplist.append(pterm)
                hlist.append(hterm)
                hplist.append(hpterm)

        if len(amp_i_list) != 0.0:
            al = np.mean(amp_i_list)
            alstd = np.std(amp_i_list)

            pl = np.mean(phase_i_list)
            plstd = np.mean(phasei)

            fl = np.mean(flist)
            fstd = np.std(flist)

            fpl = np.mean(fplist)
            fpstd = np.std(fplist)

            hl = np.mean(hlist)
            hstd = np.std(hlist)

            hpl = np.mean(hplist)
            hpstd = np.std(hplist)

            htot[bpm] = [
                bpm, s, al, alstd, pl, plstd, fl, fstd, fpl, fpstd, hl, hstd,
                hpl, hpstd
            ]

    return htot, afactor, pfactor