Exemple #1
0
class QQExtractor:
    '''
    Extracts the Q-Q corrections for photon ID variables.
    '''

    #__________________________________________________________________________
    def __init__(self,
                 varname,
                 raw_name,
                 target_name,
                 option='noskim',
                 max_entries=-1,
                 prescale=1,
                 prescale_phase=0,
                 rho=0.7):
        #print 'DEBUG', self.__class__.__name__, '__init__'
        common_args = [varname, option, max_entries, prescale, prescale_phase]
        self.raw = DataSource(raw_name, *common_args)
        self.target = DataSource(target_name, *common_args)
        self.corrector = PhotonIdCorrector(self.raw.data, self.target.data,
                                           rho)
        self.postprocess_corrector()

    ## End of QQExtractor.__init__(..)

    #__________________________________________________________________________
    def postprocess_corrector(self):
        '''
        Customizes corrector name and title and updetes raw and target sources
        with corrector pdfs.
        '''
        name = '_'.join([self.raw.xvar.GetName(), 'qq'])
        title = ' '.join([
            self.raw.xvar.GetTitle(),
            self.raw.name.split('-')[0].capitalize(), 'to',
            self.target.name.split('-')[0].capitalize(), 'Q-Q Corrector'
        ])
        self.corrector.SetName(name)
        self.corrector.SetTitle(title)
        self.raw.pdf = self.corrector.xpdf
        self.target.pdf = self.corrector.ypdf

    ## End of QQExtractor.postprocess_corrector()

    #__________________________________________________________________________
    def make_plots(self):
        '''
        Makes plots of the raw and target source, the corrector function,
        and the corrected data.
        '''
        for src in [self.raw, self.target]:
            plot = self.get_plot_of_source(src)
            canvases.next(src.varname + '_' + src.data.GetName()).SetGrid()
            self.draw_and_append(plot)
            ## Also with log scale on y-axis
            c = canvases.next(src.varname + '_' + src.data.GetName() + '_logy')
            c.SetGrid()
            c.SetLogy()
            plot.Draw()

        canvases.next(self.corrector.GetName()).SetGrid()
        self.draw_and_append(self.corrector.get_correction_plot())

        canvases.next(self.corrector.GetName() + '_adiff').SetGrid()
        self.draw_and_append(self.corrector.get_absolute_difference_plot())

        canvases.next(self.corrector.GetName() + '_rdiff').SetGrid()
        self.draw_and_append(self.corrector.get_relative_difference_plot())

        plot = self.corrector.get_validation_plot()
        cname = self.corrector.GetName() + '_validation'
        canvases.next(cname).SetGrid()
        self.draw_and_append(plot)
        ## Also y-axis log-scale
        canvases.next(cname + '_logy').SetGrid()
        canvases.canvases[-1].SetLogy()
        plot.Draw()

    ## End of QQExtractor.make_plots(..)

    #__________________________________________________________________________
    def get_plot_of_source(self, source):
        plot = source.xvar.frame(roo.Title(source.data.GetTitle()))
        source.data.plotOn(plot)
        source.pdf.plotOn(plot)
        return plot

    ## End of QQExtractor.get_plot_of_source()

    #__________________________________________________________________________
    def draw_and_append(self, plot):
        if not hasattr(self, 'plots'):
            self.plots = []
        plot.Draw()
        self.plots.append(plot)

    ## End of QQExtractor.draw_and_append(plot)

    #__________________________________________________________________________
    def write_corrector_to_file(self, file_name):
        self.corrector.write_to_file(file_name, False)
        ## Also as an interpolation graph
        graph = self.corrector.get_interpolation_graph()
        out_file = ROOT.TFile.Open(file_name, "update")
        graph.Write()
        out_file.Write()
        out_file.Close()
Exemple #2
0
class QQExtractor:
    '''
    Extracts the Q-Q corrections for photon ID variables.
    '''
    #__________________________________________________________________________
    def __init__(self, varname, raw_name, target_name, option='noskim',
                 max_entries=-1, prescale=1, prescale_phase=0, rho=0.7):
        #print 'DEBUG', self.__class__.__name__, '__init__' 
        common_args = [varname, option, max_entries, prescale, prescale_phase]
        self.raw    = DataSource(raw_name   , *common_args)
        self.target = DataSource(target_name, *common_args)
        self.corrector = PhotonIdCorrector(self.raw.data, 
                                           self.target.data, rho)
        self.postprocess_corrector()
    ## End of QQExtractor.__init__(..)
    
    #__________________________________________________________________________
    def postprocess_corrector(self):
        '''
        Customizes corrector name and title and updetes raw and target sources
        with corrector pdfs.
        '''
        name = '_'.join([self.raw.xvar.GetName(), 'qq'])
        title = ' '.join([self.raw.xvar.GetTitle(),
                          self.raw   .name.split('-')[0].capitalize(), 'to',
                          self.target.name.split('-')[0].capitalize(),
                          'Q-Q Corrector'])                 
        self.corrector.SetName(name)
        self.corrector.SetTitle(title)
        self.raw   .pdf = self.corrector.xpdf
        self.target.pdf = self.corrector.ypdf
    ## End of QQExtractor.postprocess_corrector()
    
    #__________________________________________________________________________
    def make_plots(self):
        '''
        Makes plots of the raw and target source, the corrector function,
        and the corrected data.
        '''
        for src in [self.raw, self.target]:
            plot = self.get_plot_of_source(src)
            canvases.next(src.varname + '_' + src.data.GetName()).SetGrid()
            self.draw_and_append(plot)
            ## Also with log scale on y-axis
            c = canvases.next(src.varname + '_' + src.data.GetName() + '_logy')
            c.SetGrid()
            c.SetLogy()
            plot.Draw()
        
        canvases.next(self.corrector.GetName()).SetGrid()
        self.draw_and_append(self.corrector.get_correction_plot())
        
        canvases.next(self.corrector.GetName() + '_adiff').SetGrid()
        self.draw_and_append(self.corrector.get_absolute_difference_plot())
        
        canvases.next(self.corrector.GetName() + '_rdiff').SetGrid()
        self.draw_and_append(self.corrector.get_relative_difference_plot())
        
        plot = self.corrector.get_validation_plot()
        cname = self.corrector.GetName() + '_validation'
        canvases.next(cname).SetGrid()
        self.draw_and_append(plot)
        ## Also y-axis log-scale
        canvases.next(cname + '_logy').SetGrid()
        canvases.canvases[-1].SetLogy()
        plot.Draw()
    ## End of QQExtractor.make_plots(..)
    
    #__________________________________________________________________________
    def get_plot_of_source(self, source):
        plot = source.xvar.frame(roo.Title(source.data.GetTitle()))
        source.data.plotOn(plot)
        source.pdf.plotOn(plot)        
        return plot
    ## End of QQExtractor.get_plot_of_source()
    
    #__________________________________________________________________________
    def draw_and_append(self, plot):
        if not hasattr(self, 'plots'):
            self.plots = []
        plot.Draw()
        self.plots.append(plot)
    ## End of QQExtractor.draw_and_append(plot)
    
    #__________________________________________________________________________
    def write_corrector_to_file(self, file_name):
        self.corrector.write_to_file(file_name, False)
        ## Also as an interpolation graph
        graph = self.corrector.get_interpolation_graph()
        out_file = ROOT.TFile.Open(file_name, "update")
        graph.Write()
        out_file.Write()
        out_file.Close()