Beispiel #1
0
 def _generate(self):
     spectrum = spectrum_util.default_energy()
     for energy_bin in range(1, spectrum.GetNbinsX() + 1):
         T = spectrum.GetBinCenter(energy_bin)
         Ne = 3.28229 - 0.219904 * T + 0.00981048 * T**2 - 0.0105927 * T**3 + 0.00151589 * T**4 - 7.66537e-05 * T**5 + 1.31912e-06 * T**6
         spectrum.SetBinContent(energy_bin, Ne)
     spectrum.Scale(1.0 / spectrum.GetSumOfWeights())
     spectrum.SetName(self.get_name())
     return spectrum
Beispiel #2
0
 def _generate(self):
     spectrum = spectrum_util.default_energy()
     for energy_bin in range(1, spectrum.GetNbinsX() + 1):
         T = spectrum.GetBinCenter(energy_bin)
         Ne = 3.28229 - 0.219904 * T + 0.00981048 * T**2 - 0.0105927 * T**3 + 0.00151589 * T**4 - 7.66537e-05 * T**5 + 1.31912e-06 * T**6
         spectrum.SetBinContent(energy_bin, Ne)
     spectrum.Scale(1.0 / spectrum.GetSumOfWeights())
     spectrum.SetName(self.get_name())
     return spectrum
Beispiel #3
0
 def _generate(self):
     spectrum = spectrum_util.default_energy()
     for energy_bin in range(1, spectrum.GetNbinsX() + 1):
         T = spectrum.GetBinCenter(energy_bin)
         Ne = 0
         if T <= 0.65 + spectrum.GetBinWidth(energy_bin):
             Ne = 3439.38 - 1531.56 * T + 654.453 * T**2
         spectrum.SetBinContent(energy_bin, Ne)
     spectrum.Scale(1.0 / spectrum.GetSumOfWeights())
     spectrum.SetName(self.get_name())
     return spectrum
Beispiel #4
0
 def _generate(self):
     spectrum = spectrum_util.default_energy()
     for energy_bin in range(1, spectrum.GetNbinsX() + 1):
         T = spectrum.GetBinCenter(energy_bin)
         Ne = 0
         if T <= 1.2 + spectrum.GetBinWidth(energy_bin):
             Ne = 100 - 23.85 * T + 6.84 * T**2
         spectrum.SetBinContent(energy_bin, Ne)
     spectrum.Scale(1.0 / spectrum.GetSumOfWeights())
     spectrum.SetName(self.get_name())
     return spectrum
Beispiel #5
0
 def _generate(self):
     spectrum = spectrum_util.default_energy()
     for energy_bin in range(1, spectrum.GetNbinsX() + 1):
         T = spectrum.GetBinCenter(energy_bin)
         Ne = 0
         if T <= 1.2 + spectrum.GetBinWidth(energy_bin):
             Ne = 100 - 23.85 * T + 6.84 * T**2
         spectrum.SetBinContent(energy_bin, Ne)
     spectrum.Scale(1.0 / spectrum.GetSumOfWeights())
     spectrum.SetName(self.get_name())
     return spectrum
Beispiel #6
0
 def _generate(self):
     spectrum = spectrum_util.default_energy()
     for energy_bin in range(1, spectrum.GetNbinsX() + 1):
         T = spectrum.GetBinCenter(energy_bin)
         Ne = 0
         if T <= 0.65 + spectrum.GetBinWidth(energy_bin):
             Ne = 3439.38 - 1531.56 * T + 654.453 * T**2
         spectrum.SetBinContent(energy_bin, Ne)
     spectrum.Scale(1.0 / spectrum.GetSumOfWeights())
     spectrum.SetName(self.get_name())
     return spectrum
