Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-10-25 10:06:48

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   MonitorElement* meNhitsPerLGAD_[4];
0060 
0061   MonitorElement* meHitCharge_[4];
0062   MonitorElement* meHitTime_[4];
0063 
0064   MonitorElement* meOccupancy_[4];
0065 
0066   MonitorElement* meLocalOccupancy_[2];  //folding the two ETL discs
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 // ------------ constructor and destructor --------------
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 // ------------ method called for each event  ------------
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   // --- Loop over the ETL DIGI hits
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     // --- Get the on-time sample
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     // --- Fill the histograms
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   }  // dataFrame loop
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 // ------------ method for histogram booking ------------
0198 void EtlDigiHitsValidation::bookHistograms(DQMStore::IBooker& ibook,
0199                                            edm::Run const& run,
0200                                            edm::EventSetup const& iSetup) {
0201   ibook.setCurrentFolder(folder_);
0202 
0203   // --- histograms booking
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 // ------------ method fills 'descriptions' with the allowed parameters for the module  ------------
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);