Пример #1
0
 def __init__(self, model_hyper_parameters = parameters.model_parameters(), magnet = ms.appleMagnet):
     self.cont = wrd.wradObjCnt([])
         
     loc_offset = [0,0,0]
     
     loc_offset[1] = -(((model_hyper_parameters.totalmagnets-1)/2.0) * 
                       (model_hyper_parameters.nominal_fmagnet_dimensions[1] + 
                        model_hyper_parameters.shim) + 
                       model_hyper_parameters.nominal_fmagnet_dimensions[1]/2.0 + 2 *model_hyper_parameters.shim +
                       model_hyper_parameters.end_magnet_thickness[0] * 2.5 +
                       model_hyper_parameters.end_separation
                       )
     M = []
     mat = []
     
     for i in range(model_hyper_parameters.magnets_per_period):
         #M.append([halbach_direction * np.sin(i*np.pi/2.0)*model_hyper_parameters.M*np.sin(2*np.pi*model_hyper_parameters.Mova/360.0),halbach_direction * np.sin(i*np.pi/2.0)*model_hyper_parameters.M * np.cos(2*np.pi*model_hyper_parameters.Mova/360.0), np.cos(i*np.pi/2.0)*model_hyper_parameters.M])
         M.append([np.cos(i*2*np.pi/model_hyper_parameters.magnets_per_period)*model_hyper_parameters.M*np.sin(2*np.pi*model_hyper_parameters.Mova/360.0),
                   -1 * np.sin(i*2*np.pi/model_hyper_parameters.magnets_per_period)*model_hyper_parameters.M, 
                   np.cos(i*2*np.pi/model_hyper_parameters.magnets_per_period)*model_hyper_parameters.M * np.cos(2*np.pi*model_hyper_parameters.Mova/360.0)])
         
         mat.append(wrdm.wradMatLin(model_hyper_parameters.ksi,M[i]))
     
     Mus = -int((model_hyper_parameters.totalmagnets-1)/2)#1st full magnet Upstream in row
     Mds = int((model_hyper_parameters.totalmagnets-1)/2)#1st full magnet Downstreamin row
     
     mag1 = magnet(model_hyper_parameters, loc_offset,mat[(Mus-3)%model_hyper_parameters.magnets_per_period], magnet_thickness = model_hyper_parameters.end_magnet_thickness[0]) 
     loc_offset[1] += model_hyper_parameters.end_magnet_thickness[0] + model_hyper_parameters.end_separation
     
     mag2 = magnet(model_hyper_parameters, loc_offset,mat[(Mus-2)%model_hyper_parameters.magnets_per_period], magnet_thickness = model_hyper_parameters.end_magnet_thickness[0]) 
     
     loc_offset[1] += model_hyper_parameters.end_magnet_thickness[0] + model_hyper_parameters.shim
     
     mag3 = magnet(model_hyper_parameters, loc_offset,mat[(Mus-1)%model_hyper_parameters.magnets_per_period], magnet_thickness = model_hyper_parameters.end_magnet_thickness[0]) 
     
     
     loc_offset[1] = (((model_hyper_parameters.totalmagnets-1)/2.0) * 
                       (model_hyper_parameters.nominal_fmagnet_dimensions[1] + 
                        model_hyper_parameters.shim) + 
                       model_hyper_parameters.nominal_fmagnet_dimensions[1]/2.0 + 
                       model_hyper_parameters.shim +
                       model_hyper_parameters.end_magnet_thickness[0]/2.0
                       )
     
     mag4 = magnet(model_hyper_parameters, loc_offset,mat[(Mds+1)%model_hyper_parameters.magnets_per_period], magnet_thickness = model_hyper_parameters.end_magnet_thickness[0]) 
     loc_offset[1] += model_hyper_parameters.end_magnet_thickness[0] + model_hyper_parameters.shim
     
     mag5 = magnet(model_hyper_parameters, loc_offset,mat[(Mds+2)%model_hyper_parameters.magnets_per_period], magnet_thickness = model_hyper_parameters.end_magnet_thickness[0]) 
     loc_offset[1] += model_hyper_parameters.end_magnet_thickness[0] + model_hyper_parameters.end_separation
     
     mag6 = magnet(model_hyper_parameters, loc_offset,mat[(Mds+3)%model_hyper_parameters.magnets_per_period], magnet_thickness = model_hyper_parameters.end_magnet_thickness[0]) 
     
     
     self.cont.wradObjAddToCnt([mag1.cont, mag2.cont, mag3.cont, mag4.cont, mag5.cont, mag6.cont])
Пример #2
0
def UEX(periodlength=120, gap=13, rowshift=0):
    UEXH_params = testparams = parameters.model_parameters(
        periods=10,
        periodlength=periodlength,
        block_subdivision=[2, 1, 1],
        nominal_fmagnet_dimensions=[40.0, 0.0, 40.0],
        apple_clampcut=5.0,
        magnets_per_period=4,
        gap=gap,
        rowshift=rowshift,
        rowtorowgap=1.0,
        shiftmode='circular',
        M=1.3)
    #create model
    UEXH = id.plainAPPLE(UEXH_params)

    return UEXH
Пример #3
0
def UE112():
    UE112H_params = testparams = parameters.model_parameters(
        periods=10,
        periodlength=112,
        block_subdivision=[2, 1, 1],
        nominal_fmagnet_dimensions=[40.0, 0.0, 40.0],
        apple_clampcut=5.0,
        comp_magnet_chamfer=[3.0, 0.0, 3.0],
        magnets_per_period=4,
        gap=22.9,
        rowshift=56,
        rowtorowgap=1.2,
        shiftmode='circular',
        M=1.2)
    #create model
    UE112H = id.plainAPPLE(UE112H_params)

    return UE112H
