Skip to content

Tips and Tricks

Have a Tip or Trick to add to this page? Submit through this form.

Table of Contents

General Tips and Tricks

 

CDMS Tips and Tricks

 

DUNE Tips and Tricks

 

Computing

General Analysis

Disabling Root

To avoid new versions of ROOT launching a Web-based TBrowser, add these two lines to ~/.rootrc: Browser.Name: TRootBrowser

Making Profile Plots

A profile plot is used to display the mean value of Y and its error for each bin in X. It shows the changes in Y over X. Here is a quick example of how to make a 1D profile plot using the ROOT, root_numpy and matplotlib packages in Python. See the following example for details:

import matplotlib.pyplot as plt
import numpy as np
from ROOT import TProfile
from root_numpy import fill_profile

# Fill the numbers
profile =TProfile("profname","title", xbn, xbins) # xbn: number of x bins; xbins: an array
fill_array = np.column_stack((X_array, Y_array))
fill_profile(profname,fill_array)

# Read the numbers for a profile plot
profile_X = np.array([profname.GetBinCenter(xbin) for xbin in range(1,xbn+1)])
profile_mean = np.array([profname.GetBinContent(xbin) for xbin in range(1,xbn+1)])
profile_error = np.array([profname.GetBinError(xbin) for xbin in range(1,xbn+1)])
bin_entr = np.array([profname.GetBinEntries(xbin) for xbin in range(1,xbn+1)])
profile_std = np.sqrt(bin_entr)*profile_error # std of mean -> std of the data

# Plotting
plt.errorbar(profile_X, profile_mean, yerr=profile_std)
 Reference: 

TProfile: https://root.cern/doc/master/classTProfile.html\

Reducing memory usage with ROOT and Numpy

When you are reading from a massive ROOT Tree, make sure you only read the specific trees and branches you need, and not all the trees or all the branches in a tree, which can lead to a memory overload

Create ROOT Kernel for your Jupyter OnDemand

“If you like using ROOT directly, you can create a ROOT kernel and run that in your Jupyter session instead of the normal JupyterLab Python kernel. You can use the basic ROOT C++ interface in a Jupyter “”In[]/Out[]”” style.

You can also put “”%%cpp”” in a regular Jupyter cell (after importing ROOT), and use C++ in that cell.”

How to make a “heat map”

“A heat map is a three-dimensional plot (or 2D histogram, or 2D profle), where the ‘Z’ axis is represent by a color range for each point or each bin.

To make a heat-map style scatter plot (assuming you use our conventional imports of matplotlib)
`plt.scatter(x,y,heat,cmap=’coolwarm’)`
Matplotlib has a lot of different “”cmap”” styles to choose from, in their documentation.

You can make a ROOT.TProfile2D() profile plot first, then extract the entries into x, y, z triplets, and plot those as above.

Also see https://stackoverflow.com/questions/33942700/plotting-a-heat-map-from-three-lists-x-y-intensity for a bunch of different methods (thanks to Josh for that link!).”

Examples for using Pandas DataFrames

“This example is from DUNE, but it shows some of the things Pandas can do:

So a dataframe is just a collection of series. For instance the reset_data DataFrame, may include the Series: pixel_x, pixel_y, and reset_time. You can plot stuff by telling it what series to plot.

`reset_data.pixel_x` will give the pixel_x series for the whole sample

if you want to look at the pixel_x series but constrain it to only one event, you can say
`reset_data[reset_data.event == 0].pixel_x`
or in a range of events
`reset_data[reset_data.event >= 0][reset_data.event < 10].pixel_x`

You can also do multiple constraints
`reset_data[reset_data.event == 0][reset_data.pixel_y == 0].pixel_x`

Series has a builtin function `.tolist()` which you can use to explicitly turn a Series into a list. So using the most recent example:
`reset_data[reset_data.event == 0][reset_data.pixel_y == 0].pixel_x.tolist()`
But i dont think you need to do that to be able to plot them.

Lastly, this is a cool function I have used a lot in the past few years. It basically reads your dataframe and groups stuff by unique pixel-events (or whatever you tell it to group by). So like in this case pixel (1,2) in event 1 is a separate row from pixel (1,3) in event 1, as well as separate from pixel 1,2 in event 2. And it will tell you how many resets you have for each unique active pixel

`unique_active_pixels = resets.groupby([‘event’,’pixel_x’,’pixel_y’]).size().reset_index().rename(columns={0:”,1:’event’,2:’pixel_x’,3:’pixel_y’,4:’nResets’})`”

What to do if your Jupyter Notebook throws [Error]

“If your Jupyter Notebook session puts up a brown [Error] box, and won’t let you save or checkpoint your notebook, leave it alone.  Delete the Jupyter “”file browser”” tab (do not “”Logout”” or “”Quit””), then go back to the original launch (“”My Interactive Sessions””) and reconnect using the blue [Connect to Jupyter] button.  

You should then be able to relaunch your notebook.  If necessary, use copy-paste to transfer unsaved cells or edits from the broken [Error] session to the newly launched session.  Once that’s done, you can delete the broken tab.”

Common Scripts

Custom emails in SLURM job

In order to send custom emails from inside a SBATCH environment, use the slurm-mail.sh script located in mitchcomp/bin. Documentation for usage is in the header of that script.

Other Common Issues

Use dos2unix after transferring text files from Windows to HPRC (Unix)

When you create or edit a text file on a Windows machine (NotePad, TEdit, whatever), it will have Windows end-of-line markup. If you transfer that file to Linux (HPRC or elsewhere), you need to convert it to having Unix end-of-line marks, or it will not be properly readable. Use the command `dos2unix` with the filename, and it will be converted in place.

Globus Upgrade Warnings can be Ignored

If you see the warning message “This endpoint must be migrated to version 5 by Dec 18, 2023” it can be safely ignored.  According to HPRC, “Grace’s endpoint will be upgraded during November maintenance.  Terra’s endpoint will also be upgraded before the December 18th deadline.”

Math or other “fancy” notation in Google Docs

“Google docs supports Unicode characters and Unicode “”combiners”” (like accents, diacritics, vowel markers for Arabic and Hebrew, etc.).

First type the base character (“”1″”).  Then go to Insert -> Special characters and in the search box type “”combining overline””.  Choose the single overline by clicking it.  Close the box with the “”X”” in the corner, and you’ll see the result:  1̅

If you think the overline is too long (it’s designed to overlap with adjacent overlines, so you get one long bar), you can use “”combining macron””:  1̄

You can do the same with vector arrows, underline or double-underline markers (for tensors), hats, etc.  The keyword “”combining”” will help you identify the characters that do this.