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, data18, data22, data23)', choices = ['mc20a', 'mc20d', 'mc20e', 'mc23a', 'mc23d', 'data18', 'data22','data23'])
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('--grl', dest = 'grl')
30parser.add_option('--inputDir', dest = 'inputDir')
31parser.add_option('--inputFile', dest = 'inputFile')
32parser.add_option('--inputGrid', dest = 'inputGrid')
33parser.add_option('--inputXRD', dest = 'inputXRD')
34parser.add_option('--overwrite', dest = 'overwrite', default = False, action = 'store_true' )
35( options, args ) = parser.parse_args()
36
37# Print configuration
38print("Configured input data ptag: %s"%(options.ptag))
39ptageqdata = {'p6266' : 'p6269'}
40if 'data2' in options.type and options.ptag in ptageqdata:
41 options.ptag = ptageqdata[options.ptag]
42 print("Overriding ptag to equivalent data ptag: -> %s"%(options.ptag))
43print("Configured input data type: %s"%(options.type))
44print("Configured input data DAOD flavour: %s"%(options.flav))
45print("Configured input data sim type: %s"%('FullSim' if not options.AF else 'AF'))
46
47# Set up (Py)ROOT.
48import ROOT
49ROOT.xAOD.Init().ignore()
50
51# for logging
52outputlvl = {'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}
53
54# Set up the sample handler object. See comments from the C++ macro
55# for the details about these lines.
56import os
57sh = ROOT.SH.SampleHandler()
58sh.setMetaString( 'nc_tree', 'CollectionTree' )
59
60import shutil
61if options.overwrite and os.path.exists(options.submission_dir): shutil.rmtree(options.submission_dir)
62
63# set up file source
64cvmfsInputArea = '/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/SUSYTools'
65sim_type = "FS" if not options.AF else "AF3"
66inputFiles = {}
67inputFiles['mc20e'] = 'DAOD_%s.mc20_13TeV.410470.%s_mc20e_%s.%s.pool.root'%(options.flav, sim_type, options.ptag, options.flav)
68inputFiles['mc23a'] = 'mc23_13p6TeV.601229.%s_mc23a_%s.%s.pool.root'%(sim_type, options.ptag, options.flav)
69inputFiles['mc23d'] = 'mc23_13p6TeV.601229.%s_mc23d_%s.%s.pool.root'%(sim_type, options.ptag, options.flav)
70inputFiles['data18'] = 'data18_13TeV.39757132_%s.%s.pool.root'%(options.ptag,options.flav)
71inputFiles['data22'] = 'data22_13p6TeV.39672246_%s.%s.pool.root'%(options.ptag,options.flav)
72inputFiles['data23'] = 'data23_13p6TeV.39756993_%s.%s.pool.root'%(options.ptag,options.flav)
73
74inputDir = ''
75inputFile = ''
76
77# configure test type
78if options.inputXRD:
79 print("Using inputXRD: ",options.inputXRD)
80 pref,server,fname = options.inputXrootd.plit('//')
81 dl = ROOT.SH.DiskListXRD(server,fname)
82 ROOT.SH.ScanDir().scan(sh,dl)
83elif options.inputGrid:
84 print("Using inputGrid: ",options.inputGrid)
85 dsname = options.inputGrid.split(':')[-1].rstrip() # drop scope if present, and not trailing spaces
86 ROOT.SH.addGrid(sh,dsname)
87else:
88 inputDir = cvmfsInputArea
89 inputFile = inputFiles[options.type] if options.type in inputFiles else ''
90
91 if options.inputDir: inputDir = options.inputDir
92 if options.inputFile: inputFile = options.inputFile
93
94 print("Using inputDir: ",inputDir)
95 print("Using inputFile:",inputFile)
96 ROOT.SH.ScanDir().filePattern(inputFile).scan(sh, inputDir)
97sh.printContent()
98
99# Create an EventLoop job.
100job = ROOT.EL.Job()
101job.sampleHandler( sh )
102job.options().setDouble( ROOT.EL.Job.optMaxEvents, options.maxEvts )
103
104# Create the algorithm's configuration. Note that we'll be able to add
105# algorithm property settings here later on.
106from AnaAlgorithm.AnaAlgorithmConfig import AnaAlgorithmConfig
107config = AnaAlgorithmConfig( 'SUSYToolsAlg' )
108config.addPrivateTool("SUSYTools","ST::SUSYObjDef_xAOD")
109
110config.SUSYTools.ConfigFile = "SUSYTools/SUSYTools_Default.conf"
111if ("data2" in options.type or "mc23" in options.type): config.SUSYTools.ConfigFile = "SUSYTools/SUSYTools_Default_Run3.conf"
112if ("data" not in options.type): config.DoSyst = options.dosyst
113config.SUSYTools.DataSource = 1
114config.OutputLevel = outputlvl[options.log_level]
115config.SUSYTools.OutputLevel = outputlvl[options.log_level]
116config.SUSYTools.PRWLumiCalcFiles = []
117config.SUSYTools.AutoconfigurePRWTool = True
118config.SUSYTools.PRWUseCommonMCFiles = True
119if options.flav == "PHYSLITE":
120 print("Running on PHYSLITE : ", inputFile)
121 STconfig_lite = str(config.SUSYTools.ConfigFile).replace(".conf","_LITE.conf")
122 config.SUSYTools.ConfigFile = STconfig_lite
123 config.SUSYTools.IsPHYSLITE = True
124
125# The config file is also needed directly in SUSYToolsAlg
126config.ConfigFile = config.SUSYTools.ConfigFile
127
128# set datasource if AF3
129if options.AF:
130 config.SUSYTools.DataSource = 2
131
132# set mcCampaign
133if 'mc' in options.type:
134 mcCampaign = options.type
135 config.SUSYTools.mcCampaign = options.type
136elif options.type == 'data18':
137 mcCampaign = 'mc20e'
138 config.SUSYTools.mcCampaign = options.type
139 config.SUSYTools.DataSource = 0
140elif options.type == 'data22':
141 mcCampaign = 'mc23a'
142 config.SUSYTools.mcCampaign = options.type
143 config.SUSYTools.DataSource = 0
144elif options.type == 'data23':
145 mcCampaign = 'mc23d'
146 config.SUSYTools.mcCampaign = options.type
147 config.SUSYTools.DataSource = 0
148
149
150# set lumicalc info
151PRWLumiCalc = {}
152PRWLumiCalc['mc20a'] = ['/cvmfs/atlas.cern.ch/repo/sw/database/GroupData/GoodRunsLists/data16_13TeV/20180129/PHYS_StandardGRL_All_Good_25ns_297730-311481_OflLumi-13TeV-009.root',
153 '/cvmfs/atlas.cern.ch/repo/sw/database/GroupData/GoodRunsLists/data15_13TeV/20170619/PHYS_StandardGRL_All_Good_25ns_276262-284484_OflLumi-13TeV-008.root']
154PRWLumiCalc['mc20d'] = ['/cvmfs/atlas.cern.ch/repo/sw/database/GroupData/GoodRunsLists/data17_13TeV/20180619/physics_25ns_Triggerno17e33prim.lumicalc.OflLumi-13TeV-010.root']
155PRWLumiCalc['mc20e'] = ['/cvmfs/atlas.cern.ch/repo/sw/database/GroupData/GoodRunsLists/data18_13TeV/20190318/ilumicalc_histograms_None_348885-364292_OflLumi-13TeV-010.root']
156PRWLumiCalc['mc23a'] = ['/cvmfs/atlas.cern.ch/repo/sw/database/GroupData/GoodRunsLists/data22_13p6TeV/20250321/ilumicalc_histograms_None_431810-440613_OflLumi-Run3-004.root']
157PRWLumiCalc['mc23d'] = ['/cvmfs/atlas.cern.ch/repo/sw/database/GroupData/GoodRunsLists/data23_13p6TeV/20250321/ilumicalc_histograms_None_451587-456749_OflLumi-Run3-004.root']
158
159config.SUSYTools.PRWLumiCalcFiles = PRWLumiCalc[mcCampaign]
160
161if options.grl: config.GRLFiles = options.grl.split(',')
162if options.maxEvtsManual: config.maxEvts = options.maxEvtsManual
163
164# submit
165job.algsAdd( config )
166if options.driver == 'direct':
167 # Run the job using the direct driver.
168 driver = ROOT.EL.DirectDriver()
169 if not options.dryrun:
170 driver.submit( job, options.submission_dir )
171elif options.driver == 'grid':
172 driver = ROOT.EL.PrunDriver()
173 submitFlags = ['--addNthFieldOfInDSToLFN=2,6']
174 if options.submitFlags: submitFlags += [options.submitFlags]
175 if not options.gridTag: options.gridTag = date.today().strftime('%y%m%d')
176 outName = 'user.%s.%%in:name[1]%%.%%in:name[2]%%.%%in:name[3]%%.STAlg_%s'%(os.environ['USER'],options.gridTag)
177 driver.options().setString("nc_outputSampleName", outName );
178 driver.options().setString("nc_EventLoop_SubmitFlags", ' '.join(submitFlags))
179 driver.options().setDouble(ROOT.EL.Job.optGridMergeOutput, 0)
180 if not options.dryrun:
181 if options.express: driver.options().setDouble(ROOT.EL.Job.optGridExpress, 1)
182 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:310
void scan(TDirectory *td=0, int depth=0)
Definition listroot.cxx:440