Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:32:24

0001 #ifndef GlobalRecHitsAnalyzer_h
0002 #define GlobalRecHitsAnalyzer_h
0003 
0004 /** \class GlobalHitsProducer
0005  *  
0006  *  Class to fill PGlobalRecHit object to be inserted into data stream 
0007  *  containing information about various sub-systems in global coordinates 
0008  *  with full geometry
0009  *
0010  *  \author M. Strang SUNY-Buffalo
0011  */
0012 
0013 // framework & common header files
0014 #include "FWCore/Framework/interface/Frameworkfwd.h"
0015 #include "FWCore/Framework/interface/Event.h"
0016 #include "FWCore/Framework/interface/EventSetup.h"
0017 #include "DataFormats/Common/interface/Handle.h"
0018 #include "FWCore/Framework/interface/ESHandle.h"
0019 #include "FWCore/Framework/interface/GetterOfProducts.h"
0020 #include "FWCore/Framework/interface/ProcessMatch.h"
0021 
0022 //DQM services
0023 #include "DQMServices/Core/interface/DQMStore.h"
0024 #include "FWCore/ServiceRegistry/interface/Service.h"
0025 
0026 #include "DataFormats/Provenance/interface/Provenance.h"
0027 #include "FWCore/Framework/interface/MakerMacros.h"
0028 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0029 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0030 
0031 // ecal calorimeter info
0032 #include "DataFormats/EcalDigi/interface/EBDataFrame.h"
0033 #include "DataFormats/EcalDigi/interface/EEDataFrame.h"
0034 #include "DataFormats/EcalDigi/interface/ESDataFrame.h"
0035 #include "DataFormats/EcalDigi/interface/EcalDigiCollections.h"
0036 #include "DataFormats/EcalDetId/interface/EBDetId.h"
0037 #include "DataFormats/EcalDetId/interface/EEDetId.h"
0038 #include "DataFormats/EcalDetId/interface/ESDetId.h"
0039 #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
0040 
0041 // hcal calorimeter info
0042 #include "DataFormats/HcalDetId/interface/HcalSubdetector.h"
0043 #include "DataFormats/HcalDetId/interface/HcalElectronicsId.h"
0044 #include "DataFormats/HcalDetId/interface/HcalDetId.h"
0045 #include "DataFormats/HcalDigi/interface/HcalDigiCollections.h"
0046 #include "DataFormats/HcalDigi/interface/HcalQIESample.h"
0047 #include "CalibFormats/HcalObjects/interface/HcalDbRecord.h"
0048 #include "CalibFormats/HcalObjects/interface/HcalCoderDb.h"
0049 #include "CalibFormats/HcalObjects/interface/HcalCalibrations.h"
0050 #include "DataFormats/HcalDigi/interface/HBHEDataFrame.h"
0051 #include "DataFormats/HcalDigi/interface/HFDataFrame.h"
0052 #include "DataFormats/HcalDigi/interface/HODataFrame.h"
0053 #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h"
0054 #include "Geometry/CaloGeometry/interface/CaloCellGeometry.h"
0055 #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
0056 #include "CalibFormats/HcalObjects/interface/HcalDbService.h"
0057 #include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h"
0058 #include "DataFormats/HcalRecHit/interface/HcalSourcePositionData.h"
0059 
0060 // silicon strip info
0061 #include "DataFormats/Common/interface/DetSetVector.h"
0062 #include "DataFormats/SiStripDigi/interface/SiStripDigi.h"
0063 #include "DataFormats/SiStripDetId/interface/StripSubdetector.h"
0064 #include "SimTracker/TrackerHitAssociation/interface/TrackerHitAssociator.h"
0065 #include "Geometry/CommonTopologies/interface/StripTopology.h"
0066 #include "Geometry/TrackerGeometryBuilder/interface/StripGeomDetUnit.h"
0067 #include "Geometry/CommonDetUnit/interface/GluedGeomDet.h"
0068 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
0069 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
0070 #include "Geometry/TrackerNumberingBuilder/interface/GeometricDet.h"
0071 #include "Geometry/TrackerGeometryBuilder/interface/StripGeomDetType.h"
0072 #include "DataFormats/GeometryVector/interface/LocalPoint.h"
0073 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
0074 #include "DataFormats/SiStripCluster/interface/SiStripCluster.h"
0075 #include "DataFormats/SiStripCluster/interface/SiStripClusterCollection.h"
0076 #include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit2DCollection.h"
0077 #include "DataFormats/TrackerRecHit2D/interface/SiStripMatchedRecHit2DCollection.h"
0078 #include "DataFormats/Common/interface/OwnVector.h"
0079 
0080 // silicon pixel info
0081 #include "DataFormats/SiPixelDigi/interface/PixelDigi.h"
0082 #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h"
0083 #include "Geometry/CommonTopologies/interface/PixelTopology.h"
0084 #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h"
0085 #include "Geometry/CommonDetUnit/interface/PixelGeomDetType.h"
0086 #include "DataFormats/SiPixelCluster/interface/SiPixelCluster.h"
0087 #include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHitCollection.h"
0088 #include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHit.h"
0089 
0090 // muon DT info
0091 #include "DataFormats/DTDigi/interface/DTDigi.h"
0092 #include "DataFormats/DTDigi/interface/DTDigiCollection.h"
0093 #include "DataFormats/MuonDetId/interface/DTWireId.h"
0094 #include "DataFormats/MuonDetId/interface/DTLayerId.h"
0095 #include "DataFormats/DTRecHit/interface/DTRecHitCollection.h"
0096 #include "Geometry/DTGeometry/interface/DTLayer.h"
0097 #include "Geometry/DTGeometry/interface/DTGeometry.h"
0098 #include "Geometry/Records/interface/MuonGeometryRecord.h"
0099 #include "Validation/DTRecHits/interface/DTHitQualityUtils.h"
0100 
0101 // muon CSC info
0102 #include "DataFormats/CSCDigi/interface/CSCStripDigi.h"
0103 #include "DataFormats/CSCDigi/interface/CSCStripDigiCollection.h"
0104 #include "DataFormats/CSCDigi/interface/CSCWireDigi.h"
0105 #include "DataFormats/CSCDigi/interface/CSCWireDigiCollection.h"
0106 #include "Geometry/CSCGeometry/interface/CSCGeometry.h"
0107 #include "DataFormats/CSCRecHit/interface/CSCRecHit2DCollection.h"
0108 #include "DataFormats/CSCRecHit/interface/CSCRecHit2D.h"
0109 #include "Geometry/CSCGeometry/interface/CSCLayer.h"
0110 
0111 // muon RPC info
0112 #include "Geometry/RPCGeometry/interface/RPCGeometry.h"
0113 #include "DataFormats/RPCDigi/interface/RPCDigiCollection.h"
0114 #include "DataFormats/MuonDetId/interface/RPCDetId.h"
0115 #include "DataFormats/RPCRecHit/interface/RPCRecHitCollection.h"
0116 #include "Geometry/RPCGeometry/interface/RPCRoll.h"
0117 
0118 // event info
0119 #include "SimDataFormats/CrossingFrame/interface/CrossingFrame.h"
0120 #include "SimDataFormats/CrossingFrame/interface/MixCollection.h"
0121 #include "SimDataFormats/CaloHit/interface/PCaloHit.h"
0122 #include "SimDataFormats/CaloHit/interface/PCaloHitContainer.h"
0123 #include "SimDataFormats/TrackingHit/interface/PSimHit.h"
0124 
0125 // general info
0126 #include "DataFormats/DetId/interface/DetId.h"
0127 #include "Geometry/CommonDetUnit/interface/GeomDetType.h"
0128 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
0129 
0130 #include <cstdlib>
0131 #include <string>
0132 #include <memory>
0133 #include <vector>
0134 #include <map>
0135 #include <cmath>
0136 
0137 #include "TString.h"
0138 #include "DQMServices/Core/interface/DQMEDAnalyzer.h"
0139 
0140 class CaloGeometryRecord;
0141 class TrackerTopology;
0142 
0143 class GlobalRecHitsAnalyzer : public DQMEDAnalyzer {
0144 public:
0145   typedef std::map<uint32_t, float, std::less<uint32_t>> MapType;
0146 
0147   explicit GlobalRecHitsAnalyzer(const edm::ParameterSet &);
0148   ~GlobalRecHitsAnalyzer() override;
0149   void analyze(const edm::Event &, const edm::EventSetup &) override;
0150 
0151 protected:
0152   void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override;
0153 
0154 private:
0155   // production related methods
0156   void fillECal(const edm::Event &, const edm::EventSetup &);
0157   //void storeECal(PGlobalRecHit&);
0158   void fillHCal(const edm::Event &, const edm::EventSetup &);
0159   //void storeHCal(PGlobalRecHit&);
0160   void fillTrk(const edm::Event &, const edm::EventSetup &);
0161   //void storeTrk(PGlobalRecHit&);
0162   void fillMuon(const edm::Event &, const edm::EventSetup &);
0163   //void storeMuon(PGlobalRecHit&);
0164 
0165   //void clear();
0166 
0167 private:
0168   //  parameter information
0169   std::string fName;
0170   int verbosity;
0171   int frequency;
0172   std::string label;
0173   bool getAllProvenances;
0174   bool printProvenanceInfo;
0175   std::string hitsProducer;
0176 
0177   // Electromagnetic info
0178   // ECal info
0179 
0180   MonitorElement *mehEcaln[3];
0181   MonitorElement *mehEcalRes[3];
0182 
0183   edm::GetterOfProducts<edm::SortedCollection<HBHERecHit, edm::StrictWeakOrdering<HBHERecHit>>> HBHERecHitgetter_;
0184   edm::GetterOfProducts<edm::SortedCollection<HFRecHit, edm::StrictWeakOrdering<HFRecHit>>> HFRecHitgetter_;
0185   edm::GetterOfProducts<edm::SortedCollection<HORecHit, edm::StrictWeakOrdering<HORecHit>>> HORecHitgetter_;
0186 
0187   edm::InputTag ECalEBSrc_;
0188   edm::InputTag ECalUncalEBSrc_;
0189   edm::InputTag ECalEESrc_;
0190   edm::InputTag ECalUncalEESrc_;
0191   edm::InputTag ECalESSrc_;
0192   edm::EDGetTokenT<EBRecHitCollection> ECalEBSrc_Token_;
0193   edm::EDGetTokenT<EERecHitCollection> ECalEESrc_Token_;
0194   edm::EDGetTokenT<ESRecHitCollection> ECalESSrc_Token_;
0195   edm::EDGetTokenT<EBUncalibratedRecHitCollection> ECalUncalEBSrc_Token_;
0196   edm::EDGetTokenT<EEUncalibratedRecHitCollection> ECalUncalEESrc_Token_;
0197   edm::EDGetTokenT<CrossingFrame<PCaloHit>> EBHits_Token_;
0198   edm::EDGetTokenT<CrossingFrame<PCaloHit>> EEHits_Token_;
0199   edm::EDGetTokenT<CrossingFrame<PCaloHit>> ESHits_Token_;
0200 
0201   // HCal info
0202 
0203   MonitorElement *mehHcaln[4];
0204   MonitorElement *mehHcalRes[4];
0205 
0206   edm::InputTag HCalSrc_;
0207   edm::EDGetTokenT<edm::PCaloHitContainer> HCalSrc_Token_;
0208 
0209   // Tracker info
0210   // SiStrip
0211 
0212   MonitorElement *mehSiStripn[19];
0213   MonitorElement *mehSiStripResX[19];
0214   MonitorElement *mehSiStripResY[19];
0215 
0216   edm::InputTag SiStripSrc_;
0217   edm::EDGetTokenT<SiStripMatchedRecHit2DCollection> SiStripSrc_Token_;
0218 
0219   std::vector<PSimHit> matched;
0220   std::pair<LocalPoint, LocalVector> projectHit(const PSimHit &hit,
0221                                                 const StripGeomDetUnit *stripDet,
0222                                                 const BoundPlane &plane);
0223   TrackerHitAssociator::Config trackerHitAssociatorConfig_;
0224 
0225   // SiPxl
0226 
0227   MonitorElement *mehSiPixeln[7];
0228   MonitorElement *mehSiPixelResX[7];
0229   MonitorElement *mehSiPixelResY[7];
0230 
0231   edm::InputTag SiPxlSrc_;
0232   edm::EDGetTokenT<SiPixelRecHitCollection> SiPxlSrc_Token_;
0233 
0234   // Muon info
0235   // DT
0236 
0237   MonitorElement *mehDtMuonn;
0238   MonitorElement *mehCSCn;
0239   MonitorElement *mehRPCn;
0240   MonitorElement *mehDtMuonRes;
0241   MonitorElement *mehCSCResRDPhi;
0242   MonitorElement *mehRPCResX;
0243 
0244   edm::InputTag MuDTSrc_;
0245   edm::InputTag MuDTSimSrc_;
0246   edm::EDGetTokenT<DTRecHitCollection> MuDTSrc_Token_;
0247   edm::EDGetTokenT<edm::PSimHitContainer> MuDTSimSrc_Token_;
0248 
0249   // Return a map between DTRecHit1DPair and wireId
0250   std::map<DTWireId, std::vector<DTRecHit1DPair>> map1DRecHitsPerWire(const DTRecHitCollection *dt1DRecHitPairs);
0251 
0252   // Compute SimHit distance from wire (cm)
0253   float simHitDistFromWire(const DTLayer *layer, DTWireId wireId, const PSimHit &hit);
0254 
0255   // Find the RecHit closest to the muon SimHit
0256   template <typename type>
0257   const type *findBestRecHit(const DTLayer *layer,
0258                              DTWireId wireId,
0259                              const std::vector<type> &recHits,
0260                              const float simHitDist);
0261 
0262   // Compute the distance from wire (cm) of a hits in a DTRecHit1DPair
0263   float recHitDistFromWire(const DTRecHit1DPair &hitPair, const DTLayer *layer);
0264   // Compute the distance from wire (cm) of a hits in a DTRecHit1D
0265   float recHitDistFromWire(const DTRecHit1D &recHit, const DTLayer *layer);
0266 
0267   // Does the real job
0268   template <typename type>
0269   int compute(const DTGeometry *dtGeom,
0270               const std::map<DTWireId, std::vector<PSimHit>> &simHitsPerWire,
0271               const std::map<DTWireId, std::vector<type>> &recHitsPerWire,
0272               int step);
0273 
0274   // CSC
0275   //Defined above....
0276 
0277   edm::InputTag MuCSCSrc_;
0278   edm::EDGetTokenT<CSCRecHit2DCollection> MuCSCSrc_Token_;
0279   edm::EDGetTokenT<CrossingFrame<PSimHit>> MuCSCHits_Token_;
0280 
0281   std::map<int, edm::PSimHitContainer> theMap;
0282   void plotResolution(const PSimHit &simHit, const CSCRecHit2D &recHit, const CSCLayer *layer, int chamberType);
0283 
0284   // RPC
0285 
0286   //Defined above...
0287 
0288   edm::InputTag MuRPCSrc_;
0289   edm::InputTag MuRPCSimSrc_;
0290   edm::EDGetTokenT<RPCRecHitCollection> MuRPCSrc_Token_;
0291   edm::EDGetTokenT<edm::PSimHitContainer> MuRPCSimSrc_Token_;
0292 
0293   edm::ESGetToken<CaloGeometry, CaloGeometryRecord> caloGeomToken_;
0294   edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> tTopoToken_;
0295   edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> tGeomToken_;
0296   edm::ESGetToken<DTGeometry, MuonGeometryRecord> dtGeomToken_;
0297   edm::ESGetToken<CSCGeometry, MuonGeometryRecord> cscGeomToken_;
0298   edm::ESGetToken<RPCGeometry, MuonGeometryRecord> rpcGeomToken_;
0299 
0300   // private statistics information
0301   unsigned int count;
0302 
0303 };  // end class declaration
0304 
0305 #endif
0306 
0307 #ifndef GlobalHitMap
0308 #define GlobalHitMap
0309 
0310 // geometry mapping
0311 static const int dTrk = 1;
0312 static const int sdPxlBrl = 1;
0313 static const int sdPxlFwd = 2;
0314 static const int sdSiTIB = 3;
0315 static const int sdSiTID = 4;
0316 static const int sdSiTOB = 5;
0317 static const int sdSiTEC = 6;
0318 
0319 static const int dMuon = 2;
0320 static const int sdMuonDT = 1;
0321 static const int sdMuonCSC = 2;
0322 static const int sdMuonRPC = 3;
0323 static const int sdMuonRPCRgnBrl = 0;
0324 static const int sdMuonRPCRgnFwdp = 1;
0325 static const int sdMuonRPCRgnFwdn = -1;
0326 
0327 static const int dEcal = 3;
0328 static const int sdEcalBrl = 1;
0329 static const int sdEcalFwd = 2;
0330 static const int sdEcalPS = 3;
0331 static const int sdEcalTT = 4;
0332 static const int sdEcalLPnD = 5;
0333 
0334 static const int dHcal = 4;
0335 static const int sdHcalEmpty = 0;
0336 static const int sdHcalBrl = 1;
0337 static const int sdHcalEC = 2;
0338 static const int sdHcalOut = 3;
0339 static const int sdHcalFwd = 4;
0340 static const int sdHcalTT = 5;
0341 static const int sdHcalCalib = 6;
0342 static const int sdHcalCompst = 7;
0343 
0344 #endif  //PGlobalRecHitsProducer_h