CMS 3D CMS Logo

FSQDQM.cc
Go to the documentation of this file.
2 #include <memory>
3 
4 // DQM
7 
8 // Framework
17 
18 // Candidate handling
25 
26 // Vertex utilities
29 
30 // Other
34 
35 // Math
43 
44 // vertexing
45 
46 // Transient tracks
54 
55 // JetCorrection
57 
58 // Substructure
61 
62 // ROOT
63 #include "TLorentzVector.h"
64 
65 // STDLIB
66 #include <iostream>
67 #include <iomanip>
68 #include <cstdio>
69 #include <string>
70 #include <sstream>
71 #include <cmath>
72 
73 using namespace edm;
74 using namespace std;
75 using namespace reco;
76 using namespace trigger;
77 
78 struct SortByPt
79 
80 {
81 
82  bool operator () (const TLorentzVector& a, const TLorentzVector& b) const {
83 
84  return a.Pt() > b.Pt();
85 
86  }
87 
88 };
89 
91 {
92  edm::LogInfo("FSQDQM") << " Creating FSQDQM "
93  << "\n";
94  pvs_ =consumes<edm::View<reco::Vertex> >(
95  iConfig.getParameter<edm::InputTag>("pvs"));
96  labelPFJet_ = iConfig.getParameter<std::string>("LabelPFJet");
97  labelCastorJet_ = iConfig.getParameter<std::string>("LabelCastorJet");
98  labelTrack_ = iConfig.getParameter<std::string>("LabelTrack");
99  tok_pfjet_ = consumes<reco::PFJetCollection>(labelPFJet_);
100  tok_track_ = consumes<reco::TrackCollection>(labelTrack_);
101  tok_castorjet_ = consumes<reco::BasicJetCollection>(labelCastorJet_);
102 
103 }
104 
105 
107  {
108 
109  edm::LogInfo("FSQDQM") << " Deleting FSQDQM "
110  << "\n";
111  // do anything here that needs to be done at desctruction time
112  // (e.g. close files, deallocate resources etc.)
113 
114  }
116  edm::EventSetup const&) {
117  bei.setCurrentFolder("Physics/FSQ");
118  PFJetpt = bei.book1D("PFJetpt",";p_{T}(PFJet)", 100,0.0 , 100);
119  PFJeteta = bei.book1D("PFJeteta", ";#eta(PFJet)", 50, -2.5, 2.5);
120  PFJetphi = bei.book1D("PFJetphi", ";#phi(PFJet)", 50, -3.14,3.14);
121  PFJetMulti = bei.book1D("PFJetMulti", ";No. of PFJets", 10, -0.5, 9.5);
122  PFJetRapidity = bei.book1D("PFJetRapidity",";PFJetRapidity", 50, -6.0,6.0);
123  CastorJetphi = bei.book1D("CastorJetphi", ";#phi(CastorJet)", 50, -3.14,3.14);
124  CastorJetMulti = bei.book1D("CastorJetMulti", ";No. of CastorJets", 10, -0.5, 9.5);
125  Track_HP_Phi =bei.book1D("Track_HP_Phi",";#phi(HPtrack)", 50, -3.14,3.14);
126  Track_HP_Eta =bei.book1D("Track_HP_Eta", ";#eta(HPtrack)", 50, -2.5, 2.5);
127  Track_HP_Pt =bei.book1D("Track_HP_Pt", ";p_{T}(HPtrack)",500, 0.0 , 50);
128  Track_HP_ptErr_over_pt=bei.book1D("Track_HP_ptErr_over_pt",";{p_{T}Err}/p_{T}",100,0,0.1);
129  Track_HP_dzvtx_over_dzerr=bei.book1D("Track_HP_dzvtx_over_dzerr",";dZerr/dZ",100,-10,10);
130  Track_HP_dxyvtx_over_dxyerror =bei.book1D("Track_HP_dxyvtx_over_dxyerror",";dxyErr/dxy",100,-10,10);
131  NPV = bei.book1D("NPV",";NPV",10, -0.5, 9.5);
132  PV_chi2 = bei.book1D("PV_chi2",";PV_chi2",100, 0.0, 2.0);
133  PV_d0 = bei.book1D("PV_d0",";PV_d0",100, -10.0, 10.0);
134  PV_numTrks = bei.book1D("PV_numTrks",";PV_numTrks",100, -0.5, 99.5);
135  PV_sumTrks=bei.book1D("PV_sumTrks",";PV_sumTrks",100,0,100);
136  h_ptsum_towards = bei.book1D("h_ptsum_towards",";h_ptsum_towards",100,0,100);
137  h_ptsum_transverse = bei.book1D("h_ptsum_transverse",";h_ptsum_transverse",100,0,100);
138 
139  h_ntracks = bei.book1D("h_ntracks",";h_ntracks",50,-0.5,49.5);
140  h_trkptsum = bei.book1D("h_trkptsum",";h_trkptsum",100,0,100);
141  h_ptsum_away = bei.book1D("h_ptsum_away",";h_ptsum_away",100,0,100);
142  h_ntracks_towards = bei.book1D("h_ntracks_towards",";h_ntracks_towards",50,-0.5,49.5);
143  h_ntracks_transverse = bei.book1D("h_ntracks_transverse",";h_ntracks_transverse",50,-0.5,49.5);
144  h_ntracks_away = bei.book1D("h_ntracks_away",";h_ntracks_away",50,-0.5,49.5);
145 
146  h_leadingtrkpt_ntrk_away =bei.bookProfile("h_leadingtrkpt_ntrk_away","h_leadingtrkpt_ntrk_away",50,0,50,0,30," ");
147  h_leadingtrkpt_ntrk_towards =bei.bookProfile("h_leadingtrkpt_ntrk_towards","h_leadingtrkpt_ntrk_towards",50,0,50,0,30," ");
148  h_leadingtrkpt_ntrk_transverse =bei.bookProfile("h_leadingtrkpt_ntrk_transverse","h_leadingtrkpt_ntrk_transverse",50,0,50,0,30," ");
149  h_leadingtrkpt_ptsum_away =bei.bookProfile("h_leadingtrkpt_ptsum_away","h_leadingtrkpt_ptsum_away",50,0,50,0,30," ");
150  h_leadingtrkpt_ptsum_towards =bei.bookProfile("h_leadingtrkpt_ptsum_towards","h_leadingtrkpt_ptsum_towards",50,0,50,0,30," ");
151  h_leadingtrkpt_ptsum_transverse =bei.bookProfile("h_leadingtrkpt_ptsum_transverse","h_leadingtrkpt_ptsum_transverse",50,0,50,0,30," ");
152 
153  }
154 
155 
156 
157 
158 
159 
160  // ------------ method called for each event ------------
161  void
163  {
164  using namespace edm;
165  using namespace std;
166  using namespace reco;
167 
168  runNumber_ = iEvent.id().run();
169  eventNumber_ = iEvent.id().event();
170  lumiNumber_ = iEvent.id().luminosityBlock();
171  bxNumber_ = iEvent.bunchCrossing();
172 
174  // if(!iEvent.getByToken(pvs_, privtxs)) return;
175  iEvent.getByToken(pvs_, privtxs);
176  double bestvz=-999.9, bestvx=-999.9, bestvy=-999.9;
177  double bestvzError=-999.9, bestvxError=-999.9, bestvyError=-999.9;
178  if(privtxs.isValid()){
179  const reco::Vertex& pvtx=privtxs->front();
180  NPV->Fill(privtxs->size());
181  if(privtxs->begin() !=privtxs->end() && !(pvtx.isFake()) && pvtx.position().Rho() <= 2. && fabs(pvtx.position().z()) <= 24){
182  bestvz = pvtx.z();
183  bestvx = pvtx.x();
184  bestvy = pvtx.y();
185  bestvzError = pvtx.zError();
186  bestvxError = pvtx.xError();
187  bestvyError = pvtx.yError();
188  PV_chi2->Fill(pvtx.normalizedChi2());
189  PV_d0->Fill(sqrt(pvtx.x() * pvtx.x() + pvtx.y() * pvtx.y()));
190  PV_numTrks->Fill(pvtx.tracksSize());
191  double vertex_sumTrks = 0.0;
192  for(reco::Vertex::trackRef_iterator iTrack= pvtx.tracks_begin(); iTrack != pvtx.tracks_end(); iTrack++)
193  {
194  vertex_sumTrks += (*iTrack)->pt();
195  }
196  PV_sumTrks->Fill(vertex_sumTrks);
197  }
198  }
199 
200  std::vector<Jet> recoPFJets;
201  recoPFJets.clear();
202  int nPFCHSJet=0;
203  edm::Handle<PFJetCollection> pfjetchscoll;
204  // if(!iEvent.getByToken(tok_pfjet_, pfjetchscoll)) return;
205  iEvent.getByToken(tok_pfjet_, pfjetchscoll);
206  if(pfjetchscoll.isValid()){
207  const reco::PFJetCollection *pfchsjets = pfjetchscoll.product();
208  reco::PFJetCollection::const_iterator pfjetchsclus = pfchsjets->begin();
209  for(pfjetchsclus = pfchsjets->begin(); pfjetchsclus!= pfchsjets->end() ; ++pfjetchsclus){
210  PFJetpt->Fill( pfjetchsclus->pt());
211  PFJeteta->Fill( pfjetchsclus->eta());
212  PFJetphi->Fill( pfjetchsclus->phi());
213  PFJetRapidity->Fill( pfjetchsclus->rapidity());
214  nPFCHSJet++;
215  }
216  PFJetMulti->Fill( nPFCHSJet);
217  }
218 
219  std::vector<Jet> recoCastorJets;
220  recoCastorJets.clear();
222  // if(!iEvent.getByToken(tok_castorjet_, castorJets)) return;
223  iEvent.getByToken(tok_castorjet_, castorJets);
224  if(castorJets.isValid()){
225  for (unsigned ijet=0; ijet<castorJets->size();ijet++) {
226  recoCastorJets.push_back((*castorJets)[ijet]);
227  }
228  for (unsigned ijet=0; ijet<recoCastorJets.size(); ijet++) {
229  // cout<<recoCastorJets[ijet].pt()<<endl;
230  CastorJetphi->Fill( recoCastorJets[ijet].phi());
231 
232  CastorJetMulti->Fill(recoCastorJets.size());
233  }
234  }
236  // if(!iEvent.getByToken(tok_track_, itracks)) return;
237  iEvent.getByToken(tok_track_, itracks);
238  if(itracks.isValid()){
240  std::vector<TLorentzVector> T_trackRec_P4;
241 
242  int ntracks = 0;
243  int ntracks_towards = 0;
244  int ntracks_transverse = 0;
245  int ntracks_away = 0;
246  float ptsum = 0;
247  float dphi=0;
248  float ptsum_towards = 0;
249  float ptsum_transverse = 0;
250  float ptsum_away = 0;
251 
252  T_trackRec_P4.clear();
253  for(reco::TrackCollection::const_iterator iT = itracks->begin(); iT != itracks->end(); ++iT){
254  if(iT->quality(hiPurity)){
255  math::XYZPoint bestvtx(bestvx,bestvy,bestvz);
256  double dzvtx = iT->dz(bestvtx);
257  double dxyvtx = iT->dxy(bestvtx);
258  double dzerror = sqrt(iT->dzError()*iT->dzError()+bestvzError*bestvzError);
259  double dxyerror = sqrt(iT->d0Error()*iT->d0Error()+bestvxError*bestvyError);
260  if((iT->ptError())/iT->pt() < 0.05 && dzvtx < 3.0 && dxyvtx < 3.0){
261  TLorentzVector trk;
262  trk.SetPtEtaPhiE(iT->pt(),iT->eta(),iT->phi(),iT->p());
263  T_trackRec_P4.push_back(trk);
264  Track_HP_Eta->Fill(iT->eta());
265  Track_HP_Phi->Fill(iT->phi());
266  Track_HP_Pt->Fill(iT->pt());
267  Track_HP_ptErr_over_pt->Fill((iT->ptError())/iT->pt());
268  Track_HP_dzvtx_over_dzerr->Fill(dzvtx/dzerror);
269  Track_HP_dxyvtx_over_dxyerror->Fill(dxyvtx/dxyerror);
270  }
271  }
272  }
273 
274  float highest_pt_track=-999;
275  int index=-999;
276  for(unsigned int k=0;k<T_trackRec_P4.size();k++){
277  if(T_trackRec_P4.at(k).Pt() > highest_pt_track){
278  highest_pt_track=T_trackRec_P4.at(k).Pt();
279  index = k;
280  }
281 
282  }
283  unsigned int finalid=abs(index);
284  // if(T_trackRec_P4.at(index).Pt()!=0.){
285  if(finalid < T_trackRec_P4.size()){
286  // std::sort(T_trackRec_P4.begin(), T_trackRec_P4.end(), SortByPt());
287  for(unsigned int itrk=0;itrk<T_trackRec_P4.size();itrk++){
288  ++ntracks;
289  ptsum= ptsum + T_trackRec_P4.at(itrk).Pt();
290  dphi = deltaPhi(T_trackRec_P4.at(itrk).Phi(),T_trackRec_P4.at(index).Phi());
291  if(fabs(dphi) < 1.05){
292  ++ntracks_towards;
293  ptsum_towards = ptsum_towards + T_trackRec_P4.at(itrk).Pt();}
294  if(fabs(dphi) > 1.05 && fabs(dphi) < 2.09){
295  ++ntracks_transverse;
296  ptsum_transverse = ptsum_transverse + T_trackRec_P4.at(itrk).Pt();}
297  if(fabs(dphi) > 2.09){
298  ++ntracks_away;
299  ptsum_away = ptsum_away + T_trackRec_P4.at(itrk).Pt();}
300  }
301 
302 
303 
304  h_ntracks->Fill(ntracks);
305  h_trkptsum->Fill(ptsum);
306  h_ptsum_towards->Fill(ptsum_towards);
307  h_ptsum_transverse->Fill(ptsum_transverse);
308  h_ptsum_away->Fill(ptsum_away);
309  h_ntracks_towards->Fill(ntracks_towards);
310  h_ntracks_transverse->Fill(ntracks_transverse);
311  h_ntracks_away->Fill(ntracks_away);
312 
313  if(!T_trackRec_P4.empty()){
314  h_leadingtrkpt_ntrk_towards->Fill(T_trackRec_P4.at(index).Pt(),ntracks_towards/8.37);
315  h_leadingtrkpt_ntrk_transverse->Fill(T_trackRec_P4.at(index).Pt(),ntracks_transverse/8.37);
316  h_leadingtrkpt_ntrk_away->Fill(T_trackRec_P4.at(index).Pt(),ntracks_away/8.37);
317  h_leadingtrkpt_ptsum_towards->Fill(T_trackRec_P4.at(index).Pt(),ptsum_towards/8.37);
318  h_leadingtrkpt_ptsum_transverse->Fill(T_trackRec_P4.at(index).Pt(),ptsum_transverse/8.37);
319  h_leadingtrkpt_ptsum_away->Fill(T_trackRec_P4.at(index).Pt(),ptsum_away/8.37);
320  }
321  }
322  }
323  }//analyze
324 
325 
326 // ------------ method fills 'descriptions' with the allowed parameters for the module ------------
327 
328 //define this as a plug-in
329 //DEFINE_FWK_MODULE(FSQDQM);
330 
331 // LocalWords: TH1F ptsum fs ntracks
RunNumber_t run() const
Definition: EventID.h:39
static const char runNumber_[]
T getParameter(std::string const &) const
EventNumber_t event() const
Definition: EventID.h:41
trackRef_iterator tracks_end() const
last iterator over tracks
Definition: Vertex.cc:81
MonitorElement * bookProfile(Args &&...args)
Definition: DQMStore.h:113
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:579
double zError() const
error on z
Definition: Vertex.h:123
TrackQuality
track quality
Definition: TrackBase.h:151
double y() const
y coordinate
Definition: Vertex.h:113
int bunchCrossing() const
Definition: EventBase.h:66
FSQDQM(const edm::ParameterSet &ps)
Definition: FSQDQM.cc:90
LuminosityBlockNumber_t luminosityBlock() const
Definition: EventID.h:40
const Point & position() const
position
Definition: Vertex.h:109
void bookHistograms(DQMStore::IBooker &bei, edm::Run const &, edm::EventSetup const &) override
Definition: FSQDQM.cc:115
int iEvent
Definition: GenABIO.cc:230
void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:268
T sqrt(T t)
Definition: SSEVec.h:18
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:106
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double z() const
z coordinate
Definition: Vertex.h:115
bool isValid() const
Definition: HandleBase.h:74
void analyze(edm::Event const &e, edm::EventSetup const &eSetup) override
Definition: FSQDQM.cc:162
int k[5][pyjets_maxn]
double x() const
x coordinate
Definition: Vertex.h:111
static TrackQuality qualityByName(const std::string &name)
Definition: TrackBase.cc:125
double xError() const
error on x
Definition: Vertex.h:119
bool isFake() const
Definition: Vertex.h:72
T const * product() const
Definition: Handle.h:81
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
double b
Definition: hdecay.h:120
edm::EventID id() const
Definition: EventBase.h:60
std::vector< PFJet > PFJetCollection
collection of PFJet objects
fixed size matrix
HLT enums.
double a
Definition: hdecay.h:121
std::vector< TrackBaseRef >::const_iterator trackRef_iterator
The iteratator for the vector<TrackRef>
Definition: Vertex.h:37
double normalizedChi2() const
chi-squared divided by n.d.o.f.
Definition: Vertex.h:107
trackRef_iterator tracks_begin() const
first iterator over tracks
Definition: Vertex.cc:76
~FSQDQM() override
Definition: FSQDQM.cc:106
double yError() const
error on y
Definition: Vertex.h:121
size_t tracksSize() const
number of tracks
Definition: Vertex.cc:71
Definition: Run.h:44