コード例 #1
0
def runBMinusLAnalysis( file_list
                      , is_data
                      , is_egamma_stream
                      , is_full_sim
                      , syst_struct           = None
                      , tree_name             = 'susy'
                      , dsid                  = 1
                      , out_file_special_name = None
                      , is_tnt                = False
                      , fancy_progress_bar    = True
                      , job_num               = 0
                      , total_num_jobs        = 1
                      , total_num_events      = 0
                      , total_num_entries     = 0
                      , sum_mc_event_weights  = 0
                      , out_dir               = './'
                      ):
    # ==============================================================================
    # If the num events are not set and we are running over TNTs, get the total
    #   NumEvents
    print 'total num events: ', total_num_events
    if total_num_events == 0 and is_tnt:
        print 'Getting total num unskimmed events'
        print '  -- this is slow. you should do this once per data set - not for each stream!'
        total_num_events = getTotalNumEvents(file_list, is_tnt)

    print "Adding files to TChain"
    print '  Tree name: ' , tree_name
    t = RunHelpers.getTChain(file_list, tree_name)
    print t
    print t.GetEntries()

    # ==============================================================================
    print 'Creating BMinusLAnalysis object'
    bmla = ROOT.PennSusyFrame.BMinusLAnalysis(t)

    print 'configuring BMinusLAnalysis object'
    if out_file_special_name is not None:
        process_label = ''.join( [ out_file_special_name
                                 , '__'
                                 , str(job_num)
                                 , '_of_'
                                 , str(total_num_jobs)
                                 ]
                               )
        bmla.setProcessLabel(process_label)

    bmla.setFancyProgressBar(False)

    # set is data or MC
    #   if MC, we need to set various other things like cross section, k-factor, ...
    if is_data:
        bmla.setIsData()

        if is_egamma_stream:
            bmla.setIsEgammaStream()
        else:
            bmla.setIsMuonStream()
    else:
        bmla.setIsMC()

        xsec_dict = CrossSectionReader.getCrossSection(dsid)
        if xsec_dict is None:
            return
        bmla.setCrossSection(xsec_dict['xsec'])
        bmla.setKFactor(     xsec_dict['kfac'])
        bmla.setFilterEff(   xsec_dict['eff'])

        bmla.setTotalNumEntries(    total_num_entries    )
        bmla.setNumGeneratedEvents( total_num_events     )
        bmla.setSumMCEventWeights(  sum_mc_event_weights )

    # set is full sim/fast sim
    if is_full_sim:
        bmla.setFullSim()

    # set unblind!
    bmla.setIsBlind(False)

    # turn on systematics
    syst_tag = ''
    if syst_struct:
        print 'turning on systematics'
        syst_struct.configureAnalysisObject(bmla)

        syst_tag = ''.join([syst_struct.getRunName(), '.'])

    # set start entry and max number events
    if total_num_jobs > 1:
        print 'total num jobs (', total_num_jobs, ') > 1'
        this_job_events = int( math.ceil( float(total_num_entries)
                                        / total_num_jobs
                                        )
                             )
        this_job_start = job_num*this_job_events

        print 'total num entries: ', total_num_entries
        print 'setting max num events: ', this_job_events
        print type(this_job_events)
        bmla.setMaxNumEvents(this_job_events)
        print 'setting start entry: ', this_job_start
        bmla.setStartEntry(this_job_start)

    # set out histogram file name
    # base name
    out_ntup_file_name = [out_dir, '/', 'BMinusL.', syst_tag]

    # append any special tags
    if out_file_special_name is not None:
        out_ntup_file_name.extend([out_file_special_name, '.'])

    # append 'hist' tag
    out_ntup_file_name.append('hist')

    # append job number
    if total_num_jobs > 1:
        out_ntup_file_name.extend( ['.'
                                   , str(job_num)
                                   , '_of_'
                                   , str(total_num_jobs)
                                   ]
                                 )

    # this is a root file
    out_ntup_file_name.append('.root')

    # set output file name in analyzer
    bmla.setOutHistFileName(''.join(out_ntup_file_name))

    # Set critical cuts
    bmla.setCritCutGrl(            1)
    bmla.setCritCutIncompleteEvent(1)
    bmla.setCritCutLarError(       1)
    bmla.setCritCutTileError(      1)
    bmla.setCritCutTileHotSpot(    1)
    bmla.setCritCutTileTrip(       1)
    bmla.setCritCutBadJetVeto(     1)
    bmla.setCritCutCaloProblemJet( 1)
    bmla.setCritCutPrimaryVertex(  1)
    bmla.setCritCutBadMuonVeto(    1)
    bmla.setCritCutCosmicMuonVeto( 1)
    bmla.setCritCutHFOR(           1)
    bmla.setCritCutMcOverlap(      1)
    bmla.setCritCutGe2Lepton(      1)
    bmla.setCritCut2Lepton(        0)
    bmla.setCritCut2SignalLepton(  0)
    bmla.setCritCut2BJets(         0)
    bmla.setCritCutBadJetVeto(     1)
    bmla.setCritCutBLPairing(      0)

    # Set cut values
    bmla.setElPtCut(  lep_pt_cut, -1 )
    bmla.setMuPtCut(  lep_pt_cut, -1 )
    bmla.setBJetPtCut(jet_pt_cut, -1 )
    bmla.setMV1Cut(btag_working_point)

    # Turn on/off Z fudge factor
    bmla.setDoZKFactor(True)
    # bmla.setDoZKFactor(False)

    # Turn on/off detailed B-L histograms
    bmla.setDoDetailedBLHists(False)

    # prepare tools and run analysis loop
    print 'preparing tools'
    bmla.prepareTools()
    print 'looping -- ', out_file_special_name
    bmla.Loop()
    print 'done looping -- ', out_file_special_name

    # ==============================================================================
    print ''
    print ''
