Some useful notes about luminosity and pileup determinations.

LUM-12-002 (unpublished)

Pileup task

With condor:

Quick start

condor_submit createPileupJSON.sub

With old batch system:

~giamman/public/pu/myPileupScript.sh [label] [input JSON] [normtag] [xsection] [nBins] [local directory]
~giamman/public/pu/createPileupJSON.sh

bsub -q 1nw "bash createPileupJSON.sh"

To do list:


Create pileup JSON

brilcalclumi

Install:

bash
export PATH=$HOME/.local/bin:/afs/cern.ch/cms/lumi/brilconda-1.0.3/bin:$PATH
pip install --install-option="--prefix=$HOME/.local" brilws

Create csv:

brilcalc lumi --xing -i /afs/cern.ch/cms/CAF/CMSCOMM/COMM_DQM/certification/Collisions16/13TeV/DCSOnly/json_DCSONLY.txt -o /afs/cern.ch/work/g/giamman/pu/pileup.csv --normtag /afs/cern.ch/user/c/cmsbril/public/2016normtags/normtag_BRIL.json

PU calculation

Create JSON (from inside a CMSSW area):

estimatePileup_makeJSON_2015.py --csvInput /afs/cern.ch/work/g/giamman/pu/pileup.csv /afs/cern.ch/work/g/giamman/pu/pileup_JSON.txt

PU scripts in CMSSW


https://twiki.cern.ch/twiki/bin/viewauth/CMS/PileupMCReweightingUtilities

Handle >  PupInfo;
event.getByLabel(edm::InputTag("addPileupInfo"), PupInfo);

std::vector::const_iterator PVI;

float Tnpv = -1;
for(PVI = PupInfo->begin(); PVI != PupInfo->end(); ++PVI) {

   int BX = PVI->getBunchCrossing();

   if(BX == 0) { 
     Tnpv = PVI->getTrueNumInteractions();
     continue;
   }

}

double MyWeight = LumiWeights_.weight( Tnpv );

Use stand-alone: check PhysicsTools/Utilities/interface/LumiReweightingStandAlone.h
See https://twiki.cern.ch/twiki/bin/viewauth/CMS/PileupMCReweightingUtilities

Use in EDAnalyzer (from here):

#include "PhysicsTools/Utilities/interface/LumiReWeighting.h"

private:
  virtual void beginJob() {
    std::string distr = "pileUp" + dataPUFile_ + ".root";
    LumiWeights_ = edm::LumiReWeighting(distr,"DataPileupHistogram_69mbMinBias.root",std::string("pileup"),std::string("pileup"));	
    LumiWeightsUp_ = edm::LumiReWeighting(distr,"DataPileupHistogram_69mbMinBias_up.root",std::string("pileup"),std::string("pileup"));
    LumiWeightsDown_ = edm::LumiReWeighting(distr,"DataPileupHistogram_69mbMinBias_down.root",std::string("pileup"),std::string("pileup"));
  }

  edm::LumiReWeighting LumiWeights_, LumiWeightsUp_, LumiWeightsDown_;
  edm::InputTag lumiBlock_ = iConfig.getParameter("lumiBlock");
  t_lumiBlock_ = consumes< unsigned int >( lumiBlock_ );
  edm::InputTag runNumber_ = iConfig.getParameter("runNumber");
  t_runNumber_ = consumes< unsigned int >( runNumber_ );
  edm::InputTag eventNumber_ = iConfig.getParameter("eventNumber");
  t_eventNumber_ = consumes< ULong64_t >( eventNumber_ );

void DMAnalysisTreeMaker::getPUSF(){
  puWeight=(float) LumiWeights_.weight(nTruePU);
  puWeightUp = (float) LumiWeightsUp_.weight(nTruePU);
  puWeightDown = (float) LumiWeightsDown_.weight(nTruePU);
  float_values["Event_puWeight"]=puWeight;
  float_values["Event_puWeightUp"]=puWeightUp; 
  float_values["Event_puWeightDown"]=puWeightDown;
  float_values["Event_nTruePU"]=(float)nTruePU;
}

How to use "consumes": link

List of all available collections: https://twiki.cern.ch/twiki/bin/view/CMSPublic/SWGuideRecoDataTable
To be used:


Length scale calibration

Section 6.3 of LUM-12-002 (see above)

talk #1

talk #2


Brilcalc

Andrea Bocci's wrapper script to ensure correct environment