Accessing files in different storage locations¶
In this demo, we demonstrate how data can be accessed from different storage spaces available to a Purdue Analysis Facility user. Copies of the same ROOT file have been placed in different storage locations, in this example they are accessed via uproot.open().
import uproot
import time
def test_file_access(path, filename):
'''
This function opens a NanoAOD file at a given path
and prints the pT of the first muon found in that file,
as well as the time taken to access the file.
'''
print(f"Accessing file at {path}{filename}")
start = time.time()
with uproot.open(path+filename)["Events"] as file:
pt = file["Muon_pt"].array()[0][0]
print("First muon pT: ", round(pt, 2), "GeV")
dt = round(time.time()-start, 2)
print(f"Time elapsed: {dt}s.")
print()
0. Local files¶
Accessing file at ./data/test_nanoaod.root
First muon pT: 82.55 GeV
Time elapsed: 3.91s.
1. Purdue Depot¶
The Purdue Depot storage is writeable for Purdue users, but read-only for external users.
# Choice of two paths - the mount point and the symlink in home directory
# (the latter is convenient for access via the file browser).
filename = "test_nanoaod_depot.root"
test_file_access("/depot/cms/hmm/", filename)
test_file_access("~/depot/hmm/", filename)
Accessing file at /depot/cms/hmm/test_nanoaod_depot.root
First muon pT: 82.55 GeV
Time elapsed: 0.87s.
Accessing file at ~/depot/hmm/test_nanoaod_depot.root
First muon pT: 82.55 GeV
Time elapsed: 0.71s.
2. Purdue EOS¶
Purdue EOS storage is mounted as read-only FS; however, Purdue users can write to their EOS directories using gfal commands (see instrictions here).
# Choice of two paths - the mount point and the symlink in home directory
# (the latter is convenient for access via the file browser).
filename = "test_nanoaod_eos_purdue.root"
test_file_access("/eos/purdue/store/user/dkondrat/", filename)
test_file_access("~/eos-purdue/store/user/dkondrat/", filename)
Accessing file at /eos/purdue/store/user/dkondrat/test_nanoaod_eos_purdue.root
First muon pT: 82.55 GeV
Time elapsed: 0.82s.
Accessing file at ~/eos-purdue/store/user/dkondrat/test_nanoaod_eos_purdue.root
First muon pT: 82.55 GeV
Time elapsed: 0.79s.
3. CERN EOS (CERNBox)¶
Warning
The following cell must be modified, since each user only gets access to their own CERNBox directory.
To enable access to your CERNBox, run command `eos-connect` in terminal.
# Choice of two paths - the mount point and the symlink in home directory
# (the latter is convenient for access via the file browser).
filename = "test_nanoaod_eos_cern.root"
test_file_access("/eos/cern/home-d/dkondrat/", filename)
test_file_access("~/eos-cern/", filename)
Accessing file at /eos/cern/home-d/dkondrat/test_nanoaod_eos_cern.root
First muon pT: 82.55 GeV
Time elapsed: 5.31s.
Accessing file at ~/eos-cern/test_nanoaod_eos_cern.root
First muon pT: 82.55 GeV
Time elapsed: 0.77s.
4. XRootD¶
Before using XRootD, initialize the VOMS proxy in terminal (voms-proxy-init --voms cms)
test_file_access("root://eos.cms.rcac.purdue.edu//store/user/dkondrat/", "test_nanoaod_eos_purdue.root")
Accessing file at root://eos.cms.rcac.purdue.edu//store/user/dkondrat/test_nanoaod_eos_purdue.root
First muon pT: 82.55 GeV
Time elapsed: 2.03s.
5. CVMFS¶
/cvmfs/cms.cern.ch/cmsset_default.sh