00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "L1Trigger/GlobalMuonTrigger/src/L1MuGMTMipIsoAU.h"
00024
00025
00026
00027
00028
00029 #include <iostream>
00030 #include <vector>
00031 #include <cmath>
00032 #include <string>
00033 #include <sstream>
00034
00035
00036
00037
00038
00039 #include "L1Trigger/GlobalMuonTrigger/src/L1MuGMTConfig.h"
00040 #include "L1Trigger/GlobalMuonTrigger/interface/L1MuGlobalMuonTrigger.h"
00041 #include "L1Trigger/GlobalMuonTrigger/src/L1MuGMTPSB.h"
00042 #include "L1Trigger/GlobalMuonTrigger/src/L1MuGMTPhiProjectionUnit.h"
00043 #include "L1Trigger/GlobalMuonTrigger/src/L1MuGMTEtaProjectionUnit.h"
00044
00045 #include "L1Trigger/GlobalMuonTrigger/src/L1MuGMTDebugBlock.h"
00046 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00047
00048
00049
00050
00051
00052
00053
00054
00055 L1MuGMTMipIsoAU::L1MuGMTMipIsoAU(const L1MuGlobalMuonTrigger& gmt, int id) :
00056 m_gmt(gmt), m_id(id), m_muons(8), m_MIP(8), m_ISO(8),
00057 m_MIP_PPUs(8), m_MIP_EPUs(8), m_ISO_PPUs(8), m_ISO_EPUs(8) {
00058
00059 m_muons.reserve(8);
00060 m_MIP.reserve(8);
00061 m_ISO.reserve(8);
00062
00063
00064 m_MIP_PPUs.reserve(8);
00065 m_MIP_EPUs.reserve(8);
00066 m_ISO_PPUs.reserve(8);
00067 m_ISO_EPUs.reserve(8);
00068
00069 for (int i=0; i<8; i++) {
00070 m_MIP_PPUs[i]=new L1MuGMTPhiProjectionUnit (*this, 16 * m_id + i) ;
00071 m_MIP_EPUs[i]=new L1MuGMTEtaProjectionUnit (*this, 16 * m_id + i) ;
00072
00073 m_ISO_PPUs[i]=new L1MuGMTPhiProjectionUnit (*this, 16 * m_id + 8 + i) ;
00074 m_ISO_EPUs[i]=new L1MuGMTEtaProjectionUnit (*this, 16 * m_id + 8 + i) ;
00075 }
00076
00077 }
00078
00079
00080
00081
00082 L1MuGMTMipIsoAU::~L1MuGMTMipIsoAU() {
00083
00084 reset();
00085
00086
00087 std::vector<L1MuGMTPhiProjectionUnit*>::iterator p_iter;
00088 for ( p_iter = m_MIP_PPUs.begin(); p_iter != m_MIP_PPUs.end(); p_iter++ )
00089 delete *p_iter;
00090 m_MIP_PPUs.clear();
00091
00092
00093 for ( p_iter = m_ISO_PPUs.begin(); p_iter != m_ISO_PPUs.end(); p_iter++ )
00094 delete *p_iter;
00095 m_ISO_PPUs.clear();
00096
00097
00098 std::vector<L1MuGMTEtaProjectionUnit*>::iterator e_iter;
00099 for ( e_iter = m_MIP_EPUs.begin(); e_iter != m_MIP_EPUs.end(); e_iter++ )
00100 delete *e_iter;
00101 m_MIP_EPUs.clear();
00102
00103
00104 for ( e_iter = m_ISO_EPUs.begin(); e_iter != m_ISO_EPUs.end(); e_iter++ )
00105 delete *e_iter;
00106 m_ISO_EPUs.clear();
00107 }
00108
00109
00110
00111
00112
00113
00114
00115
00116 void L1MuGMTMipIsoAU::run() {
00117
00118 load();
00119
00120
00121 std::vector<L1MuGMTPhiProjectionUnit*>::iterator p_iter;
00122 for ( p_iter = m_MIP_PPUs.begin(); p_iter != m_MIP_PPUs.end(); p_iter++ )
00123 (*p_iter)->run();
00124
00125
00126 for ( p_iter = m_ISO_PPUs.begin(); p_iter != m_ISO_PPUs.end(); p_iter++ )
00127 (*p_iter)->run();
00128
00129
00130 std::vector<L1MuGMTEtaProjectionUnit*>::iterator e_iter;
00131 for ( e_iter = m_MIP_EPUs.begin(); e_iter != m_MIP_EPUs.end(); e_iter++ )
00132 (*e_iter)->run();
00133
00134
00135 for ( e_iter = m_ISO_EPUs.begin(); e_iter != m_ISO_EPUs.end(); e_iter++ )
00136 (*e_iter)->run();
00137
00138 assignMIP();
00139 assignISO();
00140 }
00141
00142
00143
00144
00145
00146 void L1MuGMTMipIsoAU::reset() {
00147
00148 for ( int i = 0; i < 8; i++ ) {
00149 m_muons[i] = 0;
00150 m_MIP[i] = false;
00151 m_ISO[i] = false;
00152 }
00153
00154
00155 std::vector<L1MuGMTPhiProjectionUnit*>::iterator p_iter;
00156 for ( p_iter = m_MIP_PPUs.begin(); p_iter != m_MIP_PPUs.end(); p_iter++ ) {
00157 (*p_iter)->reset();
00158 }
00159
00160
00161 for ( p_iter = m_ISO_PPUs.begin(); p_iter != m_ISO_PPUs.end(); p_iter++ )
00162 (*p_iter)->reset();
00163
00164
00165 std::vector<L1MuGMTEtaProjectionUnit*>::iterator e_iter;
00166 for ( e_iter = m_MIP_EPUs.begin(); e_iter != m_MIP_EPUs.end(); e_iter++ )
00167 (*e_iter)->reset();
00168
00169
00170 for ( e_iter = m_ISO_EPUs.begin(); e_iter != m_ISO_EPUs.end(); e_iter++ )
00171 (*e_iter)->reset();
00172 }
00173
00174
00175
00176
00177
00178 void L1MuGMTMipIsoAU::print() const {
00179
00180 std::stringstream outmip;
00181 outmip << "Assigned MIP bits : ";
00182 std::vector<bool>::const_iterator iter;
00183 for ( iter = m_MIP.begin(); iter != m_MIP.end(); iter++ ) {
00184 outmip << (*iter) << " ";
00185 }
00186 edm::LogVerbatim("GMT_MipIso_info") << outmip.str();
00187
00188 std::stringstream outiso;
00189 outiso << "Assigned ISO bits : ";
00190 for ( iter = m_ISO.begin(); iter != m_ISO.end(); iter++ ) {
00191 outiso << (*iter) << " ";
00192 }
00193 edm::LogVerbatim("GMT_MipIso_info") << outiso.str();
00194 }
00195
00196
00197
00198
00199
00200 void L1MuGMTMipIsoAU::load() {
00201
00202
00203 if ( m_id == 0 ) {
00204 for ( unsigned idt = 0; idt < L1MuGMTConfig::MAXDTBX; idt++ ) {
00205 m_muons[idt] = m_gmt.Data()->DTBXMuon(idt);
00206 }
00207 for ( unsigned irpc = 0; irpc < L1MuGMTConfig::MAXRPCbarrel; irpc++ ) {
00208 m_muons[irpc+4] = m_gmt.Data()->RPCMuon(irpc);
00209 }
00210 }
00211
00212
00213 if ( m_id == 1 ) {
00214 for ( unsigned icsc = 0; icsc < L1MuGMTConfig::MAXCSC; icsc++ ) {
00215 m_muons[icsc] = m_gmt.Data()->CSCMuon(icsc);
00216 }
00217 for ( unsigned irpc = 0; irpc < L1MuGMTConfig::MAXRPCendcap; irpc++ ) {
00218 m_muons[irpc+4] = m_gmt.Data()->RPCMuon(irpc+4);
00219 }
00220 }
00221
00222 }
00223
00224
00225
00226
00227 void L1MuGMTMipIsoAU::assignMIP() {
00228
00229
00230 const L1MuGMTMatrix<bool>& mip = m_gmt.Data()->mipBits();
00231
00232 for ( int imuon = 0; imuon < 8; imuon++ )
00233 if (m_muons[imuon] && !m_muons[imuon]->empty() ) {
00234 bool tmpMIP=false;
00235
00236 for ( int iphi = 0; iphi < 18; iphi++ )
00237 for ( int ieta = 0; ieta < 14; ieta++ ) {
00238 if (m_MIP_PPUs[imuon]->isSelected(iphi) &&
00239 m_MIP_EPUs[imuon]->isSelected(ieta) ) {
00240 tmpMIP |= mip(ieta, iphi);
00241 if ( L1MuGMTConfig::Debug(3) ) edm::LogVerbatim("GMT_MipIso_info") << "L1MuGMTMipIsoAU::assignMIP() checking calo region phi=" <<
00242 iphi << ", eta=" << ieta;
00243 }
00244 }
00245 m_MIP[imuon] = tmpMIP;
00246 m_gmt.DebugBlockForFill()->SetIsMIPISO( m_MIP_PPUs[imuon]->id(), tmpMIP?1:0) ;
00247 }
00248 }
00249
00250
00251
00252
00253
00254 void L1MuGMTMipIsoAU::assignISO() {
00255
00256
00257 const L1MuGMTMatrix<bool>& isol = m_gmt.Data()->isolBits();
00258
00259 for ( int imuon = 0; imuon < 8; imuon++ )
00260 if (m_muons[imuon] && !m_muons[imuon]->empty() ) {
00261 bool tmpISO=true;
00262 bool any=false;
00263
00264 for ( int iphi = 0; iphi < 18; iphi++ )
00265 for ( int ieta = 0; ieta < 14; ieta++ ) {
00266 if (m_ISO_PPUs[imuon]->isSelected(iphi) &&
00267 m_ISO_EPUs[imuon]->isSelected(ieta) ) {
00268 tmpISO &= isol(ieta, iphi);
00269 any = true;
00270 if ( L1MuGMTConfig::Debug(3) ) edm::LogVerbatim("GMT_MipIso_info") << "L1MuGMTMipIsoAU::assignISO() checking calo region phi=" <<
00271 iphi << ", eta=" << ieta;
00272 }
00273 }
00274 if (any) m_ISO[imuon] = tmpISO;
00275 else edm::LogWarning("MipISOProblem") << "L1MuGMTMipIsoAU::assignISO(): no calo region was checked!!";
00276
00277 m_gmt.DebugBlockForFill()->SetIsMIPISO( m_ISO_PPUs[imuon]->id(), m_ISO[imuon]?1:0) ;
00278 }
00279
00280 }
00281
00282
00283
00284
00285
00286
00287