00001 #include <stdio.h>
00002 #include <cassert>
00003
00004 #include <TH1.h>
00005 #include "StMuDSTMaker/EZTREE/EztEmcRawData.h"
00006
00007 #include "SpyCopyCat.h"
00008
00009
00010
00011 SpyCopyCat:: SpyCopyCat(char x, int y){
00012 type=x;
00013 icr=y;
00014
00015 int crateID=0;
00016 int nb=0;
00017 switch (type) {
00018 case 'T': crateID=1+icr; nb=128;
00019 text="ETOW crate="; break;
00020 case 'M': crateID=64+icr; nb=192;
00021 text="ESMD crate="; break;
00022 default: ;
00023 }
00024 text+=crateID;
00025
00026 TString txt;
00027 txt="SpyCopyCat"; txt+=crateID;
00028 h=new TH1F(txt,txt,nb,-0.5,nb-0.5);
00029 nEve=0;
00030 };
00031
00032
00033
00034 void
00035 SpyCopyCat::accumulate(EztEmcRawData *e, EztEmcRawData *m){
00036 int nCCthresh=3;
00037
00038 nEve++;
00039
00040 EztEmcRawData *eRaw=0;
00041 int crateID=0;
00042 switch (type) {
00043 case 'T': eRaw=e; crateID=1+icr; break;
00044 case 'M': eRaw=m; crateID=64+icr; break;
00045 default: ;
00046 }
00047 assert(eRaw);
00048
00049 assert( icr>=0 && icr<eRaw->getNBlocks());
00050 if(eRaw->isCrateVoid(icr)) return;
00051
00052 const UShort_t* data=eRaw->data(icr);
00053 int i0=-1, i1=-2;
00054 int nCC=0;
00055 int i;
00056 for(i=1;i<eRaw->sizeData(icr);i++) {
00057 int del=data[i-1]-data[i];
00058
00059
00060
00061 if(del!=0 ) {
00062 if(nCC>=nCCthresh) {
00063 incrHist(i0,i1);
00064
00065 }
00066 nCC=0;
00067 continue;
00068 } else {
00069 if(nCC==0) i0=i-1;
00070 i1=i;
00071 nCC++;
00072 }
00073
00074
00075
00076 }
00077
00078
00079 if(nCC>=nCCthresh) {
00080 incrHist(i0,i1);
00081
00082 }
00083
00084 }
00085
00086
00087
00088 void
00089 SpyCopyCat:: incrHist(int i0, int i1){
00090 int i;
00091 for(i=i0; i<=i1;i++) h->Fill(i);
00092 }
00093
00094
00095
00096
00097 bool
00098 SpyCopyCat::sense(FILE *fd) {
00099
00100 float thres=0.5;
00101 float minEve=10;
00102
00103 float nThres=nEve*thres;
00104 if(nThres<minEve) nThres=minEve;
00105
00106 int nMax=(int)h->GetMaximum();
00107 bool isBad=nMax>nThres;
00108
00109
00110
00111 if (isBad) {
00112 fprintf(fd,"\nSpyCopyCat: %s , bad channels: ",text.Data());
00113 int i;
00114 int k=0;
00115 for(i=1;i<=h->GetNbinsX();i++) {
00116 if(h->GetBinContent(i) <nThres) continue;
00117 fprintf(fd,"%d,",i);
00118 k++;
00119 }
00120 fprintf(fd," --> nChan=%d\n",k);
00121 }
00122
00123 nEve=0;
00124 h->Reset();
00125 return isBad;
00126 }
00127