00001 #include "DataFormats/L1Trigger/interface/L1DataEmulDigi.h" 00002 #include <iomanip> 00003 00004 bool L1DataEmulDigi::empty() const { 00005 if(m_sid == m_null || m_cid == m_null ) 00006 return true; 00007 bool val = true; 00008 for(int i=0; i<2; i++) 00009 val &= ( m_location[i]==m_null ); 00010 return val; 00011 } 00012 00013 int L1DataEmulDigi::reset() { 00014 m_null = -99; 00015 m_sid = m_null; 00016 m_cid = m_null; 00017 for(int i=0; i<3; i++) 00018 m_location[i]=m_null; 00019 m_type = m_null; 00020 std::fill(m_data,m_data+sizeof(m_data)/sizeof(m_data[0]),0); 00021 std::fill(m_rank,m_rank+sizeof(m_rank)/sizeof(m_rank[0]),m_null); 00022 L1MonitorDigi def; 00023 m_DEpair[0]=def; m_DEpair[1]=def; 00024 return m_null; 00025 } 00026 00027 L1DataEmulDigi::L1DataEmulDigi() { 00028 reset(); 00029 } 00030 00031 L1DataEmulDigi::L1DataEmulDigi( int sid, int cid, double x1, double x2, double x3, int n) { 00032 reset(); 00033 m_sid = sid; m_cid = cid; 00034 m_location[0]=x1; m_location[1]=x2; m_location[2]=x3; 00035 m_type = n; 00036 } 00037 00038 L1DataEmulDigi::L1DataEmulDigi( int sid, int cid, double x1, double x2, double x3, int n, 00039 unsigned int dw, unsigned int ew, float dr, float er, 00040 L1MonitorDigi dm, L1MonitorDigi em) { 00041 reset(); 00042 m_sid = sid; m_cid = cid; 00043 m_location[0]=x1; m_location[1]=x2; m_location[2]=x3; 00044 m_type = n; 00045 m_data [0]=dw; m_data [1]=ew; 00046 m_rank [0]=dr; m_rank [1]=er; 00047 m_DEpair[0]=dm; m_DEpair[1]=em; 00048 } 00049 00050 L1DataEmulDigi::~L1DataEmulDigi() {} 00051 00052 std::ostream& operator<<(std::ostream& s, const L1DataEmulDigi& de) { 00053 unsigned word[2]; 00054 float rankarr[2]; 00055 de.data(word); 00056 de.rank(rankarr); 00057 s << "DEdigi" 00058 << " subsystem: " << std::setw(2) << de.sid() 00059 << " (cid." << std::setw(2) << de.cid() << ")" 00060 << " location: " 00061 << "(" << std::setw(5) << std::setprecision(2) << de.x1() 00062 << "," << std::setw(5) << std::setprecision(2) << de.x2() 00063 << "," << std::setw(5) << std::setprecision(2) << de.x3() << ")" 00064 << " type: " << de.type() 00065 << std::hex << std::setfill('0') 00066 << " dword:0x" << std::setw(8)<< word[0] 00067 << " eword:0x" << std::setw(8)<< word[1] 00068 << std::dec << std::setfill(' ') 00069 << " rank:" 00070 << "(" << std::setw(5) << std::setprecision(2) << rankarr[0] 00071 << "," << std::setw(5) << std::setprecision(2) << rankarr[1] << ")"; 00072 return s; 00073 } 00074 00075 GltDEDigi::GltDEDigi() { 00076 this->reset(); 00077 } 00078 00079 void GltDEDigi::reset() { 00080 const int w64 = 64; 00081 for(int j=0; j<2; j++) { 00082 globalDBit[j]=false; 00083 gltDecBits[j].reserve(w64*2); 00084 gltTchBits[j].reserve(w64 ); 00085 for(int i=0; i<w64; i++) { 00086 gltDecBits[j][i] =false; 00087 gltDecBits[j][i+w64]=false; 00088 gltTchBits[j][i] =false; 00089 } 00090 } 00091 } 00092 00093 GltDEDigi::GltDEDigi(bool glbit[], GltBits dbits[], GltBits tbits[]) { 00094 this->set(glbit, dbits, tbits); 00095 } 00096 00097 void GltDEDigi::set(bool glbit[], GltBits dbits[], GltBits tbits[]) { 00098 for(int i=0; i<2; i++) { 00099 globalDBit[i]=glbit[i]; 00100 gltDecBits[i]=dbits[i]; 00101 gltTchBits[i]=tbits[i]; 00102 } 00103 } 00104 00105 std::ostream& operator<<(std::ostream& s, const GltDEDigi& glt) { 00106 GltDEDigi::GltBits dbits[2], tbits[2]; 00107 bool glbit[2]; 00108 for(int i=0; i<2; i++) { 00109 glbit[i]=glt.globalDBit[i]; 00110 dbits[i]=glt.gltDecBits[i]; 00111 tbits[i]=glt.gltTchBits[i]; 00112 } 00113 s << "GT DEdigi" 00114 << " decision: " 00115 << glbit[0]; 00116 if(glbit[0]!=glbit[1]) 00117 s << "(data), " << glbit[1] << "(emul)"; 00118 s << "\n data dec-word: "; 00119 for(GltDEDigi::GltBits::const_iterator i=dbits[0].begin(); 00120 i!=dbits[0].end(); i++) s<<*i; 00121 s << "\n emul dec-word: "; 00122 for(GltDEDigi::GltBits::const_iterator i=dbits[1].begin(); 00123 i!=dbits[1].end(); i++) s<<*i; 00124 s << "\n data techical: "; 00125 for(GltDEDigi::GltBits::const_iterator i=tbits[0].begin(); 00126 i!=tbits[0].end(); i++) s<<*i; 00127 s << "\n emul technical: "; 00128 for(GltDEDigi::GltBits::const_iterator i=tbits[1].begin(); 00129 i!=tbits[1].end(); i++) s<<*i; 00130 return s; 00131 }