Пример #4
0
 def __init__(self, model_hyper_parameters = parameters.model_parameters(), magnet = ms.appleMagnet):
     '''
     Constructor
     '''
     #def appleArray(model_hyper_parameters, loc_offset, halbach_direction = -1):
     self.cont = wrd.wradObjCnt([])
     
     loc_offset = [0,0,0]
     
     loc_offset[1] = -((model_hyper_parameters.totalmagnets-1)/2.0) * (model_hyper_parameters.nominal_fmagnet_dimensions[1] + model_hyper_parameters.shim)
     M = []
     mat = []
     for i in range(model_hyper_parameters.magnets_per_period):
         #M.append([halbach_direction * np.sin(i*np.pi/2.0)*model_hyper_parameters.M*np.sin(2*np.pi*model_hyper_parameters.Mova/360.0),halbach_direction * np.sin(i*np.pi/2.0)*model_hyper_parameters.M * np.cos(2*np.pi*model_hyper_parameters.Mova/360.0), np.cos(i*np.pi/2.0)*model_hyper_parameters.M])
         M.append([np.cos(i*2*np.pi/model_hyper_parameters.magnets_per_period)*model_hyper_parameters.M*np.sin(2*np.pi*model_hyper_parameters.Mova/360.0),-1 * np.sin(i*2*np.pi/model_hyper_parameters.magnets_per_period)*model_hyper_parameters.M, np.cos(i*2*np.pi/model_hyper_parameters.magnets_per_period)*model_hyper_parameters.M * np.cos(2*np.pi*model_hyper_parameters.Mova/360.0)])
         
         mat.append(wrdm.wradMatLin(model_hyper_parameters.ksi,M[i]))
     
     for x in range(-int((model_hyper_parameters.totalmagnets-1)/2),int(1+(model_hyper_parameters.totalmagnets-1)/2)):#0,model_hyper_parameters.appleMagnets
         
         mag = magnet(model_hyper_parameters, loc_offset,mat[(x)%model_hyper_parameters.magnets_per_period]) 
         loc_offset[1] += model_hyper_parameters.nominal_fmagnet_dimensions[1] + model_hyper_parameters.shim
         self.cont.wradObjAddToCnt([mag.cont])
Пример #5
0
    def __init__(self,
                 base_hyper_parameters,
                 hyper_solution_variables,
                 scan_parameters = 'default', 
                 hyper_solution_properties = ['B'], 
                 method = 'random',
                 iterations = 20):
        
        
        if scan_parameters == 'default':
            self.scan_parameters = parameters.scan_parameters(periodlength = test_hyper_params.periodlength)
        else:
            self.scan_parameters = scan_parameters
        solvecount = 0
        
        self.base_hyper_parameters = parameters.model_parameters(**base_hyper_parameters)  #what is the fundamental model
        self.hyper_solution_variables = copy.deepcopy(hyper_solution_variables) #what parameters in the hyperparameters are being varied and their ranges
        self.hyper_solution_properties = copy.deepcopy(hyper_solution_properties) # 
        self.hyper_inputs = []
        self.hyper_results = {}
        self.solutions = []
        
        keylist = list(self.hyper_solution_variables.keys())
        
        #Build Hyper_Inputs
        
        if method == 'systematic':
            tmp = []
            for key in keylist:
                if type(self.hyper_solution_variables[key]) is list:
                    for i in range(len(self.hyper_solution_variables[key])):
                        tmp.append(self.hyper_solution_variables[key][i])
                
                else:
                    tmp.append(self.hyper_solution_variables[key])
            
            tmp1 = list(itertools.product(*tmp))
            
            for j in tmp1:
                jlist = list(j)
                for key in range(len(keylist)):
                    keylen = 1
                    if isinstance(base_hyper_parameters[keylist[key]],list):
                        keylen = len(base_hyper_parameters[keylist[key]])
                        base_hyper_parameters[keylist[key]] = jlist[0:keylen]
                    else:
                        base_hyper_parameters[keylist[key]] = jlist[0]
                    del jlist[0:keylen]
                    #check exisitng length
                
                new_hyper_params = copy.deepcopy((parameters.model_parameters(**base_hyper_parameters)))
                self.hyper_inputs.append(new_hyper_params)
            
    
        if method == 'random':
            #for n in iterations - build hyperparameter cases
            for n in range(iterations):
                
                
                
                
#                new_hyper_params = copy.deepcopy(base_hyper_params)
                #for key in dictionary
                for key in self.hyper_solution_variables:
                    #if key is list... or even if it's not
                    a = self.randomise_hyper_input(self.hyper_solution_variables[key])
                    base_hyper_parameters[key] = a
                    
#                    setattr(new_hyper_params,key, copy.copy(a))

                new_hyper_params = parameters.model_parameters(**base_hyper_parameters)
                self.hyper_inputs.append(new_hyper_params)
                
                    
                        
            
                    
            
        #build hyper_results dict
        
        #what shape of results array needed (i.e. steps in hyper_solution_variables)
        list_of_hyper_vars = list(self.hyper_solution_variables.keys())
        hyper_result_shape = []
        
