// compile with: // g++ -o plotbits.exe plotbits.cpp `root-config --cflags --glibs` // #include "TH1F.h" #include "TProfile.h" #include "TMath.h" #include "TF1.h" #include "TLegend.h" #include "TCanvas.h" // #include "TROOT.h" //#include "TStyle.h" #include "TTree.h" #include "TFile.h" #include "TGraphErrors.h" #include "TStyle.h" #include "TLine.h" #include #include #include #include #include #include // #include #include #include using namespace std; int plotbits(const char *filename = "") { TH1F* hBitsAll[10]; TH1F* hBits[10]; FILE *fcsv; int item = 0; int entry; char buffer[1024]; int saltronb; int channel; int prevsaltronb = 0; int mysaltronb = 0; int chipnumbers[1000]; float bit[10]; unsigned int errorcode; int mcm,chipnb,gain,shaper,polarity,pgsource; memset(chipnumbers,0,sizeof(chipnumbers)); sscanf(filename,"saltro-mcm%d-c%1d-bits-g%1d-s%1d-p%1d-s%1d.csv",&mcm,&chipnb,&gain,&shaper,&polarity,&pgsource); fcsv = fopen(filename,"r"); if (fcsv == NULL) { printf("File %s not found\n",filename); return 1; } char limitfile[128]; char limitbuffer[128]; int limititem = 0; FILE *flimits; sprintf(limitfile,"plotchipbits-g%d-s%d-p%d-s%d.txt",gain,shaper,polarity,pgsource); flimits = fopen(limitfile,"r"); int mybit; float bit_mean[10],bit_min[10],bit_max[10]; if (flimits != NULL) { while (fgets(limitbuffer,sizeof(limitbuffer),flimits) != NULL) { if (limitbuffer[0] != '#') { if ((limititem >= 0) && (limititem <=9)) { sscanf(limitbuffer,"%d %f %f %f",&mybit,&bit_mean[limititem],&bit_min[limititem],&bit_max[limititem]); printf("%d %f %f %f\n",mybit,bit_mean[limititem],bit_min[limititem],bit_max[limititem]); } limititem++; } } fclose(flimits); } TCanvas *c1 = new TCanvas("c1","Single cluster",600,600); char name[128]; for (int i = 0; i < 10; i++) { sprintf(name, "hBits_%d",i+1); hBits[i] = ((TH1F *)(gROOT->FindObject(name))); if (hBits[i]) delete hBits[i]; hBits[i] = new TH1F(name, "",500,0.0,100); hBits[i]->SetMinimum(0); sprintf(name, "Bit frequencies"); hBits[i]->GetXaxis()->SetTitle("%"); sprintf(name,"bit%d-g%d-s%d-p%d-s%d",i,gain,shaper,polarity,pgsource); hBits[i]->SetTitle(name); sprintf(name, "hBitsAll_%d",i+1); hBitsAll[i] = ((TH1F *)(gROOT->FindObject(name))); if (hBitsAll[i]) delete hBitsAll[i]; hBitsAll[i] = new TH1F(name, "",6000,0.0,6000); hBitsAll[i]->SetMinimum(0); sprintf(name, "Bit frequencies"); hBitsAll[i]->GetYaxis()->SetTitle("%"); hBitsAll[i]->SetAxisRange(0,110, "Y"); sprintf(name,"bit%d-g%d-s%d-p%d-s%d",i,gain,shaper,polarity,pgsource); hBitsAll[i]->SetTitle(name); } while (fgets(buffer,sizeof(buffer),fcsv) != NULL) { if (item != 0) { sscanf(buffer,"%d,%d,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%X", &saltronb,&channel,&bit[0],&bit[1],&bit[2],&bit[3],&bit[4],&bit[5],&bit[6],&bit[7],&bit[8],&bit[9],&errorcode); if (saltronb != prevsaltronb) { chipnumbers[mysaltronb] = saltronb; mysaltronb++; prevsaltronb = saltronb; } entry = ((mysaltronb - 1) * 16) + (channel % 16) + 1; for (int j = 0; j < 10; j++) { hBitsAll[j]->SetBinContent(entry,bit[j]); hBits[j]->Fill(bit[j]); } } item++; } fclose(fcsv); c1->Divide(1,5); int step=400; gStyle->SetOptStat(0); char number[16]; for (int j = 0, k = 0; j < entry; j+=16,k++) { sprintf(number,"%d",chipnumbers[k]); for (int l = 0; l < 10; l++) { hBitsAll[l]->GetXaxis()->SetBinLabel(j+1,number); } } sprintf(name,"%s.pdf(",filename); for (int j1 = 0; j1 < entry; j1+=step) { for (int j = 0; j < 10; j++) { c1->cd(j%5 + 1); hBitsAll[j]->SetAxisRange(j1, j1+step, "X"); hBitsAll[j]->Draw(); // if (limititem != 0) { TLine *line1 = new TLine(j1,bit_min[j],j1+step,bit_min[j]); line1->SetLineColor(kRed); line1->Draw(); TLine *line2 = new TLine(j1,bit_max[j],j1+step,bit_max[j]); line2->SetLineColor(kRed); line2->Draw(); // } if ((j == 4) || (j==9)) { c1->SaveAs(name,"pdf"); sprintf(name,"%s.pdf",filename); } } } c1->Clear(); c1->Divide(1,1); c1->cd(1); gStyle->SetOptStat(11111); sprintf(name,"%s.pdf",filename); for (int j = 0; j < 9; j++) { hBits[j]->Draw(); c1->SaveAs(name,"pdf"); } hBits[9]->Draw(); sprintf(name,"%s.pdf)",filename); c1->SaveAs(name,"pdf"); return 0; } int main (int argc, char *argv[]) { int iret = 0; if (argc != 2) { printf("Wrong number of arguments: argc = %d\nSyntax should be:\n./plotbits.exe filename \n",argc); return 1; } iret = plotbits(argv[1]); return iret; }