00001
00002
00003
00004
00005
00006
00007
00008 #ifndef W_EVENT_2011_HH
00009 #define W_EVENT_2011_HH
00010
00011 #include <TVector3.h>
00012 #include <TH1.h>
00013
00014 #include <StTriggerUtilities/L2Emulator/L2wAlgo/L2wResult2009.h>
00015
00016 #include <StMuDSTMaker/COMMON/StMuTrack.h>
00017 #include "WanaConst.h"
00018
00019
00020 class WeveCluster {
00021 public:
00022 float energy,ET, adcSum;
00023 int nTower;
00024 int iEta, iPhi;
00025
00026 TVector3 position;
00027 WeveCluster() {clear();}
00028
00029 void clear() { position=TVector3(0,0,0);
00030 ET=energy=adcSum=0; nTower=0; iEta=iPhi=999;
00031
00032 }
00033 void print( int flag=0){
00034 printf(" Cluster ET=%.1f E=%.1f GeV, sumAdc=%.0f nTw=%d iEta=%d, iPhi=%d XYZ(%.0f,%.0f,%.0f)cm\n",ET,energy,adcSum,nTower,iEta, iPhi,position.x(),position.y(),position.z());}
00035
00036 private:
00037 protected:
00038 ClassDef(WeveCluster,1);
00039
00040 };
00041
00042
00043
00044
00045 class WevePointTower {
00046 public:
00047 TVector3 R;
00048 TVector3 Rglob;
00049 int id;
00050 int iEta, iPhi;
00051 void clear() { id=0; R=TVector3(0,0,0); Rglob=TVector3(0,0,0); iEta=iPhi=9999; }
00052 void print( int flag=0){
00053 printf(" pointed tower ID=%d; L2index: iEta=%d iPhi=%d; XYZ=(%.0f,%.0f,%.0f)cm\n",
00054 id,iEta, iPhi, R.x(), R.y(), R.z());
00055 }
00056
00057 private:
00058 protected:
00059 ClassDef(WevePointTower,1);
00060
00061 };
00062
00063
00064 class WeveEleTrack {
00065 public:
00066 int isMatch2Cl;
00067 WevePointTower pointTower;
00068 const StMuTrack *glMuTrack, *prMuTrack;
00069 WeveCluster cluster,cl4x4;
00070 TVector3 primP;
00071 float nearTpcPT, nearEmcET, nearBtowET, nearEtowET, smallNearTpcPT;
00072 float awayTpcPT, awayEmcET, awayBtowET, awayEtowET;
00073 float nearTotET, awayTotET, nearTotET_noEEMC, awayTotET_noEEMC;
00074
00075 TVector3 ptBalance,ptBalance_noEEMC;
00076 float sPtBalance,sPtBalance_noEEMC;
00077
00078 TVector3 hadronicRecoil;
00079
00080
00081 int hitSector; int esmdGlobStrip[mxEsmdPlane];
00082 float esmdShower[mxEsmdPlane][41];
00083 float esmdDca[mxEsmdPlane]; float esmdDcaGlob[mxEsmdPlane];
00084 float esmdE[mxEsmdPlane]; int esmdNhit[mxEsmdPlane];
00085 float esmdShowerCentroid[mxEsmdPlane]; float esmdShowerWidth[mxEsmdPlane];
00086 TVector3 esmdXPcentroid;
00087
00088 WeveEleTrack() { clear();}
00089
00090 void clear() { pointTower.clear();
00091 cluster.clear();cl4x4.clear(); isMatch2Cl=false; primP=TVector3(0,0,0);
00092 prMuTrack=glMuTrack=0;
00093 awayTpcPT=nearTpcPT=nearTotET=awayTotET=nearEmcET=awayEmcET=nearBtowET=awayBtowET=nearEtowET=awayEtowET=smallNearTpcPT=nearTotET_noEEMC=awayTotET_noEEMC=0;
00094
00095 ptBalance=TVector3(0,0,0); ptBalance_noEEMC=TVector3(0,0,0);
00096 sPtBalance=sPtBalance_noEEMC=0;
00097
00098 hadronicRecoil=TVector3(0,0,0);
00099
00100 memset(esmdGlobStrip,-999,sizeof(esmdGlobStrip));
00101 memset(esmdDca,-999.,sizeof(esmdDca)); memset(esmdDcaGlob,-999.,sizeof(esmdDcaGlob)); memset(esmdE,0.,sizeof(esmdE)); memset(esmdNhit,0,sizeof(esmdNhit)); memset(esmdShowerCentroid,999.,sizeof(esmdShowerCentroid)); memset(esmdShowerWidth,999.,sizeof(esmdShowerWidth));
00102 esmdXPcentroid=TVector3(0,0,0);
00103
00104 }
00105
00106 void print( int flag=0){
00107 if(prMuTrack==0) { printf(" Track NULL pointer???\n"); return;}
00108 printf(" Track glPT=%.1f GeV/c isMatch2Cl=%d, nearTotET=%.1f, awayTotET=%.1f primPT=%.1f\n",
00109 glMuTrack->pt(),isMatch2Cl,nearTotET, awayTotET,primP.Pt());
00110 pointTower.print(flag);
00111 cluster.print(flag);
00112 TVector3 D=pointTower.R-cluster.position;
00113 printf(" XYZ(track-cluster): |3D dist|=%.1fcm delZ=%.1fcm\n",D.Mag(),D.z());
00114 printf(" 4x4 :"); cl4x4.print(flag);
00115 printf(" nearET/GeV: TPC=%.1f Emc=%.1f (BTOW=%.1f ETOW=%.1f) sum=%.1f\n",nearTpcPT,nearEmcET,nearBtowET,nearEtowET,nearTotET);
00116 printf(" awayET/GeV: TPC=%.1f Emc=%.1f (BTOW=%.1f ETOW=%.1f) sum=%.1f\n",awayTpcPT,awayEmcET,awayBtowET,awayEtowET,awayTotET);
00117 }
00118
00119 private:
00120 protected:
00121 ClassDef(WeveEleTrack,1);
00122
00123 };
00124
00125
00126 class WeveVertex {
00127 public:
00128 int id;
00129 float z;
00130 float rank,funnyRank;
00131 int nEEMCMatch;
00132 vector <WeveEleTrack> eleTrack;
00133 vector <StMuTrack*> prTrList;
00134
00135 void clear() {
00136 id=-999; z=-999; funnyRank=-9999; rank=-9999;
00137 eleTrack.clear(); nEEMCMatch=-999;
00138 }
00139
00140 void print( int flag=0){
00141 printf(" Vertex ID=%d Z=%.1f cm nTrack=%d\n",id,z, eleTrack.size());
00142 for(uint i=0;i< eleTrack.size();i++)
00143 eleTrack[i].print();
00144 }
00145
00146 private:
00147 protected:
00148 ClassDef(WeveVertex,1);
00149
00150 };
00151
00152
00153 class WeveBEMC {
00154 public:
00155
00156 int tileIn[mxBTile];
00157 float adcTile[mxBTile][mxBtow];
00158 float eneTile[mxBTile][mxBtow];
00159 int statTile[mxBTile][mxBtow];
00160 float maxAdc;
00161
00162
00163 float adcBsmd[mxBSmd][mxBStrips];
00164 int statBsmd[mxBSmd][mxBStrips];
00165
00166 void clear() {
00167 memset(adcTile,0,sizeof(adcTile));
00168 memset(eneTile,0,sizeof(eneTile));
00169 memset(statTile,-1,sizeof(statTile));
00170 memset(tileIn,0,sizeof(tileIn));
00171 memset(adcBsmd,0,sizeof(adcBsmd));
00172 memset(statBsmd,-1,sizeof(statBsmd));
00173 maxAdc=0;
00174
00175 }
00176
00177 void print( int flag=0){
00178 printf(" BTOW tower ADC>500 list: ");
00179 for(int i=0;i< mxBtow;i++) {
00180 if(adcTile[kBTow][i]<500) continue;
00181 int id=i+1;
00182 printf("id=%d adc=%.1f ene=%.1f; ",id,adcTile[kBTow][i],eneTile[kBTow][i]);
00183 } printf("\n");
00184
00185 printf(" BSMDE tower ADC>200 list: ");
00186 for(int i=0;i< mxBStrips;i++) {
00187 if(adcBsmd[ kBSE][i]<200) continue;
00188 int id=i+1;
00189 int module= 1+i/150;
00190 printf("id=%d mod=%d adc=%.1f ; ",id,module,adcBsmd[ kBSE][i]);
00191 } printf("\n");
00192
00193 if(flag&1) {
00194 for(int i=0;i<120;i++) {
00195 int id=7+i*40;
00196 if(i%10==0) printf("\n softID=%4d adc format BTOW:BPRS= ",id);
00197 printf("%.0f : %.0f, ", adcTile[kBTow][id-1], adcTile[kBPrs][id-1]);
00198 }
00199 printf("\n");
00200 }
00201 }
00202
00203 private:
00204 protected:
00205 ClassDef(WeveBEMC,1);
00206
00207 };
00208
00209
00210 class WeveETOW {
00211 public:
00212
00213
00214 int etowIn;
00215 float adc[mxEtowSec*mxEtowSub][mxEtowEta];
00216 float ene[mxEtowSec*mxEtowSub][mxEtowEta];
00217 int stat[mxEtowSec*mxEtowSub][mxEtowEta];
00218 float maxAdc;
00219
00220 void clear() {
00221 memset(adc,0,sizeof(adc));
00222 memset(ene,0,sizeof(ene));
00223 memset(stat,-1,sizeof(stat));
00224 maxAdc=0;
00225 }
00226
00227 private:
00228 protected:
00229 ClassDef(WeveETOW,1);
00230
00231 };
00232
00233
00234 class WeveEPRS {
00235 public:
00236
00237
00238 int eprsIn;
00239 float adc[mxEtowSec*mxEtowSub][mxEtowEta][mxPrs];
00240 float ene[mxEtowSec*mxEtowSub][mxEtowEta][mxPrs];
00241 int stat[mxEtowSec*mxEtowSub][mxEtowEta][mxPrs];
00242
00243 void clear() {
00244 memset(adc,0,sizeof(adc));
00245 memset(ene,0,sizeof(ene));
00246 memset(stat,-1,sizeof(stat));
00247 }
00248
00249 private:
00250 protected:
00251 ClassDef(WeveEPRS,1);
00252
00253 };
00254
00255
00256 class WeveESMD {
00257 public:
00258
00259
00260 int esmdIn;
00261 float adc[mxEtowSec][mxEsmdPlane][mxEsmdStrip];
00262 float ene[mxEtowSec][mxEsmdPlane][mxEsmdStrip];
00263 int stat[mxEtowSec][mxEsmdPlane][mxEsmdStrip];
00264
00265 void clear() {
00266 memset(adc,0,sizeof(adc));
00267 memset(ene,0,sizeof(ene));
00268 memset(stat,-1,sizeof(stat));
00269 }
00270
00271 private:
00272 protected:
00273 ClassDef(WeveESMD,1);
00274
00275 };
00276
00277
00278
00279 class Wevent2011 : public TObject {
00280 public:
00281
00282 int l2bitET,l2bitRnd;
00283 int l2EbitET,l2EbitRnd;
00284 int trigAwaySum[16];
00285 int trigTotalSum;
00286
00287 int id;
00288 int runNo;
00289 float zdcRate;
00290 int bx7, bx48;
00291 bool zTag;
00292 vector <WeveVertex> vertex;
00293 WeveBEMC bemc;
00294 WeveETOW etow;
00295 WeveEPRS eprs;
00296 WeveESMD esmd;
00297
00298
00299 Wevent2011() {};
00300
00301 void clear() {
00302
00303 id=runNo=0;
00304 zdcRate=0;
00305 l2bitET=l2bitRnd=0;
00306 l2EbitET=l2EbitRnd=0;
00307 bx7=bx48=-1;
00308 zTag=false;
00309 vertex.clear();
00310 bemc.clear();
00311 etow.clear(); eprs.clear(); esmd.clear();
00312 }
00313
00314
00315 void print( int flag=0, int isMC=0) {
00316 printf("\nmy W2011event runNo=%d ID=%d L2Wbits: ET=%d rnd=%d; bx7=%d bx48=%d nVert=%d\n",runNo,id,l2bitET,l2bitRnd,bx7,bx48, vertex.size());
00317 for(uint i=0;i< vertex.size();i++) vertex[i].print(flag);
00318 bemc.print(flag);
00319
00320 }
00321
00322
00323 private:
00324 protected:
00325 ClassDef(Wevent2011,1);
00326
00327 };
00328
00329 #endif
00330
00331
00332
00333
00334
00335
00336
00337
00338