コード例 #2
0
def runIsrAnalysis( file_list
                  , is_data
                  , is_full_sim
                  , tree_name             = 'susy'
                  , dsid                  = 1
                  , out_file_special_name = None
                  , is_tnt                = False
                  , fancy_progress_bar    = True
                  , job_num               = 0
                  , total_num_jobs        = 1
                  , total_num_events      = 0
                  , total_num_entries     = 0
                  , out_dir               = './'
                  ):
    # ==============================================================================
    # If the num events are not set and we are running over TNTs, get the total NumEvents
    print 'total num events: %s' % total_num_events
    if total_num_events == 0 and is_tnt:
        print 'Getting total num unskimmed events'
        print '  -- this is slow. you should do this once per data set - not for each stream!'
        total_num_events = getTotalNumEvents(file_list, is_tnt)

    print "Adding files to TChain"
    t = RunHelpers.getTChain(file_list, tree_name)

    # ==============================================================================
    print 'Creating IsrAnalysis object'
    isra = ROOT.PennSusyFrame.IsrAnalysis(t)

    print 'configuring IsrAnalysis object'
    if out_file_special_name is not None:
        isra.setProcessLabel(out_file_special_name)
    isra.setFancyProgressBar(False)

    # set is data or MC
    if is_data:
        isra.setIsData()
    else:
        isra.setIsMC()

        xsec_dict = CrossSectionReader.getCrossSection(dsid)
        if xsec_dict is None:
            return
        isra.setCrossSection(xsec_dict['xsec'])
        isra.setKFactor(     xsec_dict['kfac'])
        isra.setFilterEff(   xsec_dict['eff'])

        isra.setTotalNumEntries(    total_num_entries )
        isra.setNumGeneratedEvents( total_num_events  )

    # set is full sim/fast sim
    if is_full_sim:
        isra.setFullSim()

    # set start entry and max number events
    if total_num_jobs > 1:
        print 'total num jobs (%s) > 1' % total_num_jobs
        this_job_events = int(math.ceil( float(total_num_entries) / total_num_jobs ))
        this_job_start = job_num*this_job_events

        print 'total num entries; %s' % total_num_entries
        print 'setting max num events: %s' % this_job_events
        print type(this_job_events)
        isra.setMaxNumEvents(this_job_events)
        print 'setting start entry: %s' % this_job_start
        isra.setStartEntry(this_job_start)

    # set out histogram file name
    print 'setting histogram names'
    out_hist_file_name = '%s/Isr.' % out_dir
    if out_file_special_name is not None:
        out_hist_file_name += '%s.' % out_file_special_name
    out_hist_file_name += 'hists'
    if total_num_jobs > 1:
        out_hist_file_name += '.%d_of_%d' % (job_num, total_num_jobs)
    out_hist_file_name += '.root'
    isra.setOutHistFileName(out_hist_file_name)

    # Set critical cuts
    print 'setting critical cuts'
    # isra.setCritCutGrl(            1)
    # isra.setCritCutIncompleteEvent(1)
    # isra.setCritCutLarError(       1)
    # isra.setCritCutTileError(      1)
    # isra.setCritCutTileHotSpot(    1)
    # isra.setCritCutTileTrip(       1)
    # isra.setCritCutBadJetVeto(     1)
    # isra.setCritCutCaloProblemJet( 1)
    # isra.setCritCutPrimaryVertex(  1)
    # isra.setCritCutBadMuonVeto(    1)
    # isra.setCritCutCosmicMuonVeto( 1)
    # isra.setCritCutHFOR(           1)
    # isra.setCritCutMcOverlap(      1)
    # isra.setCritCutGe2Lepton(      1)
    # isra.setCritCut2Lepton(        1)
    # isra.setCritCut2SignalLepton(  1)

    # prepare tools and run analysis loop
    print 'preparing tools'
    isra.prepareTools()
    print 'looping -- %s' % out_file_special_name
    isra.Loop()
    print 'done looping -- %s' % out_file_special_name

    # ==============================================================================
    print ''
    print ''
