StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
rdEEeventMipSolo.C
1 // read TTree, find isolated towers, produce ADC
2 
3 rdEEeventMipSolo(int neve=1000, TString Tname0="/star/u/eemcdb/dataFeb11/run00006.eeTree", int flag=0, float Emax=40.){
4  Tname0="../4piotr/dAu1K.eeTree";
5  // Tname0="feb24/run00003.eeTree";
6  gSystem->Load("StRoot/StEEmcUtil/EEevent/libEEevent.so");
7 
8  gStyle->SetPalette(1,0);
9  gStyle->SetOptStat(111111);
10 
11  TString fname="out.hist.root";
12  TFile *fd=new TFile(fname,"recreate");
13 
14  TH1F *h1[8];
15  TH2F *h2[8];
16  initHisto(h2,h1,fd);
17  TH2F *heve=new TH2F("tw2D","eta vs. phi , EEMC towers",60,-0.5,59.5,12,0.5,12.5);
18 
19  const int mxEta=12;
20  const int mxPhi=60;
21  int valA[mxEta*mxPhi];
22 
23  TString Tname;
24  Tname=Tname0;
25 
26  printf("read upto %d events from file=%s.root\n",neve,Tname.Data());
27  TFile *f = new TFile(Tname+".root");
28  assert(f->IsOpen());
29  TTree *t4 = (TTree*)f->Get("EEtree");
30  assert(t4);
31  // create a pointer to an event object. This will be used
32  // to read the branch values.
33  EEeventDst *event = new EEeventDst();
34 
35  //if (gROOT->IsBatch()) return; new TBrowser(); t4->StartViewer(); return;
36  TBranch *br = t4->GetBranch("EEdst");
37  br->SetAddress(&event);
38  Int_t nevent = (Int_t)t4->GetEntries();
39  for (Int_t ie=0;ie<nevent;ie++) {
40  if(ie>=neve) break;
41  if(ie<5 || ie%50==0)
42  printf("\niEve=%d ---------- \n",ie);
43  int i;
44 
45  //read this branch only
46  br->GetEntry(ie);
47  if(ie<5) event->print();
48 
49  int nSec=event->Sec->GetEntries();
50  if(ie<5) printf("%d sectors with data\n",nSec);
51 
52  heve->Reset();
53  memset(valA,0,sizeof(valA));
54  int is;
55  for(is=0;is<nSec;is++) {
56  EEsectorDst *sec=(EEsectorDst*)event->Sec->At(is);
57  // sec->print();
58  TClonesArray *hitA=sec->getTwHits();
59  assert(hitA);
60  int ih;
61  for(ih=0;ih<hitA->GetEntries();ih++) {
62  char sub;
63  int eta;
64  float ener;
65  EEtwHitDst *hit=(EEtwHitDst*)hitA->At(ih);
66  hit->get(sub,eta,ener);
67  h2[0]->Fill(ener,eta);
68  h1[0]->Fill(ener);
69  int iphi=5*(sec->getID()-1) +(sub-'A');
70  int jj=mxPhi*(eta-1)+iphi;
71  heve->Fill(iphi,eta,ener);
72  if(ener<256) valA[jj]=ener+0.5;
73  if(ie<5) printf(" ih=%d sec=%d sub=%c etaBin=%d ener=%f\n",ih, sec->getID(), sub, eta,ener);
74  // hit->print();
75  }
76 
77  }// end of loop over sectors
78 
79  //search for Solo towers
80  int k0;
81  for(k0=0;k0<mxEta*mxPhi;k0++) {
82  if(valA[k0]==0) continue;
83  int ieta=k0/mxPhi;
84  int iphi=k0%mxPhi;
85  // look for neighbours
86  int sumS=sumSurr(ieta,iphi,valA,mxPhi,mxEta);
87  //printf("iphi=%d eta=%d adc=%d sumS=%d\n",iphi,ieta+1,valA[k0],sumS);
88  if(sumS<=0) {
89  h2[1]->Fill(valA[k0],ieta+1);
90  h1[1]->Fill(valA[k0]);
91  } else {
92  h2[2]->Fill(valA[k0],ieta+1);
93  h1[2]->Fill(valA[k0]);
94  }
95  sumS=sumSurr2(ieta,iphi,valA,mxPhi,mxEta);
96  if(sumS<=0) {
97  h2[3]->Fill(valA[k0],ieta+1);
98  h1[3]->Fill(valA[k0]);
99  } else {
100  h2[4]->Fill(valA[k0],ieta+1);
101  h1[4]->Fill(valA[k0]);
102  }
103  }
104  // printf("press enter ..."); char c; scanf("%c",&c);
105  } // loop over events
106  printf("\n\nTotal events in B TTree=%d\n",nevent);
107  heve->Draw("colz");
108  heve->SetMaximum(20);
109  heve->SetMinimum(0);
110 
111  gPad->SetGrid();
112  // return;
113  TCanvas * c=new TCanvas("aa","bb",500,600);
114  c->Divide(1,5);
115 
116  for(i=0;i<5;i++){
117  c->cd(i+1);
118  h2[i]->Draw("colz");
119  }
120 
121  TCanvas * c=new TCanvas("aa1","bb1",500,600);
122  c->Divide(1,5);
123 
124  for(i=0;i<5;i++){
125  c->cd(i+1);
126  h1[i]->Draw();
127  }
128 
129  fd->ls();
130  fd->Write();
131  c->Print("all.ps");
132 
133  c=new TCanvas("aa2","bb2",600,400);
134  c->Divide(2,2);
135  c->cd(1);
136  TH2F *hx=(TH2F *hx)h2[0]->Clone();
137  hx->Divide(h2[1],h2[2]); hx->Draw("colz");
138  c->cd(2);
139  hx=(TH2F *hx)h2[0]->Clone();
140  hx->Divide(h2[3],h2[2]); hx->Draw("colz");
141 
142  c->cd(3);
143  TH1F *hy=(TH1F*) h1[0]->Clone();
144  hy->Divide(h1[1],h1[2]); hy->Draw();
145  c->cd(4);
146  hy=(TH1F*) h1[0]->Clone();
147  hy->Divide(h1[3],h1[2]); hy->Draw();
148 
149 
150 }
151 
152 //====================================
153 
154 int sumSurr(int ieta, int iphi,int *valA, int nPhi, int nEta){
155  int sum=0;
156  assert(iphi>0);
157  assert(iphi<nPhi-1);
158 
159  // above
160  int jeta=ieta+1;
161  if(jeta<nEta) {
162  sum+=valA[ nPhi*jeta + iphi-1 ];
163  sum+=valA[ nPhi*jeta + iphi ];
164  sum+=valA[ nPhi*jeta + iphi+1 ];
165  }
166 
167  // below
168  jeta=ieta-1;
169  if(jeta>=0) {
170  sum+=valA[ nPhi*jeta + iphi-1 ];
171  sum+=valA[ nPhi*jeta + iphi ];
172  sum+=valA[ nPhi*jeta + iphi+1 ];
173  }
174 
175  // before/after
176  sum+=valA[ nPhi*ieta + iphi-1 ];
177  sum+=valA[ nPhi*ieta + iphi+1 ];
178 
179  return sum;
180 }
181 
182 //====================================
183 
184 int sumSurr2(int ieta, int iphi,int *valA, int nPhi, int nEta){
185  int sum=0;
186  assert(iphi>1);
187  assert(iphi<nPhi-2);
188 
189 
190  int i,j;
191  sum=-valA[ nPhi*ieta + iphi];
192 
193  for(i=ieta-2; i<=ieta+2;i++){
194  if(i>=nEta || i<0) continue;
195  for(j=iphi-2;j<=iphi+2;j++){
196  // printf("%d %d\n",i,j);
197  sum+=valA[ nPhi*i + j ];
198  }
199  }
200 
201  return sum;
202 }
203 
204 
205 //====================================
206 void initHisto(TH2F **h2, TH1F **h1, TFile *fd) {
207 
208  int i;
209  for(i=0;i<5;i++) { //
210  char tt1[100], tt2[100];
211  sprintf(tt1,"etaC%d",i);
212  sprintf(tt2,"eta-bin vs. raw ADC , condition=%d",i);
213  TH2F *h = new TH2F(tt1,tt2, 25,-0.,50.,12,.5,12.5);
214  h->SetDirectory(fd);
215  h->Sumw2();
216  h2[i]=h;
217 
218  sprintf(tt1,"C%d",i);
219  sprintf(tt2," raw ADC , condition=%d",i);
220  TH1F *hx = new TH1F(tt1,tt2, 50,-0.5,49.5);
221  hx->SetDirectory(fd);
222  hx->Sumw2();
223  h1[i]=hx;
224  }
225 }
226 
227