# To loop over a sequence of numbers (including both endpoints!!)
for i in $(seq 1 8); do
echo $i
done
# To extract all of the image filenames used in a .tex file:
grep includegraphics talk.tex | sed 's/.*{//' | sed 's/}.*//'
Some Favorite Headers/Macros:
#include <string>
#include <iostream>
#include <boost/foreach.hpp>
#include <boost/regex.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/tuple/tuple.hpp>
#include <TH1F.h>
#define foreach BOOST_FOREACH
//Defines method of std::string that appends any type :-)
#define appendAny(a) append(boost::lexical_cast<std::string>(a))
STL: Getting the index an iterator is pointing to:
std::distance(vec.begin(), it);
In C/C++, the boolean value of the int 0 is false. All other int\'s are true.
Favorite imports:
import std.stdio: writeln, write; //easy printing
import std.math; //so that ^^ exponentiation works!
import std.typecons: tuple, Tuple; //Tuple is type, tuple is easy builder
Array Usage:
double[] x = [0,1,2,3,4,5,6];
double[] y;
y.length = x.length;
y[] = x[]*x[]*5.34; //array operations!
foreach(ref ele; x)
{
ele *= 3.6/ele;
}
writeln(x);
Tuple usage:
Tuple!(int,double) silly()
{
return tuple(5,6.7);
}
Tuple!(int,double) s1 = silly();
auto s2 = silly();
writeln(s1[0]);
writeln(s2[1]);
My Favorite ISO Time Format in Python:
datetime.datetime.now().replace(microsecond=0).isoformat(' ')
Number of seconds since epoch (in UTC):
int(time.time())
To Fit numpy data with scikit learn:
import numpy
from sklearn.linear_model import LinearRegression
x = numpy.array([0.2,4.7,9.8,12.3])
y = numpy.array([4.3,89.3,500.6,2346.0])
nTerms = 1 # nTerms is the number of different terms you want in the fit
xForFit = numpy.zeros((x.size,nTerms))
xForFit[:,0] = numpy.power(x,2) #1st Term
fitter = LinearRegression()
fitter.fit(xForFit,y)
xPred = numpy.linspace(0.1,12.3,num=200)
xPredToFit = numpy.zeros((xPred.size,nTerms))
xPredToFit[:,0] = numpy.power(xPred,2) #1st Term
yPred = fitter.predict(xPredToFit)
coef = fitter.coef_
const = fitter.intercept_
print("const: "+str(const))
print("coefs: "+str(coef))
## Can use this for generic polynomial of order nOrder
nOrder = 2
fitter.fit(numpy.vander(x,nOrder+1),y)
yPred2 = fitter.predict(numpy.vander(xPred,nOrder+1))
coef = fitter.coef_
const = fitter.intercept_
print("Using numpy.vander:")
print("const: "+str(const))
print("coefs: "+str(coef))
To print the construction environment:
print env.Dump()
To redraw the axis lines after all histograms are plotted:
canvas->RedrawAxis(); //or the pad containing the histogram
Some nice helper functions for ROOT:
#include "TH1F.h"
#include "TMath.h"
#include "TStyle.h"
template <class histOrGraph> //Useful on decendents of TH1 or TGraph
void setHistTitles(histOrGraph* hist, TString xtitle, TString ytitle)
{
hist->GetXaxis()->SetTitle(xtitle);
hist->GetYaxis()->SetTitle(ytitle);
};
void setStyle(void)
{
gStyle->SetLineWidth(2);
gStyle->SetHistLineWidth(2);
gStyle->SetFrameLineWidth(2);
gStyle->SetLegendFillColor(kWhite);
gStyle->SetLegendFont(42);
gStyle->SetMarkerSize(1.2);
gStyle->SetMarkerStyle(20);
//gStyle->SetLabelSize(0.040,"X");
//gStyle->SetLabelSize(0.040,"Y");
gStyle->SetLabelFont(42,"X");
gStyle->SetLabelFont(42,"Y");
gStyle->SetTitleFont(42);
gStyle->SetTitleFont(42,"X");
gStyle->SetTitleFont(42,"Y");
//gStyle->SetLabelOffset(1.40,"X");
//gStyle->SetLabelOffset(1.40,"Y");
//gStyle->SetTitleSize(0.045,"X");
//gStyle->SetTitleSize(0.045,"Y");
//gStyle->SetTitleOffset(1.2,"X");
//gStyle->SetTitleOffset(1.2,"Y");
//gStyle->SetTextSize(0.055);
gStyle->SetTextFont(42);
gStyle->SetOptStat(0);
};
// outIntHIst needs to have the same binning as inHist
void makeIntegralPlot(TH1F* inHist, TH1F* outIntHist, bool useWidth)
{
unsigned nBins = inHist->GetNbinsX();
for(unsigned i=0; i< nBins+2; i++)
{
float tmpBin = 0.0;
for(unsigned j = i; j < (nBins+2);j++)
tmpBin += inHist->GetBinContent(j);
outIntHist->SetBinContent(i,tmpBin);
}
if(useWidth)
outIntHist->Scale(1.0/float(inHist->Integral(0,nBins+1)),"width");
else
outIntHist->Scale(1.0/float(inHist->Integral(0,nBins+1)));
};
float* makeLogBinningArray(unsigned nBins, float min, float max)
{
float* array = new float[nBins+1];
float base = pow(max/min,1.0/nBins);
float tmpTerm = min;
for(unsigned i = 0; i < nBins+1; i++)
{
array[i] = tmpTerm;
tmpTerm *= base;
}
return array;
};
float* makeLinBinningArray(unsigned nBins, float min, float max)
{
float* array = new float[nBins+1];
float base = (max-min)/(float)nBins;
float tmpTerm = min;
for(unsigned i = 0; i < nBins+1; i++)
{
array[i] = tmpTerm;
tmpTerm += base;
}
return array;
};
Useful Python function for use with pyROOT:
import ROOT as root
from ROOT import gStyle as gStyle
#from ROOT import RooRealVar, RooGaussian, RooArgList, RooDataHist
import re
def fit2DResHist(hist,color):
histName = hist.GetName()
hist.FitSlicesY()
outMeanHist = root.gDirectory.Get(histName+"_1")
outSigmaHist = root.gDirectory.Get(histName+"_2")
outMeanHist.SetName(histName+"FitMean")
outSigmaHist.SetName(histName+"FitSigma")
outMeanHist.GetXaxis().SetTitle(hist.GetXaxis().GetTitle())
outSigmaHist.GetXaxis().SetTitle(hist.GetXaxis().GetTitle())
outMeanHist.GetYaxis().SetTitle(hist.GetYaxis().GetTitle())
outSigmaHist.GetYaxis().SetTitle(hist.GetYaxis().GetTitle())
outSigOverMeanHist = outSigmaHist.Clone(histName+"FitSigmaOverMean")
outSigOverMeanHist.Divide(outMeanHist)
outMeanHist.SetMarkerColor(color)
outMeanHist.SetLineColor(color)
outSigmaHist.SetMarkerColor(color)
outSigmaHist.SetLineColor(color)
outSigOverMeanHist.SetMarkerColor(color)
outSigOverMeanHist.SetLineColor(color)
outMeanHist.SetTitle("")
outSigmaHist.SetTitle("")
outSigOverMeanHist.SetTitle("")
return outMeanHist, outSigmaHist, outSigOverMeanHist
def fit2DResHistManual(hist,color):
histName = hist.GetName()
histSaveName = "slices_"+histName+".pdf"
outMeanHist = hist.ProjectionX()
outMeanHist.Clear()
outMeanHist.Sumw2()
outMeanHist.SetName(histName+"FitMean")
outSigmaHist = outMeanHist.Clone(histName+"FitSigma")
outRMSHist = outMeanHist.Clone(histName+"FitRMS")
tmpCanvas = root.TCanvas("tmpCanvas"+histName)
tmpCanvas.cd()
nBins = hist.GetXaxis().GetNbins()
for i in range(0,nBins+2):
sliceHist = getXBinHist(hist,i)
mean = sliceHist.GetMean()
meanErr = sliceHist.GetMeanError()
rms = sliceHist.GetRMS()
rmsErr = sliceHist.GetRMSError()
gaus = root.TF1("gaus","gaus");
sliceHist.Fit(gaus,"WLME","",mean-2*rms,mean+2*rms)
sliceHist.SetTitle("pt: "+str(hist.GetXaxis().GetBinCenter(i))+" iBin: "+str(i))
sliceHist.GetXaxis().SetRangeUser(-100,100)
sliceHist.GetXaxis().SetRangeUser(-30,30) ##Temporary! Justin justin silly Silly
sliceHist.Draw()
# 1 is mean, 2 is sigma
outMeanHist.SetBinContent(i,gaus.GetParameter(1))
outMeanHist.SetBinError(i,gaus.GetParError(1))
outSigmaHist.SetBinContent(i,gaus.GetParameter(2))
outSigmaHist.SetBinError(i,gaus.GetParError(2))
outRMSHist.SetBinContent(i,rms)
outRMSHist.SetBinError(i,rmsErr)
"""
outMeanHist.SetBinContent(i,mean)
outMeanHist.SetBinError(i,meanErr)
outSigmaHist.SetBinContent(i,rms)
outSigmaHist.SetBinError(i,rmsErr)
"""
"""
ptDiff = RooRealVar("ptDiff","pt - pt",hist.GetXaxis().GetXmin(), hist.GetXaxis().GetXmax())
mean1 = RooRealVar("mean1","<pt-pt>",0.0)
sigma1 = RooRealVar("sigma1","#sigma(pt-pt)",5.0)
mean1.setConstant(False)
sigma1.setConstant(False)
frame1 = ptDiff.frame()
gaus1 = RooGaussian("guas1","Guassian",ptDiff,mean1,sigma1)
data = RooDataHist("data","Data",RooArgList(ptDiff),sliceHist)
gaus1.fitTo(data)
data.plotOn(frame1)
gaus1.plotOn(frame1)
outMeanHist.SetBinContent(i,mean1.GetVal())
outMeanHist.SetBinError(i,mean1.GetError())
outSigmaHist.SetBinContent(i,sigma1.GetVal())
outSigmaHist.SetBinError(i,sigma1.GetError())
frame1.SetTitle("pt: "+str(hist.GetXaxis().GetBinCenter(i))+" iBin: "+str(i))
frame1.GetXaxis().SetRangeUser(-100,100)
frame1.Draw()
"""
if(i == 0):
tmpCanvas.SaveAs(histSaveName+"(")
tmpCanvas.Clear()
elif(i == nBins+1):
tmpCanvas.SaveAs(histSaveName+")")
tmpCanvas.Clear()
else:
tmpCanvas.SaveAs(histSaveName)
tmpCanvas.Clear()
outMeanHist.SetMarkerColor(color)
outMeanHist.SetLineColor(color)
outSigmaHist.SetMarkerColor(color)
outSigmaHist.SetLineColor(color)
outRMSHist.SetMarkerColor(color)
outRMSHist.SetLineColor(color)
outMeanHist.SetTitle("")
outSigmaHist.SetTitle("")
outRMSHist.SetTitle("")
#outMeanHist.Print()
#outSigmaHist.Print()
#outRMSHist.Print()
return outMeanHist, outSigmaHist, outRMSHist
def getXBinHist(inHist, xBin):
outHist = inHist.ProjectionY()
outHist.Clear()
outHist.SetName(inHist.GetName()+"XSliceBin"+str(xBin))
outHist.Sumw2()
nBins = outHist.GetXaxis().GetNbins()
for i in range(0,nBins+2):
outHist.SetBinContent(i,inHist.GetBinContent(xBin,i))
outHist.SetBinError(i,inHist.GetBinError(xBin,i))
return outHist
def fitSlicesTopRooFit(hist):
#mTopBest = 172.9
mass = root.RooRealVar("mass","m_{jjj} of Top Candidate [GeV]",20,250)
#mtParam = root.RooRealVar("mtParam","m_{t} Parameter",mTopBest);
#wtParam = root.RooRealVar("wtParam","#Gamma_{t} Parameter",2.0);
smearMeanParam = root.RooRealVar("smearMeanParam","m_{t} Smearing Mean",0.0);
smearSigParam = root.RooRealVar("smearSigParam","m_{t} Smearing Sigma",0.5);
smearMeanParam.setConstant(False);
smearSigParam.setConstant(False);
#bwPdf = root.RooBreitWigner("bwPdf","m_{t} Breit-Wigner Pdf",
# mass,mtParam,wtParam);
smearPdf = root.RooGaussian("smearPdf","m_{t} Smearing PDF",
mass,smearMeanParam,smearSigParam);
#convPdf = root.RooFFTConvPdf("convPdf","m_{t} Convolution of BW with Gaussian",
# mass,bwPdf,smearPdf);
outMeanGraph = root.TGraphErrors()
outSigGraph = root.TGraphErrors()
if(hist.GetDimension()==1):
mass = root.RooRealVar("mass","m_{jjj} of Top Candidate [GeV]",hist.GetXaxis().GetXmin(),hist.GetXaxis().GetXmax())
smearMeanParam = root.RooRealVar("smearMeanParam","m_{t} Smearing Mean",0.0);
smearSigParam = root.RooRealVar("smearSigParam","m_{t} Smearing Sigma",0.5);
smearMeanParam.setConstant(False);
smearSigParam.setConstant(False);
smearPdf = root.RooGaussian("smearPdf","m_{t} Smearing PDF",
mass,smearMeanParam,smearSigParam);
data = root.RooDataHist("data",
"t Candidate m_{jjj} from Measured b-jet and Fit W-mass",
root.RooArgList(mass),hist)
smearPdf.fitTo(data)
smearMean = smearMeanParam.getVal()
smearMeanErr = smearMeanParam.getError()
smearSig = smearSigParam.getVal()
smearSigErr = smearSigParam.getError()
return smearMean, smearMeanErr, smearSig, smearSigErr
elif(hist.GetDimension()==2):
iPoint=0;
nBinsX = hist.GetXaxis().GetNbins()
for iBinX in range(1,nBinsX+1):
dataHist = getXBinHist(hist,iBinX);
dataHist.Rebin(2)
data = root.RooDataHist("data",
"t Candidate m_{jjj} from Measured b-jet and Fit W-mass",
root.RooArgList(mass),dataHist)
print("justin bin: "+str(iBinX))
dataHist.Print("v")
data.Print("v")
fitResult = convPdf.fitTo(data,root.RooFit.Save())
smearMean = smearMeanParam.getVal()
smearMeanErr = smearMeanParam.getError()
smearSig = smearSigParam.getVal()
smearSigErr = smearSigParam.getError()
xPos = hist.GetXaxis().GetBinCenter(iBinX)
xErr = hist.GetXaxis().GetBinWidth(iBinX)/2.0
#should it be divided by mTopBest or xPos?
smearSig = smearSig/xPos
smearSigErr = smearSigErr/xPos
smearMean = smearMean/xPos
smearMeanErr = smearMeanErr/xPos
"""
outMeanGraph.SetPoint(iPoint,xPos,dataHist.GetMean())
outMeanGraph.SetPointError(iPoint,xErr,dataHist.GetMeanError())
smearSig = dataHist.GetRMS()/mTopBest
smearSigErr = dataHist.GetRMSError()/mTopBest
"""
outMeanGraph.SetPoint(iPoint,xPos,smearMean)
outMeanGraph.SetPointError(iPoint,xErr,smearMeanErr)
outSigGraph.SetPoint(iPoint,xPos,smearSig)
outSigGraph.SetPointError(iPoint,xErr,smearSigErr)
iPoint = iPoint+1
return outMeanGraph, outSigGraph
def divideYValByXVal(hist):
nBinsX = hist.GetXaxis().GetNbins()
for iBinX in range(1,nBinsX+1):
binVal = hist.GetBinContent(iBinX)
binErrVal = hist.GetBinError(iBinX)
xVal = hist.GetXaxis().GetBinCenter(iBinX)
hist.SetBinContent(iBinX,binVal/xVal)
hist.SetBinError(iBinX,binErrVal/xVal)
def drawMVAHist(tfile, histToGetRE, meanOrsigmaString):
"""
Draws a hist from the TMVA out file. Must already have an active TCanvas
"""
leg = root.TLegend(0.70,0.6,0.9,0.9)
leg.SetFillColor(root.kWhite)
leg.SetLineColor(root.kWhite)
colors = [root.kBlack,root.kBlue+1,root.kRed+1,root.kBlue+1,root.kOrange+1]
iColor = 0
for dirName in tfile.GetListOfKeys():
if(re.match(r"Method_.*",dirName.GetName())):
for subDirName in dirName.ReadObj().GetListOfKeys():
for histName in subDirName.ReadObj().GetListOfKeys():
if(re.match(histToGetRE,histName.GetName())):
hist = histName.ReadObj()
#hist.GetXaxis().Rebin(2)
hM, hS, hSOM = fit2DResHist(hist)
hM.SetLineColor(colors[iColor % len(colors)])
hM.SetMarkerColor(colors[iColor % len(colors)])
hS.SetLineColor(colors[iColor % len(colors)])
hS.SetMarkerColor(colors[iColor % len(colors)])
hSOM.SetLineColor(colors[iColor % len(colors)])
hSOM.SetMarkerColor(colors[iColor % len(colors)])
tmpLegLabel = re.sub(r"MVA_","",histName.GetName())
tmpLegLabel = re.sub(r"test.*","",tmpLegLabel)
leg.AddEntry(hM,tmpLegLabel,"lep")
divideYValByXVal(hS)
if(iColor==0):
if(meanOrsigmaString == "mean"):
hM.SetTitle("")
hM.GetYaxis().SetRangeUser(-10,10)
hM.Draw()
else:
hS.SetTitle("")
hS.GetYaxis().SetRangeUser(0.0,0.6)
hS.Draw()
else:
if(meanOrsigmaString == "mean"):
hM.Draw("same")
else:
hS.Draw("same")
iColor += 1
leg.Draw()
leg.Print()
print("made it to leg.Draw")
def makeResPlotFromMVATree(tfile,xname,yname,truename,cuts,doDivide):
histName2D = "mvaResTmpHist"
#tree = tfile.Get("TestTree")
tree = tfile.Get("TrainTree")
drawStr = ""
if doDivide:
drawStr = "("+yname+"-"+truename+")/"+truename+":"+xname
else:
drawStr = yname+"-"+truename+":"+xname
drawStr += ">>"
drawStr += histName2D
print(drawStr)
tree.Draw(drawStr,cuts)
tmpHist = root.gDirectory.Get(histName2D)
tmpM, tmpS, tmpSOM = fit2DResHist(tmpHist,root.kBlack)
if(doDivide):
tmpM.GetYaxis().SetRangeUser(-1,1)
tmpS.GetYaxis().SetRangeUser(0,0.5)
else:
tmpM.GetYaxis().SetRangeUser(-50,50)
tmpS.GetYaxis().SetRangeUser(0,100)
tmpM.SetTitle("")
tmpS.SetTitle("")
return tmpM, tmpS
def setStyle():
gStyle.SetCanvasColor(0)
gStyle.SetCanvasBorderSize(10)
gStyle.SetCanvasBorderMode(0)
gStyle.SetCanvasDefH(700)
gStyle.SetCanvasDefW(700)
gStyle.SetPadColor (0)
gStyle.SetPadBorderSize (10)
gStyle.SetPadBorderMode (0)
gStyle.SetPadBottomMargin(0.13)
gStyle.SetPadTopMargin (0.08)
gStyle.SetPadLeftMargin (0.15)
gStyle.SetPadRightMargin (0.05)
gStyle.SetPadGridX (0)
gStyle.SetPadGridY (0)
gStyle.SetPadTickX (1)
gStyle.SetPadTickY (1)
gStyle.SetFrameFillStyle ( 0)
gStyle.SetFrameFillColor ( 0)
gStyle.SetFrameLineColor ( 1)
gStyle.SetFrameLineStyle ( 0)
gStyle.SetFrameLineWidth ( 1)
gStyle.SetFrameBorderSize(10)
gStyle.SetFrameBorderMode( 0)
gStyle.SetNdivisions(505)
gStyle.SetLineWidth(2)
gStyle.SetHistLineWidth(2)
gStyle.SetFrameLineWidth(2)
gStyle.SetLegendFillColor(root.kWhite)
gStyle.SetLegendFont(42)
gStyle.SetMarkerSize(1.2)
gStyle.SetMarkerStyle(20)
gStyle.SetLabelSize(0.040,"X")
gStyle.SetLabelSize(0.040,"Y")
gStyle.SetLabelOffset(0.010,"X")
gStyle.SetLabelOffset(0.010,"Y")
gStyle.SetLabelFont(42,"X")
gStyle.SetLabelFont(42,"Y")
gStyle.SetTitleBorderSize(0)
gStyle.SetTitleFont(42)
gStyle.SetTitleFont(42,"X")
gStyle.SetTitleFont(42,"Y")
gStyle.SetTitleSize(0.045,"X")
gStyle.SetTitleSize(0.045,"Y")
gStyle.SetTitleOffset(1.4,"X")
gStyle.SetTitleOffset(1.4,"Y")
gStyle.SetTextSize(0.055)
gStyle.SetTextFont(42)
gStyle.SetOptStat(0)
setStyle()
def makeWeightHist(f1,canvas,leg):
firstHist = True
canvas.cd()
canvas.SetLogy()
colorsList = [1,2,3,4,5,6,7,8]
nColors = len(colorsList)
iDir = 0
leg.Clear()
leg.SetFillColor(0)
leg.SetLineColor(0)
tmpList = []
for dirName in f1.GetListOfKeys():
tmpList.append(dirName)
tmpList.reverse()
for dirName in tmpList:
print(dirName.GetName())
if(re.search(r"data",dirName.GetName())):
continue
directory = dirName.ReadObj()
for histKey in directory.GetListOfKeys():
if(histKey.GetName()=="hWeight"):
hist = histKey.ReadObj()
hist.UseCurrentStyle()
hist.SetLineColor(colorsList[iDir % nColors])
hist.SetMarkerColor(colorsList[iDir % nColors])
allIntegral = hist.Integral(0,hist.GetNbinsX()+1)
integral = hist.Integral()
if integral > 0.0:
print("Fraction Outside of bounds: %f" % (allIntegral/integral-1.0))
#hist.Scale(1.0/allIntegral)
hist.Scale(1.0/integral)
else:
leg.AddEntry(hist,dirName.GetName(),"lep")
if(firstHist):
firstHist=False
hist.GetYaxis().SetTitle("Fraction of Events")
hist.GetXaxis().SetTitle("Event Weight")
#hist.GetXaxis().SetRangeUser(0.0,1.0)
hist.Draw()
else:
hist.Draw("same")
iDir += 1
leg.Draw("same")
class DataMCStack:
def __init__(self, mcHistList, dataHist, canvas, xtitle, ytitle="Events", drawStack=True,nDivX=7):
nBinsX = dataHist.GetNbinsX()
self.nBinsX = nBinsX
for mcHist in mcHistList:
assert(nBinsX == mcHist.GetNbinsX())
# Make MC Stack/sumHist
self.stack = root.THStack()
self.mcSumHist = dataHist.Clone("mcSumHist"+dataHist.GetName())
self.mcSumHist.Reset()
for mcHist in mcHistList:
self.mcSumHist.Add(mcHist)
self.stack.Add(mcHist)
# Make Pull Hist
self.pullHist = dataHist.Clone("pullHist"+dataHist.GetName())
self.pullHist.Reset()
for i in range(1,self.pullHist.GetNbinsX()):
nData = dataHist.GetBinContent(i)
nMC = self.mcSumHist.GetBinContent(i)
error = dataHist.GetBinContent(i)
pull = 0.0
if error != 0.0:
pull = (nData -nMC)/error
self.pullHist.SetBinContent(i,pull)
#print("nData: %f, nMC: %f, error: %f, pull: %f" % (nData,nMC,error,pull))
#Setup Canvas
canvas.cd()
pad1 = root.TPad("pad1"+dataHist.GetName(),"",0.02,0.30,0.98,0.98,0)
pad2 = root.TPad("pad2"+dataHist.GetName(),"",0.02,0.01,0.98,0.29,0)
pad1.SetBottomMargin(0.005);
pad2.SetTopMargin (0.005);
pad2.SetBottomMargin(0.33);
"""
pad1.SetBottomMargin(0.01);
pad2.SetTopMargin (0.3);
pad2.SetBottomMargin(0.33);
"""
pad1.Draw() # Projections pad
pad2.Draw() # Residuals pad
pad1Width = pad1.XtoPixel(pad1.GetX2())
pad1Height = pad1.YtoPixel(pad1.GetY1())
pad2Height = pad2.YtoPixel(pad2.GetY1())
#pad1ToPad2FontScalingFactor = float(pad1Width)/pad2Height
pad1ToPad2FontScalingFactor = float(pad1Height)/pad2Height
# Main Pad
pad1.cd();
if drawStack:
self.stack.Draw("histo b")
self.stack.GetXaxis().SetTitle("")
self.stack.GetXaxis().SetLabelSize(0)
self.stack.GetYaxis().SetTitle(ytitle)
self.stack.GetYaxis().SetLabelSize(0.050)
self.stack.GetYaxis().SetTitleSize(0.055)
self.stack.GetXaxis().SetNdivisions(nDivX)
self.stack.Draw("histo b")
else:
self.mcSumHist.SetFillColor(856)
self.mcSumHist.SetLineColor(856)
self.mcSumHist.SetMarkerColor(856)
self.mcSumHist.SetFillStyle(1001)
self.mcSumHist.GetXaxis().SetTitle("")
self.mcSumHist.GetXaxis().SetLabelSize(0)
self.mcSumHist.GetYaxis().SetTitle(ytitle)
self.mcSumHist.GetYaxis().SetLabelSize(0.050)
self.mcSumHist.GetYaxis().SetTitleSize(0.055)
self.mcSumHist.GetXaxis().SetNdivisions(nDivX)
self.mcSumHist.Draw("histo b")
dataHist.Draw("pe same")
# Pulls Pad
pad2.cd()
self.pullHist.SetTitle("")
self.pullHist.GetXaxis().SetTitle(xtitle)
self.pullHist.GetXaxis().CenterTitle(1)
self.pullHist.GetXaxis().SetNdivisions(nDivX)
self.pullHist.GetXaxis().SetTitleSize(0.055*pad1ToPad2FontScalingFactor)
self.pullHist.GetXaxis().SetLabelSize(0.050*pad1ToPad2FontScalingFactor)
self.pullHist.GetYaxis().SetTitle("#frac{Data-MC}{Error}")
self.pullHist.GetYaxis().SetTitleSize(0.040*pad1ToPad2FontScalingFactor)
self.pullHist.GetYaxis().SetLabelSize(0.040*pad1ToPad2FontScalingFactor)
self.pullHist.GetYaxis().CenterTitle(1)
self.pullHist.GetYaxis().SetTitleOffset(0.70)
self.pullHist.SetFillColor(856)
self.pullHist.SetFillStyle(1001)
self.pullHist.Draw("histo b")
pad2.Update()
pad2.GetFrame().DrawClone()
canvas.cd()
RooAbsPdf::fitTo returns a NULL pointer by default, you must include Save() in the options to actually get the RooFitResult* from it.
For error bands of a fit look at: http://root.cern.ch/root/html/tutorials/roofit/rf610_visualerror.C.html
The key thing is:
RooAbsPdf::plotOn(RooPlot* frame,
VisualizeError(RooFitResult rslt, unsigned nSigmas, bool symetricAndUncorrelated),
FillColor(kBlue-9));
It is a bit difficult to add a weight to a RooDataSet. This is the easiest way I\'ve found:
# For dataset containing xVar:
# construct the weight (making sure the total num events stays the same)
weightVar = root.RooRealVar("weight","weight",1)
weightVar.setVal( whatever_the_weight_is )
# the set containing the observable and the weight
datasetWeightArgSet = root.RooArgSet(xVar, Weight)
# constructing the dataset with a weight
dataset.addColumn( Weight )
datasetWeight = root.RooDataSet(dataset.GetName() + "_withWeights",
"Weighted "+dataset.GetTitle(),
datasetWeightArgSet,
root.RooFit.Import(dataset),
root.RooFit.WeightVar(weight)
)
This vim script is helpful for turning a histogram declaration line into a definition, in C++, and for turning a python definition into a copy to self.
" Packages
set nocompatible " be iMproved, required for vundle
filetype off " required for vundle
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'gmarik/Vundle.vim'
Plugin 'mhinz/vim-signify'
Plugin 'vim-scripts/SearchComplete'
Plugin 'bling/vim-airline'
Plugin 'altercation/vim-colors-solarized'
call vundle#end() " required
filetype plugin indent on " required
" Config Packages
" enable airline always:
set laststatus=2
let g:airline#extensions#tabline#enabled = 1
let g:airline_left_sep=''
let g:airline_right_sep=''
let g:airline_section_warning=''
" for signify
let g:signify_vcs_list = [ 'git', 'bzr', 'svn' ]
" for solarized
syntax enable
set background=light
colorscheme solarized
" Personal Settings, Macros, and functions
:set foldenable
:set foldmethod=syntax
:set expandtab
:set tabstop=4
:set shiftwidth=4
:set t_Co=16
command Spell setlocal spell spelllang=en_us
autocmd BufRead *.tex :Spell
autocmd BufRead *.bib :Spell
command PdfLatex !mkdir -p build; rubber --pdf --into build %; cp build/*.pdf .
map <F4> :PdfLatex<CR>
command RunCurrentFile !./%
map <F5> :RunCurrentFile<CR>
command Scons !scons -j2
map <F6> :Scons<CR>
command Scramb !scram b -j2
map <F7> :Scramb<CR>
function! InitHist()
python << EOF
import vim
import re
import copy
#tmpLine = copy.deepcopy(vim.current.line)
tmpLine = vim.current.line
matchObj = re.search(r"TH.*\*",tmpLine)
if (not matchObj):
print("Error: InitHist: TH* not found on current line")
else:
typeStr = re.sub(r" ",r"",tmpLine[matchObj.start():matchObj.end()])
typeStr = re.sub(r"\*",r"",typeStr)
typeStr = re.sub(r"\t",r"",typeStr)
varStr = tmpLine[matchObj.end():]
varStr = re.sub(r";",r"",varStr)
varStr = re.sub(r" ",r"",varStr)
varStr = re.sub(r"\t",r"",varStr)
indentationStr = tmpLine[:matchObj.start()]
outLine = indentationStr+ varStr + " = new " + typeStr
outLine += '("'+varStr+'", "'+varStr+'", );'
vim.current.line = outLine
print(outLine)
vim.command("put =''")
vim.current.line = indentationStr+'setHistTitles('+varStr+',"","");'
EOF
endfunction
command Hist call InitHist()
function! AddVarToSelf()
python << EOF
import vim
import re
import copy
#tmpLine = copy.deepcopy(vim.current.line)
tmpLine = vim.current.line
matchObj = re.search(r"([\s]*)([\w]+)[\s]*=.*",tmpLine)
if (not matchObj):
print("Error: AddVarToSelf: <variable> = * not found on current line")
else:
indentationStr = matchObj.group(1)
varStr = matchObj.group(2)
outLine = indentationStr + "self." + varStr + " = " + varStr
vim.current.line = outLine
EOF
endfunction
command VarToSelf call AddVarToSelf()
To use GDB to find a segfault:
-g)ulimit -c unlimitedgdb <program> <coredump>To add a new tag
cvs tag -R <tagname>
the -R means recursive. This will tag everything in or below the current directory. Remember that CVS does no version control of tags!
Starting a branch is just like tagging, do it before committing or changing anything:
cvs tag -b <branchname>
Now the code must have the \"Sticky Tag\" of the branch set. To update code to be using a Sticky Tag, run:
cvs update -r <branchname>
To get rid of all Sticky Tags, run:
cvs update -A
To see what Sticky Tags are in use, run:
cvs status
Always create branches and tags on the server, it is much faster:
svn copy ^/notes/HIG-13-007/trunk ^/notes/HIG-13-007/branches/mass110160PixelLumi -m "creating branch from trunk r206450 named mass110160PixelLumi"
The carat stands in for the url of your remote repository.
Convert bzr repo to Git:
sudo apt-get install bzr-fastimport
cd <bzr repository dir> # backup first!
git init
bzr fast-export --plain . | git fast-import
git checkout -f master
# will say that you are already on master
rm -r .bzr*
git commit -a
Git does not push tags by default!
git push --tags
bin_PROGRAMS = hello
hello_SOURCES = main.cc
autoscanmv configure.scan configure.acautoreconf --install./configure, make, and make installautoreconf againCMake seems a lot simpler than Autotools.
You just have to write a CMakeLists.txt:
cmake_minimum_required (VERSION 2.8.11)
project (HELLO)
# Find Boost library >= 1.36.0 and get info for program_options library
find_package(Boost 1.36.0 COMPONENTS program_options)
if(NOT Boost_FOUND)
# Exit if boost not found
message(FATAL_ERROR "Boost Required!")
endif()
include_directories(${Boost_INCLUDE_DIRS}) #add include dirs for all builds
# create static library
add_library(silly sillylib.cc)
# create executable
add_executable (hello main.cc)
# make sure "hello" links "libsilly"
target_link_libraries(hello silly)
# make sure "hello" links to Boost libraries found above
target_link_libraries(hello ${Boost_LIBRARIES})
The first time you run it, you must type cmake CMakeLists.txt and then
make. After that, you only have to ever type make, because the
Makefile checks and rebuilds itself from the CMakeLists.txt
automatically.