StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
doBprsPedTonko.C
1 TH2S *h2Ped=0, *h2Sig=0;
2 TH1S *h1Stat=0, *h2CapStat;
3 TH2D *hT0=0, *hT1=0, *hT2=0;
4 TCanvas *c=0;
5 
6 // this is Tonko's metod of computingpeds(cap,softID) - plain average
7 
8 void doBprsPedTonko(char *crun="R9049049", char * pathIn="/star/data05/scratch/balewski/sched-raw-ped4"){
9  gStyle->SetPalette(1,0);
10  gStyle->SetOptStat(0);
11 
12  char *pathOut="calib-2.3m/";
13  char txt[1000], txt2[1000];
14 
15  sprintf(txt,"%s/%s.barCal.hist.root",pathIn,crun);
16  fd1=new TFile(txt);
17  printf("Open=%s=\n",fd1->GetName());
18  if(!fd1->IsOpen()) { printf("FAIL run=%s\n", crun); return;}
19 
20 
21  sprintf(txt,"%s/pedBprs%s-allCap.hist.root",pathOut,crun);
22  fd2=new TFile(txt,"recreate");
23 
24  hT0= (TH2D *)fd1->Get("bprsTnk0"); assert(hT0);
25  hT1= (TH2D *)fd1->Get("bprsTnk1"); assert(hT1);
26  hT2= (TH2D *)fd1->Get("bprsTnk2"); assert(hT2);
27 
28  axX=hT0->GetXaxis();
29  float x1=axX->GetXmin();
30  float x2=axX->GetXmax();
31  int nbX=axX->GetNbins();
32  // printf("X-axis range --> [%.1f, %.1f], nb=%d %s\n",x1,x2,nbX,axX->GetTitle());
33 
34  axY=hT0->GetYaxis();
35  float y1=axY->GetXmin();
36  float y2=axY->GetXmax();
37  int nbY=axY->GetNbins();
38  printf("Y-axis range --> [%.1f, %.1f], nb=%d %s\n",y1,y2,nbY,axX->GetTitle());
39  int nCap=nbY;
40 
41  sprintf(txt,"pedBPRScap");
42  sprintf(txt2,"BPRS pedestal, average method (Z=10*ADC), %s ; BPRS soft ID; capID",crun);
43  h2Ped=new TH2S(txt,txt2,nbX,x1,x2,nCap,-0.5,nCap-0.5);
44 
45  sprintf(txt,"rmsPedBPRScap");
46  sprintf(txt2,"BPRS RMS(ped) (Z=10*ADC), %s ; BPRS soft ID; capID",crun);
47  h2Sig=new TH2S(txt,txt2,nbX,x1,x2,nCap,-0.5,nCap-0.5);
48 
49  sprintf(txt,"statBPRSallCap");
50  sprintf(txt2,"BPRS status from all caps, %s ; BPRS soft ID; # of bad caps",crun);
51  h1Stat=new TH1S(txt,txt2,nbX,x1,x2);
52 
53  sprintf(txt,"capStatBPRSallSoft");
54  sprintf(txt2,"BPRS status from all softID, %s ; BPRS capID; # of bad softID",crun);
55  h1CapStat=new TH1S(txt,txt2,128,-0.5,127.5);
56 
57  int cut_minEve=20;
58  float cut_minRms=0.8;
59 
60  printf("H2 created\n");
61  int cap1=0, cap2=127;
62  for(int cap=cap1;cap<=cap2;cap++) {
63  for(int i=1;i<=nbX;i++) {// i=softID
64 
65  double nEve= hT0->GetBinContent(i,cap+1);
66  double sumX= hT1->GetBinContent(i,cap+1);
67  double sumX2= hT2->GetBinContent(i,cap+1);
68  if(nEve<=cut_minEve) { h1Stat->Fill(i); continue; }
69  // printf("%d %d %d\n",cap,i,nEve);
70  double ped=sumX/nEve;
71  double rms=sqrt(sumX2/nEve -ped*ped);
72  // if(i==3) printf("cap=%d id=%d nEve=%f ped=%f rms=%f\n",cap,i,nEve, ped,rms);
73  if(rms< cut_minRms) { h1Stat->Fill(i); continue; }
74  h2Ped->SetBinContent(i,cap+1,(int)(10.*ped));
75  h2Sig->SetBinContent(i,cap+1,(int)(10.*rms));
76  if(0) {
77  h1Stat->Fill(i,1);
78  h1CapStat->Fill(cap,1);
79  }
80  } // end of loop over soft ID
81  }// end of loop over caps
82 
83  // count dead tiles
84  int nDead=0;
85  for(int i=1;i<=nbX;i++) {// i=softID
86  if(h1Stat->GetBinContent(i)==0) continue;
87  nDead++;
88  printf("%d dead, softID=%d\n",nDead,i);
89  }
90  h1Stat->SetEntries(nDead);
91  printf(" accumulated nDead=%d\n",nDead);
92 
93  fd2->cd();
94  h2Ped->Write();
95  h2Sig->Write();
96  h1Stat->Write();
97  h1CapStat->Write();
98  printf("total entries=%d\n",h2Ped->GetEntries());
99  return;
100  c=new TCanvas();
101  c->Divide(1,3);
102  c->cd(1); h2Sig->Draw("colz"); h2Sig->SetMaximum(4);
103  c->cd(2);
104 
105  subtractRefPed();
106  return;
107 
108 
109  // dump 3D histo ....
110  for(int k=120;k<=128;k++) //capID
111  for(int i=1;i<=nbX;i++) //chan
112  for(int j=1;j<=nbY;j++) //ADC
113  {
114  float val=h3->GetBinContent(i,j,k);
115  if(val<1.) continue;
116  printf("chan(i)=%d, adc(j)=%d, cap(k)=%d val=%f\n", i-1,j+100,k-1,val);
117  }
118 }
119 
120 
121 //=========================
122 void subtractRefPed() {
123 
124  fd3=new TFile("calib2.2n/pedBprsR9066001-allCap.hist.root");
125  assert(fd3->IsOpen());
126  printf("Opened=%s=\n",fd3->GetName());
127 
128  hRef1= (TH2F *)fd3->Get("sigPedBPRScap"); assert(hRef1);
129  hRef1->Draw("colz");
130  hRef1->SetMaximum(4);
131 
132  c->cd(3);
133  hRef= (TH2F *)fd3->Get("pedBPRScap"); assert(hRef);
134  hRef->SetName("ab");
135  hRef->Draw("colz");
136  // hRef->Add(h2Ped,1.);
137  hRef->Divide(h2Ped);
138  hRef->SetMaximum(1.01);
139  hRef->SetMinimum(0.98);
140 
141 
142 }