コード例 #3
0
def runBMinusLTTNTMaker( file_list
                       , is_data
                       , is_egamma_stream
                       , is_full_sim
                       , tree_name             = 'susy'
                       , dsid                  = 1
                       , out_file_special_name = None
                       , is_tnt                = False
                       , fancy_progress_bar    = True
                       , job_num               = 0
                       , total_num_jobs        = 1
                       , total_num_events      = 0
                       , total_num_entries     = 0
                       , sum_mc_event_weights  = 0
                       , out_dir               = './'
                       ):
    # ==============================================================================
    # If the num events are not set and we are running over TNTs, get the total NumEvents
    print 'total num events: %s' % total_num_events
    if total_num_events == 0 and is_tnt:
        print 'Getting total num unskimmed events'
        print '  -- this is slow. you should do this once per data set - not for each stream!'
        total_num_events = getTotalNumEvents(file_list, is_tnt)

    print "Adding files to TChain"
    t = RunHelpers.getTChain(file_list, tree_name)

    # ==============================================================================
    print 'Creating BMinusLTTNTMaker object'
    bmlttntm = ROOT.PennSusyFrame.BMinusLTTNTMaker(t)

    print 'configuring BMinusLTTNTMaker object'
    if out_file_special_name is not None:
        bmlttntm.setProcessLabel(out_file_special_name)
    bmlttntm.setFancyProgressBar(False)

    # set is data or MC
    if is_data:
        bmlttntm.setIsData()
    else:
        bmlttntm.setIsMC()

        xsec_dict = CrossSectionReader.getCrossSection(dsid)
        if xsec_dict is None:
            return
        bmlttntm.setCrossSection(xsec_dict['xsec'])
        bmlttntm.setKFactor(     xsec_dict['kfac'])
        bmlttntm.setFilterEff(   xsec_dict['eff'])

        print 'Setting TotalNumEntries:   '  , total_num_entries
        print 'Setting NumGeneratedEvents: ' , total_num_events
        print 'Setting SumMCEventWeights:  ' , sum_mc_event_weights

        bmlttntm.setTotalNumEntries(    total_num_entries )
        bmlttntm.setNumGeneratedEvents( total_num_events  )
        bmlttntm.setSumMCEventWeights(  sum_mc_event_weights )

    # set is full sim/fast sim
    if is_full_sim:
        bmlttntm.setFullSim()

    # set start entry and max number events
    if total_num_jobs > 1:
        print 'total num jobs (%s) > 1' % total_num_jobs
        this_job_events = int(math.ceil( float(total_num_entries) / total_num_jobs ))
        this_job_start = job_num*this_job_events

        print 'total num entries; %s' % total_num_entries
        print 'setting max num events: %s' % this_job_events
        print type(this_job_events)
        bmlttntm.setMaxNumEvents(this_job_events)
        print 'setting start entry: %s' % this_job_start
        bmlttntm.setStartEntry(this_job_start)

    # set out histogram file name
    print 'setting histogram names'
    out_ntup_file_name = '%s/BMinusL.' % out_dir
    if out_file_special_name is not None:
        out_ntup_file_name += '%s.' % out_file_special_name
    out_ntup_file_name += 'tnt'
    if total_num_jobs > 1:
        out_ntup_file_name += '.%d_of_%d' % (job_num, total_num_jobs)
    out_ntup_file_name += '.root'
    bmlttntm.setOutNtupleFileName(out_ntup_file_name)

    # # Set critical cuts
    # print 'setting critical cuts'
    # bmlttntm.setCritCutGrl(            1)
    # bmlttntm.setCritCutIncompleteEvent(1)
    # bmlttntm.setCritCutLarError(       1)
    # bmlttntm.setCritCutTileError(      1)
    # bmlttntm.setCritCutTileHotSpot(    1)
    # bmlttntm.setCritCutTileTrip(       1)
    # bmlttntm.setCritCutBadJetVeto(     1)
    # bmlttntm.setCritCutCaloProblemJet( 1)
    # bmlttntm.setCritCutPrimaryVertex(  1)
    # bmlttntm.setCritCutBadMuonVeto(    1)
    # bmlttntm.setCritCutCosmicMuonVeto( 1)
    # bmlttntm.setCritCutHFOR(           1)
    # bmlttntm.setCritCutMcOverlap(      1)
    # bmlttntm.setCritCutGe2Lepton(      1)
    # bmlttntm.setCritCut2Lepton(        0)
    # bmlttntm.setCritCut2SignalLepton(  0)
    # bmlttntm.setCritCut2BJets(         0)
    # bmlttntm.setCritCutBadJetVeto(     1)
    # bmlttntm.setCritCutBLPairing(      0)

    # Set cut values
    bmlttntm.setElPtCut(  lep_pt_cut, -1     )
    bmlttntm.setMuPtCut(  lep_pt_cut, -1     )
    bmlttntm.setBJetPtCut(jet_pt_cut, -1     )
    bmlttntm.setMV1Cut(btag_working_point)

    # prepare tools and run analysis loop
    print 'preparing tools'
    bmlttntm.prepareTools()
    print 'looping -- %s' % out_file_special_name
    bmlttntm.Loop()
    print 'done looping -- %s' % out_file_special_name

    # ==============================================================================
    print ''
    print ''
