def ToT_vs_ToA(shot): # Go to the @shot folder try: path = path_to_shot(shot) except: raise SystemExit # Get the data Data_tpx3_cent = np.genfromtxt('%s.csv' % shot, delimiter=',') # Read the first row in the .csv file and get index of the required signal with open('%s.csv' % shot, newline='') as f: reader = csv.reader(f) row1 = next(reader) try: index1 = row1.index('#ToA') index2 = row1.index('#ToTtotal[arb]') time_new = np.array([row[index1] for row in Data_tpx3_cent]) * 25 / 4096 / 1e6 tot = np.array([row[index2] for row in Data_tpx3_cent]) except: print("No 'ToA' or 'ToT' in the list") raise SystemExit bins1 = np.arange(time_new[0], time_new[-1], 1.5625) bins2 = np.arange(0, 25000, 25) H, xedges, yedges = np.histogram2d(time_new, tot, [bins1, bins2]) a = np.histogram(time_new, bins=bins1) # Time and data from the histogram timee = a[1] data = a[0] # Get rid off the noisy "ones" for an appropriate plot ones = np.where(data == 1)[0] for i in range(0, len(ones)): data[ones[i]] = 0 # Define the range limits for the appropriate plot try: l_lim, r_lim = int(np.nonzero(data)[0][0]), int( np.nonzero(data)[0][-1]) left, right = timee[l_lim] - 10, timee[r_lim] + 10 except: print("Could not compute 'left' and 'right'") y, x = np.meshgrid(yedges, xedges) data_masked = np.ma.masked_where(H == 0, H) fig = plt.figure() fig1 = plt.gca() plt.rcParams.update({'font.size': 16}) try: plt.xlim(left, right) except: pass yticks = fig1.yaxis.get_major_ticks() yticks[0].label1.set_visible(False) # plt.pcolormesh(x, y, H) plt.pcolormesh(x, y, data_masked) plt.colorbar(label="Hits") plt.title("Shot %s: ToT vs ToA" % shot) plt.xlabel("ToA, [ms]") plt.ylabel("ToT, [a.u.]") # Go to the Figures folder try: os.chdir("%s/Figures" % path) except: print("No folder, creating one") os.mkdir("%s/Figures" % path) os.chdir("%s/Figures" % path) fig.set_size_inches(20., 12., forward=True) fig.savefig('%s:ToTvsToA.png' % shot) plt.close(fig)
def hitmap_double(shot): # Go to the @shot folder try: path = path_to_shot(shot) except: raise SystemExit # Get the data Data_tpx3_cent = np.genfromtxt('%s.csv' % shot, delimiter=',') # Read the first row in the .csv file and get index of the required signal with open('%s.csv' % shot, newline='') as f: reader = csv.reader(f) row1 = next(reader) try: index1 = row1.index('#Col') index2 = row1.index('#Row') index3 = row1.index('#Centroid') col_total = np.array([row[index1] for row in Data_tpx3_cent]) row_total = np.array([row[index2] for row in Data_tpx3_cent]) cent = np.array([row[index3] for row in Data_tpx3_cent]) except: print("No 'ToA' in the list") raise SystemExit # Prepare arrays for the cluster separation col_ones = np.zeros(len(col_total)) row_ones = np.zeros(len(row_total)) col_noones = np.zeros(len(col_total)) row_noones = np.zeros(len(row_total)) # Fill the arrays with appropriate data defined by the cluster size for i in range(0, len(col_total)): if cent[i] == 1: col_ones[i] = col_total[i] row_ones[i] = row_total[i] col_noones[i] = 0 row_noones[i] = 0 else: col_ones[i] = 0 row_ones[i] = 0 col_noones[i] = col_total[i] row_noones[i] = row_total[i] # Compute histograms: H - all data, H1 - with particular cluster size H, xedges, yedges = np.histogram2d(row_total, col_total, 255, [[0, 255], [0, 255]]) H1, xedges1, yedges1 = np.histogram2d(row_ones, col_ones, 255, [[0, 255], [0, 255]]) H2, xedges2, xedges2 = np.histogram2d(row_noones, col_noones, 255, [[0, 255], [0, 255]]) row_left = min(row_total) row_right = max(row_total) col_left = min(col_total) col_right = max(col_total) row_l = int(row_right - row_left) col_l = int(col_right - col_left) H_, xedges_, yedges_ = np.histogram2d( row_total, col_total, (row_l, col_l), [[row_left, row_right], [col_left, col_right]]) H_1, xedges_1, yedges_1 = np.histogram2d( row_ones, col_ones, (row_l, col_l), [[row_left, row_right], [col_left, col_right]]) H_2, xedges_2, ydeges_2 = np.histogram2d( row_noones, col_noones, (row_l, col_l), [[row_left, row_right], [col_left, col_right]]) # Mask zeros to get a white color of the background H_masked = np.ma.masked_where(H == 0, H) H1_masked = np.ma.masked_where(H1 == 0, H1) H2_masked = np.ma.masked_where(H2 == 0, H2) H__masked = np.ma.masked_where(H_ == 0, H_) H_1_masked = np.ma.masked_where(H_1 == 0, H_1) H_2_masked = np.ma.masked_where(H_2 == 0, H_2) # Limits for the same colorbars vmin = 0 vmax = np.max(H) # ============================================================================= # Plot # ============================================================================= fig, axes = plt.subplots(2, 3) fig.subplots_adjust(hspace=0.6, wspace=0.6) plt.rcParams.update({'font.size': 16}) fig1 = axes[0, 0].imshow(H_masked, interpolation='none', origin='low', vmin=vmin, vmax=vmax) fig.colorbar(fig1, ax=axes[0, 0], label="Hits", fraction=0.046, pad=0.04) axes[0, 0].set_title("Shot %s: Hitmap" % shot) axes[0, 0].set_xlabel("Pixels, x axis") axes[0, 0].set_ylabel("Pixels, y axis") fig2 = axes[0, 1].imshow(H1_masked, interpolation='none', origin='low', vmin=vmin, vmax=vmax) fig.colorbar(fig2, ax=axes[0, 1], label="Hits", fraction=0.046, pad=0.04) axes[0, 1].set_title("Hitmap, cluster=1") axes[0, 1].set_xlabel("Pixels, x axis") axes[0, 1].set_ylabel("Pixels, y axis") fig3 = axes[0, 2].imshow(H2_masked, interpolation='none', origin='low', vmin=vmin, vmax=vmax) fig.colorbar(fig3, ax=axes[0, 2], label="Hits", fraction=0.046, pad=0.04) axes[0, 2].set_title("Hitmap, cluster>1") axes[0, 2].set_xlabel("Pixels, x axis") axes[0, 2].set_ylabel("Pixels, y axis") fig4 = axes[1, 0].imshow(H__masked, interpolation='none', origin='low', vmin=vmin, vmax=vmax) fig.colorbar(fig4, ax=axes[1, 0], label="Hits", fraction=0.046, pad=0.04) axes[1, 0].set_title("Hitmap") axes[1, 0].set_xlabel("Pixels, x axis") axes[1, 0].set_ylabel("Pixels, y axis") fig5 = axes[1, 1].imshow(H_1_masked, interpolation='none', origin='low', vmin=vmin, vmax=vmax) fig.colorbar(fig5, ax=axes[1, 1], label="Hits", fraction=0.046, pad=0.04) axes[1, 1].set_title("Hitmap, cluster=1") axes[1, 1].set_xlabel("Pixels, x axis") axes[1, 1].set_ylabel("Pixels, y axis") fig6 = axes[1, 2].imshow(H_2_masked, interpolation='none', origin='low', vmin=vmin, vmax=vmax) fig.colorbar(fig6, ax=axes[1, 2], label="Hits", fraction=0.046, pad=0.04) axes[1, 2].set_title("Hitmap, cluster>1") axes[1, 2].set_xlabel("Pixels, x axis") axes[1, 2].set_ylabel("Pixels, y axis") # Go to the Figures folder try: os.chdir("%s/Figures" % path) except: print("No folder, creating one") os.mkdir("%s/Figures" % path) os.chdir("%s/Figures" % path) fig.set_size_inches(20., 12., forward=True) plt.savefig('%s:Hitmap_double.pdf' % shot) plt.close(fig)
def ToA(shot): # Go to the @shot folder try: path = path_to_shot(shot) except: raise SystemExit # Get the data Data_tpx3_cent = np.genfromtxt('%s.csv' % shot, delimiter=',') # Read the first row in the .csv file and get index of the required signal with open('%s.csv' % shot, newline='') as f: reader = csv.reader(f) row1 = next(reader) try: index = row1.index('#ToA') time_new = np.array([row[index] for row in Data_tpx3_cent]) * 25 / 4096 / 1e6 except: print("No 'ToA' in the list") # Define the bins with the step of 1.5625 bins1 = int((time_new[-1] - time_new[0]) / 1.5625) # Prepare figure and compute the histogram fig = plt.figure() plt.rcParams.update({'font.size': 16}) plt.title("Shot %s: ToA" % shot) plt.xlabel("Time, [ms]") plt.ylabel("Hits, [a.u.]") a = plt.hist(time_new, bins1, (time_new[0], time_new[-1]), histtype='step', fill=False) # Get rid off the noisy "ones" for an appropriate plot data = a[0] timee = a[1] ones = np.where(data < 10)[0] for i in range(0, len(ones)): data[ones[i]] = 0 # Define limits of x axis for an appropriate plot try: left, right = int(timee[np.nonzero(data)[0][0]] - 10), int(timee[np.nonzero(data)[0][-1]] + 10) plt.xlim(left, right) except: print("Probably no data at all or just a weak signal") pass # Show the result within the limits plt.show() # Go to the Figures folder try: os.chdir("%s/Figures" % path) except: print("No folder, creating one") os.mkdir("%s/Figures" % path) os.chdir("%s/Figures" % path) fig.set_size_inches(20., 12., forward=True) fig.savefig('%s:ToA_plt.pdf' % shot) plt.close(fig)
def ToT_cluster(shot): # Go to the @shot folder try: path = path_to_shot(shot) except: raise SystemExit # Get the data Data_tpx3_cent = np.genfromtxt('%s.csv' % shot, delimiter=',') # Read the first row in the .csv file and get index of the required signal with open('%s.csv' % shot, newline='') as f: reader = csv.reader(f) row1 = next(reader) try: index1 = row1.index('#ToTtotal[arb]') index2 = row1.index('#Centroid') tot_total = np.array([row[index1] for row in Data_tpx3_cent]) # Total ToT cent = np.array([row[index2] for row in Data_tpx3_cent]) except: print("No 'ToA' in the list") raise SystemExit # Prepare empty arrays for the indices of particular clusters ones_full = np.zeros(len(cent)) twos_full = np.zeros(len(cent)) threes_full = np.zeros(len(cent)) fours_full = np.zeros(len(cent)) fives_full = np.zeros(len(cent)) # Fill the arrays with indices for i in range(0, len(cent)): if cent[i] == 1: ones_full[i] = i elif cent[i] == 2: twos_full[i] = i elif cent[i] == 3: threes_full[i] = i elif cent[i] == 4: fours_full[i] = i else: fives_full[i] = i # Cut off the empty part, leaving an array of indices of clusters ones = ones_full[ones_full != 0] twos = twos_full[twos_full != 0] threes = threes_full[threes_full != 0] fours = fours_full[fours_full != 0] fives = fives_full[fives_full != 0] # Transform float to integer for further manipulation ones = ones.astype(int) twos = twos.astype(int) threes = threes.astype(int) fours = fours.astype(int) fives = fives.astype(int) # Prepair array for the data from ToT_total ones_tot = np.zeros(len(ones)) twos_tot = np.zeros(len(twos)) threes_tot = np.zeros(len(threes)) fours_tot = np.zeros(len(fours)) fives_tot = np.zeros(len(fives)) # Fill the ToT arrays with the corresponding data for j in range(0, len(ones)): a = ones[j] ones_tot[j] = tot_total[a] a, j = 0, 0 for j in range(0, len(twos)): a = twos[j] twos_tot[j] = tot_total[a] a, j = 0, 0 for j in range(0, len(threes)): a = threes[j] threes_tot[j] = tot_total[a] a, j = 0, 0 for j in range(0, len(fours)): a = fours[j] fours_tot[j] = tot_total[a] a, j = 0, 0 for j in range(0, len(fives)): a = fives[j] fives_tot[j] = tot_total[a] # Prepair a tuple of arrays filled with ToT clusters for stacked histogram tot_multi = [ones_tot, twos_tot, threes_tot, fours_tot, fives_tot] labels = ['1', '2', '3', '4', '5'] # To add some text to the legend empty = np.zeros(len(tot_multi)) # Bin value==25 # bins1 = np.arange(0,25000,1000) # Comptute a histogram # hist = np.histogram(tot_multi, bins=bins1) # timee = hist[0] # data = hist[1] # ============================================================================= # Plot # ============================================================================= fig = plt.figure() plt.rcParams.update({'font.size': 16}) plt.title("Shot %s: ToT by clusters" % shot) plt.xlabel("ToT, [a.u.]") plt.ylabel("Hits, [a.u.]") plt.plot(empty, color='white', label="Cluster size:") plt.hist(tot_multi, 1000, (0, 25000), histtype='step', stacked=True, fill=False, label=labels) # plt.plot(timee, data) plt.legend() # Go to the Figures folder try: os.chdir("%s/Figures" % path) except: print("No folder, creating one") os.mkdir("%s/Figures" % path) os.chdir("%s/Figures" % path) fig.set_size_inches(20., 12., forward=True) plt.savefig('%s:ToT_cluster.pdf' % shot) plt.close(fig)
def ToA_cluster(shot): # Go to the @shot folder try: path = path_to_shot(shot) except: raise SystemExit # Get the data Data_tpx3_cent = np.genfromtxt('%s.csv' % shot, delimiter=',') # Read the first row in the .csv file and get index of the required signal with open('%s.csv' % shot, newline='') as f: reader = csv.reader(f) row1 = next(reader) try: index1 = row1.index('#ToA') index2 = row1.index('#Centroid') time_new = np.array([row[index1] for row in Data_tpx3_cent]) * 25 / 4096 / 1e6 cent = np.array([row[index2] for row in Data_tpx3_cent]) except: print("No 'ToA' in the list") raise SystemExit # Define the bins with the step of 1.5625 bins1 = np.arange(time_new[0], time_new[-1], 1.5625) # Compute a histogram a = np.histogram(time_new, bins=bins1) # Prepare empty arrays for the indices of particular clusters ones_full = np.zeros(len(cent)) twos_full = np.zeros(len(cent)) threes_full = np.zeros(len(cent)) fours_full = np.zeros(len(cent)) fives_full = np.zeros(len(cent)) # Fill the arrays with indices for i in range(0, len(cent)): if cent[i] == 1: ones_full[i] = i elif cent[i] == 2: twos_full[i] = i elif cent[i] == 3: threes_full[i] = i elif cent[i] == 4: fours_full[i] = i else: fives_full[i] = i # Cut off the empty part, leaving an array of indices of clusters ones = ones_full[ones_full != 0] twos = twos_full[twos_full != 0] threes = threes_full[threes_full != 0] fours = fours_full[fours_full != 0] fives = fives_full[fives_full != 0] # Transform float to integer for further manipulation ones = ones.astype(int) twos = twos.astype(int) threes = threes.astype(int) fours = fours.astype(int) fives = fives.astype(int) # Prepair array for the data from time_new ones_toa = np.zeros(len(ones)) twos_toa = np.zeros(len(twos)) threes_toa = np.zeros(len(threes)) fours_toa = np.zeros(len(fours)) fives_toa = np.zeros(len(fives)) # Fill the toa arrays with the corresponding data for j in range(0, len(ones)): a = ones[j] ones_toa[j] = time_new[a] a, j = 0, 0 for j in range(0, len(twos)): a = twos[j] twos_toa[j] = time_new[a] a, j = 0, 0 for j in range(0, len(threes)): a = threes[j] threes_toa[j] = time_new[a] a, j = 0, 0 for j in range(0, len(fours)): a = fours[j] fours_toa[j] = time_new[a] a, j = 0, 0 for j in range(0, len(fives)): a = fives[j] fives_toa[j] = time_new[a] # Prepair a tuple of arrays filled with toa clusters for stacked histogram toa_multi = [ones_toa, twos_toa, threes_toa, fours_toa, fives_toa] labels = ['1', '2', '3', '4', '5'] bins = int((time_new[-1] - time_new[0]) / 1.5625) empty = np.zeros(len(time_new)) # Define the range limits for the appropriate plot # left, right = int(np.nonzero(data)[0][0]), int(np.nonzero(data)[0][-1]) fig = plt.figure() plt.rcParams.update({'font.size': 16}) plt.title("Shot %s: ToA by clusters" % shot) plt.xlabel("Time, [ms]") plt.ylabel("Hits, [a.u.]") plt.plot(empty, color='white', label="Cluster size:") a = plt.hist(toa_multi, bins, (time_new[0], time_new[-1]), histtype='step', stacked=True, fill=False, label=labels) # Get rid off the noisy "ones" for an appropriate plot data = None for i in range(0, 4): if max(a[0][i + 1]) > max(a[0][i]): data = a[0][i + 1] timee = a[1] ones = np.where(data < 10)[0] for i in range(0, len(ones)): data[ones[i]] = 0 # Define limits of x axis for an appropriate plot try: left, right = int(timee[np.nonzero(data)[0][0]] - 10), int(timee[np.nonzero(data)[0][-1]] + 10) plt.xlim(left, right) except: print("Probably no data at all or just a weak signal") pass plt.legend(loc="upper left") # Go to the Figures folder try: os.chdir("%s/Figures" % path) except: print("No folder, creating one") os.mkdir("%s/Figures" % path) os.chdir("%s/Figures" % path) fig.set_size_inches(20., 12., forward=True) plt.savefig('%s:ToA_cluster.pdf' % shot) plt.close(fig)