1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
#!/usr/bin/env python3
"""
_Merge_
Module that generates standard merge job configurations for use in any
standard processing
"""
from FWCore.ParameterSet.Config import Process, EndPath
from FWCore.ParameterSet.Modules import OutputModule, Source, Service
import FWCore.ParameterSet.Types as CfgTypes
def mergeProcess(*inputFiles, **options):
"""
_mergeProcess_
Creates and returns a merge process that will merge the provided
filenames
supported options:
- process_name : name of the process, defaults to Merge
- outputmod_label : label of the output module, defaults to Merged
- newDQMIO : specifies if the new DQM format should be used to merge the files
- output_file : sets the output file name
- output_lfn : sets the output LFN
- mergeNANO : to merge NanoAOD
- bypassVersionCheck : to bypass version check in case merging happened in lower version of CMSSW (i.e. UL HLT case). This will be FALSE by default.
"""
# //
# // process supported options
#//
processName = options.get("process_name", "Merge")
outputModLabel = options.get("outputmod_label", "Merged")
outputFilename = options.get("output_file", "Merged.root")
outputLFN = options.get("output_lfn", None)
dropDQM = options.get("drop_dqm", False)
newDQMIO = options.get("newDQMIO", False)
mergeNANO = options.get("mergeNANO", False)
bypassVersionCheck = options.get("bypassVersionCheck", False)
# //
# // build process
#//
process = Process(processName)
# //
# // input source
#//
if newDQMIO:
process.source = Source("DQMRootSource", reScope = CfgTypes.untracked.string(""))
process.add_(Service("DQMStore"))
else:
process.source = Source("PoolSource")
if bypassVersionCheck:
process.source.bypassVersionCheck = CfgTypes.untracked.bool(True)
if dropDQM:
process.source.inputCommands = CfgTypes.untracked.vstring('keep *','drop *_EDMtoMEConverter_*_*')
if not mergeNANO:
process.source.noRunLumiSort = CfgTypes.untracked.bool(True)
process.source.fileNames = CfgTypes.untracked(CfgTypes.vstring())
for entry in inputFiles:
process.source.fileNames.append(str(entry))
# //
# // output module
#//
if newDQMIO:
outMod = OutputModule("DQMRootOutputModule")
elif mergeNANO:
import Configuration.EventContent.EventContent_cff
outMod = OutputModule("NanoAODOutputModule",Configuration.EventContent.EventContent_cff.NANOAODEventContent.clone())
else:
outMod = OutputModule("PoolOutputModule")
outMod.mergeJob = CfgTypes.untracked.bool(True)
outMod.eventAuxiliaryBasketSize = CfgTypes.untracked.int32(2*1024*1024)
outMod.fileName = CfgTypes.untracked.string(outputFilename)
if outputLFN != None:
outMod.logicalFileName = CfgTypes.untracked.string(outputLFN)
setattr(process, outputModLabel, outMod)
process.outputPath = EndPath(outMod)
return process
|