Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2022-07-12 02:58:42

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