Skip to content

Commit

Permalink
Merge pull request #1 from matt2275/master
Browse files Browse the repository at this point in the history
Merging CMS-SW master to ZDCUnpacker
  • Loading branch information
matt2275 committed Sep 6, 2023
2 parents 76e8be8 + 6303322 commit 440318c
Show file tree
Hide file tree
Showing 41 changed files with 506 additions and 106 deletions.
10 changes: 5 additions & 5 deletions Configuration/AlCa/python/autoCond.py
Expand Up @@ -76,17 +76,17 @@
# GlobalTag for MC production with perfectly aligned and calibrated detector for Phase1 2023
'phase1_2023_design' : '132X_mcRun3_2023_design_v1',
# GlobalTag for MC production with realistic conditions for Phase1 2023
'phase1_2023_realistic' : '132X_mcRun3_2023_realistic_v2',
'phase1_2023_realistic' : '132X_mcRun3_2023_realistic_v4',
# GlobalTag for MC production with realistic conditions for Phase1 post BPix issue 2023
'phase1_2023_realistic_postBPix' : '132X_mcRun3_2023_realistic_postBPix_v1',
'phase1_2023_realistic_postBPix' : '132X_mcRun3_2023_realistic_postBPix_v3',
# GlobalTag for MC production (cosmics) with realistic conditions for Phase1 2023, Strip tracker in DECO mode
'phase1_2023_cosmics' : '132X_mcRun3_2023cosmics_realistic_deco_v2',
'phase1_2023_cosmics' : '132X_mcRun3_2023cosmics_realistic_deco_v3',
# GlobalTag for MC production (cosmics) with perfectly aligned and calibrated detector for Phase1 2023, Strip tracker in DECO mode
'phase1_2023_cosmics_design' : '132X_mcRun3_2023cosmics_design_deco_v1',
# GlobalTag for MC production with realistic conditions for Phase1 2023 detector for Heavy Ion
'phase1_2023_realistic_hi' : '132X_mcRun3_2023_realistic_HI_v1',
'phase1_2023_realistic_hi' : '132X_mcRun3_2023_realistic_HI_v2',
# GlobalTag for MC production with realistic conditions for Phase1 2024
'phase1_2024_realistic' : '132X_mcRun3_2024_realistic_v1',
'phase1_2024_realistic' : '132X_mcRun3_2024_realistic_v2',
# GlobalTag for MC production with realistic conditions for Phase2
'phase2_realistic' : '131X_mcRun4_realistic_v6'
}
Expand Down
Expand Up @@ -6,7 +6,7 @@
from Configuration.Generator.Herwig7Settings.Herwig7MGMergingSettings_cfi import *


