pk_2 = pos_2[2:4] pk_3 = pos_3[2:4] pk_4 = pos_4[2:4] pos_1 = pos_1[0:2] pos_2 = pos_2[0:2] pos_3 = pos_3[0:2] pos_4 = pos_4[0:2] #get quadratic distance from centroids print( f"Centroids:\n({pos_1[0]:.2f}, {pos_1[1]:.2f})\n({pos_2[0]:.2f}, {pos_2[1]:.2f})\n({pos_3[0]:.2f}, {pos_3[1]:.2f})\n({pos_4[0]:.2f}, {pos_4[1]:.2f})" ) #print("Peaks: ", pk_1, pk_2, pk_3, pk_4) distance = Dist(pos_1, pos_2, pos_3, pos_4, separateXY=True)[1] #return quads to original values SetMagnet(quad_pair[0], q0_init) SetMagnet(quad_pair[1], q1_init) sleep(5) for i, m in enumerate(magnet_list): magnet_values[i] = caget(corr_set_pvs[m]) print("Correctors set.") else: if count == 0: magnet_values = [random.uniform(-10, 10) for m in magnet_list] #magnet_values = [random.uniform(-15,15) for m in magnet_list]
def scanDipoles(b_small, b_big): #set number of steps (from previous experience scanning although might need adjustments) bs_stepsize = small_step bb_stepsize = big_step #initial nominal quad values q0_init, q1_init = GetMagnet(quad_pair[0]), GetMagnet(quad_pair[1]) #q2_init = GetMagnet("q11") for i in range(total_steps): print(f"Step {i+1} out of {total_steps} large steps.") #get initial current of dipoles bs_init = GetMagnet(b_small) bb_init = GetMagnet(b_big) for j in range(0, int(bb_stepsize / bs_stepsize) + extra_small_step ): ## ADDED TWO MORE STEPS FOR THE FIELDS TO OVERLAP #changing quads and taking pictures at 4 tunes #take picture with all at init values all_nom_im = SaveIm('allNom', viewer) #take picture with q11 nom, q12 7/6 # SetMagnet(quad_pair[0], q0_init) SetMagnet(quad_pair[0], 40) SetMagnet(quad_pair[1], q1_init) #SetMagnet("q11", q2_init) pos_1 = GetBeamPos(all_nom_im, viewer) sleep( 5 ) #might need to increase this if the jumps in current are big all_zero_im = SaveIm('Q11_40', viewer) #take picture with q11 8/10 and q12 nom SetMagnet(quad_pair[0], q0_init) # SetMagnet(quad_pair[1], q1_init-17) SetMagnet(quad_pair[1], 20) #SetMagnet("q11", q2_init) pos_2 = GetBeamPos(all_zero_im, viewer) sleep(5) q0_half_im = SaveIm('Q13_20', viewer) #take picture with q11 *3/4, and q12 *11/12 SetMagnet(quad_pair[0], 52) SetMagnet(quad_pair[1], 35) #SetMagnet("q11", 40) pos_3 = GetBeamPos(q0_half_im, viewer) sleep(5) q01_half_im = SaveIm('Q11_52_Q13_35', viewer) #return quads to original values SetMagnet(quad_pair[0], q0_init) SetMagnet(quad_pair[1], q1_init) #SetMagnet("q11", q2_init) pos_4 = GetBeamPos(q01_half_im, viewer) #peak/intensity #pk_1 = pos_1[2:] #pk_2 = pos_2[2:] #pk_3 = pos_3[2:] #pk_4 = pos_4[2:] #centroid positions pos_1 = pos_1[0:2] pos_2 = pos_2[0:2] pos_3 = pos_3[0:2] pos_4 = pos_4[0:2] #get quadratic distance from centroids print( f"Centroids:\n({pos_1[0]:.2f}, {pos_1[1]:.2f})\n({pos_2[0]:.2f}, {pos_2[1]:.2f})\n({pos_3[0]:.2f}, {pos_3[1]:.2f})\n({pos_4[0]:.2f}, {pos_4[1]:.2f})" ) distance = Dist(pos_1, pos_2, pos_3, pos_4, True)[0] print(f"Dist= {distance:.5f}") bs_hall = GetHall(b_small) bb_hall = GetHall(b_big) bs_i = GetMagnet(b_small) bb_i = GetMagnet(b_big) #save i, hall values and distance to file f = open(f"{b_small}_{b_big}_Distance_{timestring}.txt", "a+") f.write( f'{bs_i:.3f}\t{bb_i:.3f}\t{bs_hall:.7f}\t{bb_hall:.7f}\t{distance:.4f}\t{pos_1[0]:.4f}\t{all_nom_im}\n' ) f.close() #ramps down this magnet in small steps multiple of the large step SetMagnet(b_small, bs_init - bs_stepsize * (j + 1)) #one magnet goes down 0.06 A, the other 0.02 A x 3 #SetMagnet( b_big, bb_init - bb_stepsize) ##################### #if (abs(bs_hall - bb_hall) > dHall): #if they are different, match again matchHall() #else: bs_hall = GetHall(b_small) bb_hall = GetHall(b_big) print( f"Fields: {bs_hall:.6f}, {bb_hall:.6f}, dHall: {((bs_hall - bb_hall)/bs_hall*100):.5f}%" )
SetQuads(q1_init, q2_init/2, 0, 0) sleep(7) q2_half_im= SaveIm('q2half') #return quads to original values SetQuads(q1_init, q2_init, q3_init, q4_init) #get centroids from pictures pos_1= GetBeamPos(all_nom_im) pos_2= GetBeamPos(all_zero_im) pos_3= GetBeamPos(q1_half_im) pos_4= GetBeamPos(q2_half_im) #get quadratic distance from centroids print(pos_1, pos_2, pos_3, pos_4) distance= Dist(pos_1, pos_2, pos_3, pos_4) print("Dist= ", distance) #save corrector values and distance to file f= open("correctorValues_Distance.txt", "a+") c1, c2, c3, c4= GetCorr() f.write(f'{c1} {c2} {c3} {c4} {distance}\n') f.close() #run GP script eps_input= input("Enter the desired acquisition function parameter:") GaussProc(float(eps_input)) #continue or not cont= input("Continue? yes/no ")
if peak_found: pos_1 = pos_1[0:2] pos_2 = pos_2[0:2] pos_3 = pos_3[0:2] pos_4 = pos_4[0:2] #get quadratic distance from centroids print( f"Centroids:\n({pos_1[0]:.2f}, {pos_1[1]:.2f})\n({pos_2[0]:.2f}, {pos_2[1]:.2f})\n({pos_3[0]:.2f}, {pos_3[1]:.2f})\n({pos_4[0]:.2f}, {pos_4[1]:.2f})" ) #print("Peaks: ", pk_1, pk_2, pk_3, pk_4) # print("distances, x, y") # print(Dist(pos_1, pos_2, pos_3, pos_4, True)) # print("distances, combined") # print(Dist(pos_1, pos_2, pos_3, pos_4)) distance = Dist(pos_1, pos_2, pos_3, pos_4, separateXY=False) for i, m in enumerate(magnet_list): magnet_values[i] = caget(corr_set_pvs[m]) print("Correctors set.") else: if count == 0: #magnet_values = [random.uniform(-10,10) for m in magnet_list] magnet_values = [random.uniform(-15, 15) for m in magnet_list] #magnet_values = [7.73 for m in magnet_list] distance = gp.returnObservations(magnet_values) print(f"Dist= {distance:.5f}") #save corrector values and distance to file f = open(f"GP_results/correctorValues_Distance_{timestamp}.txt", "a+")
def scanDipoles(b_small, b_big): #set number of steps (from previous experience scanning although might need adjustments) bs_stepsize = small_step bb_stepsize = big_step #initial nominal quad values q0_init, q1_init = GetMagnet(quad_pair[0]), GetMagnet(quad_pair[1]) for i in range(total_steps): print(f"Step {i+1} out of {total_steps} large steps.") #get initial current of dipoles bs_init = GetMagnet(b_small) bb_init = GetMagnet(b_big) #one magnet goes down 0.06 A, the other 0.02 A x 3 SetMagnet( b_big, bb_init - bb_stepsize) for j in range(0, int(bb_stepsize/bs_stepsize)): #ramps down this magnet in small steps multiple of the large step SetMagnet( b_small, bs_init - bs_stepsize*(j+1)) sleep(5) #changing quads and taking pictures at 4 tunes #take picture with all at init values all_nom_im= SaveIm('allNom', viewer) #take picture with all at zero SetMagnet(quad_pair[0], 0) SetMagnet(quad_pair[1], 0) pos_1= GetBeamPos(all_nom_im, viewer) sleep(5) #might need to increase this if the jumps in current are big all_zero_im= SaveIm('allZero', viewer) #take picture with first quad at half SetMagnet(quad_pair[0], q0_init/2) pos_2= GetBeamPos(all_zero_im, viewer) sleep(5) q0_half_im= SaveIm('q0half', viewer) #take picture with second quad at half SetMagnet(quad_pair[1], q1_init/2) pos_3= GetBeamPos(q0_half_im, viewer) sleep(5) q01_half_im= SaveIm('q01half', viewer) #return quads to original values SetMagnet(quad_pair[0], q0_init) SetMagnet(quad_pair[1], q1_init) pos_4= GetBeamPos(q01_half_im, viewer) #peak/intensity #pk_1 = pos_1[2:] #pk_2 = pos_2[2:] #pk_3 = pos_3[2:] #pk_4 = pos_4[2:] #centroid positions pos_1 = pos_1[0:2] pos_2 = pos_2[0:2] pos_3 = pos_3[0:2] pos_4 = pos_4[0:2] #get quadratic distance from centroids print(f"Centroids:\n({pos_1[0]:.2f}, {pos_1[1]:.2f})\n({pos_2[0]:.2f}, {pos_2[1]:.2f})\n({pos_3[0]:.2f}, {pos_3[1]:.2f})\n({pos_4[0]:.2f}, {pos_4[1]:.2f})") distance= Dist(pos_1, pos_2, pos_3, pos_4) print(f"Dist= {distance:.5f}") bs_hall = GetHall(b_small) bb_hall = GetHall(b_big) bs_i = GetMagnet(b_small) bb_i = GetMagnet(b_big) #save i, hall values and distance to file f= open(f"{b_small}_{b_big}_Distance_{timestring}.txt", "a+") f.write(f'{bs_i:.3f}\t{bb_i:.3f}\t{bs_hall:.7f}\t{bb_hall:.7f}\t{distance:.4f}\t{pos_1[0]:.4f}\t{all_nom_im}\n') f.close() ##################### if (abs(bs_hall - bb_hall) > dHall): #if they are different, match again matchHall() else: print(f"Fields: {bs_hall:.6f}, {bb_hall:.6f}, dHall: {((bs_hall - bb_hall)/bs_hall*100):.5f}%")
def scanDipoles(b_small, b_big): #set number of steps (from previous experience scanning although might need adjustments) bs_stepsize = small_step bb_stepsize = big_step #initial nominal quad values q0_init, q1_init = GetMagnet(quad_pair[0]), GetMagnet(quad_pair[1]) for i in range(total_steps): print(f"Step {i+1} out of {total_steps} large steps.") #get initial current of dipoles bs_init = GetMagnet(b_small) bb_init = GetMagnet(b_big) #SetMagnet( b_big, bb_init - bb_stepsize) SetMagnet(b_small, bs_init - bs_stepsize) #changing quads and taking pictures at 4 tunes #take picture with all at init values all_nom_im = SaveIm('allNom', viewer) #take picture with q14 nom, q15 *8/11 SetMagnet(quad_pair[0], q0_init) SetMagnet(quad_pair[1], -15.000) pos_1 = GetBeamPos(all_nom_im, viewer) sleep(5) #might need to increase this if the jumps in current are big all_zero_im = SaveIm('Q15_minus15', viewer) #take picture with q14 *1/2 and q15 nom SetMagnet(quad_pair[0], 15.000) SetMagnet(quad_pair[1], q1_init) pos_2 = GetBeamPos(all_zero_im, viewer) sleep(5) q0_half_im = SaveIm('Q14_15', viewer) #take picture with q14 zero, and q15 zero SetMagnet(quad_pair[0], 10.000) SetMagnet(quad_pair[1], -10.000) pos_3 = GetBeamPos(q0_half_im, viewer) sleep(5) q01_half_im = SaveIm('bothTen', viewer) #return quads to original values SetMagnet(quad_pair[0], q0_init) SetMagnet(quad_pair[1], q1_init) pos_4 = GetBeamPos(q01_half_im, viewer) #peak/intensity #pk_1 = pos_1[2:] #pk_2 = pos_2[2:] #pk_3 = pos_3[2:] #pk_4 = pos_4[2:] #centroid positions pos_1 = pos_1[0:2] pos_2 = pos_2[0:2] pos_3 = pos_3[0:2] pos_4 = pos_4[0:2] #get quadratic distance from centroids print( f"Centroids:\n({pos_1[0]:.2f}, {pos_1[1]:.2f})\n({pos_2[0]:.2f}, {pos_2[1]:.2f})\n({pos_3[0]:.2f}, {pos_3[1]:.2f})\n({pos_4[0]:.2f}, {pos_4[1]:.2f})" ) distance = Dist(pos_1, pos_2, pos_3, pos_4, True)[0] print(f"Dist= {distance:.5f}") bs_hall = GetHall(b_small) bb_hall = GetHall(b_big) bs_i = GetMagnet(b_small) bb_i = GetMagnet(b_big) #save i, hall values and distance to file f = open(f"{b_small}_{b_big}_Distance_{timestring}.txt", "a+") f.write( f'{bs_i:.3f}\t{bb_i:.3f}\t{bs_hall:.7f}\t{bb_hall:.7f}\t{distance:.4f}\t{pos_1[0]:.4f}\t{all_nom_im}\n' ) f.close()
pk_2 = pos_2[2:4] pk_3 = pos_3[2:4] pk_4 = pos_4[2:4] pos_1 = pos_1[0:2] pos_2 = pos_2[0:2] pos_3 = pos_3[0:2] pos_4 = pos_4[0:2] #get quadratic distance from centroids print( f"Centroids:\n({pos_1[0]:.2f}, {pos_1[1]:.2f})\n({pos_2[0]:.2f}, {pos_2[1]:.2f})\n({pos_3[0]:.2f}, {pos_3[1]:.2f})\n({pos_4[0]:.2f}, {pos_4[1]:.2f})" ) #print("Peaks: ", pk_1, pk_2, pk_3, pk_4) distance_x, distance_y = Dist(pos_1, pos_2, pos_3, pos_4, separateXY=True) distance = distance_y for i, m in enumerate(magnet_list): magnet_values[i] = caget(corr_set_pvs[m]) print("Correctors set.") else: if count == 0: magnet_values = [random.uniform(-10, 10) for m in magnet_list] #magnet_values = [random.uniform(-15,15) for m in magnet_list] #magnet_values = [7.73 for m in magnet_list] distance = gp.returnObservations(magnet_values)
def scanDipoles(b_small, b_big): #set number of steps (from previous experience scanning although might need adjustments) bs_stepsize = small_step bb_stepsize = big_step #initial nominal quad values q0_init, q1_init = GetMagnet(quad_pair[0]), GetMagnet(quad_pair[1]) for i in range(total_steps): print(f"Step {i+1} out of {total_steps} large steps.") #get initial current of dipoles bs_init = GetMagnet(b_small) bb_init = GetMagnet(b_big) #set NMR teslameter to read B1 probe to save time later caput(set_probe, b1_probe) for j in range(0, int(bb_stepsize / bs_stepsize) + 4): ## ADDED TWO MORE STEPS FOR THE FIELDS TO OVERLAP #changing quads and taking pictures at 4 tunes #take picture with all at init values all_nom_im = SaveIm('allNom', viewer) #take picture with q8 nom, q9 half SetMagnet(quad_pair[0], q0_init * 2 / 3) SetMagnet(quad_pair[1], q1_init) pos_1 = GetBeamPos(all_nom_im, viewer) sleep( 5 ) #might need to increase this if the jumps in current are big all_zero_im = SaveIm('Q3_2-3', viewer) #take picture with q8/2 and q9/2 SetMagnet(quad_pair[0], q0_init) SetMagnet(quad_pair[1], q1_init * 2 / 3) pos_2 = GetBeamPos(all_zero_im, viewer) sleep(5) q0_half_im = SaveIm('Q4_2-3', viewer) #take picture with 4/3 q8 and 5/4 q9 SetMagnet(quad_pair[0], q0_init) SetMagnet(quad_pair[1], -90) pos_3 = GetBeamPos(q0_half_im, viewer) sleep(5) q01_half_im = SaveIm('Q4_neg90', viewer) #return quads to original values SetMagnet(quad_pair[0], q0_init) SetMagnet(quad_pair[1], q1_init) pos_4 = GetBeamPos(q01_half_im, viewer) #centroid positions pos_1 = pos_1[0:2] pos_2 = pos_2[0:2] pos_3 = pos_3[0:2] pos_4 = pos_4[0:2] #get quadratic distance from centroids print( f"Centroids:\n({pos_1[0]:.2f}, {pos_1[1]:.2f})\n({pos_2[0]:.2f}, {pos_2[1]:.2f})\n({pos_3[0]:.2f}, {pos_3[1]:.2f})\n({pos_4[0]:.2f}, {pos_4[1]:.2f})" ) distance = Dist(pos_1, pos_2, pos_3, pos_4) print(f"Dist= {distance:.5f}") #get NMR fields if (b_small == 'b1'): #saving the new actual nmr value of B1 bs_nmr = caget(tlm_reading) #change b2 and compare #saving the new actual nmr value caput(set_probe, b2_probe) sleep(10) bb_nmr = caget(tlm_reading) elif (b_small == 'b2'): #saving the new actual nmr value of B1 bb_nmr = caget(tlm_reading) #change b2 and compare #saving the new actual nmr value caput(set_probe, b2_probe) sleep(10) bs_nmr = caget(tlm_reading) bs_i = GetMagnet(b_small) bb_i = GetMagnet(b_big) #save i, hall values and distance to file f = open(f"{b_small}_{b_big}_Distance_{timestring}.txt", "a+") f.write( f'{bs_i:.3f}\t{bb_i:.3f}\t{bs_nmr:.7f}\t{bb_nmr:.7f}\t{distance:.4f}\t{pos_1[0]:.4f}\t{all_nom_im}\n' ) f.close() #ramps down this magnet in small steps multiple of the large step SetMagnet(b_small, bs_init - bs_stepsize * (j + 1)) #this magnet goes down a big step SetMagnet(b_big, bb_init - bb_stepsize) ##################### matchNMR()