/* Root Macro to Produce a Linear Fit on 6 DAC Outputs */ /* and Display all 6 Graphs in One Canvas */ Double_t func(Double_t*x,Double_t*par) { Double_t xx=x[0]; if (xx<=0) return 0; return par[0]*xx+par[1]; } void plot() { TF1 *lin = new TF1("lin",func,0,255,2); // x in [0;255], 2 parameters lin->SetParName(0,"Gradient"); lin->SetParName(1,"Offset"); Int_t regvalue, counter = 0; const Int_t n = 256; //256 data points per graph Double_t a,b,c,x,y,z; Double_t par[12]; //2 parameters * 6 DACS Double_t val[n]; Double_t dac1[n], dac2[n], dac3[n], dac4[n], dac5[n], dac6[n]; ofstream dataout("fit_pars.txt"); /* Input Data */ char* dac_name[] = {"TESTLOW", "TESTHI", "GTLA", "GTLD", "DRMID", "DRHI"}; ifstream in; in.open("data.txt"); for(Int_t i=0; i>regvalue>>a>>b>>c>>x>>y>>z; if(!in.good()) break; val[i] = regvalue; dac1[i] = a; dac2[i] = b; dac3[i] = c; dac4[i] = x; dac5[i] = y; dac6[i] = z; counter++; } in.close(); cout<<"Counter: "<Divide(3,2,0,0); /* Create 6 TGraphs for the 6 DAC plots */ TGraph *d1 = new TGraph(n, val, dac1); TGraph *d2 = new TGraph(n, val, dac2); TGraph *d3 = new TGraph(n, val, dac3); TGraph *d4 = new TGraph(n, val, dac4); TGraph *d5 = new TGraph(n, val, dac5); TGraph *d6 = new TGraph(n, val, dac6); /* Set Fit Conditions */ lin->SetParameter(0,3); lin->SetParameter(1,1); lin->SetLineWidth(2); lin->SetLineColor(2); /* DAC 1 */ d1->SetLineWidth(2); d1->SetTitle("TESTLOW"); d1->GetXaxis()->SetTitle("DAC Register Value"); d1->GetYaxis()->SetTitle("Output Voltage V"); d1->GetXaxis()->CenterTitle(); d1->GetYaxis()->CenterTitle(); d1->GetYaxis()->SetTitleOffset(1.5); d1->Fit("lin","R"); lin->GetParameters(&par[0]); /* DAC 2 */ d2->SetTitle("TESTHI"); d2->GetXaxis()->SetTitle("DAC Register Value"); d2->GetYaxis()->SetTitle("Output Voltage V"); d2->GetXaxis()->CenterTitle(); d2->GetYaxis()->CenterTitle(); d2->GetYaxis()->SetTitleOffset(1.5); d2->Fit("lin","R"); d2->SetLineWidth(2); lin->GetParameters(&par[2]); /* DAC 3 */ d3->SetTitle("GTLA"); d3->GetXaxis()->SetTitle("DAC Register Value"); d3->GetYaxis()->SetTitle("Output Voltage V"); d3->GetXaxis()->CenterTitle(); d3->GetYaxis()->CenterTitle(); d3->GetYaxis()->SetTitleOffset(1.5); d3->Fit("lin","R"); d3->SetLineWidth(2); lin->GetParameters(&par[4]); /* DAC 4 */ d4->SetTitle("GTLD"); d4->GetXaxis()->SetTitle("DAC Register Value"); d4->GetYaxis()->SetTitle("Output Voltage V"); d4->GetXaxis()->CenterTitle(); d4->GetYaxis()->CenterTitle(); d4->GetYaxis()->SetTitleOffset(1.5); d4->Fit("lin","R"); d4->SetLineWidth(2); lin->GetParameters(&par[6]); /* DAC 5 */ d5->SetTitle("DRMID"); d5->GetXaxis()->SetTitle("DAC Register Value"); d5->GetYaxis()->SetTitle("Output Voltage V"); d5->GetXaxis()->CenterTitle(); d5->GetYaxis()->CenterTitle(); d5->GetYaxis()->SetTitleOffset(1.5); d5->Fit("lin","R"); d5->SetLineWidth(2); lin->GetParameters(&par[8]); /* DAC 6 */ d6->SetTitle("DRHI"); d6->GetXaxis()->SetTitle("DAC Register Value"); d6->GetYaxis()->SetTitle("Output Voltage V"); d6->GetXaxis()->CenterTitle(); d6->GetYaxis()->CenterTitle(); d6->GetYaxis()->SetTitleOffset(1.5); d6->Fit("lin","R"); d6->SetLineWidth(2); lin->GetParameters(&par[10]); /* Insert Graphs into Canvas */ gStyle->SetOptFit(0001); cc->cd(1); d1->Draw("AC+"); cc->cd(2); d2->Draw("AC+"); cc->cd(3); d3->Draw("AC+"); cc->cd(4); d4->Draw("AC+"); cc->cd(5); d5->Draw("AC+"); cc->cd(6); d6->Draw("AC+"); cc->Update(); /* Write Fit Parameters to File */ dataout<<"DAC"<<'\t'<<"Gradient"<<'\t'<<"Offset"<