|
| 1 | +#! /usr/bin/env python |
| 2 | +import sys |
| 3 | +sys.path.append("../../utils/pyutils") |
| 4 | + |
| 5 | +import pyimport as evn |
| 6 | +import pyvector as vec |
| 7 | +import pyplot as plot |
| 8 | +import pyprint as prnt |
| 9 | +from pyselect import Select as slct |
| 10 | + |
| 11 | +import awkward as ak |
| 12 | +import argparse |
| 13 | +def example_multicuts(filename): |
| 14 | + """ simple test function to run some of the utils """ |
| 15 | + |
| 16 | + # import the files |
| 17 | + test_evn = evn.Import(str(filename), "EventNtuple", "ntuple") |
| 18 | + |
| 19 | + # import code and extract branch |
| 20 | + ntuple = test_evn.ImportTree() |
| 21 | + |
| 22 | + # make a pyselect object |
| 23 | + mysel = slct() |
| 24 | + |
| 25 | + # import branches associated with trk fits |
| 26 | + trksegs = test_evn.ImportBranches(ntuple,['trksegs','trksegpars_lh']) |
| 27 | + |
| 28 | + # check if it is an electron going downstream |
| 29 | + is_elec = mysel.isElectron(ntuple) |
| 30 | + is_down = mysel.isDownstream(trksegs) |
| 31 | + |
| 32 | + # active hits |
| 33 | + active_mask = mysel.SelectHits(ntuple, 20) |
| 34 | + |
| 35 | + # check trk quality |
| 36 | + trkqual_mask = mysel.SelectTrkQual(ntuple, 0.2) |
| 37 | + |
| 38 | + # check for crv coincidences |
| 39 | + crv_mask = mysel.hasTrkCrvCoincs( trksegs, ntuple, 150) |
| 40 | + |
| 41 | + # set of trkseg cuts |
| 42 | + treenames = [ 'trksegs', 'trksegs', 'trksegpars_lh', 'trksegpars_lh', 'trksegpars_lh', 'trksegpars_lh'] |
| 43 | + leaves = [ 'sid', 'time', 't0err','maxr','tanDip','d0'] |
| 44 | + equals = [True, False, False, False, False, False] |
| 45 | + v1s = [1, 640, 0, 450, 0.5, -100] |
| 46 | + v2s = [None, 1650, 0.9, 680, 1.0, 100] |
| 47 | + |
| 48 | + # make a list of masks |
| 49 | + trkseg_mask_list = mysel.MakeMaskList(trksegs, treenames, leaves, equals, v1s, v2s) |
| 50 | + |
| 51 | + # FIXME apply joint mask --> can we make this tidier? like a loop or somethin? |
| 52 | + mytrksegs = trksegs['trksegs'].mask[(is_elec) & (is_down) & (trkqual_mask) & (crv_mask) & (active_mask) & (trkseg_mask_list[0]) & (trkseg_mask_list[1]) & (trkseg_mask_list[2]) & (trkseg_mask_list[3]) & (trkseg_mask_list[4]) & (trkseg_mask_list[5]) ] |
| 53 | + |
| 54 | + # make some plots to compare before/after cuts |
| 55 | + myhist = plot.Plot() |
| 56 | + |
| 57 | + # plot the momentum before and after the cuts |
| 58 | + myvect = vec.Vector() |
| 59 | + electrksegs = trksegs['trksegs'].mask[(is_elec) & (is_down)] |
| 60 | + vector_all = myvect.GetVectorXYZFromLeaf(electrksegs, 'mom') |
| 61 | + magnitude_all = myvect.Mag(vector_all) |
| 62 | + |
| 63 | + vector_cut = myvect.GetVectorXYZFromLeaf(mytrksegs, 'mom') |
| 64 | + magnitude_cut = myvect.Mag(vector_cut) |
| 65 | + |
| 66 | + flatarraymom_all = ak.flatten(magnitude_all, axis=None) |
| 67 | + flatarraymom_cut = ak.flatten(magnitude_cut, axis=None) |
| 68 | + |
| 69 | + myhist.Plot1D(flatarraymom_cut , None, 100, 95, 115, "Mu2e Example", "fit mom at Trk Ent [MeV/c]", "#events per bin", 'black', 'best', 'momcut.pdf', 300, True, False, True, False, True, True, True) |
| 70 | + |
| 71 | + dictarrays = { "all dem" : flatarraymom_all, "dem + trkcuts" : flatarraymom_cut } |
| 72 | + myhist.Plot1DOverlay(dictarrays, 100, 95,115, "Mu2e Example", "fit mom at Trk Ent [ns]", "#events per bin", 'momcutcompare.pdf', 'best', 300,False, True, True) |
| 73 | + |
| 74 | +def main(args): |
| 75 | + example_multicuts(args.filename) |
| 76 | + |
| 77 | +if __name__ == "__main__": |
| 78 | + parser = argparse.ArgumentParser(description='command arguments', formatter_class=argparse.RawTextHelpFormatter) |
| 79 | + parser.add_argument("--filename", type=str, default="/exp/mu2e/data/users/sophie/ensembles/MDS1/MDS1av0.root", help="filename") |
| 80 | + args = parser.parse_args() |
| 81 | + (args) = parser.parse_args() |
| 82 | + main(args) |
0 commit comments