Beispiel #7
0
def neutrinoless_double_beta(q, probability):
    """ Return a neutrinoless double beta spectrum of probability."""
    spectrum = spectrum_util.default_energy()
    for energy_bin in range(1, spectrum.GetNbinsX() + 1):
        T = spectrum.GetBinCenter(energy_bin)
        Ne = 0
        # Delta function at end point
        if math.fabs(T - q) < spectrum.GetBinWidth(energy_bin):
            Ne = 1
        spectrum.SetBinContent(energy_bin, Ne)
    spectrum.Scale(probability / spectrum.GetSumOfWeights())
    return spectrum
Beispiel #8
0
def neutrinoless_double_beta(q, probability):
    """ Return a neutrinoless double beta spectrum of probability."""
    spectrum = spectrum_util.default_energy()
    for energy_bin in range(1, spectrum.GetNbinsX() + 1):
        T = spectrum.GetBinCenter(energy_bin)
        Ne = 0
        # Delta function at end point
        if math.fabs(T - q) < spectrum.GetBinWidth(energy_bin):
            Ne = 1
        spectrum.SetBinContent(energy_bin, Ne)
    spectrum.Scale(probability / spectrum.GetSumOfWeights())
    return spectrum
Beispiel #9
0
def alpha(q_alpha, probability):
    """ Return an alpha spectrum of probability."""
    q_alpha = q_alpha / alpha_util.quenching_factor(q_alpha) # Quench the alpha energy
    spectrum = spectrum_util.default_energy()
    for energy_bin in range(1, spectrum.GetNbinsX() + 1):
        T = spectrum.GetBinCenter(energy_bin)
        Ne = 0
        # Delta function at end point
        if math.fabs(T - q_alpha) < spectrum.GetBinWidth(energy_bin):
            Ne = 1
        spectrum.SetBinContent(energy_bin, Ne)
    spectrum.Scale(probability / spectrum.GetSumOfWeights())
    return spectrum
Beispiel #10
0
def alpha(q_alpha, probability):
    """ Return an alpha spectrum of probability."""
    q_alpha = q_alpha / alpha_util.quenching_factor(q_alpha) # Quench the alpha energy
    spectrum = spectrum_util.default_energy()
    for energy_bin in range(1, spectrum.GetNbinsX() + 1):
        T = spectrum.GetBinCenter(energy_bin)
        Ne = 0
        # Delta function at end point
        if math.fabs(T - q_alpha) < spectrum.GetBinWidth(energy_bin):
            Ne = 1
        spectrum.SetBinContent(energy_bin, Ne)
    spectrum.Scale(probability / spectrum.GetSumOfWeights())
    return spectrum
Beispiel #11
0
 def _generate(self):
     spectrum = spectrum_util.default_energy()
     for energy_bin in range(1, spectrum.GetNbinsX() + 1):
         T = spectrum.GetBinCenter(energy_bin)
         Ne = 0
         if T <= 1.0 + spectrum.GetBinWidth(energy_bin):
             Ne = 382.649 - 191.188 * T - 459.082 * T**2 + 307.816 * T**3
         elif T <= 1.5 + spectrum.GetBinWidth(energy_bin):
             Ne = 332.084 - 423.353 * T + 134.585 * T**2
         spectrum.SetBinContent(energy_bin, Ne)
     spectrum.Scale(1.0 / spectrum.GetSumOfWeights())
     spectrum.SetName(self.get_name())
     return spectrum
Beispiel #12
0
 def _generate(self):
     spectrum = spectrum_util.default_energy()
     for energy_bin in range(1, spectrum.GetNbinsX() + 1):
         T = spectrum.GetBinCenter(energy_bin)
         Ne = 0
         if T <= 1.0 + spectrum.GetBinWidth(energy_bin):
             Ne = 382.649 - 191.188 * T - 459.082 * T**2 + 307.816 * T**3
         elif T <= 1.5 + spectrum.GetBinWidth(energy_bin):
             Ne = 332.084 - 423.353 * T + 134.585 * T**2
         spectrum.SetBinContent(energy_bin, Ne)
     spectrum.Scale(1.0 / spectrum.GetSumOfWeights())
     spectrum.SetName(self.get_name())
     return spectrum
