Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-05-20 22:40:15

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