示例#1
0
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()
示例#2
0
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()
示例#4
0
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()),