Beispiel #13
0
def beta(q_beta, probability):
    """ Return a beta spectrum of probability."""
    spectrum = spectrum_util.default_energy()
    for energy_bin in range(1, spectrum.GetNbinsX() + 1):
        T = spectrum.GetBinCenter(energy_bin)
        Ne = 0
        if T <= q_beta + spectrum.GetBinWidth(energy_bin):
            bin_fraction = 1.0 # Fraction of bin to fill
            if T > q_beta: # Allow for bin widths
                bin_fraction = 1.0 - (T - q_beta) / spectrum.GetBinWidth(energy_bin)
                T = q_beta
            Ne = bin_fraction * math.sqrt(T**2 + 2 * T * constants.me) * (q_beta - T)**2 * (T + constants.me)
        spectrum.SetBinContent(energy_bin, Ne)
    spectrum.Scale(probability / spectrum.GetSumOfWeights())
    return spectrum
Beispiel #14
0
def beta(q_beta, probability):
    """ Return a beta spectrum of probability."""
    spectrum = spectrum_util.default_energy()
    for energy_bin in range(1, spectrum.GetNbinsX() + 1):
        T = spectrum.GetBinCenter(energy_bin)
        Ne = 0
        if T <= q_beta + spectrum.GetBinWidth(energy_bin):
            bin_fraction = 1.0 # Fraction of bin to fill
            if T > q_beta: # Allow for bin widths
                bin_fraction = 1.0 - (T - q_beta) / spectrum.GetBinWidth(energy_bin)
                T = q_beta
            Ne = bin_fraction * math.sqrt(T**2 + 2 * T * constants.me) * (q_beta - T)**2 * (T + constants.me)
        spectrum.SetBinContent(energy_bin, Ne)
    spectrum.Scale(probability / spectrum.GetSumOfWeights())
    return spectrum
Beispiel #15
0
def double_beta(q, probability):
    """ Return a double beta spectrum of probability."""
    spectrum = spectrum_util.default_energy()
    q = q / constants.me
    for energy_bin in range(1, spectrum.GetNbinsX() + 1):
        T = spectrum.GetBinCenter(energy_bin)
        T = T / constants.me
        Ne = 0
        if T <= q + spectrum.GetBinWidth(energy_bin):
            binFraction = 1.0 # Fraction of bin to fill
            if T > q: # Allow for bin widths
                binFraction = 1.0 - (T - q) / spectrum.GetBinWidth(energy_bin)
                T = q
            Ne = binFraction * T * (q - T)**5 * (1 + 2 * T + 4 * T**2 / 3 + T**3 / 3 + T**4 / 30)
        spectrum.SetBinContent(energy_bin, Ne)
    spectrum.Scale(probability / spectrum.GetSumOfWeights())
    return spectrum
Beispiel #16
0
def double_beta(q, probability):
    """ Return a double beta spectrum of probability."""
    spectrum = spectrum_util.default_energy()
    q = q / constants.me
    for energy_bin in range(1, spectrum.GetNbinsX() + 1):
        T = spectrum.GetBinCenter(energy_bin)
        T = T / constants.me
        Ne = 0
        if T <= q + spectrum.GetBinWidth(energy_bin):
            binFraction = 1.0 # Fraction of bin to fill
            if T > q: # Allow for bin widths
                binFraction = 1.0 - (T - q) / spectrum.GetBinWidth(energy_bin)
                T = q
            Ne = binFraction * T * (q - T)**5 * (1 + 2 * T + 4 * T**2 / 3 + T**3 / 3 + T**4 / 30)
        spectrum.SetBinContent(energy_bin, Ne)
    spectrum.Scale(probability / spectrum.GetSumOfWeights())
    return spectrum
