Back to home page

Project CMSSW displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // Package:    Validation/MtdValidation
0004 // Class:      EtlSimHitsValidation
0005 //
0006 /**\class EtlSimHitsValidation EtlSimHitsValidation.cc Validation/MtdValidation/plugins/EtlSimHitsValidation.cc
0007 
0008  Description: ETL SIM 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/Math/interface/GeantUnits.h"
0026 #include "DataFormats/ForwardDetId/interface/ETLDetId.h"
0027 
0028 #include "SimDataFormats/CrossingFrame/interface/CrossingFrame.h"
0029 #include "SimDataFormats/CrossingFrame/interface/MixCollection.h"
0030 #include "SimDataFormats/TrackingHit/interface/PSimHit.h"
0031 
0032 #include "SimFastTiming/FastTimingCommon/interface/MTDDigitizerTypes.h"
0033 #include "Geometry/MTDGeometryBuilder/interface/MTDGeomUtil.h"
0034 
0035 #include "Geometry/Records/interface/MTDDigiGeometryRecord.h"
0036 #include "Geometry/MTDGeometryBuilder/interface/MTDGeometry.h"
0037 #include "Geometry/MTDNumberingBuilder/interface/MTDTopology.h"
0038 #include "Geometry/MTDCommonData/interface/MTDTopologyMode.h"
0039 
0040 #include "MTDHit.h"
0041 
0042 class EtlSimHitsValidation : public DQMEDAnalyzer {
0043 public:
0044   explicit EtlSimHitsValidation(const edm::ParameterSet&);
0045   ~EtlSimHitsValidation() override;
0046 
0047   static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0048 
0049 private:
0050   void bookHistograms(DQMStore::IBooker&, edm::Run const&, edm::EventSetup const&) override;
0051 
0052   void analyze(const edm::Event&, const edm::EventSetup&) override;
0053 
0054   // ------------ member data ------------
0055 
0056   const std::string folder_;
0057   const float hitMinEnergy2Dis_;
0058 
0059   edm::EDGetTokenT<CrossingFrame<PSimHit>> etlSimHitsToken_;
0060 
0061   edm::ESGetToken<MTDGeometry, MTDDigiGeometryRecord> mtdgeoToken_;
0062   edm::ESGetToken<MTDTopology, MTDTopologyRcd> mtdtopoToken_;
0063 
0064   // --- histograms declaration
0065 
0066   MonitorElement* meNhits_[4];
0067   MonitorElement* meNtrkPerCell_[4];
0068 
0069   MonitorElement* meHitEnergy_[4];
0070   MonitorElement* meHitTime_[4];
0071 
0072   MonitorElement* meHitXlocal_[4];
0073   MonitorElement* meHitYlocal_[4];
0074   MonitorElement* meHitZlocal_[4];
0075 
0076   MonitorElement* meOccupancy_[4];
0077 
0078   MonitorElement* meHitX_[4];
0079   MonitorElement* meHitY_[4];
0080   MonitorElement* meHitZ_[4];
0081   MonitorElement* meHitPhi_[4];
0082   MonitorElement* meHitEta_[4];
0083 
0084   MonitorElement* meHitTvsE_[4];
0085   MonitorElement* meHitEvsPhi_[4];
0086   MonitorElement* meHitEvsEta_[4];
0087   MonitorElement* meHitTvsPhi_[4];
0088   MonitorElement* meHitTvsEta_[4];
0089 };
0090 
0091 // ------------ constructor and destructor --------------
0092 EtlSimHitsValidation::EtlSimHitsValidation(const edm::ParameterSet& iConfig)
0093     : folder_(iConfig.getParameter<std::string>("folder")),
0094       hitMinEnergy2Dis_(iConfig.getParameter<double>("hitMinimumEnergy2Dis")) {
0095   etlSimHitsToken_ = consumes<CrossingFrame<PSimHit>>(iConfig.getParameter<edm::InputTag>("inputTag"));
0096   mtdgeoToken_ = esConsumes<MTDGeometry, MTDDigiGeometryRecord>();
0097   mtdtopoToken_ = esConsumes<MTDTopology, MTDTopologyRcd>();
0098 }
0099 
0100 EtlSimHitsValidation::~EtlSimHitsValidation() {}
0101 
0102 // ------------ method called for each event  ------------
0103 void EtlSimHitsValidation::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
0104   using namespace edm;
0105   using namespace geant_units::operators;
0106 
0107   using namespace mtd;
0108   using namespace std;
0109 
0110   auto geometryHandle = iSetup.getTransientHandle(mtdgeoToken_);
0111   const MTDGeometry* geom = geometryHandle.product();
0112 
0113   MTDGeomUtil geomUtil;
0114   geomUtil.setGeometry(geom);
0115 
0116   auto etlSimHitsHandle = makeValid(iEvent.getHandle(etlSimHitsToken_));
0117   MixCollection<PSimHit> etlSimHits(etlSimHitsHandle.product());
0118 
0119   std::unordered_map<mtd_digitizer::MTDCellId, MTDHit> m_etlHits[4];
0120   std::unordered_map<mtd_digitizer::MTDCellId, std::set<int>> m_etlTrkPerCell[4];
0121 
0122   // --- Loop over the ETL SIM hits
0123 
0124   int idet = 999;
0125 
0126   size_t index(0);
0127 
0128   for (auto const& simHit : etlSimHits) {
0129     index++;
0130     LogDebug("EtlSimHitsValidation") << "SimHit # " << index << " detId " << simHit.detUnitId() << " ene "
0131                                      << simHit.energyLoss() << " tof " << simHit.tof() << " tId " << simHit.trackId();
0132 
0133     // --- Use only hits compatible with the in-time bunch-crossing
0134     if (simHit.tof() < 0 || simHit.tof() > 25.)
0135       continue;
0136 
0137     ETLDetId id = simHit.detUnitId();
0138     if ((id.zside() == -1) && (id.nDisc() == 1)) {
0139       idet = 0;
0140     } else if ((id.zside() == -1) && (id.nDisc() == 2)) {
0141       idet = 1;
0142     } else if ((id.zside() == 1) && (id.nDisc() == 1)) {
0143       idet = 2;
0144     } else if ((id.zside() == 1) && (id.nDisc() == 2)) {
0145       idet = 3;
0146     } else {
0147       edm::LogWarning("EtlSimHitsValidation") << "Unknown ETL DetId configuration: " << id;
0148       continue;
0149     }
0150 
0151     const auto& position = simHit.localPosition();
0152 
0153     LocalPoint simscaled(convertMmToCm(position.x()), convertMmToCm(position.y()), convertMmToCm(position.z()));
0154     std::pair<uint8_t, uint8_t> pixel = geomUtil.pixelInModule(id, simscaled);
0155 
0156     mtd_digitizer::MTDCellId pixelId(id.rawId(), pixel.first, pixel.second);
0157     m_etlTrkPerCell[idet][pixelId].insert(simHit.trackId());
0158     auto simHitIt = m_etlHits[idet].emplace(pixelId, MTDHit()).first;
0159 
0160     // --- Accumulate the energy (in MeV) of SIM hits in the same detector cell
0161     (simHitIt->second).energy += convertUnitsTo(0.001_MeV, simHit.energyLoss());
0162 
0163     // --- Get the time of the first SIM hit in the cell
0164     if ((simHitIt->second).time == 0 || simHit.tof() < (simHitIt->second).time) {
0165       (simHitIt->second).time = simHit.tof();
0166 
0167       auto hit_pos = simHit.localPosition();
0168       (simHitIt->second).x = hit_pos.x();
0169       (simHitIt->second).y = hit_pos.y();
0170       (simHitIt->second).z = hit_pos.z();
0171     }
0172     LogDebug("EtlSimHitsValidation") << "Registered in idet " << idet;
0173 
0174   }  // simHit loop
0175 
0176   // ==============================================================================
0177   //  Histogram filling
0178   // ==============================================================================
0179 
0180   for (int idet = 0; idet < 4; ++idet) {  //two disks per side
0181     meNhits_[idet]->Fill(m_etlHits[idet].size());
0182     LogDebug("EtlSimHitsValidation") << "idet " << idet << " #hits " << m_etlHits[idet].size();
0183 
0184     for (auto const& hit : m_etlTrkPerCell[idet]) {
0185       meNtrkPerCell_[idet]->Fill((hit.second).size());
0186     }
0187 
0188     for (auto const& hit : m_etlHits[idet]) {
0189       double weight = 1.0;
0190       if ((hit.second).energy < hitMinEnergy2Dis_)
0191         continue;
0192       // --- Get the SIM hit global position
0193       ETLDetId detId;
0194       detId = hit.first.detid_;
0195       DetId geoId = detId.geographicalId();
0196       const MTDGeomDet* thedet = geom->idToDet(geoId);
0197       if (thedet == nullptr)
0198         throw cms::Exception("EtlSimHitsValidation") << "GeographicalID: " << std::hex << geoId.rawId() << " ("
0199                                                      << detId.rawId() << ") is invalid!" << std::dec << std::endl;
0200 
0201       Local3DPoint local_point(
0202           convertMmToCm((hit.second).x), convertMmToCm((hit.second).y), convertMmToCm((hit.second).z));
0203       const auto& global_point = thedet->toGlobal(local_point);
0204 
0205       if (detId.discSide() == 1) {
0206         weight = -weight;
0207       }
0208 
0209       // --- Fill the histograms
0210 
0211       meHitEnergy_[idet]->Fill((hit.second).energy);
0212       meHitTime_[idet]->Fill((hit.second).time);
0213       meHitXlocal_[idet]->Fill((hit.second).x);
0214       meHitYlocal_[idet]->Fill((hit.second).y);
0215       meHitZlocal_[idet]->Fill((hit.second).z);
0216       meOccupancy_[idet]->Fill(global_point.x(), global_point.y(), weight);
0217       meHitX_[idet]->Fill(global_point.x());
0218       meHitY_[idet]->Fill(global_point.y());
0219       meHitZ_[idet]->Fill(global_point.z());
0220       meHitPhi_[idet]->Fill(global_point.phi());
0221       meHitEta_[idet]->Fill(global_point.eta());
0222       meHitTvsE_[idet]->Fill((hit.second).energy, (hit.second).time);
0223       meHitEvsPhi_[idet]->Fill(global_point.phi(), (hit.second).energy);
0224       meHitEvsEta_[idet]->Fill(global_point.eta(), (hit.second).energy);
0225       meHitTvsPhi_[idet]->Fill(global_point.phi(), (hit.second).time);
0226       meHitTvsEta_[idet]->Fill(global_point.eta(), (hit.second).time);
0227 
0228     }  // hit loop
0229 
0230   }  // idet loop
0231 }
0232 
0233 // ------------ method for histogram booking ------------
0234 void EtlSimHitsValidation::bookHistograms(DQMStore::IBooker& ibook,
0235                                           edm::Run const& run,
0236                                           edm::EventSetup const& iSetup) {
0237   ibook.setCurrentFolder(folder_);
0238 
0239   // --- histograms booking
0240 
0241   meNhits_[0] = ibook.book1D("EtlNhitsZnegD1",
0242                              "Number of ETL cells with SIM hits (-Z, Single(topo1D)/First(topo2D) disk);N_{ETL cells}",
0243                              100,
0244                              0.,
0245                              5000.);
0246   meNhits_[1] = ibook.book1D(
0247       "EtlNhitsZnegD2", "Number of ETL cells with SIM hits (-Z, Second disk);N_{ETL cells}", 100, 0., 5000.);
0248   meNhits_[2] = ibook.book1D("EtlNhitsZposD1",
0249                              "Number of ETL cells with SIM hits (+Z, Single(topo1D)/First(topo2D) disk);N_{ETL cells}",
0250                              100,
0251                              0.,
0252                              5000.);
0253   meNhits_[3] = ibook.book1D(
0254       "EtlNhitsZposD2", "Number of ETL cells with SIM hits (+Z, Second Disk);N_{ETL cells}", 100, 0., 5000.);
0255   meNtrkPerCell_[0] = ibook.book1D("EtlNtrkPerCellZnegD1",
0256                                    "Number of tracks per ETL sensor (-Z, Single(topo1D)/First(topo2D) disk);N_{trk}",
0257                                    10,
0258                                    0.,
0259                                    10.);
0260   meNtrkPerCell_[1] =
0261       ibook.book1D("EtlNtrkPerCellZnegD2", "Number of tracks per ETL sensor (-Z, Second disk);N_{trk}", 10, 0., 10.);
0262   meNtrkPerCell_[2] = ibook.book1D("EtlNtrkPerCellZposD1",
0263                                    "Number of tracks per ETL sensor (+Z, Single(topo1D)/First(topo2D) disk);N_{trk}",
0264                                    10,
0265                                    0.,
0266                                    10.);
0267   meNtrkPerCell_[3] =
0268       ibook.book1D("EtlNtrkPerCellZposD2", "Number of tracks per ETL sensor (+Z, Second disk);N_{trk}", 10, 0., 10.);
0269   meHitEnergy_[0] = ibook.book1D(
0270       "EtlHitEnergyZnegD1", "ETL SIM hits energy (-Z, Single(topo1D)/First(topo2D) disk);E_{SIM} [MeV]", 100, 0., 1.5);
0271   meHitEnergy_[1] =
0272       ibook.book1D("EtlHitEnergyZnegD2", "ETL SIM hits energy (-Z, Second disk);E_{SIM} [MeV]", 100, 0., 1.5);
0273   meHitEnergy_[2] = ibook.book1D(
0274       "EtlHitEnergyZposD1", "ETL SIM hits energy (+Z, Single(topo1D)/First(topo2D) disk);E_{SIM} [MeV]", 100, 0., 1.5);
0275   meHitEnergy_[3] =
0276       ibook.book1D("EtlHitEnergyZposD2", "ETL SIM hits energy (+Z, Second disk);E_{SIM} [MeV]", 100, 0., 1.5);
0277   meHitTime_[0] = ibook.book1D(
0278       "EtlHitTimeZnegD1", "ETL SIM hits ToA (-Z, Single(topo1D)/First(topo2D) disk);ToA_{SIM} [ns]", 100, 0., 25.);
0279   meHitTime_[1] = ibook.book1D("EtlHitTimeZnegD2", "ETL SIM hits ToA (-Z, Second disk);ToA_{SIM} [ns]", 100, 0., 25.);
0280   meHitTime_[2] = ibook.book1D(
0281       "EtlHitTimeZposD1", "ETL SIM hits ToA (+Z, Single(topo1D)/First(topo2D) disk);ToA_{SIM} [ns]", 100, 0., 25.);
0282   meHitTime_[3] = ibook.book1D("EtlHitTimeZposD2", "ETL SIM hits ToA (+Z, Second disk);ToA_{SIM} [ns]", 100, 0., 25.);
0283 
0284   meHitXlocal_[0] = ibook.book1D("EtlHitXlocalZnegD1",
0285                                  "ETL SIM local X (-Z, Single(topo1D)/First(topo2D) disk);X_{SIM}^{LOC} [mm]",
0286                                  100,
0287                                  -25.,
0288                                  25.);
0289   meHitXlocal_[1] =
0290       ibook.book1D("EtlHitXlocalZnegD2", "ETL SIM local X (-Z, Second disk);X_{SIM}^{LOC} [mm]", 100, -25., 25.);
0291   meHitXlocal_[2] = ibook.book1D("EtlHitXlocalZposD1",
0292                                  "ETL SIM local X (+Z, Single(topo1D)/First(topo2D) disk);X_{SIM}^{LOC} [mm]",
0293                                  100,
0294                                  -25.,
0295                                  25.);
0296   meHitXlocal_[3] =
0297       ibook.book1D("EtlHitXlocalZposD2", "ETL SIM local X (+Z, Second disk);X_{SIM}^{LOC} [mm]", 100, -25., 25.);
0298 
0299   meHitYlocal_[0] = ibook.book1D("EtlHitYlocalZnegD1",
0300                                  "ETL SIM local Y (-Z, Single(topo1D)/First(topo2D) disk);Y_{SIM}^{LOC} [mm]",
0301                                  100,
0302                                  -48.,
0303                                  48.);
0304   meHitYlocal_[1] =
0305       ibook.book1D("EtlHitYlocalZnegD2", "ETL SIM local Y (-Z, Second Disk);Y_{SIM}^{LOC} [mm]", 100, -48., 48.);
0306   meHitYlocal_[2] = ibook.book1D("EtlHitYlocalZposD1",
0307                                  "ETL SIM local Y (+Z, Single(topo1D)/First(topo2D) disk);Y_{SIM}^{LOC} [mm]",
0308                                  100,
0309                                  -48.,
0310                                  48.);
0311   meHitYlocal_[3] =
0312       ibook.book1D("EtlHitYlocalZposD2", "ETL SIM local Y (+Z, Second disk);Y_{SIM}^{LOC} [mm]", 100, -48., 48.);
0313   meHitZlocal_[0] = ibook.book1D("EtlHitZlocalZnegD1",
0314                                  "ETL SIM local Z (-Z, Single(topo1D)/First(topo2D) disk);Z_{SIM}^{LOC} [mm]",
0315                                  80,
0316                                  -0.16,
0317                                  0.16);
0318   meHitZlocal_[1] =
0319       ibook.book1D("EtlHitZlocalZnegD2", "ETL SIM local Z (-Z, Second disk);Z_{SIM}^{LOC} [mm]", 80, -0.16, 0.16);
0320   meHitZlocal_[2] = ibook.book1D("EtlHitZlocalZposD1",
0321                                  "ETL SIM local Z (+Z, Single(topo1D)/First(topo2D) disk);Z_{SIM}^{LOC} [mm]",
0322                                  80,
0323                                  -0.16,
0324                                  0.16);
0325   meHitZlocal_[3] =
0326       ibook.book1D("EtlHitZlocalZposD2", "ETL SIM local Z (+Z, Second disk);Z_{SIM}^{LOC} [mm]", 80, -0.16, 0.16);
0327 
0328   meOccupancy_[0] =
0329       ibook.book2D("EtlOccupancyZnegD1",
0330                    "ETL SIM hits occupancy (-Z, Single(topo1D)/First(topo2D) disk);X_{SIM} [cm];Y_{SIM} [cm]",
0331                    135,
0332                    -135.,
0333                    135.,
0334                    135,
0335                    -135.,
0336                    135.);
0337   meOccupancy_[1] = ibook.book2D("EtlOccupancyZnegD2",
0338                                  "ETL SIM hits occupancy (-Z, Second disk);X_{SIM} [cm];Y_{SIM} [cm]",
0339                                  135,
0340                                  -135.,
0341                                  135.,
0342                                  135,
0343                                  -135.,
0344                                  135.);
0345   meOccupancy_[2] =
0346       ibook.book2D("EtlOccupancyZposD1",
0347                    "ETL SIM hits occupancy (+Z, Single(topo1D)/First(topo2D) disk);X_{SIM} [cm];Y_{SIM} [cm]",
0348                    135,
0349                    -135.,
0350                    135.,
0351                    135,
0352                    -135.,
0353                    135.);
0354   meOccupancy_[3] = ibook.book2D("EtlOccupancyZposD2",
0355                                  "ETL SIM hits occupancy (+Z, Second disk);X_{SIM} [cm];Y_{SIM} [cm]",
0356                                  135,
0357                                  -135.,
0358                                  135.,
0359                                  135,
0360                                  -135.,
0361                                  135.);
0362 
0363   meHitX_[0] = ibook.book1D(
0364       "EtlHitXZnegD1", "ETL SIM hits X (+Z, Single(topo1D)/First(topo2D) disk);X_{SIM} [cm]", 100, -130., 130.);
0365   meHitX_[1] = ibook.book1D("EtlHitXZnegD2", "ETL SIM hits X (-Z, Second disk);X_{SIM} [cm]", 100, -130., 130.);
0366   meHitX_[2] = ibook.book1D(
0367       "EtlHitXZposD1", "ETL SIM hits X (+Z, Single(topo1D)/First(topo2D) disk);X_{SIM} [cm]", 100, -130., 130.);
0368   meHitX_[3] = ibook.book1D("EtlHitXZposD2", "ETL SIM hits X (+Z, Second disk);X_{SIM} [cm]", 100, -130., 130.);
0369   meHitY_[0] = ibook.book1D(
0370       "EtlHitYZnegD1", "ETL SIM hits Y (-Z, Single(topo1D)/First(topo2D) disk);Y_{SIM} [cm]", 100, -130., 130.);
0371   meHitY_[1] = ibook.book1D("EtlHitYZnegD2", "ETL SIM hits Y (-Z, Second disk);Y_{SIM} [cm]", 100, -130., 130.);
0372   meHitY_[2] = ibook.book1D(
0373       "EtlHitYZposD1", "ETL SIM hits Y (+Z, Single(topo1D)/First(topo2D) disk);Y_{SIM} [cm]", 100, -130., 130.);
0374   meHitY_[3] = ibook.book1D("EtlHitYZposD2", "ETL SIM hits Y (+Z, Second disk);Y_{SIM} [cm]", 100, -130., 130.);
0375   meHitZ_[0] = ibook.book1D(
0376       "EtlHitZZnegD1", "ETL SIM hits Z (-Z, Single(topo1D)/First(topo2D) disk);Z_{SIM} [cm]", 100, -302., -298.);
0377   meHitZ_[1] = ibook.book1D("EtlHitZZnegD2", "ETL SIM hits Z (-Z, Second disk);Z_{SIM} [cm]", 100, -304., -300.);
0378   meHitZ_[2] = ibook.book1D(
0379       "EtlHitZZposD1", "ETL SIM hits Z (+Z, Single(topo1D)/First(topo2D) disk);Z_{SIM} [cm]", 100, 298., 302.);
0380   meHitZ_[3] = ibook.book1D("EtlHitZZposD2", "ETL SIM hits Z (+Z, Second disk);Z_{SIM} [cm]", 100, 300., 304.);
0381 
0382   meHitPhi_[0] = ibook.book1D(
0383       "EtlHitPhiZnegD1", "ETL SIM hits #phi (-Z, Single(topo1D)/First(topo2D) disk);#phi_{SIM} [rad]", 100, -3.15, 3.15);
0384   meHitPhi_[1] =
0385       ibook.book1D("EtlHitPhiZnegD2", "ETL SIM hits #phi (-Z, Second disk);#phi_{SIM} [rad]", 100, -3.15, 3.15);
0386   meHitPhi_[2] = ibook.book1D(
0387       "EtlHitPhiZposD1", "ETL SIM hits #phi (+Z, Single(topo1D)/First(topo2D) disk);#phi_{SIM} [rad]", 100, -3.15, 3.15);
0388   meHitPhi_[3] =
0389       ibook.book1D("EtlHitPhiZposD2", "ETL SIM hits #phi (+Z, Second disk);#phi_{SIM} [rad]", 100, -3.15, 3.15);
0390   meHitEta_[0] = ibook.book1D(
0391       "EtlHitEtaZnegD1", "ETL SIM hits #eta (-Z, Single(topo1D)/First(topo2D) disk);#eta_{SIM}", 100, -3.2, -1.56);
0392   meHitEta_[1] = ibook.book1D("EtlHitEtaZnegD2", "ETL SIM hits #eta (-Z, Second disk);#eta_{SIM}", 100, -3.2, -1.56);
0393   meHitEta_[2] = ibook.book1D(
0394       "EtlHitEtaZposD1", "ETL SIM hits #eta (+Z, Single(topo1D)/First(topo2D) disk);#eta_{SIM}", 100, 1.56, 3.2);
0395   meHitEta_[3] = ibook.book1D("EtlHitEtaZposD2", "ETL SIM hits #eta (+Z, Second disk);#eta_{SIM}", 100, 1.56, 3.2);
0396 
0397   meHitTvsE_[0] =
0398       ibook.bookProfile("EtlHitTvsEZnegD1",
0399                         "ETL SIM time vs energy (-Z, Single(topo1D)/First(topo2D) disk);E_{SIM} [MeV];T_{SIM} [ns]",
0400                         50,
0401                         0.,
0402                         2.,
0403                         0.,
0404                         100.);
0405   meHitTvsE_[1] = ibook.bookProfile(
0406       "EtlHitTvsEZnegD2", "ETL SIM time vs energy (-Z, Second disk);E_{SIM} [MeV];T_{SIM} [ns]", 50, 0., 2., 0., 100.);
0407   meHitTvsE_[2] =
0408       ibook.bookProfile("EtlHitTvsEZposD1",
0409                         "ETL SIM time vs energy (+Z, Single(topo1D)/First(topo2D) disk);E_{SIM} [MeV];T_{SIM} [ns]",
0410                         50,
0411                         0.,
0412                         2.,
0413                         0.,
0414                         100.);
0415   meHitTvsE_[3] = ibook.bookProfile(
0416       "EtlHitTvsEZposD2", "ETL SIM time vs energy (+Z, Second disk);E_{SIM} [MeV];T_{SIM} [ns]", 50, 0., 2., 0., 100.);
0417   meHitEvsPhi_[0] =
0418       ibook.bookProfile("EtlHitEvsPhiZnegD1",
0419                         "ETL SIM energy vs #phi (-Z, Single(topo1D)/First(topo2D) disk);#phi_{SIM} [rad];E_{SIM} [MeV]",
0420                         50,
0421                         -3.15,
0422                         3.15,
0423                         0.,
0424                         100.);
0425   meHitEvsPhi_[1] = ibook.bookProfile("EtlHitEvsPhiZnegD2",
0426                                       "ETL SIM energy vs #phi (-Z, Second disk);#phi_{SIM} [rad];E_{SIM} [MeV]",
0427                                       50,
0428                                       -3.15,
0429                                       3.15,
0430                                       0.,
0431                                       100.);
0432   meHitEvsPhi_[2] =
0433       ibook.bookProfile("EtlHitEvsPhiZposD1",
0434                         "ETL SIM energy vs #phi (+Z, Single(topo1D)/First(topo2D) disk);#phi_{SIM} [rad];E_{SIM} [MeV]",
0435                         50,
0436                         -3.15,
0437                         3.15,
0438                         0.,
0439                         100.);
0440   meHitEvsPhi_[3] = ibook.bookProfile("EtlHitEvsPhiZposD2",
0441                                       "ETL SIM energy vs #phi (+Z, Second disk);#phi_{SIM} [rad];E_{SIM} [MeV]",
0442                                       50,
0443                                       -3.15,
0444                                       3.15,
0445                                       0.,
0446                                       100.);
0447   meHitEvsEta_[0] =
0448       ibook.bookProfile("EtlHitEvsEtaZnegD1",
0449                         "ETL SIM energy vs #eta (-Z, Single(topo1D)/First(topo2D) disk);#eta_{SIM};E_{SIM} [MeV]",
0450                         50,
0451                         -3.2,
0452                         -1.56,
0453                         0.,
0454                         100.);
0455   meHitEvsEta_[1] = ibook.bookProfile("EtlHitEvsEtaZnegD2",
0456                                       "ETL SIM energy vs #eta (-Z, Second disk);#eta_{SIM};E_{SIM} [MeV]",
0457                                       50,
0458                                       -3.2,
0459                                       -1.56,
0460                                       0.,
0461                                       100.);
0462   meHitEvsEta_[2] =
0463       ibook.bookProfile("EtlHitEvsEtaZposD1",
0464                         "ETL SIM energy vs #eta (+Z, Single(topo1D)/First(topo2D) disk);#eta_{SIM};E_{SIM} [MeV]",
0465                         50,
0466                         1.56,
0467                         3.2,
0468                         0.,
0469                         100.);
0470   meHitEvsEta_[3] = ibook.bookProfile("EtlHitEvsEtaZposD2",
0471                                       "ETL SIM energy vs #eta (+Z, Second disk);#eta_{SIM};E_{SIM} [MeV]",
0472                                       50,
0473                                       1.56,
0474                                       3.2,
0475                                       0.,
0476                                       100.);
0477   meHitTvsPhi_[0] =
0478       ibook.bookProfile("EtlHitTvsPhiZnegD1",
0479                         "ETL SIM time vs #phi (-Z, Single(topo1D)/First(topo2D) disk);#phi_{SIM} [rad];T_{SIM} [ns]",
0480                         50,
0481                         -3.15,
0482                         3.15,
0483                         0.,
0484                         100.);
0485   meHitTvsPhi_[1] = ibook.bookProfile("EtlHitTvsPhiZnegD2",
0486                                       "ETL SIM time vs #phi (-Z, Second disk);#phi_{SIM} [rad];T_{SIM} [ns]",
0487                                       50,
0488                                       -3.15,
0489                                       3.15,
0490                                       0.,
0491                                       100.);
0492   meHitTvsPhi_[2] =
0493       ibook.bookProfile("EtlHitTvsPhiZposD1",
0494                         "ETL SIM time vs #phi (+Z, Single(topo1D)/First(topo2D) disk);#phi_{SIM} [rad];T_{SIM} [ns]",
0495                         50,
0496                         -3.15,
0497                         3.15,
0498                         0.,
0499                         100.);
0500   meHitTvsPhi_[3] = ibook.bookProfile("EtlHitTvsPhiZposD2",
0501                                       "ETL SIM time vs #phi (+Z, Second disk);#phi_{SIM} [rad];T_{SIM} [ns]",
0502                                       50,
0503                                       -3.15,
0504                                       3.15,
0505                                       0.,
0506                                       100.);
0507   meHitTvsEta_[0] =
0508       ibook.bookProfile("EtlHitTvsEtaZnegD1",
0509                         "ETL SIM time vs #eta (-Z, Single(topo1D)/First(topo2D) disk);#eta_{SIM};T_{SIM} [ns]",
0510                         50,
0511                         -3.2,
0512                         -1.56,
0513                         0.,
0514                         100.);
0515   meHitTvsEta_[1] = ibook.bookProfile(
0516       "EtlHitTvsEtaZnegD2", "ETL SIM time vs #eta (-Z, Second disk);#eta_{SIM};T_{SIM} [ns]", 50, -3.2, -1.56, 0., 100.);
0517   meHitTvsEta_[2] =
0518       ibook.bookProfile("EtlHitTvsEtaZposD1",
0519                         "ETL SIM time vs #eta (+Z, Single(topo1D)/First(topo2D) disk);#eta_{SIM};T_{SIM} [ns]",
0520                         50,
0521                         1.56,
0522                         3.2,
0523                         0.,
0524                         100.);
0525   meHitTvsEta_[3] = ibook.bookProfile(
0526       "EtlHitTvsEtaZposD2", "ETL SIM time vs #eta (+Z, Second disk);#eta_{SIM};T_{SIM} [ns]", 50, 1.56, 3.2, 0., 100.);
0527 }
0528 
0529 // ------------ method fills 'descriptions' with the allowed parameters for the module  ------------
0530 void EtlSimHitsValidation::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0531   edm::ParameterSetDescription desc;
0532 
0533   desc.add<std::string>("folder", "MTD/ETL/SimHits");
0534   desc.add<edm::InputTag>("inputTag", edm::InputTag("mix", "g4SimHitsFastTimerHitsEndcap"));
0535   desc.add<double>("hitMinimumEnergy2Dis", 0.001);  // [MeV]
0536 
0537   descriptions.add("etlSimHitsValid", desc);
0538 }
0539 
0540 DEFINE_FWK_MODULE(EtlSimHitsValidation);