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