161 lines
5.7 KiB
Python
161 lines
5.7 KiB
Python
import numpy as np
|
|
import csv
|
|
import sys, os
|
|
|
|
#Easier to just have the full csv file parses here
|
|
from putIntoSlides_Utils import *
|
|
from putIntoSlides import *
|
|
|
|
PATH = "../2021_08_17_internalPenguin/"
|
|
NAME = "jobs.csv"
|
|
|
|
VERB = False
|
|
|
|
#Read the lines from CSV files
|
|
def get_arr_from_CSV(filePath, fileName):
|
|
with open(filePath+fileName) as csvfile:
|
|
csvreader = csv.reader(csvfile, delimiter=',', quotechar='"')
|
|
tmp_list = []
|
|
for row in csvreader:
|
|
tmp_list.append(row)
|
|
arr_jobs = np.array(tmp_list)
|
|
return arr_jobs
|
|
|
|
#First line are the option names
|
|
def getNameList(arr_jobs):
|
|
return arr_jobs[0]
|
|
#The rest is actual job parameters
|
|
def getJobArray(arr_jobs):
|
|
return arr_jobs[1:]
|
|
|
|
#Get the jobID
|
|
def getJobID(job_list, name_list):
|
|
return job_list[name_list=='JobID']
|
|
|
|
def getJob(arr_jobs, jobID):
|
|
names = getNameList(arr_jobs)
|
|
jobs = getJobArray(arr_jobs)
|
|
mask = np.array(jobs[:,names=='JobID']==str(jobID)).T[0]
|
|
if (mask.sum()!=1):
|
|
if (VERB): print("jobID",jobID,"not valid, skipping.")
|
|
return []
|
|
return jobs[mask,:][0]
|
|
|
|
|
|
def isFloat(tag):
|
|
if (tag=="FLO"): return True
|
|
if (tag=="CON"): return True
|
|
return False #Either it is NNN or FIX, so don't plot
|
|
|
|
def isFix(tag):
|
|
if(tag=="FIX"): return True
|
|
else: return False
|
|
|
|
def isConstrained(tag):
|
|
if(tag=="CON"): return True
|
|
else: return False
|
|
|
|
def isRef(job_list,name_list):
|
|
return bool(int(job_list[name_list=='ref']))
|
|
def isWeighted(job_list,name_list):
|
|
return bool(int(job_list[name_list=='w']))
|
|
|
|
def ctkFit(job_list,name_list):
|
|
return int(job_list[name_list=='ctkFit'])
|
|
def ctkGen(job_list,name_list):
|
|
return int(job_list[name_list=='ctkGen'])
|
|
def ctkLimit(job_list,name_list):
|
|
return float(job_list[name_list=='ctkLimit'])
|
|
def sWave(job_list,name_list):
|
|
return bool(int(job_list[name_list=='sWave']))
|
|
|
|
def sigOnly(job_list,name_list):
|
|
return bool(int(job_list[name_list=='sigOnly']))
|
|
|
|
def bkgOnly(job_list,name_list):
|
|
return bool(int(job_list[name_list=='bkgOnly']))
|
|
|
|
def stat(job_list,name_list):
|
|
return int(job_list[name_list=='STAT'])
|
|
|
|
def getPlotVarList(job_list,name_list):
|
|
#Check all fix/constrain/float options and create a list of all variables accordingly
|
|
var_list = []
|
|
if (isFloat(job_list[name_list=='ang'])): var_list = var_list + ANG_PARAMS
|
|
if (isFloat(job_list[name_list=='Bmass'])): var_list.append("m_b")
|
|
if (isFloat(job_list[name_list=='fSig'])): var_list.append("f_sig")
|
|
if (isFloat(job_list[name_list=='mass'])): var_list = var_list + MASS_PARAMS[1:]#First one is Bmass
|
|
if (isFloat(job_list[name_list=='bkg_ang'])):
|
|
var_list = var_list + ["cbkgctl1","cbkgctl2"]
|
|
for x in range(1,ctkFit(job_list,name_list)+1):
|
|
var_list.append("cbkgctk"+str(x))
|
|
if (isFloat(job_list[name_list=='bkg_mass'])): var_list.append("m_lambda")
|
|
#if (isFix(job_list[name_list=='gammaStar'])): var_list.append("") TODO
|
|
#if (isFix(job_list[name_list=='gammaStarP'])): var_list.append("") TODO
|
|
#if (isFix(job_list[name_list=='bkg_Kstar'])): var_list.append("") TODO
|
|
if (sWave(job_list,name_list)):
|
|
if (isFloat(job_list[name_list=='FS'])): var_list.append("FS")
|
|
if (isFloat(job_list[name_list=='s_ang'])): var_list = var_list + SWAVE_PARAMS[1:] #First one is FS
|
|
|
|
if (VERB): print(var_list)
|
|
return var_list
|
|
|
|
#TODO: not ideal to be a global, but whatever now
|
|
READFILE = get_arr_from_CSV(filePath=PATH,fileName=NAME)
|
|
NAMES = getNameList(READFILE)
|
|
|
|
def toyPullsFancy(bin,jobID):
|
|
job = getJob(READFILE,jobID)
|
|
if (len(job) ==0): return
|
|
|
|
all_vars_list = getPlotVarList(job_list=job, name_list=NAMES)
|
|
figName = "/__LOOP___bin" + str(bin) +"_Signal_HighBmass_Pulls"
|
|
figsPerSlide=8
|
|
figsPerRow=4
|
|
|
|
outFolder = "outputs/"+str(jobID)+"/"
|
|
Path(outFolder).mkdir(parents=True, exist_ok=True)
|
|
|
|
title = str(jobID) + ", bin " + str(bin)
|
|
make_figure_slides(TOYS_FIG_FOLDER + str(jobID),figName,
|
|
all_vars_list, title,
|
|
figsPerSlide, figsPerRow,
|
|
".eps",outFolder+"bin"+str(bin)+".tex")
|
|
|
|
|
|
def makeSlides(jobID):
|
|
job = getJob(READFILE,jobID)
|
|
if (len(job) ==0): return
|
|
nBins = 1 if (isRef(job,NAMES)) else 5
|
|
|
|
#Open the tex file
|
|
outputFile = "outputs/"+str(jobID)+"_all"
|
|
print ("\\input{"+outputFile+"}")
|
|
f = open(outputFile+".tex",'w')
|
|
print("\\epstopdfsetup{outdir=./outputs/"+str(jobID)+"/}",file=f)
|
|
print("\\begin{frame}{Job "+str(jobID)+"}",file=f)
|
|
|
|
print("\\begin{itemize}",file=f)
|
|
if (isRef(job,NAMES)): print ("\\item Reference",file=f)
|
|
if (isWeighted(job,NAMES)): print ("\\item Weighted",file=f)
|
|
print ("\\item ctk poly gen: "+str(ctkGen(job,NAMES)),file=f)
|
|
print ("\\item ctk poly fit: "+str(ctkFit(job,NAMES)),file=f)
|
|
print ("\\item ctk limit: "+str(ctkLimit(job,NAMES)),file=f)
|
|
if (sigOnly(job,NAMES)): print ("\\item Only signal",file=f)
|
|
if (bkgOnly(job,NAMES)): print ("\\item Only bkg",file=f)
|
|
if (sWave(job,NAMES)): print ("\\item sWave included",file=f)
|
|
if (stat(job,NAMES)!=1): print("\\item "+str(stat(job,NAMES))+"times rare stats",file=f)
|
|
print("\\end{itemize}",file=f)
|
|
print("\\end{frame}",file=f)
|
|
|
|
for b in range(0,nBins):
|
|
sys.stdout = open(os.devnull, 'w') #Block printout
|
|
toyPullsFancy(b,jobID)
|
|
sys.stdout = sys.__stdout__ #Enable printout
|
|
print("\\input{outputs/"+str(jobID)+"/bin"+str(b)+"}",file=f)
|
|
print("\\input{"+HD_FOLDER+"LaTeXfiles/latex_couts_toy_"+str(jobID)+"}",file=f)
|
|
|
|
f.close()
|
|
|
|
for x in range(325,400):
|
|
makeSlides(x) |