00001
00002
00003 float x1=1+0.05, x2=x1+60;
00004 int nbx=10*60;
00005 TH1F *hBPMg=new TH1F("bpmG","Average MIP position per PMB, err=RMS; X= PMB + pmt/10; MIP (adc)",nbx,x1,x2);
00006 TH1F *hBPMu=new TH1F("bpmU","Number of used pixels per PMB; X= PMB + pmt/10; number of tiles",nbx,x1,x2);
00007 TH1F *hBPMq=new TH1F("bpmQ","QA error flag per PMB (Y=0 is good); X= PMB_ID + pmt_ID/10;error code",nbx,x1,x2);
00008
00009 FILE *fcsv=0;
00010
00011 final() {
00012 fcsv=fopen("bprsPMBmipGain.csv","w");
00013 fprintf(fcsv,"average MIP ADC over 16 (or less) working BPRS tiles; ver=1.6\n");
00014 fprintf(fcsv,"PMB,pmt, QAflag, nUsedPix, avrMIP (adc), rmsMIP (adc),PDF page # , all mapped softIDs\n");
00015
00016 for(int b=1; b<=60;b++)
00017 avrPMB(b);
00018 fprintf(fcsv,"\nQAflag=0x0 : good MIP signal in this pmt \n");
00019 fprintf(fcsv,"QAflag bit=0x1 : no histo \n");
00020 fprintf(fcsv,"QAflag bit=0x2 : too few working pixels \n");
00021 fprintf(fcsv,"QAflag bit=0x4 : too narrow RMS \n");
00022 fprintf(fcsv,"QAflag bit=0x8 : too low mean ADC \n");
00023 fclose(fcsv); fcsv=0;
00024
00025 c=new TCanvas("aa1","aa1",1300,800);
00026 c->Divide(1,3);
00027 gStyle->SetOptStat(10);
00028 c->cd(1); hBPMg->Draw(); gPad->SetGrid();
00029 c->cd(3); hBPMu->Draw(); gPad->SetGrid();
00030 c->cd(2); hBPMq->Draw(); gPad->SetGrid();
00031 hBPMg->SetAxisRange(0.,100.); hBPMg->SetMarkerColor(kRed); hBPMg->SetMarkerStyle(5);
00032 hBPMu->SetAxisRange(0.,100.); hBPMu->SetFillColor(kBlue);hBPMu->SetLineColor(kBlue);
00033 hBPMq->SetAxisRange(0.,100.); hBPMq->SetFillColor(kRed);hBPMq->SetLineColor(kRed);
00034 }
00035
00036
00037
00038 avrPMB(int box0=2) {
00039 gStyle->SetOptStat(1110);
00040 gStyle->SetOptFit(1);
00041 gStyle->SetPalette(1,0);
00042
00043
00044
00045
00046 char *fnameO="calib-nov-21-2008/barrelMipSpectV6ok.hist.root";
00047 fd=new TFile(fnameO); assert(fd->IsOpen());
00048 printf("Read %s\n", fd->GetName());
00049
00050
00051 float cut_nUsed=5;
00052 float cut_adcL=2.5;
00053 float cut_rms=0.5;
00054
00055 int box1=box0, box2=box0;
00056 for(int box=box1; box<=box2; box++) {
00057 c=new TCanvas("aa","aa",800,500); c->Divide(4,2);
00058 c->cd(8); hBPMg->Draw();
00059 c->cd(7); hBPMu->Draw();
00060 c->cd(6); hBPMq->Draw();
00061 hBPMg->SetAxisRange(box,box+1.);
00062 hBPMu->SetAxisRange(box,box+1.);
00063 hBPMq->SetAxisRange(box,box+1.);
00064 char tt[100];
00065 for( int pmt=1; pmt<=5; pmt++) {
00066 sprintf(tt,"gainBPM%d_%d",box,pmt);
00067 printf(" get:%s:\n",tt);
00068 TH1F *h=fd->Get(tt);
00069 if(h==0) {
00070 if(fcsv) fprintf("%d,%d, 0,1, noHisto",box,pmt);
00071 printf("missing=%s \n",tt); continue;}
00072 float xVal=box+pmt/10.;
00073 c->cd(pmt);
00074 h->Draw(); h->SetMaximum(10);
00075 float nUsed=h->GetEntries();
00076 hBPMu->Fill(xVal,nUsed);
00077 float mean=h->GetMean();
00078 float rms=h->GetRMS();
00079 int flag=0;
00080 if(nUsed<cut_nUsed) flag+=2;
00081 if(rms<cut_rms) flag+=4;
00082 if(mean<cut_adcL) flag+=8;
00083 if(flag)hBPMq->Fill(xVal,flag);
00084 if(flag==0) { int bin=hBPMg->FindBin(xVal);
00085 hBPMg->SetBinContent(bin,mean);
00086 hBPMg->SetBinError(bin,rms);
00087 }
00088 if(fcsv) {
00089 fprintf(fcsv,"%d,%d,%d, %d, %.2f, %.2f, %2d,",box,pmt,flag,nUsed,mean,rms,5*(box-1)+pmt);
00090 printSoftList(box,pmt);
00091 }
00092 }
00093 }
00094
00095 }
00096
00097
00098 void printSoftList(int box=11, int pmt=1) {
00099 fd1=new TFile("calib-nov-8-2008/map-softID-bprsPmt-Rory.root"); assert(fd1->IsOpen());
00100
00101 TH1I * mapBprsPmt=(TH1I*) fd1->Get("bprsPmt"); assert(mapBprsPmt);
00102
00103
00104 int y= box*10+pmt;
00105 for(int b=1;b<=4800;b++) {
00106 if(y!=(int)mapBprsPmt->GetBinContent(b)) continue;
00107 if(fcsv)fprintf(fcsv,"%d ",b);
00108 }
00109 if(fcsv) fprintf(fcsv,"\n");
00110 fd1->Close();
00111 }