Beispiel #17
0
    def plot(self, low_energy, high_energy):
        """ Plot the data."""
        ROOT.gROOT.SetStyle("Plain")
        ROOT.gStyle.SetCanvasBorderMode(0)
        ROOT.gStyle.SetPadBorderMode(0)
        ROOT.gStyle.SetPadColor(0)
        ROOT.gStyle.SetCanvasColor(0)
        ROOT.gStyle.SetOptTitle(0)
        ROOT.gStyle.SetLabelSize(0.06, "xyz")
        ROOT.gStyle.SetTitleSize(0.06, "xyz")
        ROOT.gStyle.SetOptStat(0)
        self._canvas = ROOT.TCanvas()
        self._canvas.Divide(2, 1)  # Two columns, separate legend canvas
        self._legend = ROOT.TLegend(0.05, 0.05, 0.95, 0.95)
        self._legend.SetFillColor(ROOT.kWhite)
        self._histograms = []  # All plotted histograms, to store in memory
        frame = spectrum_util.default_energy()
        self._histograms.append(frame)
        vc1 = self._canvas.cd(1)
        vc1.SetLeftMargin(0.155)
        vc1.SetBottomMargin(0.15)
        vc1.SetTopMargin(0.05)
        vc1.SetRightMargin(0.05)
        frame.Draw()
        frame.GetXaxis().SetRangeUser(low_energy, high_energy)
        frame.GetXaxis().SetTitle("Energy [MeV]")
        frame.GetXaxis().SetTitleOffset(1.0)
        frame.GetYaxis().SetTitle("Events per %0.2f MeV" %
                                  frame.GetXaxis().GetBinWidth(1))
        frame.GetYaxis().SetTitleOffset(1.3)
        # Create summed background and bg + signal histograms
        self._summed_bg = spectrum_util.default_energy("Sum BG")
        self._sum_bg_signal = spectrum_util.default_energy("Sum BG + Signal")

        maxCounts = 0.0  # For rescaling the histogram axis

        file = open("Te15load.txt", "w")
        #        file = open("ALL_BG_PU_limited.txt","w")

        # OUTPUT FOR THE SIGNAL
        low_energy_FWHM = self._signal.GetXaxis().FindBin(2.485)
        high_energy_FWHM = self._signal.GetXaxis().FindBin(2.733)
        #        low_energy_PWHM = self._signal.GetXaxis().FindBin(2.529)
        #       high_energy_PWHM = self._signal.GetXaxis().FindBin(2.664)

        low_energy_per = self._signal.GetXaxis().FindBin(2.492)
        high_energy_per = self._signal.GetXaxis().FindBin(2.675)
        Integral_per = self._signal.Integral(low_energy_per, high_energy_per)

        Integral_FWHM = self._signal.Integral(low_energy_FWHM,
                                              high_energy_FWHM)
        #       Integral_PWHM = self._signal.Integral(low_energy_PWHM, high_energy_PWHM)
        Tot_integral = self._signal.Integral()
        Weight = self._signal.GetSumOfWeights()
        print str("!!!!!!!!!ATTENTION!!!!!!!!!!!!")
        print self._signal
        print str("Integral BIS MSB FWHM from 2.485 MeV to 2.733 MeV")
        print Integral_FWHM
        print str("Integral PERYLENE FWHM from 2.492 MeV to 2.675 MeV")
        print Integral_per
        print str("total number of events")
        print Tot_integral
        print str("WEIGHTS")
        print Weight

        file.write(str("SIGNAL") + "\n")
        file.write(
            str("Integral BIS MSB FWHM from 2.485 MeV to 2.733 MeV") + "\n")
        file.write(str(Integral_FWHM) + "\n")
        file.write(
            str("Integral PERYLENE FWHM from 2.492 MeV to 2.675 MeV") + "\n")
        file.write(str(Integral_per) + "\n")
        file.write(str("total number of events") + "\n")
        file.write(str(Tot_integral) + "\n")
        file.write(str("") + "\n")

        # THE END OF THE OUTPUT
        # Draw backgrounds and signal and summed histograms
        for bg in self._backgrounds:
            print bg.GetName()
            hist = bg
            hist.SetLineWidth(1)
            hist.Draw("SAME")

            # THE OUTPUT FOR THE BACKGROUND
            low_energy_FWHM = hist.GetXaxis().FindBin(2.485)
            high_energy_FWHM = hist.GetXaxis().FindBin(2.733)
            #            low_energy_PWHM = hist.GetXaxis().FindBin(2.529)
            #           high_energy_PWHM = hist.GetXaxis().FindBin(2.664)
            Integral_FWHM = hist.Integral(low_energy_FWHM, high_energy_FWHM)
            #           Integral_PWHM = hist.Integral(low_energy_PWHM, high_energy_PWHM)
            Tot_integral = hist.Integral()
            Weight = hist.GetSumOfWeights()

            low_energy_per = hist.GetXaxis().FindBin(2.492)
            high_energy_per = hist.GetXaxis().FindBin(2.675)
            Integral_per = hist.Integral(low_energy_per, high_energy_per)

            print str("!!!!!!!!!ATTENTION!!!!!!!!!!!!")
            print bg
            print str("Integral BIS MSB FWHM from 2.485 MeV to 2.733 MeV")
            print Integral_FWHM
            print str("Integral PERYLENE FWHM from 2.492 MeV to 2.675 MeV")
            print Integral_per
            print str("total number of events")
            print Tot_integral
            print str("WEIGHTS")
            print Weight
            file.write(str("") + "\n")
            file.write(str(bg.GetName()) + "\n")
            file.write(
                str("Integral BIS MSB FWHM from 2.485 MeV to 2.733 MeV") +
                "\n")
            file.write(str(Integral_FWHM) + "\n")
            file.write(
                str("Integral PERYLENE FWHM from 2.492 MeV to 2.675 MeV") +
                "\n")
            file.write(str(Integral_per) + "\n")
            file.write(str("total number of events") + "\n")
            file.write(str(Tot_integral) + "\n")

            #THE END OF THE OUTPUT

            hist.SetLineColor(self._colours.get_colour(bg.GetName()))
            hist.SetLineStyle(self._lines.get_style(bg.GetName()))
            self._histograms.append(hist)
            self._summed_bg.Add(hist)
            # Add to legend if visible in the energy domain
            countsInDomain = hist.Integral(
                hist.GetXaxis().FindBin(low_energy),
                hist.GetXaxis().FindBin(high_energy))
            if countsInDomain > 1:
                self._legend.AddEntry(hist, bg.GetName(), "l")
                maxCounts = max([maxCounts, countsInDomain])
            self._canvas.Update()
        # Rescale the histogram axis
        frame.GetYaxis().SetRangeUser(1e-1, maxCounts)
        # Draw the signal first
        self._sum_bg_signal.Add(self._summed_bg)
        self._signal.SetLineColor(
            self._colours.get_colour(self._signal.GetName()))
        self._signal.SetLineStyle(self._lines.get_style(
            self._signal.GetName()))
        self._signal.SetLineWidth(1)
        self._signal.Draw("SAME")
        self._legend.AddEntry(self._signal,
                              self._signal.GetName() + " : Sig", "l")
        self._histograms.append(self._signal)
        self._sum_bg_signal.Add(self._signal)
        # Now draw the summed histograms
        self._summed_bg.SetLineWidth(2)
        self._summed_bg.Draw("SAME")
        print str("Summed_bg")
        print self._summed_bg.Integral()
        self._legend.AddEntry(self._summed_bg, "Sum BG", "l")
        self._sum_bg_signal.SetLineWidth(3)
        self._sum_bg_signal.SetLineStyle(1)
        self._sum_bg_signal.Draw("SAME")
        print str("Sum_bg_signal")
        print self._sum_bg_signal.Integral()
        self._legend.AddEntry(self._sum_bg_signal, "Sum BG + Sig", "l")
        self._canvas.cd(1).SetLogy()
        self._canvas.cd(2)
        # Draw the legend on a different canvas
        self._legend.SetNColumns(self._legend.GetNRows() / 50 + 1)
        self._legend.Draw()
        self._canvas.cd()

        file.close()

        return self._canvas
