00001
00009 #include "Geometry/Records/interface/CaloGeometryRecord.h"
00010
00011 #include "Validation/GlobalHits/interface/GlobalHitsAnalyzer.h"
00012 #include "DQMServices/Core/interface/DQMStore.h"
00013
00014 GlobalHitsAnalyzer::GlobalHitsAnalyzer(const edm::ParameterSet& iPSet) :
00015 fName(""), verbosity(0), frequency(0), vtxunit(0), label(""),
00016 getAllProvenances(false), printProvenanceInfo(false), count(0)
00017 {
00018 std::string MsgLoggerCat = "GlobalHitsAnalyzer_GlobalHitsAnalyzer";
00019
00020
00021 fName = iPSet.getUntrackedParameter<std::string>("Name");
00022 verbosity = iPSet.getUntrackedParameter<int>("Verbosity");
00023 frequency = iPSet.getUntrackedParameter<int>("Frequency");
00024 vtxunit = iPSet.getUntrackedParameter<int>("VtxUnit");
00025 edm::ParameterSet m_Prov =
00026 iPSet.getParameter<edm::ParameterSet>("ProvenanceLookup");
00027 getAllProvenances =
00028 m_Prov.getUntrackedParameter<bool>("GetAllProvenances");
00029 printProvenanceInfo =
00030 m_Prov.getUntrackedParameter<bool>("PrintProvenanceInfo");
00031
00032
00033 PxlBrlLowSrc_ = iPSet.getParameter<edm::InputTag>("PxlBrlLowSrc");
00034 PxlBrlHighSrc_ = iPSet.getParameter<edm::InputTag>("PxlBrlHighSrc");
00035 PxlFwdLowSrc_ = iPSet.getParameter<edm::InputTag>("PxlFwdLowSrc");
00036 PxlFwdHighSrc_ = iPSet.getParameter<edm::InputTag>("PxlFwdHighSrc");
00037
00038 SiTIBLowSrc_ = iPSet.getParameter<edm::InputTag>("SiTIBLowSrc");
00039 SiTIBHighSrc_ = iPSet.getParameter<edm::InputTag>("SiTIBHighSrc");
00040 SiTOBLowSrc_ = iPSet.getParameter<edm::InputTag>("SiTOBLowSrc");
00041 SiTOBHighSrc_ = iPSet.getParameter<edm::InputTag>("SiTOBHighSrc");
00042 SiTIDLowSrc_ = iPSet.getParameter<edm::InputTag>("SiTIDLowSrc");
00043 SiTIDHighSrc_ = iPSet.getParameter<edm::InputTag>("SiTIDHighSrc");
00044 SiTECLowSrc_ = iPSet.getParameter<edm::InputTag>("SiTECLowSrc");
00045 SiTECHighSrc_ = iPSet.getParameter<edm::InputTag>("SiTECHighSrc");
00046
00047 MuonCscSrc_ = iPSet.getParameter<edm::InputTag>("MuonCscSrc");
00048 MuonDtSrc_ = iPSet.getParameter<edm::InputTag>("MuonDtSrc");
00049 MuonRpcSrc_ = iPSet.getParameter<edm::InputTag>("MuonRpcSrc");
00050
00051 ECalEBSrc_ = iPSet.getParameter<edm::InputTag>("ECalEBSrc");
00052 ECalEESrc_ = iPSet.getParameter<edm::InputTag>("ECalEESrc");
00053 ECalESSrc_ = iPSet.getParameter<edm::InputTag>("ECalESSrc");
00054
00055 HCalSrc_ = iPSet.getParameter<edm::InputTag>("HCalSrc");
00056
00057
00058 validHepMCevt = iPSet.getUntrackedParameter<bool>("validHepMCevt");
00059 validG4VtxContainer =
00060 iPSet.getUntrackedParameter<bool>("validG4VtxContainer");
00061 validG4trkContainer =
00062 iPSet.getUntrackedParameter<bool>("validG4trkContainer");
00063 validPxlBrlLow = iPSet.getUntrackedParameter<bool>("validPxlBrlLow",true);
00064 validPxlBrlHigh = iPSet.getUntrackedParameter<bool>("validPxlBrlHigh",true);
00065 validPxlFwdLow = iPSet.getUntrackedParameter<bool>("validPxlFwdLow",true);
00066 validPxlFwdHigh = iPSet.getUntrackedParameter<bool>("validPxlFwdHigh",true);
00067 validSiTIBLow = iPSet.getUntrackedParameter<bool>("validSiTIBLow",true);
00068 validSiTIBHigh = iPSet.getUntrackedParameter<bool>("validSiTIBHigh",true);
00069 validSiTOBLow = iPSet.getUntrackedParameter<bool>("validSiTOBLow",true);
00070 validSiTOBHigh = iPSet.getUntrackedParameter<bool>("validSiTOBHigh",true);
00071 validSiTIDLow = iPSet.getUntrackedParameter<bool>("validSiTIDLow",true);
00072 validSiTIDHigh = iPSet.getUntrackedParameter<bool>("validSiTIDHigh",true);
00073 validSiTECLow = iPSet.getUntrackedParameter<bool>("validSiTECLow",true);
00074 validSiTECHigh = iPSet.getUntrackedParameter<bool>("validSiTECHigh",true);
00075 validMuonCSC = iPSet.getUntrackedParameter<bool>("validMuonCSC",true);
00076 validMuonDt = iPSet.getUntrackedParameter<bool>("validMuonDt",true);
00077 validMuonRPC = iPSet.getUntrackedParameter<bool>("validMuonRPC",true);
00078 validEB = iPSet.getUntrackedParameter<bool>("validEB",true);
00079 validEE = iPSet.getUntrackedParameter<bool>("validEE",true);
00080 validPresh = iPSet.getUntrackedParameter<bool>("validPresh",true);
00081 validHcal = iPSet.getUntrackedParameter<bool>("validHcal",true);
00082
00083
00084
00085 verbosity %= 10;
00086
00087
00088 if (verbosity >= 0) {
00089 edm::LogInfo(MsgLoggerCat)
00090 << "\n===============================\n"
00091 << "Initialized as EDAnalyzer with parameter values:\n"
00092 << " Name = " << fName << "\n"
00093 << " Verbosity = " << verbosity << "\n"
00094 << " Frequency = " << frequency << "\n"
00095 << " VtxUnit = " << vtxunit << "\n"
00096 << " GetProv = " << getAllProvenances << "\n"
00097 << " PrintProv = " << printProvenanceInfo << "\n"
00098 << " PxlBrlLowSrc = " << PxlBrlLowSrc_.label()
00099 << ":" << PxlBrlLowSrc_.instance() << "\n"
00100 << " PxlBrlHighSrc = " << PxlBrlHighSrc_.label()
00101 << ":" << PxlBrlHighSrc_.instance() << "\n"
00102 << " PxlFwdLowSrc = " << PxlFwdLowSrc_.label()
00103 << ":" << PxlBrlLowSrc_.instance() << "\n"
00104 << " PxlFwdHighSrc = " << PxlFwdHighSrc_.label()
00105 << ":" << PxlBrlHighSrc_.instance() << "\n"
00106 << " SiTIBLowSrc = " << SiTIBLowSrc_.label()
00107 << ":" << SiTIBLowSrc_.instance() << "\n"
00108 << " SiTIBHighSrc = " << SiTIBHighSrc_.label()
00109 << ":" << SiTIBHighSrc_.instance() << "\n"
00110 << " SiTOBLowSrc = " << SiTOBLowSrc_.label()
00111 << ":" << SiTOBLowSrc_.instance() << "\n"
00112 << " SiTOBHighSrc = " << SiTOBHighSrc_.label()
00113 << ":" << SiTOBHighSrc_.instance() << "\n"
00114 << " SiTIDLowSrc = " << SiTIDLowSrc_.label()
00115 << ":" << SiTIDLowSrc_.instance() << "\n"
00116 << " SiTIDHighSrc = " << SiTIDHighSrc_.label()
00117 << ":" << SiTIDHighSrc_.instance() << "\n"
00118 << " SiTECLowSrc = " << SiTECLowSrc_.label()
00119 << ":" << SiTECLowSrc_.instance() << "\n"
00120 << " SiTECHighSrc = " << SiTECHighSrc_.label()
00121 << ":" << SiTECHighSrc_.instance() << "\n"
00122 << " MuonCscSrc = " << MuonCscSrc_.label()
00123 << ":" << MuonCscSrc_.instance() << "\n"
00124 << " MuonDtSrc = " << MuonDtSrc_.label()
00125 << ":" << MuonDtSrc_.instance() << "\n"
00126 << " MuonRpcSrc = " << MuonRpcSrc_.label()
00127 << ":" << MuonRpcSrc_.instance() << "\n"
00128 << " ECalEBSrc = " << ECalEBSrc_.label()
00129 << ":" << ECalEBSrc_.instance() << "\n"
00130 << " ECalEESrc = " << ECalEESrc_.label()
00131 << ":" << ECalEESrc_.instance() << "\n"
00132 << " ECalESSrc = " << ECalESSrc_.label()
00133 << ":" << ECalESSrc_.instance() << "\n"
00134 << " HCalSrc = " << HCalSrc_.label()
00135 << ":" << HCalSrc_.instance() << "\n"
00136 << "\n"
00137 << " validHepMCevt = "
00138 << ":" << validHepMCevt << "\n"
00139 << " validG4VtxContainer = "
00140 << ":" << validG4VtxContainer << "\n"
00141 << " validG4trkContainer = "
00142 << ":" << validG4trkContainer << "\n"
00143 << " validPxlBrlLow = "
00144 << ":" << validPxlBrlLow << "\n"
00145 << " validPxlBrlHigh = "
00146 << ":" << validPxlBrlHigh << "\n"
00147 << " validPxlFwdLow = "
00148 << ":" << validPxlFwdLow << "\n"
00149 << " validPxlFwdHigh = "
00150 << ":" << validPxlFwdHigh << "\n"
00151 << " validSiTIBLow = "
00152 << ":" << validSiTIBLow << "\n"
00153 << " validSiTIBHigh = "
00154 << ":" << validSiTIBHigh << "\n"
00155 << " validSiTOBLow = "
00156 << ":" << validSiTOBLow << "\n"
00157 << " validSiTOBHigh = "
00158 << ":" << validSiTOBHigh << "\n"
00159 << " validSiTIDLow = "
00160 << ":" << validSiTIDLow << "\n"
00161 << " validSiTIDHigh = "
00162 << ":" << validSiTIDHigh << "\n"
00163 << " validSiTECLow = "
00164 << ":" << validSiTECLow << "\n"
00165 << " validSiTECHigh = "
00166 << ":" << validSiTECHigh << "\n"
00167 << " validMuonCSC = "
00168 << ":" << validMuonCSC << "\n"
00169 << " validMuonDt = "
00170 << ":" << validMuonDt << "\n"
00171 << " validMuonRPC = "
00172 << ":" << validMuonRPC << "\n"
00173 << " validEB = "
00174 << ":" << validEB << "\n"
00175 << " validEE = "
00176 << ":" << validEE << "\n"
00177 << " validPresh = "
00178 << ":" << validPresh << "\n"
00179 << " validHcal = "
00180 << ":" << validHcal << "\n"
00181 << "===============================\n";
00182 }
00183
00184
00185 dbe = 0;
00186 dbe = edm::Service<DQMStore>().operator->();
00187 if (dbe) {
00188 if (verbosity > 0 ) {
00189 dbe->setVerbose(1);
00190 } else {
00191 dbe->setVerbose(0);
00192 }
00193 }
00194
00195 if (dbe) {
00196 if (verbosity > 0 ) dbe->showDirStructure();
00197 }
00198
00199
00200 for (Int_t i = 0; i < 2; ++i) {
00201 meMCRGP[i] = 0;
00202 meMCG4Vtx[i] = 0;
00203 meGeantVtxX[i] = 0;
00204 meGeantVtxY[i] = 0;
00205 meGeantVtxZ[i] = 0;
00206 meMCG4Trk[i] = 0;
00207 meCaloEcal[i] = 0;
00208 meCaloEcalE[i] = 0;
00209 meCaloEcalToF[i] = 0;
00210 meCaloPreSh[i] = 0;
00211 meCaloPreShE[i] = 0;
00212 meCaloPreShToF[i] = 0;
00213 meCaloHcal[i] = 0;
00214 meCaloHcalE[i] = 0;
00215 meCaloHcalToF[i] = 0;
00216 meTrackerPx[i] = 0;
00217 meTrackerSi[i] = 0;
00218 meMuon[i] = 0;
00219 meMuonDtToF[i] = 0;
00220 meMuonCscToF[i] = 0;
00221 meMuonRpcFToF[i] = 0;
00222 meMuonRpcBToF[i] = 0;
00223 meGeantVtxRad[i] = 0;
00224 }
00225 meGeantTrkPt = 0;
00226 meGeantTrkE = 0;
00227 meGeantVtxEta = 0;
00228 meGeantVtxPhi = 0;
00229 meGeantVtxMulti = 0;
00230 meCaloEcalPhi = 0;
00231 meCaloEcalEta = 0;
00232 meCaloPreShPhi = 0;
00233 meCaloPreShEta = 0;
00234 meCaloHcalPhi = 0;
00235 meCaloHcalEta = 0;
00236 meTrackerPxPhi = 0;
00237 meTrackerPxEta = 0;
00238 meTrackerPxBToF = 0;
00239 meTrackerPxBR = 0;
00240 meTrackerPxFToF = 0;
00241 meTrackerPxFZ = 0;
00242 meTrackerSiPhi = 0;
00243 meTrackerSiEta = 0;
00244 meTrackerSiBToF = 0;
00245 meTrackerSiBR = 0;
00246 meTrackerSiFToF = 0;
00247 meTrackerSiFZ = 0;
00248 meMuonPhi = 0;
00249 meMuonEta = 0;
00250 meMuonDtR = 0;
00251 meMuonCscZ = 0;
00252 meMuonRpcBR = 0;
00253 meMuonRpcFZ = 0;
00254
00255
00256 Char_t hname[200];
00257 Char_t htitle[200];
00258 if (dbe) {
00259
00260
00261 dbe->setCurrentFolder("GlobalHitsV/MCGeant");
00262 sprintf(hname,"hMCRGP1");
00263 sprintf(htitle,"RawGenParticles");
00264 meMCRGP[0] = dbe->book1D(hname,htitle,100,0.,5000.);
00265 sprintf(hname,"hMCRGP2");
00266 meMCRGP[1] = dbe->book1D(hname,htitle,100,0.,500.);
00267 for (Int_t i = 0; i < 2; ++i) {
00268 meMCRGP[i]->setAxisTitle("Number of Raw Generated Particles",1);
00269 meMCRGP[i]->setAxisTitle("Count",2);
00270 }
00271
00272 sprintf(hname,"hMCG4Vtx1");
00273 sprintf(htitle,"G4 Vertices");
00274 meMCG4Vtx[0] = dbe->book1D(hname,htitle,150,0.,15000.);
00275 sprintf(hname,"hMCG4Vtx2");
00276 meMCG4Vtx[1] = dbe->book1D(hname,htitle,100,-0.5,99.5);
00277 for (Int_t i = 0; i < 2; ++i) {
00278 meMCG4Vtx[i]->setAxisTitle("Number of Vertices",1);
00279 meMCG4Vtx[i]->setAxisTitle("Count",2);
00280 }
00281
00282 sprintf(hname,"hMCG4Trk1");
00283 sprintf(htitle,"G4 Tracks");
00284 meMCG4Trk[0] = dbe->book1D(hname,htitle,150,0.,15000.);
00285 sprintf(hname,"hMCG4Trk2");
00286 meMCG4Trk[1] = dbe->book1D(hname,htitle,150,-0.5,99.5);
00287 for (Int_t i = 0; i < 2; ++i) {
00288 meMCG4Trk[i]->setAxisTitle("Number of Tracks",1);
00289 meMCG4Trk[i]->setAxisTitle("Count",2);
00290 }
00291
00292 sprintf(hname,"hGeantVtxX1");
00293 sprintf(htitle,"Geant vertex x/micrometer");
00294 meGeantVtxX[0] = dbe->book1D(hname,htitle,100,-8000000.,8000000.);
00295 sprintf(hname,"hGeantVtxX2");
00296 meGeantVtxX[1] = dbe->book1D(hname,htitle,100,-50.,50.);
00297 for (Int_t i = 0; i < 2; ++i) {
00298 meGeantVtxX[i]->setAxisTitle("x of Vertex (um)",1);
00299 meGeantVtxX[i]->setAxisTitle("Count",2);
00300 }
00301
00302 sprintf(hname,"hGeantVtxY1");
00303 sprintf(htitle,"Geant vertex y/micrometer");
00304 meGeantVtxY[0] = dbe->book1D(hname,htitle,100,-8000000,8000000.);
00305 sprintf(hname,"hGeantVtxY2");
00306 meGeantVtxY[1] = dbe->book1D(hname,htitle,100,-50.,50.);
00307 for (Int_t i = 0; i < 2; ++i) {
00308 meGeantVtxY[i]->setAxisTitle("y of Vertex (um)",1);
00309 meGeantVtxY[i]->setAxisTitle("Count",2);
00310 }
00311
00312 sprintf(hname,"hGeantVtxZ1");
00313 sprintf(htitle,"Geant vertex z/millimeter");
00314 meGeantVtxZ[0] = dbe->book1D(hname,htitle,100,-11000.,11000.);
00315 sprintf(hname,"hGeantVtxZ2");
00316 meGeantVtxZ[1] = dbe->book1D(hname,htitle,200,-500.,500.);
00317
00318 for (Int_t i = 0; i < 2; ++i) {
00319 meGeantVtxZ[i]->setAxisTitle("z of Vertex (mm)",1);
00320 meGeantVtxZ[i]->setAxisTitle("Count",2);
00321 }
00322
00323 sprintf(hname,"hGeantTrkPt");
00324 sprintf(htitle,"Log10 Geant track pt/GeV");
00325 meGeantTrkPt = dbe->book1D(hname,htitle,80,-4.,4.);
00326 meGeantTrkPt->setAxisTitle("Log10 pT of Track (GeV)",1);
00327 meGeantTrkPt->setAxisTitle("Count",2);
00328
00329 sprintf(hname,"hGeantTrkE");
00330 sprintf(htitle,"Log10 Geant track E/GeV");
00331 meGeantTrkE = dbe->book1D(hname,htitle,80,-4.,4.);
00332 meGeantTrkE->setAxisTitle("Log10 E of Track (GeV)",1);
00333 meGeantTrkE->setAxisTitle("Count",2);
00334
00335 sprintf(hname,"hGeantVtxEta");
00336 sprintf(htitle,"Geant vertices eta");
00337 meGeantVtxEta = dbe->book1D(hname,htitle,220,-5.5,5.5);
00338 meGeantVtxEta->setAxisTitle("eta of SimVertex",1);
00339 meGeantVtxEta->setAxisTitle("Count",2);
00340
00341 sprintf(hname,"hGeantVtxPhi");
00342 sprintf(htitle,"Geant vertices phi/rad");
00343 meGeantVtxPhi = dbe->book1D(hname,htitle,100,-3.2,3.2);
00344 meGeantVtxPhi->setAxisTitle("phi of SimVertex (rad)",1);
00345 meGeantVtxPhi->setAxisTitle("Count",2);
00346
00347 sprintf(hname,"hGeantVtxRad1");
00348 sprintf(htitle,"Geant vertices radius/cm");
00349 meGeantVtxRad[0] = dbe->book1D(hname,htitle,130,0.,130.);
00350 sprintf(hname,"hGeantVtxRad2");
00351 meGeantVtxRad[1] = dbe->book1D(hname,htitle,100,0.,1000.);
00352 for (Int_t i = 0; i < 2; ++i) {
00353 meGeantVtxRad[i]->setAxisTitle("radius of SimVertex (cm)",1);
00354 meGeantVtxRad[i]->setAxisTitle("Count",2);
00355 }
00356
00357 sprintf(hname,"hGeantVtxMulti");
00358 sprintf(htitle,"Geant vertices outgoing multiplicity");
00359 meGeantVtxMulti = dbe->book1D(hname,htitle,20,0.,20);
00360 meGeantVtxMulti->setAxisTitle("multiplicity of particles attached to a SimVertex",1);
00361 meGeantVtxMulti->setAxisTitle("Count",2);
00362
00363
00364 dbe->setCurrentFolder("GlobalHitsV/ECals");
00365 sprintf(hname,"hCaloEcal1");
00366 sprintf(htitle,"Ecal hits");
00367 meCaloEcal[0] = dbe->book1D(hname,htitle,100,0.,10000.);
00368 sprintf(hname,"hCaloEcal2");
00369 meCaloEcal[1] = dbe->book1D(hname,htitle,100,-0.5,99.5);
00370
00371 sprintf(hname,"hCaloEcalE1");
00372 sprintf(htitle,"Ecal hits, energy/GeV");
00373 meCaloEcalE[0] = dbe->book1D(hname,htitle,100,0.,10.);
00374 sprintf(hname,"hCaloEcalE2");
00375 meCaloEcalE[1] = dbe->book1D(hname,htitle,100,0.,0.1);
00376 sprintf(hname,"hCaloEcalToF1");
00377 sprintf(htitle,"Ecal hits, ToF/ns");
00378 meCaloEcalToF[0] = dbe->book1D(hname,htitle,100,0.,1000.);
00379 sprintf(hname,"hCaloEcalToF2");
00380 meCaloEcalToF[1] = dbe->book1D(hname,htitle,100,0.,100.);
00381
00382 for (Int_t i = 0; i < 2; ++i) {
00383 meCaloEcal[i]->setAxisTitle("Number of Hits",1);
00384 meCaloEcal[i]->setAxisTitle("Count",2);
00385 meCaloEcalE[i]->setAxisTitle("Energy of Hits (GeV)",1);
00386 meCaloEcalE[i]->setAxisTitle("Count",2);
00387 meCaloEcalToF[i]->setAxisTitle("Time of Flight of Hits (ns)",1);
00388 meCaloEcalToF[i]->setAxisTitle("Count",2);
00389 }
00390
00391 sprintf(hname,"hCaloEcalPhi");
00392 sprintf(htitle,"Ecal hits, phi/rad");
00393 meCaloEcalPhi = dbe->book1D(hname,htitle,100,-3.2,3.2);
00394 meCaloEcalPhi->setAxisTitle("Phi of Hits (rad)",1);
00395 meCaloEcalPhi->setAxisTitle("Count",2);
00396
00397 sprintf(hname,"hCaloEcalEta");
00398 sprintf(htitle,"Ecal hits, eta");
00399 meCaloEcalEta = dbe->book1D(hname,htitle,100,-5.5,5.5);
00400 meCaloEcalEta->setAxisTitle("Eta of Hits",1);
00401 meCaloEcalEta->setAxisTitle("Count",2);
00402
00403 sprintf(hname,"hCaloPreSh1");
00404 sprintf(htitle,"PreSh hits");
00405 meCaloPreSh[0] = dbe->book1D(hname,htitle,100,0.,10000.);
00406 sprintf(hname,"hCaloPreSh2");
00407 meCaloPreSh[1] = dbe->book1D(hname,htitle,100,-0.5,99.5);
00408
00409 sprintf(hname,"hCaloPreShE1");
00410 sprintf(htitle,"PreSh hits, energy/GeV");
00411 meCaloPreShE[0] = dbe->book1D(hname,htitle,100,0.,10.);
00412 sprintf(hname,"hCaloPreShE2");
00413 meCaloPreShE[1] = dbe->book1D(hname,htitle,100,0.,0.1);
00414
00415 sprintf(hname,"hCaloPreShToF1");
00416 sprintf(htitle,"PreSh hits, ToF/ns");
00417 meCaloPreShToF[0] = dbe->book1D(hname,htitle,100,0.,1000.);
00418 sprintf(hname,"hCaloPreShToF2");
00419 meCaloPreShToF[1] = dbe->book1D(hname,htitle,100,0.,100.);
00420
00421 for (Int_t i = 0; i < 2; ++i) {
00422 meCaloPreSh[i]->setAxisTitle("Number of Hits",1);
00423 meCaloPreSh[i]->setAxisTitle("Count",2);
00424 meCaloPreShE[i]->setAxisTitle("Energy of Hits (GeV)",1);
00425 meCaloPreShE[i]->setAxisTitle("Count",2);
00426 meCaloPreShToF[i]->setAxisTitle("Time of Flight of Hits (ns)",1);
00427 meCaloPreShToF[i]->setAxisTitle("Count",2);
00428 }
00429
00430 sprintf(hname,"hCaloPreShPhi");
00431 sprintf(htitle,"PreSh hits, phi/rad");
00432 meCaloPreShPhi = dbe->book1D(hname,htitle,100,-3.2,3.2);
00433 meCaloPreShPhi->setAxisTitle("Phi of Hits (rad)",1);
00434 meCaloPreShPhi->setAxisTitle("Count",2);
00435
00436 sprintf(hname,"hCaloPreShEta");
00437 sprintf(htitle,"PreSh hits, eta");
00438 meCaloPreShEta = dbe->book1D(hname,htitle,100,-5.5,5.5);
00439 meCaloPreShEta->setAxisTitle("Eta of Hits",1);
00440 meCaloPreShEta->setAxisTitle("Count",2);
00441
00442
00443 dbe->setCurrentFolder("GlobalHitsV/HCals");
00444 sprintf(hname,"hCaloHcal1");
00445 sprintf(htitle,"Hcal hits");
00446 meCaloHcal[0] = dbe->book1D(hname,htitle,100,0.,10000.);
00447 sprintf(hname,"hCaloHcal2");
00448 meCaloHcal[1] = dbe->book1D(hname,htitle,100,-0.5,99.5);
00449
00450 sprintf(hname,"hCaloHcalE1");
00451 sprintf(htitle,"Hcal hits, energy/GeV");
00452 meCaloHcalE[0] = dbe->book1D(hname,htitle,100,0.,10.);
00453 sprintf(hname,"hCaloHcalE2");
00454 meCaloHcalE[1] = dbe->book1D(hname,htitle,100,0.,0.1);
00455
00456 sprintf(hname,"hCaloHcalToF1");
00457 sprintf(htitle,"Hcal hits, ToF/ns");
00458 meCaloHcalToF[0] = dbe->book1D(hname,htitle,100,0.,1000.);
00459 sprintf(hname,"hCaloHcalToF2");
00460 meCaloHcalToF[1] = dbe->book1D(hname,htitle,100,0.,100.);
00461
00462 for (Int_t i = 0; i < 2; ++i) {
00463 meCaloHcal[i]->setAxisTitle("Number of Hits",1);
00464 meCaloHcal[i]->setAxisTitle("Count",2);
00465 meCaloHcalE[i]->setAxisTitle("Energy of Hits (GeV)",1);
00466 meCaloHcalE[i]->setAxisTitle("Count",2);
00467 meCaloHcalToF[i]->setAxisTitle("Time of Flight of Hits (ns)",1);
00468 meCaloHcalToF[i]->setAxisTitle("Count",2);
00469 }
00470
00471 sprintf(hname,"hCaloHcalPhi");
00472 sprintf(htitle,"Hcal hits, phi/rad");
00473 meCaloHcalPhi = dbe->book1D(hname,htitle,100,-3.2,3.2);
00474 meCaloHcalPhi->setAxisTitle("Phi of Hits (rad)",1);
00475 meCaloHcalPhi->setAxisTitle("Count",2);
00476
00477 sprintf(hname,"hCaloHcalEta");
00478 sprintf(htitle,"Hcal hits, eta");
00479 meCaloHcalEta = dbe->book1D(hname,htitle,100,-5.5,5.5);
00480 meCaloHcalEta->setAxisTitle("Eta of Hits",1);
00481 meCaloHcalEta->setAxisTitle("Count",2);
00482
00483
00484 dbe->setCurrentFolder("GlobalHitsV/SiPixels");
00485 sprintf(hname,"hTrackerPx1");
00486 sprintf(htitle,"Pixel hits");
00487 meTrackerPx[0] = dbe->book1D(hname,htitle,100,0.,10000.);
00488 sprintf(hname,"hTrackerPx2");
00489 meTrackerPx[1] = dbe->book1D(hname,htitle,100,-0.5,99.5);
00490 for (Int_t i = 0; i < 2; ++i) {
00491 meTrackerPx[i]->setAxisTitle("Number of Pixel Hits",1);
00492 meTrackerPx[i]->setAxisTitle("Count",2);
00493 }
00494
00495 sprintf(hname,"hTrackerPxPhi");
00496 sprintf(htitle,"Pixel hits phi/rad");
00497 meTrackerPxPhi = dbe->book1D(hname,htitle,100,-3.2,3.2);
00498 meTrackerPxPhi->setAxisTitle("Phi of Hits (rad)",1);
00499 meTrackerPxPhi->setAxisTitle("Count",2);
00500
00501 sprintf(hname,"hTrackerPxEta");
00502 sprintf(htitle,"Pixel hits eta");
00503 meTrackerPxEta = dbe->book1D(hname,htitle,100,-3.5,3.5);
00504 meTrackerPxEta->setAxisTitle("Eta of Hits",1);
00505 meTrackerPxEta->setAxisTitle("Count",2);
00506
00507 sprintf(hname,"hTrackerPxBToF");
00508 sprintf(htitle,"Pixel barrel hits, ToF/ns");
00509 meTrackerPxBToF = dbe->book1D(hname,htitle,100,0.,40.);
00510 meTrackerPxBToF->setAxisTitle("Time of Flight of Hits (ns)",1);
00511 meTrackerPxBToF->setAxisTitle("Count",2);
00512
00513 sprintf(hname,"hTrackerPxBR");
00514 sprintf(htitle,"Pixel barrel hits, R/cm");
00515 meTrackerPxBR = dbe->book1D(hname,htitle,100,0.,50.);
00516 meTrackerPxBR->setAxisTitle("R of Hits (cm)",1);
00517 meTrackerPxBR->setAxisTitle("Count",2);
00518
00519 sprintf(hname,"hTrackerPxFToF");
00520 sprintf(htitle,"Pixel forward hits, ToF/ns");
00521 meTrackerPxFToF = dbe->book1D(hname,htitle,100,0.,50.);
00522 meTrackerPxFToF->setAxisTitle("Time of Flight of Hits (ns)",1);
00523 meTrackerPxFToF->setAxisTitle("Count",2);
00524
00525 sprintf(hname,"hTrackerPxFZ");
00526 sprintf(htitle,"Pixel forward hits, Z/cm");
00527 meTrackerPxFZ =
00528 dbe->book1D(hname,htitle,200,-100.,100.);
00529 meTrackerPxFZ->setAxisTitle("Z of Hits (cm)",1);
00530 meTrackerPxFZ->setAxisTitle("Count",2);
00531
00532
00533 dbe->setCurrentFolder("GlobalHitsV/SiStrips");
00534 sprintf(hname,"hTrackerSi1");
00535 sprintf(htitle,"Silicon hits");
00536 meTrackerSi[0] = dbe->book1D(hname,htitle,100,0.,10000.);
00537 sprintf(hname,"hTrackerSi2");
00538 meTrackerSi[1] = dbe->book1D(hname,htitle,100,-0.5,99.5);
00539 for (Int_t i = 0; i < 2; ++i) {
00540 meTrackerSi[i]->setAxisTitle("Number of Silicon Hits",1);
00541 meTrackerSi[i]->setAxisTitle("Count",2);
00542 }
00543
00544 sprintf(hname,"hTrackerSiPhi");
00545 sprintf(htitle,"Silicon hits phi/rad");
00546 meTrackerSiPhi = dbe->book1D(hname,htitle,100,-3.2,3.2);
00547 meTrackerSiPhi->setAxisTitle("Phi of Hits (rad)",1);
00548 meTrackerSiPhi->setAxisTitle("Count",2);
00549
00550 sprintf(hname,"hTrackerSiEta");
00551 sprintf(htitle,"Silicon hits eta");
00552 meTrackerSiEta = dbe->book1D(hname,htitle,100,-3.5,3.5);
00553 meTrackerSiEta->setAxisTitle("Eta of Hits",1);
00554 meTrackerSiEta->setAxisTitle("Count",2);
00555
00556 sprintf(hname,"hTrackerSiBToF");
00557 sprintf(htitle,"Silicon barrel hits, ToF/ns");
00558 meTrackerSiBToF = dbe->book1D(hname,htitle,100,0.,50.);
00559 meTrackerSiBToF->setAxisTitle("Time of Flight of Hits (ns)",1);
00560 meTrackerSiBToF->setAxisTitle("Count",2);
00561
00562 sprintf(hname,"hTrackerSiBR");
00563 sprintf(htitle,"Silicon barrel hits, R/cm");
00564 meTrackerSiBR = dbe->book1D(hname,htitle,100,0.,200.);
00565 meTrackerSiBR->setAxisTitle("R of Hits (cm)",1);
00566 meTrackerSiBR->setAxisTitle("Count",2);
00567
00568 sprintf(hname,"hTrackerSiFToF");
00569 sprintf(htitle,"Silicon forward hits, ToF/ns");
00570 meTrackerSiFToF = dbe->book1D(hname,htitle,100,0.,75.);
00571 meTrackerSiFToF->setAxisTitle("Time of Flight of Hits (ns)",1);
00572 meTrackerSiFToF->setAxisTitle("Count",2);
00573
00574 sprintf(hname,"hTrackerSiFZ");
00575 sprintf(htitle,"Silicon forward hits, Z/cm");
00576 meTrackerSiFZ = dbe->book1D(hname,htitle,200,-300.,300.);
00577 meTrackerSiFZ->setAxisTitle("Z of Hits (cm)",1);
00578 meTrackerSiFZ->setAxisTitle("Count",2);
00579
00580
00581 dbe->setCurrentFolder("GlobalHitsV/Muons");
00582 sprintf(hname,"hMuon1");
00583 sprintf(htitle,"Muon hits");
00584 meMuon[0] = dbe->book1D(hname,htitle,100,0.,10000.);
00585 sprintf(hname,"hMuon2");
00586 meMuon[1] = dbe->book1D(hname,htitle,100,-0.5,99.5);
00587 for (Int_t i = 0; i < 2; ++i) {
00588 meMuon[i]->setAxisTitle("Number of Muon Hits",1);
00589 meMuon[i]->setAxisTitle("Count",2);
00590 }
00591
00592 sprintf(hname,"hMuonPhi");
00593 sprintf(htitle,"Muon hits phi/rad");
00594 meMuonPhi = dbe->book1D(hname,htitle,100,-3.2,3.2);
00595 meMuonPhi->setAxisTitle("Phi of Hits (rad)",1);
00596 meMuonPhi->setAxisTitle("Count",2);
00597
00598 sprintf(hname,"hMuonEta");
00599 sprintf(htitle,"Muon hits eta");
00600 meMuonEta = dbe->book1D(hname,htitle,100,-3.5,3.5);
00601 meMuonEta->setAxisTitle("Eta of Hits",1);
00602 meMuonEta->setAxisTitle("Count",2);
00603
00604 sprintf(hname,"hMuonCscToF1");
00605 sprintf(htitle,"Muon CSC hits, ToF/ns");
00606 meMuonCscToF[0] = dbe->book1D(hname,htitle,100,0.,250.);
00607 sprintf(hname,"hMuonCscToF2");
00608 meMuonCscToF[1] = dbe->book1D(hname,htitle,100,0.,50.);
00609 for (Int_t i = 0; i < 2; ++i) {
00610 meMuonCscToF[i]->setAxisTitle("Time of Flight of Hits (ns)",1);
00611 meMuonCscToF[i]->setAxisTitle("Count",2);
00612 }
00613
00614 sprintf(hname,"hMuonCscZ");
00615 sprintf(htitle,"Muon CSC hits, Z/cm");
00616 meMuonCscZ = dbe->book1D(hname,htitle,200,-1500.,1500.);
00617 meMuonCscZ->setAxisTitle("Z of Hits (cm)",1);
00618 meMuonCscZ->setAxisTitle("Count",2);
00619
00620 sprintf(hname,"hMuonDtToF1");
00621 sprintf(htitle,"Muon DT hits, ToF/ns");
00622 meMuonDtToF[0] = dbe->book1D(hname,htitle,100,0.,250.);
00623 sprintf(hname,"hMuonDtToF2");
00624 meMuonDtToF[1] = dbe->book1D(hname,htitle,100,0.,50.);
00625 for (Int_t i = 0; i < 2; ++i) {
00626 meMuonDtToF[i]->setAxisTitle("Time of Flight of Hits (ns)",1);
00627 meMuonDtToF[i]->setAxisTitle("Count",2);
00628 }
00629
00630 sprintf(hname,"hMuonDtR");
00631 sprintf(htitle,"Muon DT hits, R/cm");
00632 meMuonDtR = dbe->book1D(hname,htitle,100,0.,1500.);
00633 meMuonDtR->setAxisTitle("R of Hits (cm)",1);
00634 meMuonDtR->setAxisTitle("Count",2);
00635
00636 sprintf(hname,"hMuonRpcFToF1");
00637 sprintf(htitle,"Muon RPC forward hits, ToF/ns");
00638 meMuonRpcFToF[0] = dbe->book1D(hname,htitle,100,0.,250.);
00639 sprintf(hname,"hMuonRpcFToF2");
00640 meMuonRpcFToF[1] = dbe->book1D(hname,htitle,100,0.,50.);
00641 for (Int_t i = 0; i < 2; ++i) {
00642 meMuonRpcFToF[i]->setAxisTitle("Time of Flight of Hits (ns)",1);
00643 meMuonRpcFToF[i]->setAxisTitle("Count",2);
00644 }
00645 sprintf(hname,"hMuonRpcFZ");
00646 sprintf(htitle,"Muon RPC forward hits, Z/cm");
00647 meMuonRpcFZ = dbe->book1D(hname,htitle,201,-1500.,1500.);
00648 meMuonRpcFZ->setAxisTitle("Z of Hits (cm)",1);
00649 meMuonRpcFZ->setAxisTitle("Count",2);
00650
00651 sprintf(hname,"hMuonRpcBToF1");
00652 sprintf(htitle,"Muon RPC barrel hits, ToF/ns");
00653 meMuonRpcBToF[0] = dbe->book1D(hname,htitle,100,0.,250.);
00654 sprintf(hname,"hMuonRpcBToF2");
00655 meMuonRpcBToF[1] = dbe->book1D(hname,htitle,100,0.,50.);
00656 for (Int_t i = 0; i < 2; ++i) {
00657 meMuonRpcBToF[i]->setAxisTitle("Time of Flight of Hits (ns)",1);
00658 meMuonRpcBToF[i]->setAxisTitle("Count",2);
00659 }
00660
00661 sprintf(hname,"hMuonRpcBR");
00662 sprintf(htitle,"Muon RPC barrel hits, R/cm");
00663 meMuonRpcBR = dbe->book1D(hname,htitle,100,0.,1500.);
00664 meMuonRpcBR->setAxisTitle("R of Hits (cm)",1);
00665 meMuonRpcBR->setAxisTitle("Count",2);
00666 }
00667 }
00668
00669 GlobalHitsAnalyzer::~GlobalHitsAnalyzer() {}
00670
00671 void GlobalHitsAnalyzer::beginJob( void )
00672 {
00673 return;
00674 }
00675
00676 void GlobalHitsAnalyzer::endJob()
00677 {
00678 std::string MsgLoggerCat = "GlobalHitsAnalyzer_endJob";
00679 if (verbosity >= 0)
00680 edm::LogInfo(MsgLoggerCat)
00681 << "Terminating having processed " << count << " events.";
00682 return;
00683 }
00684
00685 void GlobalHitsAnalyzer::analyze(const edm::Event& iEvent,
00686 const edm::EventSetup& iSetup)
00687 {
00688 std::string MsgLoggerCat = "GlobalHitsAnalyzer_analyze";
00689
00690
00691 ++count;
00692
00693
00694 int nrun = iEvent.id().run();
00695 int nevt = iEvent.id().event();
00696
00697 if (verbosity > 0) {
00698 edm::LogInfo(MsgLoggerCat)
00699 << "Processing run " << nrun << ", event " << nevt
00700 << " (" << count << " events total)";
00701 } else if (verbosity == 0) {
00702 if (nevt%frequency == 0 || nevt == 1) {
00703 edm::LogInfo(MsgLoggerCat)
00704 << "Processing run " << nrun << ", event " << nevt
00705 << " (" << count << " events total)";
00706 }
00707 }
00708
00709
00710 if (getAllProvenances) {
00711
00712 std::vector<const edm::Provenance*> AllProv;
00713 iEvent.getAllProvenance(AllProv);
00714
00715 if (verbosity >= 0)
00716 edm::LogInfo(MsgLoggerCat)
00717 << "Number of Provenances = " << AllProv.size();
00718
00719 if (printProvenanceInfo && (verbosity >= 0)) {
00720 TString eventout("\nProvenance info:\n");
00721
00722 for (unsigned int i = 0; i < AllProv.size(); ++i) {
00723 eventout += "\n ******************************";
00724 eventout += "\n Module : ";
00725 eventout += AllProv[i]->moduleLabel();
00726 eventout += "\n ProductID : ";
00727 eventout += AllProv[i]->productID().id();
00728 eventout += "\n ClassName : ";
00729 eventout += AllProv[i]->className();
00730 eventout += "\n InstanceName : ";
00731 eventout += AllProv[i]->productInstanceName();
00732 eventout += "\n BranchName : ";
00733 eventout += AllProv[i]->branchName();
00734 }
00735 eventout += "\n ******************************\n";
00736 edm::LogInfo(MsgLoggerCat) << eventout << "\n";
00737 printProvenanceInfo = false;
00738 }
00739 getAllProvenances = false;
00740 }
00741
00742
00743
00744 fillG4MC(iEvent);
00745
00746 fillTrk(iEvent,iSetup);
00747
00748 fillMuon(iEvent, iSetup);
00749
00750 fillECal(iEvent, iSetup);
00751
00752 fillHCal(iEvent, iSetup);
00753
00754 if (verbosity > 0)
00755 edm::LogInfo (MsgLoggerCat)
00756 << "Done gathering data from event.";
00757
00758 return;
00759 }
00760
00761
00762 void GlobalHitsAnalyzer::fillG4MC(const edm::Event& iEvent)
00763 {
00764
00765 std::string MsgLoggerCat = "GlobalHitsAnalyzer_fillG4MC";
00766
00767 TString eventout;
00768 if (verbosity > 0)
00769 eventout = "\nGathering info:";
00770
00772
00774 edm::Handle<edm::HepMCProduct> HepMCEvt;
00775 std::vector<edm::Handle<edm::HepMCProduct> > AllHepMCEvt;
00776 iEvent.getManyByType(AllHepMCEvt);
00777
00778
00779
00780 for (unsigned int i = 0; i < AllHepMCEvt.size(); ++i) {
00781 HepMCEvt = AllHepMCEvt[i];
00782 if ((HepMCEvt.provenance()->product()).moduleLabel() == "VtxSmeared")
00783 break;
00784 }
00785
00786 if (!HepMCEvt.isValid()) {
00787 LogDebug(MsgLoggerCat)
00788 << "Unable to find HepMCProduct in event!";
00789 validHepMCevt = false;
00790 } else {
00791 eventout += "\n Using HepMCProduct: ";
00792 eventout += (HepMCEvt.provenance()->product()).moduleLabel();
00793 }
00794 if (validHepMCevt) {
00795 const HepMC::GenEvent* MCEvt = HepMCEvt->GetEvent();
00796 nRawGenPart = MCEvt->particles_size();
00797
00798
00799 if (verbosity > 1) {
00800 eventout += "\n Number of Raw Particles collected:......... ";
00801 eventout += nRawGenPart;
00802 }
00803
00804 if (meMCRGP[0]) meMCRGP[0]->Fill((float)nRawGenPart);
00805 if (meMCRGP[1]) meMCRGP[1]->Fill((float)nRawGenPart);
00806 }
00807
00808
00810
00812
00813 float unit = 0.;
00814 if (vtxunit == 0) unit = 1.;
00815 if (vtxunit == 1) unit = 10.;
00816
00817 edm::Handle<edm::SimVertexContainer> G4VtxContainer;
00818 iEvent.getByType(G4VtxContainer);
00819
00820
00821 edm::Handle<edm::SimTrackContainer> G4TrkContainer;
00822 iEvent.getByType(G4TrkContainer);
00823
00824
00825 if (!G4VtxContainer.isValid()) {
00826 LogDebug(MsgLoggerCat)
00827 << "Unable to find SimVertex in event!";
00828 validG4VtxContainer = false;
00829 }
00830 if (validG4VtxContainer) {
00831 int i = 0;
00832 edm::SimVertexContainer::const_iterator itVtx;
00833 for (itVtx = G4VtxContainer->begin(); itVtx != G4VtxContainer->end();
00834 ++itVtx) {
00835
00836 ++i;
00837
00838 const math::XYZTLorentzVector G4Vtx1(itVtx->position().x(),
00839 itVtx->position().y(),
00840 itVtx->position().z(),
00841 itVtx->position().e());
00842
00843 double G4Vtx[4];
00844 G4Vtx1.GetCoordinates(G4Vtx);
00845
00846 if (meGeantVtxX[0]) meGeantVtxX[0]->Fill((G4Vtx[0]*unit)/micrometer);
00847 if (meGeantVtxX[1]) meGeantVtxX[1]->Fill((G4Vtx[0]*unit)/micrometer);
00848
00849 if (meGeantVtxY[0]) meGeantVtxY[0]->Fill((G4Vtx[1]*unit)/micrometer);
00850 if (meGeantVtxY[1]) meGeantVtxY[1]->Fill((G4Vtx[1]*unit)/micrometer);
00851
00852 if (meGeantVtxZ[0]) meGeantVtxZ[0]->Fill((G4Vtx[2]*unit)/millimeter);
00853 if (meGeantVtxZ[1]) meGeantVtxZ[1]->Fill((G4Vtx[2]*unit)/millimeter);
00854
00855 if (meGeantVtxEta) meGeantVtxEta->Fill(G4Vtx1.eta());
00856 if (meGeantVtxPhi) meGeantVtxPhi->Fill(G4Vtx1.phi());
00857 if (meGeantVtxRad[0]) meGeantVtxRad[0]->Fill(G4Vtx1.rho());
00858 if (meGeantVtxRad[1]) meGeantVtxRad[1]->Fill(G4Vtx1.rho());
00859
00860 if (meGeantVtxMulti) {
00861 int multi = 0;
00862 if ( G4TrkContainer.isValid() ) {
00863 edm::SimTrackContainer::const_iterator itTrk;
00864 for (itTrk = G4TrkContainer->begin(); itTrk != G4TrkContainer->end();
00865 ++itTrk) {
00866 if ( (*itTrk).vertIndex() == i ) { multi++; }
00867 }
00868 }
00869 meGeantVtxMulti->Fill(((double)multi+0.5));
00870 }
00871
00872 }
00873
00874 if (verbosity > 1) {
00875 eventout += "\n Number of G4Vertices collected:............ ";
00876 eventout += i;
00877 }
00878
00879 if (meMCG4Vtx[0]) meMCG4Vtx[0]->Fill((float)i);
00880 if (meMCG4Vtx[1]) meMCG4Vtx[1]->Fill((float)i);
00881
00882 }
00883
00885
00887 if (!G4TrkContainer.isValid()) {
00888 LogDebug(MsgLoggerCat)
00889 << "Unable to find SimTrack in event!";
00890 validG4trkContainer = false;
00891 }
00892 if (validG4trkContainer) {
00893 int i = 0;
00894 edm::SimTrackContainer::const_iterator itTrk;
00895 for (itTrk = G4TrkContainer->begin(); itTrk != G4TrkContainer->end();
00896 ++itTrk) {
00897
00898 ++i;
00899
00900 const math::XYZTLorentzVector G4Trk1(itTrk->momentum().x(),
00901 itTrk->momentum().y(),
00902 itTrk->momentum().z(),
00903 itTrk->momentum().e());
00904 double G4Trk[4];
00905 G4Trk1.GetCoordinates(G4Trk);
00906
00907 if (meGeantTrkPt) meGeantTrkPt->
00908 Fill(std::log10(std::max(sqrt(G4Trk[0]*G4Trk[0]+G4Trk[1]*G4Trk[1]),-9.)));
00909 if (meGeantTrkE) meGeantTrkE->Fill(std::log10(std::max(G4Trk[3],-9.)));
00910 }
00911
00912 if (verbosity > 1) {
00913 eventout += "\n Number of G4Tracks collected:.............. ";
00914 eventout += i;
00915 }
00916
00917 if (meMCG4Trk[0]) meMCG4Trk[0]->Fill((float)i);
00918 if (meMCG4Trk[1]) meMCG4Trk[1]->Fill((float)i);
00919 }
00920
00921 if (verbosity > 0)
00922 edm::LogInfo(MsgLoggerCat) << eventout << "\n";
00923
00924 return;
00925 }
00926
00927 void GlobalHitsAnalyzer::fillTrk(const edm::Event& iEvent,
00928 const edm::EventSetup& iSetup)
00929 {
00930
00931 nPxlHits = 0;
00932 std::string MsgLoggerCat = "GlobalHitsAnalyzer_fillTrk";
00933
00934 TString eventout;
00935 if (verbosity > 0)
00936 eventout = "\nGathering info:";
00937
00938
00939 edm::ESHandle<TrackerGeometry> theTrackerGeometry;
00940 iSetup.get<TrackerDigiGeometryRecord>().get(theTrackerGeometry);
00941 if (!theTrackerGeometry.isValid()) {
00942 edm::LogWarning(MsgLoggerCat)
00943 << "Unable to find TrackerDigiGeometryRecord in event!";
00944 return;
00945 }
00946 const TrackerGeometry& theTracker(*theTrackerGeometry);
00947
00948
00949 edm::PSimHitContainer::const_iterator itHit;
00950
00952
00954 edm::PSimHitContainer thePxlBrlHits;
00955
00956 edm::Handle<edm::PSimHitContainer> PxlBrlLowContainer;
00957 iEvent.getByLabel(PxlBrlLowSrc_,PxlBrlLowContainer);
00958 if (!PxlBrlLowContainer.isValid()) {
00959 LogDebug(MsgLoggerCat)
00960 << "Unable to find TrackerHitsPixelBarrelLowTof in event!";
00961 validPxlBrlLow = false;
00962 }
00963
00964 edm::Handle<edm::PSimHitContainer> PxlBrlHighContainer;
00965 iEvent.getByLabel(PxlBrlHighSrc_,PxlBrlHighContainer);
00966 if (!PxlBrlHighContainer.isValid()) {
00967 LogDebug(MsgLoggerCat)
00968 << "Unable to find TrackerHitsPixelBarrelHighTof in event!";
00969 validPxlBrlHigh = false;
00970 }
00971
00972 if (validPxlBrlLow)
00973 thePxlBrlHits.insert(thePxlBrlHits.end(),PxlBrlLowContainer->begin(),
00974 PxlBrlLowContainer->end());
00975 if(validPxlBrlHigh)
00976 thePxlBrlHits.insert(thePxlBrlHits.end(),PxlBrlHighContainer->begin(),
00977 PxlBrlHighContainer->end());
00978
00979
00980 int i = 0, j = 0;
00981 for (itHit = thePxlBrlHits.begin(); itHit != thePxlBrlHits.end(); ++itHit) {
00982
00983 ++i;
00984
00985
00986 DetId theDetUnitId(itHit->detUnitId());
00987 int detector = theDetUnitId.det();
00988 int subdetector = theDetUnitId.subdetId();
00989
00990
00991 if ((detector == dTrk) && (subdetector == sdPxlBrl)) {
00992
00993
00994 const GeomDetUnit *theDet = theTracker.idToDetUnit(theDetUnitId);
00995
00996 if (!theDet) {
00997 edm::LogWarning(MsgLoggerCat)
00998 << "Unable to get GeomDetUnit from PxlBrlHits for Hit " << i;
00999 continue;
01000 }
01001
01002 ++j;
01003
01004
01005 const BoundPlane& bSurface = theDet->surface();
01006
01007 if(meTrackerPxBToF) meTrackerPxBToF->Fill(itHit->tof());
01008 if(meTrackerPxBR)
01009 meTrackerPxBR->Fill(bSurface.toGlobal(itHit->localPosition()).perp());
01010 if(meTrackerPxPhi)
01011 meTrackerPxPhi->Fill(bSurface.toGlobal(itHit->localPosition()).phi());
01012 if(meTrackerPxEta)
01013 meTrackerPxEta->Fill(bSurface.toGlobal(itHit->localPosition()).eta());
01014
01015 } else {
01016 edm::LogWarning(MsgLoggerCat)
01017 << "PxlBrl PSimHit " << i
01018 << " is expected to be (det,subdet) = ("
01019 << dTrk << "," << sdPxlBrl
01020 << "); value returned is: ("
01021 << detector << "," << subdetector << ")";
01022 continue;
01023 }
01024 }
01025
01026 if (verbosity > 1) {
01027 eventout += "\n Number of Pixel Barrel Hits collected:..... ";
01028 eventout += j;
01029 }
01030
01031 nPxlHits += j;
01032
01034
01036 edm::PSimHitContainer thePxlFwdHits;
01037
01038 edm::Handle<edm::PSimHitContainer> PxlFwdLowContainer;
01039 iEvent.getByLabel(PxlFwdLowSrc_,PxlFwdLowContainer);
01040 if (!PxlFwdLowContainer.isValid()) {
01041 LogDebug(MsgLoggerCat)
01042 << "Unable to find TrackerHitsPixelEndcapLowTof in event!";
01043 validPxlFwdLow = false;
01044 }
01045
01046 edm::Handle<edm::PSimHitContainer> PxlFwdHighContainer;
01047 iEvent.getByLabel(PxlFwdHighSrc_,PxlFwdHighContainer);
01048 if (!PxlFwdHighContainer.isValid()) {
01049 LogDebug("GlobalHitsAnalyzer_fillTrk")
01050 << "Unable to find TrackerHitsPixelEndcapHighTof in event!";
01051 validPxlFwdHigh = false;
01052 }
01053
01054 if (validPxlFwdLow)
01055 thePxlFwdHits.insert(thePxlFwdHits.end(),PxlFwdLowContainer->begin(),
01056 PxlFwdLowContainer->end());
01057 if (validPxlFwdHigh)
01058 thePxlFwdHits.insert(thePxlFwdHits.end(),PxlFwdHighContainer->begin(),
01059 PxlFwdHighContainer->end());
01060
01061
01062 i = 0; j = 0;
01063 for (itHit = thePxlFwdHits.begin(); itHit != thePxlFwdHits.end(); ++itHit) {
01064
01065 ++i;
01066
01067
01068 DetId theDetUnitId(itHit->detUnitId());
01069 int detector = theDetUnitId.det();
01070 int subdetector = theDetUnitId.subdetId();
01071
01072
01073 if ((detector == dTrk) && (subdetector == sdPxlFwd)) {
01074
01075
01076 const GeomDetUnit *theDet = theTracker.idToDetUnit(theDetUnitId);
01077
01078 if (!theDet) {
01079 edm::LogWarning(MsgLoggerCat)
01080 << "Unable to get GeomDetUnit from PxlFwdHits for Hit " << i;;
01081 continue;
01082 }
01083
01084 ++j;
01085
01086
01087 const BoundPlane& bSurface = theDet->surface();
01088
01089 if(meTrackerPxFToF) meTrackerPxFToF->Fill(itHit->tof());
01090 if(meTrackerPxFZ)
01091 meTrackerPxFZ->Fill(bSurface.toGlobal(itHit->localPosition()).z());
01092 if(meTrackerPxPhi)
01093 meTrackerPxPhi->Fill(bSurface.toGlobal(itHit->localPosition()).phi());
01094 if(meTrackerPxEta)
01095 meTrackerPxEta->Fill(bSurface.toGlobal(itHit->localPosition()).eta());
01096
01097 } else {
01098 edm::LogWarning(MsgLoggerCat)
01099 << "PxlFwd PSimHit " << i
01100 << " is expected to be (det,subdet) = ("
01101 << dTrk << "," << sdPxlFwd
01102 << "); value returned is: ("
01103 << detector << "," << subdetector << ")";
01104 continue;
01105 }
01106 }
01107
01108 if (verbosity > 1) {
01109 eventout += "\n Number of Pixel Forward Hits collected:.... ";
01110 eventout += j;
01111 }
01112
01113 nPxlHits += j;
01114
01115 if (meTrackerPx[0]) meTrackerPx[0]->Fill((float)nPxlHits);
01116 if (meTrackerPx[1]) meTrackerPx[1]->Fill((float)nPxlHits);
01117
01119
01121 nSiHits = 0;
01122 edm::PSimHitContainer theSiBrlHits;
01123
01124 edm::Handle<edm::PSimHitContainer> SiTIBLowContainer;
01125 iEvent.getByLabel(SiTIBLowSrc_,SiTIBLowContainer);
01126 if (!SiTIBLowContainer.isValid()) {
01127 LogDebug(MsgLoggerCat)
01128 << "Unable to find TrackerHitsTIBLowTof in event!";
01129 validSiTIBLow = false;
01130 }
01131
01132 edm::Handle<edm::PSimHitContainer> SiTIBHighContainer;
01133 iEvent.getByLabel(SiTIBHighSrc_,SiTIBHighContainer);
01134 if (!SiTIBHighContainer.isValid()) {
01135 LogDebug(MsgLoggerCat)
01136 << "Unable to find TrackerHitsTIBHighTof in event!";
01137 validSiTIBHigh = false;
01138 }
01139
01140 edm::Handle<edm::PSimHitContainer> SiTOBLowContainer;
01141 iEvent.getByLabel(SiTOBLowSrc_,SiTOBLowContainer);
01142 if (!SiTOBLowContainer.isValid()) {
01143 LogDebug(MsgLoggerCat)
01144 << "Unable to find TrackerHitsTOBLowTof in event!";
01145 validSiTOBLow = false;
01146 }
01147
01148 edm::Handle<edm::PSimHitContainer> SiTOBHighContainer;
01149 iEvent.getByLabel(SiTOBHighSrc_,SiTOBHighContainer);
01150 if (!SiTOBHighContainer.isValid()) {
01151 LogDebug(MsgLoggerCat)
01152 << "Unable to find TrackerHitsTOBHighTof in event!";
01153 validSiTOBHigh = false;
01154 }
01155
01156 if (validSiTIBLow)
01157 theSiBrlHits.insert(theSiBrlHits.end(),SiTIBLowContainer->begin(),
01158 SiTIBLowContainer->end());
01159 if (validSiTIBHigh)
01160 theSiBrlHits.insert(theSiBrlHits.end(),SiTIBHighContainer->begin(),
01161 SiTIBHighContainer->end());
01162 if (validSiTOBLow)
01163 theSiBrlHits.insert(theSiBrlHits.end(),SiTOBLowContainer->begin(),
01164 SiTOBLowContainer->end());
01165 if (validSiTOBHigh)
01166 theSiBrlHits.insert(theSiBrlHits.end(),SiTOBHighContainer->begin(),
01167 SiTOBHighContainer->end());
01168
01169
01170 i = 0; j = 0;
01171 for (itHit = theSiBrlHits.begin(); itHit != theSiBrlHits.end(); ++itHit) {
01172
01173 ++i;
01174
01175
01176 DetId theDetUnitId(itHit->detUnitId());
01177 int detector = theDetUnitId.det();
01178 int subdetector = theDetUnitId.subdetId();
01179
01180
01181 if ((detector == dTrk) &&
01182 ((subdetector == sdSiTIB) ||
01183 (subdetector == sdSiTOB))) {
01184
01185
01186 const GeomDetUnit *theDet = theTracker.idToDetUnit(theDetUnitId);
01187
01188 if (!theDet) {
01189 edm::LogWarning(MsgLoggerCat)
01190 << "Unable to get GeomDetUnit from SiBrlHits for Hit " << i;
01191 continue;
01192 }
01193
01194 ++j;
01195
01196
01197 const BoundPlane& bSurface = theDet->surface();
01198
01199 if(meTrackerSiBToF) meTrackerSiBToF->Fill(itHit->tof());
01200 if(meTrackerSiBR)
01201 meTrackerSiBR->Fill(bSurface.toGlobal(itHit->localPosition()).perp());
01202 if(meTrackerSiPhi)
01203 meTrackerSiPhi->Fill(bSurface.toGlobal(itHit->localPosition()).phi());
01204 if(meTrackerSiEta)
01205 meTrackerSiEta->Fill(bSurface.toGlobal(itHit->localPosition()).eta());
01206
01207 } else {
01208 edm::LogWarning(MsgLoggerCat)
01209 << "SiBrl PSimHit " << i
01210 << " is expected to be (det,subdet) = ("
01211 << dTrk << "," << sdSiTIB
01212 << " || " << sdSiTOB << "); value returned is: ("
01213 << detector << "," << subdetector << ")";
01214 continue;
01215 }
01216 }
01217
01218 if (verbosity > 1) {
01219 eventout += "\n Number of Silicon Barrel Hits collected:... ";
01220 eventout += j;
01221 }
01222
01223 nSiHits += j;
01224
01226
01228 edm::PSimHitContainer theSiFwdHits;
01229
01230 edm::Handle<edm::PSimHitContainer> SiTIDLowContainer;
01231 iEvent.getByLabel(SiTIDLowSrc_,SiTIDLowContainer);
01232 if (!SiTIDLowContainer.isValid()) {
01233 LogDebug(MsgLoggerCat)
01234 << "Unable to find TrackerHitsTIDLowTof in event!";
01235 validSiTIDLow = false;
01236 }
01237
01238 edm::Handle<edm::PSimHitContainer> SiTIDHighContainer;
01239 iEvent.getByLabel(SiTIDHighSrc_,SiTIDHighContainer);
01240 if (!SiTIDHighContainer.isValid()) {
01241 LogDebug("GlobalHitsAnalyzer_fillTrk")
01242 << "Unable to find TrackerHitsTIDHighTof in event!";
01243 validSiTIDHigh = false;
01244 }
01245
01246 edm::Handle<edm::PSimHitContainer> SiTECLowContainer;
01247 iEvent.getByLabel(SiTECLowSrc_,SiTECLowContainer);
01248 if (!SiTECLowContainer.isValid()) {
01249 LogDebug(MsgLoggerCat)
01250 << "Unable to find TrackerHitsTECLowTof in event!";
01251 validSiTECLow = false;
01252 }
01253
01254 edm::Handle<edm::PSimHitContainer> SiTECHighContainer;
01255 iEvent.getByLabel(SiTECHighSrc_,SiTECHighContainer);
01256 if (!SiTECHighContainer.isValid()) {
01257 LogDebug(MsgLoggerCat)
01258 << "Unable to find TrackerHitsTECHighTof in event!";
01259 validSiTECHigh = false;
01260 }
01261
01262 if (validSiTIDLow)
01263 theSiFwdHits.insert(theSiFwdHits.end(),SiTIDLowContainer->begin(),
01264 SiTIDLowContainer->end());
01265 if (validSiTIDHigh)
01266 theSiFwdHits.insert(theSiFwdHits.end(),SiTIDHighContainer->begin(),
01267 SiTIDHighContainer->end());
01268 if (validSiTECLow)
01269 theSiFwdHits.insert(theSiFwdHits.end(),SiTECLowContainer->begin(),
01270 SiTECLowContainer->end());
01271 if (validSiTECHigh)
01272 theSiFwdHits.insert(theSiFwdHits.end(),SiTECHighContainer->begin(),
01273 SiTECHighContainer->end());
01274
01275
01276 i = 0; j = 0;
01277 for (itHit = theSiFwdHits.begin(); itHit != theSiFwdHits.end(); ++itHit) {
01278
01279 ++i;
01280
01281
01282 DetId theDetUnitId(itHit->detUnitId());
01283 int detector = theDetUnitId.det();
01284 int subdetector = theDetUnitId.subdetId();
01285
01286
01287 if ((detector == dTrk) &&
01288 ((subdetector == sdSiTID) ||
01289 (subdetector == sdSiTEC))) {
01290
01291
01292 const GeomDetUnit *theDet = theTracker.idToDetUnit(theDetUnitId);
01293
01294 if (!theDet) {
01295 edm::LogWarning(MsgLoggerCat)
01296 << "Unable to get GeomDetUnit from SiFwdHits Hit " << i;
01297 return;
01298 }
01299
01300 ++j;
01301
01302
01303 const BoundPlane& bSurface = theDet->surface();
01304
01305 if(meTrackerSiFToF) meTrackerSiFToF->Fill(itHit->tof());
01306 if(meTrackerSiFZ)
01307 meTrackerSiFZ->Fill(bSurface.toGlobal(itHit->localPosition()).z());
01308 if(meTrackerSiPhi)
01309 meTrackerSiPhi->Fill(bSurface.toGlobal(itHit->localPosition()).phi());
01310 if(meTrackerSiEta)
01311 meTrackerSiEta->Fill(bSurface.toGlobal(itHit->localPosition()).eta());
01312
01313 } else {
01314 edm::LogWarning(MsgLoggerCat)
01315 << "SiFwd PSimHit " << i
01316 << " is expected to be (det,subdet) = ("
01317 << dTrk << "," << sdSiTOB
01318 << " || " << sdSiTEC << "); value returned is: ("
01319 << detector << "," << subdetector << ")";
01320 continue;
01321 }
01322 }
01323
01324 if (verbosity > 1) {
01325 eventout += "\n Number of Silicon Forward Hits collected:.. ";
01326 eventout += j;
01327 }
01328
01329 nSiHits +=j;
01330
01331 if (meTrackerSi[0]) meTrackerSi[0]->Fill((float)nSiHits);
01332 if (meTrackerSi[1]) meTrackerSi[1]->Fill((float)nSiHits);
01333
01334 if (verbosity > 0)
01335 edm::LogInfo(MsgLoggerCat) << eventout << "\n";
01336
01337 return;
01338 }
01339
01340 void GlobalHitsAnalyzer::fillMuon(const edm::Event& iEvent,
01341 const edm::EventSetup& iSetup)
01342 {
01343 nMuonHits = 0;
01344 std::string MsgLoggerCat = "GlobalHitsAnalyzer_fillMuon";
01345
01346 TString eventout;
01347 if (verbosity > 0)
01348 eventout = "\nGathering info:";
01349
01350
01351 edm::PSimHitContainer::const_iterator itHit;
01352
01354
01356
01357 edm::ESHandle<CSCGeometry> theCSCGeometry;
01358 iSetup.get<MuonGeometryRecord>().get(theCSCGeometry);
01359 if (!theCSCGeometry.isValid()) {
01360 edm::LogWarning(MsgLoggerCat)
01361 << "Unable to find MuonGeometryRecord for the CSCGeometry in event!";
01362 return;
01363 }
01364 const CSCGeometry& theCSCMuon(*theCSCGeometry);
01365
01366
01367 edm::Handle<edm::PSimHitContainer> MuonCSCContainer;
01368 iEvent.getByLabel(MuonCscSrc_,MuonCSCContainer);
01369 if (!MuonCSCContainer.isValid()) {
01370 LogDebug(MsgLoggerCat)
01371 << "Unable to find MuonCSCHits in event!";
01372 validMuonCSC = false;
01373 }
01374
01375 if (validMuonCSC) {
01376
01377 int i = 0, j = 0;
01378 for (itHit = MuonCSCContainer->begin(); itHit != MuonCSCContainer->end();
01379 ++itHit) {
01380
01381 ++i;
01382
01383
01384 DetId theDetUnitId(itHit->detUnitId());
01385 int detector = theDetUnitId.det();
01386 int subdetector = theDetUnitId.subdetId();
01387
01388
01389 if ((detector == dMuon) &&
01390 (subdetector == sdMuonCSC)) {
01391
01392
01393 const GeomDetUnit *theDet = theCSCMuon.idToDetUnit(theDetUnitId);
01394
01395 if (!theDet) {
01396 edm::LogWarning(MsgLoggerCat)
01397 << "Unable to get GeomDetUnit from theCSCMuon for hit " << i;
01398 continue;
01399 }
01400
01401 ++j;
01402
01403
01404 const BoundPlane& bSurface = theDet->surface();
01405
01406 if (meMuonCscToF[0]) meMuonCscToF[0]->Fill(itHit->tof());
01407 if (meMuonCscToF[1]) meMuonCscToF[1]->Fill(itHit->tof());
01408 if (meMuonCscZ)
01409 meMuonCscZ->Fill(bSurface.toGlobal(itHit->localPosition()).z());
01410 if (meMuonPhi)
01411 meMuonPhi->Fill(bSurface.toGlobal(itHit->localPosition()).phi());
01412 if (meMuonEta)
01413 meMuonEta->Fill(bSurface.toGlobal(itHit->localPosition()).eta());
01414
01415 } else {
01416 edm::LogWarning(MsgLoggerCat)
01417 << "MuonCsc PSimHit " << i
01418 << " is expected to be (det,subdet) = ("
01419 << dMuon << "," << sdMuonCSC
01420 << "); value returned is: ("
01421 << detector << "," << subdetector << ")";
01422 continue;
01423 }
01424 }
01425
01426 if (verbosity > 1) {
01427 eventout += "\n Number of CSC muon Hits collected:......... ";
01428 eventout += j;
01429 }
01430
01431 nMuonHits += j;
01432 }
01433
01435
01437
01438 edm::ESHandle<DTGeometry> theDTGeometry;
01439 iSetup.get<MuonGeometryRecord>().get(theDTGeometry);
01440 if (!theDTGeometry.isValid()) {
01441 edm::LogWarning(MsgLoggerCat)
01442 << "Unable to find MuonGeometryRecord for the DTGeometry in event!";
01443 return;
01444 }
01445 const DTGeometry& theDTMuon(*theDTGeometry);
01446
01447
01448 edm::Handle<edm::PSimHitContainer> MuonDtContainer;
01449 iEvent.getByLabel(MuonDtSrc_,MuonDtContainer);
01450 if (!MuonDtContainer.isValid()) {
01451 LogDebug(MsgLoggerCat)
01452 << "Unable to find MuonDTHits in event!";
01453 validMuonDt = false;
01454 }
01455
01456 if (validMuonDt) {
01457
01458 int i = 0, j = 0;
01459 for (itHit = MuonDtContainer->begin(); itHit != MuonDtContainer->end();
01460 ++itHit) {
01461
01462 ++i;
01463
01464
01465 DetId theDetUnitId(itHit->detUnitId());
01466 int detector = theDetUnitId.det();
01467 int subdetector = theDetUnitId.subdetId();
01468
01469
01470 if ((detector == dMuon) &&
01471 (subdetector == sdMuonDT)) {
01472
01473
01474
01475 DTWireId wireId(itHit->detUnitId());
01476
01477
01478 const DTLayer *theDet = theDTMuon.layer(wireId.layerId());
01479
01480 if (!theDet) {
01481 edm::LogWarning(MsgLoggerCat)
01482 << "Unable to get GeomDetUnit from theDtMuon for hit " << i;
01483 continue;
01484 }
01485
01486 ++j;
01487
01488
01489 const BoundPlane& bSurface = theDet->surface();
01490
01491 if (meMuonDtToF[0]) meMuonDtToF[0]->Fill(itHit->tof());
01492 if (meMuonDtToF[1]) meMuonDtToF[1]->Fill(itHit->tof());
01493 if (meMuonDtR)
01494 meMuonDtR->Fill(bSurface.toGlobal(itHit->localPosition()).perp());
01495 if (meMuonPhi)
01496 meMuonPhi->Fill(bSurface.toGlobal(itHit->localPosition()).phi());
01497 if (meMuonEta)
01498 meMuonEta->Fill(bSurface.toGlobal(itHit->localPosition()).eta());
01499
01500 } else {
01501 edm::LogWarning(MsgLoggerCat)
01502 << "MuonDt PSimHit " << i
01503 << " is expected to be (det,subdet) = ("
01504 << dMuon << "," << sdMuonDT
01505 << "); value returned is: ("
01506 << detector << "," << subdetector << ")";
01507 continue;
01508 }
01509 }
01510
01511 if (verbosity > 1) {
01512 eventout += "\n Number of DT muon Hits collected:.......... ";
01513 eventout += j;
01514 }
01515
01516 nMuonHits += j;
01517 }
01518
01519
01521
01523
01524 edm::ESHandle<RPCGeometry> theRPCGeometry;
01525 iSetup.get<MuonGeometryRecord>().get(theRPCGeometry);
01526 if (!theRPCGeometry.isValid()) {
01527 edm::LogWarning(MsgLoggerCat)
01528 << "Unable to find MuonGeometryRecord for the RPCGeometry in event!";
01529 return;
01530 }
01531 const RPCGeometry& theRPCMuon(*theRPCGeometry);
01532
01533
01534 edm::Handle<edm::PSimHitContainer> MuonRPCContainer;
01535 iEvent.getByLabel(MuonRpcSrc_,MuonRPCContainer);
01536 if (!MuonRPCContainer.isValid()) {
01537 LogDebug(MsgLoggerCat)
01538 << "Unable to find MuonRPCHits in event!";
01539 validMuonRPC = false;
01540 }
01541
01542 if (validMuonRPC) {
01543
01544 int i = 0, j = 0;
01545 int RPCBrl =0, RPCFwd = 0;
01546 for (itHit = MuonRPCContainer->begin(); itHit != MuonRPCContainer->end();
01547 ++itHit) {
01548
01549 ++i;
01550
01551
01552 DetId theDetUnitId(itHit->detUnitId());
01553 int detector = theDetUnitId.det();
01554 int subdetector = theDetUnitId.subdetId();
01555
01556
01557 if ((detector == dMuon) &&
01558 (subdetector == sdMuonRPC)) {
01559
01560
01561 RPCDetId RPCId(itHit->detUnitId());
01562
01563
01564 int region = RPCId.region();
01565
01566
01567 const GeomDetUnit *theDet = theRPCMuon.idToDetUnit(theDetUnitId);
01568
01569 if (!theDet) {
01570 edm::LogWarning(MsgLoggerCat)
01571 << "Unable to get GeomDetUnit from theRPCMuon for hit " << i;
01572 continue;
01573 }
01574
01575 ++j;
01576
01577
01578 const BoundPlane& bSurface = theDet->surface();
01579
01580
01581 if ((region == sdMuonRPCRgnFwdp) || (region == sdMuonRPCRgnFwdn)) {
01582 ++RPCFwd;
01583
01584 if (meMuonRpcFToF[0]) meMuonRpcFToF[0]->Fill(itHit->tof());
01585 if (meMuonRpcFToF[1]) meMuonRpcFToF[1]->Fill(itHit->tof());
01586 if (meMuonRpcFZ)
01587 meMuonRpcFZ->Fill(bSurface.toGlobal(itHit->localPosition()).z());
01588 if (meMuonPhi)
01589 meMuonPhi->Fill(bSurface.toGlobal(itHit->localPosition()).phi());
01590 if (meMuonEta)
01591 meMuonEta->Fill(bSurface.toGlobal(itHit->localPosition()).eta());
01592
01593 } else if (region == sdMuonRPCRgnBrl) {
01594 ++RPCBrl;
01595
01596 if (meMuonRpcBToF[0]) meMuonRpcBToF[0]->Fill(itHit->tof());
01597 if (meMuonRpcBToF[1]) meMuonRpcBToF[1]->Fill(itHit->tof());
01598 if (meMuonRpcBR)
01599 meMuonRpcBR->Fill(bSurface.toGlobal(itHit->
01600 localPosition()).perp());
01601 if (meMuonPhi)
01602 meMuonPhi->Fill(bSurface.toGlobal(itHit->localPosition()).phi());
01603 if (meMuonEta)
01604 meMuonEta->Fill(bSurface.toGlobal(itHit->localPosition()).eta());
01605
01606 } else {
01607 edm::LogWarning(MsgLoggerCat)
01608 << "Invalid region for RPC Muon hit" << i;
01609 continue;
01610 }
01611 } else {
01612 edm::LogWarning(MsgLoggerCat)
01613 << "MuonRpc PSimHit " << i
01614 << " is expected to be (det,subdet) = ("
01615 << dMuon << "," << sdMuonRPC
01616 << "); value returned is: ("
01617 << detector << "," << subdetector << ")";
01618 continue;
01619 }
01620 }
01621
01622 if (verbosity > 1) {
01623 eventout += "\n Number of RPC muon Hits collected:......... ";
01624 eventout += j;
01625 eventout += "\n RPC Barrel muon Hits:............ ";
01626 eventout += RPCBrl;
01627 eventout += "\n RPC Forward muon Hits:........... ";
01628 eventout += RPCFwd;
01629 }
01630
01631 nMuonHits += j;
01632 }
01633
01634 if (meMuon[0]) meMuon[0]->Fill((float)nMuonHits);
01635 if (meMuon[1]) meMuon[1]->Fill((float)nMuonHits);
01636
01637 if (verbosity > 0)
01638 edm::LogInfo(MsgLoggerCat) << eventout << "\n";
01639
01640 return;
01641 }
01642
01643 void GlobalHitsAnalyzer::fillECal(const edm::Event& iEvent,
01644 const edm::EventSetup& iSetup)
01645 {
01646 std::string MsgLoggerCat = "GlobalHitsAnalyzer_fillECal";
01647
01648 TString eventout;
01649 if (verbosity > 0)
01650 eventout = "\nGathering info:";
01651
01652
01653 edm::ESHandle<CaloGeometry> theCaloGeometry;
01654 iSetup.get<CaloGeometryRecord>().get(theCaloGeometry);
01655 if (!theCaloGeometry.isValid()) {
01656 edm::LogWarning(MsgLoggerCat)
01657 << "Unable to find CaloGeometryRecord in event!";
01658 return;
01659 }
01660 const CaloGeometry& theCalo(*theCaloGeometry);
01661
01662
01663 edm::PCaloHitContainer::const_iterator itHit;
01664
01666
01668 edm::PCaloHitContainer theECalHits;
01669
01670 edm::Handle<edm::PCaloHitContainer> EBContainer;
01671 iEvent.getByLabel(ECalEBSrc_,EBContainer);
01672 if (!EBContainer.isValid()) {
01673 LogDebug(MsgLoggerCat)
01674 << "Unable to find EcalHitsEB in event!";
01675 validEB = false;
01676 }
01677
01678 edm::Handle<edm::PCaloHitContainer> EEContainer;
01679 iEvent.getByLabel(ECalEESrc_,EEContainer);
01680 if (!EEContainer.isValid()) {
01681 LogDebug(MsgLoggerCat)
01682 << "Unable to find EcalHitsEE in event!";
01683 validEE = false;
01684 }
01685
01686 if (validEB)
01687 theECalHits.insert(theECalHits.end(),EBContainer->begin(),
01688 EBContainer->end());
01689 if (validEE)
01690 theECalHits.insert(theECalHits.end(),EEContainer->begin(),
01691 EEContainer->end());
01692
01693
01694 int i = 0, j = 0;
01695 for (itHit = theECalHits.begin(); itHit != theECalHits.end(); ++itHit) {
01696
01697 ++i;
01698
01699
01700 DetId theDetUnitId(itHit->id());
01701 int detector = theDetUnitId.det();
01702 int subdetector = theDetUnitId.subdetId();
01703
01704
01705 if ((detector == dEcal) &&
01706 ((subdetector == sdEcalBrl) ||
01707 (subdetector == sdEcalFwd))) {
01708
01709
01710 const CaloCellGeometry *theDet = theCalo.
01711 getSubdetectorGeometry(theDetUnitId)->getGeometry(theDetUnitId);
01712
01713 if (!theDet) {
01714 edm::LogWarning(MsgLoggerCat)
01715 << "Unable to get CaloCellGeometry from ECalHits for Hit " << i;
01716 continue;
01717 }
01718
01719 ++j;
01720
01721
01722 const GlobalPoint& globalposition = theDet->getPosition();
01723
01724 if (meCaloEcalE[0]) meCaloEcalE[0]->Fill(itHit->energy());
01725 if (meCaloEcalE[1]) meCaloEcalE[1]->Fill(itHit->energy());
01726 if (meCaloEcalToF[0]) meCaloEcalToF[0]->Fill(itHit->time());
01727 if (meCaloEcalToF[1]) meCaloEcalToF[1]->Fill(itHit->time());
01728 if (meCaloEcalPhi) meCaloEcalPhi->Fill(globalposition.phi());
01729 if (meCaloEcalEta) meCaloEcalEta->Fill(globalposition.eta());
01730
01731 } else {
01732 edm::LogWarning(MsgLoggerCat)
01733 << "ECal PCaloHit " << i
01734 << " is expected to be (det,subdet) = ("
01735 << dEcal << "," << sdEcalBrl
01736 << " || " << sdEcalFwd << "); value returned is: ("
01737 << detector << "," << subdetector << ")";
01738 continue;
01739 }
01740 }
01741
01742 if (verbosity > 1) {
01743 eventout += "\n Number of ECal Hits collected:............. ";
01744 eventout += j;
01745 }
01746
01747 if (meCaloEcal[0]) meCaloEcal[0]->Fill((float)j);
01748 if (meCaloEcal[1]) meCaloEcal[1]->Fill((float)j);
01749
01751
01753
01754 edm::Handle<edm::PCaloHitContainer> PreShContainer;
01755 iEvent.getByLabel(ECalESSrc_,PreShContainer);
01756 if (!PreShContainer.isValid()) {
01757 LogDebug(MsgLoggerCat)
01758 << "Unable to find EcalHitsES in event!";
01759 validPresh = false;
01760 }
01761
01762 if (validPresh) {
01763
01764 int i = 0, j = 0;
01765 for (itHit = PreShContainer->begin();
01766 itHit != PreShContainer->end(); ++itHit) {
01767
01768 ++i;
01769
01770
01771 DetId theDetUnitId(itHit->id());
01772 int detector = theDetUnitId.det();
01773 int subdetector = theDetUnitId.subdetId();
01774
01775
01776 if ((detector == dEcal) &&
01777 (subdetector == sdEcalPS)) {
01778
01779
01780 const CaloCellGeometry *theDet = theCalo.
01781 getSubdetectorGeometry(theDetUnitId)->getGeometry(theDetUnitId);
01782
01783 if (!theDet) {
01784 edm::LogWarning(MsgLoggerCat)
01785 << "Unable to get CaloCellGeometry from PreShContainer for Hit "
01786 << i;
01787 continue;
01788 }
01789
01790 ++j;
01791
01792
01793 const GlobalPoint& globalposition = theDet->getPosition();
01794
01795 if (meCaloPreShE[0]) meCaloPreShE[0]->Fill(itHit->energy());
01796 if (meCaloPreShE[1]) meCaloPreShE[1]->Fill(itHit->energy());
01797 if (meCaloPreShToF[0]) meCaloPreShToF[0]->Fill(itHit->time());
01798 if (meCaloPreShToF[1]) meCaloPreShToF[1]->Fill(itHit->time());
01799 if (meCaloPreShPhi) meCaloPreShPhi->Fill(globalposition.phi());
01800 if (meCaloPreShEta) meCaloPreShEta->Fill(globalposition.eta());
01801
01802 } else {
01803 edm::LogWarning(MsgLoggerCat)
01804 << "PreSh PCaloHit " << i
01805 << " is expected to be (det,subdet) = ("
01806 << dEcal << "," << sdEcalPS
01807 << "); value returned is: ("
01808 << detector << "," << subdetector << ")";
01809 continue;
01810 }
01811 }
01812
01813 if (verbosity > 1) {
01814 eventout += "\n Number of PreSh Hits collected:............ ";
01815 eventout += j;
01816 }
01817
01818 if (meCaloPreSh[0]) meCaloPreSh[0]->Fill((float)j);
01819 if (meCaloPreSh[1]) meCaloPreSh[1]->Fill((float)j);
01820 }
01821
01822 if (verbosity > 0)
01823 edm::LogInfo(MsgLoggerCat) << eventout << "\n";
01824
01825 return;
01826 }
01827
01828 void GlobalHitsAnalyzer::fillHCal(const edm::Event& iEvent,
01829 const edm::EventSetup& iSetup)
01830 {
01831 std::string MsgLoggerCat = "GlobalHitsAnalyzer_fillHCal";
01832
01833 TString eventout;
01834 if (verbosity > 0)
01835 eventout = "\nGathering info:";
01836
01837
01838 edm::ESHandle<CaloGeometry> theCaloGeometry;
01839 iSetup.get<CaloGeometryRecord>().get(theCaloGeometry);
01840 if (!theCaloGeometry.isValid()) {
01841 edm::LogWarning(MsgLoggerCat)
01842 << "Unable to find CaloGeometryRecord in event!";
01843 return;
01844 }
01845 const CaloGeometry& theCalo(*theCaloGeometry);
01846
01847
01848 edm::PCaloHitContainer::const_iterator itHit;
01849
01851
01853
01854 edm::Handle<edm::PCaloHitContainer> HCalContainer;
01855 iEvent.getByLabel(HCalSrc_,HCalContainer);
01856 if (!HCalContainer.isValid()) {
01857 LogDebug(MsgLoggerCat)
01858 << "Unable to find HCalHits in event!";
01859 validHcal = false;
01860 }
01861
01862 if (validHcal) {
01863
01864 int i = 0, j = 0;
01865 for (itHit = HCalContainer->begin();
01866 itHit != HCalContainer->end(); ++itHit) {
01867
01868 ++i;
01869
01870
01871 DetId theDetUnitId(itHit->id());
01872 int detector = theDetUnitId.det();
01873 int subdetector = theDetUnitId.subdetId();
01874
01875
01876 if ((detector == dHcal) &&
01877 ((subdetector == sdHcalBrl) ||
01878 (subdetector == sdHcalEC) ||
01879 (subdetector == sdHcalOut) ||
01880 (subdetector == sdHcalFwd))) {
01881
01882
01883 const CaloCellGeometry *theDet = theCalo.
01884 getSubdetectorGeometry(theDetUnitId)->getGeometry(theDetUnitId);
01885
01886 if (!theDet) {
01887 edm::LogWarning(MsgLoggerCat)
01888 << "Unable to get CaloCellGeometry from HCalContainer for Hit "
01889 << i;
01890 continue;
01891 }
01892
01893 ++j;
01894
01895
01896 const GlobalPoint& globalposition = theDet->getPosition();
01897
01898 if (meCaloHcalE[0]) meCaloHcalE[0]->Fill(itHit->energy());
01899 if (meCaloHcalE[1]) meCaloHcalE[1]->Fill(itHit->energy());
01900 if (meCaloHcalToF[0]) meCaloHcalToF[0]->Fill(itHit->time());
01901 if (meCaloHcalToF[1]) meCaloHcalToF[1]->Fill(itHit->time());
01902 if (meCaloHcalPhi) meCaloHcalPhi->Fill(globalposition.phi());
01903 if (meCaloHcalEta) meCaloHcalEta->Fill(globalposition.eta());
01904
01905 } else {
01906 edm::LogWarning(MsgLoggerCat)
01907 << "HCal PCaloHit " << i
01908 << " is expected to be (det,subdet) = ("
01909 << dHcal << "," << sdHcalBrl
01910 << " || " << sdHcalEC << " || " << sdHcalOut << " || " << sdHcalFwd
01911 << "); value returned is: ("
01912 << detector << "," << subdetector << ")";
01913 continue;
01914 }
01915 }
01916
01917 if (verbosity > 1) {
01918 eventout += "\n Number of HCal Hits collected:............. ";
01919 eventout += j;
01920 }
01921
01922 if (meCaloHcal[0]) meCaloHcal[0]->Fill((float)j);
01923 if (meCaloHcal[1]) meCaloHcal[1]->Fill((float)j);
01924 }
01925
01926 if (verbosity > 0)
01927 edm::LogInfo(MsgLoggerCat) << eventout << "\n";
01928
01929 return;
01930 }