File indexing completed on 2024-04-06 12:33:26
0001
0002
0003 from __future__ import print_function
0004 import argparse
0005
0006 import Validation.RecoTrack.plotting.ntuple as ntuple
0007
0008
0009 def findEvent(ntpl, event):
0010 eventId = event.split(":")
0011 if len(eventId) != 3:
0012 raise Exception("Malformed eventId %s, is not run:lumi:event" % eventId)
0013 eventId = (int(eventId[0]), int(eventId[1]), int(eventId[2]))
0014
0015 for ev in ntpl:
0016 if ev.eventId() == eventId:
0017 return ev
0018
0019 raise Exception("Did not find event %s from file %s" % (eventId, ntpl.file().GetPath()))
0020
0021 def main(opts):
0022 if opts.track is None and opts.trackingParticle is None and opts.seed is None and opts.pixelHit is None and opts.stripHit is None:
0023 return
0024
0025 ntpl = ntuple.TrackingNtuple(opts.file)
0026
0027 if opts.entry is not None:
0028 event = ntpl.getEvent(opts.entry)
0029 print(event.eventIdStr())
0030 elif opts.event is not None:
0031 event = findEvent(ntpl, opts.event)
0032 print("Entry %d" % event.entry())
0033
0034 hasHits = ntpl.hasHits()
0035 hasSeeds = ntpl.hasSeeds()
0036
0037 if not hasSeeds and opts.seed is not None:
0038 print("Ntuple %s does not have seeds saved!" % opts.file)
0039 return
0040 if not hasHits and (opts.pixelHit is not None or opts.stripHit is not None):
0041 print("Ntuple %s does not have hits saved!" % opts.file)
0042 return
0043
0044 seedArgs = dict(hits=hasHits, bestMatchingTrackingParticle=hasHits)
0045 trackArgs = dict(hits=hasHits, bestMatchingTrackingParticle=hasHits)
0046 tpArgs = dict(hits=hasHits, bestMatchingTrack=hasHits)
0047 if not hasSeeds:
0048 trackArgs["seedPrinter"] = None
0049 tpArgs["seedPrinter"] = None
0050 elif not hasHits:
0051 trackArgs["seedPrinter"] = ntuple.SeedPrinter(**seedArgs)
0052 tpArgs["seedPrinter"] = ntuple.SeedPrinter(**seedArgs)
0053
0054 printSeed = ntuple.SeedPrinter(trackingParticles=True, trackingParticlePrinter=ntuple.TrackingParticlePrinter(**tpArgs), **seedArgs)
0055 printTrack = ntuple.TrackPrinter(trackingParticlePrinter=ntuple.TrackingParticlePrinter(**tpArgs), **trackArgs)
0056 printTrackingParticle = ntuple.TrackingParticlePrinter(trackPrinter=ntuple.TrackPrinter(**trackArgs), **tpArgs)
0057
0058 if opts.track is not None:
0059 trks = event.tracks()
0060 if opts.track >= len(trks):
0061 print("You requested track %d, but this event has only %d tracks" % (opts.track, len(trks)))
0062 return
0063 trk = trks[opts.track]
0064 printTrack(trk)
0065
0066 if opts.trackingParticle is not None:
0067 tps = event.trackingParticles()
0068 if opts.trackingParticle >= len(tps):
0069 print("You requested TrackingParticle %d, but this event has ony %d TrackingParticles" % (opts.trackingParticle, len(tps)))
0070 return
0071 tp = tps[opts.trackingParticle]
0072 printTrackingParticle(tp)
0073
0074 if opts.seed is not None:
0075 seeds = event.seeds()
0076 if opts.seedIteration is not None:
0077 algo = getattr(ntuple.Algo, opts.seedIteration)
0078 if opts.seed >= seeds.nSeedsForAlgo(algo):
0079 print("You requested seed %d for algo %s, but this event has only %d seeds for that algo" % (opts.seed, opts.seedIteration, seeds.nSeedsForAlgo(algo)))
0080 return
0081 seed = seeds.seedForAlgo(algo, opts.seed)
0082 else:
0083 if opts.seed >= len(seeds):
0084 print("You requested seed %d, but this event has only %d seeds" % (opts.seed, len(seeds)))
0085 return
0086 seed = seeds[opts.seed]
0087 printSeed(seed)
0088
0089 if opts.pixelHit is not None:
0090 hits = event.pixelHits()
0091 if opts.pixelHit >= len(hits):
0092 print("You requested pixel hit %d, but this event has only %d pixel hits" % (opts.pixelHit, len(hits)))
0093 return
0094
0095 hit = hits[opts.pixelHit]
0096 print("Pixel hit %d tracks" % opts.pixelHit)
0097 for t in hit.tracks():
0098 printTrack(t)
0099 if hasSeeds:
0100 print("Pixel hit %d seeds" % opts.pixelHit)
0101 for s in hit.seeds():
0102 printSeed(s)
0103
0104 if opts.stripHit is not None:
0105 hits = event.stripHits()
0106 if opts.stripHit >= len(hits):
0107 print("You requested strip hit %d, but this event has only %d strip hits" % (opts.stripHit, len(hits)))
0108 return
0109 hit = hits[opts.stripHit]
0110 print("Strip hit %d tracks" % opts.stripHit)
0111 for t in hit.tracks():
0112 printTrack(t)
0113 if hasSeeds:
0114 print("Strip hit %d seeds" % opts.stripHit)
0115 for s in hit.seeds():
0116 printSeed(s)
0117
0118
0119 if __name__ == "__main__":
0120 parser = argparse.ArgumentParser(description="Print information from a TrackingNtuple file")
0121 parser.add_argument("file", type=str,
0122 help="Input file")
0123
0124 parser.add_argument("--entry", type=int,
0125 help="Entry in a file to print information for (conflicts with --event)")
0126 parser.add_argument("--event", type=str,
0127 help="Event in a file to print information for, in a format run:lumi:event (conflicts with --entry)")
0128
0129 parser.add_argument("--track", type=int,
0130 help="Index of a track to print information for")
0131 parser.add_argument("--trackingParticle", type=int,
0132 help="Index of a TrackingParticle to print information for")
0133 parser.add_argument("--seed", type=int,
0134 help="Index of a seed to print information for. If --seedIteration is specified, the index is within the iteration. Without --seedIteration it is used as a global index.")
0135 parser.add_argument("--seedIteration", type=str,
0136 help="Seed iteration, used optionally with --seed")
0137 parser.add_argument("--pixelHit", type=int,
0138 help="Index of a pixel hit")
0139 parser.add_argument("--stripHit", type=int,
0140 help="Index of a strip hit")
0141
0142 opts = parser.parse_args()
0143
0144 if opts.entry is None and opts.event is None:
0145 parser.error("Need either --entry or --event, neither was given")
0146 if opts.entry is not None and opts.event is not None:
0147 parser.error("--entry and --event conflict, please give only one of them")
0148
0149 main(opts)
0150
0151