DESY Hbb Analysis Framework
hlt/submitCrab3MC.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 
3 import os
4 import os.path
5 import urllib2
6 import importlib
7 import sys
8 from WMCore.Configuration import Configuration
9 from CRABClient.UserUtilities import getUsernameFromSiteDB
10 
11 # colors
12 W = '\033[0m' # white (normal)
13 R = '\033[31m' # red
14 G = '\033[32m' # green
15 O = '\033[33m' # orange
16 B = '\033[34m' # blue
17 P = '\033[35m' # purple
18 
19 
20 ARGSN = len(sys.argv)
21 if ARGSN < 3:
22  print (R+"You need to provide the CMSSW python config and the samples file in this order"+W)
23  sys.exit()
24 
25 # ---
26 # Some parameter steering
27 UNITS_PER_JOB = 20
28 TYPE = 'MC'
29 CAMPAIGN = 'Trigger17/80x_triggerstudies17_summer16_flatpu28to62_userv37'
30 
31 ARGS = sys.argv
32 PSET = ARGS[1]
33 SAMPLE = ARGS[2]
34 
35 psetname, pset_ext = os.path.splitext(PSET)
36 samplename, sample_ext = os.path.splitext(SAMPLE)
37 
38 if not ( os.path.isfile(PSET) and pset_ext == '.py' ):
39  print (R+"The given python config does not exist or it is not a python file"+W)
40  sys.exit()
41 
42 if not ( os.path.isfile(SAMPLE) and sample_ext == '.txt' ):
43  print (R+"The given sample list file does not exist or it is not a txt file"+W)
44  sys.exit()
45 
46 # ---
47 # Some parameter steering
48 PROCESS = samplename.split('/')[-1]
49 MYPATH = '/store/user/%s/' % (getUsernameFromSiteDB())
50 BASEOUTDIR = MYPATH+'Analysis/Ntuples/' + TYPE + '/' + CAMPAIGN
51 
52 dataset_list = 'samples/mc/' + PROCESS + '.txt'
53 f_datasets = open(dataset_list,'r')
54 datasets = f_datasets.readlines()
55 
56 import FWCore.ParameterSet.Config as cms
57 #from ntuplizer_mc_765_summer_conferences_2016_v1 import process
58 pset = PSET.split('.')[0]
59 process = __import__(pset).process #(see why it does not work!)
60 
61 # _________________________________________________________________________
62 
63 if __name__ == '__main__':
64 
65  from CRABAPI.RawCommand import crabCommand
66  from CRABClient.ClientExceptions import ClientException
67  from httplib import HTTPException
68 
69  from Analysis.Ntuplizer.crabConfig import crabConfig
70  config = crabConfig()
71 
72 # ====== GENERAL
73  config.General.workArea += '_' + PROCESS
74 
75 # ====== DATA
76  config.Data.splitting = 'FileBased'
77  config.Data.unitsPerJob = UNITS_PER_JOB
78  config.Data.totalUnits = -1
79  config.Data.outLFNDirBase = BASEOUTDIR + '/'
80 # config.Data.inputDBS = 'https://cmsweb.cern.ch/dbs/prod/phys03/DBSReader/'
81 # config.Data.allowNonValidInputDataset = True # If dataset not valid yet, will run over valid files only
82 
83 # ====== JOBTYPE
84 # config.JobType.inputFiles = ['Fall15_25nsV2_MC_PtResolution_AK4PFPuppi.txt','Fall15_25nsV2_MC_PtResolution_AK4PFchs.txt','Fall15_25nsV2_MC_SF_AK4PFPuppi.txt','Fall15_25nsV2_MC_SF_AK4PFchs.txt']
85  config.JobType.numCores = 4
86 
87  for dataset in datasets:
88  dataset=dataset.replace(" ", "")
89  cross_section = 1.
90  if len(dataset.split(',')) > 1:
91  cross_section = dataset.split(',')[1].split('\n')[0]
92  dataset = dataset.split(',')[0]
93  else:
94  dataset = dataset.split('\n')[0]
95 
96  dataset_name = dataset.split('/')[1]
97  dataset_cond = dataset.split('/')[2]
98  dataset_tier = dataset.split('/')[3]
99 
100 
101 
102 #
103  config.Data.inputDataset = dataset
104  config.Data.outputDatasetTag = dataset_cond
105 #
106  config.General.requestName = dataset_name
107 # use if needed in private productions (modify accordingly)
108 # processname = dataset_cond.split('_')
109 # config.General.requestName += '_'+processname[0]+'-'+processname[1]+'_oldGT'
110 # print config.General.requestName
111 #
112  process.MssmHbbTrigger.CrossSection = cms.double(cross_section)
113  psettmp = pset+'_tmp.py'
114  f = open(psettmp, 'w')
115  f.write(process.dumpPython())
116  f.close()
117 #
118  config.JobType.psetName = psettmp
119 #
120  outtext = "Submitting dataset " + dataset + "..."
121  print (O+str(outtext)+W)
122  crabCommand('submit', config = config)
123  print (O+"--------------------------------"+W)
124  print
125 #
126  os.remove(psettmp)
127 
128 # _________________________________________________________________________