CMS 3D CMS Logo

L1TrackFastJetProducer.cc
Go to the documentation of this file.
1 // //
3 // Producer of TkJet, //
4 // Cluster L1 tracks using fastjet //
5 // //
7 
8 // system include files
9 #include <memory>
10 
11 // user include files
25 
26 // L1 objects
31 
32 // geometry
36 
37 #include <string>
38 #include "TMath.h"
39 #include "TH1.h"
40 
41 using namespace l1t;
42 using namespace edm;
43 using namespace std;
44 
46 // //
47 // CLASS DEFINITION //
48 // //
50 
52 public:
54  typedef std::vector<L1TTTrackType> L1TTTrackCollectionType;
55 
57  ~L1TrackFastJetProducer() override;
58 
59  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
60 
61 private:
62  //void beginJob() override;
63  void produce(edm::Event&, const edm::EventSetup&) override;
64  //void endJob() override;
65 
66  // track selection criteria
67  float trkZMax_; // in [cm]
68  float trkChi2dofMax_; // maximum track chi2dof
69  double trkBendChi2Max_; // maximum track bendchi2
70  float trkPtMin_; // in [GeV]
71  float trkEtaMax_; // in [rad]
72  int trkNStubMin_; // minimum number of stubs
73  int trkNPSStubMin_; // minimum number of PS stubs
74  double deltaZ0Cut_; // save with |L1z-z0| < maxZ0
75  double coneSize_; // Use anti-kt with this cone size
79  bool displaced_; //use prompt/displaced tracks
80 
84 };
85 
86 // constructor
88  : trackToken_(consumes<std::vector<TTTrack<Ref_Phase2TrackerDigi_> > >(
89  iConfig.getParameter<edm::InputTag>("L1TrackInputTag"))),
90  pvToken_(consumes<TkPrimaryVertexCollection>(iConfig.getParameter<edm::InputTag>("L1PrimaryVertexTag"))),
92  trkZMax_ = (float)iConfig.getParameter<double>("trk_zMax");
93  trkChi2dofMax_ = (float)iConfig.getParameter<double>("trk_chi2dofMax");
94  trkBendChi2Max_ = iConfig.getParameter<double>("trk_bendChi2Max");
95  trkPtMin_ = (float)iConfig.getParameter<double>("trk_ptMin");
96  trkEtaMax_ = (float)iConfig.getParameter<double>("trk_etaMax");
97  trkNStubMin_ = (int)iConfig.getParameter<int>("trk_nStubMin");
98  trkNPSStubMin_ = (int)iConfig.getParameter<int>("trk_nPSStubMin");
99  deltaZ0Cut_ = (float)iConfig.getParameter<double>("deltaZ0Cut");
100  coneSize_ = (float)iConfig.getParameter<double>("coneSize");
101  doTightChi2_ = iConfig.getParameter<bool>("doTightChi2");
102  trkPtTightChi2_ = (float)iConfig.getParameter<double>("trk_ptTightChi2");
103  trkChi2dofTightChi2_ = (float)iConfig.getParameter<double>("trk_chi2dofTightChi2");
104  displaced_ = iConfig.getParameter<bool>("displaced");
105  if (displaced_)
106  produces<TkJetCollection>("L1TrackFastJetsExtended");
107  else
108  produces<TkJetCollection>("L1TrackFastJets");
109 }
110 
111 // destructor
113 
114 // producer
116  std::unique_ptr<TkJetCollection> L1TrackFastJets(new TkJetCollection);
117 
118  // L1 tracks
120  iEvent.getByToken(trackToken_, TTTrackHandle);
121  std::vector<TTTrack<Ref_Phase2TrackerDigi_> >::const_iterator iterL1Track;
122 
123  // Tracker Topology
124  const TrackerTopology& tTopo = iSetup.getData(tTopoToken_);
125 
126  edm::Handle<TkPrimaryVertexCollection> TkPrimaryVertexHandle;
127  iEvent.getByToken(pvToken_, TkPrimaryVertexHandle);
128 
129  fastjet::JetDefinition jet_def(fastjet::antikt_algorithm, coneSize_);
130  std::vector<fastjet::PseudoJet> JetInputs;
131 
132  float recoVtx = TkPrimaryVertexHandle->begin()->zvertex();
133  unsigned int this_l1track = 0;
134  for (iterL1Track = TTTrackHandle->begin(); iterL1Track != TTTrackHandle->end(); iterL1Track++) {
135  this_l1track++;
136  float trk_pt = iterL1Track->momentum().perp();
137  float trk_z0 = iterL1Track->z0();
138  float trk_chi2dof = iterL1Track->chi2Red();
139  float trk_bendchi2 = iterL1Track->stubPtConsistency();
140  std::vector<edm::Ref<edmNew::DetSetVector<TTStub<Ref_Phase2TrackerDigi_> >, TTStub<Ref_Phase2TrackerDigi_> > >
141  theStubs = iterL1Track->getStubRefs();
142  int trk_nstub = (int)theStubs.size();
143 
144  if (fabs(trk_z0) > trkZMax_)
145  continue;
146  if (fabs(iterL1Track->momentum().eta()) > trkEtaMax_)
147  continue;
148  if (trk_pt < trkPtMin_)
149  continue;
150  if (trk_nstub < trkNStubMin_)
151  continue;
152  if (trk_chi2dof > trkChi2dofMax_)
153  continue;
154  if (trk_bendchi2 > trkBendChi2Max_)
155  continue;
156  if (doTightChi2_ && (trk_pt > trkPtTightChi2_ && trk_chi2dof > trkChi2dofTightChi2_))
157  continue;
158 
159  int trk_nPS = 0;
160  for (int istub = 0; istub < trk_nstub; istub++) {
161  DetId detId(theStubs.at(istub)->getDetId());
162  bool tmp_isPS = false;
163  if (detId.det() == DetId::Detector::Tracker) {
164  if (detId.subdetId() == StripSubdetector::TOB && tTopo.tobLayer(detId) <= 3)
165  tmp_isPS = true;
166  else if (detId.subdetId() == StripSubdetector::TID && tTopo.tidRing(detId) <= 9)
167  tmp_isPS = true;
168  }
169  if (tmp_isPS)
170  trk_nPS++;
171  }
172  if (trk_nPS < trkNPSStubMin_)
173  continue;
174  if (fabs(recoVtx - trk_z0) > deltaZ0Cut_)
175  continue;
176 
177  fastjet::PseudoJet psuedoJet(iterL1Track->momentum().x(),
178  iterL1Track->momentum().y(),
179  iterL1Track->momentum().z(),
180  iterL1Track->momentum().mag());
181  JetInputs.push_back(psuedoJet); // input tracks for clustering
182  JetInputs.back().set_user_index(this_l1track - 1); // save track index in the collection
183  } // end loop over tracks
184 
185  fastjet::ClusterSequence cs(JetInputs, jet_def); // define the output jet collection
186  std::vector<fastjet::PseudoJet> JetOutputs =
187  fastjet::sorted_by_pt(cs.inclusive_jets(0)); // output jet collection, pT-ordered
188 
189  for (unsigned int ijet = 0; ijet < JetOutputs.size(); ++ijet) {
191  JetOutputs[ijet].px(), JetOutputs[ijet].py(), JetOutputs[ijet].pz(), JetOutputs[ijet].modp());
192  float sumpt = 0;
193  float avgZ = 0;
194  std::vector<edm::Ptr<L1TTTrackType> > L1TrackPtrs;
195  std::vector<fastjet::PseudoJet> fjConstituents = fastjet::sorted_by_pt(cs.constituents(JetOutputs[ijet]));
196 
197  for (unsigned int i = 0; i < fjConstituents.size(); ++i) {
198  auto index = fjConstituents[i].user_index();
199  edm::Ptr<L1TTTrackType> trkPtr(TTTrackHandle, index);
200  L1TrackPtrs.push_back(trkPtr); // L1Tracks in the jet
201  sumpt = sumpt + trkPtr->momentum().perp();
202  avgZ = avgZ + trkPtr->momentum().perp() * trkPtr->z0();
203  }
204  avgZ = avgZ / sumpt;
206  TkJet trkJet(jetP4, jetRef, L1TrackPtrs, avgZ);
207  L1TrackFastJets->push_back(trkJet);
208  } //end loop over Jet Outputs
209 
210  if (displaced_)
211  iEvent.put(std::move(L1TrackFastJets), "L1TrackFastJetsExtended");
212  else
213  iEvent.put(std::move(L1TrackFastJets), "L1TrackFastJets");
214 }
215 
216 //void L1TrackFastJetProducer::beginJob() {}
217 
218 //void L1TrackFastJetProducer::endJob() {}
219 
221  //The following says we do not know what parameters are allowed so do no validation
222  // Please change this to state exactly what you do use, even if it is no parameters
224  desc.setUnknown();
225  descriptions.addDefault(desc);
226 }
227 
228 //define this as a plug-in
L1TrackFastJetProducer::trkZMax_
float trkZMax_
Definition: L1TrackFastJetProducer.cc:67
Handle.h
L1TrackFastJetProducer::L1TTTrackType
TTTrack< Ref_Phase2TrackerDigi_ > L1TTTrackType
Definition: L1TrackFastJetProducer.cc:53
mps_fire.i
i
Definition: mps_fire.py:428
TkPrimaryVertex.h
edm::ESInputTag
Definition: ESInputTag.h:87
dqmMemoryStats.float
float
Definition: dqmMemoryStats.py:127
L1TrackFastJetProducer_cfi.L1TrackFastJets
L1TrackFastJets
Definition: L1TrackFastJetProducer_cfi.py:3
TrackerGeometry.h
L1TrackFastJetProducer::L1TrackFastJetProducer
L1TrackFastJetProducer(const edm::ParameterSet &)
Definition: L1TrackFastJetProducer.cc:87
TTTrack::momentum
GlobalVector momentum() const
Track momentum.
Definition: TTTrack.h:295
L1TrackFastJetProducer::L1TTTrackCollectionType
std::vector< L1TTTrackType > L1TTTrackCollectionType
Definition: L1TrackFastJetProducer.cc:54
EDProducer.h
L1TrackFastJetProducer::trkChi2dofTightChi2_
float trkChi2dofTightChi2_
Definition: L1TrackFastJetProducer.cc:78
L1TrackFastJetProducer::tTopoToken_
edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > tTopoToken_
Definition: L1TrackFastJetProducer.cc:83
TTTypes.h
fwrapper::cs
unique_ptr< ClusterSequence > cs
Definition: fastjetfortran_madfks.cc:47
edm::EDGetTokenT
Definition: EDGetToken.h:33
multPhiCorr_741_25nsDY_cfi.py
py
Definition: multPhiCorr_741_25nsDY_cfi.py:12
edm
HLT enums.
Definition: AlignableModifier.h:19
TrackerTopology
Definition: TrackerTopology.h:16
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
TTTrack
Class to store the L1 Track Trigger tracks.
Definition: TTTrack.h:29
EDProducer.h
L1TrackFastJetProducer::doTightChi2_
bool doTightChi2_
Definition: L1TrackFastJetProducer.cc:76
L1TrackFastJetProducer::trkEtaMax_
float trkEtaMax_
Definition: L1TrackFastJetProducer.cc:71
L1TrackFastJetProducer::trkPtTightChi2_
float trkPtTightChi2_
Definition: L1TrackFastJetProducer.cc:77
L1TrackFastJetProducer::trkPtMin_
float trkPtMin_
Definition: L1TrackFastJetProducer.cc:70
edm::Handle
Definition: AssociativeIterator.h:50
TrackerTopology::tidRing
unsigned int tidRing(const DetId &id) const
Definition: TrackerTopology.h:218
L1TrackFastJetProducer::coneSize_
double coneSize_
Definition: L1TrackFastJetProducer.cc:75
edm::Ref
Definition: AssociativeIterator.h:58
align::Tracker
Definition: StructureType.h:70
DetId
Definition: DetId.h:17
MakerMacros.h
TrackerTopology.h
TrackerTopologyRcd.h
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
l1t::TkPrimaryVertexCollection
std::vector< TkPrimaryVertex > TkPrimaryVertexCollection
Definition: TkPrimaryVertex.h:30
L1TrackFastJetProducer::~L1TrackFastJetProducer
~L1TrackFastJetProducer() override
Definition: L1TrackFastJetProducer.cc:112
l1t::TkJetCollection
std::vector< TkJet > TkJetCollection
Definition: TkJetFwd.h:20
fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
TTStub
Class to store the L1 Track Trigger stubs.
Definition: TTStub.h:22
L1TrackFastJetProducer::deltaZ0Cut_
double deltaZ0Cut_
Definition: L1TrackFastJetProducer.cc:74
L1TrackFastJetProducer::pvToken_
edm::EDGetTokenT< TkPrimaryVertexCollection > pvToken_
Definition: L1TrackFastJetProducer.cc:82
VirtualJetProducer.h
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
L1TrackFastJetProducer::produce
void produce(edm::Event &, const edm::EventSetup &) override
Definition: L1TrackFastJetProducer.cc:115
L1TrackFastJetProducer::trackToken_
const edm::EDGetTokenT< std::vector< TTTrack< Ref_Phase2TrackerDigi_ > > > trackToken_
Definition: L1TrackFastJetProducer.cc:81
TrackerDigiGeometryRecord.h
edm::ParameterSet
Definition: ParameterSet.h:47
Event.h
l1t
delete x;
Definition: CaloConfig.h:22
TkJet.h
TTTrack::z0
double z0() const
Track z0.
Definition: TTTrack.h:330
LorentzVector.h
fwrapper::jet_def
JetDefinition jet_def
Definition: fastjetfortran_madfks.cc:46
createfilelist.int
int
Definition: createfilelist.py:10
iEvent
int iEvent
Definition: GenABIO.cc:224
TkJetFwd.h
trackerHitRTTI::vector
Definition: trackerHitRTTI.h:21
edm::stream::EDProducer
Definition: EDProducer.h:36
edm::EventSetup
Definition: EventSetup.h:58
edm::ESGetToken< TrackerTopology, TrackerTopologyRcd >
InputTag.h
edm::Ptr
Definition: AssociationVector.h:31
edm::EventSetup::getData
bool getData(T &iHolder) const
Definition: EventSetup.h:127
L1TrackFastJetProducer::trkNStubMin_
int trkNStubMin_
Definition: L1TrackFastJetProducer.cc:72
multPhiCorr_741_25nsDY_cfi.px
px
Definition: multPhiCorr_741_25nsDY_cfi.py:10
TrackerTopology::tobLayer
unsigned int tobLayer(const DetId &id) const
Definition: TrackerTopology.h:147
submitPVResolutionJobs.desc
string desc
Definition: submitPVResolutionJobs.py:251
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
L1TrackFastJetProducer::displaced_
bool displaced_
Definition: L1TrackFastJetProducer.cc:79
l1t::TkJet
Definition: TkJet.h:18
Frameworkfwd.h
math::XYZTLorentzVector
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:29
PixelGeomDetUnit.h
StripSubdetector::TOB
static constexpr auto TOB
Definition: StripSubdetector.h:18
EventSetup.h
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
AlignmentPI::index
index
Definition: AlignmentPayloadInspectorHelper.h:46
L1TrackFastJetProducer::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: L1TrackFastJetProducer.cc:220
TrackerTopologyRcd
Definition: TrackerTopologyRcd.h:10
ParameterSet.h
L1TrackFastJetProducer
Definition: L1TrackFastJetProducer.cc:51
DeDxTools::esConsumes
ESGetTokenH3DDVariant esConsumes(std::string const &Reccord, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
edm::Event
Definition: Event.h:73
L1TrackFastJetProducer::trkNPSStubMin_
int trkNPSStubMin_
Definition: L1TrackFastJetProducer.cc:73
edm::ConfigurationDescriptions::addDefault
void addDefault(ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:99
L1TrackFastJetProducer::trkBendChi2Max_
double trkBendChi2Max_
Definition: L1TrackFastJetProducer.cc:69
PV3DBase::perp
T perp() const
Definition: PV3DBase.h:69
edm::InputTag
Definition: InputTag.h:15
StripSubdetector::TID
static constexpr auto TID
Definition: StripSubdetector.h:17
L1TrackFastJetProducer::trkChi2dofMax_
float trkChi2dofMax_
Definition: L1TrackFastJetProducer.cc:68