00001
00002
00003
00004
00005 #include <iostream>
00006 #include <assert.h>
00007
00008
00009 #include "EMCdsm2Tree.h"
00010 #include "BEdsm2.h"
00011
00012
00013
00014
00015 EMCdsm2Tree::EMCdsm2Tree(const char *nameX) {
00016 mYear=-999;
00017 BEsumthr8bit=1000;
00018 EEsumthr6bit=1000;
00019 JPSIthrSelc2bit=1000;
00020 BarreSide2bit=1000;
00021 EtotThr8bit=1000;
00022
00023 be2=new BEdsm2[Nbe2];
00024 int i=0;
00025 for(i=0; i<Nbe2; i++) be2[i].setYear(-999);
00026 clear();
00027 strncpy(name,nameX,mxTxt);
00028 }
00029
00030
00031
00032 EMCdsm2Tree::~EMCdsm2Tree() {
00033
00034 }
00035
00036
00037
00038 void
00039 EMCdsm2Tree::setYear(int x, int BEsumthr, int EEsumthr, int JPSIthrSelc, int BarreSide, int EtotThr) {
00040 mYear=x;
00041 BEsumthr8bit = BEsumthr;
00042 EEsumthr6bit = EEsumthr;
00043 JPSIthrSelc2bit = JPSIthrSelc;
00044 BarreSide2bit = BarreSide;
00045 EtotThr8bit = EtotThr;
00046 int i;
00047 for (i=0;i<Nbe2;i++) be2[i].setYear(mYear);
00048 }
00049
00050
00051
00052 void
00053 EMCdsm2Tree::clear() {
00054 int i;
00055 for (i=0;i<Nbe2;i++) be2[i].clear();
00056 OutEndcapJP2bit=0;
00057 OutEndcapHT2bit=0;
00058 OutEndcapSum1bit=0;
00059 OutEndcapHTTP1bit=0;
00060 OutEndcapTP1bit=0;
00061 OutBarreJP2bit=0;
00062 OutBarreHT2bit=0;
00063 OutBarreSum1bit=0;
00064 OutBarreJPSi1bit=0;
00065 OutBarreHTTP1bit=0;
00066 OutBarreTP1bit=0;
00067 OutEtot1bit=0;
00068
00069 intBarreSum=0;
00070 intEndcapSum=0;
00071 intEtot=0;
00072
00073
00074 }
00075
00076
00077
00078
00079 void
00080 EMCdsm2Tree::setInput16bit(int ibrd, int ch, ushort val){
00081
00082 assert(ibrd>=0 && ibrd<Nbe2);
00083 be2[ibrd].setWord(ch,val);
00084
00085 }
00086
00087
00088
00089
00090
00091 void
00092 EMCdsm2Tree::compute() {
00093
00094
00095
00096
00097 intEndcapSum = getInpEsum5bit(0,0) + getInpEsum5bit(0,1);
00098 if ( intEndcapSum > EEsumthr6bit ) OutEndcapSum1bit = 1;
00099 else OutEndcapSum1bit = 0;
00100
00101 int i;
00102 for (i=1; i<Nbe2; i++){
00103 intBarreSum = intBarreSum + getInpEsum5bit(i,0) + getInpEsum5bit(i,1);
00104 }
00105 if ( intBarreSum > BEsumthr8bit ) OutBarreSum1bit = 1;
00106 else OutBarreSum1bit = 0;
00107
00108 intEtot = intEndcapSum + intBarreSum;
00109 if ( intEtot > EtotThr8bit ) OutEtot1bit = 1;
00110 else OutEtot1bit = 0;
00111
00112 int j,k;
00113 for ( j=0; j<Nbe2; j++){
00114 for( k=0; k<Nbe2Cha; k++){
00115 if ( j==0 ){
00116 if ( OutEndcapJP2bit <= getInpJP2bit(j,k) ) OutEndcapJP2bit = getInpJP2bit(j,k) ;
00117 if ( OutEndcapHT2bit <= getInpHT2bit(j,k) ) OutEndcapHT2bit = getInpHT2bit(j,k);
00118 if ( OutEndcapHTTP1bit <= getInpHTTP1bit(j,k) ) OutEndcapHTTP1bit = getInpHTTP1bit(j,k);
00119 if ( OutEndcapTP1bit <= getInpTP1bit(j,k) ) OutEndcapTP1bit = getInpTP1bit(j,k);
00120 }
00121 if( j>0 ){
00122
00123 if ( OutBarreJP2bit <= getInpJP2bit(j,k) ) OutBarreJP2bit = getInpJP2bit(j,k) ;
00124 if ( OutBarreHT2bit <= getInpHT2bit(j,k) ) OutBarreHT2bit = getInpHT2bit(j,k);
00125 if ( OutBarreHT2bit <= getInpHT2bit_2(j,k) ) OutBarreHT2bit = getInpHT2bit_2(j,k);
00126 if ( OutBarreHTTP1bit <= getInpHTTP1bit(j,k) ) OutBarreHTTP1bit = getInpHTTP1bit(j,k);
00127 if ( OutBarreTP1bit <= getInpTP1bit(j,k) ) OutBarreTP1bit = getInpTP1bit(j,k);
00128
00129 }
00130 }
00131 }
00132
00133 int BarreEast_HT_JPSI[6]={0,0,0,0,0,0};
00134 int BarreWest_HT_JPSI[6]={0,0,0,0,0,0};
00135
00136 BarreEast_HT_JPSI[0]=getInpHT2bit(1,1);
00137 BarreEast_HT_JPSI[1]=getInpHT2bit_2(1,1);
00138 BarreEast_HT_JPSI[2]=getInpHT2bit(2,0);
00139 BarreEast_HT_JPSI[3]=getInpHT2bit_2(2,0);
00140 BarreEast_HT_JPSI[4]=getInpHT2bit(1,0);
00141 BarreEast_HT_JPSI[5]=getInpHT2bit_2(1,0);
00142
00143 BarreWest_HT_JPSI[0]=getInpHT2bit(3,1);
00144 BarreWest_HT_JPSI[1]=getInpHT2bit_2(3,1);
00145 BarreWest_HT_JPSI[2]=getInpHT2bit(2,1);
00146 BarreWest_HT_JPSI[3]=getInpHT2bit_2(2,1);
00147 BarreWest_HT_JPSI[4]=getInpHT2bit(3,0);
00148 BarreWest_HT_JPSI[5]=getInpHT2bit_2(3,0);
00149
00150 int l;
00151 for ( l=0; l<6; l++){
00152 if ( BarreEast_HT_JPSI[l] > JPSIthrSelc2bit ) BarreEast_HT_JPSI[l]=1;
00153 else BarreEast_HT_JPSI[l]=0;
00154
00155 if ( BarreWest_HT_JPSI[l] > JPSIthrSelc2bit ) BarreWest_HT_JPSI[l]=1;
00156 else BarreWest_HT_JPSI[l]=0;
00157 }
00158
00159 if ( BarreEast_HT_JPSI[0] && ( BarreEast_HT_JPSI[2] || BarreEast_HT_JPSI[3] ||BarreEast_HT_JPSI[4] )) OutBarreJPSi1bit=1;
00160
00161 if ( BarreEast_HT_JPSI[1] && ( BarreEast_HT_JPSI[3] || BarreEast_HT_JPSI[4] ||BarreEast_HT_JPSI[5] )) OutBarreJPSi1bit=1;
00162
00163 if ( BarreEast_HT_JPSI[2] && ( BarreEast_HT_JPSI[4] || BarreEast_HT_JPSI[5] )) OutBarreJPSi1bit=1;
00164
00165 if ( BarreEast_HT_JPSI[3] && BarreEast_HT_JPSI[5] ) OutBarreJPSi1bit=1;
00166
00167 if ( BarreWest_HT_JPSI[0] && ( BarreWest_HT_JPSI[2] || BarreWest_HT_JPSI[3] ||BarreWest_HT_JPSI[4] )) OutBarreJPSi1bit=1;
00168
00169 if ( BarreWest_HT_JPSI[1] && ( BarreWest_HT_JPSI[3] || BarreWest_HT_JPSI[4] ||BarreWest_HT_JPSI[5] )) OutBarreJPSi1bit=1;
00170
00171 if ( BarreWest_HT_JPSI[2] && ( BarreWest_HT_JPSI[4] || BarreWest_HT_JPSI[5] )) OutBarreJPSi1bit=1;
00172
00173 if ( BarreWest_HT_JPSI[3] && BarreWest_HT_JPSI[5] ) OutBarreJPSi1bit=1;
00174 }
00175
00176
00177
00178 int
00179 EMCdsm2Tree::getInpHT2bit(int ibr, int ch) const {
00180 assert(ibr>=0 && ibr<Nbe2);
00181 return be2[ibr].getInpHT2bit(ch);
00182 }
00183
00184
00185
00186 int
00187 EMCdsm2Tree::getInpHT2bit_2(int ibr, int ch) const {
00188 assert(ibr>=0 && ibr<Nbe2);
00189 return be2[ibr].getInpHT2bit_2(ch);
00190 }
00191
00192
00193
00194 int
00195 EMCdsm2Tree::getInpJP2bit(int ibr, int ch) const {
00196 assert(ibr>=0 && ibr<Nbe2);
00197 return be2[ibr].getInpJP2bit(ch);
00198 }
00199
00200
00201
00202
00203 int
00204 EMCdsm2Tree::getInpTP1bit(int ibr, int ch) const {
00205 assert(ibr>=0 && ibr<Nbe2);
00206 return be2[ibr].getInpTP1bit(ch);
00207 }
00208
00209
00210
00211 int
00212 EMCdsm2Tree::getInpHTTP1bit(int ibr, int ch) const {
00213 assert(ibr>=0 && ibr<Nbe2);
00214 return be2[ibr].getInpHTTP1bit(ch);
00215 }
00216
00217
00218
00219 int
00220 EMCdsm2Tree::getInpEsum5bit(int ibr, int ch) const {
00221 assert(ibr>=0 && ibr<Nbe2);
00222 return be2[ibr].getInpEsum5bit(ch);
00223 }
00224
00225
00226
00227
00228
00229 void
00230 EMCdsm2Tree::print( int k) const {
00231 printf("EMCdsm2Tree(%s) , year=%d \n",name,mYear);
00232
00233 printf("\n\n----------- level-2 -----------------\n ");
00234 int i;
00235 for (i=0;i<Nbe2;i++) {
00236 if(i==0) printf("\nEndcap board=1 ");
00237 else printf("\nBarrel board=%d ",i);
00238 be2[i].print();
00239 if(k==0) break;
00240 }
00241 }
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266