13 #include <fmt/format.h> 24 simHitToken_ = consumes<PSimHitContainer>(
26 rpcDigiToken_ = consumes<RPCDigiCollection>(
34 auto rpcGeom =
eventSetup.getHandle(rpcGeomToken_);
38 event.getByToken(simHitToken_, simHitHandle);
39 event.getByToken(rpcDigiToken_, rpcDigisHandle);
42 std::map<const RPCRoll *, std::vector<double>> detToSimHitXsMap;
43 for (
auto simIt = simHitHandle->begin(); simIt != simHitHandle->end(); ++simIt) {
44 const RPCDetId rsid = simIt->detUnitId();
49 if (detToSimHitXsMap.find(
roll) == detToSimHitXsMap.end())
50 detToSimHitXsMap[
roll] = std::vector<double>();
51 detToSimHitXsMap[
roll].push_back(simIt->localPosition().x());
56 hRZ_->Fill(gp.z(), gp.perp());
60 hXY_Barrel_->Fill(gp.x(), gp.y());
63 const int layer = rsid.
layer();
66 auto match = hZPhi_.find(stla);
67 if (match != hZPhi_.end()) {
68 const double phiInDeg = 180. * gp.barePhi() /
TMath::Pi();
69 match->second->Fill(gp.z(), phiInDeg);
74 auto match = hXY_Endcap_.find(disk);
75 if (match != hXY_Endcap_.end())
76 match->second->Fill(gp.x(), gp.y());
79 for (
auto detToSimHitXs : detToSimHitXsMap) {
80 hNSimHitPerRoll_->Fill(detToSimHitXs.second.size());
84 std::map<const RPCRoll *, std::vector<double>> detToDigiXsMap;
85 for (
auto detUnitIt = rpcDigisHandle->begin(); detUnitIt != rpcDigisHandle->end(); ++detUnitIt) {
86 const RPCDetId rsid = (*detUnitIt).first;
94 for (
auto digiIt =
range.first; digiIt !=
range.second; ++digiIt) {
96 const int strip = digiIt->strip();
97 hStripProf_->Fill(
strip);
102 hStripProf_RB12_->Fill(
strip);
104 hStripProf_RB34_->Fill(
strip);
107 hStripProf_IRPC_->Fill(
strip);
109 hStripProf_Endcap_->Fill(
strip);
113 const int bx = digiIt->bx();
118 hBxDisc_4Plus_->Fill(
bx);
119 }
else if (
region == -1) {
120 hBxDisc_4Min_->Fill(
bx);
125 const double digiTime = digiIt->hasTime() ? digiIt->time() : digiIt->bx() * 25;
126 hDigiTimeAll_->Fill(digiTime);
127 if (digiIt->hasTime()) {
128 hDigiTime_->Fill(digiTime);
130 hDigiTimeIRPC_->Fill(digiTime);
132 hDigiTimeNoIRPC_->Fill(digiTime);
136 const double digiX =
roll->centreOfStrip(digiIt->strip()).
x();
137 if (detToDigiXsMap.find(
roll) == detToDigiXsMap.end())
138 detToDigiXsMap[
roll] = std::vector<double>();
139 detToDigiXsMap[
roll].push_back(digiX);
142 for (
auto detToDigiXs : detToDigiXsMap) {
143 const auto digiXs = detToDigiXs.second;
144 const int nDigi = digiXs.size();
145 hNDigiPerRoll_->Fill(nDigi);
148 const auto roll = detToDigiXs.first;
152 if (detToSimHitXsMap.find(
roll) == detToSimHitXsMap.end())
155 const auto simHitXs = detToSimHitXsMap[
roll];
156 const int nSimHit = simHitXs.size();
160 const double dx = digiXs[0] - simHitXs[0];
162 if (
roll->isBarrel()) {
165 const int layer =
detId.layer();
168 auto matchLayer = hResBarrelLayers_.find(stla);
169 if (matchLayer != hResBarrelLayers_.end())
170 matchLayer->second->Fill(
dx);
172 auto matchWheel = hResBarrelWheels_.find(
wheel);
173 if (matchWheel != hResBarrelWheels_.end())
174 matchWheel->second->Fill(
dx);
176 const int disk =
detId.region() *
detId.station();
177 auto matchDisk = hResEndcapDisks_.find(disk);
178 if (matchDisk != hResEndcapDisks_.end())
179 matchDisk->second->Fill(
dx);
181 auto matchRing = hResEndcapRings_.find(
detId.ring());
182 if (matchRing != hResEndcapRings_.end())
183 matchRing->second->Fill(
dx);
192 const double maxZ = 1100;
193 const int nbinsZ = 220;
194 const double maxXY = 800;
195 const int nbinsXY = 160;
196 const double minR = 100, maxR = 800;
197 const int nbinsR = 70;
199 const double maxBarrelZ = 700;
200 const int nbinsBarrelZ = 140;
203 hRZ_ = booker.
book2D(
"RZ",
"R-Z view;Z (cm);R (cm)", nbinsZ, -
maxZ,
maxZ, nbinsR, minR, maxR);
206 hXY_Barrel_ = booker.
book2D(
"XY_Barrel",
"X-Y view of Barrel", nbinsXY, -maxXY, maxXY, nbinsXY, -maxXY, maxXY);
207 for (
int disk = 1; disk <= 4; ++disk) {
212 hXY_Endcap_[disk] = booker.
book2D(meNameP, meTitleP, nbinsXY, -maxXY, maxXY, nbinsXY, -maxXY, maxXY);
213 hXY_Endcap_[-disk] = booker.
book2D(meNameN, meTitleN, nbinsXY, -maxXY, maxXY, nbinsXY, -maxXY, maxXY);
217 for (
int layer = 1; layer <= 6; ++layer) {
220 hZPhi_[layer] = booker.
book2D(meName, meTitle, nbinsBarrelZ, -maxBarrelZ, maxBarrelZ,
nbinsPhi, -180, 180);
224 hStripProf_ = booker.
book1D(
"Strip_Profile",
"Strip_Profile;Strip Number", 100, 0, 100);
225 hStripProf_RB12_ = booker.
book1D(
"Strip_Profile_RB12",
"Strip Profile RB1 and RB2;Strip Number", 92, 0, 92);
226 hStripProf_RB34_ = booker.
book1D(
"Strip_Profile_RB34",
"Strip Profile RB3 and RB4;Strip Number", 62, 0, 62);
227 hStripProf_Endcap_ = booker.
book1D(
"Strip_Profile_Endcap",
"Strip Profile Endcap;Strip Number", 40, 0, 40);
228 hStripProf_IRPC_ = booker.
book1D(
"Strip_Profile_IRPC",
"Strip Profile IRPC;Strip Number", 100, 0, 100);
231 hBxDist_ = booker.
book1D(
"Bunch_Crossing",
"Bunch Crossing;Bunch crossing", 20, -10., 10.);
232 hBxDisc_4Plus_ = booker.
book1D(
"BxDisc_4Plus",
"BxDisc_4Plus", 20, -10., 10.);
233 hBxDisc_4Min_ = booker.
book1D(
"BxDisc_4Min",
"BxDisc_4Min", 20, -10., 10.);
237 booker.
book1D(
"DigiTimeAll",
"Digi time including present electronics;Digi time (ns)", 100, -12.5, 12.5);
238 hDigiTime_ = booker.
book1D(
"DigiTime",
"Digi time only with timing information;Digi time (ns)", 100, -12.5, 12.5);
239 hDigiTimeIRPC_ = booker.
book1D(
"DigiTimeIRPC",
"IRPC Digi time;Digi time (ns)", 100, -12.5, 12.5);
240 hDigiTimeNoIRPC_ = booker.
book1D(
"DigiTimeNoIRPC",
"non-IRPC Digi time;Digi time (ns)", 100, -12.5, 12.5);
243 hNSimHitPerRoll_ = booker.
book1D(
"NSimHitPerRoll",
"SimHit multiplicity per Roll;Multiplicity", 10, 0, 10);
244 hNDigiPerRoll_ = booker.
book1D(
"NDigiPerRoll",
"Digi multiplicity per Roll;Multiplicity", 10, 0, 10);
247 hRes_ = booker.
book1D(
"Digi_SimHit_Difference",
"Digi-SimHit difference;dx (cm)", 100, -8, 8);
249 for (
int layer = 1; layer <= 6; ++layer) {
252 hResBarrelLayers_[layer] = booker.
book1D(meName, meTitle, 100, -8, 8);
255 hResBarrelWheels_[-2] = booker.
book1D(
"Residual_Barrel_Wheel_m2",
"Residual of Barrel Wheel-2;dx (cm)", 100, -8, 8);
256 hResBarrelWheels_[-1] = booker.
book1D(
"Residual_Barrel_Wheel_m1",
"Residual of Barrel Wheel-1;dx (cm)", 100, -8, 8);
257 hResBarrelWheels_[+0] = booker.
book1D(
"Residual_Barrel_Wheel_00",
"Residual of Barrel Wheel 0;dx (cm)", 100, -8, 8);
258 hResBarrelWheels_[+1] = booker.
book1D(
"Residual_Barrel_Wheel_p1",
"Residual of Barrel Wheel+1;dx (cm)", 100, -8, 8);
259 hResBarrelWheels_[+2] = booker.
book1D(
"Residual_Barrel_Wheel_p2",
"Residual of Barrel Wheel+2;dx (cm)", 100, -8, 8);
261 for (
int disk = 1; disk <= 4; ++disk) {
266 hResEndcapDisks_[+disk] = booker.
book1D(meNameP, meTitleP, 100, -8, 8);
267 hResEndcapDisks_[-disk] = booker.
book1D(meNameN, meTitleN, 100, -8, 8);
273 hResEndcapRings_[
ring] = booker.
book1D(meName, meTitle, 100, -8, 8);
virtual void setCurrentFolder(std::string const &fullpath)
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
RPCDigiValid(const edm::ParameterSet &ps)
T getUntrackedParameter(std::string const &, T const &) const
void analyze(const edm::Event &e, const edm::EventSetup &c) override
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
std::pair< const_iterator, const_iterator > Range
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
int region() const
Region id: 0 for Barrel, +/-1 For +/- Endcap.
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())