File indexing completed on 2025-08-05 08:11:58
0001 from optparse import OptionParser
0002 import time
0003 import os
0004 import pwd
0005 import sys
0006 import re
0007 import config_combinechain as config
0008
0009 def replacetext(filename, search_text, replace_text):
0010 with open(filename, 'r+') as f:
0011 file = f.read()
0012 file = re.sub(search_text, replace_text, file)
0013 f.seek(0)
0014 f.write(file)
0015 f.truncate()
0016
0017
0018 if __name__ == '__main__':
0019 parser = OptionParser(usage="usage: %prog ver [options -h]")
0020 parser.add_option("-i", "--inttdst", action="store_true", default=False, help="Run INTT DST production")
0021 parser.add_option("-n", "--inttntuple", action="store_true", default=False, help="Run INTT ntuple production")
0022 parser.add_option("-m", "--centmbntuple", action="store_true", default=False, help="Run Centrality&MB ntuple production")
0023 parser.add_option("-c", "--runcombiner", action="store_true", default=False, help="Run INTT event combiner")
0024 parser.add_option("-p", "--printparam", action="store_true", default=False, help="Print parameters in config_combinechain.py")
0025
0026 (opt, args) = parser.parse_args()
0027 print('opt: {}'.format(opt))
0028
0029
0030 if len(args) > 1:
0031 parser.error("More than 1 steps to be run. Please run one step at a time")
0032 sys.exit(1)
0033
0034
0035 inttdst = opt.inttdst
0036 inttntuple = opt.inttntuple
0037 centmbntuple = opt.centmbntuple
0038 runcombiner = opt.runcombiner
0039 printparam = opt.printparam
0040
0041 os.makedirs(config.softwarebasedir, exist_ok=True)
0042
0043 if printparam:
0044 for name, value in vars(config).items():
0045 if not name.startswith('__') and not 'module' in str(getattr(config, name)):
0046 print('{:50} : {}'.format(name, value))
0047
0048
0049 if inttdst:
0050 print('Run INTT DST production')
0051 if not os.path.exists(config.macrodir):
0052 print('Directory {} does not exist'.format(config.macrodir))
0053 os.system('cd {} && git clone {}'.format(config.softwarebasedir, config.macrorepo))
0054 else:
0055 print('Directory {} exists. git pull to update'.format(config.macrodir))
0056 os.system('cd {} && git pull'.format(config.macrodir))
0057
0058 os.chdir('{}/InttProduction'.format(config.macrodir))
0059
0060 if config.inttdstproduction_runTrkrHits:
0061 replacetext('Fun4All_Intt_Combiner.C', 'bool runTrkrHits = false', 'bool runTrkrHits = true')
0062 if config.inttdstproduction_runTkrkClus:
0063 replacetext('Fun4All_Intt_Combiner.C', 'bool runTkrkClus = false', 'bool runTkrkClus = true')
0064 if config.inttdstproduction_stripRawHit:
0065 replacetext('Fun4All_Intt_Combiner.C', 'bool stripRawHit = false', 'bool stripRawHit = true')
0066
0067 cmdlist = ['chmod 755 intt_makelist.sh',
0068 'intt_makelist.sh {}'.format(config.runnumber),
0069 'root -l -b -q Fun4All_Intt_Combiner.C\({}\)'.format(config.inttdstproduction_InttUnpacker_nEvt)]
0070
0071 cmdstr = ' && '.join(cmdlist)
0072 os.system(cmdstr)
0073
0074 print ('Done INTT DST production, move the file to the production directory and clean up')
0075 os.system('rm intt*.list && mv intt-{:08d}.root {}'.format(config.runnumber,config.productiondir))
0076
0077
0078 if inttntuple:
0079 print('Run INTT ntuple production')
0080
0081 if not os.path.isfile('{}/intt-{:08d}.root'.format(config.productiondir,int(config.runnumber))):
0082
0083 if not os.path.isfile('/sphenix/user/hjheng/sPHENIXRepo/macros/InttProduction/ProdDST-HotDead-ADC-Survey/intt-{:08d}.root'.format(int(config.runnumber))):
0084 print('Intt DST does not exist. Exit')
0085 sys.exit(1)
0086 else:
0087 print('Pre-generated Intt DST exists -> Copy it to the production directory')
0088 os.system('cp -r /sphenix/user/hjheng/sPHENIXRepo/macros/InttProduction/ProdDST-HotDead-ADC-Survey {}'.format(config.productiondir))
0089
0090 os.chdir('{}/condor/'.format(config.dndetamacrodir))
0091 cmdlist = ['chmod 755 runCondor.py',
0092 'python runCondor.py --data --runInttData --runnumber {} --productiontag {} --generator none --eventPerJob {} --nJob {} --outputdir {} --softwareversion {} {}'.format(config.runnumber,
0093 config.inttntupleproduction_productionTag,
0094 config.inttntupleproduction_eventPerJob,
0095 config.inttntupleproduction_nJob,
0096 config.productiondir+'/'+config.inttntupleproduction_InttNtupleDir,
0097 config.inttntupleproduction_softwareversion,
0098 '--submitcondor' if config.inttntupleproduction_submitcondor else '')]
0099 cmdstr = ' && '.join(cmdlist)
0100 os.system(cmdstr)
0101
0102
0103 if centmbntuple:
0104 print('Run Centrality&Minimum-bias ntuple production')
0105 os.chdir('{}'.format(config.dndetamacrodir))
0106 os.system('CreateDstList.pl --run {} --build {} --cdb {} DST_CALO_run1auau'.format(config.runnumber, config.centntupleproduction_softwareversion.replace('.', ''), config.centntupleproduction_productionTag))
0107 os.chdir('{}/condor/'.format(config.dndetamacrodir))
0108 cmdlist = ['chmod 755 runCondor.py',
0109 'python runCondor.py --data --runnumber {} --productiontag {} --generator none --eventPerJob {} --nJob {} --outputdir {} --softwareversion {} {}'.format(config.runnumber,
0110 config.centntupleproduction_productionTag,
0111 config.centntupleproduction_eventPerJob,
0112 config.centntupleproduction_nJob,
0113 config.productiondir+'/'+config.centntupleproduction_CentralityNtupleDir,
0114 config.centntupleproduction_softwareversion,
0115 '--submitcondor' if config.centntupleproduction_submitcondor else '')]
0116 cmdstr = ' && '.join(cmdlist)
0117 os.system(cmdstr)
0118
0119
0120 if runcombiner:
0121 print('Run INTT event combiner')
0122 os.chdir('{}/{}'.format(config.productiondir,config.inttntupleproduction_InttNtupleDir))
0123 if not os.path.isfile('ntuple_merged.root'):
0124 os.system('hadd -f ntuple_merged.root ntuple_*.root')
0125
0126
0127 os.chdir('{}/INTT_MBD_evt_combiner'.format(os.path.abspath(os.path.join(config.productiondir, os.path.pardir, os.path.pardir))))
0128 os.system('python intt_mbd_evt_combiner_v1.py {}/{} {}/{}/ntuple_merged.root EventTree {}/{}/ntuple_00000.root EventTree'.format(config.productiondir,
0129 config.inttmbdcombine_combinedNtupleName,
0130 config.productiondir,
0131 config.inttntupleproduction_InttNtupleDir,
0132 config.productiondir,
0133 config.centntupleproduction_CentralityNtupleDir))
0134
0135
0136
0137
0138