Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions DisplacedAdaptiveVertexFinder/python/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#Automatically created by SCRAM
import os
__path__.append(os.path.dirname(os.path.abspath(__file__).rsplit('/RecoVertex/AdaptiveVertexFinder/',1)[0])+'/cfipython/slc6_amd64_gcc481/RecoVertex/AdaptiveVertexFinder')
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import FWCore.ParameterSet.Config as cms

displacedInclusiveVertexFinder = cms.EDProducer("InclusiveVertexFinder",
beamSpot = cms.InputTag("offlineBeamSpot"),
primaryVertices = cms.InputTag("offlineSlimmedPrimaryVertices"),
#tracks = cms.InputTag("displacedAssocToTracks","displacedAssocToTracks","ANA"),
tracks = cms.InputTag("unpackedTracksAndVertices"),
minHits = cms.uint32(6), #old 8 -> 0 AOD produciton has problems with nhits
maximumLongitudinalImpactParameter = cms.double(99999), #old .3 -> infty
minPt = cms.double(0.4), #old .8 -> 1
maxNTracks = cms.uint32(100), #old 30 -> 100

clusterizer = cms.PSet(
seedMax3DIPSignificance = cms.double(9999.),
seedMax3DIPValue = cms.double(9999.),
seedMin3DIPSignificance = cms.double(-9999),
seedMin3DIPValue = cms.double(-9999),
clusterMaxDistance = cms.double(0.4), #500um #old .05 -> 1
clusterMaxSignificance = cms.double(4.5), #4.5 sigma #old 4.5 ---> infty
distanceRatio = cms.double(20), # was cluster scale = 1 / density factor =0.05
clusterMinAngleCosine = cms.double(0.5), # only forward decays #old accept backward decays (unboosted topologies) .5 -> -9999
),

vertexMinAngleCosine = cms.double(0.95), # scalar prod direction of tracks and flight dir #old accept backward decays .95 -> .6 me 0
vertexMinDLen2DSig = cms.double(2.5), #2.5 sigma
vertexMinDLenSig = cms.double(0.5), #0.5 sigma
fitterSigmacut = cms.double(3),
fitterTini = cms.double(256),
fitterRatio = cms.double(0.25),
useDirectVertexFitter = cms.bool(True),
useVertexReco = cms.bool(True),
vertexReco = cms.PSet(
finder = cms.string('avr'),
primcut = cms.double(1.0),
seccut = cms.double(3),
smoothing = cms.bool(True)
)

)


Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import FWCore.ParameterSet.Config as cms

#from HNL.DisplacedAdaptiveVertexFinder.unpackedTracksAndVertices_cfi import *
from PhysicsTools.PatAlgos.slimming.unpackedTracksAndVertices_cfi import *
from HNL.DisplacedAdaptiveVertexFinder.displacedInclusiveVertexFinder_cfi import *
from HNL.DisplacedAdaptiveVertexFinder.displacedVertexMerger_cfi import *
from HNL.DisplacedAdaptiveVertexFinder.displacedTrackVertexArbitrator_cfi import *
from HNL.DisplacedSVAssociator.displacedSVAssociationIVF_cfi import *

displacedInclusiveSecondaryVertices = displacedVertexMerger.clone()
displacedInclusiveSecondaryVertices.secondaryVertices = cms.InputTag("displacedTrackVertexArbitrator")
displacedInclusiveSecondaryVertices.maxFraction = 0.05 #0.05 #old .2 -> .05
displacedInclusiveSecondaryVertices.minSignificance = 10


displacedInclusiveVertexing = cms.Sequence(unpackedTracksAndVertices * displacedInclusiveVertexFinder * displacedVertexMerger * displacedTrackVertexArbitrator * displacedInclusiveSecondaryVertices )

Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import FWCore.ParameterSet.Config as cms

displacedTrackVertexArbitrator = cms.EDProducer("TrackVertexArbitrator",
beamSpot = cms.InputTag("offlineBeamSpot"),
primaryVertices = cms.InputTag("offlineSlimmedPrimaryVertices"),
#tracks = cms.InputTag("displacedAssocToTracks","displacedAssocToTracks","ANA"),
tracks = cms.InputTag("unpackedTracksAndVertices"),
secondaryVertices = cms.InputTag("displacedVertexMerger"),
dLenFraction = cms.double(0.333), #old .333 -> .2
dRCut = cms.double(1), # old .4 -> 1 me 3
distCut = cms.double(0.1), #old .04 -> .1
sigCut = cms.double(5), #old 5->10
fitterSigmacut = cms.double(3),
fitterTini = cms.double(256),
fitterRatio = cms.double(0.25),
trackMinLayers = cms.int32(4), #old 4-> 0
trackMinPt = cms.double(.4),
trackMinPixels = cms.int32(0) #old 1 -> 0
)


Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import FWCore.ParameterSet.Config as cms

