ATLAS Offline Software
Loading...
Searching...
No Matches
TestSUSYToolsAlg.py
Go to the documentation of this file.
1#!/usr/bin/env python
2
3# Read the submission directory as a command line argument. You can
4# extend the list of arguments with your private ones later on.
5import sys
6import optparse
7from glob import glob
8from datetime import date
9
10#import AthenaPoolCnvSvc.ReadAthenaPool #read xAOD files
11
12parser = optparse.OptionParser()
13#
14parser.add_option('--driver', dest = 'driver', choices = ['direct','grid','lxplus'], default = 'direct')
15parser.add_option('--gridTag', dest = 'gridTag')
16parser.add_option('--submitFlags', dest = 'submitFlags')
17parser.add_option('--express', dest = 'express', default = False, action = 'store_true' )
18parser.add_option('-n', '--dryrun', dest = 'dryrun', default=False, action = 'store_true' )
19#
20parser.add_option('--log-level', dest = 'log_level', default = 'INFO', choices = ['ALWAYS','FATAL','ERROR','WARNING','INFO','DEBUG','VERBOSE'])
21parser.add_option('--dosyst', dest = 'dosyst', default = False, action = 'store_true')
22parser.add_option( '-s', '--submission-dir', dest = 'submission_dir', default = 'submitDir', help = 'Submission directory for EventLoop' )
23parser.add_option('-t', '--type', dest = 'type', default = 'mc20e', help = 'Job type. (mc20a, mc20d, mc20e, mc23a, mc23d, mc23e, data18, data22, data23, data24)', choices = ['mc20a', 'mc20d', 'mc20e', 'mc23a', 'mc23d', 'mc23e', 'data18', 'data22', 'data23', 'data24'])
24parser.add_option('--AF', dest = 'AF', default = False, action = 'store_true' )
25parser.add_option('-f', '--flav', dest = 'flav', default = 'PHYS', choices = ["PHYS", "PHYSLITE"], help = 'input DAOD flavour' )
26parser.add_option('-m', '--maxEvts', dest = 'maxEvts', type = 'int', default = -1, help = 'Max events (-1 is all)' )
27parser.add_option('-M', '--maxEvtsManual', dest = 'maxEvtsManual', type = 'int')
28parser.add_option('-p', '--ptag', dest = 'ptag', default = 'p6266', help = 'ptag' )
29parser.add_option('-c', '--configFile', dest = 'configFile', help = 'Override configfile' )
30parser.add_option('--grl', dest = 'grl')
31parser.add_option('--inputDir', dest = 'inputDir')
32parser.add_option('--inputFile', dest = 'inputFile')
33parser.add_option('--inputGrid', dest = 'inputGrid')
34parser.add_option('--inputXRD', dest = 'inputXRD')
35parser.add_option('--overwrite', dest = 'overwrite', default = False, action = 'store_true' )
36( options, args ) = parser.parse_args()
37
38# Print configuration
39print("Configured input data ptag: %s"%(options.ptag))
40ptageqdata = {'p6266' : 'p6269', 'p6490':'p6479', 'p6697':'p6697', 'p7018':'p7018'}
41if 'data2' in options.type and options.ptag in ptageqdata:
42 options.ptag = ptageqdata[options.ptag]
43 print("Overriding ptag to equivalent data ptag: -> %s"%(options.ptag))
44print("Configured input data type: %s"%(options.type))
45print("Configured input data DAOD flavour: %s"%(options.flav))
46print("Configured input data sim type: %s"%('FullSim' if not options.AF else 'AF'))
47
48# Set up (Py)ROOT.
49import ROOT
50ROOT.xAOD.Init().ignore()
51
52# for logging
53outputlvl = {'INFO':ROOT.MSG.INFO,'DEBUG':ROOT.MSG.DEBUG,'VERBOSE':ROOT.MSG.VERBOSE,'FATAL':ROOT.MSG.FATAL,'ALWAYS':ROOT.MSG.ALWAYS,'ERROR':ROOT.MSG.ERROR,'WARNING':ROOT.MSG.WARNING}
54
55# Set up the sample handler object. See comments from the C++ macro
56# for the details about these lines.
57import os
58sh = ROOT.SH.SampleHandler()
59sh.setMetaString( 'nc_tree', 'CollectionTree' )
60
61import shutil
62if options.overwrite and os.path.exists(options.submission_dir): shutil.rmtree(options.submission_dir)
63
64# set up file source
65cvmfsInputArea = '/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/SUSYTools'
66sim_type = "FS" if not options.AF else "AF3"
67inputFiles = {}
68inputFiles['mc20e'] = 'DAOD_%s.mc20_13TeV.410470.%s_mc20e_%s.%s.pool.root'%(options.flav, sim_type, options.ptag, options.flav)
69inputFiles['mc23a'] = 'mc23_13p6TeV.601229.%s_mc23a_%s.%s.pool.root'%(sim_type, options.ptag, options.flav)
70inputFiles['mc23d'] = 'mc23_13p6TeV.601229.%s_mc23d_%s.%s.pool.root'%(sim_type, options.ptag, options.flav)
71inputFiles['mc23e'] = 'mc23_13p6TeV.XYZ'
72inputFiles['data18'] = 'data18_13TeV.39757132_%s.%s.pool.root'%(options.ptag,options.flav)
73inputFiles['data22'] = 'data22_13p6TeV.39672246_%s.%s.pool.root'%(options.ptag,options.flav)
74inputFiles['data23'] = 'data23_13p6TeV.39756993_%s.%s.pool.root'%(options.ptag,options.flav)
75inputFiles['data24'] = 'data24_13p6TeV.XYZ'
76
77inputDir = ''
78inputFile = ''
79
80# configure test type
81if options.inputXRD:
82 print("Using inputXRD: ",options.inputXRD)
83 pref,server,fname = options.inputXrootd.plit('//')
84 dl = ROOT.SH.DiskListXRD(server,fname)
85 ROOT.SH.ScanDir().scan(sh,dl)
86elif options.inputGrid:
87 print("Using inputGrid: ",options.inputGrid)
88 dsname = options.inputGrid.split(':')[-1].rstrip() # drop scope if present, and not trailing spaces
89 ROOT.SH.addGrid(sh,dsname)
90else:
91 inputDir = cvmfsInputArea
92 inputFile = inputFiles[options.type] if options.type in inputFiles else ''
93
94 if options.inputDir: inputDir = options.inputDir
95 if options.inputFile: inputFile = options.inputFile
96
97 print("Using inputDir: ",inputDir)
98 print("Using inputFile:",inputFile)
99 ROOT.SH.ScanDir().filePattern(inputFile).scan(sh, inputDir)
100sh.printContent()
101
102# Create an EventLoop job.
103job = ROOT.EL.Job()
104job.sampleHandler( sh )
105job.options().setDouble( ROOT.EL.Job.optMaxEvents, options.maxEvts )
106
107# Create the algorithm's configuration. Note that we'll be able to add
108# algorithm property settings here later on.
109from AnaAlgorithm.AnaAlgorithmConfig import AnaAlgorithmConfig
110config = AnaAlgorithmConfig( 'SUSYToolsAlg' )
111config.addPrivateTool("SUSYTools","ST::SUSYObjDef_xAOD")
112
113config.SUSYTools.ConfigFile = "SUSYTools/SUSYTools_Default.conf"
114if ("data2" in options.type or "mc23" in options.type): config.SUSYTools.ConfigFile = "SUSYTools/SUSYTools_Default_Run3.conf"
115if ("data" not in options.type): config.DoSyst = options.dosyst
116config.SUSYTools.DataSource = 1
117config.OutputLevel = outputlvl[options.log_level]
118config.SUSYTools.OutputLevel = outputlvl[options.log_level]
119config.SUSYTools.PRWLumiCalcFiles = []
120config.SUSYTools.AutoconfigurePRWTool = True
121config.SUSYTools.PRWUseCommonMCFiles = True
122if options.flav == "PHYSLITE":
123 print("Running on PHYSLITE : ", inputFile)
124 STconfig_lite = str(config.SUSYTools.ConfigFile).replace(".conf","_LITE.conf")
125 config.SUSYTools.ConfigFile = STconfig_lite
126 config.SUSYTools.IsPHYSLITE = True
127
128if options.configFile:
129 config.SUSYTools.ConfigFile = options.configFile
130
131# The config file is also needed directly in SUSYToolsAlg
132config.ConfigFile = config.SUSYTools.ConfigFile
133
134# set datasource if AF3
135if options.AF:
136 config.SUSYTools.DataSource = 2
137
138# set mcCampaign
139if 'mc' in options.type:
140 mcCampaign = options.type
141 config.SUSYTools.mcCampaign = options.type
142elif options.type == 'data18':
143 mcCampaign = 'mc20e'
144 config.SUSYTools.mcCampaign = options.type
145 config.SUSYTools.DataSource = 0
146elif options.type == 'data22':
147 mcCampaign = 'mc23a'
148 config.SUSYTools.mcCampaign = options.type
149 config.SUSYTools.DataSource = 0
150elif options.type == 'data23':
151 mcCampaign = 'mc23d'
152 config.SUSYTools.mcCampaign = options.type
153 config.SUSYTools.DataSource = 0
154elif options.type == 'data24':
155 mcCampaign = 'mc23e'
156 config.SUSYTools.mcCampaign = options.type
157 config.SUSYTools.DataSource = 0
158elif options.type == 'data25':
159 mcCampaign = 'mc23g'
160 config.SUSYTools.mcCampaign = options.type
161 config.SUSYTools.DataSource = 0
162
163
164# set lumicalc info
165PRWLumiCalc = {}
166PRWLumiCalc['mc20a'] = ['/cvmfs/atlas.cern.ch/repo/sw/database/GroupData/GoodRunsLists/data16_13TeV/20180129/PHYS_StandardGRL_All_Good_25ns_297730-311481_OflLumi-13TeV-009.root',
167 '/cvmfs/atlas.cern.ch/repo/sw/database/GroupData/GoodRunsLists/data15_13TeV/20170619/PHYS_StandardGRL_All_Good_25ns_276262-284484_OflLumi-13TeV-008.root']
168PRWLumiCalc['mc20d'] = ['/cvmfs/atlas.cern.ch/repo/sw/database/GroupData/GoodRunsLists/data17_13TeV/20180619/physics_25ns_Triggerno17e33prim.lumicalc.OflLumi-13TeV-010.root']
169PRWLumiCalc['mc20e'] = ['/cvmfs/atlas.cern.ch/repo/sw/database/GroupData/GoodRunsLists/data18_13TeV/20190318/ilumicalc_histograms_None_348885-364292_OflLumi-13TeV-010.root']
170PRWLumiCalc['mc23a'] = ['/cvmfs/atlas.cern.ch/repo/sw/database/GroupData/GoodRunsLists/data22_13p6TeV/20250321/ilumicalc_histograms_None_431810-440613_OflLumi-Run3-004.root']
171PRWLumiCalc['mc23d'] = ['/cvmfs/atlas.cern.ch/repo/sw/database/GroupData/GoodRunsLists/data23_13p6TeV/20250321/ilumicalc_histograms_None_451587-456749_OflLumi-Run3-004.root']
172PRWLumiCalc['mc23e'] = ['/cvmfs/atlas.cern.ch/repo/sw/database/GroupData/GoodRunsLists/data24_13p6TeV/20260127/ilumicalc_histograms_None_473235-486706_OflLumi-Run3-008.root']
173PRWLumiCalc['mc23g'] = ['/cvmfs/atlas.cern.ch/repo/sw/database/GroupData/GoodRunsLists/data25_13p6TeV/20260129/ilumicalc_histograms_None_497924-509849_OflLumi-Run3-006.root']
174
175config.SUSYTools.PRWLumiCalcFiles = PRWLumiCalc[mcCampaign]
176
177if options.grl: config.GRLFiles = options.grl.split(',')
178if options.maxEvtsManual: config.maxEvts = options.maxEvtsManual
179
180# submit
181job.algsAdd( config )
182if options.driver == 'direct':
183 # Run the job using the direct driver.
184 driver = ROOT.EL.DirectDriver()
185 if not options.dryrun:
186 driver.submit( job, options.submission_dir )
187elif options.driver == 'grid':
188 driver = ROOT.EL.PrunDriver()
189 submitFlags = ['--addNthFieldOfInDSToLFN=2,6']
190 if options.submitFlags: submitFlags += [options.submitFlags]
191 if not options.gridTag: options.gridTag = date.today().strftime('%y%m%d')
192 outName = 'user.%s.%%in:name[1]%%.%%in:name[2]%%.%%in:name[3]%%.STAlg_%s'%(os.environ['USER'],options.gridTag)
193 driver.options().setString("nc_outputSampleName", outName );
194 driver.options().setString("nc_EventLoop_SubmitFlags", ' '.join(submitFlags))
195 driver.options().setDouble(ROOT.EL.Job.optGridMergeOutput, 0)
196 if not options.dryrun:
197 if options.express: driver.options().setDouble(ROOT.EL.Job.optGridExpress, 1)
198 driver.submitOnly( job, options.submission_dir )
void print(char *figname, TCanvas *c1)
std::string replace(std::string s, const std::string &s2, const std::string &s3)
Definition hcg.cxx:312
void scan(TDirectory *td=0, int depth=0)
Definition listroot.cxx:440