Page Menu
Home
HEPForge
Search
Configure Global Search
Log In
Files
F11221791
Plotter_HN
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
8 KB
Subscribers
None
Plotter_HN
View Options
#!/usr/bin/env python
import
os
,
sys
import
numpy
as
np
import
matplotlib.pyplot
as
plt
#import matplotlib as mpl
#import colormaps as cmaps
import
pickle
import
scipy.stats
as
sp
from
os.path
import
join
import
errno
#import matplotlib.pyplot as plt
from
matplotlib.ticker
import
MaxNLocator
from
contur.Plotting
import
*
from
contur
import
Legacy
as
ctr
#from TesterFunctions import *
def
mkdir_p
(
path
):
try
:
os
.
makedirs
(
path
)
except
OSError
as
exc
:
# Python >2.5
if
exc
.
errno
==
errno
.
EEXIST
and
os
.
path
.
isdir
(
path
):
pass
else
:
raise
def
writeOutput
(
output
,
h
):
f
=
open
(
h
,
'w'
)
for
item
in
output
:
f
.
write
(
str
(
item
)
+
"
\n
"
)
f
.
close
()
# quick function to return the bound from neutrinoloess double beta decay
#
def
existingLimit1
(
VeN
):
ndb
=
5.0e-08
return
(
VeN
/
10000.
)
**
2
/
ndb
# def existingLimit1(mNH):
# ndb=5.0e-02
# return 100.*np.sqrt(mNH*ndb)
mkdir_p
(
'plots'
)
for
root
,
dirs
,
files
in
os
.
walk
(
'.'
,
topdown
=
False
):
maps
=
{}
#for dirs
for
filename
in
files
:
#walk and look for .map files
if
'.map'
in
filename
and
'svn'
not
in
filename
and
'.hg'
not
in
filename
:
filename
=
join
(
root
,
filename
)
with
open
(
filename
,
'r+b'
)
as
f
:
maps
[
filename
.
strip
(
".map"
)]
=
pickle
.
load
(
f
)
if
not
maps
:
continue
##use longest member of map to make base map, just in case
data
=
maps
[
max
(
maps
,
key
=
lambda
x
:
len
(
maps
[
x
]))][:]
for
i
in
range
(
0
,
len
(
data
)):
data
[
i
]
=
list
(
data
[
i
])
data
[
i
][
2
]
=
1.0
data
[
i
][
3
]
=
[]
data
[
i
][
4
]
=
[]
data
[
i
][
5
]
=
[]
data
[
i
][
6
]
=
[]
i
=
0
for
key
in
maps
:
i
+=
1
for
i
in
range
(
0
,
len
(
maps
[
key
])):
for
j
in
range
(
0
,
len
(
data
)):
if
maps
[
key
][
i
][
0
]
==
data
[
j
][
0
]
and
maps
[
key
][
i
][
1
]
==
data
[
j
][
1
]:
data
[
j
][
3
]
.
extend
(
maps
[
key
][
i
][
3
])
data
[
j
][
4
]
.
extend
(
maps
[
key
][
i
][
4
])
data
[
j
][
5
]
.
extend
(
maps
[
key
][
i
][
5
])
data
[
j
][
6
]
.
extend
(
maps
[
key
][
i
][
6
])
for
listelement
in
data
:
tmp
=
ctr
.
confLevel
(
listelement
[
3
],
listelement
[
4
],
listelement
[
5
],
listelement
[
6
])
if
(
tmp
>
0.0
):
data
[
data
.
index
(
listelement
)][
2
]
=
tmp
else
:
data
[
data
.
index
(
listelement
)][
2
]
=
1.0
temp
=
[]
temp
=
zip
(
zip
(
*
data
)[
0
],
zip
(
*
data
)[
1
],
zip
(
*
data
)[
2
])
temp
.
sort
(
key
=
lambda
x
:
x
[
0
])
writeOutput
(
temp
,
"combinedCL_"
+
root
.
strip
(
'./'
)
+
".dat"
)
#find the grid spacings:
dx
=
(
min
(
filter
(
lambda
x
:
x
>
min
(
zip
(
*
data
)[
1
]),
(
zip
(
*
data
)[
1
])))
-
min
(
zip
(
*
data
)[
1
]))
/
2.0
dy
=
(
min
(
filter
(
lambda
x
:
x
>
min
(
zip
(
*
data
)[
0
]),
(
zip
(
*
data
)[
0
])))
-
min
(
zip
(
*
data
)[
0
]))
/
2.0
##build the contour grid, NOTE: different to the map grid
contourXaxis
=
[]
contourYaxis
=
[]
x
=
min
(
zip
(
*
data
)[
1
])
y
=
min
(
zip
(
*
data
)[
0
])
#lets make a second grid for contouring
#for x in range(0, min(zip(*data)[1]), dx*2):
while
x
<=
max
(
zip
(
*
data
)[
1
]):
contourXaxis
.
append
(
x
)
x
=
x
+
dx
*
2
while
y
<=
max
(
zip
(
*
data
)[
0
]):
contourYaxis
.
append
(
y
)
y
=
y
+
dy
*
2
#Build the map grid
#this could be redone intelligently I think...
x_grid_min
=
min
(
zip
(
*
data
)[
1
])
-
dx
y_grid_min
=
(
min
(
zip
(
*
data
)[
0
])
-
dy
)
x_grid_max
=
max
(
zip
(
*
data
)[
1
])
+
dx
y_grid_max
=
(
max
(
zip
(
*
data
)[
0
])
+
dy
)
yy
,
xx
=
np
.
mgrid
[
y_grid_min
:
y_grid_max
+
dy
:
2
*
dy
,
x_grid_min
:
x_grid_max
+
dx
:
2
*
dx
]
c
=
np
.
zeros
([
len
(
xx
[
0
,:])
-
1
,
len
(
yy
[:,
0
])
-
1
])
for
i
in
range
(
0
,
len
(
zip
(
*
data
)[
1
])):
xcounter
=
0
ycounter
=
0
for
xarg2
in
xx
[
1
]:
if
zip
(
*
data
)[
1
][
i
]
>
xarg2
:
xcounter
+=
1
for
yarg2
in
yy
[:,
xcounter
]:
if
zip
(
*
data
)[
0
][
i
]
>
yarg2
:
ycounter
+=
1
c
[
xcounter
-
1
][
ycounter
-
1
]
=
zip
(
*
data
)[
2
][
i
]
###Plotting functions
fig
=
plt
.
figure
(
figsize
=
fig_dims
)
ax
=
fig
.
add_subplot
(
1
,
1
,
1
)
##try and pick ticks intelligently
my_locator_x
=
MaxNLocator
((
int
(
max
(
contourXaxis
))
/
500
)
+
1
)
my_locator_y
=
MaxNLocator
((
int
(
max
(
contourYaxis
))
/
500
)
+
1
)
minorLocator_x
=
MaxNLocator
(
int
(
len
(
contourXaxis
))
+
1
)
minorLocator_y
=
MaxNLocator
(
int
(
len
(
contourYaxis
))
+
1
)
ax
.
yaxis
.
set_major_locator
(
my_locator_x
)
ax
.
xaxis
.
set_major_locator
(
my_locator_y
)
ax
.
xaxis
.
set_minor_locator
(
minorLocator_y
)
ax
.
yaxis
.
set_minor_locator
(
minorLocator_x
)
del
my_locator_x
del
my_locator_y
del
minorLocator_x
del
minorLocator_y
plt
.
pcolormesh
(
yy
,
xx
,
c
.
T
,
cmap
=
plt
.
cm
.
magma
,
vmin
=
0
,
vmax
=
1
)
plt
.
axis
([
y_grid_min
,
y_grid_max
,
x_grid_min
,
x_grid_max
])
##axis labels
plt
.
xlabel
(
r"$M_{\nu H}$ [GeV]"
)
plt
.
ylabel
(
r"$VeN \times 10^{4}$"
)
# plt.xlabel(r"$M_{\phi}$ [GeV]")
# plt.ylabel(r"$\Lambda$ [GeV]")
##suppress title
#plt.title("ATLAS + CMS Combined all channels",y=1.01)
##supress colorbar, make in a separate plot
#plt.colorbar().set_label("CL of exclusion")
##save the fig and pad it for better layout
fig
.
tight_layout
(
pad
=
0.1
)
plt
.
savefig
(
"./plots/combinedCL_"
+
root
.
strip
(
'./'
)
+
".pdf"
)
plt
.
savefig
(
"./plots/combinedCL_"
+
root
.
strip
(
'./'
)
+
".png"
)
############################################################################################################
############################################################################################################
############################################################################################################
############################################################################################################
###brand new plot for contours, dont need to fully reset?
fig
=
plt
.
figure
(
figsize
=
fig_dims
)
ax
=
fig
.
add_subplot
(
1
,
1
,
1
)
##try and pick ticks intelligently
my_locator_x
=
MaxNLocator
((
int
(
max
(
contourXaxis
))
/
500
)
+
1
)
my_locator_y
=
MaxNLocator
((
int
(
max
(
contourYaxis
))
/
500
)
+
1
)
minorLocator_x
=
MaxNLocator
(
int
(
len
(
contourXaxis
))
+
1
)
minorLocator_y
=
MaxNLocator
(
int
(
len
(
contourYaxis
))
+
1
)
ax
.
yaxis
.
set_major_locator
(
my_locator_x
)
ax
.
xaxis
.
set_major_locator
(
my_locator_y
)
ax
.
xaxis
.
set_minor_locator
(
minorLocator_y
)
ax
.
yaxis
.
set_minor_locator
(
minorLocator_x
)
##set axis size, again contour axis different to heatmap axis
#plt.axis([0.0, max(zip(*data)[0]),0.0, max(zip(*data)[1])])
plt
.
axis
([
min
(
zip
(
*
data
)[
0
]),
max
(
zip
(
*
data
)[
0
]),
min
(
zip
(
*
data
)[
1
]),
max
(
zip
(
*
data
)[
1
])])
contourXaxis
,
contourYaxis
=
contourYaxis
,
contourXaxis
##draw a filled contour region for the CL excl
CS
=
plt
.
contourf
(
contourXaxis
,
contourYaxis
,
c
,
levels
=
[
0.90
,
1.0
],
label
=
"CL"
,
cmap
=
plt
.
cm
.
magma
,
alpha
=
0.8
)
##and a black outline
CS2
=
plt
.
contour
(
CS
,
colors
=
'black'
)
#CS2=plab.contour(contourXaxis,contourYaxis,c.T,levels=[0.95,1.0], colors = 'black')
###plot the existing limit unitarity bound
y
=
np
.
array
(
contourYaxis
)
x
=
existingLimit1
(
y
)
plt
.
plot
(
x
,
y
,
color
=
'navy'
)
#x[0] = 10.0
ax
.
fill_between
(
x
,
y
,
y_grid_max
,
facecolor
=
'navy'
,
alpha
=
0.4
)
###contour labeler
fmt
=
{}
strs
=
[
'95\% CL'
,
'CL'
]
for
l
,
s
in
zip
(
CS2
.
levels
,
strs
):
fmt
[
l
]
=
s
###Messing with manually placed labels for contours
#manual_loc=[(800,1300),(400,300)]
#plab.clabel(CS2, CS2.levels[::2], inline=1, fmt=fmt, fontsize=10, manual=manual_loc)
#txt = plab.text(700,1100,'95\% CL',backgroundcolor='white')
#plab.clabel(CS2, inline=1, fontsize=10, manual=manual_loc)
# plt.xlabel(r"$M_{\phi}$ [GeV]")
# plt.ylabel(r"$\Lambda$ [GeV]")
plt
.
xlabel
(
r"$M_{\nu H}$ [GeV]"
)
plt
.
ylabel
(
r"$VeN \times 10^{4}}$"
)
artists
,
labels
=
CS
.
legend_elements
()
##potential legend info, edit here:
#plt.legend(artists, labels, handleheight=2,loc=2)
#plt.legend(handles=[CS])
#plt.rc('text', usetex=False)
#plt.rc('font', family='sans')
#, fontsize=12
#plab.title("CL Contour",y=1.01)
#legend = ax.legend(loc='upper center', shadow=True)
#plab.colorbar(ticks=[0,0.5,1.0]).set_label("CL of exclusion")
##save the fig and pad it for better layout
fig
.
tight_layout
(
pad
=
0.1
)
#fig.savefig('figure.pdf')
plt
.
savefig
(
"./plots/contur_"
+
root
.
strip
(
'./'
)
+
".pdf"
)
plt
.
savefig
(
"./plots/contur_"
+
root
.
strip
(
'./'
)
+
".png"
)
print
"Plotting maps: "
+
root
.
strip
(
'./'
)
############################################################################################################
############################################################################################################
############################################################################################################
############################################################################################################
##print the colorbar on a separate plot
fig
=
plt
.
figure
(
figsize
=
[
fig_dims
[
0
]
*
2
,
0.5
])
ax
=
fig
.
add_subplot
(
1
,
1
,
1
)
import
matplotlib
as
mpl
norm
=
mpl
.
colors
.
Normalize
(
vmin
=
0
,
vmax
=
1
)
cb
=
mpl
.
colorbar
.
ColorbarBase
(
ax
,
cmap
=
plt
.
cm
.
magma
,
orientation
=
'horizontal'
,
norm
=
norm
)
cb
.
set_label
(
"CL of exclusion"
)
fig
.
tight_layout
(
pad
=
0.1
)
plt
.
savefig
(
'./plots/colorbarkey.pdf'
)
File Metadata
Details
Attached
Mime Type
text/x-python
Expires
Wed, May 14, 10:54 AM (1 d, 2 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5000104
Default Alt Text
Plotter_HN (8 KB)
Attached To
rCONTURHG conturhg
Event Timeline
Log In to Comment