Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-12-12 23:19:34

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/Records/interface/MTDTopologyRcd.h"
0030 #include "Geometry/MTDGeometryBuilder/interface/MTDGeometry.h"
0031 #include "Geometry/CommonTopologies/interface/PixelTopology.h"
0032 #include "Geometry/MTDGeometryBuilder/interface/MTDTopology.h"
0033 #include "Geometry/MTDCommonData/interface/MTDTopologyMode.h"
0034 
0035 class EtlDigiHitsValidation : public DQMEDAnalyzer {
0036 public:
0037   explicit EtlDigiHitsValidation(const edm::ParameterSet&);
0038   ~EtlDigiHitsValidation() override;
0039 
0040   static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0041 
0042 private:
0043   void bookHistograms(DQMStore::IBooker&, edm::Run const&, edm::EventSetup const&) override;
0044 
0045   void analyze(const edm::Event&, const edm::EventSetup&) override;
0046 
0047   // ------------ member data ------------
0048 
0049   const std::string folder_;
0050   const bool optionalPlots_;
0051 
0052   edm::EDGetTokenT<ETLDigiCollection> etlDigiHitsToken_;
0053 
0054   edm::ESGetToken<MTDGeometry, MTDDigiGeometryRecord> mtdgeoToken_;
0055   edm::ESGetToken<MTDTopology, MTDTopologyRcd> mtdtopoToken_;
0056 
0057   // --- histograms declaration
0058 
0059   MonitorElement* meNhits_[4];
0060   MonitorElement* meNhitsPerLGAD_[4];
0061 
0062   MonitorElement* meHitCharge_[4];
0063   MonitorElement* meHitTime_[4];
0064   MonitorElement* meHitToT_[4];
0065 
0066   MonitorElement* meOccupancy_[4];
0067 
0068   MonitorElement* meLocalOccupancy_[2];  //folding the two ETL discs
0069   MonitorElement* meHitXlocal_[2];
0070   MonitorElement* meHitYlocal_[2];
0071 
0072   MonitorElement* meHitX_[4];
0073   MonitorElement* meHitY_[4];
0074   MonitorElement* meHitZ_[4];
0075   MonitorElement* meHitPhi_[4];
0076   MonitorElement* meHitEta_[4];
0077 
0078   MonitorElement* meHitTvsQ_[4];
0079   MonitorElement* meHitToTvsQ_[4];
0080   MonitorElement* meHitQvsPhi_[4];
0081   MonitorElement* meHitQvsEta_[4];
0082   MonitorElement* meHitTvsPhi_[4];
0083   MonitorElement* meHitTvsEta_[4];
0084 
0085   std::array<std::unordered_map<uint32_t, uint32_t>, 4> ndigiPerLGAD_;
0086 };
0087 
0088 // ------------ constructor and destructor --------------
0089 EtlDigiHitsValidation::EtlDigiHitsValidation(const edm::ParameterSet& iConfig)
0090     : folder_(iConfig.getParameter<std::string>("folder")),
0091       optionalPlots_(iConfig.getParameter<bool>("optionalPlots")) {
0092   etlDigiHitsToken_ = consumes<ETLDigiCollection>(iConfig.getParameter<edm::InputTag>("inputTag"));
0093   mtdgeoToken_ = esConsumes<MTDGeometry, MTDDigiGeometryRecord>();
0094   mtdtopoToken_ = esConsumes<MTDTopology, MTDTopologyRcd>();
0095 }
0096 
0097 EtlDigiHitsValidation::~EtlDigiHitsValidation() {}
0098 
0099 // ------------ method called for each event  ------------
0100 void EtlDigiHitsValidation::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
0101   using namespace edm;
0102 
0103   auto geometryHandle = iSetup.getTransientHandle(mtdgeoToken_);
0104   const MTDGeometry* geom = geometryHandle.product();
0105 
0106   auto etlDigiHitsHandle = makeValid(iEvent.getHandle(etlDigiHitsToken_));
0107 
0108   // --- Loop over the ETL DIGI hits
0109 
0110   unsigned int n_digi_etl[4] = {0, 0, 0, 0};
0111   for (size_t i = 0; i < 4; i++) {
0112     ndigiPerLGAD_[i].clear();
0113   }
0114 
0115   size_t index(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     if (detId.discSide() == 1) {
0138       weight = -weight;
0139     }
0140     if ((detId.zside() == -1) && (detId.nDisc() == 1)) {
0141       idet = 0;
0142     } else if ((detId.zside() == -1) && (detId.nDisc() == 2)) {
0143       idet = 1;
0144     } else if ((detId.zside() == 1) && (detId.nDisc() == 1)) {
0145       idet = 2;
0146     } else if ((detId.zside() == 1) && (detId.nDisc() == 2)) {
0147       idet = 3;
0148     } else {
0149       edm::LogWarning("EtlDigiHitsValidation") << "Unknown ETL DetId configuration: " << detId;
0150       continue;
0151     }
0152 
0153     index++;
0154     LogDebug("EtlDigiHitsValidation") << "Digi # " << index << " DetId " << detId.rawId() << " idet " << idet;
0155 
0156     meHitCharge_[idet]->Fill(sample.data());
0157     meHitTime_[idet]->Fill(sample.toa());
0158     meHitToT_[idet]->Fill(sample.tot());
0159     meOccupancy_[idet]->Fill(global_point.x(), global_point.y(), weight);
0160 
0161     if (optionalPlots_) {
0162       if ((idet == 0) || (idet == 1)) {
0163         meLocalOccupancy_[0]->Fill(local_point.x(), local_point.y());
0164         meHitXlocal_[0]->Fill(local_point.x());
0165         meHitYlocal_[0]->Fill(local_point.y());
0166 
0167       } else if ((idet == 2) || (idet == 3)) {
0168         meLocalOccupancy_[1]->Fill(local_point.x(), local_point.y());
0169         meHitXlocal_[1]->Fill(local_point.x());
0170         meHitYlocal_[1]->Fill(local_point.y());
0171       }
0172     }
0173 
0174     meHitX_[idet]->Fill(global_point.x());
0175     meHitY_[idet]->Fill(global_point.y());
0176     meHitZ_[idet]->Fill(global_point.z());
0177     meHitPhi_[idet]->Fill(global_point.phi());
0178     meHitEta_[idet]->Fill(global_point.eta());
0179 
0180     meHitTvsQ_[idet]->Fill(sample.data(), sample.toa());
0181     meHitToTvsQ_[idet]->Fill(sample.data(), sample.tot());
0182     meHitQvsPhi_[idet]->Fill(global_point.phi(), sample.data());
0183     meHitQvsEta_[idet]->Fill(global_point.eta(), sample.data());
0184     meHitTvsPhi_[idet]->Fill(global_point.phi(), sample.toa());
0185     meHitTvsEta_[idet]->Fill(global_point.eta(), sample.toa());
0186 
0187     n_digi_etl[idet]++;
0188     size_t ncount(0);
0189     ndigiPerLGAD_[idet].emplace(detId.rawId(), ncount);
0190     ndigiPerLGAD_[idet].at(detId.rawId())++;
0191 
0192   }  // dataFrame loop
0193 
0194   for (int i = 0; i < 4; i++) {
0195     meNhits_[i]->Fill(log10(n_digi_etl[i]));
0196     for (const auto& thisNdigi : ndigiPerLGAD_[i]) {
0197       meNhitsPerLGAD_[i]->Fill(thisNdigi.second);
0198     }
0199   }
0200 }
0201 
0202 // ------------ method for histogram booking ------------
0203 void EtlDigiHitsValidation::bookHistograms(DQMStore::IBooker& ibook,
0204                                            edm::Run const& run,
0205                                            edm::EventSetup const& iSetup) {
0206   ibook.setCurrentFolder(folder_);
0207 
0208   // --- histograms booking
0209 
0210   meNhits_[0] = ibook.book1D("EtlNhitsZnegD1",
0211                              "Number of ETL DIGI hits (-Z, Single(topo1D)/First(topo2D) disk);log_{10}(N_{DIGI})",
0212                              100,
0213                              0.,
0214                              5.25);
0215   meNhits_[1] =
0216       ibook.book1D("EtlNhitsZnegD2", "Number of ETL DIGI hits (-Z, Second disk);log_{10}(N_{DIGI})", 100, 0., 5.25);
0217   meNhits_[2] = ibook.book1D("EtlNhitsZposD1",
0218                              "Number of ETL DIGI hits (+Z, Single(topo1D)/First(topo2D) disk);log_{10}(N_{DIGI})",
0219                              100,
0220                              0.,
0221                              5.25);
0222   meNhits_[3] =
0223       ibook.book1D("EtlNhitsZposD2", "Number of ETL DIGI hits (+Z, Second disk);log_{10}(N_{DIGI})", 100, 0., 5.25);
0224 
0225   meNhitsPerLGAD_[0] = ibook.book1D("EtlNhitsPerLGADZnegD1",
0226                                     "Number of ETL DIGI hits (-Z, Single(topo1D)/First(topo2D) disk) per LGAD;N_{DIGI}",
0227                                     50,
0228                                     0.,
0229                                     50.);
0230   meNhitsPerLGAD_[1] =
0231       ibook.book1D("EtlNhitsPerLGADZnegD2", "Number of ETL DIGI hits (-Z, Second disk) per LGAD;N_{DIGI}", 50, 0., 50.);
0232   meNhitsPerLGAD_[2] = ibook.book1D("EtlNhitsPerLGADZposD1",
0233                                     "Number of ETL DIGI hits (+Z, Single(topo1D)/First(topo2D) disk) per LGAD;N_{DIGI}",
0234                                     50,
0235                                     0.,
0236                                     50.);
0237   meNhitsPerLGAD_[3] =
0238       ibook.book1D("EtlNhitsPerLGADZposD2", "Number of ETL DIGI hits (+Z, Second disk) per LGAD;N_{DIGI}", 50, 0., 50.);
0239 
0240   meHitCharge_[0] = ibook.book1D("EtlHitChargeZnegD1",
0241                                  "ETL DIGI hits charge (-Z, Single(topo1D)/First(topo2D) disk);Q_{DIGI} [ADC counts]",
0242                                  100,
0243                                  0.,
0244                                  256.);
0245   meHitCharge_[1] =
0246       ibook.book1D("EtlHitChargeZnegD2", "ETL DIGI hits charge (-Z, Second disk);Q_{DIGI} [ADC counts]", 100, 0., 256.);
0247   meHitCharge_[2] = ibook.book1D("EtlHitChargeZposD1",
0248                                  "ETL DIGI hits charge (+Z, Single(topo1D)/First(topo2D) disk);Q_{DIGI} [ADC counts]",
0249                                  100,
0250                                  0.,
0251                                  256.);
0252   meHitCharge_[3] =
0253       ibook.book1D("EtlHitChargeZposD2", "ETL DIGI hits charge (+Z, Second disk);Q_{DIGI} [ADC counts]", 100, 0., 256.);
0254 
0255   meHitTime_[0] = ibook.book1D("EtlHitTimeZnegD1",
0256                                "ETL DIGI hits ToA (-Z, Single(topo1D)/First(topo2D) disk);ToA_{DIGI} [TDC counts]",
0257                                100,
0258                                0.,
0259                                2000.);
0260   meHitTime_[1] =
0261       ibook.book1D("EtlHitTimeZnegD2", "ETL DIGI hits ToA (-Z, Second disk);ToA_{DIGI} [TDC counts]", 100, 0., 2000.);
0262   meHitTime_[2] = ibook.book1D("EtlHitTimeZposD1",
0263                                "ETL DIGI hits ToA (+Z, Single(topo1D)/First(topo2D) disk);ToA_{DIGI} [TDC counts]",
0264                                100,
0265                                0.,
0266                                2000.);
0267   meHitTime_[3] =
0268       ibook.book1D("EtlHitTimeZposD2", "ETL DIGI hits ToA (+Z, Second disk);ToA_{DIGI} [TDC counts]", 100, 0., 2000.);
0269 
0270   meHitToT_[0] = ibook.book1D("EtlHitToTZnegD1",
0271                               "ETL DIGI hits ToT (-Z, Single(topo1D)/First(topo2D) disk);ToT_{DIGI} [TDC counts]",
0272                               100,
0273                               0.,
0274                               500.);
0275   meHitToT_[1] =
0276       ibook.book1D("EtlHitToTZnegD2", "ETL DIGI hits ToT (-Z, Second disk);ToT_{DIGI} [TDC counts]", 100, 0., 500.);
0277   meHitToT_[2] = ibook.book1D("EtlHitToTZposD1",
0278                               "ETL DIGI hits ToT (+Z, Single(topo1D)/First(topo2D) disk);ToT_{DIGI} [TDC counts]",
0279                               100,
0280                               0.,
0281                               500.);
0282   meHitToT_[3] =
0283       ibook.book1D("EtlHitToTZposD2", "ETL DIGI hits ToT (+Z, Second disk);ToT_{DIGI} [TDC counts]", 100, 0., 500.);
0284 
0285   meOccupancy_[0] =
0286       ibook.book2D("EtlOccupancyZnegD1",
0287                    "ETL DIGI hits occupancy (-Z, Single(topo1D)/First(topo2D) disk);X_{DIGI} [cm];Y_{DIGI} [cm]",
0288                    135,
0289                    -135.,
0290                    135.,
0291                    135,
0292                    -135.,
0293                    135.);
0294   meOccupancy_[1] = ibook.book2D("EtlOccupancyZnegD2",
0295                                  "ETL DIGI hits occupancy (-Z, Second disk);X_{DIGI} [cm];Y_{DIGI} [cm]",
0296                                  135,
0297                                  -135.,
0298                                  135.,
0299                                  135,
0300                                  -135.,
0301                                  135.);
0302   meOccupancy_[2] =
0303       ibook.book2D("EtlOccupancyZposD1",
0304                    "ETL DIGI hits occupancy (+Z, Single(topo1D)/First(topo2D) disk);X_{DIGI} [cm];Y_{DIGI} [cm]",
0305                    135,
0306                    -135.,
0307                    135.,
0308                    135,
0309                    -135.,
0310                    135.);
0311   meOccupancy_[3] = ibook.book2D("EtlOccupancyZposD2",
0312                                  "ETL DIGI hits occupancy (+Z, Second disk);X_{DIGI} [cm];Y_{DIGI} [cm]",
0313                                  135,
0314                                  -135.,
0315                                  135.,
0316                                  135,
0317                                  -135.,
0318                                  135.);
0319   if (optionalPlots_) {
0320     meLocalOccupancy_[0] = ibook.book2D("EtlLocalOccupancyZneg",
0321                                         "ETL DIGI hits local occupancy (-Z);X_{DIGI} [cm];Y_{DIGI} [cm]",
0322                                         100,
0323                                         -2.2,
0324                                         2.2,
0325                                         50,
0326                                         -1.1,
0327                                         1.1);
0328     meLocalOccupancy_[1] = ibook.book2D("EtlLocalOccupancyZpos",
0329                                         "ETL DIGI hits local occupancy (+Z);X_{DIGI} [cm];Y_{DIGI} [cm]",
0330                                         100,
0331                                         -2.2,
0332                                         2.2,
0333                                         50,
0334                                         -1.1,
0335                                         1.1);
0336     meHitXlocal_[0] = ibook.book1D("EtlHitXlocalZneg", "ETL DIGI local X (-Z);X_{DIGI}^{LOC} [cm]", 100, -2.2, 2.2);
0337     meHitXlocal_[1] = ibook.book1D("EtlHitXlocalZpos", "ETL DIGI local X (+Z);X_{DIGI}^{LOC} [cm]", 100, -2.2, 2.2);
0338     meHitYlocal_[0] = ibook.book1D("EtlHitYlocalZneg", "ETL DIGI local Y (-Z);Y_{DIGI}^{LOC} [cm]", 50, -1.1, 1.1);
0339     meHitYlocal_[1] = ibook.book1D("EtlHitYlocalZpos", "ETL DIGI local Y (-Z);Y_{DIGI}^{LOC} [cm]", 50, -1.1, 1.1);
0340   }
0341   meHitX_[0] = ibook.book1D(
0342       "EtlHitXZnegD1", "ETL DIGI hits X (-Z, Single(topo1D)/First(topo2D) disk);X_{DIGI} [cm]", 100, -130., 130.);
0343   meHitX_[1] = ibook.book1D("EtlHitXZnegD2", "ETL DIGI hits X (-Z, Second disk);X_{DIGI} [cm]", 100, -130., 130.);
0344   meHitX_[2] = ibook.book1D(
0345       "EtlHitXZposD1", "ETL DIGI hits X (+Z, Single(topo1D)/First(topo2D) disk);X_{DIGI} [cm]", 100, -130., 130.);
0346   meHitX_[3] = ibook.book1D("EtlHitXZposD2", "ETL DIGI hits X (+Z, Second disk);X_{DIGI} [cm]", 100, -130., 130.);
0347   meHitY_[0] = ibook.book1D(
0348       "EtlHitYZnegD1", "ETL DIGI hits Y (-Z, Single(topo1D)/First(topo2D) disk);Y_{DIGI} [cm]", 100, -130., 130.);
0349   meHitY_[1] = ibook.book1D("EtlHitYZnegD2", "ETL DIGI hits Y (-Z, Second disk);Y_{DIGI} [cm]", 100, -130., 130.);
0350   meHitY_[2] = ibook.book1D(
0351       "EtlHitYZposD1", "ETL DIGI hits Y (+Z, Single(topo1D)/First(topo2D) disk);Y_{DIGI} [cm]", 100, -130., 130.);
0352   meHitY_[3] = ibook.book1D("EtlHitYZposD2", "ETL DIGI hits Y (+Z, Second disk);Y_{DIGI} [cm]", 100, -130., 130.);
0353   meHitZ_[0] = ibook.book1D(
0354       "EtlHitZZnegD1", "ETL DIGI hits Z (-Z, Single(topo1D)/First(topo2D) disk);Z_{DIGI} [cm]", 100, -302., -298.);
0355   meHitZ_[1] = ibook.book1D("EtlHitZZnegD2", "ETL DIGI hits Z (-Z, Second disk);Z_{DIGI} [cm]", 100, -304., -300.);
0356   meHitZ_[2] = ibook.book1D(
0357       "EtlHitZZposD1", "ETL DIGI hits Z (+Z, Single(topo1D)/First(topo2D) disk);Z_{DIGI} [cm]", 100, 298., 302.);
0358   meHitZ_[3] = ibook.book1D("EtlHitZZposD2", "ETL DIGI hits Z (+Z, Second disk);Z_{DIGI} [cm]", 100, 300., 304.);
0359 
0360   meHitPhi_[0] = ibook.book1D("EtlHitPhiZnegD1",
0361                               "ETL DIGI hits #phi (-Z, Single(topo1D)/First(topo2D) disk);#phi_{DIGI} [rad]",
0362                               100,
0363                               -3.15,
0364                               3.15);
0365   meHitPhi_[1] =
0366       ibook.book1D("EtlHitPhiZnegD2", "ETL DIGI hits #phi (-Z, Second disk);#phi_{DIGI} [rad]", 100, -3.15, 3.15);
0367   meHitPhi_[2] = ibook.book1D("EtlHitPhiZposD1",
0368                               "ETL DIGI hits #phi (+Z, Single(topo1D)/First(topo2D) disk);#phi_{DIGI} [rad]",
0369                               100,
0370                               -3.15,
0371                               3.15);
0372   meHitPhi_[3] =
0373       ibook.book1D("EtlHitPhiZposD2", "ETL DIGI hits #phi (+Z, Second disk);#phi_{DIGI} [rad]", 100, -3.15, 3.15);
0374   meHitEta_[0] = ibook.book1D(
0375       "EtlHitEtaZnegD1", "ETL DIGI hits #eta (-Z, Single(topo1D)/First(topo2D) disk);#eta_{DIGI}", 100, -3.2, -1.56);
0376   meHitEta_[1] = ibook.book1D("EtlHitEtaZnegD2", "ETL DIGI hits #eta (-Z, Second disk);#eta_{DIGI}", 100, -3.2, -1.56);
0377   meHitEta_[2] = ibook.book1D(
0378       "EtlHitEtaZposD1", "ETL DIGI hits #eta (+Z, Single(topo1D)/First(topo2D) disk);#eta_{DIGI}", 100, 1.56, 3.2);
0379   meHitEta_[3] = ibook.book1D("EtlHitEtaZposD2", "ETL DIGI hits #eta (+Z, Second disk);#eta_{DIGI}", 100, 1.56, 3.2);
0380   meHitTvsQ_[0] = ibook.bookProfile(
0381       "EtlHitTvsQZnegD1",
0382       "ETL DIGI ToA vs charge (-Z, Single(topo1D)/First(topo2D) disk);Q_{DIGI} [ADC counts];ToA_{DIGI} [TDC counts]",
0383       50,
0384       0.,
0385       256.,
0386       0.,
0387       1024.);
0388   meHitTvsQ_[1] =
0389       ibook.bookProfile("EtlHitTvsQZnegD2",
0390                         "ETL DIGI ToA vs charge (-Z, Second Disk);Q_{DIGI} [ADC counts];ToA_{DIGI} [TDC counts]",
0391                         50,
0392                         0.,
0393                         256.,
0394                         0.,
0395                         1024.);
0396   meHitTvsQ_[2] = ibook.bookProfile(
0397       "EtlHitTvsQZposD1",
0398       "ETL DIGI ToA vs charge (+Z, Single(topo1D)/First(topo2D) disk);Q_{DIGI} [ADC counts];ToA_{DIGI} [TDC counts]",
0399       50,
0400       0.,
0401       256.,
0402       0.,
0403       1024.);
0404   meHitTvsQ_[3] =
0405       ibook.bookProfile("EtlHitTvsQZposD2",
0406                         "ETL DIGI ToA vs charge (+Z, Second disk);Q_{DIGI} [ADC counts];ToA_{DIGI} [TDC counts]",
0407                         50,
0408                         0.,
0409                         256.,
0410                         0.,
0411                         1024.);
0412   meHitToTvsQ_[0] = ibook.bookProfile(
0413       "EtlHitToTvsQZnegD1",
0414       "ETL DIGI ToT vs charge (-Z, Single(topo1D)/First(topo2D) disk);Q_{DIGI} [ADC counts];ToT_{DIGI} [TDC counts]",
0415       50,
0416       0.,
0417       256.,
0418       0.,
0419       1024.);
0420   meHitToTvsQ_[1] =
0421       ibook.bookProfile("EtlHitToTvsQZnegD2",
0422                         "ETL DIGI ToT vs charge (-Z, Second Disk);Q_{DIGI} [ADC counts];ToT_{DIGI} [TDC counts]",
0423                         50,
0424                         0.,
0425                         256.,
0426                         0.,
0427                         1024.);
0428   meHitToTvsQ_[2] = ibook.bookProfile(
0429       "EtlHitToTvsQZposD1",
0430       "ETL DIGI ToT vs charge (+Z, Single(topo1D)/First(topo2D) disk);Q_{DIGI} [ADC counts];ToT_{DIGI} [TDC counts]",
0431       50,
0432       0.,
0433       256.,
0434       0.,
0435       1024.);
0436   meHitToTvsQ_[3] =
0437       ibook.bookProfile("EtlHitToTvsQZposD2",
0438                         "ETL DIGI ToT vs charge (+Z, Second disk);Q_{DIGI} [ADC counts];ToT_{DIGI} [TDC counts]",
0439                         50,
0440                         0.,
0441                         256.,
0442                         0.,
0443                         1024.);
0444   meHitQvsPhi_[0] = ibook.bookProfile(
0445       "EtlHitQvsPhiZnegD1",
0446       "ETL DIGI charge vs #phi (-Z, Single(topo1D)/First(topo2D) disk);#phi_{DIGI} [rad];Q_{DIGI} [ADC counts]",
0447       50,
0448       -3.15,
0449       3.15,
0450       0.,
0451       1024.);
0452   meHitQvsPhi_[1] =
0453       ibook.bookProfile("EtlHitQvsPhiZnegD2",
0454                         "ETL DIGI charge vs #phi (-Z, Second disk);#phi_{DIGI} [rad];Q_{DIGI} [ADC counts]",
0455                         50,
0456                         -3.15,
0457                         3.15,
0458                         0.,
0459                         1024.);
0460   meHitQvsPhi_[2] = ibook.bookProfile(
0461       "EtlHitQvsPhiZposD1",
0462       "ETL DIGI charge vs #phi (+Z, Single(topo1D)/First(topo2D) disk);#phi_{DIGI} [rad];Q_{DIGI} [ADC counts]",
0463       50,
0464       -3.15,
0465       3.15,
0466       0.,
0467       1024.);
0468   meHitQvsPhi_[3] =
0469       ibook.bookProfile("EtlHitQvsPhiZposD2",
0470                         "ETL DIGI charge vs #phi (+Z, Second disk);#phi_{DIGI} [rad];Q_{DIGI} [ADC counts]",
0471                         50,
0472                         -3.15,
0473                         3.15,
0474                         0.,
0475                         1024.);
0476   meHitQvsEta_[0] = ibook.bookProfile(
0477       "EtlHitQvsEtaZnegD1",
0478       "ETL DIGI charge vs #eta (-Z, Single(topo1D)/First(topo2D) disk);#eta_{DIGI};Q_{DIGI} [ADC counts]",
0479       50,
0480       -3.2,
0481       -1.56,
0482       0.,
0483       1024.);
0484   meHitQvsEta_[1] = ibook.bookProfile("EtlHitQvsEtaZnegD2",
0485                                       "ETL DIGI charge vs #eta (-Z, Second disk);#eta_{DIGI};Q_{DIGI} [ADC counts]",
0486                                       50,
0487                                       -3.2,
0488                                       -1.56,
0489                                       0.,
0490                                       1024.);
0491   meHitQvsEta_[2] = ibook.bookProfile(
0492       "EtlHitQvsEtaZposD1",
0493       "ETL DIGI charge vs #eta (+Z, Single(topo1D)/First(topo2D) disk);#eta_{DIGI};Q_{DIGI} [ADC counts]",
0494       50,
0495       1.56,
0496       3.2,
0497       0.,
0498       1024.);
0499   meHitQvsEta_[3] = ibook.bookProfile("EtlHitQvsEtaZposD2",
0500                                       "ETL DIGI charge vs #eta (+Z, Second disk);#eta_{DIGI};Q_{DIGI} [ADC counts]",
0501                                       50,
0502                                       1.56,
0503                                       3.2,
0504                                       0.,
0505                                       1024.);
0506   meHitTvsPhi_[0] = ibook.bookProfile(
0507       "EtlHitTvsPhiZnegD1",
0508       "ETL DIGI ToA vs #phi (-Z, Single(topo1D)/First(topo2D) disk);#phi_{DIGI} [rad];ToA_{DIGI} [TDC counts]",
0509       50,
0510       -3.15,
0511       3.15,
0512       0.,
0513       1024.);
0514   meHitTvsPhi_[1] =
0515       ibook.bookProfile("EtlHitTvsPhiZnegD2",
0516                         "ETL DIGI ToA vs #phi (-Z, Second disk);#phi_{DIGI} [rad];ToA_{DIGI} [TDC counts]",
0517                         50,
0518                         -3.15,
0519                         3.15,
0520                         0.,
0521                         1024.);
0522   meHitTvsPhi_[2] = ibook.bookProfile(
0523       "EtlHitTvsPhiZposD1",
0524       "ETL DIGI ToA vs #phi (+Z, Single(topo1D)/First(topo2D) disk);#phi_{DIGI} [rad];ToA_{DIGI} [TDC counts]",
0525       50,
0526       -3.15,
0527       3.15,
0528       0.,
0529       1024.);
0530   meHitTvsPhi_[3] =
0531       ibook.bookProfile("EtlHitTvsPhiZposD2",
0532                         "ETL DIGI ToA vs #phi (+Z, Second disk);#phi_{DIGI} [rad];ToA_{DIGI} [TDC counts]",
0533                         50,
0534                         -3.15,
0535                         3.15,
0536                         0.,
0537                         1024.);
0538   meHitTvsEta_[0] = ibook.bookProfile(
0539       "EtlHitTvsEtaZnegD1",
0540       "ETL DIGI ToA vs #eta (-Z, Single(topo1D)/First(topo2D) disk);#eta_{DIGI};ToA_{DIGI} [TDC counts]",
0541       50,
0542       -3.2,
0543       -1.56,
0544       0.,
0545       1024.);
0546   meHitTvsEta_[1] = ibook.bookProfile("EtlHitTvsEtaZnegD2",
0547                                       "ETL DIGI ToA vs #eta (-Z, Second disk);#eta_{DIGI};ToA_{DIGI} [TDC counts]",
0548                                       50,
0549                                       -3.2,
0550                                       -1.56,
0551                                       0.,
0552                                       1024.);
0553   meHitTvsEta_[2] = ibook.bookProfile(
0554       "EtlHitTvsEtaZposD1",
0555       "ETL DIGI ToA vs #eta (+Z, Single(topo1D)/First(topo2D) disk);#eta_{DIGI};ToA_{DIGI} [TDC counts]",
0556       50,
0557       1.56,
0558       3.2,
0559       0.,
0560       1024.);
0561   meHitTvsEta_[3] = ibook.bookProfile("EtlHitTvsEtaZposD2",
0562                                       "ETL DIGI ToA vs #eta (+Z, Second disk);#eta_{DIGI};ToA_{DIGI} [TDC counts]",
0563                                       50,
0564                                       1.56,
0565                                       3.2,
0566                                       0.,
0567                                       1024.);
0568 }
0569 
0570 // ------------ method fills 'descriptions' with the allowed parameters for the module  ------------
0571 void EtlDigiHitsValidation::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0572   edm::ParameterSetDescription desc;
0573 
0574   desc.add<std::string>("folder", "MTD/ETL/DigiHits");
0575   desc.add<edm::InputTag>("inputTag", edm::InputTag("mix", "FTLEndcap"));
0576   desc.add<bool>("optionalPlots", false);
0577 
0578   descriptions.add("etlDigiHitsDefaultValid", desc);
0579 }
0580 
0581 DEFINE_FWK_MODULE(EtlDigiHitsValidation);