37 def execute(self):
38
39 if self.topUpSvc is None:
40 return StatusCode.Success
41
42
43 if float(self.topUpSvc.getNPerFile()-self.topUpSvc.getNUsedSoFar())*self.topUpSvc.getEfficiency()>self.threshold:
44
45 return StatusCode.Success
46
47
48 a_dir = None
49
50 if os.access('madevent',os.R_OK):
51 self.msg.info( 'Found a grid pack at madevent/ - using it for generation' )
52 a_dir = 'madevent'
53 elif len( glob.glob( '*PROC*' ) )==0:
54 self.msg.
error(
'Need to re-run, but cannot find directory for running!' )
55 return StatusCode.Failure
56 else:
57 a_dir = sorted( glob.glob( '*PROC*' ) )[-1]
58 self.msg.info( 'Running from process directory '+a_dir )
59
60 currdir=os.getcwd()
61 os.chdir(a_dir)
62
63
64 oldcard_f = open('Cards/run_card.dat','r')
65 oldlines = oldcard_f.readlines()
66 oldcard_f.close()
67 newcard = open('Cards/run_card.dat','w')
68 for line in oldlines:
69 if ' nevents ' in line:
70 newcard.write(' %i = nevents ! Number of unweighted events requested \n'%(self.topUpSvc.getNPerFile()))
71 elif ' iseed ' in line:
72 old_seed = int( line.split()[0] )
73 newcard.write(' %i = iseed ! rnd seed (0=assigned automatically=default)) \n'%(old_seed+2000000))
74 else:
75 newcard.write(line)
76 newcard.close()
77
78
79 self.msg.info( 'Started generating at '+str(time.asctime()) )
80 if self.njobs>1:
81 self.msg.info('Running parallel generation. Should be nice and fast.')
82 generate = subprocess.Popen(['bin/generate_events',str(self.mode),str(self.njobs),'OTFTopUp'],stdin=subprocess.PIPE)
83 else:
84 self.msg.info('Running serial generation. This will take a bit more time than parallel generation.')
85 generate = subprocess.Popen(['bin/generate_events','0','OTFTopUp'],stdin=subprocess.PIPE)
86 generate.wait()
87 self.msg.info( 'Finished generating at'+str(time.asctime()) )
88
89
90 a_new_file_name = 'otf_lhe.events'
91 if len( glob.glob( currdir+'/*events.[*0-9]' ) )>0:
92 a_new_file_name = sorted( glob.glob( currdir+'/*events.[*0-9]' ) )[-1]
93 a_new_file_name = a_new_file_name[:a_new_file_name.rfind('.')]+str( int(a_new_file_name.split('.')[-1])+1 )
94 elif len( glob.glob( currdir+'/*events' ) )>0:
95 a_new_file_name = sorted( glob.glob( currdir+'/*events' ) )[-1]+'.1'
96
97
98 if '/' in a_new_file_name:
99 a_new_file_name = a_new_file_name.split('/')[-1]
100
101
102 unzip = subprocess.Popen(['gunzip','Events/OTFTopUp/unweighted_events.lhe.gz'])
103 unzip.wait()
104 shutil.move('Events/OTFTopUp/unweighted_events.lhe',currdir+'/'+a_new_file_name)
105
106
107 os.chdir(currdir)
108
109
110 self.fileList += [ a_new_file_name ]
111 if len(self.fileList)>2:
112
113 self.msg.info('Removing old file '+self.fileList[-3])
114 if os.access( currdir+'/'+self.fileList[-3] , os.R_OK ):
115 remove_old = subprocess.Popen(['rm',(currdir+'/'+self.fileList[-3])])
116 remove_old.wait()
117
118
119 self.topUpSvc.newFile( a_new_file_name )
120
121 return StatusCode.Success