diff --git a/madgraph_gridpack.py b/madgraph_gridpack.py index d5326f0..b7d1ed3 100644 --- a/madgraph_gridpack.py +++ b/madgraph_gridpack.py @@ -8,7 +8,7 @@ class MadgraphGridpack(Gridpack): def prepare_default_card(self): """ - Copy default cards to local directory + Copy default cards to local directory : proc_card.dat and madspin_card.dat """ cards_path = self.get_cards_path() job_files_path = self.get_job_files_path() @@ -17,6 +17,26 @@ def prepare_default_card(self): if glob.glob(f'{cards_path}/*_cuts.f'): os.system(f'cp {cards_path}/*_cuts.f {job_files_path}') + + def get_proc_card(self): + """ + Read proc card + Glue madspin card if it exists + """ + if glob.glob(f'{cards_path}/*_proc_card.dat'): + with open(f'{cards_path}/*_proc_card.dat') as input_file: + proc_card = input_file.read() + else: + raise Exception(f'Could not find {cards_path} as process card') + + if glob.glob(f'{cards_path}/*_madspin_card.dat'): + with open(f'{cards_path}/*_madpsin_card.dat') as input_file: + proc_card += '\n\n\n\n\n\n#### madspin_card.dat\n' + proc_card += input_file.read() + + return proc_card + + def get_run_card(self): """ Get cards from "Template" directory and customize them diff --git a/main.py b/main.py index 343e586..0f33ed9 100644 --- a/main.py +++ b/main.py @@ -258,10 +258,10 @@ def get_gridpacks(): return output_text([gridpacks, count]) -@app.route('/api/get_fragment/') -def get_fragment(gridpack_id): +@app.route('/api/get_proc_card/') +def get_proc_card(gridpack_id): """ - API to get gridpack's fragment + API to get gridpack's proc card """ database = Database() gridpack_json = database.get_gridpack(gridpack_id) @@ -269,10 +269,8 @@ def get_fragment(gridpack_id): return output_text({'message': 'Gridpack not found'}, code=404) gridpack = Gridpack.make(gridpack_json) - fragment_builder = FragmentBuilder() - fragment = fragment_builder.build_fragment(gridpack) - - return output_text(fragment, headers={'Content-Type': 'text/plain'}) + content = gridpack.get_proc_card() + return output_text(content, headers={'Content-Type': 'text/plain'}) @app.route('/api/get_run_card/') @@ -305,6 +303,23 @@ def get_customize_card(gridpack_id): return output_text(content, headers={'Content-Type': 'text/plain'}) +@app.route('/api/get_fragment/') +def get_fragment(gridpack_id): + """ + API to get gridpack's fragment + """ + database = Database() + gridpack_json = database.get_gridpack(gridpack_id) + if not gridpack_json: + return output_text({'message': 'Gridpack not found'}, code=404) + + gridpack = Gridpack.make(gridpack_json) + fragment_builder = FragmentBuilder() + fragment = fragment_builder.build_fragment(gridpack) + + return output_text(fragment, headers={'Content-Type': 'text/plain'}) + + def user_info_dict(): """ Get user name, login, email and authorized flag from request headers diff --git a/powheg_gridpack.py b/powheg_gridpack.py index 8aca2c2..64ef9a9 100644 --- a/powheg_gridpack.py +++ b/powheg_gridpack.py @@ -7,9 +7,7 @@ class PowhegGridpack(Gridpack): def get_run_card(self): """ - Get cards from "Template" directory and customize them - Get cards from "ModelParams" directory and customize them - Glue them together + Get cards from "Template" directory and customize them (run card) """ dataset_dict = self.get_dataset_dict() campaign_dict = self.get_campaign_dict() @@ -24,6 +22,14 @@ def get_run_card(self): dataset_dict.get('template_user', []), template_vars) + return run_card + + def get_customize_card(self) + """ + Get cards from "ModelParams" directory and customize them (customize card) + """ + dataset_dict = self.get_dataset_dict() + campaign_dict = self.get_campaign_dict() model_params_path = self.get_model_params_path() model_params_name = dataset_dict['model_params'] model_params_vars = dataset_dict.get('model_params_vars', []) @@ -33,21 +39,21 @@ def get_run_card(self): dataset_dict.get('model_params_user', []), model_params_vars) - return run_card + '\n' + customize_card + return customize_card - def prepare_run_card(self): + def prepare_input_card(self): """ - Get run card and write it to job files dir + Get run card and customize card, glue them together into input card and write it to job files dir """ job_files_path = self.get_job_files_path() output_file_name = os.path.join(job_files_path, 'powheg.input') - run_card = self.get_run_card() - self.logger.debug('Writing customized run card %s', output_file_name) - self.logger.debug(run_card) + input_card = self.get_run_card() + '\n\n\n\n' + self.get_customize_card() + self.logger.debug('Writing customized input card %s', output_file_name) + self.logger.debug(input_card) with open(output_file_name, 'w') as output_file: - output_file.write(run_card) + output_file.write(input_card) - def get_customize_card(self): + def get_proc_card(self): """ Create card with just the process name for proper Powheg gridpack production @@ -56,17 +62,17 @@ def get_customize_card(self): template_name = dataset_dict['template'] return template_name.split('.', 1)[0] - def prepare_customize_card(self): + def prepare_proc_card(self): """ - Get customize card and write it to job files dir + Get proc card and write it to job files dir """ job_files_path = self.get_job_files_path() output_file_name = os.path.join(job_files_path, 'process.dat') - customize_card = self.get_customize_card() - self.logger.debug('Writing customized card %s', output_file_name) - self.logger.debug(customize_card) + proc_card = self.get_proc_card() + self.logger.debug('Writing proc card %s', output_file_name) + self.logger.debug(proc_card) with open(output_file_name, 'w') as output_file: - output_file.write(customize_card) + output_file.write(proc_card) def prepare_job_archive(self): """ @@ -74,7 +80,7 @@ def prepare_job_archive(self): """ job_files_path = self.get_job_files_path() pathlib.Path(job_files_path).mkdir(parents=True, exist_ok=True) - self.prepare_run_card() - self.prepare_customize_card() + self.prepare_input_card() + self.prepare_proc_card() local_dir = self.local_dir() os.system(f'tar -czvf {local_dir}/input_files.tar.gz -C {local_dir} input_files')