1
1
################################################################################
3
# Copyright (c) 2011 The MadGraph Development team and Contributors
3
# Copyright (c) 2011 The MadGraph5_aMC@NLO Development team and Contributors
5
# This file is a part of the MadGraph 5 project, an application which
5
# This file is a part of the MadGraph5_aMC@NLO project, an application which
6
6
# automatically generates Feynman diagrams and matrix elements for arbitrary
7
7
# high-energy processes in the Standard Model and beyond.
9
# It is subject to the MadGraph license which should accompany this
9
# It is subject to the MadGraph5_aMC@NLO license which should accompany this
12
# For more information, please visit: http://madgraph.phys.ucl.ac.be
12
# For more information, visit madgraph.phys.ucl.ac.be and amcatnlo.web.cern.ch
14
14
################################################################################
15
15
""" Create gen_crossxhtml """
333
350
'run_name': self.current['run_name'],
334
351
'tag_name': self.current['tag'],
335
352
'unit': self[self.current['run_name']].info['unit']}
353
# add the run_mode_string for amcatnlo_run
354
if 'run_mode' in self.current.keys():
355
run_mode_string = {'aMC@NLO': '(aMC@NLO)',
356
'aMC@LO': '(aMC@LO)',
357
'noshower': '(aMC@NLO)',
358
'noshowerLO': '(aMC@LO)',
362
status_dict['run_mode_string'] = run_mode_string[self.current['run_mode']]
364
status_dict['run_mode_string'] = ''
337
367
if exists(pjoin(self.path, 'HTML',self.current['run_name'],
338
368
'results.html')):
355
385
status_dict['delphes_card'] = """ <a href="./Cards/delphes_card.dat">delphes_card</a><BR>"""
357
387
status_dict['delphes_card'] = ""
388
if exists(pjoin(self.path, 'Cards', 'shower_card.dat')):
389
status_dict['shower_card'] = """ <a href="./Cards/shower_card.dat">shower_card</a><BR>"""
391
status_dict['shower_card'] = ""
392
if exists(pjoin(self.path, 'Cards', 'FO_analyse_card.dat')):
393
status_dict['fo_analyse_card'] = """ <a href="./Cards/FO_analyse_card.dat">FO_analyse_card</a><BR>"""
395
status_dict['fo_analyse_card'] = ""
360
398
status_dict['stop_form'] = """
361
399
<TR ALIGN=CENTER><TD COLSPAN=7 text-align=center>
592
636
if 'gridpack' not in self.parton and \
593
637
exists(pjoin(path,os.pardir ,os.pardir,"%s_gridpack.tar.gz" % run)):
594
638
self.parton.append('gridpack')
639
# Check if the output of the last status exists
640
if level in ['reweight','all']:
641
if 'plot' not in self.reweight and \
642
exists(pjoin(html_path,"plots_%s.html" % tag)):
643
self.reweight.append('plot')
596
645
if level in ['parton','all'] and 'parton' not in nolevel:
598
647
if 'lhe' not in self.parton and \
599
648
(exists(pjoin(path,"unweighted_events.lhe.gz")) or
600
exists(pjoin(path,"unweighted_events.lhe"))):
649
exists(pjoin(path,"unweighted_events.lhe")) or
650
exists(pjoin(path,"events.lhe.gz")) or
651
exists(pjoin(path,"events.lhe"))):
601
652
self.parton.append('lhe')
603
654
if 'root' not in self.parton and \
611
662
if 'param_card' not in self.parton and \
612
663
exists(pjoin(path, "param_card.dat")):
613
664
self.parton.append('param_card')
666
if 'syst' not in self.parton and \
667
exists(pjoin(path, "%s_parton_syscalc.log" %self['tag'])):
668
self.parton.append('syst')
670
if glob.glob(pjoin(path,"*.top")):
671
if self['run_mode'] in ['LO', 'NLO']:
672
self.parton.append('top')
674
if level in ['shower','all'] and 'shower' not in nolevel \
675
and self['run_mode'] != 'madevent':
676
# this is for hep/top files from amcatnlo
677
if glob.glob(pjoin(path,"*.hep")) + \
678
glob.glob(pjoin(path,"*.hep.gz")):
679
self.shower.append('hep')
681
if glob.glob(pjoin(path,"*.hepmc")) + \
682
glob.glob(pjoin(path,"*.hepmc.gz")):
683
self.shower.append('hepmc')
685
if glob.glob(pjoin(path,"*.top")):
686
if self['run_mode'] in ['LO', 'NLO']:
687
self.parton.append('top')
689
self.shower.append('top')
615
693
if level in ['pythia', 'all']:
698
781
if level == 'parton':
699
782
if 'gridpack' in self.parton:
700
783
out += self.special_link("./%(run_name)s_gridpack.tar",
701
'gridpack', 'gridpack')
784
'gridpack', 'gridpack')
703
785
if 'lhe' in self.parton:
704
link = './Events/%(run_name)s/unweighted_events.lhe'
786
if exists(pjoin(self.me_dir, 'Events', self['run_name'], 'unweighted_events.lhe')) or\
787
exists(pjoin(self.me_dir, 'Events', self['run_name'], 'unweighted_events.lhe.gz')):
788
link = './Events/%(run_name)s/unweighted_events.lhe'
789
elif exists(pjoin(self.me_dir, 'Events', self['run_name'], 'events.lhe')) or\
790
exists(pjoin(self.me_dir, 'Events', self['run_name'], 'events.lhe.gz')):
791
link = './Events/%(run_name)s/events.lhe'
707
794
out += self.special_link(link, level, name)
711
798
out += ' <a href="./HTML/%(run_name)s/plots_parton.html">plots</a>'
712
799
if 'param_card' in self.parton:
713
800
out += ' <a href="./Events/%(run_name)s/param_card.dat">param_card</a>'
801
if 'top' in self.parton:
804
glob.glob(pjoin(self.me_dir, 'Events', self['run_name'], '*.top')):
805
out += " <a href=\"%s\">%s</a> " % (f, 'TOP')
806
#if 'rwt' in self.parton:
807
# out += ' <a href="./Events/%(run_name)s/%(tag)s_parton_syscalc.log">systematic variation</a>'
715
809
return out % self
811
if level == 'reweight':
812
if 'plot' in self.reweight:
813
out += ' <a href="./HTML/%(run_name)s/plots_%(tag)s.html">plots</a>'
717
816
if level == 'pythia':
718
817
if 'log' in self.pythia:
719
818
out += """ <a href="./Events/%(run_name)s/%(tag)s_pythia.log">LOG</a>"""
764
866
if 'plot' in self.delphes:
765
867
out += """ <a href="./HTML/%(run_name)s/plots_delphes_%(tag)s.html">plots</a>"""
766
868
return out % self
870
if level == 'shower':
871
# this is to add the link to the results after shower for amcatnlo
872
for kind in ['hep', 'hepmc', 'top']:
873
if kind in self.shower:
875
glob.glob(pjoin(self.me_dir, 'Events', self['run_name'], '*.' + kind)) + \
876
glob.glob(pjoin(self.me_dir, 'Events', self['run_name'], '*.' + kind + '.gz')):
877
out += " <a href=\"%s\">%s</a> " % (f, kind.upper())
769
882
def get_nb_line(self):
772
for i in [self.parton, self.pythia, self.pgs, self.delphes]:
885
for i in [self.parton, self.reweight, self.pythia, self.pgs, self.delphes, self.shower]:
775
888
return max([nb_line,1])
789
902
# Compute the text for eachsubpart
791
904
sub_part_template_parton = """
792
<td rowspan=%(cross_span)s><center><a href="./HTML/%(run)s/results.html"> %(cross).4g <font face=symbol>±</font> %(err).2g </a></center></td>
905
<td rowspan=%(cross_span)s><center><a href="./HTML/%(run)s/results.html"> %(cross).4g <font face=symbol>±</font> %(err).2g</a> %(syst)s </center></td>
793
906
<td rowspan=%(cross_span)s><center> %(nb_event)s<center></td><td> %(type)s </td>
794
907
<td> %(links)s</td>
795
908
<td> %(action)s</td>
911
sub_part_template_reweight = """
912
<td rowspan=%(cross_span)s><center> %(cross).4g </center></td>
913
<td rowspan=%(cross_span)s><center> %(nb_event)s<center></td><td> %(type)s </td>
798
918
sub_part_template_pgs = """
799
919
<td> %(type)s </td>
800
920
<td> %(links)s</td>
801
921
<td> %(action)s</td>
924
sub_part_template_shower = """
925
<td> %(type)s %(run_mode)s </td>
804
930
# Compute the HTMl output for subpart
805
931
nb_line = self.get_nb_line()
827
954
subresults_html = ''
828
for type in ['parton', 'pythia', 'pgs', 'delphes']:
829
data = getattr(self, type)
955
for ttype in ['parton', 'pythia', 'pgs', 'delphes','reweight','shower']:
956
data = getattr(self, ttype)
833
local_dico = {'type': type, 'run': self['run_name']}
960
local_dico = {'type': ttype, 'run': self['run_name'], 'syst': ''}
961
if 'run_mode' in self.keys():
962
local_dico['run_mode'] = self['run_mode']
964
local_dico['run_mode'] = ""
836
template = sub_part_template_parton
838
if type=='parton' and self['cross_pythia']:
966
if ttype == 'reweight':
967
template = sub_part_template_reweight
969
template = sub_part_template_parton
971
if ttype=='parton' and self['cross_pythia']:
839
972
local_dico['cross_span'] = 1
840
973
local_dico['cross'] = self['cross']
841
974
local_dico['err'] = self['error']
842
975
local_dico['nb_event'] = self['nb_event']
976
if 'syst' in self.parton:
977
local_dico['syst'] = '<font face=symbol>±</font> <a href="./Events/%(run_name)s/%(tag)s_parton_syscalc.log">systematics</a>' \
978
% {'run_name':self['run_name'], 'tag': self['tag']}
843
979
elif self['cross_pythia']:
845
981
local_dico['cross_span'] = nb_line -1
851
987
local_dico['nb_event'] = 0
852
988
local_dico['cross'] = self['cross_pythia']
853
989
local_dico['err'] = self['error_pythia']
990
if 'rwt' in self.pythia:
991
local_dico['syst'] = '<font face=symbol>±</font> <a href="./Events/%(run_name)s/%(tag)s_Pythia_syscalc.log">systematics</a>' \
992
% {'run_name':self['run_name'], 'tag': self['tag']}
994
local_dico['type'] += ' %s' % self['run_mode']
855
995
local_dico['cross_span'] = nb_line
856
996
local_dico['cross'] = self['cross']
857
997
local_dico['err'] = self['error']
858
998
local_dico['nb_event'] = self['nb_event']
999
if 'syst' in self.parton:
1000
local_dico['syst'] = '<font face=symbol>±</font> <a href="./Events/%(run_name)s/%(tag)s_parton_syscalc.log">systematics</a>' \
1001
% {'run_name':self['run_name'], 'tag': self['tag']}
860
elif type == 'pythia' and self['cross_pythia']:
1003
elif ttype == 'pythia' and self['cross_pythia']:
861
1004
template = sub_part_template_parton
863
1006
local_dico['cross_span'] = nb_line - 1
869
1012
local_dico['cross_span'] = nb_line
870
1013
local_dico['nb_event'] = self['nb_event']
1014
if 'rwt' in self.pythia:
1015
local_dico['syst'] = '<font face=symbol>±</font> <a href="./Events/%(run_name)s/%(tag)s_Pythia_syscalc.log">systematics</a>' \
1016
% {'run_name':self['run_name'], 'tag': self['tag']}
871
1017
local_dico['cross'] = self['cross_pythia']
872
1018
local_dico['err'] = self['error_pythia']
1020
elif ttype == 'shower':
1021
template = sub_part_template_shower
1023
local_dico['cross_span'] = nb_line - 1
1025
local_dico['cross_span'] = nb_line
874
template = sub_part_template_pgs
1027
template = sub_part_template_pgs
876
1029
# Fill the links
877
local_dico['links'] = self.get_links(type)
1030
local_dico['links'] = self.get_links(ttype)
879
1032
# Fill the actions
882
local_dico['action'] = """
883
<FORM ACTION="http://%(web)s/cgi-bin/RunProcess/handle_runs-pl" ENCTYPE="multipart/form-data" METHOD="POST">
884
<INPUT TYPE=HIDDEN NAME=directory VALUE="%(me_dir)s">
885
<INPUT TYPE=HIDDEN NAME=whattodo VALUE="remove_level">
886
<INPUT TYPE=HIDDEN NAME=level VALUE="all">
887
<INPUT TYPE=HIDDEN NAME=tag VALUE=\"""" + self['tag'] + """\">
888
<INPUT TYPE=HIDDEN NAME=run VALUE="%(run_name)s">
889
<INPUT TYPE=SUBMIT VALUE="Remove run">
892
<FORM ACTION="http://%(web)s/cgi-bin/RunProcess/handle_runs-pl" ENCTYPE="multipart/form-data" METHOD="POST">
893
<INPUT TYPE=HIDDEN NAME=directory VALUE="%(me_dir)s">
894
<INPUT TYPE=HIDDEN NAME=whattodo VALUE="pythia">
895
<INPUT TYPE=HIDDEN NAME=run VALUE="%(run_name)s">
896
<INPUT TYPE=SUBMIT VALUE="Run Pythia">
899
local_dico['action'] = self.command_suggestion_html('remove %s parton --tag=%s' \
900
% (self['run_name'], self['tag']))
901
local_dico['action'] += self.command_suggestion_html('pythia %s ' % self['run_name'])
902
elif type == 'pythia':
1033
if ttype == 'parton':
1035
local_dico['action'] = """
1036
<FORM ACTION="http://%(web)s/cgi-bin/RunProcess/handle_runs-pl" ENCTYPE="multipart/form-data" METHOD="POST">
1037
<INPUT TYPE=HIDDEN NAME=directory VALUE="%(me_dir)s">
1038
<INPUT TYPE=HIDDEN NAME=whattodo VALUE="remove_level">
1039
<INPUT TYPE=HIDDEN NAME=level VALUE="all">
1040
<INPUT TYPE=HIDDEN NAME=tag VALUE=\"""" + self['tag'] + """\">
1041
<INPUT TYPE=HIDDEN NAME=run VALUE="%(run_name)s">
1042
<INPUT TYPE=SUBMIT VALUE="Remove run">
1045
<FORM ACTION="http://%(web)s/cgi-bin/RunProcess/handle_runs-pl" ENCTYPE="multipart/form-data" METHOD="POST">
1046
<INPUT TYPE=HIDDEN NAME=directory VALUE="%(me_dir)s">
1047
<INPUT TYPE=HIDDEN NAME=whattodo VALUE="pythia">
1048
<INPUT TYPE=HIDDEN NAME=run VALUE="%(run_name)s">
1049
<INPUT TYPE=SUBMIT VALUE="Run Pythia">
1052
local_dico['action'] = self.command_suggestion_html('remove %s parton --tag=%s' \
1053
% (self['run_name'], self['tag']))
1054
# this the detector simulation and pythia should be available only for madevent
1055
if self['run_mode'] == 'madevent':
1056
local_dico['action'] += self.command_suggestion_html('pythia %s ' % self['run_name'])
1060
elif ttype == 'shower':
1062
local_dico['action'] = """
1063
<FORM ACTION="http://%(web)s/cgi-bin/RunProcess/handle_runs-pl" ENCTYPE="multipart/form-data" METHOD="POST">
1064
<INPUT TYPE=HIDDEN NAME=directory VALUE="%(me_dir)s">
1065
<INPUT TYPE=HIDDEN NAME=whattodo VALUE="remove_level">
1066
<INPUT TYPE=HIDDEN NAME=level VALUE="all">
1067
<INPUT TYPE=HIDDEN NAME=tag VALUE=\"""" + self['tag'] + """\">
1068
<INPUT TYPE=HIDDEN NAME=run VALUE="%(run_name)s">
1069
<INPUT TYPE=SUBMIT VALUE="Remove run">
1072
<FORM ACTION="http://%(web)s/cgi-bin/RunProcess/handle_runs-pl" ENCTYPE="multipart/form-data" METHOD="POST">
1073
<INPUT TYPE=HIDDEN NAME=directory VALUE="%(me_dir)s">
1074
<INPUT TYPE=HIDDEN NAME=whattodo VALUE="pythia">
1075
<INPUT TYPE=HIDDEN NAME=run VALUE="%(run_name)s">
1076
<INPUT TYPE=SUBMIT VALUE="Run Pythia">
1079
local_dico['action'] = self.command_suggestion_html('remove %s parton --tag=%s' \
1080
% (self['run_name'], self['tag']))
1081
# this the detector simulation and pythia should be available only for madevent
1082
if self['run_mode'] == 'madevent':
1083
local_dico['action'] += self.command_suggestion_html('pythia %s ' % self['run_name'])
1087
elif ttype == 'pythia':
903
1088
if self['tag'] == runresults.get_last_pythia():
904
1089
if runresults.web:
905
1090
local_dico['action'] = """