#        for var in list_of_hyper_vars:
#            hyper_result_shape.append(len(self.hyper_solution_variables[var]))
            
        for var in list_of_hyper_vars:
            if isinstance(self.hyper_solution_variables[var], list):
                for i in range(len(self.hyper_solution_variables[var])):
                    hyper_result_shape.append(self.hyper_solution_variables[var][i].__len__())
                
            else:
                hyper_result_shape.append(self.hyper_solution_variables[var].__len__())
        
        if 'B' in self.hyper_solution_properties:
            self.hyper_results['Bmax'] = np.zeros(np.append(hyper_result_shape,3))
            
            #self.hyper_results['Bfieldharmonics'] = np.zeros(np.append(hyper_result_shape,[2,10]))
            
            self.hyper_results['Beff'] = np.zeros(np.append(hyper_result_shape,3))
        
        if 'Integrals' in self.hyper_solution_properties:
            self.hyper_results['1st_Integral_Max_Harmonic'] = np.zeros(np.append(hyper_result_shape,11,2))
            self.hyper_results['2nd_Integral_Max_Harmonic'] = np.zeros(np.append(hyper_result_shape,11,2))
          
        if 'Forces' in self.hyper_solution_properties:
            self.hyper_results['Force_Per_Magnet_Type'] = np.zeros(np.append(hyper_result_shape,[self.base_hyper_parameters.magnet_rows*self.base_hyper_parameters.magnets_per_period, 3]))
            self.hyper_results['Force_Per_Row'] = np.zeros(np.append(hyper_result_shape,[self.base_hyper_parameters.magnet_rows,3]))
            self.hyper_results['Force_Per_Quadrant'] = np.zeros(np.append(hyper_result_shape,[4,3]))
            self.hyper_results['Force_Per_Beam'] = np.zeros(np.append(hyper_result_shape,[2,3]))
            
            
        if 'Torques' in self.hyper_solution_properties:
            self.hyper_results['Max_Single_Magnet_Torque'] = np.zeros(np.append(hyper_result_shape,3))
            self.hyper_results['Max_Single_Row_Torque'] = np.zeros(np.append(hyper_result_shape,3))
            self.hyper_results['Max_Single_Quadrant_Torque'] = np.zeros(np.append(hyper_result_shape,3))
            self.hyper_results['Max_Single_Beam_Torque'] = np.zeros(np.append(hyper_result_shape,3))
Пример #6
0
        #does this leave a lot of duplicated data? Yes
        
        hf.close()
        
    
if __name__ == '__main__':
    ### developing Case Solution ###
    
    test_hyper_params = parameters.model_parameters(Mova = 20, 
                                             periods = 1, 
                                             periodlength = 15,
                                             nominal_fmagnet_dimensions = [15.0,0.0,15.0], 
                                             #nominal_cmagnet_dimensions = [10.0,0.0,15.0],
                                             nominal_vcmagnet_dimensions = [7.5,0.0,12.5],
                                             nominal_hcmagnet_dimensions = [7.5,0.0,15.0], 
                                             compappleseparation = 7.5,
                                             apple_clampcut = 3.0,
                                             comp_magnet_chamfer = [3.0,0.0,3.0],
                                             magnets_per_period = 6,
                                             gap = 2, 
                                             rowshift = 0,
                                             shiftmode = 'circular',
                                             block_subdivision = [1,1,1]
                                             )
    a = id.compensatedAPPLEv2(test_hyper_params)
#    
    case1 = CaseSolution(a)
    case1.calculate_B_field()
    print(case1.bmax)
    print(1)
#    case1.calculate_force_per_beam()
#    case1.calculate_force_per_quadrant()
Пример #7
0
from idcomponents import parameters
from idanalysis import analysis_functions as af
from ipywidgets.widgets.interaction import fixed
from wradia.wrad_obj import wradObjCnt

if __name__ == '__main__':

    test_hyper_params = parameters.model_parameters(
        Mova=0,
        periods=8,
        periodlength=65,
        nominal_fmagnet_dimensions=[30.0, 0.0, 30.0],
        M=1.3,
        #nominal_cmagnet_dimensions = [10.0,0.0,15.0],
        nominal_vcmagnet_dimensions=[7.5, 0.0, 12.5],
        nominal_hcmagnet_dimensions=[7.5, 0.0, 15.0],
        compappleseparation=15,
        apple_clampcut=5.0,
        comp_magnet_chamfer=[3.0, 0.0, 3.0],
        magnets_per_period=4,
        gap=10,
        rowshift=0,
        shiftmode='circular',
        rowtorowgap=1.0,
    )
    id_10eV = id.compensatedAPPLEv2(test_hyper_params)
    #
    case1 = af.CaseSolution(id_10eV)
    case1.calculate_B_field()
    print(case1.bmax)
    rd.ObjDrwOpenGL(id_10eV.cont.radobj)
    plt.plot(case1.bfield[:, 0], case1.bfield[:, 1], case1.bfield[:, 3])
