Back to home page

Project CMSSW displayed by LXR

 
 

    


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

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