00001 #ifndef GlobalHitsAnalyzer_h 00002 #define GlobalHitsAnalyzer_h 00003 00013 // framework & common header files 00014 #include "FWCore/Framework/interface/EDAnalyzer.h" 00015 #include "FWCore/Framework/interface/Frameworkfwd.h" 00016 #include "FWCore/Framework/interface/Event.h" 00017 #include "FWCore/Framework/interface/EventSetup.h" 00018 #include "DataFormats/Common/interface/Handle.h" 00019 #include "FWCore/Framework/interface/ESHandle.h" 00020 #include "DataFormats/Provenance/interface/Provenance.h" 00021 #include "FWCore/Framework/interface/MakerMacros.h" 00022 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00023 #include "FWCore/MessageLogger/interface/MessageLogger.h" 00024 #include "Geometry/CommonDetUnit/interface/GeomDetUnit.h" 00025 #include "DataFormats/DetId/interface/DetId.h" 00026 00027 //DQM services 00028 #include "DQMServices/Core/interface/DQMStore.h" 00029 #include "FWCore/ServiceRegistry/interface/Service.h" 00030 00031 // tracker info 00032 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" 00033 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" 00034 #include "DataFormats/SiStripDetId/interface/StripSubdetector.h" 00035 #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h" 00036 00037 // muon info 00038 #include "Geometry/Records/interface/MuonGeometryRecord.h" 00039 #include "Geometry/CSCGeometry/interface/CSCGeometry.h" 00040 #include "Geometry/DTGeometry/interface/DTGeometry.h" 00041 #include "Geometry/RPCGeometry/interface/RPCGeometry.h" 00042 #include "DataFormats/MuonDetId/interface/MuonSubdetId.h" 00043 #include "DataFormats/MuonDetId/interface/RPCDetId.h" 00044 #include "DataFormats/MuonDetId/interface/DTWireId.h" 00045 00046 // calorimeter info 00047 #include "Geometry/CaloGeometry/interface/CaloGeometry.h" 00048 #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" 00049 #include "Geometry/CaloGeometry/interface/CaloCellGeometry.h" 00050 #include "DataFormats/EcalDetId/interface/EcalSubdetector.h" 00051 #include "DataFormats/HcalDetId/interface/HcalSubdetector.h" 00052 00053 // data in edm::event 00054 #include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" 00055 #include "SimDataFormats/Vertex/interface/SimVertexContainer.h" 00056 #include "SimDataFormats/Track/interface/SimTrackContainer.h" 00057 #include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h" 00058 #include "SimDataFormats/CaloHit/interface/PCaloHitContainer.h" 00059 00060 // helper files 00061 //#include <CLHEP/Vector/LorentzVector.h> 00062 #include "DataFormats/Math/interface/LorentzVector.h" 00063 #include "CLHEP/Units/GlobalSystemOfUnits.h" 00064 00065 #include <iostream> 00066 #include <stdlib.h> 00067 #include <string> 00068 #include <memory> 00069 #include <vector> 00070 00071 #include "TString.h" 00072 #include "DQMServices/Core/interface/MonitorElement.h" 00073 00074 class GlobalHitsAnalyzer : public edm::EDAnalyzer 00075 { 00076 00077 public: 00078 00079 //typedef std::vector<float> FloatVector; 00080 00081 explicit GlobalHitsAnalyzer(const edm::ParameterSet&); 00082 virtual ~GlobalHitsAnalyzer(); 00083 virtual void beginJob( void ); 00084 virtual void endJob(); 00085 virtual void analyze(const edm::Event&, const edm::EventSetup&); 00086 00087 private: 00088 00089 // production related methods 00090 void fillG4MC(const edm::Event&); 00091 void fillTrk(const edm::Event&, const edm::EventSetup&); 00092 void fillMuon(const edm::Event&, const edm::EventSetup&); 00093 void fillECal(const edm::Event&, const edm::EventSetup&); 00094 void fillHCal(const edm::Event&, const edm::EventSetup&); 00095 00096 00097 private: 00098 00099 // parameter information 00100 std::string fName; 00101 int verbosity; 00102 int frequency; 00103 int vtxunit; 00104 std::string label; 00105 bool getAllProvenances; 00106 bool printProvenanceInfo; 00107 00108 bool validHepMCevt; 00109 bool validG4VtxContainer; 00110 bool validG4trkContainer; 00111 bool validPxlBrlLow; 00112 bool validPxlBrlHigh; 00113 bool validPxlFwdLow; 00114 bool validPxlFwdHigh; 00115 bool validSiTIBLow; 00116 bool validSiTIBHigh; 00117 bool validSiTOBLow; 00118 bool validSiTOBHigh; 00119 bool validSiTIDLow; 00120 bool validSiTIDHigh; 00121 bool validSiTECLow; 00122 bool validSiTECHigh; 00123 bool validMuonCSC; 00124 bool validMuonDt; 00125 bool validMuonRPC; 00126 bool validEB; 00127 bool validEE; 00128 bool validPresh; 00129 bool validHcal; 00130 00131 DQMStore *dbe; 00132 00133 // G4MC info 00134 MonitorElement *meMCRGP[2]; 00135 MonitorElement *meMCG4Vtx[2]; 00136 MonitorElement *meGeantVtxX[2]; 00137 MonitorElement *meGeantVtxY[2]; 00138 MonitorElement *meGeantVtxZ[2]; 00139 MonitorElement *meMCG4Trk[2]; 00140 MonitorElement *meGeantTrkPt; 00141 MonitorElement *meGeantTrkE; 00142 MonitorElement *meGeantVtxEta; 00143 MonitorElement *meGeantVtxPhi; 00144 MonitorElement *meGeantVtxRad[2]; 00145 MonitorElement *meGeantVtxMulti; 00146 int nRawGenPart; 00147 00148 // Electromagnetic info 00149 // ECal info 00150 MonitorElement *meCaloEcal[2]; 00151 MonitorElement *meCaloEcalE[2]; 00152 MonitorElement *meCaloEcalToF[2]; 00153 MonitorElement *meCaloEcalPhi; 00154 MonitorElement *meCaloEcalEta; 00155 edm::InputTag ECalEBSrc_; 00156 edm::InputTag ECalEESrc_; 00157 00158 // Preshower info 00159 MonitorElement *meCaloPreSh[2]; 00160 MonitorElement *meCaloPreShE[2]; 00161 MonitorElement *meCaloPreShToF[2]; 00162 MonitorElement *meCaloPreShPhi; 00163 MonitorElement *meCaloPreShEta; 00164 edm::InputTag ECalESSrc_; 00165 00166 // Hadronic info 00167 // HCal info 00168 MonitorElement *meCaloHcal[2]; 00169 MonitorElement *meCaloHcalE[2]; 00170 MonitorElement *meCaloHcalToF[2]; 00171 MonitorElement *meCaloHcalPhi; 00172 MonitorElement *meCaloHcalEta; 00173 edm::InputTag HCalSrc_; 00174 00175 // Tracker info 00176 // Pixel info 00177 int nPxlHits; 00178 MonitorElement *meTrackerPx[2]; 00179 MonitorElement *meTrackerPxPhi; 00180 MonitorElement *meTrackerPxEta; 00181 MonitorElement *meTrackerPxBToF; 00182 MonitorElement *meTrackerPxBR; 00183 MonitorElement *meTrackerPxFToF; 00184 MonitorElement *meTrackerPxFZ; 00185 edm::InputTag PxlBrlLowSrc_; 00186 edm::InputTag PxlBrlHighSrc_; 00187 edm::InputTag PxlFwdLowSrc_; 00188 edm::InputTag PxlFwdHighSrc_; 00189 00190 // Strip info 00191 int nSiHits; 00192 MonitorElement *meTrackerSi[2]; 00193 MonitorElement *meTrackerSiPhi; 00194 MonitorElement *meTrackerSiEta; 00195 MonitorElement *meTrackerSiBToF; 00196 MonitorElement *meTrackerSiBR; 00197 MonitorElement *meTrackerSiFToF; 00198 MonitorElement *meTrackerSiFZ; 00199 edm::InputTag SiTIBLowSrc_; 00200 edm::InputTag SiTIBHighSrc_; 00201 edm::InputTag SiTOBLowSrc_; 00202 edm::InputTag SiTOBHighSrc_; 00203 edm::InputTag SiTIDLowSrc_; 00204 edm::InputTag SiTIDHighSrc_; 00205 edm::InputTag SiTECLowSrc_; 00206 edm::InputTag SiTECHighSrc_; 00207 00208 // Muon info 00209 MonitorElement *meMuon[2]; 00210 MonitorElement *meMuonPhi; 00211 MonitorElement *meMuonEta; 00212 int nMuonHits; 00213 00214 // DT info 00215 MonitorElement *meMuonDtToF[2]; 00216 MonitorElement *meMuonDtR; 00217 edm::InputTag MuonDtSrc_; 00218 // CSC info 00219 MonitorElement *meMuonCscToF[2]; 00220 MonitorElement *meMuonCscZ; 00221 edm::InputTag MuonCscSrc_; 00222 // RPC info 00223 MonitorElement *meMuonRpcFToF[2]; 00224 MonitorElement *meMuonRpcFZ; 00225 MonitorElement *meMuonRpcBToF[2]; 00226 MonitorElement *meMuonRpcBR; 00227 edm::InputTag MuonRpcSrc_; 00228 00229 // private statistics information 00230 unsigned int count; 00231 00232 }; // end class declaration 00233 00234 #endif 00235 00236 #ifndef GlobalHitMap 00237 #define GlobalHitMap 00238 // geometry mapping 00239 static const int dTrk = 1; 00240 static const int sdPxlBrl = 1; 00241 static const int sdPxlFwd = 2; 00242 static const int sdSiTIB = 3; 00243 static const int sdSiTID = 4; 00244 static const int sdSiTOB = 5; 00245 static const int sdSiTEC = 6; 00246 00247 static const int dMuon = 2; 00248 static const int sdMuonDT = 1; 00249 static const int sdMuonCSC = 2; 00250 static const int sdMuonRPC = 3; 00251 static const int sdMuonRPCRgnBrl = 0; 00252 static const int sdMuonRPCRgnFwdp = 1; 00253 static const int sdMuonRPCRgnFwdn = -1; 00254 00255 static const int dEcal = 3; 00256 static const int sdEcalBrl = 1; 00257 static const int sdEcalFwd = 2; 00258 static const int sdEcalPS = 3; 00259 static const int sdEcalTT = 4; 00260 static const int sdEcalLPnD = 5; 00261 00262 static const int dHcal = 4; 00263 static const int sdHcalEmpty = 0; 00264 static const int sdHcalBrl = 1; 00265 static const int sdHcalEC = 2; 00266 static const int sdHcalOut = 3; 00267 static const int sdHcalFwd = 4; 00268 static const int sdHcalTT = 5; 00269 static const int sdHcalCalib = 6; 00270 static const int sdHcalCompst = 7; 00271 00272 #endif