CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_6_1_2_SLHC4_patch1/src/Validation/HcalHits/src/ZdcSimHitStudy.cc

Go to the documentation of this file.
00001 
00002 // Package:    ZdcSimHitStudy
00003 // Class:      ZdcSimHitStudy
00004 //
00005 /*
00006  Description: 
00007               This code has been developed to be a check for the ZDC sim. In 2009, it was found that the ZDC Simulation was unrealistic and needed repair. The aim of this code is to show the user the input and output of a ZDC MinBias simulation.
00008 
00009  Implementation:
00010       First a MinBias simulation should be run, it could be pythia,hijin,or hydjet. This will output a .root file which should have information about recoGenParticles, and g4SimHits_ZDCHits. Use this .root file as the input into the cfg.py which is found in the main directory of this package. This output will be another .root file which is meant to be viewed in a TBrowser.
00011 
00012 */
00013 //
00014 // Original Author: Jaime Gomez (U. of Maryland) with SIGNIFICANT assistance of Dr. Jefferey Temple (U. of Maryland) 
00015 // Adapted from: E. Garcia-Solis' (CSU) original code    
00016 //
00017 //         Created:  Summer 2012
00019 
00020 
00021 
00022 
00023 
00024 #include "Validation/HcalHits/interface/ZdcSimHitStudy.h"
00025 #include "DataFormats/HcalDetId/interface/HcalZDCDetId.h"
00026 
00027 #include "FWCore/Utilities/interface/Exception.h"
00028 #include "CLHEP/Units/GlobalSystemOfUnits.h"
00029 
00030 ZdcSimHitStudy::ZdcSimHitStudy(const edm::ParameterSet& ps) {
00031 
00032   g4Label  = ps.getUntrackedParameter<std::string>("moduleLabel","g4SimHits");
00033   zdcHits = ps.getUntrackedParameter<std::string>("HitCollection","ZdcHits");
00034   outFile_ = ps.getUntrackedParameter<std::string>("outputFile", "zdcHitStudy.root");
00035   verbose_ = ps.getUntrackedParameter<bool>("Verbose", false);
00036   checkHit_= true;
00037 
00038   edm::LogInfo("ZdcSimHitStudy") 
00039     //std::cout
00040     << "Module Label: " << g4Label << "   Hits: "
00041     << zdcHits << " / "<< checkHit_ 
00042     << "   Output: " << outFile_;
00043 
00044   dbe_ = edm::Service<DQMStore>().operator->();
00045   if (dbe_) {
00046     if (verbose_) {
00047       dbe_->setVerbose(1);
00048       sleep (3);
00049       dbe_->showDirStructure();
00050     } else {
00051       dbe_->setVerbose(0);
00052     }
00053   }
00054 }
00055 
00056 ZdcSimHitStudy::~ZdcSimHitStudy() {}
00057 
00058 void ZdcSimHitStudy::beginJob() {
00059   if (dbe_) {
00060     dbe_->setCurrentFolder("ZDCValidation");
00061     //Histograms for Hits
00063 //# Below we are filling the histograms made in the .h file. The syntax is as follows:                                      #
00064 //# plot_code_name = dbe_->TypeofPlot[(1,2,3)-D,(F,I,D)]("Name as it will appear","Title",axis options);                    #
00065 //# They will be stored in the TFile subdirectory set by :    dbe_->setCurrentFolder("FolderIwant")                         #
00066 //# axis options are like (#ofbins,min,max)                                                                                 #
00068 
00069 
00070     if (checkHit_) {
00072       dbe_->setCurrentFolder("ZDCValidation/ZdcSimHits");
00073       meAllZdcNHit_ = dbe_->book1D("ZDC Hits","Number of All Hits in ZDC",100,0.,100.);
00074       meAllZdcNHit_->setAxisTitle("Total Hits",1);
00075       meAllZdcNHit_->setAxisTitle("Counts",2);
00077       dbe_->setCurrentFolder("ZDCValidation/ZdcSimHits/Excess_Info/Debug_Helper");
00078       meBadZdcDetHit_= dbe_->book1D("Hiits with the wrong Det","Hits with wrong Det in ZDC",100,0.,100.);
00079       meBadZdcDetHit_->setAxisTitle("Wrong Hits",1);
00080       meBadZdcDetHit_->setAxisTitle("Counts",2);
00082       meBadZdcSecHit_= dbe_->book1D("Wrong Section Hits","Hits with wrong Section in ZDC",100,0.,100.);
00083       meBadZdcSecHit_->setAxisTitle("Hits in wrong section",1);
00084       meBadZdcSecHit_->setAxisTitle("Counts",2);
00086       meBadZdcIdHit_ = dbe_->book1D("Wrong_ID_Hits","Hits with wrong ID in ZDC",100,0.,100.);
00087       meBadZdcIdHit_->setAxisTitle("Hits with wrong ID",1);
00088       meBadZdcIdHit_->setAxisTitle("Counts",2);
00090       dbe_->setCurrentFolder("ZDCValidation/ZdcSimHits/Excess_Info/BasicHitInfo");      
00091       meZdcNHitEM_   = dbe_->book1D("Hits in EM","Number of Hits in ZDC EM",100,0.,100.);
00092       meZdcNHitEM_->setAxisTitle("EM Hits",1);
00093       meZdcNHitEM_->setAxisTitle("Counts",2);
00095       meZdcNHitHad_   = dbe_->book1D("Hits in HAD","Number of Hits in ZDC Had",100,0.,100.);
00096       meZdcNHitHad_->setAxisTitle("HAD Hits",1);
00097       meZdcNHitHad_->setAxisTitle("Counts",2);
00099       meZdcNHitLum_   = dbe_->book1D("Hits in LUM","Number of Hits in ZDC Lum",100,0.,100.);
00100       meZdcNHitLum_->setAxisTitle("LUM Hits",1);
00101       meZdcNHitLum_->setAxisTitle("Counts",2);
00103       meZdcDetectHit_= dbe_->book1D("Calo Detector ID","Calo Detector ID",50,0.,50.);
00104       meZdcDetectHit_->setAxisTitle("Detector Hits",1);
00105       meZdcDetectHit_->setAxisTitle("Counts",2);
00107       meZdcSideHit_ = dbe_->book1D("ZDC Side","Side in ZDC",4,-2,2.);
00108       meZdcSideHit_->setAxisTitle("ZDC Side",1);
00109       meZdcSideHit_->setAxisTitle("Counts",2);
00111       meZdcSectionHit_   = dbe_->book1D("ZDC Section","Section in ZDC",4,0.,4.);
00112       meZdcSectionHit_->setAxisTitle("ZDC Section",1);
00113       meZdcSectionHit_->setAxisTitle("Counts",2);
00115       meZdcChannelHit_   = dbe_->book1D("ZDC Channel","Channel in ZDC",10,0.,10.);
00116       meZdcChannelHit_->setAxisTitle("ZDC Channel",1);
00117       meZdcChannelHit_->setAxisTitle("Counts",2);
00119       dbe_->setCurrentFolder("ZDCValidation/ZdcSimHits/");
00120       meZdcEnergyHit_= dbe_->book1D("Hit Energy","Hits Energy",4000,0.,8000.);
00121       meZdcEnergyHit_->setAxisTitle("Counts",2);
00122       meZdcEnergyHit_->setAxisTitle("Energy (GeV)",1);
00124       meZdcHadEnergyHit_= dbe_->book1D("Hit Energy HAD","Hits Energy in Had Section",4000,0.,8000.);
00125       meZdcHadEnergyHit_->setAxisTitle("Counts",2);
00126       meZdcHadEnergyHit_->setAxisTitle("Energy (GeV)",1);
00128       meZdcEMEnergyHit_ = dbe_->book1D("Hit Energy EM","Hits Energy in EM Section",4000,0.,8000.);
00129       meZdcEMEnergyHit_->setAxisTitle("Counts",2);
00130       meZdcEMEnergyHit_->setAxisTitle("Energy (GeV)",1);
00132       dbe_->setCurrentFolder("ZDCValidation/ZdcSimHits/Excess_Info/BasicHitInfo");      
00133       meZdcTimeHit_  = dbe_->book1D("Time in ZDC","Time in ZDC",300,0.,600.);
00134       meZdcTimeHit_->setAxisTitle("Time (ns)",1);
00135       meZdcTimeHit_->setAxisTitle("Counts",2);
00137       meZdcTimeWHit_ = dbe_->book1D("Energy Weighted Time in ZDC","Time in ZDC (E wtd)", 300,0.,600.);
00138       meZdcTimeWHit_->setAxisTitle("Time (ns)",1);
00139       meZdcTimeWHit_->setAxisTitle("Counts",2);
00141       meZdc10Ene_ = dbe_->book1D("ZDC Log(E)","Log10Energy in ZDC", 140, -20., 20. );
00142       meZdc10Ene_->setAxisTitle("Log(E) (GeV)",1);
00143       meZdc10Ene_->setAxisTitle("Counts",2);
00145       meZdcHadL10EneP_ = dbe_->bookProfile("Log(EHAD) vs Contribution","Log10Energy in Had ZDC vs Hit contribution", 140, -1., 20., 100, 0., 1. );
00146       meZdcHadL10EneP_->setAxisTitle("Log(EHAD) (GeV)",1);
00147       meZdcHadL10EneP_->setAxisTitle("Counts",2);
00149       meZdcEML10EneP_ = dbe_->bookProfile("Log(EEM) vs Contribution","Log10Energy in EM ZDC vs Hit contribution", 140, -1., 20., 100, 0., 1. );
00150       meZdcEML10EneP_->setAxisTitle("Log(EEM) (GeV)",1);
00151       meZdcEML10EneP_->setAxisTitle("Counts",2);
00153       dbe_->setCurrentFolder("ZDCValidation/ZdcSimHits");      
00154       meZdcEHadCh_ = dbe_->book2D("ZDC EHAD vs Channel","ZDC Had Section Energy vs Channel", 4000, 0., 8000., 6, 0., 6. );
00155       meZdcEHadCh_->setAxisTitle("Hadronic Channel Number",2);
00156       meZdcEHadCh_->setAxisTitle("Energy (GeV)",1);
00158       meZdcEEMCh_ = dbe_->book2D("ZDC EEM vs Channel","ZDC EM Section Energy vs Channel", 4000, 0., 8000., 6, 0., 6. );
00159       meZdcEEMCh_->setAxisTitle("EM Channel Number",2);
00160       meZdcEEMCh_->setAxisTitle("Energy (GeV)",1);
00162       dbe_->setCurrentFolder("ZDCValidation/ZdcSimHits/Excess_Info/BasicHitInfo");
00163       meZdcETime_ = dbe_->book2D("E vs T","Hits ZDC Energy vs Time", 4000, 0., 8000., 300, 0., 600. );
00164       meZdcETime_->setAxisTitle("Energy (GeV)",1);
00165       meZdcETime_->setAxisTitle("Time (ns)",2);
00167       dbe_->setCurrentFolder("ZDCValidation/ZdcSimHits/ENERGY_SUMS/Individual_Channels/NZDC");
00168       meZdcEneEmN1_  = dbe_->book1D("NZDC EM1 Energy","Energy EM module N1",4000,0.,8000.);
00169       meZdcEneEmN1_->setAxisTitle("Energy (GeV)",1);
00170       meZdcEneEmN1_->setAxisTitle("Counts",2);
00172       meZdcEneEmN2_  = dbe_->book1D("NZDC EM2 Energy","Energy EM module N2",4000,0.,8000.);
00173       meZdcEneEmN2_->setAxisTitle("Energy (GeV)",1);
00174       meZdcEneEmN2_->setAxisTitle("Counts",2);
00176       meZdcEneEmN3_  = dbe_->book1D("NZDC EM3 Energy","Energy EM module N3",4000,0.,8000.);
00177       meZdcEneEmN3_->setAxisTitle("Energy (GeV)",1);
00178       meZdcEneEmN3_->setAxisTitle("Counts",2);
00180       meZdcEneEmN4_  = dbe_->book1D("NZDC EM4 Energy","Energy EM module N4",4000,0.,8000.);
00181       meZdcEneEmN4_->setAxisTitle("Energy (GeV)",1);
00182       meZdcEneEmN4_->setAxisTitle("Counts",2);
00184       meZdcEneEmN5_  = dbe_->book1D("NZDC EM5 Energy","Energy EM module N5",4000,0.,8000.);
00185       meZdcEneEmN5_->setAxisTitle("Energy (GeV)",1);
00186       meZdcEneEmN5_->setAxisTitle("Counts",2);
00188       meZdcEneHadN1_ = dbe_->book1D("NZDC HAD1 Energy","Energy HAD module N1",4000,0.,8000.);
00189       meZdcEneHadN1_->setAxisTitle("Energy (GeV)",1);
00190       meZdcEneHadN1_->setAxisTitle("Counts",2);
00192       meZdcEneHadN2_ = dbe_->book1D("NZDC HAD2 Energy","Energy HAD module N2",4000,0.,8000.);
00193       meZdcEneHadN2_->setAxisTitle("Energy (GeV)",1);
00194       meZdcEneHadN2_->setAxisTitle("Counts",2);
00196       meZdcEneHadN3_ = dbe_->book1D("NZDC HAD3 Energy","Energy HAD module N3",4000,0.,8000.);
00197       meZdcEneHadN3_->setAxisTitle("Energy (GeV)",1);
00198       meZdcEneHadN3_->setAxisTitle("Counts",2);
00200       meZdcEneHadN4_ = dbe_->book1D("NZDC HAD4 Energy","Energy HAD module N4",4000,0.,8000.);
00201       meZdcEneHadN4_->setAxisTitle("Energy (GeV)",1);
00202       meZdcEneHadN4_->setAxisTitle("Counts",2);
00204       dbe_->setCurrentFolder("ZDCValidation/ZdcSimHits/Excess_Info/Individual_ChannelvsTime/NZDC");
00205       meZdcEneTEmN1_ = dbe_->book2D("NZDC EM1 Energy vs Time","Energy EM mod N1 vs Time", 4000, 0., 8000., 300, 0., 600. );
00206       meZdcEneTEmN1_->setAxisTitle("Energy (GeV)",1);
00207       meZdcEneTEmN1_->setAxisTitle("Time (ns)",2);
00209       meZdcEneTEmN2_ = dbe_->book2D("NZDC EM2 Energy vs Time","Energy EM mod N2 vs Time", 4000, 0., 8000., 300, 0., 600. );
00210       meZdcEneTEmN2_->setAxisTitle("Energy (GeV)",1);
00211       meZdcEneTEmN2_->setAxisTitle("Time (ns)",2); 
00213       meZdcEneTEmN3_ = dbe_->book2D("NZDC EM3 Energy vs Time","Energy EM mod N3 vs Time", 4000, 0., 8000., 300, 0., 600. );
00214       meZdcEneTEmN3_->setAxisTitle("Energy (GeV)",1);
00215       meZdcEneTEmN3_->setAxisTitle("Time (ns)",2);
00217       meZdcEneTEmN4_ = dbe_->book2D("NZDC EM4 Energy vs Time","Energy EM mod N4 vs Time", 4000, 0., 8000., 300, 0., 600. );
00218       meZdcEneTEmN4_->setAxisTitle("Energy (GeV)",1);
00219       meZdcEneTEmN4_->setAxisTitle("Time (ns)",2);
00221       meZdcEneTEmN5_ = dbe_->book2D("NZDC EM5 Energy vs Time","Energy EM mod N5 vs Time", 4000, 0., 8000., 300, 0., 600. );
00222       meZdcEneTEmN5_->setAxisTitle("Energy (GeV)",1);
00223       meZdcEneTEmN5_->setAxisTitle("Time (ns)",2);
00225       meZdcEneTHadN1_ = dbe_->book2D("NZDC HAD1 Energy vs Time","Energy HAD mod N1 vs Time", 4000, 0., 8000., 300, 0., 600. );
00226       meZdcEneTHadN1_->setAxisTitle("Energy (GeV)",1);
00227       meZdcEneTHadN1_->setAxisTitle("Time (ns)",2);
00229       meZdcEneTHadN2_ = dbe_->book2D("NZDC HAD2 Energy vs Time","Energy HAD mod N2 vs Time", 4000, 0., 8000., 300, 0., 600. );
00230       meZdcEneTHadN2_->setAxisTitle("Energy (GeV)",1);
00231       meZdcEneTHadN2_->setAxisTitle("Time (ns)",2); 
00233       meZdcEneTHadN3_ = dbe_->book2D("NZDC HAD3 Energy vs Time","Energy HAD mod N3 vs Time", 4000, 0., 8000., 300, 0., 600. );
00234       meZdcEneTHadN3_->setAxisTitle("Energy (GeV)",1);
00235       meZdcEneTHadN3_->setAxisTitle("Time (ns)",2);
00237       meZdcEneTHadN4_ = dbe_->book2D("NZDC HAD4 Energy vs Time","Energy HAD mod N4 vs Time", 4000, 0., 8000., 300, 0., 600. );
00238       meZdcEneTHadN4_->setAxisTitle("Energy (GeV)",1);
00239       meZdcEneTHadN4_->setAxisTitle("Time (ns)",2);
00241       dbe_->setCurrentFolder("ZDCValidation/ZdcSimHits/ENERGY_SUMS/NZDC");
00242       meZdcEneHadNTot_ = dbe_->book1D("NZDC EHAD","Total N-ZDC HAD Energy",4000,0.,4000.);
00243       meZdcEneHadNTot_->setAxisTitle("Counts",2);
00244       meZdcEneHadNTot_->setAxisTitle("Energy (GeV)",1);
00246       meZdcEneEmNTot_ = dbe_->book1D("NZDC EEM","Total N-ZDC EM Energy",3000,0.,3000.);
00247       meZdcEneEmNTot_->setAxisTitle("Counts",2);
00248       meZdcEneEmNTot_->setAxisTitle("Energy (GeV)",1);
00250       meZdcEneNTot_ = dbe_->book1D("NZDC ETOT","Total N-ZDC Energy ",7000,0.,7000.);
00251       meZdcEneNTot_->setAxisTitle("Counts",2);
00252       meZdcEneNTot_->setAxisTitle("Energy (GeV)",1);
00254       dbe_->setCurrentFolder("ZDCValidation/ZdcSimHits/ENERGY_SUMS/Individual_Channels/PZDC");
00255       meZdcEneEmP1_ = dbe_->book1D("PZDC EM1 Energy","Energy EM module P1",3000,0.,3000.);
00256       meZdcEneEmP1_->setAxisTitle("Energy (GeV)",1);
00257       meZdcEneEmP1_->setAxisTitle("Counts",2);
00259       meZdcEneEmP2_ = dbe_->book1D("PZDC EM2 Energy","Energy EM module P2",3000,0.,3000.);
00260       meZdcEneEmP2_->setAxisTitle("Energy (GeV)",1);
00261       meZdcEneEmP2_->setAxisTitle("Counts",2);
00263       meZdcEneEmP3_ = dbe_->book1D("PZDC EM3 Energy","Energy EM module P3",3000,0.,3000.);
00264       meZdcEneEmP3_->setAxisTitle("Energy (GeV)",1);
00265       meZdcEneEmP3_->setAxisTitle("Counts",2);
00267       meZdcEneEmP4_ = dbe_->book1D("PZDC EM4 Energy","Energy EM module P4",3000,0.,3000.);
00268       meZdcEneEmP4_->setAxisTitle("Energy (GeV)",1);
00269       meZdcEneEmP4_->setAxisTitle("Counts",2);
00271       meZdcEneEmP5_ = dbe_->book1D("PZDC EM5 Energy","Energy EM module P5",3000,0.,3000.);
00272       meZdcEneEmP5_->setAxisTitle("Energy (GeV)",1);
00273       meZdcEneEmP5_->setAxisTitle("Counts",2);
00275       meZdcEneHadP1_ = dbe_->book1D("PZDC HAD1 Energy","Energy HAD module P1",3000,0.,3000.);
00276       meZdcEneHadP1_->setAxisTitle("Energy (GeV)",1);
00277       meZdcEneHadP1_->setAxisTitle("Counts",2);
00279       meZdcEneHadP2_ = dbe_->book1D("PZDC HAD2 Energy","Energy HAD module P2",3000,0.,3000.);
00280       meZdcEneHadP2_->setAxisTitle("Energy (GeV)",1);
00281       meZdcEneHadP2_->setAxisTitle("Counts",2);
00283       meZdcEneHadP3_ = dbe_->book1D("PZDC HAD3 Energy","Energy HAD module P3",3000,0.,3000.);
00284       meZdcEneHadP3_->setAxisTitle("Energy (GeV)",1);
00285       meZdcEneHadP3_->setAxisTitle("Counts",2);
00287       meZdcEneHadP4_ = dbe_->book1D("PZDC HAD4 Energy","Energy HAD module P4",3000,0.,3000.);
00288       meZdcEneHadP4_->setAxisTitle("Energy (GeV)",1);
00289       meZdcEneHadP4_->setAxisTitle("Counts",2);
00291       dbe_->setCurrentFolder("ZDCValidation/ZdcSimHits/Excess_Info/Individual_ChannelvsTime/PZDC");
00292       meZdcEneTEmP1_ = dbe_->book2D("PZDC EM1 Energy vs Time","Energy EM mod P1 vs Time", 4000, 0., 8000., 300, 0., 600. );
00293       meZdcEneTEmP1_->setAxisTitle("Energy (GeV)",1);
00294       meZdcEneTEmP1_->setAxisTitle("Time (ns)",2);
00296       meZdcEneTEmP2_ = dbe_->book2D("PZDC EM2 Energy vs Time","Energy EM mod P2 vs Time", 4000, 0., 8000., 300, 0., 600. ); 
00297       meZdcEneTEmP2_->setAxisTitle("Energy (GeV)",1);
00298       meZdcEneTEmP2_->setAxisTitle("Time (ns)",2);
00300       meZdcEneTEmP3_ = dbe_->book2D("PZDC EM3 Energy vs Time","Energy EM mod P3 vs Time", 4000, 0., 8000., 300, 0., 600. );
00301       meZdcEneTEmP3_->setAxisTitle("Energy (GeV)",1);
00302       meZdcEneTEmP3_->setAxisTitle("Time (ns)",2);
00304       meZdcEneTEmP4_ = dbe_->book2D("PZDC EM4 Energy vs Time","Energy EM mod P4 vs Time", 4000, 0., 8000., 300, 0., 600. );
00305       meZdcEneTEmP4_->setAxisTitle("Energy (GeV)",1);
00306       meZdcEneTEmP4_->setAxisTitle("Time (ns)",2);
00308       meZdcEneTEmP5_ = dbe_->book2D("PZDC EM5 Energy vs Time","Energy EM mod P5 vs Time", 4000, 0., 8000., 300, 0., 600. );
00309       meZdcEneTEmP5_->setAxisTitle("Energy (GeV)",1);
00310       meZdcEneTEmP5_->setAxisTitle("Time (ns)",2);
00312       meZdcEneTHadP1_ = dbe_->book2D("PZDC HAD1 Energy vs Time","Energy HAD mod P1 vs Time", 4000, 0., 8000., 300, 0., 600. );
00313       meZdcEneTHadP1_->setAxisTitle("Energy (GeV)",1);
00314       meZdcEneTHadP1_->setAxisTitle("Time (ns)",2);
00316       meZdcEneTHadP2_ = dbe_->book2D("PZDC HAD2 Energy vs Time","Energy HAD mod P2 vs Time", 4000, 0., 8000., 300, 0., 600. ); 
00317       meZdcEneTHadP2_->setAxisTitle("Energy (GeV)",1);
00318       meZdcEneTHadP2_->setAxisTitle("Time (ns)",2);
00320       meZdcEneTHadP3_ = dbe_->book2D("PZDC HAD3 Energy vs Time","Energy HAD mod P3 vs Time", 4000, 0., 8000., 300, 0., 600. );
00321       meZdcEneTHadP3_->setAxisTitle("Energy (GeV)",1);
00322       meZdcEneTHadP3_->setAxisTitle("Time (ns)",2);
00324       meZdcEneTHadP4_ = dbe_->book2D("PZDC HAD4 Energy vs Time","Energy HAD mod P4 vs Time", 4000, 0., 8000., 300, 0., 600. );
00325       meZdcEneTHadP4_->setAxisTitle("Energy (GeV)",1);
00326       meZdcEneTHadP4_->setAxisTitle("Time (ns)",2);
00328       dbe_->setCurrentFolder("ZDCValidation/ZdcSimHits/ENERGY_SUMS/PZDC");
00329       meZdcEneHadPTot_ = dbe_->book1D("PZDC EHAD","Total P-ZDC HAD Energy",10000,0.,10000.);
00330       meZdcEneHadPTot_->setAxisTitle("Energy (GeV)",1);
00331       meZdcEneHadPTot_->setAxisTitle("Counts",2);
00333       meZdcEneEmPTot_ = dbe_->book1D("PZDC EEM","Total P-ZDC EM Energy",10000,0.,10000.);
00334       meZdcEneEmPTot_->setAxisTitle("Energy (GeV)",1);
00335       meZdcEneEmPTot_->setAxisTitle("Counts",2);
00337       meZdcEnePTot_ = dbe_->book1D("PZDC ETOT","Total P-ZDC Energy",10000,0.,10000.);
00338       meZdcEnePTot_->setAxisTitle("Energy (GeV)",1);
00339       meZdcEnePTot_->setAxisTitle("Counts",2);
00341       dbe_->setCurrentFolder("ZDCValidation/ZdcSimHits/ENERGY_SUMS/NZDC");
00342       meZdcCorEEmNEHadN_= dbe_->book2D("NZDC EMvHAD","N-ZDC Energy EM vs HAD", 3000, 0., 3000.,3000, 0., 3000.);
00343       meZdcCorEEmNEHadN_->setAxisTitle("EM Energy (GeV)",1);
00344       meZdcCorEEmNEHadN_->setAxisTitle("HAD Energy (GeV)",2);
00346       dbe_->setCurrentFolder("ZDCValidation/ZdcSimHits/ENERGY_SUMS/PZDC");
00347       meZdcCorEEmPEHadP_= dbe_->book2D("PZDC EMvHAD","P-ZDC Energy EM vs HAD", 3000, 0., 3000.,3000, 0., 3000.);
00348       meZdcCorEEmPEHadP_->setAxisTitle("EM Energy (GeV)",1);
00349       meZdcCorEEmPEHadP_->setAxisTitle("HAD Energy (GeV)",2);
00351       dbe_->setCurrentFolder("ZDCValidation/ZdcSimHits/ENERGY_SUMS");
00352       meZdcCorEtotNEtotP_ = dbe_->book2D("PZDC vs NZDC","Energy N-ZDC vs P-ZDC", 3000, 0., 3000.,3000, 0., 3000.);
00353       meZdcCorEtotNEtotP_->setAxisTitle("N-ZDC Total Energy (GeV)",1);
00354       meZdcCorEtotNEtotP_->setAxisTitle("P-ZDC Total Energy (GeV)",2);
00356       meZdcEneTot_ = dbe_->book1D("ETOT ZDCs","Total Energy ZDCs",3000,0.,3000.);
00357       meZdcEneTot_->setAxisTitle("Counts",2);
00358       meZdcEneTot_->setAxisTitle("Energy (GeV)",1);
00360 
00361 
00362 
00363 
00365 
00367    dbe_->setCurrentFolder("ZDCValidation/GenParticles/Forward");
00370     genpart_Pi0F = dbe_->book2D("Pi0_Forward","Forward Generated Pi0s",200,7.5,13,100,-3.15,3.15);
00371    //   genpart_Pi0F = dbe_->bookProfile2D("blah","balh",200,4.5,7,100,-3.15,3.15,2000,0,3000,"s");
00372    genpart_Pi0F->setAxisTitle("Eta",1);
00373    genpart_Pi0F->setAxisTitle("Phi (radians)",2);
00374    genpart_Pi0F->setAxisTitle("Energy (GeV)",3);
00375    genpart_Pi0F->getTH2F()->SetOption("lego2z,prof");
00376    genpart_Pi0F->getTH2F()->SetTitleOffset(1.4,"x");
00377    genpart_Pi0F->getTH2F()->SetTitleOffset(1.4,"y");
00380    genpart_NeutF = dbe_->book2D("Neutron_Forward","Forward Generated Neutrons",200,7.5,13,100,-3.15,3.15);
00381    genpart_NeutF->setAxisTitle("Eta",1);
00382    genpart_NeutF->setAxisTitle("Phi (radians)",2);
00383    genpart_NeutF->setAxisTitle("Energy (GeV)",3);
00384    genpart_NeutF->getTH2F()->SetOption("lego2z,prof");
00385    genpart_NeutF->getTH2F()->SetTitleOffset(1.4,"x");
00386    genpart_NeutF->getTH2F()->SetTitleOffset(1.4,"y");
00389    genpart_GammaF = dbe_->book2D("Gamma_Forward","Forward Generated Gammas",200,7.5,13,100,-3.15,3.15);
00390    genpart_GammaF->setAxisTitle("Eta",1);
00391    genpart_GammaF->setAxisTitle("Phi (radians)",2);
00392    genpart_GammaF->setAxisTitle("Energy (GeV)",3);
00393    genpart_GammaF->getTH2F()->SetOption("lego2z,prof");
00394    genpart_GammaF->getTH2F()->SetTitleOffset(1.4,"x");
00395    genpart_GammaF->getTH2F()->SetTitleOffset(1.4,"y");
00398 genpart_Pi0F_energydist = dbe_->book1D("Pi0_Forward_EDistribution","Gen-Level Forward Pi0 Energy",1500,0,1500);
00399    genpart_Pi0F_energydist->setAxisTitle("Energy (GeV)",1);
00400    genpart_Pi0F_energydist->setAxisTitle("Counts",2);
00403    genpart_NeutF_energydist = dbe_->book1D("N_Forward_EDistribution","Gen-Level Forward Neutron Energy",1500,0,1500);
00404    genpart_NeutF_energydist->setAxisTitle("Energy (GeV)",1);
00405    genpart_NeutF_energydist->setAxisTitle("Counts",2);
00408    genpart_GammaF_energydist = dbe_->book1D("Gamma_Forward_EDistribution","Gen-Level Fowarad Gamma Energy",1500,0,1500);
00409    genpart_GammaF_energydist->setAxisTitle("Energy (GeV)",1);
00410    genpart_GammaF_energydist->setAxisTitle("Counts",2);
00412   dbe_->setCurrentFolder("ZDCValidation/GenParticles/Backward");
00415    genpart_Pi0B = dbe_->book2D("Pi0_Backward","Backward Generated Pi0s",1000,-13,-7.5,100,-3.15,3.15);
00416    genpart_Pi0B->setAxisTitle("Eta",1);
00417    genpart_Pi0B->setAxisTitle("Phi (radians)",2);
00418    genpart_Pi0B->setAxisTitle("Energy (GeV)",3);
00419    genpart_Pi0B->getTH2F()->SetOption("lego2z,prof");
00420    genpart_Pi0B->getTH2F()->SetTitleOffset(1.4,"x");
00421    genpart_Pi0B->getTH2F()->SetTitleOffset(1.4,"y");
00424    genpart_NeutB = dbe_->book2D("Neutron_Backward","Backward Generated Neutrons",1000,-13,-7.5,100,-3.15,3.15);
00425    genpart_NeutB->setAxisTitle("Eta",1);
00426    genpart_NeutB->setAxisTitle("Phi (radians)",2);
00427    genpart_NeutB->setAxisTitle("Energy (GeV)",3);
00428    genpart_NeutB->getTH2F()->SetOption("lego2z,prof");
00429    genpart_NeutB->getTH2F()->SetTitleOffset(1.4,"x");
00430    genpart_NeutB->getTH2F()->SetTitleOffset(1.4,"y");
00433    genpart_GammaB = dbe_->book2D("Gamma_Backward","Backward Generated Gammas",1000,-13,-7.5,100,-3.15,3.15);
00434    genpart_GammaB->setAxisTitle("Eta",1);
00435    genpart_GammaB->setAxisTitle("Phi (radians)",2);
00436    genpart_GammaB->setAxisTitle("Energy (GeV)",3);
00437    genpart_GammaB->getTH2F()->SetOption("lego2z,prof");
00438    genpart_GammaB->getTH2F()->SetTitleOffset(1.4,"x");
00439    genpart_GammaB->getTH2F()->SetTitleOffset(1.4,"y");
00443    genpart_Pi0B_energydist = dbe_->book1D("Pi0_Backward_EDistribution","Gen-Level Backward Pi0 Energy",1500,0,1500);
00444    genpart_Pi0B_energydist->setAxisTitle("Energy (GeV)",1);
00445    genpart_Pi0B_energydist->setAxisTitle("Counts",2);
00448    genpart_NeutB_energydist = dbe_->book1D("N_Backward_EDistribution","Gen-Level Foward Neutron Energy",1500,0,1500);
00449    genpart_NeutB_energydist->setAxisTitle("Energy (GeV)",1);
00450    genpart_NeutB_energydist->setAxisTitle("Counts",2);
00453    genpart_GammaB_energydist = dbe_->book1D("Gamma_Backward_EDistribution","Gen-Level Backward Gamma Energy",1500,0,1500);
00454    genpart_GammaB_energydist->setAxisTitle("Energy (GeV)",1);
00455    genpart_GammaB_energydist->setAxisTitle("Counts",2);
00457 
00458 
00459 
00460 
00461 
00462     }
00463   }
00464 }
00465 
00466 void ZdcSimHitStudy::endJob() {
00467   if (dbe_ && outFile_.size() > 0) dbe_->save(outFile_);
00468 }
00469 
00470 //void ZdcSimHitStudy::analyze(const edm::Event& e, const edm::EventSetup& ) {
00471 void ZdcSimHitStudy::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup ) {
00473 
00474    using namespace edm;
00475    bool gotGenParticles=true;
00476    
00477  
00478    Handle<reco::GenParticleCollection> genhandle;
00479    
00480    if (!(iEvent.getByLabel("genParticles",genhandle)))
00481    {
00482     gotGenParticles=false; //this is the same kind of boolean except for the genparticles collection
00483    }
00484    if (!(genhandle.isValid()))
00485    {
00486     gotGenParticles=false;
00487    }
00488    
00489 
00490    //Handle<edm::PCaloHitContainer> zdcsimhandle;
00491    //iEvent.getByLabel("g4SimHits_ZDCHITS",zdcsimhandle);
00492  
00493  
00494    
00495 
00496  
00498 
00499 
00500       if (gotGenParticles==true){ //if the boolean was able to find the leaf "genparticles" then do this
00501    for (reco::GenParticleCollection::const_iterator gen = genhandle->begin();
00502           gen!=genhandle->end();
00503           ++gen) //here we iterate over all generated particles
00504        {
00505          //         double energy=gen->energy();
00506          reco::GenParticle thisParticle = (reco::GenParticle)(*gen); //get the particle "gen" points to
00507          double energy_2= thisParticle.energy(); //here I grab some of the attributes of the generated particle....like its energy, its phi and its eta and what kind of particle it is
00508          double gen_phi = thisParticle.phi();
00509          double gen_eta = thisParticle.eta();
00510          int gen_id = thisParticle.pdgId();     
00511    
00512          if (gen_id==111){ //here i require a pi0
00513            if (gen_eta>8.3){ //eta requirement
00514 
00516 //# IMPORTANT     IMPORTANT         IMPORTANT            IMPORTANT                  #
00517 //# The real eta of the ZDC is |eta| > 8.3, I have only changed it here to 3 because#
00518 //# in the PG simulation the ZDC is at an eta of about 4.5-7, in the real GEANT the #
00519 //# ZDC is in its appropriate place at the very foward region...please edit this if #
00520 //# looking at MinBias data or the like                                             #
00521 //#                                                                                 #
00522 //# IMPORTANT     IMPORTANT      IMPORTANT       IMPORTANT                          #
00524 
00525 
00526 
00527            genpart_Pi0F->Fill(gen_eta,gen_phi,energy_2); //fill the lego plot
00528            genpart_Pi0F_energydist->Fill(energy_2); //fill the 1D distribution
00529                          }
00530            if (gen_eta<-8.3){ //neg eta requirement
00531              genpart_Pi0B->Fill(gen_eta,gen_phi,energy_2);
00532              genpart_Pi0B_energydist->Fill(energy_2);
00533                            }
00534                                        }
00535          if (gen_id==2112){ //require neutron
00536            if (gen_eta>8.3){
00537          genpart_NeutF->Fill(gen_eta,gen_phi,energy_2);
00538          genpart_NeutF_energydist->Fill(energy_2);
00539                           }
00540            if (gen_eta<-8.3){
00541              genpart_NeutB->Fill(gen_eta,gen_phi,energy_2);
00542              genpart_NeutB_energydist->Fill(energy_2);
00543                            }
00544                           }
00545 
00546          if (gen_id==22){ //require gamma
00547            if (gen_eta>8.3){
00548            genpart_GammaF->Fill(gen_eta,gen_phi,energy_2);
00549            genpart_GammaF_energydist->Fill(energy_2);
00550                          }
00551            if (gen_eta<-8.3){
00552              genpart_GammaB->Fill(gen_eta,gen_phi,energy_2);
00553              genpart_GammaB_energydist->Fill(energy_2);
00554                            }
00555                          }
00556 
00557        } //end of GEN loop
00558       }
00559 
00560 
00561 
00563 
00564 //Below is the old script which I will comment later
00565 
00566 
00567 
00568   LogDebug("ZdcSimHitStudy") 
00569     //std::cout
00570     //std::cout
00571     << "Run = " << iEvent.id().run() << " Event = " 
00572     << iEvent.id().event();
00573 /*    << "Run = " << e.id().run() << " Event = " 
00574     << e.id().event();*/
00575   //std::cout<<std::endl;
00576   
00577   std::vector<PCaloHit>               caloHits;
00578   edm::Handle<edm::PCaloHitContainer> hitsZdc;
00579 
00580   bool getHits = false;
00581   if (checkHit_) {
00582     iEvent.getByLabel(g4Label,zdcHits,hitsZdc);
00583 //    e.getByLabel(g4Label,zdcHits,hitsZdc); 
00584     if (hitsZdc.isValid()) getHits = true;
00585   }
00586 
00587   LogDebug("ZdcSim") << "ZdcValidation: Input flags Hits " << getHits;
00588 
00589   if (getHits) {
00590     caloHits.insert(caloHits.end(),hitsZdc->begin(),hitsZdc->end());
00591     LogDebug("ZdcSimHitStudy") 
00592       //std::cout
00593       << "ZdcValidation: Hit buffer " 
00594       << caloHits.size();
00595       //<< std::endl;
00596     analyzeHits (caloHits);
00597   }
00598 }
00599 
00600 void ZdcSimHitStudy::analyzeHits(std::vector<PCaloHit>& hits){
00601   int nHit = hits.size();
00602   int nZdcEM = 0, nZdcHad = 0, nZdcLum = 0; 
00603   int nBad1=0, nBad2=0, nBad=0;
00604   std::vector<double> encontZdcEM(140, 0.);
00605   std::vector<double> encontZdcHad(140, 0.);
00606   double entotZdcEM = 0;
00607   double entotZdcHad = 0;
00608  
00609   enetotEmN = 0;
00610   enetotHadN = 0.;
00611   enetotN = 0;  
00612   enetotEmP = 0;
00613   enetotHadP = 0;
00614   enetotP = 0;
00615   enetot = 0;
00616   
00617   for (int i=0; i<nHit; i++) {
00618     double energy    = hits[i].energy();
00619     double log10en   = log10(energy);
00620     int log10i       = int( (log10en+10.)*10. );
00621     double time      = hits[i].time();
00622     unsigned int id_ = hits[i].id();
00623     HcalZDCDetId id  = HcalZDCDetId(id_);
00624     int det          = id.det();
00625     int side         = id.zside();
00626     int section      = id.section();
00627     int channel      = id.channel();
00628 
00629     FillHitValHist(side,section,channel,energy,time);
00630   
00631     
00632     LogDebug("ZdcSimHitStudy") 
00633       //std::cout
00634       << "Hit[" << i << "] ID " << std::hex << id_ 
00635       << std::dec <<" DetID "<<id
00636       << " Det "<< det << " side "<< side 
00637       << " Section " << section
00638       << " channel "<< channel
00639       << " E " << energy 
00640       << " time \n" << time;
00641       //<<std::endl;
00642 
00643     if(det == 5) { // Check DetId.h
00644       if(section == HcalZDCDetId::EM)nZdcEM++;
00645       else if(section == HcalZDCDetId::HAD)nZdcHad++;
00646       else if(section == HcalZDCDetId::LUM)nZdcLum++;
00647       else    { nBad++;  nBad2++;}
00648     } else    { nBad++;  nBad1++;}
00649     if (dbe_) {
00650       meZdcDetectHit_->Fill(double(det));
00651       if (det ==  5) {
00652         meZdcSideHit_->Fill(double(side));
00653         meZdcSectionHit_->Fill(double(section));
00654         meZdcChannelHit_->Fill(double(channel));
00655         meZdcEnergyHit_->Fill(energy);
00656       if(section == HcalZDCDetId::EM){
00657         meZdcEMEnergyHit_->Fill(energy);
00658         meZdcEEMCh_->Fill(energy,channel);
00659         if( log10i >=0 && log10i < 140 )encontZdcEM[log10i] += energy;
00660         entotZdcEM += energy;
00661       }
00662       if(section == HcalZDCDetId::HAD){
00663         meZdcHadEnergyHit_->Fill(energy);
00664         meZdcEHadCh_->Fill(energy,channel);
00665         if( log10i >=0 && log10i < 140 )encontZdcHad[log10i] += energy;
00666         entotZdcHad += energy;
00667       } 
00668       meZdcTimeHit_->Fill(time);
00669       meZdcTimeWHit_->Fill(double(time),energy);
00670       meZdc10Ene_->Fill(log10en);
00671       meZdcETime_->Fill(energy, double(time));
00672       }
00673     }
00674   }
00675 
00676   if( entotZdcEM  != 0 ) for( int i=0; i<140; i++ ) meZdcEML10EneP_->Fill( -10.+(float(i)+0.5)/10., encontZdcEM[i]/entotZdcEM);
00677   if( entotZdcHad != 0 ) for( int i=0; i<140; i++ ) meZdcHadL10EneP_->Fill( -10.+(float(i)+0.5)/10.,encontZdcHad[i]/entotZdcHad);
00678   
00679   if (dbe_ && nHit>0) {
00680     meAllZdcNHit_->Fill(double(nHit));
00681     meBadZdcDetHit_->Fill(double(nBad1));
00682     meBadZdcSecHit_->Fill(double(nBad2));
00683     meBadZdcIdHit_->Fill(double(nBad));
00684     meZdcNHitEM_->Fill(double(nZdcEM));
00685     meZdcNHitHad_->Fill(double(nZdcHad));
00686     meZdcNHitLum_->Fill(double(nZdcLum)); 
00687     meZdcEnePTot_->Fill(enetotP);
00688     meZdcEneNTot_->Fill(enetotN);
00689     meZdcEneHadNTot_->Fill(enetotHadN);
00690     meZdcEneHadPTot_->Fill(enetotHadP);
00691     meZdcEneEmNTot_->Fill(enetotEmN);
00692     meZdcEneEmPTot_->Fill(enetotEmP);
00693     meZdcCorEEmNEHadN_->Fill(enetotEmN,enetotHadN);
00694     meZdcCorEEmPEHadP_->Fill(enetotEmP,enetotHadP);
00695     meZdcCorEtotNEtotP_->Fill(enetotN,enetotP);
00696     meZdcEneTot_->Fill(enetot);
00697   }
00698   LogDebug("HcalSimHitStudy") 
00699   //std::cout
00700     <<"HcalSimHitStudy::analyzeHits: Had " << nZdcHad 
00701     << " EM "<< nZdcEM
00702     << " Bad " << nBad << " All " << nHit;
00703     //<<std::endl;
00704 }
00705 
00706 int ZdcSimHitStudy::FillHitValHist(int side,int section,int channel,double energy,double time){  
00707   enetot += enetot;
00708   if(side == -1){
00709     enetotN += energy;
00710     if(section == HcalZDCDetId::EM){
00711       enetotEmN += energy;
00712       switch(channel){
00713       case 1 :
00714         meZdcEneEmN1_->Fill(energy);
00715         meZdcEneTEmN1_->Fill(energy,time);
00716         break;
00717       case 2 :
00718        meZdcEneEmN2_->Fill(energy);
00719        meZdcEneTEmN2_->Fill(energy,time);
00720         break;
00721       case 3 :
00722         meZdcEneEmN3_->Fill(energy);
00723        meZdcEneTEmN3_->Fill(energy,time);
00724         break;
00725       case 4 :
00726         meZdcEneEmN4_->Fill(energy);
00727         meZdcEneTEmN4_->Fill(energy,time);
00728         break; 
00729      case 5 :
00730         meZdcEneEmN4_->Fill(energy);
00731         meZdcEneTEmN4_->Fill(energy,time);
00732         break;
00733       }
00734     }
00735     if(section == HcalZDCDetId::HAD){
00736       enetotHadN += energy;
00737       switch(channel){
00738       case 1 :
00739         meZdcEneHadN1_->Fill(energy);
00740         meZdcEneTHadN1_->Fill(energy,time);
00741         break;
00742       case 2 :
00743         meZdcEneHadN2_->Fill(energy);
00744         meZdcEneTHadN2_->Fill(energy,time);
00745         break;
00746       case 3 :
00747         meZdcEneHadN3_->Fill(energy);
00748         meZdcEneTHadN3_->Fill(energy,time);
00749         break;
00750       case 4 :
00751         meZdcEneHadN4_->Fill(energy);
00752         meZdcEneTHadN4_->Fill(energy,time);
00753         break;
00754       }
00755     }
00756   }
00757   if(side == 1){
00758     enetotP += energy;
00759     if(section == HcalZDCDetId::EM){
00760       enetotEmP += energy;
00761       switch(channel){
00762       case 1 :
00763         meZdcEneEmP1_->Fill(energy);
00764         meZdcEneTEmP1_->Fill(energy,time);
00765         break;
00766       case 2 :
00767         meZdcEneEmP2_->Fill(energy);
00768         meZdcEneTEmP2_->Fill(energy,time);
00769         break;
00770       case 3 :
00771         meZdcEneEmP3_->Fill(energy);
00772         meZdcEneTEmP3_->Fill(energy,time);
00773         break;
00774       case 4 :
00775         meZdcEneEmP4_->Fill(energy);
00776         meZdcEneTEmP4_->Fill(energy,time);
00777         break; 
00778       case 5 :
00779         meZdcEneEmP4_->Fill(energy);
00780         meZdcEneTEmP4_->Fill(energy,time);
00781         break;
00782       }
00783     }
00784     if(section == HcalZDCDetId::HAD){
00785       enetotHadP += energy;
00786       switch(channel){
00787       case 1 :
00788         meZdcEneHadP1_->Fill(energy);
00789         meZdcEneTHadP1_->Fill(energy,time);
00790         break;
00791       case 2 :
00792         meZdcEneHadP2_->Fill(energy);
00793         meZdcEneTHadP2_->Fill(energy,time);
00794         break;
00795       case 3 :
00796         meZdcEneHadP3_->Fill(energy);
00797         meZdcEneTHadP3_->Fill(energy,time);
00798         break;
00799       case 4 :
00800         meZdcEneHadP4_->Fill(energy);
00801         meZdcEneTHadP4_->Fill(energy,time);
00802         break;
00803       }
00804     }
00805   }       
00806   return 0;
00807 }
00808   
00809  
00810 
00811 void ZdcSimHitStudy::endRun(const edm::Run& run, const edm::EventSetup& c)
00812 {
00813 }
00814 
00815 
00816 
00817 
00818 
00819 
00820 
00821 
00822 
00823 
00824 
00825