File indexing completed on 2024-09-11 04:33:21
0001
0002
0003
0004
0005
0006
0007
0008 #include "FWCore/Utilities/interface/Exception.h"
0009 #include "Geometry/HcalTowerAlgo/interface/HcalGeometry.h"
0010 #include "Geometry/Records/interface/CaloGeometryRecord.h"
0011 #include "Validation/GlobalHits/interface/GlobalHitsProducer.h"
0012 using CLHEP::micrometer;
0013 using CLHEP::millimeter;
0014
0015 GlobalHitsProducer::GlobalHitsProducer(const edm::ParameterSet &iPSet)
0016 : fName(""),
0017 verbosity(0),
0018 frequency(0),
0019 vtxunit(0),
0020 label(""),
0021 getAllProvenances(false),
0022 printProvenanceInfo(false),
0023 nRawGenPart(0),
0024 G4VtxSrc_Token_(consumes<edm::SimVertexContainer>((iPSet.getParameter<edm::InputTag>("G4VtxSrc")))),
0025 G4TrkSrc_Token_(consumes<edm::SimTrackContainer>(iPSet.getParameter<edm::InputTag>("G4TrkSrc"))),
0026 tGeomToken_(esConsumes()),
0027 cscGeomToken_(esConsumes()),
0028 dtGeomToken_(esConsumes()),
0029 rpcGeomToken_(esConsumes()),
0030 caloGeomToken_(esConsumes()),
0031 count(0) {
0032 std::string MsgLoggerCat = "GlobalHitsProducer_GlobalHitsProducer";
0033
0034
0035 fName = iPSet.getUntrackedParameter<std::string>("Name");
0036 verbosity = iPSet.getUntrackedParameter<int>("Verbosity");
0037 frequency = iPSet.getUntrackedParameter<int>("Frequency");
0038 vtxunit = iPSet.getUntrackedParameter<int>("VtxUnit");
0039 label = iPSet.getParameter<std::string>("Label");
0040 edm::ParameterSet m_Prov = iPSet.getParameter<edm::ParameterSet>("ProvenanceLookup");
0041 getAllProvenances = m_Prov.getUntrackedParameter<bool>("GetAllProvenances");
0042 printProvenanceInfo = m_Prov.getUntrackedParameter<bool>("PrintProvenanceInfo");
0043
0044
0045 PxlBrlLowSrc_ = iPSet.getParameter<edm::InputTag>("PxlBrlLowSrc");
0046 PxlBrlHighSrc_ = iPSet.getParameter<edm::InputTag>("PxlBrlHighSrc");
0047 PxlFwdLowSrc_ = iPSet.getParameter<edm::InputTag>("PxlFwdLowSrc");
0048 PxlFwdHighSrc_ = iPSet.getParameter<edm::InputTag>("PxlFwdHighSrc");
0049
0050 SiTIBLowSrc_ = iPSet.getParameter<edm::InputTag>("SiTIBLowSrc");
0051 SiTIBHighSrc_ = iPSet.getParameter<edm::InputTag>("SiTIBHighSrc");
0052 SiTOBLowSrc_ = iPSet.getParameter<edm::InputTag>("SiTOBLowSrc");
0053 SiTOBHighSrc_ = iPSet.getParameter<edm::InputTag>("SiTOBHighSrc");
0054 SiTIDLowSrc_ = iPSet.getParameter<edm::InputTag>("SiTIDLowSrc");
0055 SiTIDHighSrc_ = iPSet.getParameter<edm::InputTag>("SiTIDHighSrc");
0056 SiTECLowSrc_ = iPSet.getParameter<edm::InputTag>("SiTECLowSrc");
0057 SiTECHighSrc_ = iPSet.getParameter<edm::InputTag>("SiTECHighSrc");
0058
0059 MuonCscSrc_ = iPSet.getParameter<edm::InputTag>("MuonCscSrc");
0060 MuonDtSrc_ = iPSet.getParameter<edm::InputTag>("MuonDtSrc");
0061 MuonRpcSrc_ = iPSet.getParameter<edm::InputTag>("MuonRpcSrc");
0062
0063 ECalEBSrc_ = iPSet.getParameter<edm::InputTag>("ECalEBSrc");
0064 ECalEESrc_ = iPSet.getParameter<edm::InputTag>("ECalEESrc");
0065 ECalESSrc_ = iPSet.getParameter<edm::InputTag>("ECalESSrc");
0066
0067 HCalSrc_ = iPSet.getParameter<edm::InputTag>("HCalSrc");
0068
0069
0070 PxlBrlLowSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("PxlBrlLowSrc"));
0071 PxlBrlHighSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("PxlBrlHighSrc"));
0072 PxlFwdLowSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("PxlFwdLowSrc"));
0073 PxlFwdHighSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("PxlFwdHighSrc"));
0074
0075 SiTIBLowSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("SiTIBLowSrc"));
0076 SiTIBHighSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("SiTIBHighSrc"));
0077 SiTOBLowSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("SiTOBLowSrc"));
0078 SiTOBHighSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("SiTOBHighSrc"));
0079 SiTIDLowSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("SiTIDLowSrc"));
0080 SiTIDHighSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("SiTIDHighSrc"));
0081 SiTECLowSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("SiTECLowSrc"));
0082 SiTECHighSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("SiTECHighSrc"));
0083
0084 MuonCscSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("MuonCscSrc"));
0085 MuonDtSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("MuonDtSrc"));
0086 MuonRpcSrc_Token_ = consumes<edm::PSimHitContainer>(iPSet.getParameter<edm::InputTag>("MuonRpcSrc"));
0087
0088 ECalEBSrc_Token_ = consumes<edm::PCaloHitContainer>(iPSet.getParameter<edm::InputTag>("ECalEBSrc"));
0089 ECalEESrc_Token_ = consumes<edm::PCaloHitContainer>(iPSet.getParameter<edm::InputTag>("ECalEESrc"));
0090 ECalESSrc_Token_ = consumes<edm::PCaloHitContainer>(iPSet.getParameter<edm::InputTag>("ECalESSrc"));
0091 HCalSrc_Token_ = consumes<edm::PCaloHitContainer>(iPSet.getParameter<edm::InputTag>("HCalSrc"));
0092
0093
0094
0095 verbosity %= 10;
0096
0097
0098 produces<PGlobalSimHit>(label);
0099
0100
0101 if (verbosity >= 0) {
0102 edm::LogInfo(MsgLoggerCat)
0103 << "\n===============================\n"
0104 << "Initialized as EDProducer with parameter values:\n"
0105 << " Name = " << fName << "\n"
0106 << " Verbosity = " << verbosity << "\n"
0107 << " Frequency = " << frequency << "\n"
0108 << " VtxUnit = " << vtxunit << "\n"
0109 << " Label = " << label << "\n"
0110 << " GetProv = " << getAllProvenances << "\n"
0111 << " PrintProv = " << printProvenanceInfo << "\n"
0112 << " PxlBrlLowSrc = " << PxlBrlLowSrc_.label() << ":" << PxlBrlLowSrc_.instance() << "\n"
0113 << " PxlBrlHighSrc = " << PxlBrlHighSrc_.label() << ":" << PxlBrlHighSrc_.instance() << "\n"
0114 << " PxlFwdLowSrc = " << PxlFwdLowSrc_.label() << ":" << PxlBrlLowSrc_.instance() << "\n"
0115 << " PxlFwdHighSrc = " << PxlFwdHighSrc_.label() << ":" << PxlBrlHighSrc_.instance() << "\n"
0116 << " SiTIBLowSrc = " << SiTIBLowSrc_.label() << ":" << SiTIBLowSrc_.instance() << "\n"
0117 << " SiTIBHighSrc = " << SiTIBHighSrc_.label() << ":" << SiTIBHighSrc_.instance() << "\n"
0118 << " SiTOBLowSrc = " << SiTOBLowSrc_.label() << ":" << SiTOBLowSrc_.instance() << "\n"
0119 << " SiTOBHighSrc = " << SiTOBHighSrc_.label() << ":" << SiTOBHighSrc_.instance() << "\n"
0120 << " SiTIDLowSrc = " << SiTIDLowSrc_.label() << ":" << SiTIDLowSrc_.instance() << "\n"
0121 << " SiTIDHighSrc = " << SiTIDHighSrc_.label() << ":" << SiTIDHighSrc_.instance() << "\n"
0122 << " SiTECLowSrc = " << SiTECLowSrc_.label() << ":" << SiTECLowSrc_.instance() << "\n"
0123 << " SiTECHighSrc = " << SiTECHighSrc_.label() << ":" << SiTECHighSrc_.instance() << "\n"
0124 << " MuonCscSrc = " << MuonCscSrc_.label() << ":" << MuonCscSrc_.instance() << "\n"
0125 << " MuonDtSrc = " << MuonDtSrc_.label() << ":" << MuonDtSrc_.instance() << "\n"
0126 << " MuonRpcSrc = " << MuonRpcSrc_.label() << ":" << MuonRpcSrc_.instance() << "\n"
0127 << " ECalEBSrc = " << ECalEBSrc_.label() << ":" << ECalEBSrc_.instance() << "\n"
0128 << " ECalEESrc = " << ECalEESrc_.label() << ":" << ECalEESrc_.instance() << "\n"
0129 << " ECalESSrc = " << ECalESSrc_.label() << ":" << ECalESSrc_.instance() << "\n"
0130 << " HCalSrc = " << HCalSrc_.label() << ":" << HCalSrc_.instance() << "\n"
0131 << "===============================\n";
0132 }
0133
0134
0135 clear();
0136 }
0137
0138 GlobalHitsProducer::~GlobalHitsProducer() {}
0139
0140 void GlobalHitsProducer::beginJob(void) { return; }
0141
0142 void GlobalHitsProducer::endJob() {
0143 std::string MsgLoggerCat = "GlobalHitsProducer_endJob";
0144 if (verbosity >= 0)
0145 edm::LogInfo(MsgLoggerCat) << "Terminating having processed " << count << " events.";
0146 return;
0147 }
0148
0149 void GlobalHitsProducer::produce(edm::Event &iEvent, const edm::EventSetup &iSetup) {
0150 std::string MsgLoggerCat = "GlobalHitsProducer_produce";
0151
0152
0153 ++count;
0154
0155
0156 edm::RunNumber_t nrun = iEvent.id().run();
0157 edm::EventNumber_t nevt = iEvent.id().event();
0158
0159 if (verbosity > 0) {
0160 edm::LogInfo(MsgLoggerCat) << "Processing run " << nrun << ", event " << nevt << " (" << count << " events total)";
0161 } else if (verbosity == 0) {
0162 if (nevt % frequency == 0 || nevt == 1) {
0163 edm::LogInfo(MsgLoggerCat) << "Processing run " << nrun << ", event " << nevt << " (" << count
0164 << " events total)";
0165 }
0166 }
0167
0168
0169 clear();
0170
0171
0172 if (getAllProvenances) {
0173 std::vector<const edm::StableProvenance *> AllProv;
0174 iEvent.getAllStableProvenance(AllProv);
0175
0176 if (verbosity >= 0)
0177 edm::LogInfo(MsgLoggerCat) << "Number of Provenances = " << AllProv.size();
0178
0179 if (printProvenanceInfo && (verbosity >= 0)) {
0180 TString eventout("\nProvenance info:\n");
0181
0182 for (unsigned int i = 0; i < AllProv.size(); ++i) {
0183 eventout += "\n ******************************";
0184 eventout += "\n Module : ";
0185 eventout += AllProv[i]->moduleLabel();
0186 eventout += "\n ProductID : ";
0187 eventout += AllProv[i]->productID().id();
0188 eventout += "\n ClassName : ";
0189 eventout += AllProv[i]->className();
0190 eventout += "\n InstanceName : ";
0191 eventout += AllProv[i]->productInstanceName();
0192 eventout += "\n BranchName : ";
0193 eventout += AllProv[i]->branchName();
0194 }
0195 eventout += "\n ******************************\n";
0196 edm::LogInfo(MsgLoggerCat) << eventout << "\n";
0197 printProvenanceInfo = false;
0198 }
0199 getAllProvenances = false;
0200 }
0201
0202
0203
0204 fillG4MC(iEvent);
0205
0206 fillTrk(iEvent, iSetup);
0207
0208 fillMuon(iEvent, iSetup);
0209
0210 fillECal(iEvent, iSetup);
0211
0212 fillHCal(iEvent, iSetup);
0213
0214 if (verbosity > 0)
0215 edm::LogInfo(MsgLoggerCat) << "Done gathering data from event.";
0216
0217
0218 std::unique_ptr<PGlobalSimHit> pOut(new PGlobalSimHit);
0219
0220 if (verbosity > 2)
0221 edm::LogInfo(MsgLoggerCat) << "Saving event contents:";
0222
0223
0224
0225 storeG4MC(*pOut);
0226
0227 storeTrk(*pOut);
0228
0229 storeMuon(*pOut);
0230
0231 storeECal(*pOut);
0232
0233 storeHCal(*pOut);
0234
0235
0236 iEvent.put(std::move(pOut), label);
0237
0238 return;
0239 }
0240
0241
0242 void GlobalHitsProducer::fillG4MC(edm::Event &iEvent) {
0243 std::string MsgLoggerCat = "GlobalHitsProducer_fillG4MC";
0244
0245 TString eventout;
0246 if (verbosity > 0)
0247 eventout = "\nGathering info:";
0248
0249
0250
0251
0252 edm::Handle<edm::HepMCProduct> HepMCEvt;
0253 std::vector<edm::Handle<edm::HepMCProduct>> AllHepMCEvt;
0254
0255
0256 throw cms::Exception("UnsupportedFunction") << "GlobalHitsProducer::fillG4MC: "
0257 << "getManyByType has not been supported by the Framework since 2015. "
0258 << "This module has been broken since then. Maybe it should be deleted. "
0259 << "Another possibility is to upgrade to use GetterOfProducts instead.";
0260
0261
0262
0263 for (unsigned int i = 0; i < AllHepMCEvt.size(); ++i) {
0264 HepMCEvt = AllHepMCEvt[i];
0265 if ((HepMCEvt.provenance()->branchDescription()).moduleLabel() == "generatorSmeared")
0266 break;
0267 }
0268
0269 if (!HepMCEvt.isValid()) {
0270 edm::LogWarning(MsgLoggerCat) << "Unable to find HepMCProduct in event!";
0271 return;
0272 } else {
0273 eventout += "\n Using HepMCProduct: ";
0274 eventout += (HepMCEvt.provenance()->branchDescription()).moduleLabel();
0275 }
0276 const HepMC::GenEvent *MCEvt = HepMCEvt->GetEvent();
0277 nRawGenPart = MCEvt->particles_size();
0278
0279 if (verbosity > 1) {
0280 eventout += "\n Number of Raw Particles collected:......... ";
0281 eventout += nRawGenPart;
0282 }
0283
0284
0285
0286
0287
0288 float unit = 0.;
0289 if (vtxunit == 0)
0290 unit = 1.;
0291 if (vtxunit == 1)
0292 unit = 10.;
0293
0294 edm::Handle<edm::SimVertexContainer> G4VtxContainer;
0295 iEvent.getByToken(G4VtxSrc_Token_, G4VtxContainer);
0296 if (!G4VtxContainer.isValid()) {
0297 edm::LogWarning(MsgLoggerCat) << "Unable to find SimVertex in event!";
0298 return;
0299 }
0300 int i = 0;
0301 edm::SimVertexContainer::const_iterator itVtx;
0302 for (itVtx = G4VtxContainer->begin(); itVtx != G4VtxContainer->end(); ++itVtx) {
0303 ++i;
0304
0305 const math::XYZTLorentzVector G4Vtx1(
0306 itVtx->position().x(), itVtx->position().y(), itVtx->position().z(), itVtx->position().e());
0307 double G4Vtx[4];
0308 G4Vtx1.GetCoordinates(G4Vtx);
0309
0310 G4VtxX.push_back((G4Vtx[0] * unit) / micrometer);
0311 G4VtxY.push_back((G4Vtx[1] * unit) / micrometer);
0312 G4VtxZ.push_back((G4Vtx[2] * unit) / millimeter);
0313 }
0314
0315 if (verbosity > 1) {
0316 eventout += "\n Number of G4Vertices collected:............ ";
0317 eventout += i;
0318 }
0319
0320
0321
0322
0323 edm::Handle<edm::SimTrackContainer> G4TrkContainer;
0324 iEvent.getByToken(G4TrkSrc_Token_, G4TrkContainer);
0325
0326 if (!G4TrkContainer.isValid()) {
0327 edm::LogWarning(MsgLoggerCat) << "Unable to find SimTrack in event!";
0328 return;
0329 }
0330 i = 0;
0331 edm::SimTrackContainer::const_iterator itTrk;
0332 for (itTrk = G4TrkContainer->begin(); itTrk != G4TrkContainer->end(); ++itTrk) {
0333 ++i;
0334
0335 const math::XYZTLorentzVector G4Trk1(
0336 itTrk->momentum().x(), itTrk->momentum().y(), itTrk->momentum().z(), itTrk->momentum().e());
0337 double G4Trk[4];
0338 G4Trk1.GetCoordinates(G4Trk);
0339
0340 G4TrkPt.push_back(sqrt(G4Trk[0] * G4Trk[0] + G4Trk[1] * G4Trk[1]));
0341 G4TrkE.push_back(G4Trk[3]);
0342 }
0343
0344 if (verbosity > 1) {
0345 eventout += "\n Number of G4Tracks collected:.............. ";
0346 eventout += i;
0347 }
0348
0349 if (verbosity > 0)
0350 edm::LogInfo(MsgLoggerCat) << eventout << "\n";
0351
0352 return;
0353 }
0354
0355 void GlobalHitsProducer::storeG4MC(PGlobalSimHit &product) {
0356 std::string MsgLoggerCat = "GlobalHitsProducer_storeG4MC";
0357
0358 if (verbosity > 2) {
0359 TString eventout("\n nRawGenPart = ");
0360 eventout += nRawGenPart;
0361 eventout += "\n nG4Vtx = ";
0362 eventout += G4VtxX.size();
0363 for (unsigned int i = 0; i < G4VtxX.size(); ++i) {
0364 eventout += "\n (x,y,z) = (";
0365 eventout += G4VtxX[i];
0366 eventout += ", ";
0367 eventout += G4VtxY[i];
0368 eventout += ", ";
0369 eventout += G4VtxZ[i];
0370 eventout += ")";
0371 }
0372 eventout += "\n nG4Trk = ";
0373 eventout += G4TrkPt.size();
0374 for (unsigned int i = 0; i < G4TrkPt.size(); ++i) {
0375 eventout += "\n (pt,e) = (";
0376 eventout += G4TrkPt[i];
0377 eventout += ", ";
0378 eventout += G4TrkE[i];
0379 eventout += ")";
0380 }
0381 edm::LogInfo(MsgLoggerCat) << eventout << "\n";
0382 }
0383
0384 product.putRawGenPart(nRawGenPart);
0385 product.putG4Vtx(G4VtxX, G4VtxY, G4VtxZ);
0386 product.putG4Trk(G4TrkPt, G4TrkE);
0387
0388 return;
0389 }
0390
0391 void GlobalHitsProducer::fillTrk(edm::Event &iEvent, const edm::EventSetup &iSetup) {
0392 std::string MsgLoggerCat = "GlobalHitsProducer_fillTrk";
0393
0394 TString eventout;
0395 if (verbosity > 0)
0396 eventout = "\nGathering info:";
0397
0398
0399 const auto &theTrackerGeometry = iSetup.getHandle(tGeomToken_);
0400 if (!theTrackerGeometry.isValid()) {
0401 edm::LogWarning(MsgLoggerCat) << "Unable to find TrackerDigiGeometryRecord in event!";
0402 return;
0403 }
0404 const TrackerGeometry &theTracker(*theTrackerGeometry);
0405
0406
0407 edm::PSimHitContainer::const_iterator itHit;
0408
0409
0410
0411
0412 edm::PSimHitContainer thePxlBrlHits;
0413
0414 edm::Handle<edm::PSimHitContainer> PxlBrlLowContainer;
0415 iEvent.getByToken(PxlBrlLowSrc_Token_, PxlBrlLowContainer);
0416 if (!PxlBrlLowContainer.isValid()) {
0417 edm::LogWarning(MsgLoggerCat) << "Unable to find TrackerHitsPixelBarrelLowTof in event!";
0418 return;
0419 }
0420
0421 edm::Handle<edm::PSimHitContainer> PxlBrlHighContainer;
0422 iEvent.getByToken(PxlBrlHighSrc_Token_, PxlBrlHighContainer);
0423 if (!PxlBrlHighContainer.isValid()) {
0424 edm::LogWarning(MsgLoggerCat) << "Unable to find TrackerHitsPixelBarrelHighTof in event!";
0425 return;
0426 }
0427
0428 thePxlBrlHits.insert(thePxlBrlHits.end(), PxlBrlLowContainer->begin(), PxlBrlLowContainer->end());
0429 thePxlBrlHits.insert(thePxlBrlHits.end(), PxlBrlHighContainer->begin(), PxlBrlHighContainer->end());
0430
0431
0432 int i = 0, j = 0;
0433 for (itHit = thePxlBrlHits.begin(); itHit != thePxlBrlHits.end(); ++itHit) {
0434 ++i;
0435
0436
0437 DetId theDetUnitId(itHit->detUnitId());
0438 int detector = theDetUnitId.det();
0439 int subdetector = theDetUnitId.subdetId();
0440
0441
0442 if ((detector == dTrk) && (subdetector == sdPxlBrl)) {
0443
0444 const GeomDetUnit *theDet = theTracker.idToDetUnit(theDetUnitId);
0445
0446 if (!theDet) {
0447 edm::LogWarning(MsgLoggerCat) << "Unable to get GeomDetUnit from PxlBrlHits for Hit " << i;
0448 continue;
0449 }
0450
0451 ++j;
0452
0453
0454 const BoundPlane &bSurface = theDet->surface();
0455
0456
0457 PxlBrlToF.push_back(itHit->tof());
0458 PxlBrlR.push_back(bSurface.toGlobal(itHit->localPosition()).perp());
0459 PxlBrlPhi.push_back(bSurface.toGlobal(itHit->localPosition()).phi());
0460 PxlBrlEta.push_back(bSurface.toGlobal(itHit->localPosition()).eta());
0461
0462 } else {
0463 edm::LogWarning(MsgLoggerCat) << "PxlBrl PSimHit " << i << " is expected to be (det,subdet) = (" << dTrk << ","
0464 << sdPxlBrl << "); value returned is: (" << detector << "," << subdetector << ")";
0465 continue;
0466 }
0467 }
0468
0469 if (verbosity > 1) {
0470 eventout += "\n Number of Pixel Barrel Hits collected:..... ";
0471 eventout += j;
0472 }
0473
0474
0475
0476
0477 edm::PSimHitContainer thePxlFwdHits;
0478
0479 edm::Handle<edm::PSimHitContainer> PxlFwdLowContainer;
0480 iEvent.getByToken(PxlFwdLowSrc_Token_, PxlFwdLowContainer);
0481 if (!PxlFwdLowContainer.isValid()) {
0482 edm::LogWarning(MsgLoggerCat) << "Unable to find TrackerHitsPixelEndcapLowTof in event!";
0483 return;
0484 }
0485
0486 edm::Handle<edm::PSimHitContainer> PxlFwdHighContainer;
0487 iEvent.getByToken(PxlFwdHighSrc_Token_, PxlFwdHighContainer);
0488 if (!PxlFwdHighContainer.isValid()) {
0489 edm::LogWarning("GlobalHitsProducer_fillTrk") << "Unable to find TrackerHitsPixelEndcapHighTof in event!";
0490 return;
0491 }
0492
0493 thePxlFwdHits.insert(thePxlFwdHits.end(), PxlFwdLowContainer->begin(), PxlFwdLowContainer->end());
0494 thePxlFwdHits.insert(thePxlFwdHits.end(), PxlFwdHighContainer->begin(), PxlFwdHighContainer->end());
0495
0496
0497 i = 0;
0498 j = 0;
0499 for (itHit = thePxlFwdHits.begin(); itHit != thePxlFwdHits.end(); ++itHit) {
0500 ++i;
0501
0502
0503 DetId theDetUnitId(itHit->detUnitId());
0504 int detector = theDetUnitId.det();
0505 int subdetector = theDetUnitId.subdetId();
0506
0507
0508 if ((detector == dTrk) && (subdetector == sdPxlFwd)) {
0509
0510 const GeomDetUnit *theDet = theTracker.idToDetUnit(theDetUnitId);
0511
0512 if (!theDet) {
0513 edm::LogWarning(MsgLoggerCat) << "Unable to get GeomDetUnit from PxlFwdHits for Hit " << i;
0514 ;
0515 continue;
0516 }
0517
0518 ++j;
0519
0520
0521 const BoundPlane &bSurface = theDet->surface();
0522
0523
0524 PxlFwdToF.push_back(itHit->tof());
0525 PxlFwdZ.push_back(bSurface.toGlobal(itHit->localPosition()).z());
0526 PxlFwdPhi.push_back(bSurface.toGlobal(itHit->localPosition()).phi());
0527 PxlFwdEta.push_back(bSurface.toGlobal(itHit->localPosition()).eta());
0528 } else {
0529 edm::LogWarning(MsgLoggerCat) << "PxlFwd PSimHit " << i << " is expected to be (det,subdet) = (" << dTrk << ","
0530 << sdPxlFwd << "); value returned is: (" << detector << "," << subdetector << ")";
0531 continue;
0532 }
0533 }
0534
0535 if (verbosity > 1) {
0536 eventout += "\n Number of Pixel Forward Hits collected:.... ";
0537 eventout += j;
0538 }
0539
0540
0541
0542
0543 edm::PSimHitContainer theSiBrlHits;
0544
0545 edm::Handle<edm::PSimHitContainer> SiTIBLowContainer;
0546 iEvent.getByToken(SiTIBLowSrc_Token_, SiTIBLowContainer);
0547 if (!SiTIBLowContainer.isValid()) {
0548 edm::LogWarning(MsgLoggerCat) << "Unable to find TrackerHitsTIBLowTof in event!";
0549 return;
0550 }
0551
0552 edm::Handle<edm::PSimHitContainer> SiTIBHighContainer;
0553 iEvent.getByToken(SiTIBHighSrc_Token_, SiTIBHighContainer);
0554 if (!SiTIBHighContainer.isValid()) {
0555 edm::LogWarning(MsgLoggerCat) << "Unable to find TrackerHitsTIBHighTof in event!";
0556 return;
0557 }
0558
0559 edm::Handle<edm::PSimHitContainer> SiTOBLowContainer;
0560 iEvent.getByToken(SiTOBLowSrc_Token_, SiTOBLowContainer);
0561 if (!SiTOBLowContainer.isValid()) {
0562 edm::LogWarning(MsgLoggerCat) << "Unable to find TrackerHitsTOBLowTof in event!";
0563 return;
0564 }
0565
0566 edm::Handle<edm::PSimHitContainer> SiTOBHighContainer;
0567 iEvent.getByToken(SiTOBHighSrc_Token_, SiTOBHighContainer);
0568 if (!SiTOBHighContainer.isValid()) {
0569 edm::LogWarning(MsgLoggerCat) << "Unable to find TrackerHitsTOBHighTof in event!";
0570 return;
0571 }
0572
0573 theSiBrlHits.insert(theSiBrlHits.end(), SiTIBLowContainer->begin(), SiTIBLowContainer->end());
0574 theSiBrlHits.insert(theSiBrlHits.end(), SiTIBHighContainer->begin(), SiTIBHighContainer->end());
0575 theSiBrlHits.insert(theSiBrlHits.end(), SiTOBLowContainer->begin(), SiTOBLowContainer->end());
0576 theSiBrlHits.insert(theSiBrlHits.end(), SiTOBHighContainer->begin(), SiTOBHighContainer->end());
0577
0578
0579 i = 0;
0580 j = 0;
0581 for (itHit = theSiBrlHits.begin(); itHit != theSiBrlHits.end(); ++itHit) {
0582 ++i;
0583
0584
0585 DetId theDetUnitId(itHit->detUnitId());
0586 int detector = theDetUnitId.det();
0587 int subdetector = theDetUnitId.subdetId();
0588
0589
0590 if ((detector == dTrk) && ((subdetector == sdSiTIB) || (subdetector == sdSiTOB))) {
0591
0592 const GeomDetUnit *theDet = theTracker.idToDetUnit(theDetUnitId);
0593
0594 if (!theDet) {
0595 edm::LogWarning(MsgLoggerCat) << "Unable to get GeomDetUnit from SiBrlHits for Hit " << i;
0596 continue;
0597 }
0598
0599 ++j;
0600
0601
0602 const BoundPlane &bSurface = theDet->surface();
0603
0604
0605 SiBrlToF.push_back(itHit->tof());
0606 SiBrlR.push_back(bSurface.toGlobal(itHit->localPosition()).perp());
0607 SiBrlPhi.push_back(bSurface.toGlobal(itHit->localPosition()).phi());
0608 SiBrlEta.push_back(bSurface.toGlobal(itHit->localPosition()).eta());
0609 } else {
0610 edm::LogWarning(MsgLoggerCat) << "SiBrl PSimHit " << i << " is expected to be (det,subdet) = (" << dTrk << ","
0611 << sdSiTIB << " || " << sdSiTOB << "); value returned is: (" << detector << ","
0612 << subdetector << ")";
0613 continue;
0614 }
0615 }
0616
0617 if (verbosity > 1) {
0618 eventout += "\n Number of Silicon Barrel Hits collected:... ";
0619 eventout += j;
0620 }
0621
0622
0623
0624
0625 edm::PSimHitContainer theSiFwdHits;
0626
0627 edm::Handle<edm::PSimHitContainer> SiTIDLowContainer;
0628 iEvent.getByToken(SiTIDLowSrc_Token_, SiTIDLowContainer);
0629 if (!SiTIDLowContainer.isValid()) {
0630 edm::LogWarning(MsgLoggerCat) << "Unable to find TrackerHitsTIDLowTof in event!";
0631 return;
0632 }
0633
0634 edm::Handle<edm::PSimHitContainer> SiTIDHighContainer;
0635 iEvent.getByToken(SiTIDHighSrc_Token_, SiTIDHighContainer);
0636 if (!SiTIDHighContainer.isValid()) {
0637 edm::LogWarning("GlobalHitsProducer_fillTrk") << "Unable to find TrackerHitsTIDHighTof in event!";
0638 return;
0639 }
0640
0641 edm::Handle<edm::PSimHitContainer> SiTECLowContainer;
0642 iEvent.getByToken(SiTECLowSrc_Token_, SiTECLowContainer);
0643 if (!SiTECLowContainer.isValid()) {
0644 edm::LogWarning(MsgLoggerCat) << "Unable to find TrackerHitsTECLowTof in event!";
0645 return;
0646 }
0647
0648 edm::Handle<edm::PSimHitContainer> SiTECHighContainer;
0649 iEvent.getByToken(SiTECHighSrc_Token_, SiTECHighContainer);
0650 if (!SiTECHighContainer.isValid()) {
0651 edm::LogWarning(MsgLoggerCat) << "Unable to find TrackerHitsTECHighTof in event!";
0652 return;
0653 }
0654
0655 theSiFwdHits.insert(theSiFwdHits.end(), SiTIDLowContainer->begin(), SiTIDLowContainer->end());
0656 theSiFwdHits.insert(theSiFwdHits.end(), SiTIDHighContainer->begin(), SiTIDHighContainer->end());
0657 theSiFwdHits.insert(theSiFwdHits.end(), SiTECLowContainer->begin(), SiTECLowContainer->end());
0658 theSiFwdHits.insert(theSiFwdHits.end(), SiTECHighContainer->begin(), SiTECHighContainer->end());
0659
0660
0661 i = 0;
0662 j = 0;
0663 for (itHit = theSiFwdHits.begin(); itHit != theSiFwdHits.end(); ++itHit) {
0664 ++i;
0665
0666
0667 DetId theDetUnitId(itHit->detUnitId());
0668 int detector = theDetUnitId.det();
0669 int subdetector = theDetUnitId.subdetId();
0670
0671
0672 if ((detector == dTrk) && ((subdetector == sdSiTID) || (subdetector == sdSiTEC))) {
0673
0674 const GeomDetUnit *theDet = theTracker.idToDetUnit(theDetUnitId);
0675
0676 if (!theDet) {
0677 edm::LogWarning(MsgLoggerCat) << "Unable to get GeomDetUnit from SiFwdHits Hit " << i;
0678 return;
0679 }
0680
0681 ++j;
0682
0683
0684 const BoundPlane &bSurface = theDet->surface();
0685
0686
0687 SiFwdToF.push_back(itHit->tof());
0688 SiFwdZ.push_back(bSurface.toGlobal(itHit->localPosition()).z());
0689 SiFwdPhi.push_back(bSurface.toGlobal(itHit->localPosition()).phi());
0690 SiFwdEta.push_back(bSurface.toGlobal(itHit->localPosition()).eta());
0691 } else {
0692 edm::LogWarning(MsgLoggerCat) << "SiFwd PSimHit " << i << " is expected to be (det,subdet) = (" << dTrk << ","
0693 << sdSiTOB << " || " << sdSiTEC << "); value returned is: (" << detector << ","
0694 << subdetector << ")";
0695 continue;
0696 }
0697 }
0698
0699 if (verbosity > 1) {
0700 eventout += "\n Number of Silicon Forward Hits collected:.. ";
0701 eventout += j;
0702 }
0703
0704 if (verbosity > 0)
0705 edm::LogInfo(MsgLoggerCat) << eventout << "\n";
0706
0707 return;
0708 }
0709
0710 void GlobalHitsProducer::storeTrk(PGlobalSimHit &product) {
0711 std::string MsgLoggerCat = "GlobalHitsProducer_storeTrk";
0712
0713 if (verbosity > 2) {
0714 TString eventout("\n nPxlBrlHits = ");
0715 eventout += PxlBrlToF.size();
0716 for (unsigned int i = 0; i < PxlBrlToF.size(); ++i) {
0717 eventout += "\n (tof,r,phi,eta) = (";
0718 eventout += PxlBrlToF[i];
0719 eventout += ", ";
0720 eventout += PxlBrlR[i];
0721 eventout += ", ";
0722 eventout += PxlBrlPhi[i];
0723 eventout += ", ";
0724 eventout += PxlBrlEta[i];
0725 eventout += ")";
0726 }
0727 eventout += "\n nPxlFwdHits = ";
0728 eventout += PxlFwdToF.size();
0729 for (unsigned int i = 0; i < PxlFwdToF.size(); ++i) {
0730 eventout += "\n (tof,z,phi,eta) = (";
0731 eventout += PxlFwdToF[i];
0732 eventout += ", ";
0733 eventout += PxlFwdZ[i];
0734 eventout += ", ";
0735 eventout += PxlFwdPhi[i];
0736 eventout += ", ";
0737 eventout += PxlFwdEta[i];
0738 eventout += ")";
0739 }
0740 eventout += "\n nSiBrlHits = ";
0741 eventout += SiBrlToF.size();
0742 for (unsigned int i = 0; i < SiBrlToF.size(); ++i) {
0743 eventout += "\n (tof,r,phi,eta) = (";
0744 eventout += SiBrlToF[i];
0745 eventout += ", ";
0746 eventout += SiBrlR[i];
0747 eventout += ", ";
0748 eventout += SiBrlPhi[i];
0749 eventout += ", ";
0750 eventout += SiBrlEta[i];
0751 eventout += ")";
0752 }
0753 eventout += "\n nSiFwdHits = ";
0754 eventout += SiFwdToF.size();
0755 for (unsigned int i = 0; i < SiFwdToF.size(); ++i) {
0756 eventout += "\n (tof,z,phi,eta) = (";
0757 eventout += SiFwdToF[i];
0758 eventout += ", ";
0759 eventout += SiFwdZ[i];
0760 eventout += ", ";
0761 eventout += SiFwdPhi[i];
0762 eventout += ", ";
0763 eventout += SiFwdEta[i];
0764 eventout += ")";
0765 }
0766 edm::LogInfo(MsgLoggerCat) << eventout << "\n";
0767 }
0768
0769 product.putPxlBrlHits(PxlBrlToF, PxlBrlR, PxlBrlPhi, PxlBrlEta);
0770 product.putPxlFwdHits(PxlFwdToF, PxlFwdZ, PxlFwdPhi, PxlFwdEta);
0771 product.putSiBrlHits(SiBrlToF, SiBrlR, SiBrlPhi, SiBrlEta);
0772 product.putSiFwdHits(SiFwdToF, SiFwdZ, SiFwdPhi, SiFwdEta);
0773
0774 return;
0775 }
0776
0777 void GlobalHitsProducer::fillMuon(edm::Event &iEvent, const edm::EventSetup &iSetup) {
0778 std::string MsgLoggerCat = "GlobalHitsProducer_fillMuon";
0779
0780 TString eventout;
0781 if (verbosity > 0)
0782 eventout = "\nGathering info:";
0783
0784
0785 edm::PSimHitContainer::const_iterator itHit;
0786
0787
0788
0789
0790
0791
0792 const auto &theCSCGeometry = iSetup.getHandle(cscGeomToken_);
0793 if (!theCSCGeometry.isValid()) {
0794 edm::LogWarning(MsgLoggerCat) << "Unable to find MuonGeometryRecord for the CSCGeometry in event!";
0795 return;
0796 }
0797 const CSCGeometry &theCSCMuon(*theCSCGeometry);
0798
0799
0800 edm::Handle<edm::PSimHitContainer> MuonCSCContainer;
0801 iEvent.getByToken(MuonCscSrc_Token_, MuonCSCContainer);
0802 if (!MuonCSCContainer.isValid()) {
0803 edm::LogWarning(MsgLoggerCat) << "Unable to find MuonCSCHits in event!";
0804 return;
0805 }
0806
0807
0808 int i = 0, j = 0;
0809 for (itHit = MuonCSCContainer->begin(); itHit != MuonCSCContainer->end(); ++itHit) {
0810 ++i;
0811
0812
0813 DetId theDetUnitId(itHit->detUnitId());
0814 int detector = theDetUnitId.det();
0815 int subdetector = theDetUnitId.subdetId();
0816
0817
0818 if ((detector == dMuon) && (subdetector == sdMuonCSC)) {
0819
0820 const GeomDetUnit *theDet = theCSCMuon.idToDetUnit(theDetUnitId);
0821
0822 if (!theDet) {
0823 edm::LogWarning(MsgLoggerCat) << "Unable to get GeomDetUnit from theCSCMuon for hit " << i;
0824 continue;
0825 }
0826
0827 ++j;
0828
0829
0830 const BoundPlane &bSurface = theDet->surface();
0831
0832
0833 MuonCscToF.push_back(itHit->tof());
0834 MuonCscZ.push_back(bSurface.toGlobal(itHit->localPosition()).z());
0835 MuonCscPhi.push_back(bSurface.toGlobal(itHit->localPosition()).phi());
0836 MuonCscEta.push_back(bSurface.toGlobal(itHit->localPosition()).eta());
0837 } else {
0838 edm::LogWarning(MsgLoggerCat) << "MuonCsc PSimHit " << i << " is expected to be (det,subdet) = (" << dMuon << ","
0839 << sdMuonCSC << "); value returned is: (" << detector << "," << subdetector << ")";
0840 continue;
0841 }
0842 }
0843
0844 if (verbosity > 1) {
0845 eventout += "\n Number of CSC muon Hits collected:......... ";
0846 eventout += j;
0847 }
0848
0849
0850
0851
0852
0853
0854 const auto &theDTGeometry = iSetup.getHandle(dtGeomToken_);
0855 if (!theDTGeometry.isValid()) {
0856 edm::LogWarning(MsgLoggerCat) << "Unable to find MuonGeometryRecord for the DTGeometry in event!";
0857 return;
0858 }
0859 const DTGeometry &theDTMuon(*theDTGeometry);
0860
0861
0862 edm::Handle<edm::PSimHitContainer> MuonDtContainer;
0863 iEvent.getByToken(MuonDtSrc_Token_, MuonDtContainer);
0864 if (!MuonDtContainer.isValid()) {
0865 edm::LogWarning(MsgLoggerCat) << "Unable to find MuonDTHits in event!";
0866 return;
0867 }
0868
0869
0870 i = 0, j = 0;
0871 for (itHit = MuonDtContainer->begin(); itHit != MuonDtContainer->end(); ++itHit) {
0872 ++i;
0873
0874
0875 DetId theDetUnitId(itHit->detUnitId());
0876 int detector = theDetUnitId.det();
0877 int subdetector = theDetUnitId.subdetId();
0878
0879
0880 if ((detector == dMuon) && (subdetector == sdMuonDT)) {
0881
0882
0883 DTWireId wireId(itHit->detUnitId());
0884
0885
0886 const DTLayer *theDet = theDTMuon.layer(wireId.layerId());
0887
0888 if (!theDet) {
0889 edm::LogWarning(MsgLoggerCat) << "Unable to get GeomDetUnit from theDtMuon for hit " << i;
0890 continue;
0891 }
0892
0893 ++j;
0894
0895
0896 const BoundPlane &bSurface = theDet->surface();
0897
0898
0899 MuonDtToF.push_back(itHit->tof());
0900 MuonDtR.push_back(bSurface.toGlobal(itHit->localPosition()).perp());
0901 MuonDtPhi.push_back(bSurface.toGlobal(itHit->localPosition()).phi());
0902 MuonDtEta.push_back(bSurface.toGlobal(itHit->localPosition()).eta());
0903 } else {
0904 edm::LogWarning(MsgLoggerCat) << "MuonDt PSimHit " << i << " is expected to be (det,subdet) = (" << dMuon << ","
0905 << sdMuonDT << "); value returned is: (" << detector << "," << subdetector << ")";
0906 continue;
0907 }
0908 }
0909
0910 if (verbosity > 1) {
0911 eventout += "\n Number of DT muon Hits collected:.......... ";
0912 eventout += j;
0913 }
0914
0915
0916
0917
0918
0919
0920
0921 const auto &theRPCGeometry = iSetup.getHandle(rpcGeomToken_);
0922 if (!theRPCGeometry.isValid()) {
0923 edm::LogWarning(MsgLoggerCat) << "Unable to find MuonGeometryRecord for the RPCGeometry in event!";
0924 return;
0925 }
0926 const RPCGeometry &theRPCMuon(*theRPCGeometry);
0927
0928
0929 edm::Handle<edm::PSimHitContainer> MuonRPCContainer;
0930 iEvent.getByToken(MuonRpcSrc_Token_, MuonRPCContainer);
0931 if (!MuonRPCContainer.isValid()) {
0932 edm::LogWarning(MsgLoggerCat) << "Unable to find MuonRPCHits in event!";
0933 return;
0934 }
0935
0936
0937 i = 0, j = 0;
0938 int RPCBrl = 0, RPCFwd = 0;
0939 for (itHit = MuonRPCContainer->begin(); itHit != MuonRPCContainer->end(); ++itHit) {
0940 ++i;
0941
0942
0943 DetId theDetUnitId(itHit->detUnitId());
0944 int detector = theDetUnitId.det();
0945 int subdetector = theDetUnitId.subdetId();
0946
0947
0948 if ((detector == dMuon) && (subdetector == sdMuonRPC)) {
0949
0950 RPCDetId RPCId(itHit->detUnitId());
0951
0952
0953 int region = RPCId.region();
0954
0955
0956 const GeomDetUnit *theDet = theRPCMuon.idToDetUnit(theDetUnitId);
0957
0958 if (!theDet) {
0959 edm::LogWarning(MsgLoggerCat) << "Unable to get GeomDetUnit from theRPCMuon for hit " << i;
0960 continue;
0961 }
0962
0963 ++j;
0964
0965
0966 const BoundPlane &bSurface = theDet->surface();
0967
0968
0969 if ((region == sdMuonRPCRgnFwdp) || (region == sdMuonRPCRgnFwdn)) {
0970 ++RPCFwd;
0971
0972 MuonRpcFwdToF.push_back(itHit->tof());
0973 MuonRpcFwdZ.push_back(bSurface.toGlobal(itHit->localPosition()).z());
0974 MuonRpcFwdPhi.push_back(bSurface.toGlobal(itHit->localPosition()).phi());
0975 MuonRpcFwdEta.push_back(bSurface.toGlobal(itHit->localPosition()).eta());
0976 } else if (region == sdMuonRPCRgnBrl) {
0977 ++RPCBrl;
0978
0979 MuonRpcBrlToF.push_back(itHit->tof());
0980 MuonRpcBrlR.push_back(bSurface.toGlobal(itHit->localPosition()).perp());
0981 MuonRpcBrlPhi.push_back(bSurface.toGlobal(itHit->localPosition()).phi());
0982 MuonRpcBrlEta.push_back(bSurface.toGlobal(itHit->localPosition()).eta());
0983 } else {
0984 edm::LogWarning(MsgLoggerCat) << "Invalid region for RPC Muon hit" << i;
0985 continue;
0986 }
0987 } else {
0988 edm::LogWarning(MsgLoggerCat) << "MuonRpc PSimHit " << i << " is expected to be (det,subdet) = (" << dMuon << ","
0989 << sdMuonRPC << "); value returned is: (" << detector << "," << subdetector << ")";
0990 continue;
0991 }
0992 }
0993
0994 if (verbosity > 1) {
0995 eventout += "\n Number of RPC muon Hits collected:......... ";
0996 eventout += j;
0997 eventout += "\n RPC Barrel muon Hits:............ ";
0998 eventout += RPCBrl;
0999 eventout += "\n RPC Forward muon Hits:........... ";
1000 eventout += RPCFwd;
1001 }
1002
1003 if (verbosity > 0)
1004 edm::LogInfo(MsgLoggerCat) << eventout << "\n";
1005
1006 return;
1007 }
1008
1009 void GlobalHitsProducer::storeMuon(PGlobalSimHit &product) {
1010 std::string MsgLoggerCat = "GlobalHitsProducer_storeMuon";
1011
1012 if (verbosity > 2) {
1013 TString eventout("\n nMuonCSCHits = ");
1014 eventout += MuonCscToF.size();
1015 for (unsigned int i = 0; i < MuonCscToF.size(); ++i) {
1016 eventout += "\n (tof,z,phi,eta) = (";
1017 eventout += MuonCscToF[i];
1018 eventout += ", ";
1019 eventout += MuonCscZ[i];
1020 eventout += ", ";
1021 eventout += MuonCscPhi[i];
1022 eventout += ", ";
1023 eventout += MuonCscEta[i];
1024 eventout += ")";
1025 }
1026 eventout += "\n nMuonDtHits = ";
1027 eventout += MuonDtToF.size();
1028 for (unsigned int i = 0; i < MuonDtToF.size(); ++i) {
1029 eventout += "\n (tof,r,phi,eta) = (";
1030 eventout += MuonDtToF[i];
1031 eventout += ", ";
1032 eventout += MuonDtR[i];
1033 eventout += ", ";
1034 eventout += MuonDtPhi[i];
1035 eventout += ", ";
1036 eventout += MuonDtEta[i];
1037 eventout += ")";
1038 }
1039 eventout += "\n nMuonRpcBrlHits = ";
1040 eventout += MuonRpcBrlToF.size();
1041 for (unsigned int i = 0; i < MuonRpcBrlToF.size(); ++i) {
1042 eventout += "\n (tof,r,phi,eta) = (";
1043 eventout += MuonRpcBrlToF[i];
1044 eventout += ", ";
1045 eventout += MuonRpcBrlR[i];
1046 eventout += ", ";
1047 eventout += MuonRpcBrlPhi[i];
1048 eventout += ", ";
1049 eventout += MuonRpcBrlEta[i];
1050 eventout += ")";
1051 }
1052 eventout += "\n nMuonRpcFwdHits = ";
1053 eventout += MuonRpcFwdToF.size();
1054 for (unsigned int i = 0; i < MuonRpcFwdToF.size(); ++i) {
1055 eventout += "\n (tof,z,phi,eta) = (";
1056 eventout += MuonRpcFwdToF[i];
1057 eventout += ", ";
1058 eventout += MuonRpcFwdZ[i];
1059 eventout += ", ";
1060 eventout += MuonRpcFwdPhi[i];
1061 eventout += ", ";
1062 eventout += MuonRpcFwdEta[i];
1063 eventout += ")";
1064 }
1065 edm::LogInfo(MsgLoggerCat) << eventout << "\n";
1066 }
1067
1068 product.putMuonCscHits(MuonCscToF, MuonCscZ, MuonCscPhi, MuonCscEta);
1069 product.putMuonDtHits(MuonDtToF, MuonDtR, MuonDtPhi, MuonDtEta);
1070 product.putMuonRpcBrlHits(MuonRpcBrlToF, MuonRpcBrlR, MuonRpcBrlPhi, MuonRpcBrlEta);
1071 product.putMuonRpcFwdHits(MuonRpcFwdToF, MuonRpcFwdZ, MuonRpcFwdPhi, MuonRpcFwdEta);
1072
1073 return;
1074 }
1075
1076 void GlobalHitsProducer::fillECal(edm::Event &iEvent, const edm::EventSetup &iSetup) {
1077 std::string MsgLoggerCat = "GlobalHitsProducer_fillECal";
1078
1079 TString eventout;
1080 if (verbosity > 0)
1081 eventout = "\nGathering info:";
1082
1083
1084 const auto &theCaloGeometry = iSetup.getHandle(caloGeomToken_);
1085 if (!theCaloGeometry.isValid()) {
1086 edm::LogWarning(MsgLoggerCat) << "Unable to find CaloGeometryRecord in event!";
1087 return;
1088 }
1089 const CaloGeometry &theCalo(*theCaloGeometry);
1090
1091
1092 edm::PCaloHitContainer::const_iterator itHit;
1093
1094
1095
1096
1097 edm::PCaloHitContainer theECalHits;
1098
1099 edm::Handle<edm::PCaloHitContainer> EBContainer;
1100 iEvent.getByToken(ECalEBSrc_Token_, EBContainer);
1101 if (!EBContainer.isValid()) {
1102 edm::LogWarning(MsgLoggerCat) << "Unable to find EcalHitsEB in event!";
1103 return;
1104 }
1105
1106 edm::Handle<edm::PCaloHitContainer> EEContainer;
1107 iEvent.getByToken(ECalEESrc_Token_, EEContainer);
1108 if (!EEContainer.isValid()) {
1109 edm::LogWarning(MsgLoggerCat) << "Unable to find EcalHitsEE in event!";
1110 return;
1111 }
1112
1113 theECalHits.insert(theECalHits.end(), EBContainer->begin(), EBContainer->end());
1114 theECalHits.insert(theECalHits.end(), EEContainer->begin(), EEContainer->end());
1115
1116
1117 int i = 0, j = 0;
1118 for (itHit = theECalHits.begin(); itHit != theECalHits.end(); ++itHit) {
1119 ++i;
1120
1121
1122 DetId theDetUnitId(itHit->id());
1123 int detector = theDetUnitId.det();
1124 int subdetector = theDetUnitId.subdetId();
1125
1126
1127 if ((detector == dEcal) && ((subdetector == sdEcalBrl) || (subdetector == sdEcalFwd))) {
1128
1129 auto theDet = (theCalo.getSubdetectorGeometry(theDetUnitId))->getGeometry(theDetUnitId);
1130
1131 if (!theDet) {
1132 edm::LogWarning(MsgLoggerCat) << "Unable to get CaloCellGeometry from ECalHits for Hit " << i;
1133 continue;
1134 }
1135
1136 ++j;
1137
1138
1139 const GlobalPoint &globalposition = theDet->getPosition();
1140
1141
1142 ECalE.push_back(itHit->energy());
1143 ECalToF.push_back(itHit->time());
1144 ECalPhi.push_back(globalposition.phi());
1145 ECalEta.push_back(globalposition.eta());
1146
1147 } else {
1148 edm::LogWarning(MsgLoggerCat) << "ECal PCaloHit " << i << " is expected to be (det,subdet) = (" << dEcal << ","
1149 << sdEcalBrl << " || " << sdEcalFwd << "); value returned is: (" << detector << ","
1150 << subdetector << ")";
1151 continue;
1152 }
1153 }
1154
1155 if (verbosity > 1) {
1156 eventout += "\n Number of ECal Hits collected:............. ";
1157 eventout += j;
1158 }
1159
1160
1161
1162
1163
1164 edm::Handle<edm::PCaloHitContainer> PreShContainer;
1165 iEvent.getByToken(ECalESSrc_Token_, PreShContainer);
1166 if (!PreShContainer.isValid()) {
1167 edm::LogWarning(MsgLoggerCat) << "Unable to find EcalHitsES in event!";
1168 return;
1169 }
1170
1171
1172 i = 0, j = 0;
1173 for (itHit = PreShContainer->begin(); itHit != PreShContainer->end(); ++itHit) {
1174 ++i;
1175
1176
1177 DetId theDetUnitId(itHit->id());
1178 int detector = theDetUnitId.det();
1179 int subdetector = theDetUnitId.subdetId();
1180
1181
1182 if ((detector == dEcal) && (subdetector == sdEcalPS)) {
1183
1184 auto theDet = (theCalo.getSubdetectorGeometry(theDetUnitId))->getGeometry(theDetUnitId);
1185
1186 if (!theDet) {
1187 edm::LogWarning(MsgLoggerCat) << "Unable to get CaloCellGeometry from PreShContainer for Hit " << i;
1188 continue;
1189 }
1190
1191 ++j;
1192
1193
1194 const GlobalPoint &globalposition = theDet->getPosition();
1195
1196
1197 PreShE.push_back(itHit->energy());
1198 PreShToF.push_back(itHit->time());
1199 PreShPhi.push_back(globalposition.phi());
1200 PreShEta.push_back(globalposition.eta());
1201
1202 } else {
1203 edm::LogWarning(MsgLoggerCat) << "PreSh PCaloHit " << i << " is expected to be (det,subdet) = (" << dEcal << ","
1204 << sdEcalPS << "); value returned is: (" << detector << "," << subdetector << ")";
1205 continue;
1206 }
1207 }
1208
1209 if (verbosity > 1) {
1210 eventout += "\n Number of PreSh Hits collected:............ ";
1211 eventout += j;
1212 }
1213
1214 if (verbosity > 0)
1215 edm::LogInfo(MsgLoggerCat) << eventout << "\n";
1216
1217 return;
1218 }
1219
1220 void GlobalHitsProducer::storeECal(PGlobalSimHit &product) {
1221 std::string MsgLoggerCat = "GlobalHitsProducer_storeECal";
1222
1223 if (verbosity > 2) {
1224 TString eventout("\n nECalHits = ");
1225 eventout += ECalE.size();
1226 for (unsigned int i = 0; i < ECalE.size(); ++i) {
1227 eventout += "\n (e,tof,phi,eta) = (";
1228 eventout += ECalE[i];
1229 eventout += ", ";
1230 eventout += ECalToF[i];
1231 eventout += ", ";
1232 eventout += ECalPhi[i];
1233 eventout += ", ";
1234 eventout += ECalEta[i];
1235 eventout += ")";
1236 }
1237 eventout += "\n nPreShHits = ";
1238 eventout += PreShE.size();
1239 for (unsigned int i = 0; i < PreShE.size(); ++i) {
1240 eventout += "\n (e,tof,phi,eta) = (";
1241 eventout += PreShE[i];
1242 eventout += ", ";
1243 eventout += PreShToF[i];
1244 eventout += ", ";
1245 eventout += PreShPhi[i];
1246 eventout += ", ";
1247 eventout += PreShEta[i];
1248 eventout += ")";
1249 }
1250 edm::LogInfo(MsgLoggerCat) << eventout << "\n";
1251 }
1252
1253 product.putECalHits(ECalE, ECalToF, ECalPhi, ECalEta);
1254 product.putPreShHits(PreShE, PreShToF, PreShPhi, PreShEta);
1255
1256 return;
1257 }
1258
1259 void GlobalHitsProducer::fillHCal(edm::Event &iEvent, const edm::EventSetup &iSetup) {
1260 std::string MsgLoggerCat = "GlobalHitsProducer_fillHCal";
1261
1262 TString eventout;
1263 if (verbosity > 0)
1264 eventout = "\nGathering info:";
1265
1266
1267 const auto &theCaloGeometry = iSetup.getHandle(caloGeomToken_);
1268 if (!theCaloGeometry.isValid()) {
1269 edm::LogWarning(MsgLoggerCat) << "Unable to find CaloGeometryRecord in event!";
1270 return;
1271 }
1272 const CaloGeometry &theCalo(*theCaloGeometry);
1273
1274
1275 edm::PCaloHitContainer::const_iterator itHit;
1276
1277
1278
1279
1280
1281 edm::Handle<edm::PCaloHitContainer> HCalContainer;
1282 iEvent.getByToken(HCalSrc_Token_, HCalContainer);
1283 if (!HCalContainer.isValid()) {
1284 edm::LogWarning(MsgLoggerCat) << "Unable to find HCalHits in event!";
1285 return;
1286 }
1287
1288
1289 int i = 0, j = 0;
1290 for (itHit = HCalContainer->begin(); itHit != HCalContainer->end(); ++itHit) {
1291 ++i;
1292
1293
1294 DetId theDetUnitId(itHit->id());
1295 int detector = theDetUnitId.det();
1296 int subdetector = theDetUnitId.subdetId();
1297
1298
1299 if ((detector == dHcal) && ((subdetector == sdHcalBrl) || (subdetector == sdHcalEC) || (subdetector == sdHcalOut) ||
1300 (subdetector == sdHcalFwd))) {
1301
1302 const HcalGeometry *theDet = dynamic_cast<const HcalGeometry *>(theCalo.getSubdetectorGeometry(theDetUnitId));
1303
1304 if (!theDet) {
1305 edm::LogWarning(MsgLoggerCat) << "Unable to get CaloCellGeometry from HCalContainer for Hit " << i;
1306 continue;
1307 }
1308
1309 ++j;
1310
1311
1312 const GlobalPoint &globalposition = theDet->getPosition(theDetUnitId);
1313
1314
1315 HCalE.push_back(itHit->energy());
1316 HCalToF.push_back(itHit->time());
1317 HCalPhi.push_back(globalposition.phi());
1318 HCalEta.push_back(globalposition.eta());
1319
1320 } else {
1321 edm::LogWarning(MsgLoggerCat) << "HCal PCaloHit " << i << " is expected to be (det,subdet) = (" << dHcal << ","
1322 << sdHcalBrl << " || " << sdHcalEC << " || " << sdHcalOut << " || " << sdHcalFwd
1323 << "); value returned is: (" << detector << "," << subdetector << ")";
1324 continue;
1325 }
1326 }
1327
1328 if (verbosity > 1) {
1329 eventout += "\n Number of HCal Hits collected:............. ";
1330 eventout += j;
1331 }
1332
1333 if (verbosity > 0)
1334 edm::LogInfo(MsgLoggerCat) << eventout << "\n";
1335
1336 return;
1337 }
1338
1339 void GlobalHitsProducer::storeHCal(PGlobalSimHit &product) {
1340 std::string MsgLoggerCat = "GlobalHitsProducer_storeHCal";
1341
1342 if (verbosity > 2) {
1343 TString eventout("\n nHCalHits = ");
1344 eventout += HCalE.size();
1345 for (unsigned int i = 0; i < HCalE.size(); ++i) {
1346 eventout += "\n (e,tof,phi,eta) = (";
1347 eventout += HCalE[i];
1348 eventout += ", ";
1349 eventout += HCalToF[i];
1350 eventout += ", ";
1351 eventout += HCalPhi[i];
1352 eventout += ", ";
1353 eventout += HCalEta[i];
1354 eventout += ")";
1355 }
1356 edm::LogInfo(MsgLoggerCat) << eventout << "\n";
1357 }
1358
1359 product.putHCalHits(HCalE, HCalToF, HCalPhi, HCalEta);
1360
1361 return;
1362 }
1363
1364 void GlobalHitsProducer::clear() {
1365 std::string MsgLoggerCat = "GlobalHitsProducer_clear";
1366
1367 if (verbosity > 0)
1368 edm::LogInfo(MsgLoggerCat) << "Clearing event holders";
1369
1370
1371 nRawGenPart = 0;
1372 G4VtxX.clear();
1373 G4VtxY.clear();
1374 G4VtxZ.clear();
1375 G4TrkPt.clear();
1376 G4TrkE.clear();
1377
1378
1379
1380 ECalE.clear();
1381 ECalToF.clear();
1382 ECalPhi.clear();
1383 ECalEta.clear();
1384
1385 PreShE.clear();
1386 PreShToF.clear();
1387 PreShPhi.clear();
1388 PreShEta.clear();
1389
1390
1391
1392 HCalE.clear();
1393 HCalToF.clear();
1394 HCalPhi.clear();
1395 HCalEta.clear();
1396
1397
1398
1399 PxlBrlToF.clear();
1400 PxlBrlR.clear();
1401 PxlBrlPhi.clear();
1402 PxlBrlEta.clear();
1403 PxlFwdToF.clear();
1404 PxlFwdZ.clear();
1405 PxlFwdPhi.clear();
1406 PxlFwdEta.clear();
1407
1408 SiBrlToF.clear();
1409 SiBrlR.clear();
1410 SiBrlPhi.clear();
1411 SiBrlEta.clear();
1412 SiFwdToF.clear();
1413 SiFwdZ.clear();
1414 SiFwdPhi.clear();
1415 SiFwdEta.clear();
1416
1417
1418
1419 MuonDtToF.clear();
1420 MuonDtR.clear();
1421 MuonDtPhi.clear();
1422 MuonDtEta.clear();
1423
1424 MuonCscToF.clear();
1425 MuonCscZ.clear();
1426 MuonCscPhi.clear();
1427 MuonCscEta.clear();
1428
1429 MuonRpcBrlToF.clear();
1430 MuonRpcBrlR.clear();
1431 MuonRpcBrlPhi.clear();
1432 MuonRpcBrlEta.clear();
1433 MuonRpcFwdToF.clear();
1434 MuonRpcFwdZ.clear();
1435 MuonRpcFwdPhi.clear();
1436 MuonRpcFwdEta.clear();
1437
1438 return;
1439 }