CMS 3D CMS Logo

GEMSimTrackMatch.cc
Go to the documentation of this file.
7 #include <TMath.h>
8 #include <TH1F.h>
9 
10 using namespace std;
11 using namespace GEMDetLabel;
13  std::string simInputLabel_ = ps.getUntrackedParameter<std::string>("simInputLabel");
14 
15  simHitsToken_ = consumes<edm::PSimHitContainer>(edm::InputTag(simInputLabel_, "MuonGEMHits"));
16  simTracksToken_ = consumes<edm::SimTrackContainer>(ps.getParameter<edm::InputTag>("simTrackCollection"));
17  simVerticesToken_ = consumes<edm::SimVertexContainer>(ps.getParameter<edm::InputTag>("simVertexCollection"));
18  detailPlot_ = ps.getParameter<bool>("detailPlot");
19 
20  cfg_ = ps;
21 }
22 
24  // Mandantory
26  iSetup.get<MuonGeometryRecord>().get(hGeom);
27  const GEMGeometry& geom = *hGeom;
28  setGeometry(geom);
29 
30  ibooker.setCurrentFolder("MuonGEMHitsV/GEMHitsTask");
31  LogDebug("GEMSimTrackMatch") << "ibooker set current folder\n";
32 
33  const float PI = TMath::Pi();
34 
35  nstation = geom.regions()[0]->stations().size();
36  if (detailPlot_) {
37  for (unsigned int j = 0; j < nstation; j++) {
38  string track_eta_name = string("track_eta") + s_suffix[j];
39  string track_eta_title = string("track_eta") + ";SimTrack |#eta|;# of tracks";
40  track_eta[j] = ibooker.book1D(track_eta_name.c_str(), track_eta_title.c_str(), 140, minEta_, maxEta_);
41 
42  for (unsigned int k = 0; k < 3; k++) {
43  string suffix = string(s_suffix[j]) + string(c_suffix[k]);
44  string track_phi_name = string("track_phi") + suffix;
45  string track_phi_title = string("track_phi") + suffix + ";SimTrack #phi;# of tracks";
46  track_phi[j][k] = ibooker.book1D(track_phi_name.c_str(), track_phi_title.c_str(), 200, -PI, PI);
47  }
48 
49  for (unsigned int i = 0; i < 4; i++) {
50  string suffix = string(s_suffix[j]) + l_suffix[i];
51 
52  string sh_eta_name = string("sh_eta") + suffix;
53  string sh_eta_title = sh_eta_name + "; tracks |#eta|; # of tracks";
54  sh_eta[i][j] = ibooker.book1D(sh_eta_name.c_str(), sh_eta_title.c_str(), 140, minEta_, maxEta_);
55 
56  for (unsigned int k = 0; k < 3; k++) {
57  suffix = string(s_suffix[j]) + string(l_suffix[i]) + string(c_suffix[k]);
58  string sh_phi_name = string("sh_phi") + suffix;
59  string sh_phi_title = sh_phi_name + "; tracks #phi; # of tracks";
60  sh_phi[i][j][k] = ibooker.book1D((sh_phi_name).c_str(), sh_phi_title.c_str(), 200, -PI, PI);
61  }
62  }
63  }
64  }
65 }
66 
68 
71  iSetup.get<MuonGeometryRecord>().get(hGeom);
72  const GEMGeometry& geom = *hGeom;
73 
74  MySimTrack track_;
78 
79  iEvent.getByToken(simHitsToken_, simhits);
80  iEvent.getByToken(simTracksToken_, sim_tracks);
81  iEvent.getByToken(simVerticesToken_, sim_vertices);
82  if (!simhits.isValid() || !sim_tracks.isValid() || !sim_vertices.isValid())
83  return;
84 
85  //const edm::SimVertexContainer & sim_vert = *sim_vertices.product();
86  const edm::SimTrackContainer& sim_trks = *sim_tracks.product();
87 
88  if (detailPlot_) {
89  for (auto& t : sim_trks) {
90  if (!isSimTrackGood(t)) {
91  continue;
92  }
93 
94  track_.pt = t.momentum().pt();
95  track_.phi = t.momentum().phi();
96  track_.eta = t.momentum().eta();
97  std::fill(std::begin(track_.hitOdd), std::end(track_.hitOdd), false);
98  std::fill(std::begin(track_.hitEven), std::end(track_.hitEven), false);
99  for (int i = 0; i < 3; i++) {
100  for (int j = 0; j < 2; j++) {
101  track_.gem_sh[i][j] = false;
102  }
103  }
104 
105  // match hits to this SimTrack
106  const SimHitMatcher match_sh =
108 
109  // check for hit chambers
110  const auto gem_sh_ids_ch = match_sh.chamberIdsGEM();
111 
112  for (auto d : gem_sh_ids_ch) {
113  const GEMDetId id(d);
114  if (id.chamber() % 2 == 0)
115  track_.hitEven[id.station() - 1] = true;
116  else if (id.chamber() % 2 == 1)
117  track_.hitOdd[id.station() - 1] = true;
118  else {
119  std::cout << "Error to get chamber id" << std::endl;
120  }
121  track_.gem_sh[id.station() - 1][(id.layer() - 1)] = true;
122  }
123  FillWithTrigger(track_eta, fabs(track_.eta));
124  FillWithTrigger(track_phi, fabs(track_.eta), track_.phi, track_.hitOdd, track_.hitEven);
125  FillWithTrigger(sh_eta, track_.gem_sh, fabs(track_.eta));
126  FillWithTrigger(sh_phi, track_.gem_sh, fabs(track_.eta), track_.phi, track_.hitOdd, track_.hitEven);
127  }
128  }
129 }
#define LogDebug(id)
const double Pi
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX)
Definition: DQMStore.cc:239
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
unsigned int nstation
Definition: GEMTrackMatch.h:76
static const std::array< std::string, 4 > l_suffix
Definition: GEMDetLabel.h:4
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
MonitorElement * track_eta[3]
edm::ParameterSet cfg_
Definition: GEMTrackMatch.h:60
std::set< unsigned int > chamberIdsGEM() const
GEM chamber detIds with SimHits.
edm::EDGetToken simHitsToken_
Definition: GEMTrackMatch.h:61
edm::EDGetToken simVerticesToken_
Definition: GEMTrackMatch.h:63
void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:418
void analyze(const edm::Event &e, const edm::EventSetup &) override
bool hitOdd[3]
Definition: GEMTrackMatch.h:36
Float_t eta
Definition: GEMTrackMatch.h:25
void setGeometry(const GEMGeometry &geom)
static const std::array< std::string, 2 > s_suffix
Definition: GEMDetLabel.h:5
int iEvent
Definition: GenABIO.cc:224
edm::EDGetToken simTracksToken_
Definition: GEMTrackMatch.h:62
const std::vector< const GEMRegion * > & regions() const
Return a vector of all GEM regions.
Definition: GEMGeometry.cc:30
#define end
Definition: vmac.h:39
bool isValid() const
Definition: HandleBase.h:70
#define PI
Definition: QcdUeDQM.h:37
d
Definition: ztail.py:151
GEMSimTrackMatch(const edm::ParameterSet &ps)
MonitorElement * track_phi[3][3]
bool hitEven[3]
Definition: GEMTrackMatch.h:37
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
MonitorElement * sh_phi[4][3][3]
Float_t pt
Definition: GEMTrackMatch.h:25
T const * product() const
Definition: Handle.h:69
MonitorElement * sh_eta[4][3]
void FillWithTrigger(MonitorElement *me[3], Float_t eta)
#define begin
Definition: vmac.h:32
T get() const
Definition: EventSetup.h:73
Float_t phi
Definition: GEMTrackMatch.h:25
bool isSimTrackGood(const SimTrack &)
~GEMSimTrackMatch() override
bool gem_sh[3][2]
Definition: GEMTrackMatch.h:32
std::vector< SimTrack > SimTrackContainer
static const std::array< std::string, 3 > c_suffix
Definition: GEMDetLabel.h:6
Definition: Run.h:45