displacedVertexMerger = cms.EDProducer("VertexMerger",
secondaryVertices = cms.InputTag("displacedInclusiveVertexFinder"),
maxFraction = cms.double(0.7), #old .7 -> .5
minSignificance = cms.double(2))


Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import FWCore.ParameterSet.Config as cms
unpackedTracksAndVertices = cms.EDProducer('PATTrackAndVertexUnpacker',
slimmedVertices = cms.InputTag("offlineSlimmedPrimaryVertices"),
slimmedSecondaryVertices = cms.InputTag("slimmedSecondaryVertices"),
additionalTracks= cms.InputTag("lostTracks"),
packedCandidates = cms.InputTag("packedPFCandidates")
)
98 changes: 98 additions & 0 deletions DisplacedSVAssociator/interface/VertexAssociation.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
// Muon
#include "DataFormats/PatCandidates/interface/Muon.h"

// tracks
#include "DataFormats/TrackReco/interface/Track.h"
#include "DataFormats/TrackReco/interface/TrackFwd.h"

// vertex
#include "DataFormats/VertexReco/interface/Vertex.h"
#include "DataFormats/VertexReco/interface/VertexFwd.h"
#include "DataFormats/BTauReco/interface/VertexTypes.h"

// kinematics
#include "DataFormats/Math/interface/deltaR.h"

class VertexAssociation {
public:
VertexAssociation(std::string nameString, const reco::Vertex & PV, const int& debug_) {
primaryVertex = PV;
name = nameString;
debug = debug_;
}

// fillers
//void addMuon( const pat::MuonCollection & muon);
void addVertex( const reco::Vertex & vertex);
void setPrimaryVertex(const reco::Vertex & pv){ primaryVertex = pv; };

// accessors
int getNVertices(){ return vertexCollection.size(); }
//int getNMuon() { return MuonCollection.size(); }
float getBestVertexScore() { return bestVertexScore; }

std::string getName() { return name; }
// score
const std::pair<const reco::Vertex, const float> getBestVertex(const pat::Electron & , const std::string&);
float getVertexScore(const pat::Electron & , const reco::Vertex & , const std::string &);

private:
reco::Vertex primaryVertex;
//pat::MuonCollection muonCollection;
reco::VertexCollection vertexCollection;
reco::Vertex bestVertex;
float bestVertexScore;
std::string name;
int debug;
};
//void VertexAssociation::addMuon(const pat::MuonCollection & muon) { muonCollection.push_back(muon); }
void VertexAssociation::addVertex(const reco::Vertex & vertex) { vertexCollection.push_back(vertex); }
float VertexAssociation::getVertexScore(const pat::Electron & electron , const reco::Vertex & vertex, const std::string & algo) {
float score = 0;
double ele_pt = electron.pt();
double ele_eta = electron.eta();
double ele_phi = electron.phi();

if (debug > 3) std::cout << "[DEBUG 3] [SVA] electron pT=" << ele_pt << " electron Eta: " << ele_eta <<" electron Phi "<< ele_phi << std::endl;
if (debug > 3) std::cout << "[DEBUG 3] [SVA] iterating over tracks" << std::endl;
reco::Vertex::trackRef_iterator tt = vertex.tracks_begin();
for(; tt != vertex.tracks_end(); ++tt) {
float eta = (*tt)->eta();
float phi = (*tt)->phi();
if (debug > 4) std::cout << "[DEBUG 4] [SVA] Track Eta=" << eta << " Phi: " << phi << std::endl;
float dR = reco::deltaR(ele_eta, ele_phi, eta, phi);
if (dR > 1) // was 0.4
continue;
else
score += 1.0 / dR;
}
if (debug > 3) std::cout << "[DEBUG 3] [SVA] Vertex Matching Score: " << score << std::endl;
return score;
}

const std::pair<const reco::Vertex, const float> VertexAssociation::getBestVertex(const pat::Electron & electron, const std::string & algo) {
// keep track of the best vertex
float bestScore = -1;
reco::Vertex bestVertex;

if (debug > 1) std::cout << "[DEBUG 1] [SVA] iterating over Vertices" << std::endl;
reco::VertexCollection::const_iterator ss = vertexCollection.begin();
for(; ss != vertexCollection.end(); ++ss) {
float score = getVertexScore(electron, *ss, algo);

if (score > bestScore) { // was bestScore
bestScore = score;
bestVertex = *ss;
}
}

if (bestScore > 0) {
const std::pair<const reco::Vertex, const float> vertexPair(bestVertex, bestScore);
return vertexPair; // we find at least one vertex with a track within dR = 1.0
}

else {
const std::pair<const reco::Vertex, const float> vertexPair(primaryVertex, 0);
return vertexPair;
}
}
13 changes: 13 additions & 0 deletions DisplacedSVAssociator/plugins/BuildFile.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<use name="FWCore/Framework"/>
<use name="FWCore/PluginManager"/>
<use name="FWCore/ParameterSet"/>
<use name="FWCore/Utilities"/>
<use name="DataFormats/VertexReco"/>
<use name="RecoBTag/SecondaryVertex"/>
<use name="RecoVertex/VertexPrimitives"/>
<use name="DataFormats/TrackReco"/>
<use name="CommonTools/UtilAlgos"/>
<use name="DataFormats/BTauReco"/>
<use name="boost"/>
<use name="clhep"/>
<flags EDM_PLUGIN="1"/>
Loading