Пример #8
0
    def __init__(self,
                 model_parameters=parameters.model_parameters(),
                 fmagnet=ms.appleMagnet):

        rd.UtiDelAll()
        self.cont = wrd.wradObjCnt([])

        self.model_parameters = model_parameters
        mp = self.model_parameters

        if mp.shiftmode == 'circular':
            shiftmodesign = 1
        elif mp.shiftmode == 'linear':
            shiftmodesign = -1
        else:
            shiftmodesign = 0

        self.rownames = ['q1', 'q2', 'q3', 'q4']
        self.allarraytabs = np.array([
            ha.MagnetRow(
                self.rownames[0], ha.HalbachArray(model_parameters, fmagnet),
                ha.HalbachTermination_APPLE(model_parameters, fmagnet))
            for _ in range(4)
        ])

        for r in range(4):
            self.allarraytabs[r] = ha.MagnetRow(
                self.rownames[r],
                ha.HalbachArray(model_parameters, fmagnet),
                ha.HalbachTermination_APPLE(model_parameters, fmagnet),
                beam=int((r // 2)),
                quadrant=int(self.rownames[r][1]) - 1,
                row=r)

        ##### Functional Magnets #####

        ### Q1 ###

        self.allarraytabs[0].cont.wradTranslate([
            -(mp.nominal_fmagnet_dimensions[2] + mp.rowtorowgap) / 2.0, 0.0,
            -(mp.nominal_fmagnet_dimensions[0] + mp.gap) / 2.0
        ])
        self.allarraytabs[0].cont.wradFieldInvert()
        self.allarraytabs[0].cont.wradRotate([0, 0, 0], [0, 1, 0], np.pi)
        self.allarraytabs[0].cont.wradReflect([0, 0, 0], [1, 0, 0])

        ### Q2 ###
        self.allarraytabs[1].cont.wradTranslate([
            -(mp.nominal_fmagnet_dimensions[2] + mp.rowtorowgap) / 2.0,
            mp.rowshift, -(mp.nominal_fmagnet_dimensions[0] + mp.gap) / 2.0
        ])
        self.allarraytabs[1].cont.wradFieldInvert()
        self.allarraytabs[1].cont.wradRotate([0, 0, 0], [0, 1, 0], np.pi)

        ### Q3 ###
        self.allarraytabs[2].cont.wradTranslate([
            -(mp.nominal_fmagnet_dimensions[2] + mp.rowtorowgap) / 2.0,
            mp.rowshift * shiftmodesign,
            -(mp.nominal_fmagnet_dimensions[0] + mp.gap) / 2.0
        ])

        ### Q4 ###
        self.allarraytabs[3].cont.wradTranslate([
            -(mp.nominal_fmagnet_dimensions[2] + mp.rowtorowgap) / 2.0, 0.0,
            -(mp.nominal_fmagnet_dimensions[0] + mp.gap) / 2.0
        ])
        self.allarraytabs[3].cont.wradReflect([0, 0, 0], [1, 0, 0])

        for row in range(len(self.allarraytabs)):
            self.cont.wradObjAddToCnt([self.allarraytabs[row].cont])
Пример #9
0
    def __init__(self,
                 model_parameters=parameters.model_parameters(),
                 fmagnet=ms.appleMagnet,
                 cmagnet=ms.compMagnet,
                 Hcmagnet=ms.HcompMagnet,
                 Vcmagnet=ms.VcompMagnet):
        rd.UtiDelAll()
        self.cont = wrd.wradObjCnt([])

        self.model_parameters = model_parameters
        mp = self.model_parameters

        if mp.shiftmode == 'circular':
            shiftmodesign = 1
        elif mp.shiftmode == 'linear':
            shiftmodesign = -1
        else:
            shiftmodesign = 0

        self.rownames = [
            'q1', 'q2', 'q3', 'q4', 'c1v', 'c1h', 'c2v', 'c2h', 'c3v', 'c3h',
            'c4v', 'c4h'
        ]
        self.allarraytabs = np.array([
            ha.MagnetRow(
                self.rownames[0], ha.HalbachArray(model_parameters, fmagnet),
                ha.HalbachTermination_APPLE(model_parameters, fmagnet))
            for _ in range(12)
        ])

        for r in range(4):
            self.allarraytabs[r] = ha.MagnetRow(
                self.rownames[r],
                ha.HalbachArray(model_parameters, fmagnet),
                ha.HalbachTermination_APPLE(model_parameters, fmagnet),
                beam=int((r // 2)),
                quadrant=int(self.rownames[r][1]) - 1,
                row=r)
        for r in range(4, 12, 2):
            if r < 8:
                be = 0

            else:
                be = 1

            self.allarraytabs[r] = ha.MagnetRow(
                self.rownames[r],
                ha.HalbachArray(model_parameters, Vcmagnet),
                ha.HalbachTermination_APPLE(model_parameters, Vcmagnet),
                beam=be,
                quadrant=int(self.rownames[r][1]) - 1,
                row=r)
        for r in range(5, 12, 2):
            if r < 8:
                be = 0

            else:
                be = 1

            self.allarraytabs[r] = ha.MagnetRow(
                self.rownames[r],
                ha.HalbachArray(model_parameters, Hcmagnet),
                ha.HalbachTermination_APPLE(model_parameters, Hcmagnet),
                beam=be,
                quadrant=int(self.rownames[r][1]) - 1,
                row=r)

        ##### Functional Magnets #####

        ### Q1 ###

        self.allarraytabs[0].cont.wradTranslate([
            -(mp.nominal_fmagnet_dimensions[2] + mp.rowtorowgap) / 2.0, 0.0,
            -(mp.nominal_fmagnet_dimensions[0] + mp.gap) / 2.0
        ])
        self.allarraytabs[0].cont.wradFieldInvert()
        self.allarraytabs[0].cont.wradRotate([0, 0, 0], [0, 1, 0], np.pi)
        self.allarraytabs[0].cont.wradReflect([0, 0, 0], [1, 0, 0])

        ### Q2 ###
        self.allarraytabs[1].cont.wradTranslate([
            -(mp.nominal_fmagnet_dimensions[2] + mp.rowtorowgap) / 2.0,
            mp.rowshift, -(mp.nominal_fmagnet_dimensions[0] + mp.gap) / 2.0
        ])
        self.allarraytabs[1].cont.wradFieldInvert()
        self.allarraytabs[1].cont.wradRotate([0, 0, 0], [0, 1, 0], np.pi)

        ### Q3 ###
        self.allarraytabs[2].cont.wradTranslate([
            -(mp.nominal_fmagnet_dimensions[2] + mp.rowtorowgap) / 2.0,
            mp.rowshift * shiftmodesign,
            -(mp.nominal_fmagnet_dimensions[0] + mp.gap) / 2.0
        ])

        ### Q4 ###
        self.allarraytabs[3].cont.wradTranslate([
            -(mp.nominal_fmagnet_dimensions[2] + mp.rowtorowgap) / 2.0, 0.0,
            -(mp.nominal_fmagnet_dimensions[0] + mp.gap) / 2.0
        ])
        self.allarraytabs[3].cont.wradReflect([0, 0, 0], [1, 0, 0])

        ##### Compensation Magnets #####

        ### C1h ###
        self.allarraytabs[5].cont.wradTranslate([
            -(mp.nominal_hcmagnet_dimensions[2] + mp.rowtorowgap + 2 *
              (mp.nominal_fmagnet_dimensions[0] + mp.compappleseparation)) /
            2.0, 0.0, -(mp.nominal_hcmagnet_dimensions[0] + mp.gap) / 2.0
        ])
        self.allarraytabs[5].cont.wradReflect([0, 0, 0], [0, 0, 1])

        ### C2h ###

        self.allarraytabs[7].cont.wradTranslate([
            -(mp.nominal_hcmagnet_dimensions[2] + mp.rowtorowgap + 2 *
              (mp.nominal_fmagnet_dimensions[0] + mp.compappleseparation)) /
            2.0, mp.rowshift,
            -(mp.nominal_hcmagnet_dimensions[0] + mp.gap) / 2.0
        ])
        self.allarraytabs[7].cont.wradFieldInvert()
        self.allarraytabs[7].cont.wradRotate([0, 0, 0], [0, 1, 0], np.pi)

        ### C3h ###
        self.allarraytabs[9].cont.wradTranslate([
            -(mp.nominal_hcmagnet_dimensions[2] + mp.rowtorowgap + 2 *
              (mp.nominal_fmagnet_dimensions[0] + mp.compappleseparation)) /
            2.0, mp.rowshift * shiftmodesign,
            -(mp.nominal_hcmagnet_dimensions[0] + mp.gap) / 2.0
        ])

        ### C4h ###
        self.allarraytabs[11].cont.wradTranslate([
            -(mp.nominal_hcmagnet_dimensions[2] + mp.rowtorowgap + 2 *
              (mp.nominal_fmagnet_dimensions[0] + mp.compappleseparation)) /
            2.0, 0.0, -(mp.nominal_hcmagnet_dimensions[0] + mp.gap) / 2.0
        ])
        self.allarraytabs[11].cont.wradFieldInvert()
        self.allarraytabs[11].cont.wradReflect([0, 0, 0], [1, 0, 0])

        ### C1v ###
        self.allarraytabs[4].cont.wradFieldRotate([0, 0, 0], [0, 1, 0],
                                                  np.pi / 2)
        self.allarraytabs[4].cont.wradFieldInvert()
        self.allarraytabs[4].cont.wradRotate([0, 0, 0], [0, 1, 0], np.pi / 2)
        self.allarraytabs[4].cont.wradReflect([0, 0, 0], [0, 0, 1])
        self.allarraytabs[4].cont.wradTranslate([
            -(mp.nominal_vcmagnet_dimensions[0] + mp.rowtorowgap) / 2.0, 0.0,
            (mp.nominal_vcmagnet_dimensions[2] + mp.gap + 2 *
             (mp.nominal_fmagnet_dimensions[2] + mp.compappleseparation)) / 2.0
        ])
        ###feildrotatedebugtest###
        #        axisq1 = [[10,-20,10],[10,20,10]]
        #        rd.Solve(self.allarraytabs[0].cont.objectlist[0].objectlist[0].radobj,0.001,1000)
        #        q1m = np.array(rd.FldLst(self.allarraytabs[0].cont.objectlist[0].objectlist[0].radobj,'mxmymz',axisq1[0],axisq1[1],101,'arg',-20))
        #        plt.plot(q1m[:,0],q1m[:,3])

        #        axisc1v = [[4,-20,30],[4,20,30]]
        #        rd.Solve(self.allarraytabs[4].cont.objectlist[0].objectlist[0].radobj,0.001,1000)
        #        c1vm = np.array(rd.FldLst(self.allarraytabs[4].cont.objectlist[0].objectlist[0].radobj,'mxmymz',axisc1v[0],axisc1v[1],101,'arg',-20))
        #        plt.plot(c1vm[:,0],c1vm[:,3])

        #        print(1)

        ### C2v ###

        self.allarraytabs[6].cont.wradFieldRotate([0, 0, 0], [0, 1, 0],
                                                  np.pi / 2)
        #self.allarraytabs[4].cont.wradFieldInvert()
        self.allarraytabs[6].cont.wradRotate([0, 0, 0], [0, 1, 0], -np.pi / 2)
        self.allarraytabs[6].cont.wradTranslate([
            (mp.nominal_vcmagnet_dimensions[0] + mp.rowtorowgap) / 2.0,
            mp.rowshift,
            (mp.nominal_vcmagnet_dimensions[2] + mp.gap + 2 *
             (mp.nominal_fmagnet_dimensions[2] + mp.compappleseparation)) / 2.0
        ])

        ### C3v ###
        self.allarraytabs[8].cont.wradFieldRotate([0, 0, 0], [0, 1, 0],
                                                  np.pi / 2)
        #self.allarraytabs[10].cont.wradFieldInvert()
        self.allarraytabs[8].cont.wradRotate([0, 0, 0], [0, 1, 0], np.pi / 2)
        self.allarraytabs[8].cont.wradTranslate([
            -(mp.nominal_vcmagnet_dimensions[0] + mp.rowtorowgap) / 2.0,
            mp.rowshift * shiftmodesign,
            -(mp.nominal_vcmagnet_dimensions[2] + mp.gap + 2 *
              (mp.nominal_fmagnet_dimensions[2] + mp.compappleseparation)) /
            2.0
        ])

        ### C4v ###
        self.allarraytabs[10].cont.wradFieldRotate([0, 0, 0], [0, 1, 0],
                                                   np.pi / 2)
        self.allarraytabs[10].cont.wradFieldInvert()
        self.allarraytabs[10].cont.wradRotate([0, 0, 0], [0, 1, 0], -np.pi / 2)
        self.allarraytabs[10].cont.wradTranslate([
            (mp.nominal_vcmagnet_dimensions[0] + mp.rowtorowgap) / 2.0, 0.0,
            (mp.nominal_vcmagnet_dimensions[2] + mp.gap + 2 *
             (mp.nominal_fmagnet_dimensions[2] + mp.compappleseparation)) / 2.0
        ])
        self.allarraytabs[10].cont.wradReflect([0, 0, 0], [0, 0, 1])

        for row in range(len(self.allarraytabs)):
            self.cont.wradObjAddToCnt([self.allarraytabs[row].cont])

        print('my compensated APPLE calculated at a gap of {}mm'.format(
            mp.gap))
        '''
Пример #10
0
    def __init__(self,
                 model_hyper_parameters=parameters.model_parameters(),
                 fmagnet=ms.appleMagnet,
                 cmagnet=ms.compMagnet):

        self.cont = wrd.wradObjCnt([])

        mp = model_hyper_parameters

        if mp.shiftmode == 'circular':
            shiftmodesign = 1
        elif mp.shiftmode == 'linear':
            shiftmodesign = -1
        else:
            shiftmodesign = 0

        self.allarrays = {
            'q1':
            ha.MagnetRow(
                ha.HalbachArray(model_hyper_parameters, fmagnet),
                ha.HalbachTermination_APPLE(model_hyper_parameters, fmagnet)),
            'q2':
            ha.HalbachArray(model_hyper_parameters, fmagnet),
            'q3':
            ha.HalbachArray(model_hyper_parameters, fmagnet),
            'q4':
            ha.HalbachArray(model_hyper_parameters, fmagnet),
            'c1v':
            ha.HalbachArray(model_hyper_parameters, cmagnet),
            'c1h':
            ha.HalbachArray(model_hyper_parameters, cmagnet),
            'c2v':
            ha.HalbachArray(model_hyper_parameters, cmagnet),
            'c2h':
            ha.HalbachArray(model_hyper_parameters, cmagnet),
            'c3v':
            ha.HalbachArray(model_hyper_parameters, cmagnet),
            'c3h':
            ha.HalbachArray(model_hyper_parameters, cmagnet),
            'c4v':
            ha.HalbachArray(model_hyper_parameters, cmagnet),
            'c4h':
            ha.HalbachArray(model_hyper_parameters, cmagnet),
        }

        ##### Functional Magnets #####

        ### Q1 ###
        self.allarrays['q1'].cont.wradTranslate([
            -(mp.nominal_fmagnet_dimensions[2] + mp.rowtorowgap) / 2.0,
            mp.rowshift, -(mp.nominal_fmagnet_dimensions[0] + mp.gap) / 2.0
        ])
        self.allarrays['q1'].cont.wradFieldInvert()
        self.allarrays['q1'].cont.wradRotate([0, 0, 0], [0, 1, 0], np.pi)

        ### Q2 ###
        self.allarrays['q2'].cont.wradTranslate([
            -(mp.nominal_fmagnet_dimensions[2] + mp.rowtorowgap) / 2.0, 0.0,
            -(mp.nominal_fmagnet_dimensions[0] + mp.gap) / 2.0
        ])
        self.allarrays['q2'].cont.wradFieldInvert()
        self.allarrays['q2'].cont.wradRotate([0, 0, 0], [0, 1, 0], np.pi)
        self.allarrays['q2'].cont.wradReflect([0, 0, 0], [1, 0, 0])

        ### Q3 ###
        self.allarrays['q3'].cont.wradTranslate([
            -(mp.nominal_fmagnet_dimensions[2] + mp.rowtorowgap) / 2.0, 0.0,
            -(mp.nominal_fmagnet_dimensions[0] + mp.gap) / 2.0
        ])
        self.allarrays['q3'].cont.wradReflect([0, 0, 0], [1, 0, 0])

        ### Q4 ###
        self.allarrays['q4'].cont.wradTranslate([
            -(mp.nominal_fmagnet_dimensions[2] + mp.rowtorowgap) / 2.0,
            mp.rowshift * shiftmodesign,
            -(mp.nominal_fmagnet_dimensions[0] + mp.gap) / 2.0
        ])

        ##### Compensation Magnets #####

        ### C1h ###
        self.allarrays['c1h'].cont.wradTranslate([
            -(mp.nominal_cmagnet_dimensions[2] + mp.rowtorowgap + 2 *
              (mp.nominal_fmagnet_dimensions[0] + mp.compappleseparation)) /
            2.0, mp.rowshift,
            -(mp.nominal_cmagnet_dimensions[0] + mp.gap) / 2.0
        ])
        self.allarrays['c1h'].cont.wradFieldInvert()
        self.allarrays['c1h'].cont.wradRotate([0, 0, 0], [0, 1, 0], np.pi)

        ### C2h ###
        self.allarrays['c2h'].cont.wradTranslate([
            (mp.nominal_cmagnet_dimensions[2] + mp.rowtorowgap + 2 *
             (mp.nominal_fmagnet_dimensions[0] + mp.compappleseparation)) /
            2.0, 0.0, -(mp.nominal_cmagnet_dimensions[0] + mp.gap) / 2.0
        ])
        self.allarrays['c2h'].cont.wradRotate([0, 0, 0], [0, 1, 0], np.pi)

        ### C3h ###
        self.allarrays['c3h'].cont.wradTranslate([
            -(mp.nominal_cmagnet_dimensions[2] + mp.rowtorowgap + 2 *
              (mp.nominal_fmagnet_dimensions[0] + mp.compappleseparation)) /
            2.0, 0.0, -(mp.nominal_cmagnet_dimensions[0] + mp.gap) / 2.0
        ])
        self.allarrays['c3h'].cont.wradFieldInvert()
        self.allarrays['c3h'].cont.wradReflect([0, 0, 0], [1, 0, 0])

        ### C4h ###
        self.allarrays['c4h'].cont.wradTranslate([
            (mp.nominal_cmagnet_dimensions[2] + mp.rowtorowgap + 2 *
             (mp.nominal_fmagnet_dimensions[0] + mp.compappleseparation)) /
            2.0, mp.rowshift * shiftmodesign,
            -(mp.nominal_cmagnet_dimensions[0] + mp.gap) / 2.0
        ])
        self.allarrays['c4h'].cont.wradReflect([0, 0, 0], [1, 0, 0])

        ### C1v ###
        self.allarrays['c1v'].cont.wradRotate([0, 0, 0], [0, 1, 0], -np.pi / 2)
        self.allarrays['c1v'].cont.wradFieldRotate([0, 0, 0], [0, 1, 0],
                                                   -np.pi / 2)
        self.allarrays['c1v'].cont.wradTranslate([
            (mp.nominal_cmagnet_dimensions[2] / 2.0 + mp.rowtorowgap) / 2.0,
            mp.rowshift,
            (mp.nominal_cmagnet_dimensions[2] + mp.gap + 2 *
             (mp.nominal_fmagnet_dimensions[2] + mp.compappleseparation)) / 2.0
        ])

        ### C2v ###
        self.allarrays['c2v'].cont.wradRotate([0, 0, 0], [0, 1, 0], -np.pi / 2)
        self.allarrays['c2v'].cont.wradFieldRotate([0, 0, 0], [0, 1, 0],
                                                   -np.pi / 2)
        self.allarrays['c2v'].cont.wradFieldInvert()
        self.allarrays['c2v'].cont.wradReflect([0, 0, 0], [1, 0, 0])
        self.allarrays['c2v'].cont.wradTranslate([
            -(mp.nominal_cmagnet_dimensions[2] / 2.0 + mp.rowtorowgap) / 2.0,
            0.0,
            (mp.nominal_cmagnet_dimensions[2] + mp.gap + 2 *
             (mp.nominal_fmagnet_dimensions[2] + mp.compappleseparation)) / 2.0
        ])

        ### C3v ###
        self.allarrays['c3v'].cont.wradRotate([0, 0, 0], [0, 1, 0], -np.pi / 2)
        self.allarrays['c3v'].cont.wradFieldRotate([0, 0, 0], [0, 1, 0],
                                                   np.pi / 2)
        self.allarrays['c3v'].cont.wradTranslate([
            (mp.nominal_cmagnet_dimensions[2] / 2.0 + mp.rowtorowgap) / 2.0,
            0.0,
            (mp.nominal_cmagnet_dimensions[2] + mp.gap + 2 *
             (mp.nominal_fmagnet_dimensions[2] + mp.compappleseparation)) / 2.0
        ])
        self.allarrays['c3v'].cont.wradReflect([0, 0, 0], [0, 0, 1])

        ### C4v ###
        self.allarrays['c4v'].cont.wradRotate([0, 0, 0], [0, 1, 0], np.pi / 2)
        self.allarrays['c4v'].cont.wradFieldRotate([0, 0, 0], [0, 1, 0],
                                                   -np.pi / 2)
        self.allarrays['c4v'].cont.wradTranslate([
            -(mp.nominal_cmagnet_dimensions[2] / 2.0 + mp.rowtorowgap) / 2.0,
            mp.rowshift * shiftmodesign,
            -(mp.nominal_cmagnet_dimensions[2] + mp.gap + 2 *
              (mp.nominal_fmagnet_dimensions[2] + mp.compappleseparation)) /
            2.0
        ])

        for key in self.allarrays:
            self.cont.wradObjAddToCnt([self.allarrays[key].cont])

        print('my compensated APPLE calculated at a gap of {}mm'.format(
            mp.gap))
Пример #11
0
        
        self.cont.wradObjAddToCnt([mag1.cont, mag2.cont, mag3.cont, mag4.cont, mag5.cont, mag6.cont])
            
    
class MagnetRow():
    def __init__(self,name = 'default_name', Body = HalbachArray(), Termination = HalbachTermination_APPLE(),beam = 0, quadrant = 0, row = 0):
        self.cont = wrd.wradObjCnt([])
        self.cont.wradObjAddToCnt([Body.cont, Termination.cont])
        self.beam = beam
        self.quadrant = quadrant
        self.row = row
        self.name = name

    
if __name__ == '__main__':
    mymodelparams = parameters.model_parameters(magnets_per_period = 6, periods = 1)
    
    a = HalbachArray(mymodelparams)
    b = HalbachTermination_APPLE(mymodelparams)
    
    c = MagnetRow(a,b)
    
    a.cont.wradSolve(0.001, 1000)
    
    print('{}{}'.format(a.cont.radobj,b))
#    rd.ObjDrwOpenGL(a.cont.radobj)
    rd.ObjDrwOpenGL(b.cont.radobj)
    rd.ObjDrwOpenGL(c.cont.radobj)
    
    
    
Пример #12
0

if __name__ == '__main__':
    #    shared parameters
    min_gap = 13

    #parameter_Set Horizontal_polarisation
    UE80_horz = parameters.model_parameters(
        Mova=0,
        periods=5,
        periodlength=80,
        nominal_fmagnet_dimensions=[30.0, 0.0, 30.0],
        #square_magnet = True,
        nominal_cmagnet_dimensions=[10.0, 0.0, 15.0],
        #nominal_vcmagnet_dimensions = [7.5,0.0,12.5],
        #nominal_hcmagnet_dimensions = [7.5,0.0,15.0],
        compappleseparation=75,
        apple_clampcut=5.0,
        comp_magnet_chamfer=[3.0, 0.0, 3.0],
        magnets_per_period=4,
        gap=min_gap,
        rowshift=0,
        shiftmode='circular',
        block_subdivision=[2, 3, 1],
        M=1.3)

    UE80_vert = parameters.model_parameters(
        Mova=0,
        periods=5,
        periodlength=80,
        nominal_fmagnet_dimensions=[30.0, 0.0, 30.0],
        nominal_cmagnet_dimensions=[10.0, 0.0, 15.0],
Пример #13
0
    def __init__(self,
                 model_parameters=parameters.model_parameters(),
                 magnet_centre=[0, 0, 0],
                 this_magnet_material='default',
                 magnet_thickness='default'):
        '''
        Constructor
        '''

        mp = model_parameters
        self.magnet_centre = magnet_centre
        if this_magnet_material == 'default':
            this_magnet_material = mp.magnet_material

        if magnet_thickness == 'default':
            magnet_thickness = mp.nominal_vcmagnet_dimensions[1]
        '''orientation order z,y,x'''
        self.cont = wrd.wradObjCnt([])

        p1 = wrd.wradObjThckPgn(
            magnet_centre[1], magnet_thickness,
            [[
                magnet_centre[0] -
                model_parameters.nominal_vcmagnet_dimensions[0] / 2.0,
                magnet_centre[2] -
                model_parameters.nominal_vcmagnet_dimensions[2] / 2.0
            ],
             [
                 magnet_centre[0] -
                 model_parameters.nominal_vcmagnet_dimensions[0] / 2.0,
                 magnet_centre[2] +
                 model_parameters.nominal_vcmagnet_dimensions[2] / 2.0
             ],
             [
                 magnet_centre[0] +
                 model_parameters.nominal_vcmagnet_dimensions[0] / 2.0 -
                 model_parameters.comp_magnet_chamfer[0], magnet_centre[2] +
                 model_parameters.nominal_vcmagnet_dimensions[2] / 2.0
             ],
             [
                 magnet_centre[0] +
                 model_parameters.nominal_vcmagnet_dimensions[0] / 2.0 -
                 model_parameters.comp_magnet_chamfer[0], magnet_centre[2] -
                 model_parameters.nominal_vcmagnet_dimensions[2] / 2.0
             ]], model_parameters.direction)
        p2 = wrd.wradObjThckPgn(
            magnet_centre[1], magnet_thickness,
            [[
                magnet_centre[0] +
                model_parameters.nominal_vcmagnet_dimensions[0] / 2,
                magnet_centre[2] -
                model_parameters.nominal_vcmagnet_dimensions[2] / 2 +
                model_parameters.comp_magnet_chamfer[2] / 2.0
            ],
             [
                 magnet_centre[0] +
                 model_parameters.nominal_vcmagnet_dimensions[0] / 2,
                 magnet_centre[2] +
                 model_parameters.nominal_vcmagnet_dimensions[2] / 2.0 -
                 model_parameters.comp_magnet_chamfer[2] / 2.0
             ],
             [
                 magnet_centre[0] +
                 model_parameters.nominal_vcmagnet_dimensions[0] / 2.0 -
                 model_parameters.comp_magnet_chamfer[0], magnet_centre[2] +
                 model_parameters.nominal_vcmagnet_dimensions[2] / 2 -
                 model_parameters.comp_magnet_chamfer[2] / 2.0
             ],
             [
                 magnet_centre[0] +
                 model_parameters.nominal_vcmagnet_dimensions[0] / 2.0 -
                 model_parameters.comp_magnet_chamfer[0], magnet_centre[2] -
                 model_parameters.nominal_vcmagnet_dimensions[2] / 2 +
                 model_parameters.comp_magnet_chamfer[2] / 2.0
             ]], model_parameters.direction)

        self.cont.wradObjAddToCnt([p1, p2])
        self.cont.wradMatAppl(this_magnet_material)
        self.cont.wradObjDivMag(mp.block_subdivision)
        self.cont.wradObjDrwAtr(colour='default', linethickness=2)