diff --git a/src/cristallina/plot.py b/src/cristallina/plot.py index 6188ce0..526c08b 100644 --- a/src/cristallina/plot.py +++ b/src/cristallina/plot.py @@ -188,20 +188,23 @@ def plot_image_channel(data, channel_name, pulse=0, ax=None, rois=None, norms=No axis_styling(ax, channel_name, description) plt.legend(loc=4) -def plot_spectrum_channel(data, channel_name_x, channel_name_y, ax=None): +def plot_spectrum_channel(data, channel_name_x, channel_name_y, average=True, frame=0, ax=None): """ Plots channel data for two channels where the first is taken as the (constant) x-axis - and the second as the y-axis (here we take the mean over the individual pulses). + and the second as the y-axis (here we take by default the mean over the individual pulses). """ try: mean, std = np.mean(data[channel_name_y].data), np.std(data[channel_name_y].data) - # data[channel_name].data mean_over_frames = np.mean(data[channel_name_y].data, axis=0) except TypeError: print(f"Unknown data in channel {channel_name_y}.") return - y_data = mean_over_frames + if average: + y_data = mean_over_frames + else: + y_data = data[channel_name_y].data[frame] + if ax is None: fig, ax = plt.subplots(constrained_layout=True) diff --git a/src/cristallina/utils.py b/src/cristallina/utils.py index 8b92eb9..d309070 100644 --- a/src/cristallina/utils.py +++ b/src/cristallina/utils.py @@ -92,6 +92,9 @@ class ROI: @property def rows(self): return slice(self.bottom, self.top) + @property + def LeftRightBottomTop(self): + return [self.left, self.right, self.bottom, self.top] @property def cols(self): @@ -106,7 +109,7 @@ class ROI: return self.top - self.bottom def __repr__(self): - return f"ROI(bottom={self.bottom}, top={self.top}, left={self.left}, right={self.right})" + return f"ROI(bottom={self.bottom},top={self.top},left={self.left},right={self.right})" def __eq__(self, other): # we disregard the name @@ -118,12 +121,16 @@ class ROI: ######################## Setting up paths ######################## -def heuristic_extract_pgroup(): - """ The function tries to guess the current p-group from the directory name.""" - cwd = os.getcwd() - if "/p" in cwd: +def heuristic_extract_pgroup(path=None): + """ The function tries to guess the current p-group from the + current working directory (default) or the contents of + the given path. + """ + path = path or os.getcwd() + + if "/p" in path: # Cut the string and look at the next five letters after /p - p_number = cwd.partition("/p")[2][:5] + p_number = path.partition("/p")[2][:5] if not p_number.isdigit(): raise KeyError("Automatic p-group extraction from the current working directory didn't work.")