CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_6_1_2_SLHC4_patch1/src/Validation/GlobalHits/src/GlobalHitsProdHist.cc

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