print "Running over files:",inputFiles print "plotDir:",options.plotDir handles={k:Handle(edmCollections[k][0]) for k in edmCollections.keys()} res={} events = Events(inputFiles) events.toBegin() products={} size=events.size() #if not small else 2000 missingCollections=[] for nev in range(size): if nev%1000==0:print nev,'/',size events.to(nev) eaux=events.eventAuxiliary() run=eaux.run() if options.run>0 and not run==options.run: # print run, options.run continue for k in [ x for x in edmCollections.keys() if x not in missingCollections]: try: events.getByLabel(edmCollections[k][1:],handles[k]) products[k]=handles[k].product() except: products[k]=None print "Not found:",k missingCollections.append(k) d={} # print "Event",nev,'size',products['pfCandidates'].size()
tracksRef = Handle("std::vector<reco::Track>") label = "generalTracks" #label = "globalMuons" quality = "highPurity" #quality = "tight" #quality = "loose" def format(x) : return '{:.2f}'.format(x) for i in range(0, eventsRef.size()): #for i in range(0, 200): a= eventsRef.to(i) ev = eventsRef.eventAuxiliary().event() # print "Event", i a=eventsRef.getByLabel(label, tracksRef) trVal = [] for track in tracksRef.product(): # if (track.phi()<0) : continue # if (track.eta()<0) : continue if (track.pt()<1) : continue # if (track.qoverpError()*track.p()>2) : continue # if (not track.quality(track.qualityByName(quality))) : continue # pattern = track.hitPattern() # if (pattern.numberOfValidHits() != (pattern.numberOfValidPixelHits()+pattern.numberOfValidStripHits())) : # print pattern.numberOfValidHits(),pattern.numberOfValidPixelHits(),pattern.numberOfValidStripHits(), pattern.numberOfValidPixelHits()+pattern.numberOfValidStripHits() trVal.append([i, ev, 10*int(100*track.eta())+track.phi(), ver, format(track.eta()), format(track.phi()), format(track.pt()), format(track.qoverpError()*track.p()), track.numberOfValidHits() , track.hitPattern().numberOfValidPixelHits(), track.numberOfLostHits(), format(track.validFraction()), track.ndof(),format(track.chi2()),track.algo()-4,track.originalAlgo()-4,track.quality(track.qualityByName("highPurity"))])
def main(args): MAX_FILES_TO_PROCESS = args.maxfiles x_axis_definition = [40, 0.5, 40.5] if args.bxaxis: x_axis_definition = [4000, -0.5, 3999.5] numerical_lumi = [] numerical_bn = [] bunch_to_train = [0 for x in range(4000)] # In case the user specified LS using the range syntax X-Y, extend it in the form X, X+1, ..., Y. if args.lumi: numerical_lumi.extend(explicitRange(args.lumi)) # Same range extension for the BX number if args.bn: numerical_bn.extend(explicitRange(args.bn)) if args.alltrainsaverage: numerical_bn.extend(explicitRange(args.alltrainsaverage, bunch_to_train)) if args.alltrains: numerical_bn.extend([i for i in range(0,4000)]) print "\nSelecting LS: ", numerical_lumi print "\nSelecting BN: ", numerical_bn print "\nBunch to Train: ", bunch_to_train f = TFile(args.output, "RECREATE") tracks_h = Handle("std::vector<reco::Track>") pv_h = Handle("std::vector<reco::Vertex>") hit_type = {0:'ok', 1:'missing', 2:'inactive', 3:'bad'} hit_category = {0:'track_hits', 1:'missing_inner_hits', 2:'missing_outer_hits'} det = {1:'PXB', 2:'PXF', 3:'TIB', 4:'TID', 5:'TOB', 6:'TEC'} subdet = {'PXB': { 1:'Layer1', 2:'Layer2', 3:'Layer3'}, 'PXF': { 1:'Disk1', 2:'Disk2'}, 'TIB': { 1:'Layer1', 2:'Layer2', 3:'Layer3', 4:'Layer4'}, 'TID': { 1:'wheel1', 2:'wheel2', 3:'wheel3'}, 'TOB': { 1:'Layer1', 2:'Layer2', 3:'Layer3', 4:'Layer4', 5:'Layer5', 6:'Layer6'}, 'TEC': { 1:'wheel1', 2:'wheel2', 3:'wheel3', 4:'wheel4', 5:'wheel5', 6:'wheel6', 7:'wheel7', 8:'wheel8', 9:'wheel9'}} histograms = {} histograms_barrel = {} histograms_endcap = {} for d in subdet.keys(): for sd in subdet[d].keys(): name = d+subdet[d][sd] histograms.setdefault(name, {}).setdefault(0, TH1F('Hits_ok_%s' % name, 'Hits_ok_%s' % name, *x_axis_definition)).Sumw2 histograms.setdefault(name, {}).setdefault(1, TH1F('Hits_missing_%s' % name, 'Hits_missing_%s' % name, *x_axis_definition)).Sumw2 histograms.setdefault(name, {}).setdefault(2, TH1F('Hits_inactive_%s' % name, 'Hits_inactive_%s' % name, *x_axis_definition)).Sumw2 histograms.setdefault(name, {}).setdefault(3, TH1F('Hits_bad_%s' % name, 'Hits_bad_%s' % name, *x_axis_definition)).Sumw2 histograms.setdefault(name, {}).setdefault(4, TH1F('Hits_ok_and_missing_%s' % name, 'Hits_ok_and_missing_%s' % name, *x_axis_definition)).Sumw2 histograms_barrel.setdefault(name, {}).setdefault(0, TH1F('Hits_ok_%s_barrel' % name, 'Hits_ok_%s_barrel' % name, *x_axis_definition)).Sumw2 histograms_barrel.setdefault(name, {}).setdefault(1, TH1F('Hits_missing_%s_barrel' % name, 'Hits_missing_%s_barrel' % name, *x_axis_definition)).Sumw2 histograms_barrel.setdefault(name, {}).setdefault(2, TH1F('Hits_inactive_%s_barrel' % name, 'Hits_inactive_%s_barrel' % name, *x_axis_definition)).Sumw2 histograms_barrel.setdefault(name, {}).setdefault(3, TH1F('Hits_bad_%s_barrel' % name, 'Hits_bad_%s_barrel' % name, *x_axis_definition)).Sumw2 histograms_barrel.setdefault(name, {}).setdefault(4, TH1F('Hits_ok_and_missing_%s_barrel' % name, 'Hits_ok_and_missing_%s_barrel' % name, *x_axis_definition)).Sumw2 histograms_endcap.setdefault(name, {}).setdefault(0, TH1F('Hits_ok_%s_endcap' % name, 'Hits_ok_%s_endcap' % name, *x_axis_definition)).Sumw2 histograms_endcap.setdefault(name, {}).setdefault(1, TH1F('Hits_missing_%s_endcap' % name, 'Hits_missing_%s_endcap' % name, *x_axis_definition)).Sumw2 histograms_endcap.setdefault(name, {}).setdefault(2, TH1F('Hits_inactive_%s_endcap' % name, 'Hits_inactive_%s_endcap' % name, *x_axis_definition)).Sumw2 histograms_endcap.setdefault(name, {}).setdefault(3, TH1F('Hits_bad_%s_endcap' % name, 'Hits_bad_%s_endcap' % name, *x_axis_definition)).Sumw2 histograms_endcap.setdefault(name, {}).setdefault(4, TH1F('Hits_ok_and_missing_%s_endcap' % name, 'Hits_ok_and_missing_%s_endcap' % name, *x_axis_definition)).Sumw2 files = [] if args.input: files.extend(args.input) elif args.eosdir: files.extend(map(lambda x: 'root://eoscms/'+ x, getFileListFromEOS(args.eosdir)) ) else: print 'No input given, quitting' sys.exit(1) total_files = 0 if MAX_FILES_TO_PROCESS < 0: total_files = len(files) else: total_files = min(MAX_FILES_TO_PROCESS, len(files)) analyzed_files = 0 start_cumulative_time = time() start_time = start_cumulative_time end_time = start_cumulative_time file_count = -1 for input_file in files: file_count += 1 analyzed_files += 1 if MAX_FILES_TO_PROCESS > 0 and analyzed_files > MAX_FILES_TO_PROCESS: break print "\n", input_file events = Events(input_file) total_events = float(events.size()) analized_events = 0. for e in range(events.size()): analized_events += 1.0 if analized_events*100./total_events == 100: end_time = time() if not args.debug: sys.stdout.write("\r %d/%d --> %4.1f [%4.1f m / %6f s] ETA: %4.1f m ==> LS: %d" % (file_count, total_files, analized_events*100./total_events, (end_time-start_time)/60.,(end_time-start_time), (end_time-start_cumulative_time)/(60.*analyzed_files) * (total_files - analyzed_files), events.eventAuxiliary().luminosityBlock())) start_time = end_time sys.stdout.flush() a = events.to(e) if args.lumi: if not events.eventAuxiliary().luminosityBlock() in numerical_lumi: continue if len(numerical_bn) !=0 and not events.eventAuxiliary().bunchCrossing() in numerical_bn: continue a = events.getByLabel("generalTracks", tracks_h) a = events.getByLabel("offlinePrimaryVertices", pv_h) good_vertices = getNumberOfGoodVertices(pv_h) if good_vertices < 1: continue for track in range(tracks_h.product().size()): t = tracks_h.product()[track] if not t.quality(t.qualityByName("highPurity")): continue if t.pt() < 1.0 or t.dxy() > 0.1: continue hp = t.hitPattern() if args.debug: print "\n\n" for category in hit_category.keys(): if args.debug: print hit_category[category], "pt, eta, phi, dxy, originalAlgo-4", t.pt(), t.eta(), t.phi(), t.dxy(), t.originalAlgo()-4 for hit in range(0, hp.numberOfHits(category)): pattern = hp.getHitPattern(category, hit) valid = hp.validHitFilter(pattern) missing = hp.missingHitFilter(pattern) inactive = hp.inactiveHitFilter(pattern) bad = hp.badHitFilter(pattern) hit_type = -1 if valid: hit_type = 0 elif missing: hit_type = 1 elif inactive: hit_type = 2 elif bad: hit_type = 3 d = det[hp.getSubStructure(pattern)] sd = subdet[d][hp.getSubSubStructure(pattern)] name = d+sd if args.overwrite: good_vertices = args.overwrite if args.alltrainsaverage is not None: good_vertices = bunch_to_train[events.eventAuxiliary().bunchCrossing()] if args.alltrains: good_vertices = events.eventAuxiliary().bunchCrossing() if abs(t.eta()) < 1.4: if name in histograms_barrel.keys(): histograms_barrel[name][hit_type].Fill(good_vertices) else: if name in histograms_endcap.keys(): histograms_endcap[name][hit_type].Fill(good_vertices) if name in histograms.keys(): # We don't do any selection on any category other than missing! if hit_type != 1: histograms[name][hit_type].Fill(good_vertices) else: if args.hitcategory and not category in args.hitcategory: continue histograms[name][hit_type].Fill(good_vertices) if args.debug: printPattern(hit, category, d, sd, hp, pattern) f.cd() for kind in histograms.keys(): histograms[kind][4].Add(histograms[kind][0]+histograms[kind][1]) histograms.setdefault(kind, {}).setdefault(5, TGraphAsymmErrors(histograms[kind][0], histograms[kind][4])).Write() histograms_barrel[kind][4].Add(histograms_barrel[kind][0]+histograms_barrel[kind][1]) histograms_barrel.setdefault(kind, {}).setdefault(5, TGraphAsymmErrors(histograms_barrel[kind][0], histograms_barrel[kind][4])).Write() histograms_endcap[kind][4].Add(histograms_endcap[kind][0]+histograms_endcap[kind][1]) histograms_endcap.setdefault(kind, {}).setdefault(5, TGraphAsymmErrors(histograms_endcap[kind][0], histograms_endcap[kind][4])).Write() if args.debug: f.ls() f.Write() f.Close()
tracksRef = Handle("std::vector<reco::Track>") label = "generalTracks" #label = "globalMuons" quality = "highPurity" #quality = "tight" #quality = "loose" def format(x): return '{:.2f}'.format(x) for i in range(0, eventsRef.size()): #for i in range(0, 200): a = eventsRef.to(i) ev = eventsRef.eventAuxiliary().event() # print "Event", i a = eventsRef.getByLabel(label, tracksRef) trVal = [] for track in tracksRef.product(): # if (track.phi()<0) : continue # if (track.eta()<0) : continue if (track.pt() < 1): continue # if (track.qoverpError()*track.p()>2) : continue # if (not track.quality(track.qualityByName(quality))) : continue # pattern = track.hitPattern() # if (pattern.numberOfValidHits() != (pattern.numberOfValidPixelHits()+pattern.numberOfValidStripHits())) : # print pattern.numberOfValidHits(),pattern.numberOfValidPixelHits(),pattern.numberOfValidStripHits(), pattern.numberOfValidPixelHits()+pattern.numberOfValidStripHits() trVal.append([ i, ev, 10 * int(100 * track.eta()) + track.phi(), ver, format(track.eta()),