rebin_example.py
                        
                             · 1.4 KiB · Python
                        
                    
                    
                      
                        Bruto
                      
                      
                        
                          
                        
                    
                    
                
                
            from mantid.simpleapi import *
import matplotlib.pyplot as plt
import numpy as np
def rebin_data(datax, datay, xmin, xmax, xbin):
    """Rebin input data with specified binning params
    Parameters:
    datax (numpy.ndarray): Input data X array
    datay (numpy.ndarray): Input data Y array
    xmin (float): X Min for rebinning
    xmax (float): X Max for rebinning
    xbin (float): Bin size for rebinning
    Returns:
    tuple: Rebinned data X and Y arrays
    """
    wksp = CreateWorkspace(
        DataX=datax,
        DataY=datay,
        NSpec=1,
        Distribution=True
    )
    Rebin(
        InputWorkspace=wksp,
        OutputWorkspace="wksp_rebin",
        Params=f"{xmin}, {xbin}, {xmax}"
    )
    datax_rebinned = mtd["wksp_rebin"].extractX()[0]
    datay_rebinned = mtd["wksp_rebin"].extractY()[0]
    return (datax_rebinned, datay_rebinned)
if __name__ == "__main__":
    # Dummy data of a simple Gaussian distribution
    mu = 0
    sigma = 1
    amplitude = 1
    datax = np.linspace(-5, 5, 100)
    datay = amplitude * np.exp(-((datax - mu) ** 2) / (2 * sigma ** 2))
    rebinned_data = rebin_data(datax, datay, -4., 4., .2)
    # Plot the original and rebinned data together
    plt.plot(datax, datay, label="Original Data")
    plt.plot(rebinned_data[0], rebinned_data[1], label="Rebinned Data")
    plt.xlabel('x')
    plt.ylabel('y')
    plt.legend()
    plt.show()
                | 1 | from mantid.simpleapi import * | 
| 2 | import matplotlib.pyplot as plt | 
| 3 | import numpy as np | 
| 4 | |
| 5 | |
| 6 | def rebin_data(datax, datay, xmin, xmax, xbin): | 
| 7 | """Rebin input data with specified binning params | 
| 8 | |
| 9 | Parameters: | 
| 10 | datax (numpy.ndarray): Input data X array | 
| 11 | datay (numpy.ndarray): Input data Y array | 
| 12 | xmin (float): X Min for rebinning | 
| 13 | xmax (float): X Max for rebinning | 
| 14 | xbin (float): Bin size for rebinning | 
| 15 | |
| 16 | Returns: | 
| 17 | tuple: Rebinned data X and Y arrays | 
| 18 | """ | 
| 19 | wksp = CreateWorkspace( | 
| 20 | DataX=datax, | 
| 21 | DataY=datay, | 
| 22 | NSpec=1, | 
| 23 | Distribution=True | 
| 24 | ) | 
| 25 | |
| 26 | Rebin( | 
| 27 | InputWorkspace=wksp, | 
| 28 | OutputWorkspace="wksp_rebin", | 
| 29 | Params=f"{xmin}, {xbin}, {xmax}" | 
| 30 | ) | 
| 31 | |
| 32 | datax_rebinned = mtd["wksp_rebin"].extractX()[0] | 
| 33 | datay_rebinned = mtd["wksp_rebin"].extractY()[0] | 
| 34 | |
| 35 | return (datax_rebinned, datay_rebinned) | 
| 36 | |
| 37 | |
| 38 | if __name__ == "__main__": | 
| 39 | # Dummy data of a simple Gaussian distribution | 
| 40 | mu = 0 | 
| 41 | sigma = 1 | 
| 42 | amplitude = 1 | 
| 43 | |
| 44 | datax = np.linspace(-5, 5, 100) | 
| 45 | datay = amplitude * np.exp(-((datax - mu) ** 2) / (2 * sigma ** 2)) | 
| 46 | |
| 47 | rebinned_data = rebin_data(datax, datay, -4., 4., .2) | 
| 48 | |
| 49 | # Plot the original and rebinned data together | 
| 50 | plt.plot(datax, datay, label="Original Data") | 
| 51 | plt.plot(rebinned_data[0], rebinned_data[1], label="Rebinned Data") | 
| 52 | plt.xlabel('x') | 
| 53 | plt.ylabel('y') | 
| 54 | plt.legend() | 
| 55 | plt.show() |