To install, clone repo and (inside your favorite conda environment) do:
>>> pip install -e .
To use in a script, do something along the lines:
>>> from gemsepyana import GeMSEData, simple_activities, plot_actvs, which_chain
Then load the data:
>>> al = GeMSEData() # the investigated sample >>> al.fn = '[path_to_rootfiles]/combined_spectra_runs__1_2.root' >>> al.sample_name = r'Short catchy name' >>> al.t_live = 157987+346328 # in seconds >>> al.load_spectrum() >>> al.rebin(nbins=10) # often looks nicer >>> bg = GeMSEData() # similar for background files >>> bg.fn = '[path_to_bg_rootfile]/2019-2020_combined_bkg_calibrated.root.root' >>> bg.sample_name = 'Background (2020)' >>> bg.t_live = 9.48034e+06 # in seconds >>> bg.load_spectrum() >>> bg.rebin(nbins=10)
And e.g. display it:
>>> c_al = 'xkcd:poop green'
>>> c_bg = 'xkcd:royal blue'
>>> fig, ax = plt.subplots(figsize=(16,8))
>>> xrange = (0,3000)
>>> isotope = ("U238", "Th228", "Tl208") # can be None or any list
>>> minBR = 0 # show only lines with BR>minBR
>>> ax.plot(al.x , al.y_per_keV_per_day , '-', c=c_al1, lw=1, label=al.sample_name)
>>> ax.plot(bg.x, bg.y_per_keV_per_day, '-', c=c_bg, lw=1, label=bg.sample_name)
>>> if True:
>>> al.draw_special_lines(
>>> sdict = al.manual_dict,
>>> col = 'k',
>>> xrange=xrange,
>>> minBR = minBR,
>>> isotope=isotope,
>>> )
>>> ax.set_ylabel(r'Counts [keV$^{-1}$ day$^{-1}$]')
>>> ax.set_xlabel('Energy [keV]')
>>> ax.set_yscale('log')
>>> ax.set_xlim(*xrange)
>>> ax.legend(bbox_to_anchor=(0, 1.02, 1, 0.2),
>>> loc="lower left",
>>> mode="expand",
>>> borderaxespad=0,
>>> frameon=False,
>>> ncol=2)
>>> fig.show()
(Argueably) nicer plot:
>>> c_al = 'xkcd:poop green'
>>> c_bg = 'xkcd:royal blue'
>>> fig, ax = plt.subplots(figsize=(16,12))
>>>
>>> xrange = (0,3000)
>>> #xrange = (500, 1000)
>>>
>>> isotope = ("Pb214", "Bi214", "K40")
>>>
>>> minBR = 3
>>>
>>> ax.plot(al.x , al.y_per_keV_per_day , '-', c=c_al, lw=1, label=al.sample_name)
>>> ax.plot(bg.x, bg.y_per_keV_per_day, '-', c=c_bg, lw=1, label=bg.sample_name)
>>>
>>> ax.set_ylabel(r'Counts [keV$^{-1}$ day$^{-1}$]')
>>> ax.set_xlabel('Energy [keV]')
>>> ax.set_yscale('log')
>>> ax.set_xlim(*xrange)
>>>
>>> ax.legend(bbox_to_anchor=(0, 1.02, 1, 0.2),
>>> loc="lower left",
>>> mode="expand",
>>> borderaxespad=0,
>>> frameon=False,
>>> ncol=2)
>>>
>>> if True:
>>> annots = al.annotate_lines(
>>> sdict = al.manual_dict,
>>> xrange=xrange,
>>> minBR = minBR,
>>> isotope=isotope,
>>> fontsize=10,
>>> adjustTextLabels=False, # if True, uses adjustText library to move text labels around
>>> #drawVLines=False,
>>> )
>>>
>>> #ax.set_ylim(1e-2, 1e3) # e.g. (None, 1e3) for default lower limit
>>> fig.show()
A simple rate analyis could look like:
>>> al.load_bat_params(fn="[path_to_GeMSE_analysis_type]/parameters_activity_calculation.txt") >>> actvs, als = simple_activities(gd=al, plot=True, isotopes=["Th228",], yscale='linear') # compute individual rates per line >>> plot_actvs(als=als) # plot rates of different lines belonging to one isotope
More examples to be provided here:
Packaging of files based on:
https://python-packaging.readthedocs.io/en/latest/