コード例 #4
0
file_list = [ "~/workdir/susyd3pd/mc12_8TeV.105200.McAtNloJimmy_CT10_ttbar_LeptonFilter.merge.NTUP_SUSY.e1513_s1499_s1504_r3945_r3549_p1512_tid01267519_00/NTUP_SUSY.01267519._000001.root.1"
            ]
#data
#file_list = [ "~/workdir/susyd3pd/data12_8TeV.00200982.physics_Egamma.merge.NTUP_SUSYSKIM.r4065_p1278_p1542_tid01274350_00/NTUP_SUSYSKIM.01274350._000001.root.1"
#]

t = ROOT.TChain('susy')
for fl in file_list:
    t.AddFile(fl)

# ==============================================================================
ewa = ROOT.PennSusyFrame.EwkAnalysis(t)
ewa.setPrintEventDetails(False)
#ewa.setMaxNumEvents(10)
ewa.setIsMC()
xsec_dict = CrossSectionReader.getCrossSection(105200)
if xsec_dict is None:
    print 'Failed to CrossSection'
    exit
ewa.setCrossSection(xsec_dict['xsec'])
ewa.setKFactor(     xsec_dict['kfac'])
ewa.setFilterEff(   xsec_dict['eff'])

#ewa.setTotalNumEntries(    total_num_entries )
ewa.setNumGeneratedEvents(14990603)
ewa.prepareTools()
ewa.Loop()

