Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "L1TriggerConfig/DTTPGConfig/interface/DTConfigTSPhi.h"
00018
00019
00020
00021
00022 #include <iostream>
00023 #include <cstring>
00024
00025
00026
00027
00028
00029 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00030
00031
00032
00033
00034 DTConfigTSPhi::DTConfigTSPhi(const edm::ParameterSet& ps) {
00035
00036 setDefaults(ps);
00037 if (debug()) print();
00038 }
00039
00040 DTConfigTSPhi::DTConfigTSPhi(bool debugTS, unsigned short int tss_buffer[7][31], int ntss, unsigned short int tsm_buffer[9]) {
00041
00042 m_ntss = 0;
00043 m_ntsm = 0;
00044
00045 if (ntss == 0)
00046 return;
00047
00048 m_debug = debugTS;
00049
00050 bool tstren[24];
00051 bool tsscgs2, tsscgs1, tsscce1, tsshte1, tssnoe1, carrytss;
00052 bool tsscce2, tsshte2, tssnoe2, tssccec, tsshtec, tssnoec;
00053 unsigned short tssgs1, tssgs2, tssmsk1, tssmsk2;
00054
00055 tsscgs2 = tsscgs1 = tsscce1 = tsshte1 = tssnoe1 = carrytss = 0;
00056 tsscce2 = tsshte2 = tssnoe2 = tssccec = tsshtec = tssnoec = 0;
00057 tssgs1 = tssgs2 = tssmsk1 = tssmsk2 = 0;
00058
00059 memset(tstren,true,24*sizeof(bool));
00060
00061
00062 for (int itss=0; itss<ntss; itss++) {
00063 unsigned short int memory_tss[27];
00064
00065 for(int ts=0;ts<27;ts++){
00066 memory_tss[ts] = tss_buffer[itss][ts+4];
00067
00068 }
00069
00070 tstren[itss*4] = !(memory_tss[1]&0x08);
00071 tstren[itss*4+1] = !(memory_tss[1]&0x80);
00072 tstren[itss*4+2] = !(memory_tss[2]&0x08);
00073 tstren[itss*4+3] = !(memory_tss[2]&0x80);
00074
00075 if(!itss) {
00076 tsscgs2 = !(memory_tss[0]&0x08);
00077 tssgs2 = memory_tss[0]&0x04 ? 0 : 1;
00078 tsscgs1 = !(memory_tss[0]&0x02);
00079 tssgs1 = memory_tss[0]&0x01 ? 0 : 1;
00080 tsscce1 = !(memory_tss[4]&0x04);
00081 tsshte1 = !(memory_tss[4]&0x02);
00082 tssnoe1 = !(memory_tss[4]&0x01);
00083 tsscce2 = !(memory_tss[3]&0x40);
00084 tsshte2 = !(memory_tss[3]&0x20);
00085 tssnoe2 = !(memory_tss[3]&0x10);
00086 tssccec = !(memory_tss[3]&0x04);
00087 tsshtec = !(memory_tss[3]&0x02);
00088 tssnoec = !(memory_tss[3]&0x01);
00089 carrytss= !(memory_tss[4]&0x40);
00090 tssmsk1 = memory_tss[4]&0x10 ? 132 : 312;
00091 tssmsk2 = memory_tss[4]&0x20 ? 132 : 312;
00092 }
00093
00094 m_ntss++;
00095
00096 }
00097
00098
00099 unsigned short int memory_tsms[2], memory_tsmdu[2], memory_tsmdd[2];
00100
00101 for(int ts=0;ts<2;ts++){
00102 memory_tsms[ts] = tsm_buffer[ts+3];
00103 memory_tsmdu[ts] = tsm_buffer[ts+5];
00104 memory_tsmdd[ts] = tsm_buffer[ts+7];
00105
00106
00107 }
00108
00109 bool tsmcgs1 = true;
00110 unsigned short tsmgs1 = memory_tsms[1]&0x02 ? 0 : 1;
00111 bool tsmcgs2 = true;
00112 unsigned short tsmgs2 = 1;
00113 bool tsmcce1 = true;
00114 bool tsmhte1 = true;
00115 bool tsmnoe1 = true;
00116 bool tsmcce2 = true;
00117 bool tsmhte2 = true;
00118 bool tsmnoe2 = true;
00119 bool tsmccec = true;
00120 bool tsmhtec = true;
00121 bool tsmnoec = true;
00122 bool carrytsms = !(memory_tsms[1]&0x01);
00123 unsigned short tsmmsk1 = memory_tsms[1]&0x08 ? 321 : 312;
00124 unsigned short tsmmsk2 = tsmmsk1;
00125 bool tsmword[8];
00126 tsmword[0] = !((memory_tsmdu[0]&0x80)&&(memory_tsmdd[0]&0x80));
00127 tsmword[1] = !(memory_tsms[0]&0x01);
00128 tsmword[2] = !(memory_tsms[0]&0x02);
00129 tsmword[3] = !(memory_tsms[0]&0x04);
00130 tsmword[4] = !(memory_tsms[0]&0x08);
00131 tsmword[5] = !(memory_tsms[0]&0x10);
00132 tsmword[6] = !(memory_tsms[0]&0x20);
00133 tsmword[7] = !(memory_tsms[0]&0x40);
00134 bool carrytsmd = !((memory_tsmdu[0]&0x10)&&(memory_tsmdd[0]&0x10));
00135
00136 unsigned short tsmhsp = carrytss && carrytsms && carrytsmd;
00137
00138 m_ntsm++;
00139
00140 if (debug()) {
00141 std::cout << "TSS :" << std::dec << std::endl << "tstren= " ;
00142 for (int i=0; i<24 ;i++) std::cout << tstren[i] << " ";
00143 std::cout << " tsscgs1=" << tsscgs1
00144 << " tssgs1=" << tssgs1
00145 << " tsscgs2=" << tsscgs2
00146 << " tssgs2=" << tssgs2
00147 << " tsscce1=" << tsscce1
00148 << " tsshte1=" << tsshte1
00149 << " tssnoe1=" << tssnoe1
00150 << " tsscce2=" << tsscce2
00151 << " tsshte2=" << tsshte2
00152 << " tssnoe2=" << tssnoe2
00153 << " tssccec=" << tssccec
00154 << " tsshtec=" << tsshtec
00155 << " tssnoec=" << tssnoec
00156 << " carrytss=" << carrytss
00157 << " tssmsk1=" << tssmsk1
00158 << " tssmsk2=" << tssmsk2 << std::endl;
00159
00160 std::cout << "TSM : "<< std::endl
00161 << "tsmcgs1=" << tsmcgs1
00162 << " tsmgs1=" << tsmgs1
00163 << " tsmcgs2=" << tsmcgs2
00164 << " tsmgs2=" << tsmgs2
00165 << " tsmcce1=" << tsmcce1
00166 << " tsmhte1=" << tsmhte1
00167 << " tsmnoe1=" << tsmnoe1
00168 << " tsmcce2=" << tsmcce2
00169 << " tsmhte2=" << tsmhte2
00170 << " tsmnoe2=" << tsmnoe2
00171 << " tsmccec=" << tsmccec
00172 << " tsmhtec=" << tsmhtec
00173 << " tsmnoec=" << tsmnoec
00174 << " tsmhsp=" << tsmhsp
00175 << " carrytsms=" << carrytsms
00176 << " carrytsmd=" << carrytsmd
00177 << " tsmword=";
00178 for (int i=0;i<8;i++) std::cout << tsmword[i] << " ";
00179 std::cout << " tsmmsk1=" << tsmmsk1
00180 << " tsmmsk2=" << tsmmsk2 << std::endl;
00181 }
00182
00183 setTssMasking(tssmsk1,1);
00184 setTssMasking(tssmsk2,2);
00185 setTssHtrigEna(tsshte1,1);
00186 setTssHtrigEna(tsshte2,2);
00187 setTssHtrigEnaCarry(tsshtec);
00188 setTssInOutEna(tssnoe1,1);
00189 setTssInOutEna(tssnoe2,2);
00190 setTssInOutEnaCarry(tssnoec);
00191 setTssCorrEna(tsscce1,1);
00192 setTssCorrEna(tsscce2,2);
00193 setTssCorrEnaCarry(tssccec);
00194 setTssGhost1Flag(tssgs1);
00195 setTssGhost2Flag(tssgs2);
00196 setTssGhost1Corr(tsscgs1);
00197 setTssGhost2Corr(tsscgs2);
00198
00199 setTsmMasking(tsmmsk1,1);
00200 setTsmMasking(tsmmsk2,2);
00201 setTsmHtrigEna(tsmhte1,1);
00202 setTsmHtrigEna(tsmhte2,2);
00203 setTsmHtrigEnaCarry(tsmhtec);
00204 setTsmInOutEna(tsmnoe1,1);
00205 setTsmInOutEna(tsmnoe2,2);
00206 setTsmInOutEnaCarry(tsmnoec);
00207 setTsmCorrEna(tsmcce1,1);
00208 setTsmCorrEna(tsmcce2,2);
00209 setTsmCorrEnaCarry(tsmccec);
00210 setTsmGhost1Flag(tsmgs1);
00211 setTsmGhost2Flag(tsmgs2);
00212 setTsmGhost1Corr(tsmcgs1);
00213 setTsmGhost2Corr(tsmcgs2);
00214 setTsmCarryFlag(tsmhsp);
00215
00216 for (int i=0;i<24;i++) setUsedTraco(i,tstren[i]);
00217 for (int i=0;i<8;i++) setTsmStatus(i,tsmword[i]);
00218
00219
00220 }
00221
00222
00223
00224
00225 DTConfigTSPhi::~DTConfigTSPhi() {}
00226
00227
00228
00229
00230
00231 void
00232 DTConfigTSPhi::setDefaults(const edm::ParameterSet& ps) {
00233
00234 m_ntss = 1;
00235 m_ntsm = 1;
00236
00237
00238 m_debug = ps.getUntrackedParameter<bool>("Debug");
00239
00240
00241 int mymsk = ps.getParameter<int>("TSSMSK1");
00242 if (checkMask(mymsk))
00243 m_tssmsk[0] = mymsk;
00244 else {
00245 edm::LogVerbatim("DTTPG") << "DTConfigTSPhi::setDefaults : TSSMSK1 not in correct form: " << mymsk << std::endl;
00246 }
00247
00248
00249 mymsk= ps.getParameter<int>("TSSMSK2");
00250 if (checkMask(mymsk))
00251 m_tssmsk[1] = mymsk;
00252 else {
00253 edm::LogVerbatim("DTTPG") << "DTConfigTSPhi::setDefaults : TSSMSK2 not in correct form: " << mymsk << std::endl;
00254 }
00255
00256
00257 m_tsshte[0] = ps.getParameter<bool>("TSSHTE1");
00258
00259
00260 m_tsshte[1] = ps.getParameter<bool>("TSSHTE2");
00261
00262
00263 m_tsshte[2] = ps.getParameter<bool>("TSSHTEC");
00264
00265
00266 m_tssnoe[0] = ps.getParameter<bool>("TSSNOE1");
00267
00268
00269 m_tssnoe[1] = ps.getParameter<bool>("TSSNOE2");
00270
00271
00272 m_tssnoe[2] = ps.getParameter<bool>("TSSNOEC");
00273
00274
00275 m_tsscce[0] = ps.getParameter<bool>("TSSCCE1");
00276
00277
00278 m_tsscce[1] = ps.getParameter<bool>("TSSCCE2");
00279
00280
00281 m_tsscce[2] = ps.getParameter<bool>("TSSCCEC");
00282
00283
00284 int mygs = ps.getParameter<int>("TSSGS1");
00285 if (mygs>=0 && mygs<3)
00286 m_tssgs1 = mygs;
00287 else {
00288 edm::LogVerbatim("DTTPG") << "DTConfigTSPhi::setDefaults : TSSGS1 value is not correct: " << mygs << std::endl;
00289 }
00290
00291
00292 mygs= ps.getParameter<int>("TSSGS2");
00293 if (mygs>=0 && mygs<5)
00294 m_tssgs2 = mygs;
00295 else {
00296 edm::LogVerbatim("DTTPG") << "DTConfigTSPhi::setDefaults : TSSGS2 value is not correct: " << mygs << std::endl;
00297 }
00298
00299
00300 m_tsscgs1 = ps.getParameter<bool>("TSSCGS1");
00301
00302
00303 m_tsscgs2 = ps.getParameter<bool>("TSSCGS2");
00304
00305
00306 mymsk = ps.getParameter<int>("TSMMSK1");
00307 if (checkMask(mymsk))
00308 m_tsmmsk[0] = mymsk;
00309 else {
00310 edm::LogVerbatim("DTTPG") << "DTConfigTSPhi::setDefaults : TSMMSK1 not in correct form: " << mymsk << std::endl;
00311 }
00312
00313
00314 mymsk= ps.getParameter<int>("TSMMSK2");
00315 if (checkMask(mymsk))
00316 m_tsmmsk[1] = mymsk;
00317 else {
00318 edm::LogVerbatim("DTTPG") << "DTConfigTSPhi::setDefaults : TSMMSK2 not in correct form: " << mymsk << std::endl;
00319 }
00320
00321
00322 m_tsmhte[0] = ps.getParameter<bool>("TSMHTE1");
00323
00324
00325 m_tsmhte[1] = ps.getParameter<bool>("TSMHTE2");
00326
00327
00328 m_tsmhte[2] = ps.getParameter<bool>("TSMHTEC");
00329
00330
00331 m_tsmnoe[0] = ps.getParameter<bool>("TSMNOE1");
00332
00333
00334 m_tsmnoe[1] = ps.getParameter<bool>("TSMNOE2");
00335
00336
00337 m_tsmnoe[2] = ps.getParameter<bool>("TSMNOEC");
00338
00339
00340 m_tsmcce[0] = ps.getParameter<bool>("TSMCCE1");
00341
00342
00343 m_tsmcce[1] = ps.getParameter<bool>("TSMCCE2");
00344
00345
00346 m_tsmcce[2] = ps.getParameter<bool>("TSMCCEC");
00347
00348
00349 mygs = ps.getParameter<int>("TSMGS1");
00350 if (mygs>=0 && mygs<3)
00351 m_tsmgs1 = mygs;
00352 else {
00353 edm::LogVerbatim("DTTPG") << "DTConfigTSPhi::setDefaults : TSMGS1 value is not correct: " << mygs << std::endl;
00354 }
00355
00356
00357 mygs= ps.getParameter<int>("TSMGS2");
00358 if (mygs>=0 && mygs<5)
00359 m_tsmgs2 = mygs;
00360 else {
00361 edm::LogVerbatim("DTTPG") << "DTConfigTSPhi::setDefaults : TSMGS2 value is not correct: " << mygs << std::endl;
00362 }
00363
00364
00365 m_tsmcgs1 = ps.getParameter<bool>("TSMCGS1");
00366
00367
00368 m_tsmcgs2 = ps.getParameter<bool>("TSMCGS2");
00369
00370
00371 int myhsp = ps.getParameter<int>("TSMHSP");
00372 if (myhsp>=0 && myhsp<3)
00373 m_tsmhsp = myhsp;
00374 else {
00375 edm::LogVerbatim("DTTPG") << "DTConfigTSPhi::setDefaults : TSMHSP value is not correct: " << myhsp << std::endl;
00376 }
00377
00378
00379 m_tsmword.one();
00380 int word = ps.getParameter<int>("TSMWORD");
00381 if (word<0 || word>255){
00382 edm::LogVerbatim("DTTPG") << "DTConfigTSPhi::setDefaults : TSMWORD value is not correct: " << word << std::endl;
00383 }
00384 for (int i=0;i<7;i++){
00385 short int bit = word%2;
00386 word /= 2;
00387 if (bit==0) m_tsmword.unset(i);
00388 }
00389
00391 m_tstren.one();
00392 for (int i=0;i<24;i++){
00393 std::stringstream os;
00394 os << "TSTREN" << i;
00395 if (ps.getParameter<bool>(os.str())== 0)
00396 m_tstren.unset(i);
00397 }
00398
00399 }
00400
00401 int
00402 DTConfigTSPhi::TSSinTSMD(int stat, int sect) {
00403
00404
00405
00406
00407
00408
00409
00410
00411
00412
00413
00414
00415
00416
00417
00418
00419 if( stat==1 ||
00420 stat==2 ||
00421 ( stat==4 && (sect==9 || sect==11 ||
00422 sect==10))) {
00423 m_ntsstsmd = 2;
00424 } else {
00425 m_ntsstsmd = 3;
00426 }
00427
00428 return (int)m_ntsstsmd;
00429
00430 }
00431
00432 void
00433 DTConfigTSPhi::print() const {
00434
00435 std::cout << "******************************************************************************" << std::endl;
00436 std::cout << "* DTTrigger configuration : TSPhi chips *" << std::endl;
00437 std::cout << "******************************************************************************" << std::endl << std::endl;
00438 std::cout << "Debug flag : " << debug() << std::endl;
00439 std::cout << " TSS Parameters:" << std::endl;
00440 std::cout << "TSSMSK 1/2:" << TssMasking(0) << " " << TssMasking(1) << std::endl;
00441 std::cout << "TSSHTE 1/2/carry :" << TssHtrigEna(0) << " " << TssHtrigEna(1) << " " << TssHtrigEnaCarry() << std::endl;
00442 std::cout << "TSSNOE 1/2/carry :" << TssInOutEna(0) << " " << TssInOutEna(1) << " " << TssInOutEnaCarry() << std::endl;
00443 std::cout << "TSSCCE 1/2/carry :" << TssCorrEna(0) << " " << TssCorrEna(1) << " " << TssCorrEnaCarry() << std::endl;
00444 std::cout << "TSSGS 1/2:" << TssGhost1Flag() << " " << TssGhost2Flag() << std::endl;
00445 std::cout << "TSSCGS 1/2:" << TssGhost1Corr() << " " << TssGhost2Corr() << std::endl;
00446 std::cout << " TSM Parameters:" << std::endl;
00447 std::cout << "TSMMSK 1/2:" << TsmMasking(0) << " " << TsmMasking(1) << std::endl;
00448 std::cout << "TSMHTE 1/2/carry :" << TsmHtrigEna(0) << " " << TsmHtrigEna(1) << " " << TsmHtrigEnaCarry() << std::endl;
00449 std::cout << "TSMNOE 1/2/carry :" << TsmInOutEna(0) << " " << TsmInOutEna(1) << " " << TsmInOutEnaCarry() << std::endl;
00450 std::cout << "TSMCCE 1/2/carry :" << TsmCorrEna(0) << " " << TsmCorrEna(1) << " " << TsmCorrEnaCarry() << std::endl;
00451 std::cout << "TSMGS 1/2:" << TsmGhost1Flag() << " " << TsmGhost2Flag() << std::endl;
00452 std::cout << "TSMCGS 1/2:" << TsmGhost1Corr() << " " << TsmGhost2Corr() << std::endl;
00453 std::cout << "TSMHSP :" << TsmGetCarryFlag() << std::endl;
00454 std::cout << "TSTREN[i] :";
00455 for (int i=1;i<25;i++) std::cout << usedTraco(i) << " ";
00456 std::cout << std::endl;
00457 std::cout << "TSMWORD :";
00458 TsmStatus().print();
00459 std::cout << std::endl;
00460
00461
00462 std::cout << "******************************************************************************" << std::endl;
00463
00464 }
00465
00466
00467 int
00468 DTConfigTSPhi::nValidTSS() {
00469
00470 bool isMaskValid = checkMask(TssMasking(0)) && checkMask(TssMasking(1));
00471 bool isGsValid = (TssGhost1Flag()>=0 && TssGhost1Flag()<3) && (TssGhost2Flag()>=0 && TssGhost2Flag()<5);
00472 int nValidTSS = static_cast<int>(isMaskValid && isGsValid ? m_ntss : 0);
00473
00474 return nValidTSS;
00475 }
00476
00477 int
00478 DTConfigTSPhi::nValidTSM() {
00479
00480 bool isMaskValid = checkMask( TsmMasking(0)) && checkMask(TsmMasking(1));
00481 bool isGsValid = (TsmGhost1Flag()>=0 && TsmGhost1Flag()<3) && (TsmGhost2Flag()>=0 && TsmGhost2Flag()<5);
00482 bool isCarryValid = TsmGetCarryFlag()>=0 && TsmGetCarryFlag()<3;
00483 int nValidTSM = static_cast<int>(isMaskValid && isGsValid && isCarryValid ? m_ntsm : 0);
00484
00485 return nValidTSM;
00486
00487 }
00488
00489 bool
00490 DTConfigTSPhi::checkMask(unsigned short msk){
00491
00492 bool hasone = false;
00493 bool hastwo = false;
00494 bool hasthree = false;
00495 for(int i=0;i<3;i++){
00496 int mynum = msk%10;
00497 switch (mynum){
00498 case 1:
00499 hasone = true;
00500 break;
00501 case 2:
00502 hastwo = true;
00503 break;
00504 case 3:
00505 hasthree =true;
00506 break;
00507 }
00508 msk /= 10;
00509 }
00510 if (hasone==true && hastwo==true && hasthree==true) return true;
00511 return false;
00512
00513 }
00514
00515