StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
SpyCopyCat.cxx
1 #include <stdio.h>
2 #include <cassert>
3 
4 #include <TH1.h>
5 #include "StMuDSTMaker/EZTREE/EztEmcRawData.h"
6 
7 #include "SpyCopyCat.h"
8 
9 //------------------------------
10 //------------------------------
11 SpyCopyCat:: SpyCopyCat(char x, int y){
12  type=x;
13  icr=y;
14 
15  int crateID=0;
16  int nb=0;
17  switch (type) {
18  case 'T': crateID=1+icr; nb=128;
19  text="ETOW crate="; break;
20  case 'M': crateID=64+icr; nb=192;
21  text="ESMD crate="; break;
22  default: ;
23  }
24  text+=crateID;
25 
26  TString txt;
27  txt="SpyCopyCat"; txt+=crateID;
28  h=new TH1F(txt,txt,nb,-0.5,nb-0.5);
29  nEve=0;
30 };
31 
32 //------------------------------
33 //------------------------------
34 void
35 SpyCopyCat::accumulate(EztEmcRawData *e, EztEmcRawData *m){
36  int nCCthresh=3;
37 
38  nEve++;
39 
40  EztEmcRawData *eRaw=0;
41  //int crateID=0;
42  switch (type) {
43  case 'T': eRaw=e; /*crateID=1+icr; */ break;
44  case 'M': eRaw=m; /*crateID=64+icr;*/ break;
45  default: ;
46  }
47  assert(eRaw);
48 
49  assert( icr>=0 && icr<eRaw->getNBlocks());
50  if(eRaw->isCrateVoid(icr)) return;
51 
52  const UShort_t* data=eRaw->data(icr);
53  int i0=-1, i1=-2;
54  int nCC=0;
55  int i;
56  for(i=1;i<eRaw->sizeData(icr);i++) {
57  int del=data[i-1]-data[i];
58  //test if(crateID==5 && i>30 && i<40) del=0;
59  // printf("i=%d adc=%d del=%4d nCC=%d\n",i,data[i],del,nCC);
60 
61  if(del!=0 ) { // different values
62  if(nCC>=nCCthresh) {
63  incrHist(i0,i1);
64  //printf(" CC-series crID=%d [%d,%d] nCC=%d\n",crateID,i0,i1,nCC); // new sequence starts
65  }
66  nCC=0; // clear old sequence
67  continue;
68  } else { //identical values
69  if(nCC==0) i0=i-1; // new sequence starts
70  i1=i;
71  nCC++;
72  }
73  // const EEmcDbItem *x=eeDb->getByCrate(crateID,chan);
74  //if(x==0) continue; // noDB info
75  //if(x->fail ) continue; // drop broken channels
76  } // end of loop over hist
77 
78  //closing tests
79  if(nCC>=nCCthresh) {
80  incrHist(i0,i1);
81  // printf("end CC-series crID=%d [%d,%d] nCC=%d\n",crateID,i0,i1,nCC); // new sequence starts
82  }
83 
84 }
85 
86 //------------------------------
87 //------------------------------
88 void
89 SpyCopyCat:: incrHist(int i0, int i1){
90  int i;
91  for(i=i0; i<=i1;i++) h->Fill(i);
92 }
93 
94 
95 //------------------------------
96 //------------------------------
97 bool
98 SpyCopyCat::sense(FILE *fd) {
99  // params ....
100  float thres=0.5;
101  float minEve=10;
102 
103  float nThres=nEve*thres;
104  if(nThres<minEve) nThres=minEve;
105 
106  int nMax=(int)h->GetMaximum();
107  bool isBad=nMax>nThres;
108  // fprintf(fd,"\nSpyCopyCat: %s examined ",text.Data());
109 
110  // h->Draw();
111  if (isBad) {
112  fprintf(fd,"\nSpyCopyCat: %s , bad channels: ",text.Data());
113  int i;
114  int k=0;
115  for(i=1;i<=h->GetNbinsX();i++) {
116  if(h->GetBinContent(i) <nThres) continue;
117  fprintf(fd,"%d,",i);
118  k++;
119  }
120  fprintf(fd," --> nChan=%d\n",k);
121  }// end of error message
122 
123  nEve=0; // clear
124  h->Reset();
125  return isBad;
126 }
127