# ==============================================================================
print ''
print ''
コード例 #5
0
def runEwkAnalysis( file_list
                  , is_data
                  , is_full_sim
                  , tree_name = 'susy'
                  , dsid = 1
                  , out_file_special_name = None
                  , is_tnt = False
                  ):
    # ==============================================================================
    print 'loading packages'
    ROOT.gROOT.ProcessLine(".x ${ROOTCOREDIR}/scripts/load_packages.C")
    print 'loading libraries'
    ROOT.gSystem.Load('${BASE_WORK_DIR}/lib/libProgressBar.so')
    ROOT.gSystem.Load('${BASE_WORK_DIR}/lib/libCutFlowTracker.so')
    ROOT.gSystem.Load('${BASE_WORK_DIR}/lib/libHistogramHandlers.so')
    ROOT.gSystem.Load('${BASE_WORK_DIR}/lib/libPennSusyFrameCore.so')
    ROOT.gSystem.Load('${BASE_WORK_DIR}/lib/libEwkAnalysis.so')

    # ==============================================================================
    print "Adding files to TChain"
    t = ROOT.TChain(tree_name)
    total_num_events = 0
    for fl in file_list:
        print 'Adding file: %s' % fl
        t.AddFile(fl)

        if is_tnt:
            this_file = ROOT.TFile(fl)
            total_num_events += int(this_file.Get('TotalNumEvents')[0])
            this_file.Close()

    # ==============================================================================
    ewa = ROOT.PennSusyFrame.EwkAnalysis(t)

    # set is data or MC
    if is_data:
        ewa.setIsData()
    else:
        ewa.setIsMC()

        xsec_dict = CrossSectionReader.getCrossSection(dsid)
        if xsec_dict is None:
            return
        ewk.setCrossSection(xsec_dict['xsec'])
        ewk.setKFactor(     xsec_dict['kfac'])
        ewk.setFilterEff(   xsec_dict['eff'])

        ewk.setNumGeneratedEvents( total_num_events )

    # set is full sim/fast sim
    if is_full_sim:
        ewa.setFullSim()

    # set out histogram file name
    out_hist_file_name = 'Ewk.'
    if out_file_special_name is not None:
        out_hist_file_name += '%s.' % out_file_special_name
    out_hist_file_name += 'hists.root'
    bmla.setOutHistFileName(out_hist_file_name)

    # Set critical cuts
    ewa.setCritCutGrl(            1)
    ewa.setCritCutIncompleteEvent(1)
    ewa.setCritCutLarError(       1)
    ewa.setCritCutTileError(      1)
    ewa.setCritCutTileHotSpot(    1)
    ewa.setCritCutTileTrip(       1)
    ewa.setCritCutBadJetVeto(     1)
    ewa.setCritCutCaloProblemJet( 1)
    ewa.setCritCutPrimaryVertex(  1)
    ewa.setCritCutBadMuonVeto(    1)
    ewa.setCritCutCosmicMuonVeto( 1)
    ewa.setCritCutHFOR(           1)
    ewa.setCritCutMcOverlap(      1)
    ewa.setCritCutGe2Lepton(      1)
    ewa.setCritCut2Lepton(        1)
    ewa.setCritCut2SignalLepton(  1)

    # prepare tools and run analysis loop
    ewa.prepareTools()
    ewa.Loop()

    # ==============================================================================
    print ''
    print ''