00001 TH2S *h2Ped=0, *h2Sig=0;
00002 TH1S *h1Stat=0, *h2CapStat;
00003 TH2D *hT0=0, *hT1=0, *hT2=0;
00004 TCanvas *c=0;
00005
00006
00007
00008 void doBprsPedTonko(char *crun="R9049049", char * pathIn="/star/data05/scratch/balewski/sched-raw-ped4"){
00009 gStyle->SetPalette(1,0);
00010 gStyle->SetOptStat(0);
00011
00012 char *pathOut="calib-2.3m/";
00013 char txt[1000], txt2[1000];
00014
00015 sprintf(txt,"%s/%s.barCal.hist.root",pathIn,crun);
00016 fd1=new TFile(txt);
00017 printf("Open=%s=\n",fd1->GetName());
00018 if(!fd1->IsOpen()) { printf("FAIL run=%s\n", crun); return;}
00019
00020
00021 sprintf(txt,"%s/pedBprs%s-allCap.hist.root",pathOut,crun);
00022 fd2=new TFile(txt,"recreate");
00023
00024 hT0= (TH2D *)fd1->Get("bprsTnk0"); assert(hT0);
00025 hT1= (TH2D *)fd1->Get("bprsTnk1"); assert(hT1);
00026 hT2= (TH2D *)fd1->Get("bprsTnk2"); assert(hT2);
00027
00028 axX=hT0->GetXaxis();
00029 float x1=axX->GetXmin();
00030 float x2=axX->GetXmax();
00031 int nbX=axX->GetNbins();
00032
00033
00034 axY=hT0->GetYaxis();
00035 float y1=axY->GetXmin();
00036 float y2=axY->GetXmax();
00037 int nbY=axY->GetNbins();
00038 printf("Y-axis range --> [%.1f, %.1f], nb=%d %s\n",y1,y2,nbY,axX->GetTitle());
00039 int nCap=nbY;
00040
00041 sprintf(txt,"pedBPRScap");
00042 sprintf(txt2,"BPRS pedestal, average method (Z=10*ADC), %s ; BPRS soft ID; capID",crun);
00043 h2Ped=new TH2S(txt,txt2,nbX,x1,x2,nCap,-0.5,nCap-0.5);
00044
00045 sprintf(txt,"rmsPedBPRScap");
00046 sprintf(txt2,"BPRS RMS(ped) (Z=10*ADC), %s ; BPRS soft ID; capID",crun);
00047 h2Sig=new TH2S(txt,txt2,nbX,x1,x2,nCap,-0.5,nCap-0.5);
00048
00049 sprintf(txt,"statBPRSallCap");
00050 sprintf(txt2,"BPRS status from all caps, %s ; BPRS soft ID; # of bad caps",crun);
00051 h1Stat=new TH1S(txt,txt2,nbX,x1,x2);
00052
00053 sprintf(txt,"capStatBPRSallSoft");
00054 sprintf(txt2,"BPRS status from all softID, %s ; BPRS capID; # of bad softID",crun);
00055 h1CapStat=new TH1S(txt,txt2,128,-0.5,127.5);
00056
00057 int cut_minEve=20;
00058 float cut_minRms=0.8;
00059
00060 printf("H2 created\n");
00061 int cap1=0, cap2=127;
00062 for(int cap=cap1;cap<=cap2;cap++) {
00063 for(int i=1;i<=nbX;i++) {
00064
00065 double nEve= hT0->GetBinContent(i,cap+1);
00066 double sumX= hT1->GetBinContent(i,cap+1);
00067 double sumX2= hT2->GetBinContent(i,cap+1);
00068 if(nEve<=cut_minEve) { h1Stat->Fill(i); continue; }
00069
00070 double ped=sumX/nEve;
00071 double rms=sqrt(sumX2/nEve -ped*ped);
00072
00073 if(rms< cut_minRms) { h1Stat->Fill(i); continue; }
00074 h2Ped->SetBinContent(i,cap+1,(int)(10.*ped));
00075 h2Sig->SetBinContent(i,cap+1,(int)(10.*rms));
00076 if(0) {
00077 h1Stat->Fill(i,1);
00078 h1CapStat->Fill(cap,1);
00079 }
00080 }
00081 }
00082
00083
00084 int nDead=0;
00085 for(int i=1;i<=nbX;i++) {
00086 if(h1Stat->GetBinContent(i)==0) continue;
00087 nDead++;
00088 printf("%d dead, softID=%d\n",nDead,i);
00089 }
00090 h1Stat->SetEntries(nDead);
00091 printf(" accumulated nDead=%d\n",nDead);
00092
00093 fd2->cd();
00094 h2Ped->Write();
00095 h2Sig->Write();
00096 h1Stat->Write();
00097 h1CapStat->Write();
00098 printf("total entries=%d\n",h2Ped->GetEntries());
00099 return;
00100 c=new TCanvas();
00101 c->Divide(1,3);
00102 c->cd(1); h2Sig->Draw("colz"); h2Sig->SetMaximum(4);
00103 c->cd(2);
00104
00105 subtractRefPed();
00106 return;
00107
00108
00109
00110 for(int k=120;k<=128;k++)
00111 for(int i=1;i<=nbX;i++)
00112 for(int j=1;j<=nbY;j++)
00113 {
00114 float val=h3->GetBinContent(i,j,k);
00115 if(val<1.) continue;
00116 printf("chan(i)=%d, adc(j)=%d, cap(k)=%d val=%f\n", i-1,j+100,k-1,val);
00117 }
00118 }
00119
00120
00121
00122 void subtractRefPed() {
00123
00124 fd3=new TFile("calib2.2n/pedBprsR9066001-allCap.hist.root");
00125 assert(fd3->IsOpen());
00126 printf("Opened=%s=\n",fd3->GetName());
00127
00128 hRef1= (TH2F *)fd3->Get("sigPedBPRScap"); assert(hRef1);
00129 hRef1->Draw("colz");
00130 hRef1->SetMaximum(4);
00131
00132 c->cd(3);
00133 hRef= (TH2F *)fd3->Get("pedBPRScap"); assert(hRef);
00134 hRef->SetName("ab");
00135 hRef->Draw("colz");
00136
00137 hRef->Divide(h2Ped);
00138 hRef->SetMaximum(1.01);
00139 hRef->SetMinimum(0.98);
00140
00141
00142 }