~maddevelopers/mg5amcnlo/color_ordering

« back to all changes in this revision

Viewing changes to madgraph/various/systematics.py

  • Committer: olivier-mattelaer
  • Date: 2021-02-21 11:03:42 UTC
  • mfrom: (50.85.73 madgraph5)
  • Revision ID: olivier-mattelaer-20210221110342-wn2nvdefctey5e0k
merge up to 2.8.0 --not python3 compatible

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
################################################################################
15
15
from __future__ import division
16
16
 
 
17
from __future__ import absolute_import
 
18
from __future__ import print_function
 
19
from six.moves import range
 
20
from six.moves import zip
17
21
if __name__ == "__main__":
18
22
    import sys
19
23
    import os
20
24
    root = os.path.dirname(__file__)
21
 
    if os.path.basename(root) == 'internal':
22
 
        sys.path.append(os.path.dirname(root))
23
 
    else:
24
 
        sys.path.append(os.path.dirname(os.path.dirname(root)))
 
25
    if __package__ is None:
 
26
        if os.path.basename(root) == 'internal':
 
27
            __package__ = "internal"
 
28
            sys.path.append(os.path.dirname(root))
 
29
            import internal
 
30
        else:
 
31
            __package__ = "madgraph.various"
 
32
 
 
33
#        sys.path.append(os.path.dirname(os.path.dirname(root)))
25
34
        
26
 
import lhe_parser
27
 
import banner
28
 
import banner as banner_mod
 
35
from . import lhe_parser
 
36
from . import banner
 
37
from . import banner as banner_mod
29
38
import itertools
30
 
import misc
 
39
from . import misc
31
40
import math
32
41
import os 
33
42
import re
34
43
import sys
35
44
import time
36
 
import StringIO
 
45
from six import StringIO
37
46
 
38
47
pjoin = os.path.join
39
48
root = os.path.dirname(__file__)
44
53
class Systematics(object):
45
54
    
