00001
00010 #include "Validation/GlobalHits/interface/GlobalHitsProducer.h"
00011 #include "Geometry/Records/interface/CaloGeometryRecord.h"
00012
00013 GlobalHitsProducer::GlobalHitsProducer(const edm::ParameterSet& iPSet) :
00014 fName(""), verbosity(0), frequency(0), vtxunit(0), label(""),
00015 getAllProvenances(false), printProvenanceInfo(false), nRawGenPart(0),
00016 G4VtxSrc_(iPSet.getParameter<edm::InputTag>("G4VtxSrc")),
00017 G4TrkSrc_(iPSet.getParameter<edm::InputTag>("G4TrkSrc")),
00018
00019
00020
00021
00022
00023
00024 count(0)
00025 {
00026 std::string MsgLoggerCat = "GlobalHitsProducer_GlobalHitsProducer";
00027
00028
00029 fName = iPSet.getUntrackedParameter<std::string>("Name");
00030 verbosity = iPSet.getUntrackedParameter<int>("Verbosity");
00031 frequency = iPSet.getUntrackedParameter<int>("Frequency");
00032 vtxunit = iPSet.getUntrackedParameter<int>("VtxUnit");
00033 label = iPSet.getParameter<std::string>("Label");
00034 edm::ParameterSet m_Prov =
00035 iPSet.getParameter<edm::ParameterSet>("ProvenanceLookup");
00036 getAllProvenances =
00037 m_Prov.getUntrackedParameter<bool>("GetAllProvenances");
00038 printProvenanceInfo =
00039 m_Prov.getUntrackedParameter<bool>("PrintProvenanceInfo");
00040
00041
00042 PxlBrlLowSrc_ = iPSet.getParameter<edm::InputTag>("PxlBrlLowSrc");
00043 PxlBrlHighSrc_ = iPSet.getParameter<edm::InputTag>("PxlBrlHighSrc");
00044 PxlFwdLowSrc_ = iPSet.getParameter<edm::InputTag>("PxlFwdLowSrc");
00045 PxlFwdHighSrc_ = iPSet.getParameter<edm::InputTag>("PxlFwdHighSrc");
00046
00047 SiTIBLowSrc_ = iPSet.getParameter<edm::InputTag>("SiTIBLowSrc");
00048 SiTIBHighSrc_ = iPSet.getParameter<edm::InputTag>("SiTIBHighSrc");
00049 SiTOBLowSrc_ = iPSet.getParameter<edm::InputTag>("SiTOBLowSrc");
00050 SiTOBHighSrc_ = iPSet.getParameter<edm::InputTag>("SiTOBHighSrc");
00051 SiTIDLowSrc_ = iPSet.getParameter<edm::InputTag>("SiTIDLowSrc");
00052 SiTIDHighSrc_ = iPSet.getParameter<edm::InputTag>("SiTIDHighSrc");
00053 SiTECLowSrc_ = iPSet.getParameter<edm::InputTag>("SiTECLowSrc");
00054 SiTECHighSrc_ = iPSet.getParameter<edm::InputTag>("SiTECHighSrc");
00055
00056 MuonCscSrc_ = iPSet.getParameter<edm::InputTag>("MuonCscSrc");
00057 MuonDtSrc_ = iPSet.getParameter<edm::InputTag>("MuonDtSrc");
00058 MuonRpcSrc_ = iPSet.getParameter<edm::InputTag>("MuonRpcSrc");
00059
00060 ECalEBSrc_ = iPSet.getParameter<edm::InputTag>("ECalEBSrc");
00061 ECalEESrc_ = iPSet.getParameter<edm::InputTag>("ECalEESrc");
00062 ECalESSrc_ = iPSet.getParameter<edm::InputTag>("ECalESSrc");
00063
00064 HCalSrc_ = iPSet.getParameter<edm::InputTag>("HCalSrc");
00065
00066
00067
00068 verbosity %= 10;
00069
00070
00071 produces<PGlobalSimHit>(label);
00072
00073
00074 if (verbosity >= 0) {
00075 edm::LogInfo(MsgLoggerCat)
00076 << "\n===============================\n"
00077 << "Initialized as EDProducer with parameter values:\n"
00078 << " Name = " << fName << "\n"
00079 << " Verbosity = " << verbosity << "\n"
00080 << " Frequency = " << frequency << "\n"
00081 << " VtxUnit = " << vtxunit << "\n"
00082 << " Label = " << label << "\n"
00083 << " GetProv = " << getAllProvenances << "\n"
00084 << " PrintProv = " << printProvenanceInfo << "\n"
00085 << " PxlBrlLowSrc = " << PxlBrlLowSrc_.label()
00086 << ":" << PxlBrlLowSrc_.instance() << "\n"
00087 << " PxlBrlHighSrc = " << PxlBrlHighSrc_.label()
00088 << ":" << PxlBrlHighSrc_.instance() << "\n"
00089 << " PxlFwdLowSrc = " << PxlFwdLowSrc_.label()
00090 << ":" << PxlBrlLowSrc_.instance() << "\n"
00091 << " PxlFwdHighSrc = " << PxlFwdHighSrc_.label()
00092 << ":" << PxlBrlHighSrc_.instance() << "\n"
00093 << " SiTIBLowSrc = " << SiTIBLowSrc_.label()
00094 << ":" << SiTIBLowSrc_.instance() << "\n"
00095 << " SiTIBHighSrc = " << SiTIBHighSrc_.label()
00096 << ":" << SiTIBHighSrc_.instance() << "\n"
00097 << " SiTOBLowSrc = " << SiTOBLowSrc_.label()
00098 << ":" << SiTOBLowSrc_.instance() << "\n"
00099 << " SiTOBHighSrc = " << SiTOBHighSrc_.label()
00100 << ":" << SiTOBHighSrc_.instance() << "\n"
00101 << " SiTIDLowSrc = " << SiTIDLowSrc_.label()
00102 << ":" << SiTIDLowSrc_.instance() << "\n"
00103 << " SiTIDHighSrc = " << SiTIDHighSrc_.label()
00104 << ":" << SiTIDHighSrc_.instance() << "\n"
00105 << " SiTECLowSrc = " << SiTECLowSrc_.label()
00106 << ":" << SiTECLowSrc_.instance() << "\n"
00107 << " SiTECHighSrc = " << SiTECHighSrc_.label()
00108 << ":" << SiTECHighSrc_.instance() << "\n"
00109 << " MuonCscSrc = " << MuonCscSrc_.label()
00110 << ":" << MuonCscSrc_.instance() << "\n"
00111 << " MuonDtSrc = " << MuonDtSrc_.label()
00112 << ":" << MuonDtSrc_.instance() << "\n"
00113 << " MuonRpcSrc = " << MuonRpcSrc_.label()
00114 << ":" << MuonRpcSrc_.instance() << "\n"
00115 << " ECalEBSrc = " << ECalEBSrc_.label()
00116 << ":" << ECalEBSrc_.instance() << "\n"
00117 << " ECalEESrc = " << ECalEESrc_.label()
00118 << ":" << ECalEESrc_.instance() << "\n"
00119 << " ECalESSrc = " << ECalESSrc_.label()
00120 << ":" << ECalESSrc_.instance() << "\n"
00121 << " HCalSrc = " << HCalSrc_.label()
00122 << ":" << HCalSrc_.instance() << "\n"
00123 << "===============================\n";
00124 }
00125
00126
00127 clear();
00128
00129 }
00130
00131 GlobalHitsProducer::~GlobalHitsProducer()
00132 {
00133 }
00134
00135 void GlobalHitsProducer::beginJob( void )
00136 {
00137 return;
00138 }
00139
00140 void GlobalHitsProducer::endJob()
00141 {
00142 std::string MsgLoggerCat = "GlobalHitsProducer_endJob";
00143 if (verbosity >= 0)
00144 edm::LogInfo(MsgLoggerCat)
00145 << "Terminating having processed " << count << " events.";
00146 return;
00147 }
00148
00149 void GlobalHitsProducer::produce(edm::Event& iEvent,
00150 const edm::EventSetup& iSetup)
00151 {
00152 std::string MsgLoggerCat = "GlobalHitsProducer_produce";
00153
00154
00155 ++count;
00156
00157
00158 int nrun = iEvent.id().run();
00159 int nevt = iEvent.id().event();
00160
00161 if (verbosity > 0) {
00162 edm::LogInfo(MsgLoggerCat)
00163 << "Processing run " << nrun << ", event " << nevt
00164 << " (" << count << " events total)";
00165 } else if (verbosity == 0) {
00166 if (nevt%frequency == 0 || nevt == 1) {
00167 edm::LogInfo(MsgLoggerCat)
00168 << "Processing run " << nrun << ", event " << nevt
00169 << " (" << count << " events total)";
00170 }
00171 }
00172
00173
00174 clear();
00175
00176
00177 if (getAllProvenances) {
00178
00179 std::vector<const edm::Provenance*> AllProv;
00180 iEvent.getAllProvenance(AllProv);
00181
00182 if (verbosity >= 0)
00183 edm::LogInfo(MsgLoggerCat)
00184 << "Number of Provenances = " << AllProv.size();
00185
00186 if (printProvenanceInfo && (verbosity >= 0)) {
00187 TString eventout("\nProvenance info:\n");
00188
00189 for (unsigned int i = 0; i < AllProv.size(); ++i) {
00190 eventout += "\n ******************************";
00191 eventout += "\n Module : ";
00192 eventout += AllProv[i]->moduleLabel();
00193 eventout += "\n ProductID : ";
00194 eventout += AllProv[i]->productID().id();
00195 eventout += "\n ClassName : ";
00196 eventout += AllProv[i]->className();
00197 eventout += "\n InstanceName : ";
00198 eventout += AllProv[i]->productInstanceName();
00199 eventout += "\n BranchName : ";
00200 eventout += AllProv[i]->branchName();
00201 }
00202 eventout += "\n ******************************\n";
00203 edm::LogInfo(MsgLoggerCat) << eventout << "\n";
00204 printProvenanceInfo = false;
00205 }
00206 getAllProvenances = false;
00207 }
00208
00209
00210
00211 fillG4MC(iEvent);
00212
00213 fillTrk(iEvent,iSetup);
00214
00215 fillMuon(iEvent, iSetup);
00216
00217 fillECal(iEvent, iSetup);
00218
00219 fillHCal(iEvent, iSetup);
00220
00221 if (verbosity > 0)
00222 edm::LogInfo (MsgLoggerCat)
00223 << "Done gathering data from event.";
00224
00225
00226 std::auto_ptr<PGlobalSimHit> pOut(new PGlobalSimHit);
00227
00228 if (verbosity > 2)
00229 edm::LogInfo (MsgLoggerCat)
00230 << "Saving event contents:";
00231
00232
00233
00234 storeG4MC(*pOut);
00235
00236 storeTrk(*pOut);
00237
00238 storeMuon(*pOut);
00239
00240 storeECal(*pOut);
00241
00242 storeHCal(*pOut);
00243
00244
00245 iEvent.put(pOut,label);
00246
00247 return;
00248 }
00249
00250
00251 void GlobalHitsProducer::fillG4MC(edm::Event& iEvent)
00252 {
00253
00254 std::string MsgLoggerCat = "GlobalHitsProducer_fillG4MC";
00255
00256 TString eventout;
00257 if (verbosity > 0)
00258 eventout = "\nGathering info:";
00259
00261
00263 edm::Handle<edm::HepMCProduct> HepMCEvt;
00264 std::vector<edm::Handle<edm::HepMCProduct> > AllHepMCEvt;
00265 iEvent.getManyByType(AllHepMCEvt);
00266
00267
00268
00269 for (unsigned int i = 0; i < AllHepMCEvt.size(); ++i) {
00270 HepMCEvt = AllHepMCEvt[i];
00271 if ((HepMCEvt.provenance()->product()).moduleLabel() == "VtxSmeared")
00272 break;
00273 }
00274
00275 if (!HepMCEvt.isValid()) {
00276 edm::LogWarning(MsgLoggerCat)
00277 << "Unable to find HepMCProduct in event!";
00278 return;
00279 } else {
00280 eventout += "\n Using HepMCProduct: ";
00281 eventout += (HepMCEvt.provenance()->product()).moduleLabel();
00282 }
00283 const HepMC::GenEvent* MCEvt = HepMCEvt->GetEvent();
00284 nRawGenPart = MCEvt->particles_size();
00285
00286 if (verbosity > 1) {
00287 eventout += "\n Number of Raw Particles collected:......... ";
00288 eventout += nRawGenPart;
00289 }
00290
00292
00294
00295 float unit = 0.;
00296 if (vtxunit == 0) unit = 1.;
00297 if (vtxunit == 1) unit = 10.;
00298
00299 edm::Handle<edm::SimVertexContainer> G4VtxContainer;
00300 iEvent.getByLabel(G4VtxSrc_, G4VtxContainer);
00301 if (!G4VtxContainer.isValid()) {
00302 edm::LogWarning(MsgLoggerCat)
00303 << "Unable to find SimVertex in event!";
00304 return;
00305 }
00306 int i = 0;
00307 edm::SimVertexContainer::const_iterator itVtx;
00308 for (itVtx = G4VtxContainer->begin(); itVtx != G4VtxContainer->end();
00309 ++itVtx) {
00310
00311 ++i;
00312
00313 const math::XYZTLorentzVector G4Vtx1(itVtx->position().x(),
00314 itVtx->position().y(),
00315 itVtx->position().z(),
00316 itVtx->position().e());
00317 double G4Vtx[4];
00318 G4Vtx1.GetCoordinates(G4Vtx);
00319
00320 G4VtxX.push_back((G4Vtx[0]*unit)/micrometer);
00321 G4VtxY.push_back((G4Vtx[1]*unit)/micrometer);
00322 G4VtxZ.push_back((G4Vtx[2]*unit)/millimeter);
00323 }
00324
00325 if (verbosity > 1) {
00326 eventout += "\n Number of G4Vertices collected:............ ";
00327 eventout += i;
00328 }
00329
00331
00333 edm::Handle<edm::SimTrackContainer> G4TrkContainer;
00334 iEvent.getByLabel(G4TrkSrc_, G4TrkContainer);
00335 if (!G4TrkContainer.isValid()) {
00336 edm::LogWarning(MsgLoggerCat)
00337 << "Unable to find SimTrack in event!";
00338 return;
00339 }
00340 i = 0;
00341 edm::SimTrackContainer::const_iterator itTrk;
00342 for (itTrk = G4TrkContainer->begin(); itTrk != G4TrkContainer->end();
00343 ++itTrk) {
00344
00345 ++i;
00346
00347 const math::XYZTLorentzVector G4Trk1(itTrk->momentum().x(),
00348 itTrk->momentum().y(),
00349 itTrk->momentum().z(),
00350 itTrk->momentum().e());
00351 double G4Trk[4];
00352 G4Trk1.GetCoordinates(G4Trk);
00353
00354 G4TrkPt.push_back(sqrt(G4Trk[0]*G4Trk[0]+G4Trk[1]*G4Trk[1]));
00355 G4TrkE.push_back(G4Trk[3]);
00356 }
00357
00358 if (verbosity > 1) {
00359 eventout += "\n Number of G4Tracks collected:.............. ";
00360 eventout += i;
00361 }
00362
00363 if (verbosity > 0)
00364 edm::LogInfo(MsgLoggerCat) << eventout << "\n";
00365
00366 return;
00367 }
00368
00369 void GlobalHitsProducer::storeG4MC(PGlobalSimHit& product)
00370 {
00371 std::string MsgLoggerCat = "GlobalHitsProducer_storeG4MC";
00372
00373 if (verbosity > 2) {
00374 TString eventout("\n nRawGenPart = ");
00375 eventout += nRawGenPart;
00376 eventout += "\n nG4Vtx = ";
00377 eventout += G4VtxX.size();
00378 for (unsigned int i = 0; i < G4VtxX.size(); ++i) {
00379 eventout += "\n (x,y,z) = (";
00380 eventout += G4VtxX[i];
00381 eventout += ", ";
00382 eventout += G4VtxY[i];
00383 eventout += ", ";
00384 eventout += G4VtxZ[i];
00385 eventout += ")";
00386 }
00387 eventout += "\n nG4Trk = ";
00388 eventout += G4TrkPt.size();
00389 for (unsigned int i = 0; i < G4TrkPt.size(); ++i) {
00390 eventout += "\n (pt,e) = (";
00391 eventout += G4TrkPt[i];
00392 eventout += ", ";
00393 eventout += G4TrkE[i];
00394 eventout += ")";
00395 }
00396 edm::LogInfo(MsgLoggerCat) << eventout << "\n";
00397 }
00398
00399 product.putRawGenPart(nRawGenPart);
00400 product.putG4Vtx(G4VtxX, G4VtxY, G4VtxZ);
00401 product.putG4Trk(G4TrkPt, G4TrkE);
00402
00403 return;
00404 }
00405
00406 void GlobalHitsProducer::fillTrk(edm::Event& iEvent,
00407 const edm::EventSetup& iSetup)
00408 {
00409 std::string MsgLoggerCat = "GlobalHitsProducer_fillTrk";
00410
00411 TString eventout;
00412 if (verbosity > 0)
00413 eventout = "\nGathering info:";
00414
00415
00416 edm::ESHandle<TrackerGeometry> theTrackerGeometry;
00417 iSetup.get<TrackerDigiGeometryRecord>().get(theTrackerGeometry);
00418 if (!theTrackerGeometry.isValid()) {
00419 edm::LogWarning(MsgLoggerCat)
00420 << "Unable to find TrackerDigiGeometryRecord in event!";
00421 return;
00422 }
00423 const TrackerGeometry& theTracker(*theTrackerGeometry);
00424
00425
00426 edm::PSimHitContainer::const_iterator itHit;
00427
00429
00431 edm::PSimHitContainer thePxlBrlHits;
00432
00433 edm::Handle<edm::PSimHitContainer> PxlBrlLowContainer;
00434 iEvent.getByLabel(PxlBrlLowSrc_,PxlBrlLowContainer);
00435 if (!PxlBrlLowContainer.isValid()) {
00436 edm::LogWarning(MsgLoggerCat)
00437 << "Unable to find TrackerHitsPixelBarrelLowTof in event!";
00438 return;
00439 }
00440
00441 edm::Handle<edm::PSimHitContainer> PxlBrlHighContainer;
00442 iEvent.getByLabel(PxlBrlHighSrc_,PxlBrlHighContainer);
00443 if (!PxlBrlHighContainer.isValid()) {
00444 edm::LogWarning(MsgLoggerCat)
00445 << "Unable to find TrackerHitsPixelBarrelHighTof in event!";
00446 return;
00447 }
00448
00449 thePxlBrlHits.insert(thePxlBrlHits.end(),PxlBrlLowContainer->begin(),
00450 PxlBrlLowContainer->end());
00451 thePxlBrlHits.insert(thePxlBrlHits.end(),PxlBrlHighContainer->begin(),
00452 PxlBrlHighContainer->end());
00453
00454
00455 int i = 0, j = 0;
00456 for (itHit = thePxlBrlHits.begin(); itHit != thePxlBrlHits.end(); ++itHit) {
00457
00458 ++i;
00459
00460
00461 DetId theDetUnitId(itHit->detUnitId());
00462 int detector = theDetUnitId.det();
00463 int subdetector = theDetUnitId.subdetId();
00464
00465
00466 if ((detector == dTrk) && (subdetector == sdPxlBrl)) {
00467
00468
00469 const GeomDetUnit *theDet = theTracker.idToDetUnit(theDetUnitId);
00470
00471 if (!theDet) {
00472 edm::LogWarning(MsgLoggerCat)
00473 << "Unable to get GeomDetUnit from PxlBrlHits for Hit " << i;
00474 continue;
00475 }
00476
00477 ++j;
00478
00479
00480 const BoundPlane& bSurface = theDet->surface();
00481
00482
00483 PxlBrlToF.push_back(itHit->tof());
00484 PxlBrlR.push_back(bSurface.toGlobal(itHit->localPosition()).perp());
00485 PxlBrlPhi.push_back(bSurface.toGlobal(itHit->localPosition()).phi());
00486 PxlBrlEta.push_back(bSurface.toGlobal(itHit->localPosition()).eta());
00487
00488 } else {
00489 edm::LogWarning(MsgLoggerCat)
00490 << "PxlBrl PSimHit " << i
00491 << " is expected to be (det,subdet) = ("
00492 << dTrk << "," << sdPxlBrl
00493 << "); value returned is: ("
00494 << detector << "," << subdetector << ")";
00495 continue;
00496 }
00497 }
00498
00499 if (verbosity > 1) {
00500 eventout += "\n Number of Pixel Barrel Hits collected:..... ";
00501 eventout += j;
00502 }
00503
00505
00507 edm::PSimHitContainer thePxlFwdHits;
00508
00509 edm::Handle<edm::PSimHitContainer> PxlFwdLowContainer;
00510 iEvent.getByLabel(PxlFwdLowSrc_,PxlFwdLowContainer);
00511 if (!PxlFwdLowContainer.isValid()) {
00512 edm::LogWarning(MsgLoggerCat)
00513 << "Unable to find TrackerHitsPixelEndcapLowTof in event!";
00514 return;
00515 }
00516
00517 edm::Handle<edm::PSimHitContainer> PxlFwdHighContainer;
00518 iEvent.getByLabel(PxlFwdHighSrc_,PxlFwdHighContainer);
00519 if (!PxlFwdHighContainer.isValid()) {
00520 edm::LogWarning("GlobalHitsProducer_fillTrk")
00521 << "Unable to find TrackerHitsPixelEndcapHighTof in event!";
00522 return;
00523 }
00524
00525 thePxlFwdHits.insert(thePxlFwdHits.end(),PxlFwdLowContainer->begin(),
00526 PxlFwdLowContainer->end());
00527 thePxlFwdHits.insert(thePxlFwdHits.end(),PxlFwdHighContainer->begin(),
00528 PxlFwdHighContainer->end());
00529
00530
00531 i = 0; j = 0;
00532 for (itHit = thePxlFwdHits.begin(); itHit != thePxlFwdHits.end(); ++itHit) {
00533
00534 ++i;
00535
00536
00537 DetId theDetUnitId(itHit->detUnitId());
00538 int detector = theDetUnitId.det();
00539 int subdetector = theDetUnitId.subdetId();
00540
00541
00542 if ((detector == dTrk) && (subdetector == sdPxlFwd)) {
00543
00544
00545 const GeomDetUnit *theDet = theTracker.idToDetUnit(theDetUnitId);
00546
00547 if (!theDet) {
00548 edm::LogWarning(MsgLoggerCat)
00549 << "Unable to get GeomDetUnit from PxlFwdHits for Hit " << i;;
00550 continue;
00551 }
00552
00553 ++j;
00554
00555
00556 const BoundPlane& bSurface = theDet->surface();
00557
00558
00559 PxlFwdToF.push_back(itHit->tof());
00560 PxlFwdZ.push_back(bSurface.toGlobal(itHit->localPosition()).z());
00561 PxlFwdPhi.push_back(bSurface.toGlobal(itHit->localPosition()).phi());
00562 PxlFwdEta.push_back(bSurface.toGlobal(itHit->localPosition()).eta());
00563 } else {
00564 edm::LogWarning(MsgLoggerCat)
00565 << "PxlFwd PSimHit " << i
00566 << " is expected to be (det,subdet) = ("
00567 << dTrk << "," << sdPxlFwd
00568 << "); value returned is: ("
00569 << detector << "," << subdetector << ")";
00570 continue;
00571 }
00572 }
00573
00574 if (verbosity > 1) {
00575 eventout += "\n Number of Pixel Forward Hits collected:.... ";
00576 eventout += j;
00577 }
00578
00580
00582 edm::PSimHitContainer theSiBrlHits;
00583
00584 edm::Handle<edm::PSimHitContainer> SiTIBLowContainer;
00585 iEvent.getByLabel(SiTIBLowSrc_,SiTIBLowContainer);
00586 if (!SiTIBLowContainer.isValid()) {
00587 edm::LogWarning(MsgLoggerCat)
00588 << "Unable to find TrackerHitsTIBLowTof in event!";
00589 return;
00590 }
00591
00592 edm::Handle<edm::PSimHitContainer> SiTIBHighContainer;
00593 iEvent.getByLabel(SiTIBHighSrc_,SiTIBHighContainer);
00594 if (!SiTIBHighContainer.isValid()) {
00595 edm::LogWarning(MsgLoggerCat)
00596 << "Unable to find TrackerHitsTIBHighTof in event!";
00597 return;
00598 }
00599
00600 edm::Handle<edm::PSimHitContainer> SiTOBLowContainer;
00601 iEvent.getByLabel(SiTOBLowSrc_,SiTOBLowContainer);
00602 if (!SiTOBLowContainer.isValid()) {
00603 edm::LogWarning(MsgLoggerCat)
00604 << "Unable to find TrackerHitsTOBLowTof in event!";
00605 return;
00606 }
00607
00608 edm::Handle<edm::PSimHitContainer> SiTOBHighContainer;
00609 iEvent.getByLabel(SiTOBHighSrc_,SiTOBHighContainer);
00610 if (!SiTOBHighContainer.isValid()) {
00611 edm::LogWarning(MsgLoggerCat)
00612 << "Unable to find TrackerHitsTOBHighTof in event!";
00613 return;
00614 }
00615
00616 theSiBrlHits.insert(theSiBrlHits.end(),SiTIBLowContainer->begin(),
00617 SiTIBLowContainer->end());
00618 theSiBrlHits.insert(theSiBrlHits.end(),SiTIBHighContainer->begin(),
00619 SiTIBHighContainer->end());
00620 theSiBrlHits.insert(theSiBrlHits.end(),SiTOBLowContainer->begin(),
00621 SiTOBLowContainer->end());
00622 theSiBrlHits.insert(theSiBrlHits.end(),SiTOBHighContainer->begin(),
00623 SiTOBHighContainer->end());
00624
00625
00626 i = 0; j = 0;
00627 for (itHit = theSiBrlHits.begin(); itHit != theSiBrlHits.end(); ++itHit) {
00628
00629 ++i;
00630
00631
00632 DetId theDetUnitId(itHit->detUnitId());
00633 int detector = theDetUnitId.det();
00634 int subdetector = theDetUnitId.subdetId();
00635
00636
00637 if ((detector == dTrk) &&
00638 ((subdetector == sdSiTIB) ||
00639 (subdetector == sdSiTOB))) {
00640
00641
00642 const GeomDetUnit *theDet = theTracker.idToDetUnit(theDetUnitId);
00643
00644 if (!theDet) {
00645 edm::LogWarning(MsgLoggerCat)
00646 << "Unable to get GeomDetUnit from SiBrlHits for Hit " << i;
00647 continue;
00648 }
00649
00650 ++j;
00651
00652
00653 const BoundPlane& bSurface = theDet->surface();
00654
00655
00656 SiBrlToF.push_back(itHit->tof());
00657 SiBrlR.push_back(bSurface.toGlobal(itHit->localPosition()).perp());
00658 SiBrlPhi.push_back(bSurface.toGlobal(itHit->localPosition()).phi());
00659 SiBrlEta.push_back(bSurface.toGlobal(itHit->localPosition()).eta());
00660 } else {
00661 edm::LogWarning(MsgLoggerCat)
00662 << "SiBrl PSimHit " << i
00663 << " is expected to be (det,subdet) = ("
00664 << dTrk << "," << sdSiTIB
00665 << " || " << sdSiTOB << "); value returned is: ("
00666 << detector << "," << subdetector << ")";
00667 continue;
00668 }
00669 }
00670
00671 if (verbosity > 1) {
00672 eventout += "\n Number of Silicon Barrel Hits collected:... ";
00673 eventout += j;
00674 }
00675
00677
00679 edm::PSimHitContainer theSiFwdHits;
00680
00681 edm::Handle<edm::PSimHitContainer> SiTIDLowContainer;
00682 iEvent.getByLabel(SiTIDLowSrc_,SiTIDLowContainer);
00683 if (!SiTIDLowContainer.isValid()) {
00684 edm::LogWarning(MsgLoggerCat)
00685 << "Unable to find TrackerHitsTIDLowTof in event!";
00686 return;
00687 }
00688
00689 edm::Handle<edm::PSimHitContainer> SiTIDHighContainer;
00690 iEvent.getByLabel(SiTIDHighSrc_,SiTIDHighContainer);
00691 if (!SiTIDHighContainer.isValid()) {
00692 edm::LogWarning("GlobalHitsProducer_fillTrk")
00693 << "Unable to find TrackerHitsTIDHighTof in event!";
00694 return;
00695 }
00696
00697 edm::Handle<edm::PSimHitContainer> SiTECLowContainer;
00698 iEvent.getByLabel(SiTECLowSrc_,SiTECLowContainer);
00699 if (!SiTECLowContainer.isValid()) {
00700 edm::LogWarning(MsgLoggerCat)
00701 << "Unable to find TrackerHitsTECLowTof in event!";
00702 return;
00703 }
00704
00705 edm::Handle<edm::PSimHitContainer> SiTECHighContainer;
00706 iEvent.getByLabel(SiTECHighSrc_,SiTECHighContainer);
00707 if (!SiTECHighContainer.isValid()) {
00708 edm::LogWarning(MsgLoggerCat)
00709 << "Unable to find TrackerHitsTECHighTof in event!";
00710 return;
00711 }
00712
00713 theSiFwdHits.insert(theSiFwdHits.end(),SiTIDLowContainer->begin(),
00714 SiTIDLowContainer->end());
00715 theSiFwdHits.insert(theSiFwdHits.end(),SiTIDHighContainer->begin(),
00716 SiTIDHighContainer->end());
00717 theSiFwdHits.insert(theSiFwdHits.end(),SiTECLowContainer->begin(),
00718 SiTECLowContainer->end());
00719 theSiFwdHits.insert(theSiFwdHits.end(),SiTECHighContainer->begin(),
00720 SiTECHighContainer->end());
00721
00722
00723 i = 0; j = 0;
00724 for (itHit = theSiFwdHits.begin(); itHit != theSiFwdHits.end(); ++itHit) {
00725
00726 ++i;
00727
00728
00729 DetId theDetUnitId(itHit->detUnitId());
00730 int detector = theDetUnitId.det();
00731 int subdetector = theDetUnitId.subdetId();
00732
00733
00734 if ((detector == dTrk) &&
00735 ((subdetector == sdSiTID) ||
00736 (subdetector == sdSiTEC))) {
00737
00738
00739 const GeomDetUnit *theDet = theTracker.idToDetUnit(theDetUnitId);
00740
00741 if (!theDet) {
00742 edm::LogWarning(MsgLoggerCat)
00743 << "Unable to get GeomDetUnit from SiFwdHits Hit " << i;
00744 return;
00745 }
00746
00747 ++j;
00748
00749
00750 const BoundPlane& bSurface = theDet->surface();
00751
00752
00753 SiFwdToF.push_back(itHit->tof());
00754 SiFwdZ.push_back(bSurface.toGlobal(itHit->localPosition()).z());
00755 SiFwdPhi.push_back(bSurface.toGlobal(itHit->localPosition()).phi());
00756 SiFwdEta.push_back(bSurface.toGlobal(itHit->localPosition()).eta());
00757 } else {
00758 edm::LogWarning(MsgLoggerCat)
00759 << "SiFwd PSimHit " << i
00760 << " is expected to be (det,subdet) = ("
00761 << dTrk << "," << sdSiTOB
00762 << " || " << sdSiTEC << "); value returned is: ("
00763 << detector << "," << subdetector << ")";
00764 continue;
00765 }
00766 }
00767
00768 if (verbosity > 1) {
00769 eventout += "\n Number of Silicon Forward Hits collected:.. ";
00770 eventout += j;
00771 }
00772
00773 if (verbosity > 0)
00774 edm::LogInfo(MsgLoggerCat) << eventout << "\n";
00775
00776 return;
00777 }
00778
00779 void GlobalHitsProducer::storeTrk(PGlobalSimHit& product)
00780 {
00781 std::string MsgLoggerCat = "GlobalHitsProducer_storeTrk";
00782
00783 if (verbosity > 2) {
00784 TString eventout("\n nPxlBrlHits = ");
00785 eventout += PxlBrlToF.size();
00786 for (unsigned int i = 0; i < PxlBrlToF.size(); ++i) {
00787 eventout += "\n (tof,r,phi,eta) = (";
00788 eventout += PxlBrlToF[i];
00789 eventout += ", ";
00790 eventout += PxlBrlR[i];
00791 eventout += ", ";
00792 eventout += PxlBrlPhi[i];
00793 eventout += ", ";
00794 eventout += PxlBrlEta[i];
00795 eventout += ")";
00796 }
00797 eventout += "\n nPxlFwdHits = ";
00798 eventout += PxlFwdToF.size();
00799 for (unsigned int i = 0; i < PxlFwdToF.size(); ++i) {
00800 eventout += "\n (tof,z,phi,eta) = (";
00801 eventout += PxlFwdToF[i];
00802 eventout += ", ";
00803 eventout += PxlFwdZ[i];
00804 eventout += ", ";
00805 eventout += PxlFwdPhi[i];
00806 eventout += ", ";
00807 eventout += PxlFwdEta[i];
00808 eventout += ")";
00809 }
00810 eventout += "\n nSiBrlHits = ";
00811 eventout += SiBrlToF.size();
00812 for (unsigned int i = 0; i < SiBrlToF.size(); ++i) {
00813 eventout += "\n (tof,r,phi,eta) = (";
00814 eventout += SiBrlToF[i];
00815 eventout += ", ";
00816 eventout += SiBrlR[i];
00817 eventout += ", ";
00818 eventout += SiBrlPhi[i];
00819 eventout += ", ";
00820 eventout += SiBrlEta[i];
00821 eventout += ")";
00822 }
00823 eventout += "\n nSiFwdHits = ";
00824 eventout += SiFwdToF.size();
00825 for (unsigned int i = 0; i < SiFwdToF.size(); ++i) {
00826 eventout += "\n (tof,z,phi,eta) = (";
00827 eventout += SiFwdToF[i];
00828 eventout += ", ";
00829 eventout += SiFwdZ[i];
00830 eventout += ", ";
00831 eventout += SiFwdPhi[i];
00832 eventout += ", ";
00833 eventout += SiFwdEta[i];
00834 eventout += ")";
00835 }
00836 edm::LogInfo(MsgLoggerCat) << eventout << "\n";
00837 }
00838
00839 product.putPxlBrlHits(PxlBrlToF,PxlBrlR,PxlBrlPhi,PxlBrlEta);
00840 product.putPxlFwdHits(PxlFwdToF,PxlFwdZ,PxlFwdPhi,PxlFwdEta);
00841 product.putSiBrlHits(SiBrlToF,SiBrlR,SiBrlPhi,SiBrlEta);
00842 product.putSiFwdHits(SiFwdToF,SiFwdZ,SiFwdPhi,SiFwdEta);
00843
00844 return;
00845 }
00846
00847 void GlobalHitsProducer::fillMuon(edm::Event& iEvent,
00848 const edm::EventSetup& iSetup)
00849 {
00850 std::string MsgLoggerCat = "GlobalHitsProducer_fillMuon";
00851
00852 TString eventout;
00853 if (verbosity > 0)
00854 eventout = "\nGathering info:";
00855
00856
00857 edm::PSimHitContainer::const_iterator itHit;
00858
00859
00861
00863
00864 edm::ESHandle<CSCGeometry> theCSCGeometry;
00865 iSetup.get<MuonGeometryRecord>().get(theCSCGeometry);
00866 if (!theCSCGeometry.isValid()) {
00867 edm::LogWarning(MsgLoggerCat)
00868 << "Unable to find MuonGeometryRecord for the CSCGeometry in event!";
00869 return;
00870 }
00871 const CSCGeometry& theCSCMuon(*theCSCGeometry);
00872
00873
00874 edm::Handle<edm::PSimHitContainer> MuonCSCContainer;
00875 iEvent.getByLabel(MuonCscSrc_,MuonCSCContainer);
00876 if (!MuonCSCContainer.isValid()) {
00877 edm::LogWarning(MsgLoggerCat)
00878 << "Unable to find MuonCSCHits in event!";
00879 return;
00880 }
00881
00882
00883 int i = 0, j = 0;
00884 for (itHit = MuonCSCContainer->begin(); itHit != MuonCSCContainer->end();
00885 ++itHit) {
00886
00887 ++i;
00888
00889
00890 DetId theDetUnitId(itHit->detUnitId());
00891 int detector = theDetUnitId.det();
00892 int subdetector = theDetUnitId.subdetId();
00893
00894
00895 if ((detector == dMuon) &&
00896 (subdetector == sdMuonCSC)) {
00897
00898
00899 const GeomDetUnit *theDet = theCSCMuon.idToDetUnit(theDetUnitId);
00900
00901 if (!theDet) {
00902 edm::LogWarning(MsgLoggerCat)
00903 << "Unable to get GeomDetUnit from theCSCMuon for hit " << i;
00904 continue;
00905 }
00906
00907 ++j;
00908
00909
00910 const BoundPlane& bSurface = theDet->surface();
00911
00912
00913 MuonCscToF.push_back(itHit->tof());
00914 MuonCscZ.push_back(bSurface.toGlobal(itHit->localPosition()).z());
00915 MuonCscPhi.push_back(bSurface.toGlobal(itHit->localPosition()).phi());
00916 MuonCscEta.push_back(bSurface.toGlobal(itHit->localPosition()).eta());
00917 } else {
00918 edm::LogWarning(MsgLoggerCat)
00919 << "MuonCsc PSimHit " << i
00920 << " is expected to be (det,subdet) = ("
00921 << dMuon << "," << sdMuonCSC
00922 << "); value returned is: ("
00923 << detector << "," << subdetector << ")";
00924 continue;
00925 }
00926 }
00927
00928 if (verbosity > 1) {
00929 eventout += "\n Number of CSC muon Hits collected:......... ";
00930 eventout += j;
00931 }
00932
00933
00935
00937
00938 edm::ESHandle<DTGeometry> theDTGeometry;
00939 iSetup.get<MuonGeometryRecord>().get(theDTGeometry);
00940 if (!theDTGeometry.isValid()) {
00941 edm::LogWarning(MsgLoggerCat)
00942 << "Unable to find MuonGeometryRecord for the DTGeometry in event!";
00943 return;
00944 }
00945 const DTGeometry& theDTMuon(*theDTGeometry);
00946
00947
00948 edm::Handle<edm::PSimHitContainer> MuonDtContainer;
00949 iEvent.getByLabel(MuonDtSrc_,MuonDtContainer);
00950 if (!MuonDtContainer.isValid()) {
00951 edm::LogWarning(MsgLoggerCat)
00952 << "Unable to find MuonDTHits in event!";
00953 return;
00954 }
00955
00956
00957 i = 0, j = 0;
00958 for (itHit = MuonDtContainer->begin(); itHit != MuonDtContainer->end();
00959 ++itHit) {
00960
00961 ++i;
00962
00963
00964 DetId theDetUnitId(itHit->detUnitId());
00965 int detector = theDetUnitId.det();
00966 int subdetector = theDetUnitId.subdetId();
00967
00968
00969 if ((detector == dMuon) &&
00970 (subdetector == sdMuonDT)) {
00971
00972
00973
00974 DTWireId wireId(itHit->detUnitId());
00975
00976
00977 const DTLayer *theDet = theDTMuon.layer(wireId.layerId());
00978
00979 if (!theDet) {
00980 edm::LogWarning(MsgLoggerCat)
00981 << "Unable to get GeomDetUnit from theDtMuon for hit " << i;
00982 continue;
00983 }
00984
00985 ++j;
00986
00987
00988 const BoundPlane& bSurface = theDet->surface();
00989
00990
00991 MuonDtToF.push_back(itHit->tof());
00992 MuonDtR.push_back(bSurface.toGlobal(itHit->localPosition()).perp());
00993 MuonDtPhi.push_back(bSurface.toGlobal(itHit->localPosition()).phi());
00994 MuonDtEta.push_back(bSurface.toGlobal(itHit->localPosition()).eta());
00995 } else {
00996 edm::LogWarning(MsgLoggerCat)
00997 << "MuonDt PSimHit " << i
00998 << " is expected to be (det,subdet) = ("
00999 << dMuon << "," << sdMuonDT
01000 << "); value returned is: ("
01001 << detector << "," << subdetector << ")";
01002 continue;
01003 }
01004 }
01005
01006 if (verbosity > 1) {
01007 eventout += "\n Number of DT muon Hits collected:.......... ";
01008 eventout += j;
01009 }
01010
01011
01012
01014
01016
01017 edm::ESHandle<RPCGeometry> theRPCGeometry;
01018 iSetup.get<MuonGeometryRecord>().get(theRPCGeometry);
01019 if (!theRPCGeometry.isValid()) {
01020 edm::LogWarning(MsgLoggerCat)
01021 << "Unable to find MuonGeometryRecord for the RPCGeometry in event!";
01022 return;
01023 }
01024 const RPCGeometry& theRPCMuon(*theRPCGeometry);
01025
01026
01027 edm::Handle<edm::PSimHitContainer> MuonRPCContainer;
01028 iEvent.getByLabel(MuonRpcSrc_,MuonRPCContainer);
01029 if (!MuonRPCContainer.isValid()) {
01030 edm::LogWarning(MsgLoggerCat)
01031 << "Unable to find MuonRPCHits in event!";
01032 return;
01033 }
01034
01035
01036 i = 0, j = 0;
01037 int RPCBrl =0, RPCFwd = 0;
01038 for (itHit = MuonRPCContainer->begin(); itHit != MuonRPCContainer->end();
01039 ++itHit) {
01040
01041 ++i;
01042
01043
01044 DetId theDetUnitId(itHit->detUnitId());
01045 int detector = theDetUnitId.det();
01046 int subdetector = theDetUnitId.subdetId();
01047
01048
01049 if ((detector == dMuon) &&
01050 (subdetector == sdMuonRPC)) {
01051
01052
01053 RPCDetId RPCId(itHit->detUnitId());
01054
01055
01056 int region = RPCId.region();
01057
01058
01059 const GeomDetUnit *theDet = theRPCMuon.idToDetUnit(theDetUnitId);
01060
01061 if (!theDet) {
01062 edm::LogWarning(MsgLoggerCat)
01063 << "Unable to get GeomDetUnit from theRPCMuon for hit " << i;
01064 continue;
01065 }
01066
01067 ++j;
01068
01069
01070 const BoundPlane& bSurface = theDet->surface();
01071
01072
01073 if ((region == sdMuonRPCRgnFwdp) || (region == sdMuonRPCRgnFwdn)) {
01074 ++RPCFwd;
01075
01076 MuonRpcFwdToF.push_back(itHit->tof());
01077 MuonRpcFwdZ.push_back(bSurface.toGlobal(itHit->localPosition()).z());
01078 MuonRpcFwdPhi.
01079 push_back(bSurface.toGlobal(itHit->localPosition()).phi());
01080 MuonRpcFwdEta.
01081 push_back(bSurface.toGlobal(itHit->localPosition()).eta());
01082 } else if (region == sdMuonRPCRgnBrl) {
01083 ++RPCBrl;
01084
01085 MuonRpcBrlToF.push_back(itHit->tof());
01086 MuonRpcBrlR.
01087 push_back(bSurface.toGlobal(itHit->localPosition()).perp());
01088 MuonRpcBrlPhi.
01089 push_back(bSurface.toGlobal(itHit->localPosition()).phi());
01090 MuonRpcBrlEta.
01091 push_back(bSurface.toGlobal(itHit->localPosition()).eta());
01092 } else {
01093 edm::LogWarning(MsgLoggerCat)
01094 << "Invalid region for RPC Muon hit" << i;
01095 continue;
01096 }
01097 } else {
01098 edm::LogWarning(MsgLoggerCat)
01099 << "MuonRpc PSimHit " << i
01100 << " is expected to be (det,subdet) = ("
01101 << dMuon << "," << sdMuonRPC
01102 << "); value returned is: ("
01103 << detector << "," << subdetector << ")";
01104 continue;
01105 }
01106 }
01107
01108 if (verbosity > 1) {
01109 eventout += "\n Number of RPC muon Hits collected:......... ";
01110 eventout += j;
01111 eventout += "\n RPC Barrel muon Hits:............ ";
01112 eventout += RPCBrl;
01113 eventout += "\n RPC Forward muon Hits:........... ";
01114 eventout += RPCFwd;
01115 }
01116
01117 if (verbosity > 0)
01118 edm::LogInfo(MsgLoggerCat) << eventout << "\n";
01119
01120 return;
01121 }
01122
01123 void GlobalHitsProducer::storeMuon(PGlobalSimHit& product)
01124 {
01125 std::string MsgLoggerCat = "GlobalHitsProducer_storeMuon";
01126
01127 if (verbosity > 2) {
01128 TString eventout("\n nMuonCSCHits = ");
01129 eventout += MuonCscToF.size();
01130 for (unsigned int i = 0; i < MuonCscToF.size(); ++i) {
01131 eventout += "\n (tof,z,phi,eta) = (";
01132 eventout += MuonCscToF[i];
01133 eventout += ", ";
01134 eventout += MuonCscZ[i];
01135 eventout += ", ";
01136 eventout += MuonCscPhi[i];
01137 eventout += ", ";
01138 eventout += MuonCscEta[i];
01139 eventout += ")";
01140 }
01141 eventout += "\n nMuonDtHits = ";
01142 eventout += MuonDtToF.size();
01143 for (unsigned int i = 0; i < MuonDtToF.size(); ++i) {
01144 eventout += "\n (tof,r,phi,eta) = (";
01145 eventout += MuonDtToF[i];
01146 eventout += ", ";
01147 eventout += MuonDtR[i];
01148 eventout += ", ";
01149 eventout += MuonDtPhi[i];
01150 eventout += ", ";
01151 eventout += MuonDtEta[i];
01152 eventout += ")";
01153 }
01154 eventout += "\n nMuonRpcBrlHits = ";
01155 eventout += MuonRpcBrlToF.size();
01156 for (unsigned int i = 0; i < MuonRpcBrlToF.size(); ++i) {
01157 eventout += "\n (tof,r,phi,eta) = (";
01158 eventout += MuonRpcBrlToF[i];
01159 eventout += ", ";
01160 eventout += MuonRpcBrlR[i];
01161 eventout += ", ";
01162 eventout += MuonRpcBrlPhi[i];
01163 eventout += ", ";
01164 eventout += MuonRpcBrlEta[i];
01165 eventout += ")";
01166 }
01167 eventout += "\n nMuonRpcFwdHits = ";
01168 eventout += MuonRpcFwdToF.size();
01169 for (unsigned int i = 0; i < MuonRpcFwdToF.size(); ++i) {
01170 eventout += "\n (tof,z,phi,eta) = (";
01171 eventout += MuonRpcFwdToF[i];
01172 eventout += ", ";
01173 eventout += MuonRpcFwdZ[i];
01174 eventout += ", ";
01175 eventout += MuonRpcFwdPhi[i];
01176 eventout += ", ";
01177 eventout += MuonRpcFwdEta[i];
01178 eventout += ")";
01179 }
01180 edm::LogInfo(MsgLoggerCat) << eventout << "\n";
01181 }
01182
01183 product.putMuonCscHits(MuonCscToF,MuonCscZ,MuonCscPhi,MuonCscEta);
01184 product.putMuonDtHits(MuonDtToF,MuonDtR,MuonDtPhi,MuonDtEta);
01185 product.putMuonRpcBrlHits(MuonRpcBrlToF,MuonRpcBrlR,MuonRpcBrlPhi,
01186 MuonRpcBrlEta);
01187 product.putMuonRpcFwdHits(MuonRpcFwdToF,MuonRpcFwdZ,MuonRpcFwdPhi,
01188 MuonRpcFwdEta);
01189
01190 return;
01191 }
01192
01193 void GlobalHitsProducer::fillECal(edm::Event& iEvent,
01194 const edm::EventSetup& iSetup)
01195 {
01196 std::string MsgLoggerCat = "GlobalHitsProducer_fillECal";
01197
01198 TString eventout;
01199 if (verbosity > 0)
01200 eventout = "\nGathering info:";
01201
01202
01203 edm::ESHandle<CaloGeometry> theCaloGeometry;
01204 iSetup.get<CaloGeometryRecord>().get(theCaloGeometry);
01205 if (!theCaloGeometry.isValid()) {
01206 edm::LogWarning(MsgLoggerCat)
01207 << "Unable to find CaloGeometryRecord in event!";
01208 return;
01209 }
01210 const CaloGeometry& theCalo(*theCaloGeometry);
01211
01212
01213 edm::PCaloHitContainer::const_iterator itHit;
01214
01216
01218 edm::PCaloHitContainer theECalHits;
01219
01220 edm::Handle<edm::PCaloHitContainer> EBContainer;
01221 iEvent.getByLabel(ECalEBSrc_,EBContainer);
01222 if (!EBContainer.isValid()) {
01223 edm::LogWarning(MsgLoggerCat)
01224 << "Unable to find EcalHitsEB in event!";
01225 return;
01226 }
01227
01228 edm::Handle<edm::PCaloHitContainer> EEContainer;
01229 iEvent.getByLabel(ECalEESrc_,EEContainer);
01230 if (!EEContainer.isValid()) {
01231 edm::LogWarning(MsgLoggerCat)
01232 << "Unable to find EcalHitsEE in event!";
01233 return;
01234 }
01235
01236 theECalHits.insert(theECalHits.end(),EBContainer->begin(),
01237 EBContainer->end());
01238 theECalHits.insert(theECalHits.end(),EEContainer->begin(),
01239 EEContainer->end());
01240
01241
01242 int i = 0, j = 0;
01243 for (itHit = theECalHits.begin(); itHit != theECalHits.end(); ++itHit) {
01244
01245 ++i;
01246
01247
01248 DetId theDetUnitId(itHit->id());
01249 int detector = theDetUnitId.det();
01250 int subdetector = theDetUnitId.subdetId();
01251
01252
01253 if ((detector == dEcal) &&
01254 ((subdetector == sdEcalBrl) ||
01255 (subdetector == sdEcalFwd))) {
01256
01257
01258 const CaloCellGeometry *theDet = theCalo.
01259 getSubdetectorGeometry(theDetUnitId)->getGeometry(theDetUnitId);
01260
01261 if (!theDet) {
01262 edm::LogWarning(MsgLoggerCat)
01263 << "Unable to get CaloCellGeometry from ECalHits for Hit " << i;
01264 continue;
01265 }
01266
01267 ++j;
01268
01269
01270 const GlobalPoint& globalposition = theDet->getPosition();
01271
01272
01273 ECalE.push_back(itHit->energy());
01274 ECalToF.push_back(itHit->time());
01275 ECalPhi.push_back(globalposition.phi());
01276 ECalEta.push_back(globalposition.eta());
01277
01278 } else {
01279 edm::LogWarning(MsgLoggerCat)
01280 << "ECal PCaloHit " << i
01281 << " is expected to be (det,subdet) = ("
01282 << dEcal << "," << sdEcalBrl
01283 << " || " << sdEcalFwd << "); value returned is: ("
01284 << detector << "," << subdetector << ")";
01285 continue;
01286 }
01287 }
01288
01289 if (verbosity > 1) {
01290 eventout += "\n Number of ECal Hits collected:............. ";
01291 eventout += j;
01292 }
01293
01295
01297
01298 edm::Handle<edm::PCaloHitContainer> PreShContainer;
01299 iEvent.getByLabel(ECalESSrc_,PreShContainer);
01300 if (!PreShContainer.isValid()) {
01301 edm::LogWarning(MsgLoggerCat)
01302 << "Unable to find EcalHitsES in event!";
01303 return;
01304 }
01305
01306
01307 i = 0, j = 0;
01308 for (itHit = PreShContainer->begin();
01309 itHit != PreShContainer->end(); ++itHit) {
01310
01311 ++i;
01312
01313
01314 DetId theDetUnitId(itHit->id());
01315 int detector = theDetUnitId.det();
01316 int subdetector = theDetUnitId.subdetId();
01317
01318
01319 if ((detector == dEcal) &&
01320 (subdetector == sdEcalPS)) {
01321
01322
01323 const CaloCellGeometry *theDet = theCalo.
01324 getSubdetectorGeometry(theDetUnitId)->getGeometry(theDetUnitId);
01325
01326 if (!theDet) {
01327 edm::LogWarning(MsgLoggerCat)
01328 << "Unable to get CaloCellGeometry from PreShContainer for Hit "
01329 << i;
01330 continue;
01331 }
01332
01333 ++j;
01334
01335
01336 const GlobalPoint& globalposition = theDet->getPosition();
01337
01338
01339 PreShE.push_back(itHit->energy());
01340 PreShToF.push_back(itHit->time());
01341 PreShPhi.push_back(globalposition.phi());
01342 PreShEta.push_back(globalposition.eta());
01343
01344 } else {
01345 edm::LogWarning(MsgLoggerCat)
01346 << "PreSh PCaloHit " << i
01347 << " is expected to be (det,subdet) = ("
01348 << dEcal << "," << sdEcalPS
01349 << "); value returned is: ("
01350 << detector << "," << subdetector << ")";
01351 continue;
01352 }
01353 }
01354
01355 if (verbosity > 1) {
01356 eventout += "\n Number of PreSh Hits collected:............ ";
01357 eventout += j;
01358 }
01359
01360 if (verbosity > 0)
01361 edm::LogInfo(MsgLoggerCat) << eventout << "\n";
01362
01363 return;
01364 }
01365
01366 void GlobalHitsProducer::storeECal(PGlobalSimHit& product)
01367 {
01368 std::string MsgLoggerCat = "GlobalHitsProducer_storeECal";
01369
01370 if (verbosity > 2) {
01371 TString eventout("\n nECalHits = ");
01372 eventout += ECalE.size();
01373 for (unsigned int i = 0; i < ECalE.size(); ++i) {
01374 eventout += "\n (e,tof,phi,eta) = (";
01375 eventout += ECalE[i];
01376 eventout += ", ";
01377 eventout += ECalToF[i];
01378 eventout += ", ";
01379 eventout += ECalPhi[i];
01380 eventout += ", ";
01381 eventout += ECalEta[i];
01382 eventout += ")";
01383 }
01384 eventout += "\n nPreShHits = ";
01385 eventout += PreShE.size();
01386 for (unsigned int i = 0; i < PreShE.size(); ++i) {
01387 eventout += "\n (e,tof,phi,eta) = (";
01388 eventout += PreShE[i];
01389 eventout += ", ";
01390 eventout += PreShToF[i];
01391 eventout += ", ";
01392 eventout += PreShPhi[i];
01393 eventout += ", ";
01394 eventout += PreShEta[i];
01395 eventout += ")";
01396 }
01397 edm::LogInfo(MsgLoggerCat) << eventout << "\n";
01398 }
01399
01400 product.putECalHits(ECalE,ECalToF,ECalPhi,ECalEta);
01401 product.putPreShHits(PreShE,PreShToF,PreShPhi,PreShEta);
01402
01403 return;
01404 }
01405
01406 void GlobalHitsProducer::fillHCal(edm::Event& iEvent,
01407 const edm::EventSetup& iSetup)
01408 {
01409 std::string MsgLoggerCat = "GlobalHitsProducer_fillHCal";
01410
01411 TString eventout;
01412 if (verbosity > 0)
01413 eventout = "\nGathering info:";
01414
01415
01416 edm::ESHandle<CaloGeometry> theCaloGeometry;
01417 iSetup.get<CaloGeometryRecord>().get(theCaloGeometry);
01418 if (!theCaloGeometry.isValid()) {
01419 edm::LogWarning(MsgLoggerCat)
01420 << "Unable to find CaloGeometryRecord in event!";
01421 return;
01422 }
01423 const CaloGeometry& theCalo(*theCaloGeometry);
01424
01425
01426 edm::PCaloHitContainer::const_iterator itHit;
01427
01429
01431
01432 edm::Handle<edm::PCaloHitContainer> HCalContainer;
01433 iEvent.getByLabel(HCalSrc_,HCalContainer);
01434 if (!HCalContainer.isValid()) {
01435 edm::LogWarning(MsgLoggerCat)
01436 << "Unable to find HCalHits in event!";
01437 return;
01438 }
01439
01440
01441 int i = 0, j = 0;
01442 for (itHit = HCalContainer->begin();
01443 itHit != HCalContainer->end(); ++itHit) {
01444
01445 ++i;
01446
01447
01448 DetId theDetUnitId(itHit->id());
01449 int detector = theDetUnitId.det();
01450 int subdetector = theDetUnitId.subdetId();
01451
01452
01453 if ((detector == dHcal) &&
01454 ((subdetector == sdHcalBrl) ||
01455 (subdetector == sdHcalEC) ||
01456 (subdetector == sdHcalOut) ||
01457 (subdetector == sdHcalFwd))) {
01458
01459
01460 const CaloCellGeometry *theDet = theCalo.
01461 getSubdetectorGeometry(theDetUnitId)->getGeometry(theDetUnitId);
01462
01463 if (!theDet) {
01464 edm::LogWarning(MsgLoggerCat)
01465 << "Unable to get CaloCellGeometry from HCalContainer for Hit " << i;
01466 continue;
01467 }
01468
01469 ++j;
01470
01471
01472 const GlobalPoint& globalposition = theDet->getPosition();
01473
01474
01475 HCalE.push_back(itHit->energy());
01476 HCalToF.push_back(itHit->time());
01477 HCalPhi.push_back(globalposition.phi());
01478 HCalEta.push_back(globalposition.eta());
01479
01480 } else {
01481 edm::LogWarning(MsgLoggerCat)
01482 << "HCal PCaloHit " << i
01483 << " is expected to be (det,subdet) = ("
01484 << dHcal << "," << sdHcalBrl
01485 << " || " << sdHcalEC << " || " << sdHcalOut << " || " << sdHcalFwd
01486 << "); value returned is: ("
01487 << detector << "," << subdetector << ")";
01488 continue;
01489 }
01490 }
01491
01492 if (verbosity > 1) {
01493 eventout += "\n Number of HCal Hits collected:............. ";
01494 eventout += j;
01495 }
01496
01497 if (verbosity > 0)
01498 edm::LogInfo(MsgLoggerCat) << eventout << "\n";
01499
01500 return;
01501 }
01502
01503 void GlobalHitsProducer::storeHCal(PGlobalSimHit& product)
01504 {
01505 std::string MsgLoggerCat = "GlobalHitsProducer_storeHCal";
01506
01507 if (verbosity > 2) {
01508 TString eventout("\n nHCalHits = ");
01509 eventout += HCalE.size();
01510 for (unsigned int i = 0; i < HCalE.size(); ++i) {
01511 eventout += "\n (e,tof,phi,eta) = (";
01512 eventout += HCalE[i];
01513 eventout += ", ";
01514 eventout += HCalToF[i];
01515 eventout += ", ";
01516 eventout += HCalPhi[i];
01517 eventout += ", ";
01518 eventout += HCalEta[i];
01519 eventout += ")";
01520 }
01521 edm::LogInfo(MsgLoggerCat) << eventout << "\n";
01522 }
01523
01524 product.putHCalHits(HCalE,HCalToF,HCalPhi,HCalEta);
01525
01526 return;
01527 }
01528
01529 void GlobalHitsProducer::clear()
01530 {
01531 std::string MsgLoggerCat = "GlobalHitsProducer_clear";
01532
01533 if (verbosity > 0)
01534 edm::LogInfo(MsgLoggerCat)
01535 << "Clearing event holders";
01536
01537
01538 nRawGenPart = 0;
01539 G4VtxX.clear();
01540 G4VtxY.clear();
01541 G4VtxZ.clear();
01542 G4TrkPt.clear();
01543 G4TrkE.clear();
01544
01545
01546
01547 ECalE.clear();
01548 ECalToF.clear();
01549 ECalPhi.clear();
01550 ECalEta.clear();
01551
01552 PreShE.clear();
01553 PreShToF.clear();
01554 PreShPhi.clear();
01555 PreShEta.clear();
01556
01557
01558
01559 HCalE.clear();
01560 HCalToF.clear();
01561 HCalPhi.clear();
01562 HCalEta.clear();
01563
01564
01565
01566 PxlBrlToF.clear();
01567 PxlBrlR.clear();
01568 PxlBrlPhi.clear();
01569 PxlBrlEta.clear();
01570 PxlFwdToF.clear();
01571 PxlFwdZ.clear();
01572 PxlFwdPhi.clear();
01573 PxlFwdEta.clear();
01574
01575 SiBrlToF.clear();
01576 SiBrlR.clear();
01577 SiBrlPhi.clear();
01578 SiBrlEta.clear();
01579 SiFwdToF.clear();
01580 SiFwdZ.clear();
01581 SiFwdPhi.clear();
01582 SiFwdEta.clear();
01583
01584
01585
01586 MuonDtToF.clear();
01587 MuonDtR.clear();
01588 MuonDtPhi.clear();
01589 MuonDtEta.clear();
01590
01591 MuonCscToF.clear();
01592 MuonCscZ.clear();
01593 MuonCscPhi.clear();
01594 MuonCscEta.clear();
01595
01596 MuonRpcBrlToF.clear();
01597 MuonRpcBrlR.clear();
01598 MuonRpcBrlPhi.clear();
01599 MuonRpcBrlEta.clear();
01600 MuonRpcFwdToF.clear();
01601 MuonRpcFwdZ.clear();
01602 MuonRpcFwdPhi.clear();
01603 MuonRpcFwdEta.clear();
01604
01605 return;
01606 }