Go to the documentation of this file.00001
00002
00003
00004
00005 #include <cmath>
00006 #include <algorithm>
00007
00008 #include "L1Trigger/RPCTechnicalTrigger/interface/TTUEmulator.h"
00009 #include "L1Trigger/RPCTechnicalTrigger/interface/TTUBasicConfig.h"
00010 #include "L1Trigger/RPCTechnicalTrigger/interface/RBCLinkBoardGLSignal.h"
00011 #include "L1Trigger/RPCTechnicalTrigger/interface/TTUGlobalSignal.h"
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 TTUEmulator::TTUEmulator( int id, int mxw )
00023 {
00024
00025 m_id = id;
00026 m_maxWheels = mxw;
00027
00028 int tmp[6] = {1, 2, 0, 0, -1, -2};
00029 m_wheelIds = new int[6];
00030 for( int k=0; k < 6; ++k) m_wheelIds[k]=tmp[k];
00031
00032 m_Wheels = new RPCWheel[2];
00033 for( int k=0; k < m_maxWheels; ++k )
00034 m_Wheels[k].setProperties( m_wheelIds[(id*2)+(k-2)] );
00035
00036 m_ttuin = new TTUInput[2];
00037
00038 m_trigger.reset();
00039
00040 m_mode = 1;
00041
00042 m_debug = false;
00043
00044 m_line = 1;
00045
00046 }
00047
00048
00049 TTUEmulator::TTUEmulator( int id, const char * rbclogic_type, const char * ttulogic_type, int mxw )
00050 {
00051
00052 m_id = id;
00053 m_maxWheels = mxw;
00054
00055 int tmp[6] = {1, 2, 0, 0, -1, -2};
00056 m_wheelIds = new int[6];
00057 for( int k=0; k < 6; ++k) m_wheelIds[k]=tmp[k];
00058
00059 m_Wheels = new RPCWheel[2];
00060 for( int k=0; k < m_maxWheels; ++k )
00061 m_Wheels[k].setProperties( m_wheelIds[(id*2)+(k-2)], rbclogic_type );
00062
00063 m_ttuin = new TTUInput[2];
00064
00065 m_ttuconf = dynamic_cast<TTUConfiguration*> (new TTUBasicConfig (ttulogic_type));
00066
00067 m_trigger.reset();
00068
00069 m_mode = 1;
00070
00071 m_debug = false;
00072
00073 m_line = 1;
00074
00075 }
00076
00077 TTUEmulator::TTUEmulator( int id, const char * f_name, const char * rbclogic_type,
00078 const char * ttulogic_type, int mxw )
00079 {
00080
00081 m_id = id;
00082 m_maxWheels = mxw;
00083
00084 int tmp[6] = {1, 2, 0, 0, -1, -2};
00085 m_wheelIds = new int[6];
00086 for( int k=0; k < 6; ++k) m_wheelIds[k]=tmp[k];
00087
00088 m_Wheels = new RPCWheel[2];
00089 for( int k=0; k < m_maxWheels; ++k )
00090 m_Wheels[k].setProperties( m_wheelIds[(id*2)+(k-2)], f_name, rbclogic_type );
00091
00092 m_ttuin = new TTUInput[2];
00093
00094 m_ttuconf = dynamic_cast<TTUConfiguration*> (new TTUBasicConfig (ttulogic_type));
00095
00096 m_trigger.reset();
00097
00098 m_mode = 1;
00099
00100 m_debug = false;
00101
00102 m_line = 1;
00103
00104 }
00105
00106
00107
00108
00109 TTUEmulator::~TTUEmulator() {
00110
00111 if ( m_wheelIds ) delete[] m_wheelIds;
00112 if ( m_Wheels ) delete[] m_Wheels;
00113 if ( m_ttuin ) delete[] m_ttuin;
00114 if ( m_ttuconf ) delete m_ttuconf;
00115
00116 }
00117
00118
00119 void TTUEmulator::setSpecifications( const TTUBoardSpecs * ttuspecs, const RBCBoardSpecs * rbcspecs)
00120 {
00121
00122 m_ttuconf = dynamic_cast<TTUConfiguration*> (new TTUBasicConfig (ttuspecs));
00123
00124 for( int k=0; k < m_maxWheels; ++k)
00125 m_Wheels[k].setSpecifications( rbcspecs );
00126
00127 std::vector<TTUBoardSpecs::TTUBoardConfig>::const_iterator itr;
00128 itr = m_ttuconf->m_ttuboardspecs->m_boardspecs.begin();
00129
00130 m_mode = (*itr).m_triggerMode;
00131
00132 }
00133
00134 bool TTUEmulator::initialise()
00135 {
00136 bool status(false);
00137 for( int k=0; k < m_maxWheels; ++k)
00138 status = m_Wheels[k].initialise( );
00139
00140 status = m_ttuconf->initialise( m_line , m_id );
00141
00142 if ( !status ) {
00143 if( m_debug ) std::cout << "TTUEmulator> Problem initialising the Configuration \n";
00144 return 0; };
00145
00146 return status;
00147
00148 }
00149
00150 void TTUEmulator::SetLineId( int line )
00151 {
00152 m_line = line;
00153 }
00154
00155 void TTUEmulator::emulate()
00156 {
00157
00158 for( int k=0; k < m_maxWheels; ++k )
00159 m_Wheels[k].emulate();
00160
00161 }
00162
00163 void TTUEmulator::processTtu( RPCInputSignal * signal )
00164 {
00165
00166
00167 int bx(0);
00168 bool trg(false);
00169
00170 if( m_debug ) std::cout << "TTUEmulator::processTtu starts" << '\n';
00171
00172 m_trigger.reset();
00173 m_triggerBx.clear();
00174
00175 std::vector<int> bxVec;
00176 std::vector<int>::iterator bxItr;
00177 std::map<int,RBCInput*> * linkboardin;
00178 std::map<int,RBCInput*>::iterator inItr;
00179
00180 linkboardin = dynamic_cast<RBCLinkBoardGLSignal*>( signal )->m_linkboardin;
00181
00182 for( inItr = (*linkboardin).begin(); inItr != (*linkboardin).end(); ++inItr)
00183 {
00184
00185 if ( (*inItr).first < 0 ) bx = (int) ceil( (*inItr).first / 1000000.0 );
00186 else bx = (int) floor( (*inItr).first / 1000000.0 );
00187 bxVec.push_back(bx);
00188
00189 }
00190
00191 bxItr = unique (bxVec.begin(), bxVec.end());
00192 bxVec.resize(bxItr - bxVec.begin());
00193
00194 for ( bxItr = bxVec.begin(); bxItr != bxVec.end(); ++bxItr) {
00195
00196 TriggerResponse * triggerResponse = new TriggerResponse();
00197
00198 for( int k=0; k < m_maxWheels; ++k )
00199 {
00200
00201 if ( m_Wheels[k].process( (*bxItr) , (*linkboardin) ) ) {
00202
00203 m_Wheels[k].createWheelMap();
00204
00205 m_Wheels[k].retrieveWheelMap( (m_ttuin[k]) );
00206
00207
00208 m_ttuconf->m_ttulogic->run( (m_ttuin[k]) );
00209
00210
00211 trg = m_ttuconf->m_ttulogic->isTriggered();
00212
00213 m_trigger.set(k,trg);
00214
00215 if( m_debug ) std::cout << "TTUEmulator::processTtu ttuid: " << m_id
00216 << " bx: " << (*bxItr)
00217 << " wheel: " << m_Wheels[k].getid()
00218 << " response: " << trg << std::endl;
00219
00220 }
00221
00222
00223 }
00224
00225
00226 triggerResponse->setTriggerBits( (*bxItr) , m_trigger );
00227 m_triggerBxVec.push_back( triggerResponse );
00228 m_triggerBx[ (*bxItr) ] = m_trigger;
00229
00230 }
00231
00232
00233 if( m_debug ) std::cout << "TTUEmulator::processTtu> size of trigger map "
00234 << m_triggerBx.size() << std::endl;
00235
00236
00237 if( m_debug ) std::cout << "TTUEmulator::processTtu> done with this TTU: " << m_id << std::endl;
00238
00239 bxVec.clear();
00240
00241 if( m_debug ) std::cout << "TTUEmulator::processTtu ends" << '\n';
00242
00243 }
00244
00245 void TTUEmulator::processTtu( RPCInputSignal * signal , int wedgeId )
00246 {
00247
00248
00249 int bx(0);
00250 bool trg(false);
00251
00252 if( m_debug ) std::cout << "TTUEmulator::processTtu( Pointing ) starts " << '\n';
00253
00254 m_trigger.reset();
00255 m_triggerBx.clear();
00256
00257 std::vector<int> bxVec;
00258 std::vector<int>::iterator bxItr;
00259 std::map<int,RBCInput*> * linkboardin;
00260 std::map<int,RBCInput*>::iterator inItr;
00261
00262 linkboardin = dynamic_cast<RBCLinkBoardGLSignal*>( signal )->m_linkboardin;
00263
00264 for( inItr = (*linkboardin).begin(); inItr != (*linkboardin).end(); ++inItr)
00265 {
00266
00267 if ( (*inItr).first < 0 ) bx = (int) ceil( (*inItr).first / 1000000.0 );
00268 else bx = (int) floor( (*inItr).first / 1000000.0 );
00269 bxVec.push_back(bx);
00270
00271 }
00272
00273 bxItr = unique (bxVec.begin(), bxVec.end());
00274 bxVec.resize(bxItr - bxVec.begin());
00275
00276 for ( bxItr = bxVec.begin(); bxItr != bxVec.end(); ++bxItr) {
00277
00278 TriggerResponse * triggerResponse = new TriggerResponse();
00279
00280 for( int k=0; k < m_maxWheels; ++k )
00281 {
00282
00283 if ( m_Wheels[k].process( (*bxItr) , (*linkboardin) ) ) {
00284
00285 m_Wheels[k].createWheelMap();
00286
00287 m_Wheels[k].retrieveWheelMap( (m_ttuin[k]) );
00288
00289
00290 m_ttuconf->m_ttulogic->run( (m_ttuin[k]) , wedgeId );
00291
00292
00293 trg = m_ttuconf->m_ttulogic->isTriggered();
00294
00295 m_trigger.set(k,trg);
00296
00297 if( m_debug ) std::cout << "TTUEmulator::processTtu( Pointing ) ttuid: " << m_id
00298 << " bx: " << (*bxItr)
00299 << " wheel: " << m_Wheels[k].getid()
00300 << " response: " << trg << std::endl;
00301
00302 }
00303
00304
00305 }
00306
00307 triggerResponse->setTriggerBits( (*bxItr) , wedgeId, m_trigger );
00308 m_triggerBxVec.push_back( triggerResponse );
00309 m_triggerBx[ (*bxItr) ] = m_trigger;
00310
00311 }
00312
00313 if( m_debug ) std::cout << "TTUEmulator::processTtu (Pointing) > size of trigger map "
00314 << m_triggerBx.size() << std::endl;
00315
00316 if( m_debug ) std::cout << "TTUEmulator::processTtu (Pointing) > done with this TTU: " << m_id << std::endl;
00317
00318 bxVec.clear();
00319
00320 if( m_debug ) std::cout << "TTUEmulator::processTtu( Pointing ) end" << '\n';
00321
00322 }
00323
00324
00325 void TTUEmulator::clearTriggerResponse()
00326 {
00327
00328 std::vector<TriggerResponse*>::iterator itr;
00329 for ( itr = m_triggerBxVec.begin(); itr != m_triggerBxVec.end(); ++itr)
00330 if ( (*itr) ) delete (*itr);
00331 m_triggerBxVec.clear();
00332
00333 }
00334
00335
00336
00337 void TTUEmulator::printinfo()
00338 {
00339
00340 std::cout << "TTUEmulator: " << m_id << '\n';
00341 for( int k=0; k < m_maxWheels; ++k )
00342 m_Wheels[k].printinfo();
00343
00344 }
00345