46
55
    def __init__(self, input_file, output_file,
47
 
                 start_event=0, stop_event=sys.maxint, write_banner=False,
 
56
                 start_event=0, stop_event=sys.maxsize, write_banner=False,
48
57
                 mur=[0.5,1,2],
49
58
                 muf=[0.5,1,2],
50
59
                 alps=[1],
113
122
        if isinstance(self.banner.run_card, banner_mod.RunCardLO):
114
123
            self.is_lo = True
115
124
            if not self.banner.run_card['use_syst']:
116
 
                raise SystematicsError, 'The events have not been generated with use_syst=True. Cannot evaluate systematics error on these events.'
 
125
                raise SystematicsError('The events have not been generated with use_syst=True. Cannot evaluate systematics error on these events.')
117
126
            
118
127
            if self.banner.run_card['nb_neutron1'] != 0 or \
119
128
               self.banner.run_card['nb_neutron2'] != 0 or \
123
132
        else:
124
133
            self.is_lo = False
125
134
            if not self.banner.run_card['store_rwgt_info']:
126
 
                raise SystematicsError, 'The events have not been generated with store_rwgt_info=True. Cannot evaluate systematics error on these events.'
 
135
                raise SystematicsError('The events have not been generated with store_rwgt_info=True. Cannot evaluate systematics error on these events.')
127
136
 
128
137
        # MUR/MUF/ALPS PARSING
129
138
        if isinstance(mur, str):
158
167
        self.stop_event=int(stop_event)
159
168
        if start_event != 0:
160
169
            self.log( "#starting from event #%s" % start_event)
161
 
        if stop_event != sys.maxint:
 
170
        if stop_event != sys.maxsize:
162
171
            self.log( "#stopping at event #%s" % stop_event)
163
172
        
164
173
        # LHAPDF set 
192
201
                        try:
193
202
                            self.pdf.append(lhapdf.mkPDF(int(name)+int(arg)))
194
203
                        except:
195
 
                            raise Exception, 'Individual error sets need to be called with LHAPDF NAME not with LHAGLUE NUMBER'
 
204
                            raise Exception('Individual error sets need to be called with LHAPDF NAME not with LHAGLUE NUMBER')
196
205
                    else:
197
206
                        self.pdf.append(lhapdf.mkPDF(name, int(arg)))
198
207
                else:
316
325
        """remove the weight as requested by the user"""
317
326
        
318
327
        rwgt_data = event.parse_reweight()
319
 
        for name in rwgt_data.keys():
 
328
        for name in list(rwgt_data.keys()):
320
329
            if not self.is_wgt_kept(name):
321
330
                del rwgt_data[name]
322
331
                event.reweight_order.remove(name)
361
370
                wgts = [self.get_nlo_wgt(event, *arg) for arg in self.args]
362
371
            
363
372
            if wgts[0] == 0:
364
 
                print wgts
365
 
                print event
 
373
                print(wgts)
 
374
                print(event)
366
375
                raise Exception
367
376
            
368
377
            wgt = [event.wgt*wgts[i]/wgts[0] for i in range(1,len(wgts))]
369
378
            all_cross = [(all_cross[j] + event.wgt*wgts[j]/wgts[0]) for j in range(len(wgts))]
370
379
            
371
380
            rwgt_data = event.parse_reweight()
372
 
            rwgt_data.update(zip(ids, wgt))
 
381
            rwgt_data.update(list(zip(ids, wgt)))
373
382
            event.reweight_order += ids
374
383
            # order the 
375
384
            self.output.write(str(event))
401
410
        #print "normalisation is ", norm
402
411
        #print "nb_event is ", nb_event
403
412
    
404
 
        max_scale, min_scale = 0,sys.maxint
405
 
        max_alps, min_alps = 0, sys.maxint
406
 
        max_dyn, min_dyn = 0,sys.maxint
 
413
        max_scale, min_scale = 0,sys.maxsize
 
414
        max_alps, min_alps = 0, sys.maxsize
 
415
        max_dyn, min_dyn = 0,sys.maxsize
407
416
        pdfs = {}
408
417
        dyns = {} # dyn : {'max': , 'min':}
409
418
 
441
450
            if pdf == self.orig_pdf and (alps!=1 or mur!=1 or muf!=1) and \
442
451
                                                (dyn!=self.orig_dyn or dyn!=-1):
443
452
                if dyn not in dyns:
444
 
                    dyns[dyn] = {'max':0, 'min':sys.maxint,'central':0}
 
453
                    dyns[dyn] = {'max':0, 'min':sys.maxsize,'central':0}
445
454
                curr = dyns[dyn]
446
455
                curr['max'] = max(curr['max'],all_cross[i])
447
456
                curr['min'] = min(curr['min'],all_cross[i])
448
457
            if pdf == self.orig_pdf and (alps==1 and mur==1 and muf==1) and \
449
458
                                                (dyn!=self.orig_dyn or dyn!=-1):
450
459
                if dyn not in dyns:
451
 
                    dyns[dyn] = {'max':0, 'min':sys.maxint,'central':all_cross[i]}
 
460
                    dyns[dyn] = {'max':0, 'min':sys.maxsize,'central':all_cross[i]}
452
461
                else:
453
462
                    dyns[dyn]['central'] = all_cross[i]          
454
463
                
463
472
  
464
473
        stdout.write('\n') 
465
474
                
466
 
        resume = StringIO.StringIO()
 
475
        resume = StringIO()
467
476
                
468
477
        resume.write( '#***************************************************************************\n')
469
478
        resume.write( "#\n")
972
981
                        misc.sprint(onewgt)
973
982
                        misc.sprint(cevent)
974
983
                        misc.sprint(mur2,muf2)
975
 
                        raise Exception, 'not enough agreement between stored value and computed one'
 
984
                        raise Exception('not enough agreement between stored value and computed one')
976
985
                
977
986
        return wgt
978
987
                            
1015
1024
                else:
1016
1025
                    opts[key] = values
1017
1026
        else:
1018
 
            raise SystematicsError, "unknow argument %s" % arg
 
1027
            raise SystematicsError("unknow argument %s" % arg)
1019
1028
 
1020
1029
    #load run_card and extract parameter if needed.
1021
1030
    if 'from_card' in opts:
1026
1035
                try:
1027
1036
                    lhe = lhe_parser.EventFile(input)
1028
1037
                    break
1029
 
                except OSError,error:
1030
 
                    print error
 
1038
                except OSError as error:
 
1039
                    print(error)
1031
1040
                    time.sleep(15*(i+1))
1032
1041
            else:
1033
1042
                raise
1094
1103
if __name__ == "__main__":
1095
1104
        
1096
1105
    sys_args = sys.argv[1:]
1097
 
    for i, arg in enumerate(sys_args) :
 
1106
    for i, arg in enumerate(list(sys_args)) :
1098
1107
        if arg.startswith('--lhapdf_config=') :
1099
1108
            lhapdf = misc.import_python_lhapdf(arg[len('--lhapdf_config='):])
1100
1109
            del sys_args[i]