Examples of Simulation+Reconstruction Chain in CMSSW

The user should be aware that CMSSW evolving rapidly, and all examples will change quickly. This page is for training people who will help in the rapid development and testing cycle. What you learn is not garanteed to work for very long . . .

This procedure is supposed to work for vanila CMSSW_0_6_0. It has been tested with CMSSW_0_6_0_pre6 with some patches (see below)

The full chain includes following steps: The entire chain is split into two pieces: generation and reconstruction.

Setup working area

Usual sequence for CMSSW_0_6_0:
scramv1 project CMSSW CMSSW_0_6_0
cd CMSSW_0_6_0/src
eval `scramv1 runtime -csh`
Need extra patches for CMSSW_0_6_0_pre6:
scramv1 project CMSSW CMSSW_0_6_0_pre6
cd CMSSW_0_6_0_pre6/src
cmscvsroot CMSSW
cvs co -r V01-03-00 DataFormats/JetReco
cvs co -r V00-01-07 RecoJets/JetAlgorithms
cvs co -r V00-01-06 RecoJets/JetProducers
cvs co -r V00-04-02 RecoLocalCalo/CaloTowersCreator
eval `scramv1 runtime -csh`
scramv1 b
Get configuration files:

Generation

The configuration file is Example_Gen+DetSim+Digi.cfg. To run particle gun sample, run
cmsRun -p Example_Gen+DetSim+Digi.cfg
To run Pythia Z'(700)->dijets, first include pythia_Z700_dijets.cfi instead of pt_gun.cfi in the Example_Gen+DetSim+Digi.cfg file. It generates 5 events and produces file evtgen_detsim_digi.root containing generator level information, SimHits including CaloSimHits, and digis.
CMSSW_0_6_0_pre6 generation job may coredump in the very end. This is a known issue not affecting the generated data file.

Reconstruction

The configuration file is Example_Calorimetry+Jets.cfg. To run particle gun sample, run
cmsRun -p  Example_Calorimetry+Jets.cfg
The produced file evtgen_jets.root contains generator level information, reconstructed intermediate objects, like CaloTowers, and also jets reconstracted using generator level information as well as true CaloTower information.

Some comments to the configuration file are below...


        module out = PoolOutputModule {
            untracked string fileName = 'evtgen_jets.root'
            untracked vstring outputCommands = 
          {
            "keep *",
            "drop *_muoncscdigi_*_*",
            "drop *_muondtdigi_*_*",
            "drop *_stripdigi_*_*",
            "drop *_pixdigi_*_*",
            "drop *_hcaldigi_*_*",
            "drop *_ecaldigi_*_*",
            "drop *_SimG4Object_*_*"
          }
        } 
Drop all digis and all simulation objects from output.
   module genCandidates = HepMCCandidateProducer {
# pick right source - different for different generators
   	# string src = "PythiaSource"
   	string src = "FlatRandomPtGunSource"
        untracked bool verbose = false
        bool stableOnly = true
    	vstring excludeList = { "nu(e)0", "nu(mu)0", "nu(tau)0", "mu-", "K(L)0", "n0" }
  }
This converts generator level particles into generic CandidateCollectin to be used as a unified input by jet algorithms. Note, that generator module name needs to be explicitly specified here.
#   module caloTowers = CaloTowerCandidateCreator {
#          string src = "towermaker"
#   }
   module caloTowers = CaloTowerCandidateProducer {
          string src = "towermaker"
   }
 
This converts CaloTowers collection into generic CandidateCollectin to be used as a unified input by jet algorithms. In pre3 we still use CaloTowerCandidateProducer, however in later releases supported by the Calorimetry group CaloTowerCandidateCreator should be used.
   block mcone_jet_parameters = {
          untracked int32 debugLevel = 1
          double seedThreshold = 3.0
          double towerThreshold = 1.0
          double coneAreaFraction = 1.0
          int32 maxPairSize = 2
          int32 maxIterations = 100
          double overlapThreshold = .75
   }

   block kt_jet_parameters = {
          int32 ktAngle = 2
          int32 ktRecom = 1
          double ktECut = 1.0
          double ktRParam = 1.0
   }
Common MidConeJets and KtJets reconstruction parameters.
   module mcone5gen =  MidpointJetProducer {
          using mcone_jet_parameters
          double coneRadius = 0.5
          string src = "genCandidates"
          untracked string jetType = "GenJet"
   }

   module mcone7gen =  MidpointJetProducer {
          using mcone_jet_parameters
          double coneRadius = 0.7
          string src = "genCandidates"
          untracked string jetType = "GenJet"
   }

   module ktjetgen =  KtJetProducer {
          using kt_jet_parameters
          string src = "genCandidates"
          untracked string jetType = "GenJet"
         }
Specific parameters for MidCone 0.5, MidCone 0.7, and Kt jets reconstructed from Generator particles and producing specific CaloJets
  
   module mcone5 =  MidpointJetProducer {
          using mcone_jet_parameters
          double coneRadius = 0.5
          string src = "caloTowers"
          untracked string jetType = "CaloJet"
   }

   module mcone7 =  MidpointJetProducer {
          using mcone_jet_parameters
          double coneRadius = 0.7
          string src = "caloTowers"
          untracked string jetType = "CaloJet"
   }

   module ktjet =  KtJetProducer {
          using kt_jet_parameters
          string src = "caloTowers"
	  untracked string jetType = "CaloJet"
         }
Specific parameters for MidCone 0.5, MidCone 0.7, and Kt jets reconstructed from CaloTowers and producing specific CaloJets

Jet Analysis

As a hook for further analysis, let's make a simple distribution:
root.exe evtgen_jets.root
root [1] Events->Draw("CaloJets_mcone5.obj.m_data.e:GenJets_mcone5gen.obj.m_data.e");
This plots energy of reconstructed CaloJet vs energy of corresponding reconstructed GenJet.
Last updated May 2, 2006 by Fedor Ratnikov