00001 #include <string.h>
00002 #include <assert.h>
00003 #include <stdio.h>
00004
00005 #include "EEsmdPlain.h"
00006
00007
00008 EEsmdPlain::EEsmdPlain(){
00009 thresE=-1;
00010 nDot=-2;
00011 uv='N';
00012 pattXX[0]=0;
00013 pattX[0]=0;
00014 hitOver=dotArray+oneOff;
00015 clear();
00016 }
00017
00018
00019 void EEsmdPlain::set(float th, int nd, char uv0) {
00020 thresE=th;
00021 nDot=nd;
00022 uv=uv0;
00023 int len=2*nDot+2;
00024 assert(len>=2);
00025 assert(len+2<MaxSmdStrips);
00026
00027 memset(pattXX,'.',len);
00028 pattXX[len]=0;
00029 pattXX[nDot]='x';
00030 pattXX[nDot+1]='x';
00031
00032 memset(pattX,'.',len);
00033 pattX[len]=0;
00034 pattX[nDot]='x';
00035
00036 printf("Set %c-plain , nDot=%d, thrE/MeV=%.2f, pattXX='%s'\n",uv,nDot,thresE*1000.,pattXX);
00037 }
00038
00039
00040
00041 void EEsmdPlain::clear(){
00042 memset(dotArray,'.',sizeof(dotArray));
00043 dotArray[2*oneOff+MaxSmdStrips]=0;
00044 nMatch=0;
00045 memset(iStrip,-1,sizeof(iStrip));
00046 memset(type,0,sizeof(type));
00047 }
00048
00049
00050
00051 void EEsmdPlain::print(int k){
00052 printf("nMatch=%d to plain='%c' \n",nMatch,uv);
00053 int i;
00054 for(i=0;i<nMatch;i++) printf("i=%d, iStrip=%d type=%d\n",i,iStrip[i],type[i]);
00055
00056 if(k<=0) return;
00057 printf("%c-plain , X-off=%d, nDot='%s'\n",uv,nDot,pattXX);
00058
00059 printf("iStrip:");
00060 for(i=0;i<MaxSmdStrips;i++) {
00061 if(hitOver[i]==0) break;
00062 if(i%50==0) printf("\ni=%3d ",i);
00063 if(i%10==0) printf(" ");
00064 printf("%c",hitOver[i]);
00065 }
00066 printf("\n");
00067 }
00068
00069
00070
00071 void EEsmdPlain::findMipPattern(){
00072 char *p=0;
00073 nMatch=0;
00074
00075
00076
00077 p=dotArray;
00078
00079 while((p=strstr(p,pattXX))) {
00080 int j=p-hitOver+nDot;
00081 assert(j>=0 && j<MaxSmdStrips);
00082 iStrip[nMatch]=j;
00083 type[nMatch]=2;
00084 nMatch++;
00085 p+=nDot;
00086 }
00087
00088 #if 1 //smdMap -- take it off for mapping test
00089
00090 p=dotArray;
00091 while((p=strstr(p,pattX))) {
00092 int j=p-hitOver+nDot;
00093
00094 assert(j>=0 && j<MaxSmdStrips);
00095 iStrip[nMatch]=j;
00096 type[nMatch]=1;
00097 nMatch++;
00098 p+=nDot;
00099 }
00100
00101 #endif
00102 }
00103
00104
00105
00106 void EEsmdPlain::scanAdc(float *val, float thr) {
00107
00108 int istrip;
00109 for(istrip=0;istrip<MaxSmdStrips;istrip++) {
00110 if( val[istrip]>thr) hitOver[istrip]='x';
00111
00112 }
00113 }