Back to home page

sPhenix code displayed by LXR

 
 

    


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     #! Run one step at a time
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         # Check if the intt dst exists in the production directory
0081         if not os.path.isfile('{}/intt-{:08d}.root'.format(config.productiondir,int(config.runnumber))):
0082             # try to copy from /sphenix/user/hjheng/sPHENIXRepo/macros/InttProduction/intt-00020869.root , otherwise exit
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         # cd to two directories up
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