Monte Carlo Production
Fast Simulation on CMSSW_10_2_15
Preparation
$ ssh lxplus.cern.ch
$ cmsrel CMSSW_10_2_15
$ cd CMSSW_10_2_15/src
$ cmsenv
$ mkdir -p Configuration/GenProduction/
$ git clone git@github.com:cms-sw/genproductions.git Configuration/GenProduction/
$ scram b
Using MadGraph LHE and Pythia hadronizer
Step 1 - AOD from a 10000 events LHE
cmsDriver.py Configuration/GenProduction/python/ThirteenTeV/Hadronizer/Hadronizer_TuneCUETP8M1_13TeV_aMCatNLO_0p_LHE_pythia8_cff.py \
--filein file:MG5_pp2mumu_10kevts.lhe \
--fileout file:pp2mumu_FAST_LHE-AOD.root \
--python_filename pp2mumu_FAST_LHE-AOD_cfg.py \
--step GEN,SIM,RECOBEFMIX,DIGI,L1,DIGI2RAW,L1Reco,RECO \
--eventcontent AODSIM \
--datatier AODSIM \
--conditions 102X_upgrade2018_realistic_v15 \
--beamspot Realistic25ns13TeVEarly2018Collision \
--customise_commands "process.source.numberEventsInLuminosityBlock = cms.untracked.uint32(10000)" \
--era Run2_2018_FastSim \
--nThreads 2 \
--no_exec --mc --fast --number -1
Step 2 - MINIAOD from AOD
cmsDriver.py MINIAOD \
--filein file:pp2mumu_FAST_LHE-AOD.root \
--fileout file:pp2mumu_FAST_LHE-AOD-MINIAOD.root \
--python_filename pp2mumu_FAST_LHE-AOD-MINIAOD_cfg.py \
--step PAT \
--eventcontent MINIAODSIM \
--datatier MINIAODSIM \
--conditions 102X_upgrade2018_realistic_v15 \
--geometry DB:Extended \
--runUnscheduled \
--era Run2_2018 \
--nThreads 8 \
--no_exec --mc --fast --number -1
Step 3 - NANOAOD from MINIAOD
cmsDriver.py NANOAOD \
--filein file:pp2mumu_FAST_LHE-AOD-MINIAOD.root \
--fileout file:pp2mumu_FAST_LHE-AOD-MINIAOD-NANOAOD.root \
--python_filename pp2mumu_FAST_LHE-AOD-MINIAOD-NANOAOD_cfg.py \
--step NANO \
--eventcontent NANOAODSIM \
--datatier NANOAODSIM \
--conditions 102X_upgrade2018_realistic_v16 \
--era Run2_2018,run2_nanoAOD_102Xv1 \
--customise_commands \
'process.particleLevelSequence.remove(process.genParticles2HepMCHiggsVtx);process.particleLevelSequence.remove(process.rivetProducerHTXS);process.particleLevelTables.remove(process.HTXSCategoryTable)' \
--nThreads 2 \
--no_exec --mc --fast --number -1
Full simulation on 10_2_5
Preparation
$ export SCRAM_ARCH=slc6_amd64_gcc700
$ cmsrel CMSSW_10_2_5
$ cd CMSSW_10_2_5/src
$ cmsenv
$ mkdir -p Configuration/GenProduction/
$ git clone git@github.com:cms-sw/genproductions.git Configuration/GenProduction/
$ scram b
Using Pythia to generate Randall-Sundrum Graviton
STEP 1 - Event generation (GEN) and detector simulation (SIM)
$ cmsDriver.py \
Configuration/GenProduction/python/ThirteenTeV/RSGraviton/RSGravitonToZZ_kMpl01_M_1000_TuneCUETP8M1_13TeV_pythia8_cfi.py \
--fileout file:RSGravitonToZZ_GEN-SIM.root \
--python_filename RSGravitonToZZ_GEN-SIM_cfg.py \
--step GEN,SIM \
--datatier GEN-SIM \
--eventcontent RAWSIM \
--beamspot Realistic25ns13TeVEarly2017Collision \
--conditions 102X_upgrade2018_realistic_v15 \
--geometry DB:Extended \
--era Run2_2018 \
--mc --no_exec --number 10
$ cmsRun RSGravitonToZZ_GEN-SIM_cfg.py
STEP 2 - RAW from SIM
$ cmsDriver.py RAWSIM \
--filein file:RSGravitonToZZ_GEN-SIM.root \
--fileout file:RSGravitonToZZ_GEN-SIM-RAW.root \
--python_filename RSGravitonToZZ _GEN-SIM-RAW_cfg.py \
--step DIGI,L1,DIGI2RAW,HLT \
--datatier GEN-SIM-RAW \
--eventcontent RAWSIM \
--beamspot Realistic25ns13TeVEarly2017Collision \
--conditions 102X_upgrade2018_realistic_v15 \
--geometry DB:Extended \
--era Run2_2018 \
--mc --no_exec --number -1
$ cmsRun RSGravitonToZZ _GEN-SIM-RAW_cfg.py
STEP 3 - AOD from RAW
$ cmsDriver.py AODSIM \
--filein file:RSGravitonToZZ_GEN-SIM-RAW.root \
--fileout file:RSGravitonToZZ_GEN-SIM-RAW-AOD.root \
--python_filename RSGravitonToZZ_GEN-SIM-RAW-AOD_cfg.py \
--step RAW2DIGI,L1Reco,RECO \
--datatier RECO \
--eventcontent AODSIM \
--beamspot Realistic25ns13TeVEarly2017Collision \
--conditions 102X_upgrade2018_realistic_v15 \
--geometry DB:Extended \
--era Run2_2018 \
--runUnscheduled \
--number -1 --no_exec --mc
$ cmsRun RSGravitonToZZ_GEN-SIM-RAW-AOD_cfg.py
STEP 4 - MINIAOD from AOD
$ cmsDriver.py MINIAOD \
--filein file:RSGravitonToZZ_GEN-SIM-RAW-AOD.root \
--fileout file:RSGravitonToZZ_GEN-SIM-RAW-AOD-MINIAOD.root \
--python_filename RSGravitonToZZ_GEN-SIM-RAW-AOD-MINIAOD_cfg.py \
--step PAT \
--datatier MINIAODSIM \
--eventcontent MINIAODSIM \
--beamspot Realistic25ns13TeVEarly2017Collision \
--conditions 102X_upgrade2018_realistic_v15 \
--geometry DB:Extended \
--era Run2_2018 \
--runUnscheduled \
--number -1 --no_exec --mc
$ cmsRun RSGravitonToZZ_GEN-SIM-RAW-AOD-MINIAOD_cfg.py
STEP 5 - NANOAOD from MINIAOD
$ cmsDriver.py NANOAOD \
--filein file:RSGravitonToZZ_GEN-SIM-RAW-AOD-MINIAOD.root \
--fileout file:RSGravitonToZZ_GEN-SIM-RAW-AOD-MINIAOD-NANOAOD.root \
--python_filename RSGravitonToZZ_GEN-SIM-RAW-AOD-MINIAOD-NANOAOD_cfg.py \
--step NANO \
--datatier NANOAODSIM \
--eventcontent NANOAODSIM \
--beamspot Realistic25ns13TeVEarly2017Collision \
--conditions 102X_upgrade2018_realistic_v15 \
--geometry DB:Extended \
--era Run2_2018 \
--runUnscheduled \
--number -1 --no_exec --mc
$ cmsRun RSGravitonToZZ_GEN-SIM-RAW-AOD-MINIAOD-NANOAOD_cfg.py
Using MadGraph LHE and Pythia hadronizer
Step 1 - Hadronization from Matrix Element LHE (GEN) and detector simulation (SIM)
$ cmsDriver.py Configuration/GenProduction/python/ThirteenTeV/Hadronizer/Hadronizer_TuneCUETP8M1_13TeV_aMCatNLO_0p_LHE_pythia8_cff.py \
--filein file:MG5_pp2mumu_1000evts.lhe \
--fileout file:pp2mumu_LHE-GEN-SIM.root \
--python_filename pp2mumu_LHE-GEN-SIM_cfg.py \
--step GEN,SIM \
--eventcontent RAWSIM \
--datatier LHE-GEN-SIM \
--conditions 102X_upgrade2018_realistic_v15 \
--beamspot Realistic25ns13TeVEarly2017Collision \
--geometry DB:Extended \
--era Run2_2018 \
--mc --no_exec --number 100
$ cmsRun pp2mumu_LHE-GEN-SIM_cfg.py
Step 2 - RAW from SIM
$ cmsDriver.py RAWSIM \
--filein file:pp2mumu_LHE-GEN-SIM.root \
--fileout file:pp2mumu_LHE-GEN-SIM-RAW.root \
--python_filename pp2mumu_LHE-GEN-SIM-RAW_cfg.py \
--step DIGI,L1,DIGI2RAW,HLT \
--datatier GEN-SIM-RAW \
--eventcontent RAWSIM \
--beamspot Realistic25ns13TeVEarly2017Collision \
--conditions 102X_upgrade2018_realistic_v15 \
--geometry DB:Extended \
--era Run2_2018 \
--mc --no_exec --number -1
$ cmsRun pp2mumu_LHE-GEN-SIM-RAW_cfg.py
Step 3 - AOD from RAW
$ cmsDriver.py AODSIM \
--filein file:pp2mumu_LHE-GEN-SIM-RAW.root \
--fileout file:pp2mumu_LHE-GEN-SIM-RAW-AOD.root \
--python_filename pp2mumu_LHE-GEN-SIM-RAW-AOD_cfg.py \
--step RAW2DIGI,L1Reco,RECO \
--datatier RECO \
--eventcontent AODSIM \
--beamspot Realistic25ns13TeVEarly2017Collision \
--conditions 102X_upgrade2018_realistic_v15 \
--geometry DB:Extended \
--era Run2_2018 \
--runUnscheduled \
--number -1 --no_exec --mc
$ cmsRun pp2mumu_LHE-GEN-SIM-RAW-AOD_cfg.py
Step 4 - MINIAOD from AOD
$ cmsDriver.py MINIAOD \
--filein file:pp2mumu_LHE-GEN-SIM-RAW-AOD.root \
--fileout file:pp2mumu_LHE-GEN-SIM-RAW-AOD-MINIAOD.root \
--python_filename pp2mumu_LHE-GEN-SIM-RAW-AOD-MINIAOD_cfg.py \
--step PAT \
--datatier MINIAODSIM \
--eventcontent MINIAODSIM \
--beamspot Realistic25ns13TeVEarly2017Collision \
--conditions 102X_upgrade2018_realistic_v15 \
--geometry DB:Extended \
--era Run2_2018 \
--runUnscheduled \
--number -1 --no_exec --mc
$ cmsRun pp2mumu_LHE-GEN-SIM-RAW-AOD-MINIAOD_cfg.py
Step 5 - NANOAOD from MINIAOD
$ cmsDriver.py NANOAOD \
--filein file:pp2mumu_LHE-GEN-SIM-RAW-AOD-MINIAOD.root \
--fileout file:pp2mumu_LHE-GEN-SIM-RAW-AOD-MINIAOD-NANOAOD.root \
--python_filename pp2mumu_LHE-GEN-SIM-RAW-AOD-MINIAOD-NANOAOD_cfg.py \
--step NANO \
--datatier NANOAODSIM \
--eventcontent NANOAODSIM \
--beamspot Realistic25ns13TeVEarly2017Collision \
--conditions 102X_upgrade2018_realistic_v15 \
--geometry DB:Extended \
--era Run2_2018 \
--runUnscheduled \
--number -1 --no_exec --mc
$ cmsRun pp2mumu_LHE-GEN-SIM-RAW-AOD-MINIAOD-NANOAOD_cfg.py
NANOAOD Analyzer
NANOAOD Tools
Example analyzer using NanoAODTools package
pp2mumu_Analysis.py
#!/usr/bin/env python
import os, sys, math
import ROOT
ROOT.PyConfig.IgnoreCommandLineOptions = True
from importlib import import_module
from PhysicsTools.NanoAODTools.postprocessing.framework.postprocessor import PostProcessor
from PhysicsTools.NanoAODTools.postprocessing.framework.datamodel import Collection
from PhysicsTools.NanoAODTools.postprocessing.framework.eventloop import Module
class ExampleAnalysis(Module):
def __init__(self):
self.writeHistFile=True
def beginJob(self,histFile=None,histDirName=None):
Module.beginJob(self,histFile,histDirName)
self.h_minv=ROOT.TH1F('Minv', 'Minv', 10, 80, 100)
self.addObject(self.h_minv )
self.h_mumass=ROOT.TH1F('MuMass', 'MuMass', 100, 0, 0.2)
self.addObject(self.h_mumass )
def analyze(self, event):
muons = Collection(event, "Muon")
sum = ROOT.TLorentzVector()
if len(muons) == 2 : #Select events with 2 muons
for iter in muons : #Loop on muons
muonp = iter.p4()
sum += iter.p4()
self.h_mumass.Fill(math.sqrt( #Fills histogram with muon mass
muonp.E()*muonp.E() -
muonp.Px()*muonp.Px() -
muonp.Py()*muonp.Py() -
muonp.Pz()*muonp.Pz() ))
self.h_minv.Fill( sum.M() )
return True
preselection=""
files=["pp2mumu_LHE-NANOAOD.root"]
p=PostProcessor(
".",
files,
cut=preselection,
branchsel=None,
modules=[ExampleAnalysis()],
noOut=True,
histFileName="pp2mumu_Analysis.root",
histDirName="plots")
p.run()
Run it:
$ python pp2mumu_Analysis.py
ROOT Analyzer
NanoReader.cc
#include "ostream"
#include "TFile.h"
#include "TTreeReader.h"
#include "TTreeReaderArray.h"
#include "TLorentzVector.h"
void NanoReader(){
TFile *file = new TFile("PPto2Mu_MG5_10k_NANO.root");
TTreeReader reader("Events", file);
TTreeReaderArray<Float_t> Muon_pt(reader, "Muon_pt" );
TTreeReaderArray<Float_t> Muon_eta(reader, "Muon_eta" );
TTreeReaderArray<Float_t> Muon_phi(reader, "Muon_phi" );
TTreeReaderArray<Float_t> Muon_mass(reader, "Muon_mass" );
TTreeReaderArray<UInt_t> nMuon(reader, "nMuon" );
TTreeReaderArray<Int_t> Muon_charge(reader, "Muon_charge");
Int_t nEvents = reader.GetEntries(0);
Double_t ptCut = 0;
Int_t nMuonCut = 3;
Int_t count = 0;
while(reader.Next()){
int n = nMuon[0];
Float_t ptMax = Muon_pt[0];
if(ptMax < ptCut || n < nMuonCut ){continue;}
count++;
std::cout << "==============================================" << std::endl;
std::cout << "Event Number: " << reader.GetCurrentEntry() << std::endl;
std::cout << "Number of Muons: " << n << std::endl;
TLorentzVector pMuon[n];
for (Int_t i=0; i<n; i++) {
pMuon[i].SetPtEtaPhiM(Muon_pt[i],Muon_eta[i],Muon_phi[i],Muon_mass[i]);
std::cout << Muon_charge[i] << " ";
std::cout << Muon_pt[i] << " ";
std::cout << pMuon[i].E() << " ";
std::cout << pMuon[i].Px() << " ";
std::cout << pMuon[i].Py() << " ";
std::cout << pMuon[i].Pz() << std::endl;
}
}
Float_t eff = float(count)/float(nEvents);
std::cout << "==============================================" << std::endl;
std::cout << "Number of events on the dataset: " << nEvents << std::endl;
std::cout << "Number of events that passed the cut Pt > " << ptCut
<< " GeV and number of muons > "<< nMuonCut-1 <<": "<< count << std::endl;
std::cout << "Cut efficiency: " << eff << std::endl;
std::cout << "==============================================" << std::endl;
}
Run it:
$ root -b -q NanoReader.cc
--
gregores - 2019-04-01