7 arguments [<list-of-processes>]
9 creates crab.cfg, multicrab.cfg, harvest_*.py
11 prints number of events found in dataset
12 if no argument is provided looks for all available datsets for release
13 user can edit multicrab and confirm process list as needed
18 print "Usage:", sys.argv[0],
"[list_of_processes]"
20 print "harvestRelVal.py"
21 print "harvestRelVal.py /RelValTTbar/CMSSW_3_1_0_pre4_STARTUP_30X_v1/GEN-SIM-RECO"
22 print "harvestRelVal.py <dataset_list.txt>"
25 if os.getenv(
'DBSCMD_HOME',
'NOTSET') ==
'NOTSET' :
33 for afile
in api.listFiles(path=str(dset)):
34 nevts = afile[
'NumberOfEvents']
40 return 'DQM_V0001_R000000001' + s.replace(
'/',
'__') +
'.root'
49 cb = ca[:ca.find(
'v')-1]
50 if cb[0].
find(
'3') == -1
or len(cb) > 3:
51 print "problem extracting condition for", ds,
" : ", cb,
'(len:',len(cb),
')'
52 if cb.find(
'31X') != -1:
54 elif cb.find(
'30X') != -1:
59 print "condition found:", cb
61 print "good condition for", ds,
" : ", cb,
'(len:',len(cb),
')'
68 flis = open(dbslf,
'w')
69 for ads
in api.listDatasetPaths() :
70 if ads.find(
'RelVal') != -1 \
71 or ads.find(cmssw_ver) != -1 \
72 or ads.find(
"/GEN-SIM") != -1 :
74 flis.write(ads +
'\n')
76 print 'Generated dataset list', dbslf,
'from dbs.'
83 if not os.path.exists(dsfile) :
84 print "problem reading file", dsfile
86 fin = open(dsfile,
'r')
87 for dset
in fin.readlines():
88 d = dset.replace(
'\n',
'')
89 if d.find(
'#') == -1 :
94 print 'Using data set list in ', dsfile
99 if s.find(cmssw_ver) == -1 :
101 print 'Inconsistency found with datset and cmssw version (', cmssw_ver,
')' \
102 ': \t ', s,
' has been removed.'
104 for s
in dsetpaths[:]:
109 nSamples = len(dsetpaths)
111 print "Empty input list, exit."
114 print 'Processing', nSamples,
'data sets.'
119 print 'number of events per dataset:', nSampleEvts
122 if not do_reference :
126 ref_ver = cmssw_ver.replace(cp,str(ip))
128 ref_dir =
"/castor/cern.ch/user/n/nuno/relval/harvest/" + ref_ver +
"/"
130 gls =
" | grep root | grep "
133 gls +=
"| awk '{print $9}' "
135 command =
"rfcp " + ref_dir +
"`rfdir " + ref_dir + gls +
"` ."
139 command =
"ls -rtl *" + gls +
" > " + tmpfile
143 if os.path.exists(tmpfile) :
144 fin = open(tmpfile,
'r')
145 ref = fin.readline().replace('\n',
'')
148 if os.path.exists(ref) :
152 print "Found reference file:", the_ref
156 raw_cmsdriver =
"cmsDriver.py harvest -s HARVESTING:validationHarvesting --mc --conditions FrontierConditions_GlobalTag,STARTUP_30X::All --harvesting AtJobEnd --no_exec -n -1"
157 cmsdriver = raw_cmsdriver
160 print 'unexpected problem with conditions'
162 cmsdriver = cmsdriver.replace(
'30X',cond)
163 fin_name=
"harvest_HARVESTING_STARTUP.py"
164 if ds.find(
'IDEAL') != -1 :
165 cmsdriver = cmsdriver.replace(
'STARTUP',
'IDEAL')
166 fin_name = fin_name.replace(
'STARTUP',
'IDEAL')
167 if ds.find(
'FastSim') != -1:
168 cmsdriver = cmsdriver.replace(
'validationHarvesting',
'validationHarvestingFS')
169 if ds.find(
'PileUp') != -1:
170 cmsdriver = cmsdriver.replace(
'validationHarvesting',
'validationHarvestingPU')
173 if os.path.exists(fin_name) :
174 os.system(
"rm " + fin_name)
175 print "executing cmsdriver command:\n\t", cmsdriver
177 if not os.path.exists(fin_name) :
178 print 'problem with cmsdriver file name'
180 os.system(
"touch " + fin_name)
182 os.system(
'mv ' + fin_name +
" " + hf)
184 out.write(
"\n\n##additions to cmsDriver output \n")
185 out.write(
"process.dqmSaver.workflow = '" + ds +
"'\n")
187 out.write(
"process.source.fileNames = cms.untracked.vstring(\n")
188 for afile
in api.listFiles(path=ds):
189 out.write(
" '%s',\n" % afile[
'LogicalFileName'])
193 if not dqmref ==
'NONE' :
194 out.write(
"process.DQMStore.referenceFileName = '" + dqmref +
"'\n")
195 out.write(
"process.dqmSaver.referenceHandling = 'all'\n")
200 out = open(fout,
'w')
201 out.write(
'[MULTICRAB]')
202 out.write(
'\ncfg=' + fcrab)
203 out.write(
'\n\n[COMMON]')
206 out.write(
'\nCMSSW.total_number_of_events=' + (str)(nevt) )
207 out.write(
'\nCMSSW.number_of_jobs=' + (str)(njob) )
219 if not os.path.exists(hf) :
220 print 'problem creating multicrab, file', hf,
'does not exist'
222 fout.write(
'\n\n[' + sample +
']')
223 fout.write(
'\nCMSSW.pset=' + hf)
224 fout.write(
'\nCMSSW.datasetpath=' + dsetp)
225 fout.write(
'\nCMSSW.output_file=' + dqm)
228 if not dqmref ==
'NONE' :
229 fout.write(
'\nUSER.additional_input_files=' + dqmref)
234 out = open(f_crab,
'w')
235 out.write(crab_block)
236 out.write(
'\npset=' + hf)
237 out.write(
'datasetpath=' + ds)
238 out.write(
'\noutput_file=' + dqmout)
247 remove_default_blacklist=1
253 #storage_element=srm-cms.cern.ch
254 #storage_path=/srm/managerv2?SFN=/castor/cern.ch
255 #user_remote_dir=/user/n/nuno/test
261 total_number_of_events=-1
272 if len(sys.argv) > 2 :
275 elif len(sys.argv) == 1 :
276 print "Will search for available datasets."
278 elif len(sys.argv) == 2 :
280 if os.path.exists(argin) :
284 elif argin.find(
'CMSSW') != -1
and argin.find(
'RelVal'):
285 print 'Using specified data set', argin
288 print 'Invalid argument: process list, dataset or file', \
289 argin,
'does not exist.'
297 print "dbs home:", os.getenv(
'DBSCMD_HOME')
298 from DBSAPI.dbsApi
import DbsApi
301 from DBSAPI.dbsOptions
import DbsOptionParser
302 optManager = DbsOptionParser()
303 (opts,args) = optManager.getOpt()
306 args[
'url']=
"http://cmsdbsprod.cern.ch/cms_dbs_prod_global/servlet/DBSServlet"
310 cmssw_ver = os.getenv(
'CMSSW_VERSION',
'NOTSET')
311 if cmssw_ver ==
'NOTSET' :
315 scramv1 p CMSSW CMSSW_3_1_0_pre5
316 cd CMSSW_3_1_0_pre5/src
317 eval `scramv1 runtime -sh`
322 print "Using cmssw version:", cmssw_ver
328 if input_type ==
'none' :
330 print "no dataset specified, and dbs isn't set..."
334 dsfile = cmssw_ver +
"_dbslist.txt"
337 elif input_type ==
'file' :
339 elif input_type ==
'ds' :
340 dsetpaths.append(argin)
347 print 'data sets:', dsetpaths
348 dslproc = open(
"dset_processed.txt",
'w')
350 dslproc.write(s+
'\n')
366 f_multi_crab =
'multicrab.cfg'
375 print '\nCreated:\n\t %(pwd)s/%(cf)s \n\t %(pwd)s/%(mc)s' \
376 % {
'pwd' : os.environ[
"PWD"],
'cf' : f_crab,
'mc' : f_multi_crab}
377 print "\tIndividual harvest py's:\n\t", harvfilelist
def get_name_from_dsetpath
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
def get_cond_from_dsetpath
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger list("!*","!HLTx*"if it matches 2 triggers or more) will accept the event if all the matching triggers are FAIL.It will reject the event if any of the triggers are PASS or EXCEPTION(this matches the behavior of"!*"before the partial wildcard feature was incorporated).Triggers which are in the READY state are completely ignored.(READY should never be returned since the trigger paths have been run