Esempio n. 1
0
def set_root_defaults( set_batch = True, msg_ignore_level = 1001 ):
    # set to batch mode (or not)
    gROOT.SetBatch( set_batch )
    # ignore warnings
    gROOT.ProcessLine( 'gErrorIgnoreLevel = %d;' % msg_ignore_level )
    # turn of the stupid ROOT pointer handling, seriously
    TH1F.AddDirectory(False)
    histogram_properties.x_limits = [bin_edges[0], bin_edges[-1]]

    if log_plots:
        histogram_properties.set_log_y = True
        histogram_properties.name += '_log'

    compare_measurements( models, measurements, show_measurement_errors = True,
                          histogram_properties = histogram_properties,
                          save_folder = plot_location, save_as = ['pdf'] )
    
    
    
if __name__ == '__main__':
    set_root_defaults()
    # Do not let ROOT handle pointers. That just asks for trouble.
    TH1F.AddDirectory( False )

    parser = OptionParser()
    parser.add_option( "-p", "--path", dest = "data_path", default = 'data/absolute_eta_M3_angle_bl',
                  help = "set input path for data JSON files (for data test)" )
    parser.add_option( "-o", "--output-folder", dest = "output_folder", default = 'plots/unfolding_tests/',
                      help = "set path to save plots" )
    parser.add_option( "-c", "--centre-of-mass-energy", dest = "CoM", default = 8, type = int,
                      help = "set the centre of mass energy for analysis. Default = 8 [TeV]" )
    parser.add_option( "-f", "--load-fakes", dest = "load_fakes", action = "store_true",
                      help = "Load fakes histogram and perform manual fake subtraction in TSVDUnfold" )
    parser.add_option( "-u", "--unfolding-method", dest = "unfolding_method", default = 'RooUnfoldSvd',
                      help = "Unfolding method: RooUnfoldSvd (default), TSVDUnfold, RooUnfoldTUnfold, RooUnfoldInvert, RooUnfoldBinByBin, RooUnfoldBayes" )
    parser.add_option( "-m", "--metType", dest = "metType", default = 'type1',
                      help = "set MET type used in the analysis of MET-dependent variables" )
    parser.add_option( "-t", "--test", dest = "test", default = 'closure',
Esempio n. 3
0
# ROOT imports
import ROOT
from ROOT import TChain, TH1F, TFile, vector, gROOT
# custom ROOT classes 
from ROOT import alp, ComposableSelector, CounterOperator, TriggerOperator, JetFilterOperator, BTagFilterOperator, JetPairingOperator, DiJetPlotterOperator
from ROOT import BaseOperator, EventWriterOperator, IsoMuFilterOperator, MetFilterOperator, JetPlotterOperator, FolderOperator, MiscellPlotterOperator
from ROOT import ThrustFinderOperator, HemisphereProducerOperator, HemisphereWriterOperator, MCTruthOperator

# imports from ../python 
from Analysis.alp_analysis.alpSamples  import samples
from Analysis.alp_analysis.samplelists import samlists
from Analysis.alp_analysis.triggerlists import triggerlists
from Analysis.alp_analysis.workingpoints import wps

TH1F.AddDirectory(0)

# parsing parameters
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-e", "--numEvts", help="number of events", type=int, default='-1')
parser.add_argument("-s", "--samList", help="sample list", default="")
parser.add_argument("-v", "--ntuplesVer", help="input sub-folder", default="")
parser.add_argument("-o", "--oDir", help="output directory", default="")
parser.add_argument("--btag", help="which btag algo", default='cmva')
args = parser.parse_args()

# exe parameters
numEvents  =  args.numEvts
if not args.samList: samList = ['SM']  # list of samples to be processed - append multiple lists
else: samList = [args.samList]
Esempio n. 4
0
import sys, time

# Enabling root in batch mode
sys.argv.append('-b')

from ROOT import gPad, TCanvas, TFile, TH1F, THStack, TLatex, TLegend

from neat.nn import nn_cpp as nn

from Common import *
from Processor import *
from Util import *
from WebpageWriter import *

# IMPORTANT: Transfer the ownership to the user (not TFile)
TH1F.AddDirectory(ROOT.kFALSE)

# Style features
ROOT.gStyle.SetEndErrorSize(3)
ROOT.gStyle.SetErrorX(0.5)


class PlotProducer(Processor):

    ## Constructor
    def __init__(self):

        super(PlotProducer, self).__init__()
        # Initializing allowed processor parameters
        self.defineParameter(
            'input', 'Provides the input directory with a neat histograms.')
Esempio n. 5
0
    def __init__(self, cfg_ana, cfg_comp, looper_name):
        """
			Constructor

			Arguments:
			cfg_ana: passed to the base class
			cfg_comp: passed to the base class
			looper_name: passed to the base class
		"""
        super(CommonAnalyzer, self).__init__(cfg_ana, cfg_comp, looper_name)

        self.rootfile = TFile('/'.join([self.dirName, 'output.root']),
                              'recreate')

        # tree to store smeared values
        self.tree = Tree(self.cfg_ana.tree_name, self.cfg_ana.tree_title)
        self.tree.var('n_particles')
        self.tree.var('event_number')
        self.tree.var('pv_x')
        self.tree.var('pv_y')
        self.tree.var('pv_z')
        self.tree.var('sv_x')
        self.tree.var('sv_y')
        self.tree.var('sv_z')
        self.tree.var('tv_tauplus_x')
        self.tree.var('tv_tauplus_y')
        self.tree.var('tv_tauplus_z')
        self.tree.var('tv_tauminus_x')
        self.tree.var('tv_tauminus_y')
        self.tree.var('tv_tauminus_z')
        self.tree.var('k_px')
        self.tree.var('k_py')
        self.tree.var('k_pz')
        self.tree.var('k_q')
        self.tree.var('pi_kstar_px')
        self.tree.var('pi_kstar_py')
        self.tree.var('pi_kstar_pz')
        self.tree.var('pi_kstar_q')
        self.tree.var('pi1_tauplus_px')
        self.tree.var('pi1_tauplus_py')
        self.tree.var('pi1_tauplus_pz')
        self.tree.var('pi1_tauplus_q')
        self.tree.var('pi2_tauplus_px')
        self.tree.var('pi2_tauplus_py')
        self.tree.var('pi2_tauplus_pz')
        self.tree.var('pi2_tauplus_q')
        self.tree.var('pi3_tauplus_px')
        self.tree.var('pi3_tauplus_py')
        self.tree.var('pi3_tauplus_pz')
        self.tree.var('pi3_tauplus_q')
        self.tree.var('pi1_tauminus_px')
        self.tree.var('pi1_tauminus_py')
        self.tree.var('pi1_tauminus_pz')
        self.tree.var('pi1_tauminus_q')
        self.tree.var('pi2_tauminus_px')
        self.tree.var('pi2_tauminus_py')
        self.tree.var('pi2_tauminus_pz')
        self.tree.var('pi2_tauminus_q')
        self.tree.var('pi3_tauminus_px')
        self.tree.var('pi3_tauminus_py')
        self.tree.var('pi3_tauminus_pz')
        self.tree.var('pi3_tauminus_q')

        # MC truth tree
        self.mc_truth_tree = Tree(self.cfg_ana.mc_truth_tree_name,
                                  self.cfg_ana.mc_truth_tree_title)

        # statistics
        self.counter = 0  # Total number of processed decays
        self.pb_counter = 0  # Number of events with B momentum > 25 GeV
        self.pvsv_distance_counter = 0  # Number of events with distance between PV and SV > 1 mm
        self.max_svtv_distance_counter = 0  # Number of events with any distance between SV and TV > 0.5 mm
        # histograms to visualize cuts
        TH1F.AddDirectory(False)  # not to link histograms to files
        gROOT.ProcessLine('.x ' + self.cfg_ana.stylepath)  # nice looking plots
        self.pb_hist = TH1F('pb_hist', 'P_{B}', 100, 0, 50)
        self.pvsv_distance_hist = TH1F('pvsv_distance_hist', 'FD_{B}', 100, 0,
                                       10)
        self.max_svtv_distance_hist = TH1F('max_svtv_distance_hist',
                                           'Max FD_{#tau}', 100, 0, 5)

        # time
        self.start_time = None
        self.last_timestamp = None
Esempio n. 6
0
    def beginLoop(self, setup):
        """Overriden base class function"""

        self.rootfile = TFile('/'.join([self.dirName, 'output.root']),
                              'recreate')

        # tree to store MC truth values and its branches
        self.mc_truth_tree = Tree(self.cfg_ana.mc_truth_tree_name,
                                  self.cfg_ana.mc_truth_tree_title)
        self.mc_truth_tree.var('n_particles')
        self.mc_truth_tree.var('event_number')
        self.mc_truth_tree.var('pv_x')
        self.mc_truth_tree.var('pv_y')
        self.mc_truth_tree.var('pv_z')
        self.mc_truth_tree.var('sv_x')
        self.mc_truth_tree.var('sv_y')
        self.mc_truth_tree.var('sv_z')
        self.mc_truth_tree.var('tv_tauplus_x')
        self.mc_truth_tree.var('tv_tauplus_y')
        self.mc_truth_tree.var('tv_tauplus_z')
        self.mc_truth_tree.var('tv_tauminus_x')
        self.mc_truth_tree.var('tv_tauminus_y')
        self.mc_truth_tree.var('tv_tauminus_z')
        self.mc_truth_tree.var('b_px')
        self.mc_truth_tree.var('b_py')
        self.mc_truth_tree.var('b_pz')
        self.mc_truth_tree.var('kstar_px')
        self.mc_truth_tree.var('kstar_py')
        self.mc_truth_tree.var('kstar_pz')
        self.mc_truth_tree.var('k_px')
        self.mc_truth_tree.var('k_py')
        self.mc_truth_tree.var('k_pz')
        self.mc_truth_tree.var('k_q')
        self.mc_truth_tree.var('pi_kstar_px')
        self.mc_truth_tree.var('pi_kstar_py')
        self.mc_truth_tree.var('pi_kstar_pz')
        self.mc_truth_tree.var('pi_kstar_q')
        self.mc_truth_tree.var('tauplus_px')
        self.mc_truth_tree.var('tauplus_py')
        self.mc_truth_tree.var('tauplus_pz')
        self.mc_truth_tree.var('pi1_tauplus_px')
        self.mc_truth_tree.var('pi1_tauplus_py')
        self.mc_truth_tree.var('pi1_tauplus_pz')
        self.mc_truth_tree.var('pi1_tauplus_q')
        self.mc_truth_tree.var('pi2_tauplus_px')
        self.mc_truth_tree.var('pi2_tauplus_py')
        self.mc_truth_tree.var('pi2_tauplus_pz')
        self.mc_truth_tree.var('pi2_tauplus_q')
        self.mc_truth_tree.var('pi3_tauplus_px')
        self.mc_truth_tree.var('pi3_tauplus_py')
        self.mc_truth_tree.var('pi3_tauplus_pz')
        self.mc_truth_tree.var('pi3_tauplus_q')
        self.mc_truth_tree.var('nu_tauplus_px')
        self.mc_truth_tree.var('nu_tauplus_py')
        self.mc_truth_tree.var('nu_tauplus_pz')
        self.mc_truth_tree.var('tauminus_px')
        self.mc_truth_tree.var('tauminus_py')
        self.mc_truth_tree.var('tauminus_pz')
        self.mc_truth_tree.var('pi1_tauminus_px')
        self.mc_truth_tree.var('pi1_tauminus_py')
        self.mc_truth_tree.var('pi1_tauminus_pz')
        self.mc_truth_tree.var('pi1_tauminus_q')
        self.mc_truth_tree.var('pi2_tauminus_px')
        self.mc_truth_tree.var('pi2_tauminus_py')
        self.mc_truth_tree.var('pi2_tauminus_pz')
        self.mc_truth_tree.var('pi2_tauminus_q')
        self.mc_truth_tree.var('pi3_tauminus_px')
        self.mc_truth_tree.var('pi3_tauminus_py')
        self.mc_truth_tree.var('pi3_tauminus_pz')
        self.mc_truth_tree.var('pi3_tauminus_q')
        self.mc_truth_tree.var('nu_tauminus_px')
        self.mc_truth_tree.var('nu_tauminus_py')
        self.mc_truth_tree.var('nu_tauminus_pz')

        # the same for smeared values
        self.tree = Tree(self.cfg_ana.tree_name, self.cfg_ana.tree_title)
        self.tree.var('n_particles')
        self.tree.var('event_number')
        self.tree.var('pv_x')
        self.tree.var('pv_y')
        self.tree.var('pv_z')
        self.tree.var('sv_x')
        self.tree.var('sv_y')
        self.tree.var('sv_z')
        self.tree.var('tv_tauplus_x')
        self.tree.var('tv_tauplus_y')
        self.tree.var('tv_tauplus_z')
        self.tree.var('tv_tauminus_x')
        self.tree.var('tv_tauminus_y')
        self.tree.var('tv_tauminus_z')
        self.tree.var('k_px')
        self.tree.var('k_py')
        self.tree.var('k_pz')
        self.tree.var('k_q')
        self.tree.var('pi_kstar_px')
        self.tree.var('pi_kstar_py')
        self.tree.var('pi_kstar_pz')
        self.tree.var('pi_kstar_q')
        self.tree.var('pi1_tauplus_px')
        self.tree.var('pi1_tauplus_py')
        self.tree.var('pi1_tauplus_pz')
        self.tree.var('pi1_tauplus_q')
        self.tree.var('pi2_tauplus_px')
        self.tree.var('pi2_tauplus_py')
        self.tree.var('pi2_tauplus_pz')
        self.tree.var('pi2_tauplus_q')
        self.tree.var('pi3_tauplus_px')
        self.tree.var('pi3_tauplus_py')
        self.tree.var('pi3_tauplus_pz')
        self.tree.var('pi3_tauplus_q')
        self.tree.var('pi1_tauminus_px')
        self.tree.var('pi1_tauminus_py')
        self.tree.var('pi1_tauminus_pz')
        self.tree.var('pi1_tauminus_q')
        self.tree.var('pi2_tauminus_px')
        self.tree.var('pi2_tauminus_py')
        self.tree.var('pi2_tauminus_pz')
        self.tree.var('pi2_tauminus_q')
        self.tree.var('pi3_tauminus_px')
        self.tree.var('pi3_tauminus_py')
        self.tree.var('pi3_tauminus_pz')
        self.tree.var('pi3_tauminus_q')

        # statistics
        self.counter = 0  # Total number of processed decays
        self.pb_counter = 0  # Number of events with B momentum > 25 GeV
        self.pvsv_distance_counter = 0  # Number of events with distance between PV and SV > 1 mm
        self.max_svtv_distance_counter = 0  # Number of events with any distance between SV and TV > 0.5 mm
        # histograms to visualize cuts
        TH1F.AddDirectory(False)  # not to link histograms to files
        gROOT.ProcessLine('.x ' + self.cfg_ana.stylepath)  # nice looking plots
        self.pb_hist = TH1F('pb_hist', 'P_{B}', 100, 0, 50)
        self.pvsv_distance_hist = TH1F('pvsv_distance_hist', 'FD_{B}', 100, 0,
                                       10)
        self.max_svtv_distance_hist = TH1F('max_svtv_distance_hist',
                                           'Max FD_{#tau}', 100, 0, 5)

        super(SignalAnalyzer, self).beginLoop(setup)

        #time
        self.start_time = time.time()
        self.last_timestamp = time.time()