CMS 3D CMS Logo

PhysicsObjectsMonitor.cc
Go to the documentation of this file.
1 
10 
11 // Collaborating Class Header
15 
17 
21 
23 
26 
27 using namespace std;
28 using namespace edm;
29 
32  theSTAMuonLabel = pset.getUntrackedParameter<string>("StandAloneTrackCollectionLabel");
33  theSeedCollectionLabel = pset.getUntrackedParameter<string>("MuonSeedCollectionLabel");
34  theDataType = pset.getUntrackedParameter<string>("DataType");
35  magFiledToken_ = esConsumes();
36  if (theDataType != "RealData" && theDataType != "SimData")
37  edm::LogInfo("PhysicsObjectsMonitor") << "Error in Data Type!!" << endl;
38 
39  if (theDataType == "SimData") {
40  edm::LogInfo("PhysicsObjectsMonitor") << "Sorry! Running this package on simulation is no longer supported! ";
41  }
42 
43  // set Token(-s)
44  theSTAMuonToken_ =
45  consumes<reco::TrackCollection>(pset.getUntrackedParameter<string>("StandAloneTrackCollectionLabel"));
46 }
47 
50 
52  iBooker.setCurrentFolder("PhysicsObjects/MuonReconstruction");
53 
54  hPres = iBooker.book1D("pTRes", "pT Resolution", 100, -2, 2);
55  h1_Pres = iBooker.book1D("invPTRes", "1/pT Resolution", 100, -2, 2);
56 
57  charge = iBooker.book1D("charge", "track charge", 5, -2.5, 2.5);
58  ptot = iBooker.book1D("ptot", "track momentum", 50, 0, 50);
59  pt = iBooker.book1D("pt", "track pT", 100, 0, 50);
60  px = iBooker.book1D("px ", "track px", 100, -50, 50);
61  py = iBooker.book1D("py", "track py", 100, -50, 50);
62  pz = iBooker.book1D("pz", "track pz", 100, -50, 50);
63  Nmuon = iBooker.book1D("Nmuon", "Number of muon tracks", 11, -.5, 10.5);
64  Nrechits = iBooker.book1D("Nrechits", "Number of RecHits/Segments on track", 21, -.5, 21.5);
65  NDThits = iBooker.book1D("NDThits", "Number of DT Hits/Segments on track", 31, -.5, 31.5);
66  NCSChits = iBooker.book1D("NCSChits", "Number of CSC Hits/Segments on track", 31, -.5, 31.5);
67  NRPChits = iBooker.book1D("NRPChits", "Number of RPC hits on track", 11, -.5, 11.5);
68 
69  DTvsCSC = iBooker.book2D("DTvsCSC", "Number of DT vs CSC hits on track", 29, -.5, 28.5, 29, -.5, 28.5);
70  TH2F *root_ob = DTvsCSC->getTH2F();
71  root_ob->SetXTitle("Number of DT hits");
72  root_ob->SetYTitle("Number of CSC hits");
73 }
74 
76  edm::LogInfo("PhysicsObjectsMonitor") << "Run: " << event.id().run() << " Event: " << event.id().event();
78 
79  // Get the RecTrack collection from the event
81  event.getByToken(theSTAMuonToken_, staTracks);
82 
83  const auto &theMGField = eventSetup.getHandle(magFiledToken_);
84 
85  double recPt = 0.;
86  double simPt = 0.;
87 
88  reco::TrackCollection::const_iterator staTrack;
89 
90  edm::LogInfo("PhysicsObjectsMonitor") << "Reconstructed tracks: " << staTracks->size() << endl;
91  Nmuon->Fill(staTracks->size());
92  for (staTrack = staTracks->begin(); staTrack != staTracks->end(); ++staTrack) {
93  reco::TransientTrack track(*staTrack, &*theMGField);
94 
95  int nrechits = 0;
96  int nDThits = 0;
97  int nCSChits = 0;
98  int nRPChits = 0;
99 
100  for (trackingRecHit_iterator it = track.recHitsBegin(); it != track.recHitsEnd(); it++) {
101  if ((*it)->isValid()) {
102  edm::LogInfo("PhysicsObjectsMonitor") << "Analyzer: Aha this looks like a Rechit!" << std::endl;
103  if ((*it)->geographicalId().subdetId() == MuonSubdetId::DT) {
104  nDThits++;
105  } else if ((*it)->geographicalId().subdetId() == MuonSubdetId::CSC) {
106  nCSChits++;
107  } else if ((*it)->geographicalId().subdetId() == MuonSubdetId::RPC) {
108  nRPChits++;
109  } else {
110  edm::LogInfo("PhysicsObjectsMonitor") << "This is an UNKNOWN hit !! " << std::endl;
111  }
112  nrechits++;
113  }
114  }
115 
116  Nrechits->Fill(nrechits);
117  NDThits->Fill(nDThits);
118  NCSChits->Fill(nCSChits);
119  DTvsCSC->Fill(nDThits, nCSChits);
120  NRPChits->Fill(nRPChits);
121 
122  debug.dumpFTS(track.impactPointTSCP().theState());
123 
124  recPt = track.impactPointTSCP().momentum().perp();
125  edm::LogInfo("PhysicsObjectsMonitor")
126  << " p: " << track.impactPointTSCP().momentum().mag() << " pT: " << recPt << endl;
127  pt->Fill(recPt);
128  ptot->Fill(track.impactPointTSCP().momentum().mag());
129  charge->Fill(track.impactPointTSCP().charge());
130  px->Fill(track.impactPointTSCP().momentum().x());
131  py->Fill(track.impactPointTSCP().momentum().y());
132  pz->Fill(track.impactPointTSCP().momentum().z());
133  }
134  edm::LogInfo("PhysicsObjectsMonitor") << "---" << endl;
135  if (recPt && theDataType == "SimData") {
136  hPres->Fill((recPt - simPt) / simPt);
137  h1_Pres->Fill((1 / recPt - 1 / simPt) / (1 / simPt));
138  }
139 }
140 
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:36
PhysicsObjectsMonitor(const edm::ParameterSet &pset)
Constructor.
virtual TH2F * getTH2F() const
void analyze(const edm::Event &event, const edm::EventSetup &eventSetup) override
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
Log< level::Info, false > LogInfo
#define debug
Definition: HDRShower.cc:19
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
Definition: DQMStore.h:212
static constexpr int RPC
Definition: MuonSubdetId.h:13
~PhysicsObjectsMonitor() override
Destructor.
HLT enums.
static constexpr int DT
Definition: MuonSubdetId.h:11
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
static constexpr int CSC
Definition: MuonSubdetId.h:12
Definition: event.py:1
Definition: Run.h:45