16 if ( GEMGeometry_ ==
nullptr) {
17 std::cout<<
"geometry is wrong! Terminated."<<std::endl;
24 edm::LogInfo(
"MuonGEMHitsValidation")<<
"+++ Info : # of eta partition : "<<
nPart()<<std::endl;
26 LogDebug(
"MuonGEMHitsValidation")<<
"+++ Info : finish to get geometry information from ES.\n";
29 LogDebug(
"MuonGEMHitsValidation")<<
"+++ Region independant part.\n";
35 TString hist_name_for_tofMu = TString::Format(
"gem_sh_simple_tofMuon_st%s",
getStationLabel(st).c_str());
36 TString hist_name_for_elossMu = TString::Format(
"gem_sh_simple_energylossMuon_st%s",
getStationLabel(st).c_str());
37 TString hist_label_for_tofMu = TString::Format(
"SimHit TOF(Muon only) station : station %s ; Time of flight [ns] ; entries",
getStationLabel(st).c_str());
38 TString hist_label_for_elossMu = TString::Format(
"SimHit energy loss(Muon only) : station %s ; Energy loss [eV] ; entries",
getStationLabel(st).c_str());
40 double tof_min, tof_max;
41 if( st == 1 ) { tof_min = 18; tof_max = 22; }
42 else { tof_min = 26; tof_max = 30; }
43 gem_sh_simple_tofMu[ hist_name_for_tofMu.Hash() ] = ibooker.
book1D( hist_name_for_tofMu.Data(), hist_label_for_tofMu.Data(), 40,tof_min,tof_max);
44 gem_sh_simple_elossMu[ hist_name_for_elossMu.Hash() ] = ibooker.
book1D( hist_name_for_elossMu.Data(), hist_label_for_elossMu.Data(), 60,0.,6000.);
47 LogDebug(
"MuonGEMHitsValidation")<<
"+++ Region+Station part.\n";
53 LogDebug(
"MuonGEMHitsValidation")<<
"+++ SimpleZR Occupancy\n";
54 TString simpleZR_title = TString::Format(
"ZR Occupancy%s; |Z|(cm); R(cm)", title_suffix.Data());
55 TString simpleZR_histname = TString::Format(
"hit_simple_zr%s", histname_suffix.Data());
58 if ( simpleZR !=
nullptr) {
66 LogDebug(
"MuonGEMHitsValidation")<<
"+++ dcEta Occupancy\n";
67 TString dcEta_title = TString::Format(
"Occupancy for detector component %s;;#eta-partition",title_suffix2.Data());
68 TString dcEta_histname = TString::Format(
"hit_dcEta%s",histname_suffix2.Data());
70 if ( dcEta !=
nullptr) {
71 Hit_dcEta[ dcEta_histname.Hash() ] = dcEta;
77 LogDebug(
"MuonGEMHitsValidation")<<
"+++ Begining Detail Plots\n";
83 if (
ring->ring() != 1 )
break ;
87 TString hist_name = TString::Format(
"gem_sh_xy%s",name_suffix.c_str());
88 TString hist_title = TString::Format(
"Simhit Global XY Plots at %s",title_suffix.c_str());
90 if ( temp !=
nullptr ) {
91 LogDebug(
"MuonGEMHitsValidation")<<
"ME can be acquired!";
94 LogDebug(
"MuonGEMHitsValidation")<<
"ME can not be acquired!";
100 if ( temp2 !=
nullptr ) {
101 LogDebug(
"MuonGEMHitsValidation")<<
"ME can be acquired!";
104 LogDebug(
"MuonGEMHitsValidation")<<
"ME can not be acquired!";
111 for(
unsigned int region_num = 0 ; region_num <
nRegion() ; region_num++ ) {
112 for(
unsigned int station_num = 0 ; station_num <
nStation() ; station_num++) {
113 for(
unsigned int layer_num = 0 ; layer_num < 2 ; layer_num++) {
114 gem_sh_zr[region_num][station_num][layer_num] =
BookHistZR(ibooker,
"gem_sh",
"SimHit",region_num,station_num,layer_num);
115 gem_sh_xy[region_num][station_num][layer_num] =
BookHistXY(ibooker,
"gem_sh",
"SimHit",region_num,station_num,layer_num);
117 int re = ((
unsigned int)region_num)*2-1;
124 std::string hist_label_for_xy =
"SimHit occupancy : region"+suffixtitle+
" ; globalX [cm]; globalY[cm]";
125 std::string hist_label_for_tof =
"SimHit TOF : region"+suffixtitle+
" ; Time of flight [ns] ; entries";
126 std::string hist_label_for_tofMu =
"SimHit TOF(Muon only) : "+suffixtitle+
" ; Time of flight [ns] ; entries";
127 std::string hist_label_for_eloss =
"SimHit energy loss : "+suffixtitle +
" ; Energy loss [eV] ; entries";
128 std::string hist_label_for_elossMu =
"SimHit energy loss(Muon only) : "+suffixtitle+
" ; Energy loss [eV] ; entries";
130 double tof_min, tof_max;
131 if( station_num == 0 ) { tof_min = 18; tof_max = 22; }
132 else { tof_min = 26; tof_max = 30; }
133 gem_sh_tof[region_num][station_num][layer_num] = ibooker.
book1D( hist_name_for_tof.c_str(), hist_label_for_tof.c_str(), 40,tof_min,tof_max);
134 gem_sh_tofMu[region_num][station_num][layer_num] = ibooker.
book1D( hist_name_for_tofMu.c_str(), hist_label_for_tofMu.c_str(), 40,tof_min,tof_max);
135 gem_sh_eloss[region_num][station_num][layer_num] = ibooker.
book1D( hist_name_for_eloss.c_str(), hist_label_for_eloss.c_str(), 60,0.,6000.);
136 gem_sh_elossMu[region_num][station_num][layer_num] = ibooker.
book1D( hist_name_for_elossMu.c_str(), hist_label_for_elossMu.c_str(), 60,0.,6000.);
156 edm::LogError(
"GEMHitsValidation") <<
"Cannot get GEMHits by Token simInputTagToken";
160 for (
auto hits=GEMHits->begin(); hits!=GEMHits->end(); hits++) {
162 const GEMDetId id(hits->detUnitId());
165 Int_t layer = (Int_t)
id.layer();
166 Int_t chamber = (Int_t)
id.chamber();
167 Int_t nroll = (Int_t)
id.roll();
170 if ( GEMGeometry_->
idToDet(hits->detUnitId()) ==
nullptr) {
171 std::cout<<
"simHit did not matched with GEMGeometry."<<std::endl;
176 const LocalPoint hitLP(hits->localPosition());
179 Float_t g_r = hitGP.
perp();
180 Float_t g_x = hitGP.x();
181 Float_t g_y = hitGP.y();
182 Float_t g_z = hitGP.z();
183 Float_t energyLoss = hits->energyLoss();
186 int layer_num = layer-1;
187 int binX = (chamber-1)*2+layer_num;
193 TString simple_zr_histname = TString::Format(
"hit_simple_zr%s",histname_suffix.Data());
194 LogDebug(
"GEMHitsValidation")<<simple_zr_histname<<std::endl;
195 Hit_simple_zr[ simple_zr_histname.Hash() ] ->Fill(fabs(g_z), g_r);
198 TString dcEta_histname = TString::Format(
"hit_dcEta%s", histname_suffix.Data());
199 LogDebug(
"GEMHitsValidation")<<dcEta_histname<<std::endl;
200 Hit_dcEta[ dcEta_histname.Hash() ]->Fill(binX, binY);
202 TString tofMu = TString::Format(
"gem_sh_simple_tofMuon_st%s",
getStationLabel(station).c_str());
203 TString elossMu = TString::Format(
"gem_sh_simple_energylossMuon_st%s",
getStationLabel(station).c_str());
206 LogDebug(
"GEMHitsValidation")<<tofMu<<std::endl;
208 LogDebug(
"GEMHitsValidation")<<elossMu<<std::endl;
214 LogDebug(
"GEMHitsValidation")<<
"gzgr"<<std::endl;
215 gem_sh_zr[(int)(region/2.+0.5)][station-1][layer_num]->
Fill(g_z,g_r);
216 LogDebug(
"GEMHitsValidation")<<
"gxgy"<<std::endl;
217 gem_sh_xy[(int)(region/2.+0.5)][station-1][layer_num]->
Fill(g_x,g_y);
218 gem_sh_tof[(int)(region/2.+0.5)][station-1][layer_num]->
Fill(timeOfFlight);
219 gem_sh_eloss[(int)(region/2.+0.5)][station-1][layer_num]->
Fill(energyLoss*1.e9);
221 gem_sh_tofMu[(int)(region/2.+0.5)][station-1][layer_num]->
Fill(timeOfFlight);
225 if (
id.chamber() %2 == 1 ) chamber =
"odd";
226 else chamber =
"even";
227 TString hist_name = TString::Format(
"gem_sh_xy%s",(
getSuffixName(
id.
region(), station)+
"_"+chamber).c_str());
229 LogDebug(
"GEMHitsValidation")<<hist_name<<std::endl;
T getParameter(std::string const &) const
MonitorElement * gem_sh_tof[2][3][2]
std::unordered_map< UInt_t, MonitorElement * > gem_sh_xy_st_ch
bool getByToken(EDGetToken token, Handle< PROD > &result) const
MonitorElement * BookHistZR(DQMStore::IBooker &, const char *name, const char *label, unsigned int region_num, unsigned int station_num, unsigned int layer_num=99)
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
virtual const GeomDet * idToDet(DetId) const override
MonitorElement * getSimpleZR(DQMStore::IBooker &, TString, TString)
MonitorElement * BookHistXY(DQMStore::IBooker &, const char *name, const char *label, unsigned int region_num, unsigned int station_num, unsigned int layer_num=99)
MonitorElement * gem_sh_eloss[2][3][2]
std::string getSuffixTitle(int region, int station, int layer)
const GEMGeometry * initGeometry(const edm::EventSetup &)
MonitorElement * gem_sh_zr[2][3][2]
std::string getSuffixName(int region, int station, int layer)
std::unordered_map< UInt_t, MonitorElement * > gem_sh_simple_elossMu
const std::vector< const GEMRegion * > & regions() const
Return a vector of all GEM regions.
MonitorElement * book1D(Args &&...args)
Abs< T >::type abs(const T &t)
std::unordered_map< UInt_t, MonitorElement * > gem_sh_simple_tofMu
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
std::unordered_map< UInt_t, MonitorElement * > Hit_dcEta
void setCurrentFolder(const std::string &fullpath)
MonitorElement * book2D(Args &&...args)
MonitorElement * gem_sh_tofMu[2][3][2]
std::unordered_map< UInt_t, MonitorElement * > Hit_simple_zr
MonitorElement * getDCEta(DQMStore::IBooker &, const GEMStation *, TString, TString)
return(e1-e2)*(e1-e2)+dp *dp
MonitorElement * gem_sh_elossMu[2][3][2]
edm::EDGetToken InputTagToken_
void analyze(const edm::Event &e, const edm::EventSetup &) override
std::string getStationLabel(int i)
MonitorElement * gem_sh_xy[2][3][2]
double timeOfFlight(DetId id, const CaloGeometry *geo, bool debug=false)
GEMHitsValidation(const edm::ParameterSet &)