File indexing completed on 2023-10-25 10:06:48
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 #include <string>
0015
0016 #include "FWCore/Framework/interface/Frameworkfwd.h"
0017 #include "FWCore/Framework/interface/Event.h"
0018 #include "FWCore/Framework/interface/MakerMacros.h"
0019 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0020
0021 #include "DQMServices/Core/interface/DQMEDAnalyzer.h"
0022 #include "DQMServices/Core/interface/DQMStore.h"
0023
0024 #include "DataFormats/Common/interface/ValidHandle.h"
0025 #include "DataFormats/ForwardDetId/interface/ETLDetId.h"
0026 #include "DataFormats/FTLDigi/interface/FTLDigiCollections.h"
0027
0028 #include "Geometry/Records/interface/MTDDigiGeometryRecord.h"
0029 #include "Geometry/MTDGeometryBuilder/interface/MTDGeometry.h"
0030 #include "Geometry/CommonTopologies/interface/PixelTopology.h"
0031 #include "Geometry/MTDNumberingBuilder/interface/MTDTopology.h"
0032 #include "Geometry/MTDCommonData/interface/MTDTopologyMode.h"
0033
0034 class EtlDigiHitsValidation : public DQMEDAnalyzer {
0035 public:
0036 explicit EtlDigiHitsValidation(const edm::ParameterSet&);
0037 ~EtlDigiHitsValidation() override;
0038
0039 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0040
0041 private:
0042 void bookHistograms(DQMStore::IBooker&, edm::Run const&, edm::EventSetup const&) override;
0043
0044 void analyze(const edm::Event&, const edm::EventSetup&) override;
0045
0046
0047
0048 const std::string folder_;
0049 const bool optionalPlots_;
0050
0051 edm::EDGetTokenT<ETLDigiCollection> etlDigiHitsToken_;
0052
0053 edm::ESGetToken<MTDGeometry, MTDDigiGeometryRecord> mtdgeoToken_;
0054 edm::ESGetToken<MTDTopology, MTDTopologyRcd> mtdtopoToken_;
0055
0056
0057
0058 MonitorElement* meNhits_[4];
0059 MonitorElement* meNhitsPerLGAD_[4];
0060
0061 MonitorElement* meHitCharge_[4];
0062 MonitorElement* meHitTime_[4];
0063
0064 MonitorElement* meOccupancy_[4];
0065
0066 MonitorElement* meLocalOccupancy_[2];
0067 MonitorElement* meHitXlocal_[2];
0068 MonitorElement* meHitYlocal_[2];
0069
0070 MonitorElement* meHitX_[4];
0071 MonitorElement* meHitY_[4];
0072 MonitorElement* meHitZ_[4];
0073 MonitorElement* meHitPhi_[4];
0074 MonitorElement* meHitEta_[4];
0075
0076 MonitorElement* meHitTvsQ_[4];
0077 MonitorElement* meHitQvsPhi_[4];
0078 MonitorElement* meHitQvsEta_[4];
0079 MonitorElement* meHitTvsPhi_[4];
0080 MonitorElement* meHitTvsEta_[4];
0081
0082 std::array<std::unordered_map<uint32_t, uint32_t>, 4> ndigiPerLGAD_;
0083 };
0084
0085
0086 EtlDigiHitsValidation::EtlDigiHitsValidation(const edm::ParameterSet& iConfig)
0087 : folder_(iConfig.getParameter<std::string>("folder")),
0088 optionalPlots_(iConfig.getParameter<bool>("optionalPlots")) {
0089 etlDigiHitsToken_ = consumes<ETLDigiCollection>(iConfig.getParameter<edm::InputTag>("inputTag"));
0090 mtdgeoToken_ = esConsumes<MTDGeometry, MTDDigiGeometryRecord>();
0091 mtdtopoToken_ = esConsumes<MTDTopology, MTDTopologyRcd>();
0092 }
0093
0094 EtlDigiHitsValidation::~EtlDigiHitsValidation() {}
0095
0096
0097 void EtlDigiHitsValidation::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
0098 using namespace edm;
0099
0100 auto geometryHandle = iSetup.getTransientHandle(mtdgeoToken_);
0101 const MTDGeometry* geom = geometryHandle.product();
0102
0103 auto etlDigiHitsHandle = makeValid(iEvent.getHandle(etlDigiHitsToken_));
0104
0105
0106
0107 unsigned int n_digi_etl[4] = {0, 0, 0, 0};
0108 for (size_t i = 0; i < 4; i++) {
0109 ndigiPerLGAD_[i].clear();
0110 }
0111
0112 size_t index(0);
0113
0114 for (const auto& dataFrame : *etlDigiHitsHandle) {
0115
0116 int isample = 2;
0117 double weight = 1.0;
0118 const auto& sample = dataFrame.sample(isample);
0119 ETLDetId detId = dataFrame.id();
0120 DetId geoId = detId.geographicalId();
0121
0122 const MTDGeomDet* thedet = geom->idToDet(geoId);
0123 if (thedet == nullptr)
0124 throw cms::Exception("EtlDigiHitsValidation") << "GeographicalID: " << std::hex << geoId.rawId() << " ("
0125 << detId.rawId() << ") is invalid!" << std::dec << std::endl;
0126 const PixelTopology& topo = static_cast<const PixelTopology&>(thedet->topology());
0127
0128 Local3DPoint local_point(topo.localX(sample.row()), topo.localY(sample.column()), 0.);
0129 const auto& global_point = thedet->toGlobal(local_point);
0130
0131
0132
0133 int idet = 999;
0134 if (detId.discSide() == 1) {
0135 weight = -weight;
0136 }
0137 if ((detId.zside() == -1) && (detId.nDisc() == 1)) {
0138 idet = 0;
0139 } else if ((detId.zside() == -1) && (detId.nDisc() == 2)) {
0140 idet = 1;
0141 } else if ((detId.zside() == 1) && (detId.nDisc() == 1)) {
0142 idet = 2;
0143 } else if ((detId.zside() == 1) && (detId.nDisc() == 2)) {
0144 idet = 3;
0145 } else {
0146 edm::LogWarning("EtlDigiHitsValidation") << "Unknown ETL DetId configuration: " << detId;
0147 continue;
0148 }
0149
0150 index++;
0151 LogDebug("EtlDigiHitsValidation") << "Digi # " << index << " DetId " << detId.rawId() << " idet " << idet;
0152
0153 meHitCharge_[idet]->Fill(sample.data());
0154 meHitTime_[idet]->Fill(sample.toa());
0155 meOccupancy_[idet]->Fill(global_point.x(), global_point.y(), weight);
0156
0157 if (optionalPlots_) {
0158 if ((idet == 0) || (idet == 1)) {
0159 meLocalOccupancy_[0]->Fill(local_point.x(), local_point.y());
0160 meHitXlocal_[0]->Fill(local_point.x());
0161 meHitYlocal_[0]->Fill(local_point.y());
0162
0163 } else if ((idet == 2) || (idet == 3)) {
0164 meLocalOccupancy_[1]->Fill(local_point.x(), local_point.y());
0165 meHitXlocal_[1]->Fill(local_point.x());
0166 meHitYlocal_[1]->Fill(local_point.y());
0167 }
0168 }
0169
0170 meHitX_[idet]->Fill(global_point.x());
0171 meHitY_[idet]->Fill(global_point.y());
0172 meHitZ_[idet]->Fill(global_point.z());
0173 meHitPhi_[idet]->Fill(global_point.phi());
0174 meHitEta_[idet]->Fill(global_point.eta());
0175
0176 meHitTvsQ_[idet]->Fill(sample.data(), sample.toa());
0177 meHitQvsPhi_[idet]->Fill(global_point.phi(), sample.data());
0178 meHitQvsEta_[idet]->Fill(global_point.eta(), sample.data());
0179 meHitTvsPhi_[idet]->Fill(global_point.phi(), sample.toa());
0180 meHitTvsEta_[idet]->Fill(global_point.eta(), sample.toa());
0181
0182 n_digi_etl[idet]++;
0183 size_t ncount(0);
0184 ndigiPerLGAD_[idet].emplace(detId.rawId(), ncount);
0185 ndigiPerLGAD_[idet].at(detId.rawId())++;
0186
0187 }
0188
0189 for (int i = 0; i < 4; i++) {
0190 meNhits_[i]->Fill(log10(n_digi_etl[i]));
0191 for (const auto& thisNdigi : ndigiPerLGAD_[i]) {
0192 meNhitsPerLGAD_[i]->Fill(thisNdigi.second);
0193 }
0194 }
0195 }
0196
0197
0198 void EtlDigiHitsValidation::bookHistograms(DQMStore::IBooker& ibook,
0199 edm::Run const& run,
0200 edm::EventSetup const& iSetup) {
0201 ibook.setCurrentFolder(folder_);
0202
0203
0204
0205 meNhits_[0] = ibook.book1D("EtlNhitsZnegD1",
0206 "Number of ETL DIGI hits (-Z, Single(topo1D)/First(topo2D) disk);log_{10}(N_{DIGI})",
0207 100,
0208 0.,
0209 5.25);
0210 meNhits_[1] =
0211 ibook.book1D("EtlNhitsZnegD2", "Number of ETL DIGI hits (-Z, Second disk);log_{10}(N_{DIGI})", 100, 0., 5.25);
0212 meNhits_[2] = ibook.book1D("EtlNhitsZposD1",
0213 "Number of ETL DIGI hits (+Z, Single(topo1D)/First(topo2D) disk);log_{10}(N_{DIGI})",
0214 100,
0215 0.,
0216 5.25);
0217 meNhits_[3] =
0218 ibook.book1D("EtlNhitsZposD2", "Number of ETL DIGI hits (+Z, Second disk);log_{10}(N_{DIGI})", 100, 0., 5.25);
0219
0220 meNhitsPerLGAD_[0] = ibook.book1D("EtlNhitsPerLGADZnegD1",
0221 "Number of ETL DIGI hits (-Z, Single(topo1D)/First(topo2D) disk) per LGAD;N_{DIGI}",
0222 50,
0223 0.,
0224 50.);
0225 meNhitsPerLGAD_[1] =
0226 ibook.book1D("EtlNhitsPerLGADZnegD2", "Number of ETL DIGI hits (-Z, Second disk) per LGAD;N_{DIGI}", 50, 0., 50.);
0227 meNhitsPerLGAD_[2] = ibook.book1D("EtlNhitsPerLGADZposD1",
0228 "Number of ETL DIGI hits (+Z, Single(topo1D)/First(topo2D) disk) per LGAD;N_{DIGI}",
0229 50,
0230 0.,
0231 50.);
0232 meNhitsPerLGAD_[3] =
0233 ibook.book1D("EtlNhitsPerLGADZposD2", "Number of ETL DIGI hits (+Z, Second disk) per LGAD;N_{DIGI}", 50, 0., 50.);
0234
0235 meHitCharge_[0] = ibook.book1D("EtlHitChargeZnegD1",
0236 "ETL DIGI hits charge (-Z, Single(topo1D)/First(topo2D) disk);Q_{DIGI} [ADC counts]",
0237 100,
0238 0.,
0239 256.);
0240 meHitCharge_[1] =
0241 ibook.book1D("EtlHitChargeZnegD2", "ETL DIGI hits charge (-Z, Second disk);Q_{DIGI} [ADC counts]", 100, 0., 256.);
0242 meHitCharge_[2] = ibook.book1D("EtlHitChargeZposD1",
0243 "ETL DIGI hits charge (+Z, Single(topo1D)/First(topo2D) disk);Q_{DIGI} [ADC counts]",
0244 100,
0245 0.,
0246 256.);
0247 meHitCharge_[3] =
0248 ibook.book1D("EtlHitChargeZposD2", "ETL DIGI hits charge (+Z, Second disk);Q_{DIGI} [ADC counts]", 100, 0., 256.);
0249 meHitTime_[0] = ibook.book1D("EtlHitTimeZnegD1",
0250 "ETL DIGI hits ToA (-Z, Single(topo1D)/First(topo2D) disk);ToA_{DIGI} [TDC counts]",
0251 100,
0252 0.,
0253 2000.);
0254 meHitTime_[1] =
0255 ibook.book1D("EtlHitTimeZnegD2", "ETL DIGI hits ToA (-Z, Second disk);ToA_{DIGI} [TDC counts]", 100, 0., 2000.);
0256 meHitTime_[2] = ibook.book1D("EtlHitTimeZposD1",
0257 "ETL DIGI hits ToA (+Z, Single(topo1D)/First(topo2D) disk);ToA_{DIGI} [TDC counts]",
0258 100,
0259 0.,
0260 2000.);
0261 meHitTime_[3] =
0262 ibook.book1D("EtlHitTimeZposD2", "ETL DIGI hits ToA (+Z, Second disk);ToA_{DIGI} [TDC counts]", 100, 0., 2000.);
0263
0264 meOccupancy_[0] =
0265 ibook.book2D("EtlOccupancyZnegD1",
0266 "ETL DIGI hits occupancy (-Z, Single(topo1D)/First(topo2D) disk);X_{DIGI} [cm];Y_{DIGI} [cm]",
0267 135,
0268 -135.,
0269 135.,
0270 135,
0271 -135.,
0272 135.);
0273 meOccupancy_[1] = ibook.book2D("EtlOccupancyZnegD2",
0274 "ETL DIGI hits occupancy (-Z, Second disk);X_{DIGI} [cm];Y_{DIGI} [cm]",
0275 135,
0276 -135.,
0277 135.,
0278 135,
0279 -135.,
0280 135.);
0281 meOccupancy_[2] =
0282 ibook.book2D("EtlOccupancyZposD1",
0283 "ETL DIGI hits occupancy (+Z, Single(topo1D)/First(topo2D) disk);X_{DIGI} [cm];Y_{DIGI} [cm]",
0284 135,
0285 -135.,
0286 135.,
0287 135,
0288 -135.,
0289 135.);
0290 meOccupancy_[3] = ibook.book2D("EtlOccupancyZposD2",
0291 "ETL DIGI hits occupancy (+Z, Second disk);X_{DIGI} [cm];Y_{DIGI} [cm]",
0292 135,
0293 -135.,
0294 135.,
0295 135,
0296 -135.,
0297 135.);
0298 if (optionalPlots_) {
0299 meLocalOccupancy_[0] = ibook.book2D("EtlLocalOccupancyZneg",
0300 "ETL DIGI hits local occupancy (-Z);X_{DIGI} [cm];Y_{DIGI} [cm]",
0301 100,
0302 -2.2,
0303 2.2,
0304 50,
0305 -1.1,
0306 1.1);
0307 meLocalOccupancy_[1] = ibook.book2D("EtlLocalOccupancyZpos",
0308 "ETL DIGI hits local occupancy (+Z);X_{DIGI} [cm];Y_{DIGI} [cm]",
0309 100,
0310 -2.2,
0311 2.2,
0312 50,
0313 -1.1,
0314 1.1);
0315 meHitXlocal_[0] = ibook.book1D("EtlHitXlocalZneg", "ETL DIGI local X (-Z);X_{DIGI}^{LOC} [cm]", 100, -2.2, 2.2);
0316 meHitXlocal_[1] = ibook.book1D("EtlHitXlocalZpos", "ETL DIGI local X (+Z);X_{DIGI}^{LOC} [cm]", 100, -2.2, 2.2);
0317 meHitYlocal_[0] = ibook.book1D("EtlHitYlocalZneg", "ETL DIGI local Y (-Z);Y_{DIGI}^{LOC} [cm]", 50, -1.1, 1.1);
0318 meHitYlocal_[1] = ibook.book1D("EtlHitYlocalZpos", "ETL DIGI local Y (-Z);Y_{DIGI}^{LOC} [cm]", 50, -1.1, 1.1);
0319 }
0320 meHitX_[0] = ibook.book1D(
0321 "EtlHitXZnegD1", "ETL DIGI hits X (-Z, Single(topo1D)/First(topo2D) disk);X_{DIGI} [cm]", 100, -130., 130.);
0322 meHitX_[1] = ibook.book1D("EtlHitXZnegD2", "ETL DIGI hits X (-Z, Second disk);X_{DIGI} [cm]", 100, -130., 130.);
0323 meHitX_[2] = ibook.book1D(
0324 "EtlHitXZposD1", "ETL DIGI hits X (+Z, Single(topo1D)/First(topo2D) disk);X_{DIGI} [cm]", 100, -130., 130.);
0325 meHitX_[3] = ibook.book1D("EtlHitXZposD2", "ETL DIGI hits X (+Z, Second disk);X_{DIGI} [cm]", 100, -130., 130.);
0326 meHitY_[0] = ibook.book1D(
0327 "EtlHitYZnegD1", "ETL DIGI hits Y (-Z, Single(topo1D)/First(topo2D) disk);Y_{DIGI} [cm]", 100, -130., 130.);
0328 meHitY_[1] = ibook.book1D("EtlHitYZnegD2", "ETL DIGI hits Y (-Z, Second disk);Y_{DIGI} [cm]", 100, -130., 130.);
0329 meHitY_[2] = ibook.book1D(
0330 "EtlHitYZposD1", "ETL DIGI hits Y (+Z, Single(topo1D)/First(topo2D) disk);Y_{DIGI} [cm]", 100, -130., 130.);
0331 meHitY_[3] = ibook.book1D("EtlHitYZposD2", "ETL DIGI hits Y (+Z, Second disk);Y_{DIGI} [cm]", 100, -130., 130.);
0332 meHitZ_[0] = ibook.book1D(
0333 "EtlHitZZnegD1", "ETL DIGI hits Z (-Z, Single(topo1D)/First(topo2D) disk);Z_{DIGI} [cm]", 100, -302., -298.);
0334 meHitZ_[1] = ibook.book1D("EtlHitZZnegD2", "ETL DIGI hits Z (-Z, Second disk);Z_{DIGI} [cm]", 100, -304., -300.);
0335 meHitZ_[2] = ibook.book1D(
0336 "EtlHitZZposD1", "ETL DIGI hits Z (+Z, Single(topo1D)/First(topo2D) disk);Z_{DIGI} [cm]", 100, 298., 302.);
0337 meHitZ_[3] = ibook.book1D("EtlHitZZposD2", "ETL DIGI hits Z (+Z, Second disk);Z_{DIGI} [cm]", 100, 300., 304.);
0338
0339 meHitPhi_[0] = ibook.book1D("EtlHitPhiZnegD1",
0340 "ETL DIGI hits #phi (-Z, Single(topo1D)/First(topo2D) disk);#phi_{DIGI} [rad]",
0341 100,
0342 -3.15,
0343 3.15);
0344 meHitPhi_[1] =
0345 ibook.book1D("EtlHitPhiZnegD2", "ETL DIGI hits #phi (-Z, Second disk);#phi_{DIGI} [rad]", 100, -3.15, 3.15);
0346 meHitPhi_[2] = ibook.book1D("EtlHitPhiZposD1",
0347 "ETL DIGI hits #phi (+Z, Single(topo1D)/First(topo2D) disk);#phi_{DIGI} [rad]",
0348 100,
0349 -3.15,
0350 3.15);
0351 meHitPhi_[3] =
0352 ibook.book1D("EtlHitPhiZposD2", "ETL DIGI hits #phi (+Z, Second disk);#phi_{DIGI} [rad]", 100, -3.15, 3.15);
0353 meHitEta_[0] = ibook.book1D(
0354 "EtlHitEtaZnegD1", "ETL DIGI hits #eta (-Z, Single(topo1D)/First(topo2D) disk);#eta_{DIGI}", 100, -3.2, -1.56);
0355 meHitEta_[1] = ibook.book1D("EtlHitEtaZnegD2", "ETL DIGI hits #eta (-Z, Second disk);#eta_{DIGI}", 100, -3.2, -1.56);
0356 meHitEta_[2] = ibook.book1D(
0357 "EtlHitEtaZposD1", "ETL DIGI hits #eta (+Z, Single(topo1D)/First(topo2D) disk);#eta_{DIGI}", 100, 1.56, 3.2);
0358 meHitEta_[3] = ibook.book1D("EtlHitEtaZposD2", "ETL DIGI hits #eta (+Z, Second disk);#eta_{DIGI}", 100, 1.56, 3.2);
0359 meHitTvsQ_[0] = ibook.bookProfile(
0360 "EtlHitTvsQZnegD1",
0361 "ETL DIGI ToA vs charge (-Z, Single(topo1D)/First(topo2D) disk);Q_{DIGI} [ADC counts];ToA_{DIGI} [TDC counts]",
0362 50,
0363 0.,
0364 256.,
0365 0.,
0366 1024.);
0367 meHitTvsQ_[1] =
0368 ibook.bookProfile("EtlHitTvsQZnegD2",
0369 "ETL DIGI ToA vs charge (-Z, Second Disk);Q_{DIGI} [ADC counts];ToA_{DIGI} [TDC counts]",
0370 50,
0371 0.,
0372 256.,
0373 0.,
0374 1024.);
0375 meHitTvsQ_[2] = ibook.bookProfile(
0376 "EtlHitTvsQZposD1",
0377 "ETL DIGI ToA vs charge (+Z, Single(topo1D)/First(topo2D) disk);Q_{DIGI} [ADC counts];ToA_{DIGI} [TDC counts]",
0378 50,
0379 0.,
0380 256.,
0381 0.,
0382 1024.);
0383 meHitTvsQ_[3] =
0384 ibook.bookProfile("EtlHitTvsQZposD2",
0385 "ETL DIGI ToA vs charge (+Z, Second disk);Q_{DIGI} [ADC counts];ToA_{DIGI} [TDC counts]",
0386 50,
0387 0.,
0388 256.,
0389 0.,
0390 1024.);
0391 meHitQvsPhi_[0] = ibook.bookProfile(
0392 "EtlHitQvsPhiZnegD1",
0393 "ETL DIGI charge vs #phi (-Z, Single(topo1D)/First(topo2D) disk);#phi_{DIGI} [rad];Q_{DIGI} [ADC counts]",
0394 50,
0395 -3.15,
0396 3.15,
0397 0.,
0398 1024.);
0399 meHitQvsPhi_[1] =
0400 ibook.bookProfile("EtlHitQvsPhiZnegD2",
0401 "ETL DIGI charge vs #phi (-Z, Second disk);#phi_{DIGI} [rad];Q_{DIGI} [ADC counts]",
0402 50,
0403 -3.15,
0404 3.15,
0405 0.,
0406 1024.);
0407 meHitQvsPhi_[2] = ibook.bookProfile(
0408 "EtlHitQvsPhiZposD1",
0409 "ETL DIGI charge vs #phi (+Z, Single(topo1D)/First(topo2D) disk);#phi_{DIGI} [rad];Q_{DIGI} [ADC counts]",
0410 50,
0411 -3.15,
0412 3.15,
0413 0.,
0414 1024.);
0415 meHitQvsPhi_[3] =
0416 ibook.bookProfile("EtlHitQvsPhiZposD2",
0417 "ETL DIGI charge vs #phi (+Z, Second disk);#phi_{DIGI} [rad];Q_{DIGI} [ADC counts]",
0418 50,
0419 -3.15,
0420 3.15,
0421 0.,
0422 1024.);
0423 meHitQvsEta_[0] = ibook.bookProfile(
0424 "EtlHitQvsEtaZnegD1",
0425 "ETL DIGI charge vs #eta (-Z, Single(topo1D)/First(topo2D) disk);#eta_{DIGI};Q_{DIGI} [ADC counts]",
0426 50,
0427 -3.2,
0428 -1.56,
0429 0.,
0430 1024.);
0431 meHitQvsEta_[1] = ibook.bookProfile("EtlHitQvsEtaZnegD2",
0432 "ETL DIGI charge vs #eta (-Z, Second disk);#eta_{DIGI};Q_{DIGI} [ADC counts]",
0433 50,
0434 -3.2,
0435 -1.56,
0436 0.,
0437 1024.);
0438 meHitQvsEta_[2] = ibook.bookProfile(
0439 "EtlHitQvsEtaZposD1",
0440 "ETL DIGI charge vs #eta (+Z, Single(topo1D)/First(topo2D) disk);#eta_{DIGI};Q_{DIGI} [ADC counts]",
0441 50,
0442 1.56,
0443 3.2,
0444 0.,
0445 1024.);
0446 meHitQvsEta_[3] = ibook.bookProfile("EtlHitQvsEtaZposD2",
0447 "ETL DIGI charge vs #eta (+Z, Second disk);#eta_{DIGI};Q_{DIGI} [ADC counts]",
0448 50,
0449 1.56,
0450 3.2,
0451 0.,
0452 1024.);
0453 meHitTvsPhi_[0] = ibook.bookProfile(
0454 "EtlHitTvsPhiZnegD1",
0455 "ETL DIGI ToA vs #phi (-Z, Single(topo1D)/First(topo2D) disk);#phi_{DIGI} [rad];ToA_{DIGI} [TDC counts]",
0456 50,
0457 -3.15,
0458 3.15,
0459 0.,
0460 1024.);
0461 meHitTvsPhi_[1] =
0462 ibook.bookProfile("EtlHitTvsPhiZnegD2",
0463 "ETL DIGI ToA vs #phi (-Z, Second disk);#phi_{DIGI} [rad];ToA_{DIGI} [TDC counts]",
0464 50,
0465 -3.15,
0466 3.15,
0467 0.,
0468 1024.);
0469 meHitTvsPhi_[2] = ibook.bookProfile(
0470 "EtlHitTvsPhiZposD1",
0471 "ETL DIGI ToA vs #phi (+Z, Single(topo1D)/First(topo2D) disk);#phi_{DIGI} [rad];ToA_{DIGI} [TDC counts]",
0472 50,
0473 -3.15,
0474 3.15,
0475 0.,
0476 1024.);
0477 meHitTvsPhi_[3] =
0478 ibook.bookProfile("EtlHitTvsPhiZposD2",
0479 "ETL DIGI ToA vs #phi (+Z, Second disk);#phi_{DIGI} [rad];ToA_{DIGI} [TDC counts]",
0480 50,
0481 -3.15,
0482 3.15,
0483 0.,
0484 1024.);
0485 meHitTvsEta_[0] = ibook.bookProfile(
0486 "EtlHitTvsEtaZnegD1",
0487 "ETL DIGI ToA vs #eta (-Z, Single(topo1D)/First(topo2D) disk);#eta_{DIGI};ToA_{DIGI} [TDC counts]",
0488 50,
0489 -3.2,
0490 -1.56,
0491 0.,
0492 1024.);
0493 meHitTvsEta_[1] = ibook.bookProfile("EtlHitTvsEtaZnegD2",
0494 "ETL DIGI ToA vs #eta (-Z, Second disk);#eta_{DIGI};ToA_{DIGI} [TDC counts]",
0495 50,
0496 -3.2,
0497 -1.56,
0498 0.,
0499 1024.);
0500 meHitTvsEta_[2] = ibook.bookProfile(
0501 "EtlHitTvsEtaZposD1",
0502 "ETL DIGI ToA vs #eta (+Z, Single(topo1D)/First(topo2D) disk);#eta_{DIGI};ToA_{DIGI} [TDC counts]",
0503 50,
0504 1.56,
0505 3.2,
0506 0.,
0507 1024.);
0508 meHitTvsEta_[3] = ibook.bookProfile("EtlHitTvsEtaZposD2",
0509 "ETL DIGI ToA vs #eta (+Z, Second disk);#eta_{DIGI};ToA_{DIGI} [TDC counts]",
0510 50,
0511 1.56,
0512 3.2,
0513 0.,
0514 1024.);
0515 }
0516
0517
0518 void EtlDigiHitsValidation::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0519 edm::ParameterSetDescription desc;
0520
0521 desc.add<std::string>("folder", "MTD/ETL/DigiHits");
0522 desc.add<edm::InputTag>("inputTag", edm::InputTag("mix", "FTLEndcap"));
0523 desc.add<bool>("optionalPlots", false);
0524
0525 descriptions.add("etlDigiHitsDefaultValid", desc);
0526 }
0527
0528 DEFINE_FWK_MODULE(EtlDigiHitsValidation);