File indexing completed on 2024-04-06 12:30:55
0001 #ifndef __SimTracker_SiPhase2Digitizer_PixelTestBeamValidation_h
0002 #define __SimTracker_SiPhase2Digitizer_PixelTestBeamValidation_h
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #include "DQMServices/Core/interface/DQMStore.h"
0021 #include "DQMServices/Core/interface/DQMEDAnalyzer.h"
0022
0023
0024 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0025 #include "FWCore/Framework/interface/Event.h"
0026 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0027
0028
0029 #include "DataFormats/Common/interface/DetSetVector.h"
0030 #include "DataFormats/SiPixelDigi/interface/PixelDigi.h"
0031 #include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h"
0032 #include "SimDataFormats/TrackerDigiSimLink/interface/PixelDigiSimLink.h"
0033 #include "SimDataFormats/Track/interface/SimTrackContainer.h"
0034 #include "DataFormats/DetId/interface/DetId.h"
0035
0036 #include "DataFormats/TrackerCommon/interface/TrackerTopology.h"
0037 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
0038 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
0039
0040
0041 #include <string>
0042 #include <set>
0043 #include <vector>
0044 #include <map>
0045 #include <functional>
0046 #include <cstdint>
0047
0048
0049 class GeomDet;
0050 class PSimHit;
0051 class PixelGeomDetUnit;
0052
0053 class PixelTestBeamValidation : public DQMEDAnalyzer {
0054 public:
0055 explicit PixelTestBeamValidation(const edm::ParameterSet &);
0056 ~PixelTestBeamValidation() override;
0057
0058 void dqmBeginRun(const edm::Run &iRun, const edm::EventSetup &iSetup) override;
0059 void bookHistograms(DQMStore::IBooker &ibooker, edm::Run const &iRun, edm::EventSetup const &iSetup) override;
0060 void analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) override;
0061
0062 private:
0063
0064 bool isPixelSystem_(const GeomDet *detunit) const;
0065
0066
0067
0068 int meUnit_(bool isBarrel, int layer, int side) const;
0069
0070
0071 const PixelDigi &get_digi_from_channel_(int ch, const edm::DetSetVector<PixelDigi>::const_iterator &itdigis);
0072
0073
0074 const SimTrack *get_simtrack_from_id_(unsigned int tid, const edm::SimTrackContainer *simtracks);
0075
0076
0077 const std::vector<const PSimHit *> get_simhits_from_trackid_(
0078 unsigned int tid, unsigned int detid_raw, const std::vector<const edm::PSimHitContainer *> &psimhits);
0079
0080
0081
0082
0083
0084 std::map<unsigned int, std::map<unsigned int, std::vector<const PSimHit *>>> m_tId_det_simhits_;
0085
0086
0087 const std::pair<double, double> pixel_cell_transformation_(const std::pair<double, double> &pos,
0088 unsigned int icell,
0089 const std::pair<double, double> &pitch);
0090 const std::pair<double, double> pixel_cell_transformation_(const MeasurementPoint &pos,
0091 unsigned int icell,
0092 const std::pair<double, double> &pitch);
0093
0094
0095
0096
0097 bool channel_iluminated_by_(const PSimHit &localpos, int channel, const PixelGeomDetUnit *tkDet);
0098
0099
0100 std::set<int> get_illuminated_channels_(const PSimHit &ps,
0101 const DetId &detid,
0102 const edm::DetSetVector<PixelDigiSimLink> *simdigis);
0103
0104
0105 std::set<std::pair<int, int>> get_illuminated_pixels_(const PSimHit &ps, const PixelGeomDetUnit *tkDetUnit);
0106
0107
0108
0109
0110 std::function<bool(const PSimHit *)> use_this_track_;
0111
0112
0113
0114
0115 bool _check_input_angles_(const PSimHit *ps);
0116
0117
0118
0119 std::map<std::uintptr_t, std::set<std::pair<int, int>>> m_illuminated_pixels_;
0120
0121
0122
0123 MonitorElement *setupH1D_(DQMStore::IBooker &ibooker, const std::string &histoname, const std::string &title);
0124 MonitorElement *setupH2D_(DQMStore::IBooker &ibooker, const std::string &histoname, const std::string &title);
0125 MonitorElement *setupH2D_(DQMStore::IBooker &ibooker,
0126 const std::string &histoname,
0127 const std::string &title,
0128 const std::pair<double, double> &xranges,
0129 const std::pair<double, double> &yranges);
0130 MonitorElement *setupProf2D_(DQMStore::IBooker &ibooker,
0131 const std::string &histoname,
0132 const std::string &title,
0133 const std::pair<double, double> &xranges,
0134 const std::pair<double, double> &yranges);
0135
0136 MonitorElement *vME_track_XYMap_;
0137 MonitorElement *vME_track_RZMap_;
0138 MonitorElement *vME_digi_XYMap_;
0139 MonitorElement *vME_digi_RZMap_;
0140
0141 std::map<int, MonitorElement *> vME_clsize1D_;
0142 std::map<int, MonitorElement *> vME_clsize1Dx_;
0143 std::map<int, MonitorElement *> vME_clsize1Dy_;
0144 std::map<int, MonitorElement *> vME_charge1D_;
0145 std::map<int, MonitorElement *> vME_charge_elec1D_;
0146 std::map<int, MonitorElement *> vME_track_dxdz_;
0147 std::map<int, MonitorElement *> vME_track_dydz_;
0148 std::map<int, MonitorElement *> vME_track_dxdzAngle_;
0149 std::map<int, MonitorElement *> vME_track_dydzAngle_;
0150 std::map<int, MonitorElement *> vME_dx1D_;
0151 std::map<int, MonitorElement *> vME_dy1D_;
0152 std::map<int, MonitorElement *> vME_dxy2D_;
0153 std::map<int, MonitorElement *> vME_digi_charge1D_;
0154 std::map<int, MonitorElement *> vME_digi_chargeElec1D_;
0155 std::map<int, MonitorElement *> vME_sim_cluster_charge_;
0156
0157
0158 std::map<int, std::vector<MonitorElement *>> vME_pshpos_cell_;
0159 std::map<int, std::vector<MonitorElement *>> vME_position_cell_;
0160 std::map<int, std::vector<MonitorElement *>> vME_eff_cell_;
0161 std::map<int, std::vector<MonitorElement *>> vME_clsize_cell_;
0162 std::map<int, std::vector<MonitorElement *>> vME_charge_cell_;
0163 std::map<int, std::vector<MonitorElement *>> vME_charge_elec_cell_;
0164 std::map<int, std::vector<MonitorElement *>> vME_dx_cell_;
0165 std::map<int, std::vector<MonitorElement *>> vME_dy_cell_;
0166
0167
0168
0169
0170
0171 edm::ParameterSet config_;
0172
0173 std::string geomType_;
0174
0175
0176
0177 double thresholdInElectrons_;
0178 double electronsPerADC_;
0179 double electronsAtToT0_;
0180
0181 std::vector<double> tracksEntryAngleX_;
0182 std::vector<double> tracksEntryAngleY_;
0183
0184 std::map<unsigned int, std::pair<double, double>> active_entry_angles_;
0185
0186
0187
0188 std::vector<edm::EDGetTokenT<edm::PSimHitContainer>> simHitTokens_;
0189 const edm::EDGetTokenT<edm::DetSetVector<PixelDigi>> digiToken_;
0190 const edm::EDGetTokenT<edm::DetSetVector<PixelDigiSimLink>> digiSimLinkToken_;
0191 const edm::EDGetTokenT<edm::SimTrackContainer> simTrackToken_;
0192 const edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> topoToken_;
0193 const edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> geomToken_;
0194 const edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> topoBToken_;
0195 const edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> geomBToken_;
0196 };
0197 #endif