import numpy as np ''' Define variables used in compareUltimate Python doesn't understand external parameters, so workaround is to make a function for them, because f*it ''' import os #Set whether Kshort decays in VELO def KshortChannel(): path = os.getcwd() #print path return "dgerick" in path def UseLowQ2Range1(): return False def UseLowQ2Range2(): return False def firstMCweight (): return "nLongTracks" def UseDTF(): return True def yearArray(): #Assign run to year return np.array([ [2011,2012, 2015, 2016, 2017, 2018], [1, 1, 2, 2, 2, 2] ]) def yearListFull(): return yearArray()[0][:] def yearListRun(Run): if (Run ==12): return yearListFull() else: mask = yearArray()[1][:]==Run return yearArray()[0][mask] def yearList(Run, MC,Reference,PHSP): #Too lazy to do Kshort option if (PHSP or not MC): return yearListRun(Run) else: if (Reference): mask = yearListRun(Run)[:]<2017 else: mask = yearListRun(Run)[:]!=2015 return yearListRun(Run)[mask] def yearRunArrayFull(Run): if (Run ==12): return yearArray() else: mask = yearArray()[1][:]==Run return yearArray()[:,mask] def yearRunArray(year, Run, MC,Reference,PHSP): if (Run == 0): mask = yearRunArrayFull(12)[0][:]==year return yearRunArrayFull(12)[:,mask] else: if (PHSP or not MC): return yearRunArrayFull(Run) else: if (Reference): mask = yearRunArrayFull(Run)[0][:]<2017 else: mask = yearRunArrayFull(Run)[0][:]!=2015 return yearRunArrayFull(Run)[:,mask] def polarityList(): return ["down","up","both"] #Define a dictionary with nBins, Max and Min for each variable plot def dictVarPlotLimitsInt(): return { "nSPDHits": [61,-0.5,600.5], "nTracks": [60,-0.5,399.5], "nLongTracks": [50,-0.5,139.5], "nTTracks": [50,-0.5,139.5], "nBackTracks": [50,-0.5,199.5], "nMuonTracks": [50,-0.5,199.5], "nVeloTracks": [50,-0.5,249.5], "nDownstreamTracks": [50,-0.5,49.5], "totCandidates": [10,-0.5,9.5], "nCandidate": [10,-0.5,9.5], "nUpstreamTracks": [50,-0.5,29.5] } def dictPDGmass(): return{ "B_plus":5279.29, "K_star_plus":891.66, "K_plus":493.68, "K_short":497.61, "pi_plus":139.57, "pi_zero":134.98, "gamma":0, "J_psi":3096.90, "mu":105.66, } def dictParticleIDs(): return{ "B_plus":521, "K_star_plus":323, "K_plus":321, "K_short":310, "pi_plus":211, "pi_zero_resolved":111, "gamma":22, "mu_minus":13, "J_psi":443 } def dictVarPlotLimitsKshort (KshortDecaysInVelo = True): return { "log(1-B_plus_DIRA_OWNPV)": {"Min": -20.0, "Max": -9.0}, "log(B_plus_OWNPV_CHI2)": {"Min": 1.0, "Max": 4.5}, "log(B_plus_IPCHI2_OWNPV)": {"Min": -2.5, "Max": 3.0}, "B_plus_ENDVERTEX_CHI2": {"Min": 0., "Max": 40.}, "B_plus_FD_OWNPV": {"Min": 0., "Max": 120.0}, "B_plus_PT_DTF": {"Min": 0., "Max": 40e3}, "B_plus_PT": {"Min": 0., "Max": 40e3}, "B_plus_DOCA1": {"Min": -0.1, "Max": 25.1}, "B_plus_IP_OWNPV": {"Min": 0.0, "Max": 0.12}, "B_plus_NEW_ConePTasym": {"Min": -1.001, "Max": 1.001}, "B_plus_NEW_ConePT": {"Min": 0., "Max": 40e3}, "B_plus_NEW_ConePasym": {"Min": -1.001, "Max": 1.001}, "B_plus_NEW_ConeP": {"Min": 0., "Max": 60e3}, "B_plus_ETA_DTF": {"Min": 2., "Max": 5.0}, "B_plus_ETA": {"Min": 2., "Max": 5.0}, "log(K_star_plus_IPCHI2_OWNPV)": {"Min": -5.0, "Max": 10.0}, "K_star_plus_PT_DTF": {"Min": 0., "Max": 20e3}, "K_star_plus_PT": {"Min": 0., "Max": 20e3}, "K_star_plus_ETA_DTF": {"Min": 2., "Max": 5.0}, "K_star_plus_ETA": {"Min": 2., "Max": 5.0}, "K_short_PT_DTF": {"Min": 0., "Max": 10e3}, "K_short_PT": {"Min": 0., "Max": 10e3}, "K_short_FD_OWNPV": {"Min": 0., "Max": 700.0 if KshortDecaysInVelo else 2500.0}, "K_short_ETA": {"Min": 2., "Max": 5.0}, "K_star_plus_M": {"Min": 792., "Max": 992.}, "log(K_short_IPCHI2_OWNPV)": {"Min": 0.0 if KshortDecaysInVelo else -5.0, "Max": 10.0 if KshortDecaysInVelo else 5.0}, "Ks_pi_minus_PT_DTF": {"Min": 0., "Max": 5e3}, "Ks_pi_minus_PT": {"Min": 0., "Max": 5e3}, "Ks_pi_minus_PX_DTF": {"Min": -2.5e3, "Max": 2.5e3}, "Ks_pi_minus_PX": {"Min": -2.5e3, "Max": 2.5e3}, "Ks_pi_minus_PY_DTF": {"Min": -2.5e3, "Max": 2.5e3}, "Ks_pi_minus_PY": {"Min": -2.5e3, "Max": 2.5e3}, "Ks_pi_minus_PZ_DTF": {"Min": 2e3, "Max": 25e3}, "Ks_pi_minus_PZ": {"Min": 2e3, "Max": 25e3}, "Ks_pi_minus_PE_DTF": {"Min": 2e3, "Max": 25e3}, "Ks_pi_minus_PE": {"Min": 2e3, "Max": 25e3}, "Ks_pi_minus_P_DTF": {"Min": 2e3, "Max": 25e3}, "Ks_pi_minus_P": {"Min": 2e3, "Max": 25e3}, "Ks_pi_minus_ETA_DTF": {"Min": 2., "Max": 5.0}, "Ks_pi_minus_ETA": {"Min": 2., "Max": 5.0}, "Ks_pi_plus_PT_DTF": {"Min": 0., "Max": 5e3}, "Ks_pi_plus_PT": {"Min": 0., "Max": 5e3}, "Ks_pi_plus_PX_DTF": {"Min": -2.5e3, "Max": 2.5e3}, "Ks_pi_plus_PX": {"Min": -2.5e3, "Max": 2.5e3}, "Ks_pi_plus_PY_DTF": {"Min": -2.5e3, "Max": 2.5e3}, "Ks_pi_plus_PY": {"Min": -2.5e3, "Max": 2.5e3}, "Ks_pi_plus_PZ_DTF": {"Min": 2e3, "Max": 25e3}, "Ks_pi_plus_PZ": {"Min": 2e3, "Max": 25e3}, "Ks_pi_plus_PE_DTF": {"Min": 2e3, "Max": 25e3}, "Ks_pi_plus_PE": {"Min": 2e3, "Max": 25e3}, "Ks_pi_plus_P_DTF": {"Min": 2e3, "Max": 25e3}, "Ks_pi_plus_P": {"Min": 2e3, "Max": 25e3}, "Ks_pi_plus_ETA_DTF": {"Min": 2., "Max": 5.0}, "Ks_pi_plus_ETA": {"Min": 2., "Max": 5.0}, "pi_plus_PT_DTF": {"Min": 0., "Max": 12e3}, "pi_plus_PT": {"Min": 0., "Max": 12e3}, "pi_plus_PX_DTF": {"Min": -2.5e3, "Max": 2.5e3}, "pi_plus_PX": {"Min": -2.5e3, "Max": 2.5e3}, "pi_plus_PY_DTF": {"Min": -2.5e3, "Max": 2.5e3}, "pi_plus_PY": {"Min": -2.5e3, "Max": 2.5e3}, "pi_plus_PZ_DTF": {"Min": 0., "Max": 30e3}, "pi_plus_PZ": {"Min": 0., "Max": 30e3}, "pi_plus_PE_DTF": {"Min": 0., "Max": 30e3}, "pi_plus_PE": {"Min": 0., "Max": 30e3}, "pi_plus_P_DTF": {"Min": 0., "Max": 30e3}, "pi_plus_P": {"Min": 0., "Max": 30e3}, "pi_plus_ETA_DTF": {"Min": 2., "Max": 5.0}, "pi_plus_ETA": {"Min": 2., "Max": 5.0}, "log(pi_plus_IPCHI2_OWNPV)": {"Min": 1.0, "Max": 10.0}, "mu_plus_PX_DTF": {"Min": -6e3, "Max": 6e3}, "mu_plus_PX": {"Min": -6e3, "Max": 6e3}, "mu_plus_PY_DTF": {"Min": -6e3, "Max": 6e3}, "mu_plus_PY": {"Min": -6e3, "Max": 6e3}, "mu_plus_PZ_DTF": {"Min": 3e3, "Max": 30e3}, "mu_plus_PZ": {"Min": 3e3, "Max": 30e3}, "mu_plus_PT_DTF": {"Min": 0., "Max": 10e3}, "mu_plus_PT": {"Min": 0., "Max": 10e3}, "mu_plus_PE_DTF": {"Min": 3e3, "Max": 30e3}, "mu_plus_PE": {"Min": 3e3, "Max": 30e3}, "mu_plus_P_DTF": {"Min": 3e3, "Max": 30e3}, "mu_plus_P": {"Min": 3e3, "Max": 30e3}, "mu_plus_ETA_DTF": {"Min": 2., "Max": 5.0}, "mu_plus_ETA": {"Min": 2., "Max": 5.0}, "log(mu_plus_IPCHI2_OWNPV)": {"Min": 2.0, "Max": 12.0}, "mu_minus_PX_DTF": {"Min": -6e3, "Max": 6e3}, "mu_minus_PX": {"Min": -6e3, "Max": 6e3}, "mu_minus_PY_DTF": {"Min": -6e3, "Max": 6e3}, "mu_minus_PY": {"Min": -6e3, "Max": 6e3}, "mu_minus_PZ_DTF": {"Min": 3e3, "Max": 30e3}, "mu_minus_PZ": {"Min": 3e3, "Max": 30e3}, "mu_minus_PT_DTF": {"Min": 0., "Max": 10e3}, "mu_minus_PT": {"Min": 0., "Max": 10e3}, "mu_minus_PE_DTF": {"Min": 3e3, "Max": 30e3}, "mu_minus_PE": {"Min": 3e3, "Max": 30e3}, "mu_minus_P_DTF": {"Min": 3e3, "Max": 30e3}, "mu_minus_P": {"Min": 3e3, "Max": 30e3}, "mu_minus_ETA_DTF": {"Min": 2., "Max": 5.0}, "mu_minus_ETA": {"Min": 2., "Max": 5.0}, "log(mu_minus_IPCHI2_OWNPV)": {"Min": 2.0, "Max": 12.0}, "nCandidate": {"Min": 0, "Max": 10}, "totCandidates": {"Min": 0, "Max": 10}, "nTracks": {"Min": 0., "Max": 600.}, "nLongTracks": {"Min": 0., "Max": 200.}, "nVeloTracks": {"Min": 0., "Max": 200.}, "nTTracks": {"Min": 0., "Max": 200.}, "nUpstreamTracks": {"Min": 0., "Max": 200.} } def dictVarPlotLimitsKplus (): return { #Bplus "log(1-B_plus_DIRA_OWNPV)": {"Min": -20.0}, "log(B_plus_OWNPV_CHI2)": {"Min": -1.0}, "B_plus_FD_OWNPV": {"Min": -1.0,"Max": 60.0}, "B_plus_ETA_DTF": {"Max": 5.0}, "B_plus_ETA": {"Max": 5.0}, "B_plus_PHI": {"Min":-3.15, "Max": 3.15}, "B_plus_PT_DTF": {"Max":30e3}, "B_plus_PT": {"Max": 30e3}, "B_plus_DOCA1": {"Min": -0.1, "Max": 19.9}, "log(B_plus_IPCHI2_OWNPV)": {"Min": -0.5, "Max": 3.0}, "B_plus_IP_OWNPV": {"Min": -0.01, "Max": 0.1}, "B_pls_NEW_ConePTasym": {"Min": -0.6, "Max": 1.001}, "B_plus_NEW_ConePT": {"Min": -0.6, "Max": 30e3}, "B_plus_NEW_ConeP": {"Min": -1.5, "Max": 300e3}, "B_plus_ConeDeltaETA": {"Min": -1.5, "Max": 6.0}, #TODO: change to NEW after new preselection "B_plus_NEW_ConeDeltaETA": {"Min": -1.5,"Max": 6.0}, #TODO: change to NEW after new preselection "B_plus_FDCHI2_OWNPV": {"Min": 100.0, "Max": 1e3}, #K* "K_star_plus_PT_DTF": {"Min": 1000.0,"Max": 10e3}, "K_star_plus_PT": {"Min": 1000.0,"Max": 10e3}, "K_star_plus_PHI": {"Min":-3.15, "Max": 3.15}, "K_star_plus_IP_OWNPV": {"Max": 10.0}, "K_star_plus_IPCHI2_OWNPV": {"Min": -10.0, "Max": 10.0}, "K_star_plus_FD_OWNPV": {"Max": 500.0}, "K_star_plus_FDCHI2_OWNPV": {"Min": 0.0, "Max": 60e3}, "K_star_plus_DIRA_OWNPV": {"Min": -12.5, "Max": 2.5}, "K_star_plus_ETA_DTF": {"Max": 5.0 }, "K_star_plus_ETA": {"Max": 5.0}, #K+ "K_plus_IPCHI2_OWNPV": {"Min": 1.0, "Max": 11.0}, "K_plus_IP_OWNPV": {"Max": 2.0}, "K_plus_MINIPCHI2": {"Min": -0.5, "Max": 2e3}, "K_plus_MINIP": {"Max": 2.0}, "K_plus_OWNPV_CHI2": {"Min": 0.5}, "K_plus_PT_DTF": {"Max": 9e3}, "K_plus_PT": {"Max": 9e3}, "K_star_PHI": {"Min":-3.15, "Max": 3.15}, "K_plus_ETA_DTF": {"Max": 5.0 }, "K_plus_ETA": {"Max": 5.0}, #pi0 "pi_zero_resolved_PT_DTF": {"Max": 4.2e3}, "pi_zero_resolved_PT": {"Max": 4.2e3}, "pi_zero_resolved_PHI": {"Min":-3.15, "Max": 3.15}, "pi_zero_resolved_ETA_DTF": {"Max": 5.0 }, "pi_zero_resolved_ETA": {"Max": 5.0}, #gammas "gamma1_PT_DTF": {"Max": 8.0 }, "gamma1_PT": {"Max": 8.0}, "gamma1_PHI": {"Min":-3.15, "Max": 3.15}, "gamma2_PT_DTF": {"Max": 8.0 }, "gamma2_PT": {"Max": 8.0}, "gamma2_PHI": {"Min":-3.15, "Max": 3.15}, #Jpsi "J_psi_DOCA1": {"Max": 0.2}, "J_psi_FD_OWNPV": {"Max": 35.0} , "J_psi_FDCHI2_OWNPV": {"Max": 15e3}, "J_psi_IP_OWNPV": {"Max": 1.0}, "J_psi_DIRA_OWNPV": {"Min": -16.0, "Max": -4.0}, "J_psi_OWNPV_CHI2": {"Min": 0.9}, #mu+ "mu_plus_PT_DTF": {"Max": 10e3}, "mu_plus_PT": {"Max": 10e3}, "mu_plus_PHI": {"Min":-3.15, "Max": 3.15}, "mu_plus_OWNPV_CHI2": {"Min": 0.5}, "mu_plus_IP_OWNPV": {"Max": 4.0}, #mu- "mu_minus_PT_DTF": {"Max": 10e3}, "mu_minus_PT": {"Max": 10e3}, "mu_minus_PHI": {"Min":-3.15, "Max": 3.15}, "mu_minus_OWNPV_CHI2": {"Min": 0.5}, "mu_minus_IP_OWNPV": {"Max": 4.0} } def ListOfKplusVars(whichParticle = -1): #TODO this can be so much improved #-1 add all vars, # 0: Global # anything else: MC numbering scheme list_tmp = [] if (whichParticle == 1 or whichParticle == -1): list_tmp.extend([ # "MLPresponse", #TODO "B_plus_ThetaL", "B_plus_ThetaK", "B_plus_Phi" ]) if (whichParticle == 0 or whichParticle == -1): list_tmp.extend([ "nTracks", "nLongTracks", "nVeloTracks", "nTTracks", "nUpstreamTracks", "nDownstreamTracks", "nCandidate", "totCandidates", "Q2", #TODO "nSPDHits" ]) #B+ if (whichParticle == 521 or whichParticle == -1): list_tmp.extend([ #"log(1-B_plus_DIRA_OWNPV)", #"log(B_plus_OWNPV_CHI2)", #"B_plus_FD_OWNPV", #"B_plus_FDCHI2_OWNPV", #"B_plus_IP_OWNPV", #"log(B_plus_IPCHI2_OWNPV)", #"B_plus_DOCA1", #TODO #"B_plus_NEW_ConePTasym", #TODO #"B_plus_NEW_ConePT", #"B_plus_NEW_ConeP", #"B_plus_NEW_ConeDeltaETA", #"B_plus_CONEDELTAPHI", #TODO "B_plus_M", "B_plus_PHI", #"B_plus_ETA" #TODO ]) # K* if (whichParticle == 323 or whichParticle == -1): list_tmp.extend([ "log(1-K_star_plus_DIRA_OWNPV)", "log(K_star_plus_OWNPV_CHI2)", "K_star_plus_FD_OWNPV", "K_star_plus_FDCHI2_OWNPV", "K_star_plus_IP_OWNPV", "log(K_star_plus_IPCHI2_OWNPV)", "K_star_plus_PT", "K_star_plus_PHI", "K_star_plus_ETA" #TODO ]) # mu if (whichParticle == 13 or whichParticle == -1): list_tmp.extend([ "log(1-mu_plus_DIRA_OWNPV)", #TODO "log(mu_plus_OWNPV_CHI2)", "mu_plus_FD_OWNPV", #TODO "mu_plus_FDCHI2_OWNPV",#TODO "mu_plus_IP_OWNPV", "log(mu_plus_IPCHI2_OWNPV)", "mu_plus_PT", "mu_plus_PHI", "mu_plus_ETA", #TODO "log(1-mu_minus_DIRA_OWNPV)", "log(mu_minus_OWNPV_CHI2)", "mu_minus_FD_OWNPV",#TODO "mu_minus_FDCHI2_OWNPV",#TODO "mu_minus_IP_OWNPV", "log(mu_minus_IPCHI2_OWNPV)", "mu_minus_PT", "mu_minus_PHI", "mu_minus_ETA" #TODO ]) #Jpsi if (whichParticle == 443 or whichParticle == -1): list_tmp.extend([ "log(1-J_psi_DIRA_OWNPV)", #TODO "log(J_psi_OWNPV_CHI2)", "J_psi_FD_OWNPV", "J_psi_FDCHI2_OWNPV", "J_psi_IP_OWNPV", "log(J_psi_IPCHI2_OWNPV)", "J_psi_PT", "J_psi_PHI", "J_psi_ETA" #TODO ]) #K+ if (whichParticle == 321 or whichParticle == -1): list_tmp.extend([ "K_plus_TRACK_CHI2NDOF", "log(1-K_plus_DIRA_OWNPV)", #TODO "log(K_plus_OWNPV_CHI2)", "K_plus_FD_OWNPV", #TODO "K_plus_FDCHI2_OWNPV",#TODO "K_plus_IP_OWNPV", "log(K_plus_IPCHI2_OWNPV)", "K_plus_MINIP", "K_plus_MINIPCHI2", "K_plus_PT", "K_plus_PHI", "K_plus_ETA" ]) # pi0 if (whichParticle == 111 or whichParticle == -1): list_tmp.extend([ "pi_zero_resolved_CL", "pi_zero_resolved_PT", "pi_zero_resolved_PHI", "pi_zero_resolved_ETA" ]) #gamma if (whichParticle == 22 or whichParticle == 111 or whichParticle == -1): list_tmp.extend([ "log(gamma1_PT)", "gamma1_PHI", "gamma1_ETA", #TODO "gamma2_CL", "gamma1_CL", "log(gamma2_PT)", "gamma2_PHI", "gamma2_ETA", #TODO "open_angle" ]) return list_tmp def ListOfKshortVars(): return [ "log(1-B_plus_DIRA_OWNPV)", "log(B_plus_OWNPV_CHI2)", "log(B_plus_IPCHI2_OWNPV)", "B_plus_ENDVERTEX_CHI2", "B_plus_FD_OWNPV", "B_plus_IP_OWNPV", "B_plus_PT", "B_plus_DOCA1", "B_plus_NEW_ConePTasym", "B_plus_PT", "K_star_plus_PT", "log(K_star_plus_IPCHI2_OWNPV)", "K_star_plus_PT", #"K_star_plus_M", "log(K_short_IPCHI2_OWNPV)", "K_short_FD_OWNPV", "K_short_PT", "K_short_ETA", "Ks_pi_minus_PX", "Ks_pi_minus_PY", "Ks_pi_minus_PZ", "Ks_pi_minus_PT", "Ks_pi_minus_PE", "Ks_pi_minus_P", "Ks_pi_minus_ETA", "Ks_pi_plus_PX", "Ks_pi_plus_PY", "Ks_pi_plus_PZ", "Ks_pi_plus_PT", "Ks_pi_plus_PE", "Ks_pi_plus_P", "Ks_pi_plus_ETA", "pi_plus_PX", "pi_plus_PY", "pi_plus_PZ", "pi_plus_PT", "pi_plus_PE", "pi_plus_P", "pi_plus_ETA", "log(pi_plus_IPCHI2_OWNPV)", "mu_plus_PX", "mu_plus_PY", "mu_plus_PZ", "mu_plus_PT", "mu_plus_PE", "mu_plus_P", "mu_plus_ETA", "log(mu_plus_IPCHI2_OWNPV)", "mu_minus_PX", "mu_minus_PY", "mu_minus_PZ", "mu_minus_PT", "mu_minus_PE", "mu_minus_P", "mu_minus_ETA", "log(mu_minus_IPCHI2_OWNPV)", "nCandidate", "totCandidates", "nTracks", "nLongTracks", "nVeloTracks", "nTTracks", "nUpstreamTracks" ] def ListOfAllVars(): if (KshortChannel()): return ListOfKshortVars() else: return ListOfKplusVars(whichParticle = -1)