generator = cms.EDFilter("Herwig7GeneratorFilter",
generator = cms.EDFilter("Herwig7HadronizerFilter",
herwig7CH3SettingsBlock,
herwig7StableParticlesForDetectorBlock,
herwig7MGMergingSettingsBlock,
Expand Down
Expand Up @@ -5,7 +5,7 @@
from Configuration.Generator.Herwig7Settings.Herwig7MGMergingSettings_cfi import *


generator = cms.EDFilter("Herwig7GeneratorFilter",
generator = cms.EDFilter("Herwig7HadronizerFilter",
herwig7CH3SettingsBlock,
herwig7StableParticlesForDetectorBlock,
herwig7MGMergingSettingsBlock,
Expand Down Expand Up @@ -40,7 +40,7 @@
outputFile = cms.string('cmsgrid_final.lhe'),
scriptName = cms.FileInPath('GeneratorInterface/LHEInterface/data/run_generic_tarball_cvmfs.sh'),
generateConcurrently = cms.untracked.bool(True),
postGenerationCommand = cms.untracked.vstring('mergeLHE.py', '-i', 'thread*/cmsgrid_final.lhe', '-o', 'cmsgrid_final.lhe')
postGenerationCommand = cms.untracked.vstring('mergeLHE.py', '-n', '-i', 'thread*/cmsgrid_final.lhe', '-o', 'cmsgrid_final.lhe')
)


Expand Down
Expand Up @@ -7,5 +7,5 @@
args = cms.vstring('/cvmfs/cms.cern.ch/phys_generator/gridpacks/UL/13TeV/madgraph/V5_2.6.5/dyellell01234j_5f_LO_MLM_v2/DYJets_HT-incl_slc6_amd64_gcc630_CMSSW_9_3_16_tarball.tar.xz','false','slc6_amd64_gcc630','CMSSW_9_3_16'),
nEvents = cms.untracked.uint32(10),
generateConcurrently = cms.untracked.bool(True),
postGenerationCommand = cms.untracked.vstring('mergeLHE.py', '-i', 'thread*/cmsgrid_final.lhe', '-o', 'cmsgrid_final.lhe'),
postGenerationCommand = cms.untracked.vstring('mergeLHE.py', '-n', '-i', 'thread*/cmsgrid_final.lhe', '-o', 'cmsgrid_final.lhe'),
)
Expand Up @@ -14,6 +14,7 @@

# set the weight option (e.g. for MC@NLO)
'set LesHouchesHandler:WeightOption VarNegWeight',
'set LesHouchesHandler:EventNumbering LHE',

'set /Herwig/Generators/EventGenerator:EventHandler /Herwig/EventHandlers/LesHouchesHandler',
'create ThePEG::Cuts /Herwig/Cuts/NoCuts',
Expand Down
Expand Up @@ -14,6 +14,7 @@
'set LesHouchesHandler:HadronizationHandler /Herwig/Hadronization/ClusterHadHandler',
'set LesHouchesHandler:DecayHandler /Herwig/Decays/DecayHandler',
'set LesHouchesHandler:WeightOption VarNegWeight',
'set LesHouchesHandler:EventNumbering LHE',
'set /Herwig/Generators/EventGenerator:EventHandler /Herwig/EventHandlers/LesHouchesHandler',
'create ThePEG::Cuts /Herwig/Cuts/NoCuts',
'cd /Herwig/EventHandlers',
Expand Down
2 changes: 1 addition & 1 deletion Configuration/Generator/python/TT_13TeV_Pow_Herwig7_cff.py
Expand Up @@ -7,7 +7,7 @@
from Configuration.Generator.Herwig7Settings.Herwig7LHEPowhegSettings_cfi import *


generator = cms.EDFilter("Herwig7GeneratorFilter",
generator = cms.EDFilter("Herwig7HadronizerFilter",
herwig7CH3SettingsBlock,
herwig7StableParticlesForDetectorBlock,
herwig7LHECommonSettingsBlock,
Expand Down
2 changes: 1 addition & 1 deletion Configuration/Generator/python/TTbar_Pow_LHE_13TeV_cff.py
Expand Up @@ -7,7 +7,7 @@
outputFile = cms.string('cmsgrid_final.lhe'),
scriptName = cms.FileInPath('GeneratorInterface/LHEInterface/data/run_generic_tarball_cvmfs.sh'),
generateConcurrently = cms.untracked.bool(True),
postGenerationCommand = cms.untracked.vstring('mergeLHE.py', '-i', 'thread*/cmsgrid_final.lhe', '-o', 'cmsgrid_final.lhe'),
postGenerationCommand = cms.untracked.vstring('mergeLHE.py', '-n', '-i', 'thread*/cmsgrid_final.lhe', '-o', 'cmsgrid_final.lhe'),
)

#Link to datacards:
Expand Down
9 changes: 6 additions & 3 deletions DQM/L1TMonitor/src/L1TdeStage2CaloLayer1.cc
Expand Up @@ -4,6 +4,7 @@
* N. Smith <nick.smith@cern.ch>
*/
//Modified by Bhawna Gomber <bhawna.gomber@cern.ch>
//Modified by Ho-Fung Tsoi <ho.fung.tsoi@cern.ch>

#include "DQM/L1TMonitor/interface/L1TdeStage2CaloLayer1.h"

Expand Down Expand Up @@ -115,10 +116,12 @@ void L1TdeStage2CaloLayer1::analyze(const edm::Event& event, const edm::EventSet

etCorrelation_->Fill(dataTower.et(), emulTower.et());

const uint32_t data_fb = dataTower.fb() & 0b1011;
const uint32_t emul_fb = emulTower.fb() & 0b1011;
if (abs(dataTower.ieta_) >= 30) {
fbCorrelationHF_->Fill(dataTower.fb(), emulTower.fb());
fbCorrelationHF_->Fill(data_fb, emul_fb);
} else {
fbCorrelation_->Fill(dataTower.fb(), emulTower.fb());
fbCorrelation_->Fill(data_fb, emul_fb);
}

if (dataTower.data_ == emulTower.data_) {
Expand Down Expand Up @@ -149,7 +152,7 @@ void L1TdeStage2CaloLayer1::analyze(const edm::Event& event, const edm::EventSet
erMsmThisEvent = true;
updateMismatch(event, 1);
}
if (dataTower.fb() != emulTower.fb()) {
if (data_fb != emul_fb) {
failureOccFbMismatch_->Fill(dataTower.ieta_, dataTower.iphi_);
fbMismatchByLumi_->Fill(event.id().luminosityBlock());
fbMismatchesPerBx_->Fill(event.bunchCrossing());
Expand Down
3 changes: 3 additions & 0 deletions DataFormats/HLTReco/interface/TriggerTypeDefs.h
Expand Up @@ -74,6 +74,9 @@ namespace trigger {
TriggerL1Vertex = -124,
// Phase-1: MuonShower
TriggerL1MuShower = -125, // stage2 (introduced in Run 3)
// Phase-1: ZDC+ and ZDC-
TriggerL1ZDCP = -126, // stage2 (introduced in 2023 during Run 3)
TriggerL1ZDCM = -127, // stage2 (introduced in 2023 during Run 3)

/// HLT
TriggerPhoton = +81,
Expand Down
53 changes: 48 additions & 5 deletions GeneratorInterface/Herwig7Interface/plugins/Herwig7Hadronizer.cc
Expand Up @@ -63,6 +63,7 @@ class Herwig7Hadronizer : public Herwig7Interface, public gen::BaseHadronizer {
unsigned int eventsToPrint;

ThePEG::EventPtr thepegEvent;
bool haveEvt = false;

std::shared_ptr<lhef::LHEProxy> proxy_;
const std::string handlerDirectory_;
Expand Down Expand Up @@ -101,9 +102,18 @@ bool Herwig7Hadronizer::initializeForInternalPartons() {
}

bool Herwig7Hadronizer::initializeForExternalPartons() {
edm::LogError("Herwig7 interface")
<< "Read in of LHE files is not supported in this way. You can read them manually if necessary.";
return false;
if (currentLumiBlock == firstLumiBlock) {
std::ifstream runFile(runFileName + ".run");
if (runFile.fail()) //required for showering of LHE files
{
initRepository(paramSettings);
}
if (!initGenerator()) {
edm::LogInfo("Generator|Herwig7Hadronizer") << "No run step for Herwig chosen. Program will be aborted.";
exit(0);
}
}
return true;
}

bool Herwig7Hadronizer::declareStableParticles(const std::vector<int>& pdgIds) { return false; }
Expand Down Expand Up @@ -141,8 +151,41 @@ bool Herwig7Hadronizer::generatePartonsAndHadronize() {
}

bool Herwig7Hadronizer::hadronize() {
edm::LogError("Herwig7 interface")
<< "Read in of LHE files is not supported in this way. You can read them manually if necessary.";
if (!haveEvt) {
try {
thepegEvent = eg_->shoot();
haveEvt = true;
} catch (std::exception& exc) {
edm::LogWarning("Generator|Herwig7Hadronizer")
<< "EGPtr::shoot() thrown an exception, event skipped: " << exc.what();
return false;
}
}
int evtnum = lheEvent()->evtnum();
if (evtnum == -1) {
edm::LogError("Generator|Herwig7Hadronizer")
<< "Event number not set in lhe file, needed for correctly aligning Herwig and LHE events!";
return false;
}
if (thepegEvent->number() < evtnum) {
edm::LogError("Herwig7 interface") << "Herwig does not seem to be generating events in order, did you set "
"/Herwig/EventHandlers/FxFxLHReader:AllowedToReOpen Yes?";
return false;
} else if (thepegEvent->number() == evtnum) {
haveEvt = false;
if (!thepegEvent) {
edm::LogWarning("Generator|Herwig7Hadronizer") << "thepegEvent not initialized";
return false;
}

event() = convert(thepegEvent);
if (!event().get()) {
edm::LogWarning("Generator|Herwig7Hadronizer") << "genEvent not initialized";
return false;
}
return true;
}
edm::LogWarning("Generator|Herwig7Hadronizer") << "Event " << evtnum << " not generated (likely skipped in merging)";
return false;
}

Expand Down
3 changes: 3 additions & 0 deletions GeneratorInterface/LHEInterface/interface/LHEEvent.h
Expand Up @@ -52,9 +52,11 @@ namespace lhef {

int npLO() const { return npLO_; }
int npNLO() const { return npNLO_; }
int evtnum() const { return evtnum_; }

void setNpLO(int n) { npLO_ = n; }
void setNpNLO(int n) { npNLO_ = n; }
void setEvtNum(int n) { evtnum_ = n; }

void addComment(const std::string &line) { comments.push_back(line); }

Expand Down Expand Up @@ -93,6 +95,7 @@ namespace lhef {
std::vector<float> scales_; //scale value used to exclude EWK-produced partons from matching
int npLO_; //number of partons for LO process (used to steer matching/merging)
int npNLO_; //number of partons for NLO process (used to steer matching/merging)
int evtnum_; //The number of the event (needed to ensure the correct LHE events are saved for MG +Herwig)
};

} // namespace lhef
Expand Down
Expand Up @@ -192,6 +192,7 @@ void ExternalLHEProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSe
partonLevel_->weights().end(),
std::bind(&LHEEventProduct::addWeight, product.get(), std::placeholders::_1));
product->setScales(partonLevel_->scales());
product->setEvtNum(partonLevel_->evtnum());
if (nPartonMapping_.empty()) {
product->setNpLO(partonLevel_->npLO());
product->setNpNLO(partonLevel_->npNLO());
Expand Down
47 changes: 47 additions & 0 deletions GeneratorInterface/LHEInterface/scripts/addLHEnumbers.py
@@ -0,0 +1,47 @@
#!/usr/bin/env python3

from __future__ import print_function
import logging
import argparse
import sys
import os
import re


def number_events(input_file, output_file=None, offset=0):
if output_file is None:
output_file = input_file
if not os.path.exists(os.path.dirname(os.path.realpath(output_file))):
os.makedirs(os.path.dirname(os.path.realpath(output_file)))

nevent = offset
with open('tmp.txt', 'w') as fw:
with open(input_file, 'r') as ftmp:
for line in ftmp:
if re.search('\s*</event>', line):
nevent += 1
fw.write('<event_num num="' + str(nevent) + '"> ' + str(nevent) + '</event_num>\n')
fw.write(line)
if output_file is not None:
os.rename("tmp.txt", output_file)
else:
os.rename("tmp.txt", input_file)
return nevent


if __name__=="__main__":

parser = argparse.ArgumentParser(
description="Add numbers to lhe")
parser.add_argument("input_file", type=str,
help="Input LHE file path.")
parser.add_argument("-o", "--output-file", default=None, type=str,
help="Output LHE file path. If not specified, output to input file")
args = parser.parse_args()

logging.info('>>> launch addLHEnumbers.py in %s' % os.path.abspath(os.getcwd()))

logging.info('>>> Input file: [%s]' % args.input_file)
logging.info('>>> Write to output: %s ' % args.output_file)

number_events(args.input_file, args.output_file)
17 changes: 14 additions & 3 deletions GeneratorInterface/LHEInterface/scripts/mergeLHE.py
Expand Up @@ -9,6 +9,9 @@
import os
import re

import addLHEnumbers


class BaseLHEMerger(object):
"""Base class of the LHE merge schemes"""

Expand Down Expand Up @@ -62,7 +65,7 @@ def check_header_compatibility(self):
% ', '.join([str(len(lines)) for lines in self._header_lines]))
assert all([
len(self._header_lines[0]) == len(lines) for lines in self._header_lines]
), inconsistent_error_info % "line number not matches"
), inconsistent_error_info % "line number does not match"
inconsistent_lines_set = [set() for _ in self._header_lines]
for line_zip in zip(*self._header_lines):
if any([k in line_zip[0] for k in allow_diff_keys]):
Expand Down Expand Up @@ -253,7 +256,7 @@ def merge(self):
sign = lambda x: -1 if x < 0 else 1
for line in ftmp:
event_line += 1
if re.search('\s*<event.*>', line):
if re.search('\s*<event.*>', line) and not re.search('\s*<event_num.*>', line):
event_line = 0
if event_line == 1:
# modify the XWGTUP appeared in the first line of the
Expand Down Expand Up @@ -366,6 +369,8 @@ def main(argv = None):
help=("Bypass the compatibility check for the headers. If true, the header and init block "
"will be just a duplicate from the first input file, and events are concatenated without "
"modification."))
parser.add_argument("-n", "--number-events", action='store_true',
help=("Add a tag to number each lhe event. Needed for Herwig to find correct lhe events"))
parser.add_argument("--debug", action='store_true',
help="Use the debug mode.")
args = parser.parse_args(argv)
Expand All @@ -392,6 +397,11 @@ def main(argv = None):
if not os.path.exists(os.path.dirname(os.path.realpath(args.output_file))):
os.makedirs(os.path.dirname(os.path.realpath(args.output_file)))

if args.number_events:
offset = 0
for input_file in input_files:
offset += addLHEnumbers.number_events(input_file, offset=offset)

# Check arguments
assert len(input_files) > 0, 'Input LHE files should be more than 0.'
if len(input_files) == 1:
Expand All @@ -408,7 +418,8 @@ def main(argv = None):
elif args.force_cpp_merger:
lhe_merger = ExternalCppLHEMerger(input_files, args.output_file)
else:
lhe_merger = DefaultLHEMerger(input_files, args.output_file, bypass_check=args.bypass_check)
lhe_merger = DefaultLHEMerger(
input_files, args.output_file, bypass_check=args.bypass_check)

# Do merging
lhe_merger.merge()
Expand Down
11 changes: 7 additions & 4 deletions GeneratorInterface/LHEInterface/src/LHEEvent.cc
Expand Up @@ -40,7 +40,8 @@ namespace lhef {
counted(false),
readAttemptCounter(0),
npLO_(-99),
npNLO_(-99)
npNLO_(-99),
evtnum_(-1)

{
hepeup.NUP = 0;
Expand Down Expand Up @@ -106,7 +107,7 @@ namespace lhef {
}

LHEEvent::LHEEvent(const std::shared_ptr<LHERunInfo> &runInfo, const HEPEUP &hepeup)
: runInfo(runInfo), hepeup(hepeup), counted(false), readAttemptCounter(0), npLO_(-99), npNLO_(-99) {}
: runInfo(runInfo), hepeup(hepeup), counted(false), readAttemptCounter(0), npLO_(-99), npNLO_(-99), evtnum_(-1) {}

LHEEvent::LHEEvent(const std::shared_ptr<LHERunInfo> &runInfo,
const HEPEUP &hepeup,
Expand All @@ -119,7 +120,8 @@ namespace lhef {
counted(false),
readAttemptCounter(0),
npLO_(-99),
npNLO_(-99) {}
npNLO_(-99),
evtnum_(-1) {}

LHEEvent::LHEEvent(const std::shared_ptr<LHERunInfo> &runInfo, const LHEEventProduct &product)
: runInfo(runInfo),
Expand All @@ -132,7 +134,8 @@ namespace lhef {
originalXWGTUP_(product.originalXWGTUP()),
scales_(product.scales()),
npLO_(product.npLO()),
npNLO_(product.npNLO()) {}
npNLO_(product.npNLO()),
evtnum_(product.evtnum()) {}

LHEEvent::~LHEEvent() {}

Expand Down

0 comments on commit 440318c

Please sign in to comment.