1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
#ifndef TrackBuildingAnalyzer_H
#define TrackBuildingAnalyzer_H
// -*- C++ -*-
//
//
/**\class TrackBuildingAnalyzer TrackBuildingAnalyzer.cc
Monitoring source for general quantities related to tracks.
*/
// Original Author: Ryan Kelley
// Created: Sat 28 13;30:00 CEST 2009
//
// system includes
#include <memory>
#include <fstream>
// user includes
#include "DQMServices/Core/interface/DQMStore.h"
#include "DataFormats/Candidate/interface/CandidateFwd.h"
#include "DataFormats/TrackCandidate/interface/TrackCandidate.h"
#include "DataFormats/TrackCandidate/interface/TrackCandidateCollection.h"
#include "DataFormats/TrackReco/interface/SeedStopInfo.h"
#include "DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "FWCore/Framework/interface/MakerMacros.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/ServiceRegistry/interface/Service.h"
#include "RecoTracker/TkTrackingRegions/interface/TrackingRegion.h"
#include "RecoTracker/TkTrackingRegions/interface/TrackingRegionsSeedingLayerSets.h"
#include "TrackingTools/Records/interface/TransientTrackRecord.h"
#include "TrackingTools/TransientTrack/interface/TransientTrack.h"
#include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h"
#include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHitBuilder.h"
class TrackBuildingAnalyzer {
public:
typedef dqm::legacy::DQMStore DQMStore;
typedef dqm::legacy::MonitorElement MonitorElement;
using MVACollection = std::vector<float>;
using QualityMaskCollection = std::vector<unsigned char>;
TrackBuildingAnalyzer(const edm::ParameterSet&);
~TrackBuildingAnalyzer() = default;
void initHisto(DQMStore::IBooker& ibooker, const edm::ParameterSet&);
void analyze(const edm::Event& iEvent,
const edm::EventSetup& iSetup,
const TrajectorySeed& seed,
const SeedStopInfo& stopInfo,
const reco::BeamSpot& bs,
const MagneticField& theMF,
const TransientTrackingRecHitBuilder& theTTRHBuilder);
void analyze(const edm::Event& iEvent,
const edm::EventSetup& iSetup,
const TrackCandidate& candidate,
const reco::BeamSpot& bs,
const MagneticField& theMF,
const TransientTrackingRecHitBuilder& theTTRHBuilder);
void analyze(const edm::View<reco::Track>& trackCollection,
const std::vector<const MVACollection*>& mvaCollections,
const std::vector<const QualityMaskCollection*>& qualityMaskCollections);
void analyze(const reco::CandidateView& regionCandidates);
void analyze(const std::vector<std::unique_ptr<TrackingRegion>>& regions);
void analyze(const TrackingRegionsSeedingLayerSets& regions);
private:
void fillHistos(const edm::EventSetup& iSetup, const reco::Track& track, std::string sname);
void bookHistos(std::string sname, DQMStore::IBooker& ibooker);
template <typename T>
void analyzeRegions(const T& regions);
// ----------member data ---------------------------
// Regions covered by tracking regions
MonitorElement* TrackingRegionEta = nullptr;
MonitorElement* TrackingRegionPhi = nullptr;
MonitorElement* TrackingRegionPhiVsEta = nullptr;
double etaBinWidth = 0.;
double phiBinWidth = 0.;
// Candidates used for tracking regions
MonitorElement* TrackingRegionCandidatePt = nullptr;
MonitorElement* TrackingRegionCandidateEta = nullptr;
MonitorElement* TrackingRegionCandidatePhi = nullptr;
MonitorElement* TrackingRegionCandidatePhiVsEta = nullptr;
// Track Seeds
MonitorElement* SeedPt = nullptr;
MonitorElement* SeedEta = nullptr;
MonitorElement* SeedPhi = nullptr;
MonitorElement* SeedPhiVsEta = nullptr;
MonitorElement* SeedTheta = nullptr;
MonitorElement* SeedQ = nullptr;
MonitorElement* SeedDxy = nullptr;
MonitorElement* SeedDz = nullptr;
MonitorElement* NumberOfRecHitsPerSeed = nullptr;
MonitorElement* NumberOfRecHitsPerSeedVsPhiProfile = nullptr;
MonitorElement* NumberOfRecHitsPerSeedVsEtaProfile = nullptr;
MonitorElement* seedStoppingSource = nullptr;
MonitorElement* seedStoppingSourceVsPhi = nullptr;
MonitorElement* seedStoppingSourceVsEta = nullptr;
MonitorElement* numberOfTrajCandsPerSeed = nullptr;
MonitorElement* numberOfTrajCandsPerSeedVsPhi = nullptr;
MonitorElement* numberOfTrajCandsPerSeedVsEta = nullptr;
MonitorElement* seedStoppingSourceVsNumberOfTrajCandsPerSeed = nullptr;
// Track Candidate
MonitorElement* TrackCandPt = nullptr;
MonitorElement* TrackCandEta = nullptr;
MonitorElement* TrackCandPhi = nullptr;
MonitorElement* TrackCandPhiVsEta = nullptr;
MonitorElement* TrackCandTheta = nullptr;
MonitorElement* TrackCandQ = nullptr;
MonitorElement* TrackCandDxy = nullptr;
MonitorElement* TrackCandDz = nullptr;
MonitorElement* NumberOfRecHitsPerTrackCand = nullptr;
MonitorElement* NumberOfRecHitsPerTrackCandVsPhiProfile = nullptr;
MonitorElement* NumberOfRecHitsPerTrackCandVsEtaProfile = nullptr;
MonitorElement* stoppingSource = nullptr;
MonitorElement* stoppingSourceVSeta = nullptr;
MonitorElement* stoppingSourceVSphi = nullptr;
std::vector<MonitorElement*> trackMVAs;
std::vector<MonitorElement*> trackMVAsHP;
std::vector<MonitorElement*> trackMVAsVsPtProfile;
std::vector<MonitorElement*> trackMVAsHPVsPtProfile;
std::vector<MonitorElement*> trackMVAsVsEtaProfile;
std::vector<MonitorElement*> trackMVAsHPVsEtaProfile;
std::string histname; //for naming the histograms according to algorithm used
//to disable some plots
const bool doAllPlots;
const bool doAllSeedPlots;
const bool doTCPlots;
const bool doAllTCPlots;
const bool doPT;
const bool doETA;
const bool doPHI;
const bool doPHIVsETA;
const bool doTheta;
const bool doQ;
const bool doDxy;
const bool doDz;
const bool doNRecHits;
const bool doProfPHI;
const bool doProfETA;
const bool doStopSource;
const bool doMVAPlots;
const bool doRegionPlots;
const bool doRegionCandidatePlots;
};
#endif
|