Beispiel #18
0
 def plot(self, low_energy, high_energy):
     """ Plot the data."""
     ROOT.gROOT.SetStyle("Plain")
     ROOT.gStyle.SetCanvasBorderMode(0)
     ROOT.gStyle.SetPadBorderMode(0)
     ROOT.gStyle.SetPadColor(0)
     ROOT.gStyle.SetCanvasColor(0)
     ROOT.gStyle.SetOptTitle(0)
     ROOT.gStyle.SetLabelSize(0.06, "xyz")
     ROOT.gStyle.SetTitleSize(0.06, "xyz")
     ROOT.gStyle.SetOptStat(0)
     self._canvas = ROOT.TCanvas()
     self._canvas.Divide(2, 1) # Two columns, separate legend canvas
     self._legend = ROOT.TLegend(0.05, 0.05, 0.95, 0.95)
     self._legend.SetFillColor(ROOT.kWhite)
     self._histograms = [] # All plotted histograms, to store in memory
     frame = spectrum_util.default_energy()
     self._histograms.append(frame)
     vc1 = self._canvas.cd(1)
     vc1.SetLeftMargin(0.155)
     vc1.SetBottomMargin(0.15)
     vc1.SetTopMargin(0.05)
     vc1.SetRightMargin(0.05)
     frame.Draw()
     frame.GetXaxis().SetRangeUser(low_energy, high_energy)
     frame.GetXaxis().SetTitle("Energy [MeV]")
     frame.GetXaxis().SetTitleOffset(1.0)
     frame.GetYaxis().SetTitle("Events per %0.2f MeV" % frame.GetXaxis().GetBinWidth(1))
     frame.GetYaxis().SetTitleOffset(1.3)
     # Create summed background and bg + signal histograms
     self._summed_bg = spectrum_util.default_energy("Sum BG")
     self._sum_bg_signal = spectrum_util.default_energy("Sum BG + Signal")
     maxCounts = 0.0 # For rescaling the histogram axis
     # Draw backgrounds and signal and summed histograms
     for bg in self._backgrounds:
         print bg.GetName()
         hist = bg
         hist.Draw("SAME")
         hist.SetLineColor(self._colours.get_colour(bg.GetName()))
         hist.SetLineStyle(self._lines.get_style(bg.GetName()))
         self._histograms.append(hist)
         self._summed_bg.Add(hist)
         # Add to legend if visible in the energy domain
         countsInDomain = hist.Integral(hist.GetXaxis().FindBin(low_energy), hist.GetXaxis().FindBin(high_energy))
         if countsInDomain > 1:
             self._legend.AddEntry(hist, bg.GetName(), "l")
             maxCounts = max([maxCounts, countsInDomain])
         self._canvas.Update()
     # Rescale the histogram axis
     frame.GetYaxis().SetRangeUser(1e-1, maxCounts)
     # Draw the signal first
     self._sum_bg_signal.Add(self._summed_bg)
     self._signal.SetLineColor(self._colours.get_colour(self._signal.GetName()))
     self._signal.SetLineStyle(self._lines.get_style(self._signal.GetName()))
     self._signal.Draw("SAME")
     self._legend.AddEntry(self._signal, self._signal.GetName() + " : Sig", "l")
     self._histograms.append(self._signal)
     self._sum_bg_signal.Add(self._signal)
     # Now draw the summed histograms
     self._summed_bg.SetLineWidth(3)
     self._summed_bg.Draw("SAME")
     self._legend.AddEntry(self._summed_bg, "Sum BG", "l")
     self._sum_bg_signal.SetLineWidth(4)
     self._sum_bg_signal.SetLineStyle(2)
     self._sum_bg_signal.Draw("SAME")
     self._legend.AddEntry(self._sum_bg_signal, "Sum BG + Sig", "l")
     self._canvas.cd(1).SetLogy()
     self._canvas.cd(2)
     # Draw the legend on a different canvas
     self._legend.SetNColumns(self._legend.GetNRows() / 50 + 1)
     self._legend.Draw()
     self._canvas.cd()
     return self._canvas