Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-04-11 03:31:21

0001 //-------------------------------------------------
0002 //
0003 //   Class: DTBtiChip
0004 //
0005 //   Description: Implementation of DTBtiChip
0006 //                trigger algorithm
0007 //                (Equations' implementation)
0008 //
0009 //
0010 //   Author List:
0011 //   C. Grandi
0012 //   Modifications:
0013 //   22/X/02 S. Vanini: redundant patterns added
0014 //   9/XII/02 SV : equation in manual form
0015 //   13/I/2003 SV equations in manual order
0016 //   22/VI/04 SV: last trigger code update
0017 //--------------------------------------------------
0018 
0019 //#include "Utilities/Configuration/interface/Architecture.h"
0020 
0021 //-----------------------
0022 // This Class's Header --
0023 //-----------------------
0024 #include "L1Trigger/DTBti/interface/DTBtiChip.h"
0025 
0026 //-------------------------------
0027 // Collaborating Class Headers --
0028 //-------------------------------
0029 #include "L1Trigger/DTBti/interface/DTBtiHit.h"
0030 
0031 //---------------
0032 // C++ Headers --
0033 //---------------
0034 #include <iostream>
0035 
0036 using namespace std;
0037 
0038 void DTBtiChip::computeSums() {
0039   //
0040   // compute all sums and diffs
0041   // nothing more than a table...
0042   // numbering convention here is the same as the fortran version:
0043   //   sum number in the range [1,25]
0044   //   cell numbers in the range [1,9]
0045   //     --> sum(int,int,int) decreases the indices by 1
0046   // sum (sum_number, first_cell, second_cell)
0047   //
0048 
0049   if (config()->debug() > 3) {
0050     cout << "DTBtiChip::computeSums called" << endl;
0051   }
0052 
0053   sum(1, 2, 1);
0054   sum(2, 3, 1);
0055   sum(3, 4, 1);
0056   sum(4, 6, 1);
0057   sum(5, 8, 1);
0058   sum(6, 3, 2);
0059   sum(7, 4, 2);
0060   sum(8, 5, 2);
0061   sum(9, 4, 3);
0062   sum(10, 5, 3);
0063   sum(11, 6, 3);
0064   sum(12, 8, 3);
0065   sum(13, 5, 4);
0066   sum(14, 6, 4);
0067   sum(15, 7, 4);
0068   sum(16, 9, 4);
0069   sum(17, 6, 5);
0070   sum(18, 7, 5);
0071   sum(19, 8, 5);
0072   sum(20, 7, 6);
0073   sum(21, 8, 6);
0074   sum(22, 9, 6);
0075   sum(23, 8, 7);
0076   sum(24, 9, 7);
0077   sum(25, 9, 8);
0078 }
0079 
0080 void DTBtiChip::sum(const int s, const int a, const int b) {
0081   //
0082   // fill the sums and difs arrays
0083   // a and b are the cell numbers (in the range [1,9])
0084   // s is the sum number (in the range [1,25])
0085   //
0086 
0087   if (_thisStepUsedHit[a - 1] != nullptr && _thisStepUsedHit[b - 1] != nullptr) {
0088     _sums[s - 1] = (float)(_thisStepUsedHit[a - 1]->jtrig() + _thisStepUsedHit[b - 1]->jtrig());
0089     _difs[s - 1] = (float)(_thisStepUsedHit[a - 1]->jtrig() - _thisStepUsedHit[b - 1]->jtrig());
0090   } else {
0091     _sums[s - 1] = 1000;
0092     _difs[s - 1] = 1000;
0093   }
0094 }
0095 
0096 void DTBtiChip::reSumSet() {
0097   reSumAr[2][2 + 2] = 0;
0098   reSumAr[2][1 + 2] = 0;
0099   reSumAr[2][0 + 2] = 0;
0100   reSumAr[2][-1 + 2] = -1;
0101   reSumAr[2][-2 + 2] = -1;
0102 
0103   reSumAr[1][2 + 2] = 1;
0104   reSumAr[1][1 + 2] = 1;
0105   reSumAr[1][0 + 2] = 0;
0106   reSumAr[1][-1 + 2] = 0;
0107   reSumAr[1][-2 + 2] = 0;
0108 
0109   reSumAr[0][2 + 2] = 1;
0110   reSumAr[0][1 + 2] = 0;
0111   reSumAr[0][0 + 2] = 0;
0112   reSumAr[0][-1 + 2] = 0;
0113   reSumAr[0][-2 + 2] = -1;
0114 
0115   reSumAr23[2][2 + 2] = 1;
0116   reSumAr23[2][1 + 2] = 1;
0117   reSumAr23[2][0 + 2] = 1;
0118   reSumAr23[2][-1 + 2] = 0;
0119   reSumAr23[2][-2 + 2] = 0;
0120 
0121   reSumAr23[1][2 + 2] = 1;
0122   reSumAr23[1][1 + 2] = 1;
0123   reSumAr23[1][0 + 2] = 0;
0124   reSumAr23[1][-1 + 2] = 0;
0125   reSumAr23[1][-2 + 2] = 0;
0126 
0127   reSumAr23[0][2 + 2] = 1;
0128   reSumAr23[0][1 + 2] = 0;
0129   reSumAr23[0][0 + 2] = 0;
0130   reSumAr23[0][-1 + 2] = 0;
0131   reSumAr23[0][-2 + 2] = -1;
0132 }
0133 
0134 void DTBtiChip::computeEqs() {
0135   //
0136   // Compute all K and X equations of DTBtiChip algorithm
0137   // NB now Keq=Kman
0138 
0139   float K0 = config()->ST();
0140   //cout <<"K0="<<K0<<endl;
0141 
0142   //enabled patterns....
0143   int PTMS[32];
0144   for (int i = 0; i < 32; i++) {
0145     PTMS[i] = config()->PTMSflag(i);
0146   }
0147 
0148   int i;
0149   // redundant patterns added by Sara Vanini
0150   i = 0;  //  1324A  --> 1L3L2R4L
0151   if (PTMS[i]) {
0152     _Keq[i][0] = _difs[1] + 2. * K0;                 //eq. AB
0153     _Keq[i][1] = -_sums[5] + 2. * K0;                //eq. BC
0154     _Keq[i][2] = _sums[6];                           //eq. CD
0155     _Keq[i][3] = -(_sums[0] / 2.) + 2. * K0 + 0.01;  //eq. AC
0156     _Keq[i][4] = (_difs[8] / 2.) + K0 + 0.01;        //eq. BD
0157     //_Keq[i][5] =  (_difs[2]/3.) + 4.*K0/3. + 0.51;                 //eq. AD
0158     _Keq[i][5] = ST43 + reSum(RE43, int(fmod(double(_difs[2]), 3.))) + int((double(_difs[2]) / 3.));  //eq. AD
0159 
0160     //patt 0 always uses Xbc, because Xad could be negative...
0161     //when wire B is missing,  TshiftB=0
0162     //when hit B is gone out of shift register, Tshift=K0+1
0163     float TshiftB = 0;
0164     float TshiftC = 0;
0165     if (_thisStepUsedHit[3 - 1] == nullptr) {
0166       if (_hits[3 - 1].empty())
0167         TshiftB = 0;
0168       if (!_hits[3 - 1].empty() && (*(_hits[3 - 1].begin()))->clockTime() <= -K0)
0169         TshiftB = K0 + 1;
0170     } else
0171       TshiftB = _thisStepUsedHit[3 - 1]->jtrig();
0172 
0173     if (_thisStepUsedHit[2 - 1] == nullptr) {
0174       if (_hits[2 - 1].empty())
0175         TshiftC = 0;
0176       if (!_hits[2 - 1].empty() && (*(_hits[2 - 1].begin()))->clockTime() <= -K0)
0177         TshiftC = K0 + 1;
0178     } else
0179       TshiftC = _thisStepUsedHit[2 - 1]->jtrig();
0180 
0181     float _difs_p0 = (float)(TshiftB - TshiftC);
0182 
0183     // Zotto's
0184     _XeqAB_patt0 = (_sums[1] - K0) / 4.;  //eq. AB
0185     _Xeq[i][0] = (_difs_p0 + K0) / 4.;    //eq. BC
0186     _XeqCD_patt0 = (_difs[6] + K0) / 4.;  //eq. CD
0187     _XeqAC_patt0 = -(_difs[0]) / 4.;      //eq. AC
0188     _XeqBD_patt0 = (_sums[8]) / 4.;       //eq. BD
0189     _Xeq[i][1] = (_sums[2] - K0) / 4.;    //eq. AD
0190 
0191     /*
0192 // my eq
0193   _XeqAB_patt0 = (_sums[1] - K0) / 4.;                       //eq. AB
0194   _Xeq[i][0]   = (_difs[5] + K0) / 4.;                       //eq. BC
0195   _XeqCD_patt0 = (_difs[6] + K0) / 4.;                        //eq. CD
0196   _XeqAC_patt0 = -(_difs[0])   / 4.;                         //eq. AC
0197   _XeqBD_patt0 =  (_sums[8])   / 4.;                         //eq. BD
0198   _Xeq[i][1] = (_sums[2] - K0) / 4.;                         //eq. AD
0199 */
0200   }
0201 
0202   i = 1;  //  1324B  --> 1L3L2R4R
0203   if (PTMS[i]) {
0204     _Keq[i][0] = _difs[1] + 2. * K0;
0205     _Keq[i][1] = -(_sums[5]) + 2. * K0;
0206     _Keq[i][2] = -_difs[6] + 2. * K0;
0207     _Keq[i][3] = -(_sums[0] / 2.) + 2. * K0 + 0.01;
0208     _Keq[i][4] = -(_sums[8] / 2.) + 2. * K0 + 0.01;
0209     //_Keq[i][5] = -(_sums[2]/3.)     + 2.*K0 + 0.51;
0210     _Keq[i][5] = ST2 + reSum23(0, int(fmod(double(-_sums[2]), 3.))) + int((double(-_sums[2]) / 3.));
0211 
0212     _Xeq[i][0] = (_difs[5] + K0) / 4.;
0213     _Xeq[i][1] = (-_difs[2] + K0) / 4.;
0214   }
0215 
0216   i = 2;  //  1324C  --> 1R3L2R4L
0217   if (PTMS[i]) {
0218     _Keq[i][0] = _sums[1];
0219     _Keq[i][1] = -_sums[5] + 2. * K0;
0220     _Keq[i][2] = _sums[6];
0221     _Keq[i][3] = -(_difs[0] / 2.) + K0 + 0.01;
0222     _Keq[i][4] = (_difs[8] / 2.) + K0 + 0.01;
0223     //_Keq[i][5] =  (_sums[2]/3.)    + 2.*K0/3. + 0.51;
0224     _Keq[i][5] = ST23 + reSum23(RE23, int(fmod(double(_sums[2]), 3.))) + int((double(_sums[2]) / 3.));  //eq. AD
0225                                                                                                         /*  
0226 cout << "ST23 =" << ST23 << endl;
0227 cout << "RE23 =" << RE23 << endl;
0228 cout << "fmod(double(_sums[2]),3.) =" << fmod(double(_sums[2]),3.) << endl;
0229 cout << "reSum23 = "<< reSum23( RE23 , fmod(double(_sums[2]),3.) ) << endl;
0230 cout << "double(_sums[2])/3.="<<double(_sums[2])/3.<< endl;
0231 cout << "int('') = " << int( (double(_sums[2])/3.) ) << endl;
0232 */
0233     _Xeq[i][0] = (_difs[5] + K0) / 4.;
0234     _Xeq[i][1] = (_difs[2] + K0) / 4.;
0235   }
0236 
0237   i = 3;  //  1324D  --> 1R3L2R4R
0238   if (PTMS[i]) {
0239     _Keq[i][0] = _sums[1];
0240     _Keq[i][1] = -_sums[5] + 2. * K0;
0241     _Keq[i][2] = -_difs[6] + 2. * K0;
0242     _Keq[i][3] = -(_difs[0] / 2.) + K0 + 0.01;
0243     _Keq[i][4] = -(_sums[8] / 2.) + 2. * K0 + 0.01;
0244     //_Keq[i][5] = -(_difs[2]/3.) + 4.*K0/3.;
0245     _Keq[i][5] = ST43 + reSum(RE43, int(fmod(double(-_difs[2]), 3.))) + int((double(-_difs[2]) / 3.));  //eq. AD
0246 
0247     _Xeq[i][0] = (_difs[5] + K0) / 4.;
0248     _Xeq[i][1] = (-_sums[2] + 3. * K0) / 4.;
0249   }
0250 
0251   i = 4;  //  i = DTBtiChipEQMAP->index("1364A");  --> 1L3L6L4R
0252   if (PTMS[i]) {
0253     _Keq[i][0] = _difs[1] + 2. * K0;
0254     _Keq[i][1] = _difs[10] + 2. * K0;
0255     _Keq[i][2] = -(_sums[13]) + 2. * K0;
0256     _Keq[i][3] = (_difs[3] / 2.) + 2. * K0 + 0.01;
0257     _Keq[i][4] = -(_sums[8] / 2.) + 2. * K0 + 0.01;
0258     //_Keq[i][5] = -(_sums[2]/3.)   + 2.*K0 + 0.51;
0259     _Keq[i][5] = ST2 + reSum23(0, int(fmod(double(-_sums[2]), 3.))) + int((double(-_sums[2]) / 3.));
0260 
0261     _Xeq[i][0] = (_sums[10] + K0) / 4.;
0262     _Xeq[i][1] = (-_difs[2] + K0) / 4.;
0263   }
0264 
0265   i = 5;  //  i = DTBtiChipEQMAP->index("1364B");  --> 1R3L6L4R
0266   if (PTMS[i]) {
0267     _Keq[i][0] = _sums[1];
0268     _Keq[i][1] = _difs[10] + 2. * K0;
0269     _Keq[i][2] = -_sums[13] + 2. * K0;
0270     _Keq[i][3] = (_sums[3] / 2.) + K0 + 0.01;
0271     _Keq[i][4] = -(_sums[8] / 2.) + 2. * K0 + 0.01;
0272     //_Keq[i][5] = -(_difs[2]/3.)  + 4.*K0/3.;
0273     _Keq[i][5] = ST43 + reSum(RE43, int(fmod(double(-_difs[2]), 3.))) + int((double(-_difs[2]) / 3.));  //eq. AD
0274 
0275     _Xeq[i][0] = (_sums[10] + K0) / 4.;
0276     _Xeq[i][1] = (-_sums[2] + 3. * K0) / 4.;
0277   }
0278 
0279   i = 6;  //  i = DTBtiChipEQMAP->index("1364C");  --> 1R3R6L4R
0280   if (PTMS[i]) {
0281     _Keq[i][0] = -_difs[1] + 2. * K0;
0282     _Keq[i][1] = _sums[10];
0283     _Keq[i][2] = -_sums[13] + 2. * K0;
0284     _Keq[i][3] = (_sums[3] / 2.) + K0 + 0.01;
0285     _Keq[i][4] = -(_difs[8] / 2.) + K0 + 0.01;
0286     //_Keq[i][5] = -(_difs[2]/3.)  + 4.*K0/3.;
0287     _Keq[i][5] = ST43 + reSum(RE43, int(fmod(double(-_difs[2]), 3.))) + int((double(-_difs[2]) / 3.));  //eq. AD
0288 
0289     _Xeq[i][0] = (_difs[10] + 3. * K0) / 4.;
0290     _Xeq[i][1] = (-_sums[2] + 3. * K0) / 4.;
0291   }
0292 
0293   i = 7;  //  i = DTBtiChipEQMAP->index("1368A");  --> 1R3R6L8L
0294   if (PTMS[i]) {
0295     _Keq[i][0] = -_difs[1] + 2. * K0;
0296     _Keq[i][1] = (_sums[10]);
0297     _Keq[i][2] = _difs[20] + 2. * K0;
0298     _Keq[i][3] = (_sums[3] / 2.) + K0 + 0.01;
0299     _Keq[i][4] = (_sums[11] / 2.) + K0 + 0.01;
0300     //_Keq[i][5] =  (_sums[4]/3.)   + 4.*K0/3. + 0.51;
0301     _Keq[i][5] = ST43 + reSum(RE43, int(fmod(double(_sums[4]), 3.))) + int((double(_sums[4]) / 3.));  //eq. AD
0302 
0303     _Xeq[i][0] = (_difs[10] + 3. * K0) / 4.;
0304     _Xeq[i][1] = (_difs[4] + 3. * K0) / 4.;
0305   }
0306 
0307   i = 8;  //  i = DTBtiChipEQMAP->index("1368B");  --> 1R3R6R8L
0308   if (PTMS[i]) {
0309     _Keq[i][0] = -_difs[1] + 2. * K0;
0310     _Keq[i][1] = -_difs[10] + 2. * K0;
0311     _Keq[i][2] = (_sums[20]);
0312     _Keq[i][3] = -(_difs[3] / 2.) + 2. * K0 + 0.01;
0313     _Keq[i][4] = (_sums[11] / 2.) + K0 + 0.01;
0314     //_Keq[i][5] =  (_sums[4]/3.)     + 4.*K0/3.;
0315     _Keq[i][5] = ST43 + reSum(RE43, int(fmod(double(_sums[4]), 3.))) + int((double(_sums[4]) / 3.));  //eq. AD
0316 
0317     _Xeq[i][0] = (-_sums[10] + 5. * K0) / 4.;
0318     _Xeq[i][1] = (_difs[4] + 3. * K0) / 4.;
0319   }
0320 
0321   i = 9;  //  i = DTBtiChipEQMAP->index("1368C");  --> 1R3L6L8L
0322   if (PTMS[i]) {
0323     _Keq[i][0] = (_sums[1]);
0324     _Keq[i][1] = _difs[10] + 2. * K0;
0325     _Keq[i][2] = _difs[20] + 2. * K0;
0326     _Keq[i][3] = (_sums[3] / 2.) + K0 + 0.01;
0327     _Keq[i][4] = (_difs[11] / 2.) + 2. * K0 + 0.01;
0328     //_Keq[i][5] =  (_sums[4]/3.)    + 4.*K0/3.;
0329     _Keq[i][5] = ST43 + reSum(RE43, int(fmod(double(_sums[4]), 3.))) + int((double(_sums[4]) / 3.));  //eq. AD
0330 
0331     _Xeq[i][0] = (_sums[10] + K0) / 4.;
0332     _Xeq[i][1] = (_difs[4] + 3. * K0) / 4.;
0333   }
0334 
0335   i = 10;  //  i = DTBtiChipEQMAP->index("5324A");  --> 5L3L2R4L
0336   if (PTMS[i]) {
0337     _Keq[i][0] = -_difs[9];
0338     _Keq[i][1] = -_sums[5] + 2. * K0;
0339     _Keq[i][2] = _sums[6];
0340     _Keq[i][3] = -(_sums[7] / 2.) + K0 + 0.01;
0341     _Keq[i][4] = (_difs[8] / 2.) + K0 + 0.01;
0342     //_Keq[i][5] = -(_difs[12]/3.) + 2.*K0/3.;
0343     _Keq[i][5] = ST23 + reSum23(RE23, int(fmod(double(-_difs[12]), 3.))) + int((double(-_difs[12]) / 3.));  //eq. AD
0344 
0345     _Xeq[i][0] = (_difs[5] + K0) / 4.;
0346     _Xeq[i][1] = (_sums[12] + K0) / 4.;
0347   }
0348 
0349   i = 11;  //  i = DTBtiChipEQMAP->index("5324B");  --> 5L3R2R4L
0350   if (PTMS[i]) {
0351     _Keq[i][0] = -_sums[9] + 2. * K0;
0352     _Keq[i][1] = _difs[5];
0353     _Keq[i][2] = _sums[6];
0354     _Keq[i][3] = -(_sums[7] / 2.) + K0 + 0.01;
0355     _Keq[i][4] = (_sums[8] / 2. + 0.01);
0356     //_Keq[i][5] = -(_difs[12]/3.) + 2.*K0/3.;
0357     _Keq[i][5] = ST23 + reSum23(RE23, int(fmod(double(-_difs[12]), 3.))) + int((double(-_difs[12]) / 3.));  //eq. AD
0358 
0359     _Xeq[i][0] = (-_sums[5] + 3. * K0) / 4.;
0360     _Xeq[i][1] = (_sums[12] + K0) / 4.;
0361   }
0362 
0363   i = 12;  //  i = DTBtiChipEQMAP->index("5324C");  --> 5R3R2R4L
0364   if (PTMS[i]) {
0365     _Keq[i][0] = _difs[9];
0366     _Keq[i][1] = _difs[5];
0367     _Keq[i][2] = (_sums[6]);
0368     _Keq[i][3] = (_difs[7] / 2.) + 0.01;
0369     _Keq[i][4] = (_sums[8] / 2.) + 0.01;
0370     _Keq[i][5] = (_sums[12] / 3.) + 0.51;
0371 
0372     _Xeq[i][0] = (-_sums[5] + 3. * K0) / 4.;
0373     _Xeq[i][1] = (-_difs[12] + 3. * K0) / 4.;
0374   }
0375 
0376   i = 13;  //  i = DTBtiChipEQMAP->index("5364A");  --> 5L3R6L4L
0377   if (PTMS[i]) {
0378     _Keq[i][0] = -_sums[9] + 2. * K0;
0379     _Keq[i][1] = _sums[10];
0380     _Keq[i][2] = -_difs[13];
0381     _Keq[i][3] = (_difs[16] / 2.) + K0 + 0.01;
0382     _Keq[i][4] = (_sums[8] / 2. + 0.01);
0383     //_Keq[i][5] = -(_difs[12]/3.)  +  2.*K0/3.;
0384     _Keq[i][5] = ST23 + reSum23(RE23, int(fmod(double(-_difs[12]), 3.))) + int((double(-_difs[12]) / 3.));  //eq. AD
0385 
0386     _Xeq[i][0] = (_difs[10] + 3. * K0) / 4.;
0387     _Xeq[i][1] = (_sums[12] + K0) / 4.;
0388   }
0389 
0390   i = 14;  //  i = DTBtiChipEQMAP->index("5364B");  --> 5L3R6L4R
0391   if (PTMS[i]) {
0392     _Keq[i][0] = -_sums[9] + 2. * K0;
0393     _Keq[i][1] = _sums[10];
0394     _Keq[i][2] = -_sums[13] + 2. * K0;
0395     _Keq[i][3] = (_difs[16] / 2.) + K0 + 0.01;
0396     _Keq[i][4] = -(_difs[8] / 2.) + K0 + 0.01;
0397     //_Keq[i][5] = -(_sums[12]/3.)  + 4.*K0/3.;
0398     _Keq[i][5] = ST43 + reSum(RE43, int(fmod(double(-_sums[12]), 3.))) + int((double(-_sums[12]) / 3.));
0399 
0400     _Xeq[i][0] = (_difs[10] + 3. * K0) / 4.;
0401     _Xeq[i][1] = (_difs[12] + 3. * K0) / 4.;
0402   }
0403 
0404   i = 15;  //  i = DTBtiChipEQMAP->index("5364C");  --> 5R3R6L4L
0405   if (PTMS[i]) {
0406     _Keq[i][0] = _difs[9];
0407     _Keq[i][1] = (_sums[10]);
0408     _Keq[i][2] = -_difs[13];
0409     _Keq[i][3] = (_sums[16] / 2. + 0.01);
0410     _Keq[i][4] = (_sums[8] / 2. + 0.01);
0411     _Keq[i][5] = (_sums[12] / 3.) + 0.51;
0412 
0413     _Xeq[i][0] = (_difs[10] + 3. * K0) / 4.;
0414     _Xeq[i][1] = (-_difs[12] + 3. * K0) / 4.;
0415   }
0416 
0417   i = 16;  //  i = DTBtiChipEQMAP->index("5364D");  --> 5R3R6L4R
0418   if (PTMS[i]) {
0419     _Keq[i][0] = _difs[9];
0420     _Keq[i][1] = _sums[10];
0421     _Keq[i][2] = -_sums[13] + 2. * K0;
0422     _Keq[i][3] = (_sums[16] / 2. + 0.01);
0423     _Keq[i][4] = -(_difs[8] / 2.) + K0 + 0.01;
0424     //_Keq[i][5] =  (_difs[12]/3.) + 2.*K0/3.;
0425     _Keq[i][5] = ST23 + reSum23(RE23, int(fmod(double(_difs[12]), 3.))) + int((double(_difs[12]) / 3.));  //eq. AD
0426 
0427     _Xeq[i][0] = (_difs[10] + 3. * K0) / 4.;
0428     _Xeq[i][1] = (-_sums[12] + 5. * K0) / 4.;
0429   }
0430 
0431   i = 17;  //  i = DTBtiChipEQMAP->index("5368A");  --> 5L3R6L8L
0432   if (PTMS[i]) {
0433     _Keq[i][0] = -_sums[9] + 2. * K0;
0434     _Keq[i][1] = _sums[10];
0435     _Keq[i][2] = _difs[20] + 2. * K0;
0436     _Keq[i][3] = (_difs[16] / 2.) + K0 + 0.01;
0437     _Keq[i][4] = (_sums[11] / 2.) + K0 + 0.01;
0438     //_Keq[i][5] =  (_difs[18]/3.)  + 4.*K0/3.;
0439     _Keq[i][5] = ST43 + reSum(RE43, int(fmod(double(_difs[18]), 3.))) + int((double(_difs[18]) / 3.));  //eq. AD
0440 
0441     _Xeq[i][0] = (_difs[10] + 3. * K0) / 4.;
0442     _Xeq[i][1] = (_sums[18] + 3. * K0) / 4.;
0443   }
0444 
0445   i = 18;  //  i = DTBtiChipEQMAP->index("5368B");  --> 5L3R6R8L
0446   if (PTMS[i]) {
0447     _Keq[i][0] = -_sums[9] + 2. * K0;
0448     _Keq[i][1] = -_difs[10] + 2. * K0;
0449     _Keq[i][2] = _sums[20];
0450     _Keq[i][3] = -(_sums[16] / 2.) + 2. * K0 + 0.01;
0451     _Keq[i][4] = (_sums[11] / 2.) + K0 + 0.01;
0452     //_Keq[i][5] =  (_difs[18]/3.)  + 4.*K0/3.;
0453     _Keq[i][5] = ST43 + reSum(RE43, int(fmod(double(_difs[18]), 3.))) + int((double(_difs[18]) / 3.));  //eq. AD
0454 
0455     _Xeq[i][0] = (-_sums[10] + 5. * K0) / 4.;
0456     _Xeq[i][1] = (_sums[18] + 3. * K0) / 4.;
0457   }
0458 
0459   i = 19;  //  i = DTBtiChipEQMAP->index("5368C");  --> 5L3R6R8R
0460   if (PTMS[i]) {
0461     _Keq[i][0] = -(_sums[9]) + 2. * K0;
0462     _Keq[i][1] = -_difs[10] + 2. * K0;
0463     _Keq[i][2] = -_difs[20] + 2. * K0;
0464     _Keq[i][3] = -(_sums[16] / 2.) + 2. * K0 + 0.01;
0465     _Keq[i][4] = -(_difs[11] / 2.) + 2. * K0 + 0.01;
0466     //_Keq[i][5] = -(_sums[18]/3.)  + 2.*K0 + 0.51;
0467     _Keq[i][5] = ST2 + reSum23(0, int(fmod(double(-_sums[18]), 3.))) + int((double(-_sums[18]) / 3.));
0468 
0469     _Xeq[i][0] = (-_sums[10] + 5. * K0) / 4.;
0470     _Xeq[i][1] = (-_difs[18] + 5. * K0) / 4.;
0471   }
0472 
0473   i = 20;  //  i = DTBtiChipEQMAP->index("5764A");  --> 5R7L6L4R
0474   if (PTMS[i]) {
0475     _Keq[i][0] = _sums[17];
0476     _Keq[i][1] = -_difs[19];
0477     _Keq[i][2] = -_sums[13] + 2. * K0;
0478     _Keq[i][3] = (_sums[16] / 2. + 0.01);
0479     _Keq[i][4] = -(_sums[14] / 2.) + K0 + 0.01;
0480     //_Keq[i][5] =  (_difs[12]/3.)  + 2.*K0/3.;
0481     _Keq[i][5] = ST23 + reSum23(RE23, int(fmod(double(_difs[12]), 3.))) + int((double(_difs[12]) / 3.));  //eq. AD
0482 
0483     _Xeq[i][0] = (_sums[19] + 3. * K0) / 4.;
0484     _Xeq[i][1] = (-_sums[12] + 5. * K0) / 4.;
0485   }
0486 
0487   i = 21;  //  i = DTBtiChipEQMAP->index("5764B");  --> 5R7L6R4R
0488   if (PTMS[i]) {
0489     _Keq[i][0] = _sums[17];
0490     _Keq[i][1] = -_sums[19] + 2. * K0;
0491     _Keq[i][2] = _difs[13];
0492     _Keq[i][3] = -(_difs[16] / 2.) + K0 + 0.01;
0493     _Keq[i][4] = -(_sums[14] / 2.) + K0 + 0.01;
0494     //_Keq[i][5] =  (_difs[12]/3.) + 2.*K0/3.;
0495     _Keq[i][5] = ST23 + reSum23(RE23, int(fmod(double(_difs[12]), 3.))) + int((double(_difs[12]) / 3.));  //eq. AD
0496 
0497     _Xeq[i][0] = (_difs[19] + 5. * K0) / 4.;
0498     _Xeq[i][1] = (-_sums[12] + 5. * K0) / 4.;
0499   }
0500 
0501   i = 22;  //  i = DTBtiChipEQMAP->index("5764C");  --> 5R7L6L4L
0502   if (PTMS[i]) {
0503     _Keq[i][0] = (_sums[17]);
0504     _Keq[i][1] = -_difs[19];
0505     _Keq[i][2] = -_difs[13];
0506     _Keq[i][3] = (_sums[16] / 2. + 0.01);
0507     _Keq[i][4] = -(_difs[14] / 2.) + 0.01;
0508     _Keq[i][5] = (_sums[12] / 3.) + 0.51;
0509 
0510     _Xeq[i][0] = (_sums[19] + 3. * K0) / 4.;
0511     _Xeq[i][1] = (-_difs[12] + 3. * K0) / 4.;
0512   }
0513 
0514   i = 23;  //  i = DTBtiChipEQMAP->index("9764A");  --> 9L7L6L4R
0515   if (PTMS[i]) {
0516     _Keq[i][0] = -_difs[23];
0517     _Keq[i][1] = -_difs[19];
0518     _Keq[i][2] = -(_sums[13]) + 2. * K0;
0519     _Keq[i][3] = -(_difs[21] / 2.) + 0.01;
0520     _Keq[i][4] = -(_sums[14] / 2.) + K0 + 0.01;
0521     //_Keq[i][5] = -(_sums[15]/3.)  + 2.*K0/3.;
0522     _Keq[i][5] = ST23 + reSum23(RE23, int(fmod(double(-_sums[15]), 3.))) + int((double(-_sums[15]) / 3.));  //eq. AD
0523 
0524     _Xeq[i][0] = (_sums[19] + 3. * K0) / 4.;
0525     _Xeq[i][1] = (_difs[15] + 5. * K0) / 4.;
0526   }
0527 
0528   i = 24;  //  i = DTBtiChipEQMAP->index("9764B");  --> 9L7L6R4R
0529   if (PTMS[i]) {
0530     _Keq[i][0] = -_difs[23];
0531     _Keq[i][1] = -(_sums[19]) + 2. * K0;
0532     _Keq[i][2] = _difs[13];
0533     _Keq[i][3] = -(_sums[21] / 2.) + K0 + 0.01;
0534     _Keq[i][4] = -(_sums[14] / 2.) + K0 + 0.01;
0535     //_Keq[i][5] = -(_sums[15]/3.)    + 2.*K0/3.;
0536     _Keq[i][5] = ST23 + reSum23(RE23, int(fmod(double(-_sums[15]), 3.))) + int((double(-_sums[15]) / 3.));  //eq. AD
0537 
0538     _Xeq[i][0] = (_difs[19] + 5. * K0) / 4.;
0539     _Xeq[i][1] = (_difs[15] + 5. * K0) / 4.;
0540   }
0541 
0542   i = 25;  //  i = DTBtiChipEQMAP->index("9764C");  --> 9L7R6R4R
0543   if (PTMS[i]) {
0544     _Keq[i][0] = -(_sums[23]) + 2. * K0;
0545     _Keq[i][1] = _difs[19];
0546     _Keq[i][2] = _difs[13];
0547     _Keq[i][3] = -(_sums[21] / 2.) + K0 + 0.01;
0548     _Keq[i][4] = (_difs[14] / 2.) + 0.01;
0549     //_Keq[i][5] = -(_sums[15]/3.)    + 2.*K0/3.;
0550     _Keq[i][5] = ST23 + reSum23(RE23, int(fmod(double(-_sums[15]), 3.))) + int((double(-_sums[15]) / 3.));  //eq. AD
0551 
0552     _Xeq[i][0] = (-_sums[19] + 7. * K0) / 4.;
0553     _Xeq[i][1] = (_difs[15] + 5. * K0) / 4.;
0554   }
0555 
0556   i = 26;  //  int i = DTBtiChipEQMAP->index("5768A") --> 5L7L6R8L
0557   if (PTMS[i]) {
0558     _Keq[i][0] = _difs[17] + 2. * K0;
0559     _Keq[i][1] = -_sums[19] + 2. * K0;
0560     _Keq[i][2] = _sums[20];
0561     _Keq[i][3] = -(_sums[16] / 2.) + 2. * K0 + 0.01;
0562     _Keq[i][4] = (_difs[22] / 2.) + K0 + 0.01;
0563     //_Keq[i][5] =  (_difs[18]/3.)  + 4.*K0/3.;
0564     _Keq[i][5] = ST43 + reSum(RE43, int(fmod(double(_difs[18]), 3.))) + int((double(_difs[18]) / 3.));  //eq. AD
0565 
0566     _Xeq[i][0] = (_difs[19] + 5. * K0) / 4.;
0567     _Xeq[i][1] = (_sums[18] + 3. * K0) / 4.;
0568   }
0569 
0570   i = 27;  //  i = DTBtiChipEQMAP->index("5768B");  --> 5L7L6R8R
0571   if (PTMS[i]) {
0572     _Keq[i][0] = _difs[17] + 2. * K0;
0573     _Keq[i][1] = -(_sums[19]) + 2. * K0;
0574     _Keq[i][2] = -_difs[20] + 2. * K0;
0575     _Keq[i][3] = -(_sums[16] / 2.) + 2. * K0 + 0.01;
0576     _Keq[i][4] = -(_sums[22] / 2.) + 2. * K0 + 0.01;
0577     //_Keq[i][5] = -(_sums[18]/3.)  + 2.*K0 + 0.51;
0578     _Keq[i][5] = ST2 + reSum23(0, int(fmod(double(-_sums[18]), 3.))) + int((double(-_sums[18]) / 3.));
0579 
0580     _Xeq[i][0] = (_difs[19] + 5. * K0) / 4.;
0581     _Xeq[i][1] = (-_difs[18] + 5. * K0) / 4.;
0582   }
0583 
0584   i = 28;  //  i = DTBtiChipEQMAP->index("5768C");  --> 5R7L6R8L
0585   if (PTMS[i]) {
0586     _Keq[i][0] = _sums[17];
0587     _Keq[i][1] = -_sums[19] + 2. * K0;
0588     _Keq[i][2] = _sums[20];
0589     _Keq[i][3] = -(_difs[16] / 2.) + K0 + 0.01;
0590     _Keq[i][4] = (_difs[22] / 2.) + K0 + 0.01;
0591     //_Keq[i][5] =  (_sums[18]/3.)  + 2.*K0/3.;
0592     _Keq[i][5] = ST23 + reSum23(RE23, int(fmod(double(_sums[18]), 3.))) + int((double(_sums[18]) / 3.));  //eq. AD
0593 
0594     _Xeq[i][0] = (_difs[19] + 5. * K0) / 4.;
0595     _Xeq[i][1] = (_difs[18] + 5. * K0) / 4.;
0596   }
0597 
0598   i = 29;  //  i = DTBtiChipEQMAP->index("5768D");  --> 5R7L6R8R
0599   if (PTMS[i]) {
0600     _Keq[i][0] = _sums[17];
0601     _Keq[i][1] = -_sums[19] + 2. * K0;
0602     _Keq[i][2] = -_difs[20] + 2. * K0;
0603     _Keq[i][3] = -(_difs[16] / 2.) + K0 + 0.01;
0604     _Keq[i][4] = -(_sums[22] / 2.) + 2. * K0 + 0.01;
0605     //_Keq[i][5] = -(_difs[18]/3.)  + 4.*K0/3. ;
0606     _Keq[i][5] = ST43 + reSum(RE43, int(fmod(double(-_difs[18]), 3.))) + int((double(-_difs[18]) / 3.));  //eq. AD
0607 
0608     _Xeq[i][0] = (_difs[19] + 5. * K0) / 4.;
0609     _Xeq[i][1] = (-_sums[18] + 7. * K0) / 4.;
0610   }
0611 
0612   i = 30;  //  9768A  --> 9L7L6R8L
0613   if (PTMS[i]) {
0614     _Keq[i][0] = -_difs[23];
0615     _Keq[i][1] = -_sums[19] + 2. * K0;
0616     _Keq[i][2] = _sums[20];
0617     _Keq[i][3] = -(_sums[21] / 2.) + K0 + 0.01;
0618     _Keq[i][4] = (_difs[22] / 2.) + K0 + 0.01;
0619     //_Keq[i][5] = -(_difs[24]/3.)  + 2.*K0/3. ;
0620     _Keq[i][5] = ST23 + reSum23(RE23, int(fmod(double(-_difs[24]), 3.))) + int((double(-_difs[24]) / 3.));  //eq. AD
0621 
0622     _Xeq[i][0] = (_difs[19] + 5. * K0) / 4.;
0623     _Xeq[i][1] = (_sums[24] + 5. * K0) / 4.;
0624   }
0625 
0626   i = 31;  //  9768B  --> 9L7R6R8L
0627   if (PTMS[i]) {
0628     _Keq[i][0] = -_sums[23] + 2. * K0;
0629     _Keq[i][1] = _difs[19];
0630     _Keq[i][2] = _sums[20];
0631     _Keq[i][3] = -(_sums[21] / 2.) + K0 + 0.01;
0632     _Keq[i][4] = (_sums[22] / 2.) + 0.01;
0633     //_Keq[i][5] = -(_difs[24]/3.)  + 2.*K0/3.;
0634     _Keq[i][5] = ST23 + reSum23(RE23, int(fmod(double(-_difs[24]), 3.))) + int((double(-_difs[24]) / 3.));  //eq. AD
0635 
0636     _Xeq[i][0] = (-_sums[19] + 7. * K0) / 4.;
0637     _Xeq[i][1] = (_sums[24] + 5. * K0) / 4.;
0638   }
0639 
0640   // debugging
0641   if (config()->debug() > 3) {
0642     cout << endl << " Step: " << currentStep() << endl;
0643     for (i = 0; i < 32; i++) {
0644       if (PTMS[i]) {
0645         cout << "K Equation " << i << " --> ";
0646         int j = 0;
0647         for (j = 0; j < 6; j++) {
0648           cout << _Keq[i][j] << " ";
0649         }
0650         cout << endl;
0651         cout << "X Equation " << i << " --> ";
0652         for (j = 0; j < 2; j++) {
0653           cout << _Xeq[i][j] << " ";
0654         }
0655         if (i == 0) {
0656           cout << _XeqAB_patt0 << " " << _XeqCD_patt0 << " ";
0657           cout << _XeqAC_patt0 << " " << _XeqBD_patt0 << " ";
0658         }
0659         cout << endl;
0660       }
0661     }
0662   }
0663   // end debugging
0664 }