#include "TFile.h" #include "TH2.h" #include "TH1.h" #include "TF1.h" #include "TGraphErrors.h" #include "iostream" #include <stdio.h> #include "Riostream.h" #include <math.h> #include <stdlib.h> #include <string> #include <vector> #include "TRandom.h" #include "TGraph.h" #include "TMultiGraph.h" #include "TCanvas.h" #include "TMath.h" #include "TLegend.h" //script opens the kepler-histograms sent by submitRes.py to the grid, specifically taking the unbiased residual for the DUT (plane 4) for both X and Y. //Fits a guassian to each of the residuals and stores the mean and rms. //Plots them as a function of Bias or Angle, where the bias and angle values are stored in runList.txt //stores them as a .png and .root file format (in LHCb style) //run as root -b if you dont want canvas printed to screen. //MAY need to change path in ~L62 to your own!!!!! //Emma Buchanan May 2015 (emma.buchanan@cern.ch) void res_analysis(){ //-------Change Parameters Here------// const int job = 9; //job number const int run =5; //number of subjobs in this job const int beg= 13; //from runList.txt what is the range of the "Block" begining->end const int end= 17; int choice =0; //Is this an Bias or angle scan? (0 for Bias, 1 for angle) const int iplane =4; //number of the plane you wish to analyse (DUT =4) //saving the final plot as a .png, and/or root file char plot_bias[200]; //the name of the plot, will be printed to a .png at the end of this script. sprintf(plot_bias, "%s", "sensor_bias_scan.png"); char plot_angle[200]; sprintf(plot_angle, "%s", "sensor_angle_scan.png"); char root_plotb[100]; //this .root file will contain the final plot/s sprintf(root_plotb, "%s", "sensor_bias_scan.root"); char root_plota[100]; //this .root file will contain the final plot/s sprintf(root_plota, "%s", "sensor_angle_scan.root"); //----------end of parameters--------// //Reading kepler histograms and fitting gaussian to DUT float DUT_meanX[run]; float DUT_rmsX[run]; //fit parameters for X float DUT_meanY[run]; float DUT_rmsY[run]; //fit parameters for Y TF1 *gauss = new TF1("gauss","gaus"); TH1F *XDUT[run]; TH1F *YDUT[run]; TCanvas *Xcanvas[run]; TCanvas *Ycanvas[run]; //opening the DUT (plane 4) from the kepler-histos and fitting a gaussian to each. char filename[100]; char locationX[100]; char locationY[100]; TFile *openFile[100]; for (int subjob =0; subjob<run; subjob++){ sprintf(filename, "%s%d%s%d%s","/afs/cern.ch/user/e/ebuchana/gangadir/workspace/ebuchana/LocalXML/",job,"/",subjob,"/output/Kepler-histos.root "); //the location of each root file for each run sprintf(locationX, "%s%d", "Tb/TbTrackPlots/BiasedResiduals/GlobalX/Plane",iplane); //location of the biased residual of the DUT sprintf(locationY, "%s%d", "Tb/TbTrackPlots/BiasedResiduals/GlobalY/Plane",iplane); //location of the biased residual of the DUT cout << filename << endl; openFile[subjob] = new TFile(filename); //opening the root files //------------------ For X ------------------// cout << locationX << endl; Xcanvas[subjob] = new TCanvas(); //creating a canvas for each histogram Xcanvas[subjob]->SetTitle("X Biased Residal for DUT"); //setting canvas title XDUT[subjob] = (TH1F*)openFile[subjob]->Get(locationX); //getting each of the histograms from the kepler root files XDUT[subjob]->Fit("gauss", "R"); //fitting guassian DUT_meanX[subjob]=XDUT[subjob]->GetFunction("gauss")->GetParameter(1); //getting the mean of the postion DUT_rmsX[subjob]=XDUT[subjob]->GetFunction("gauss")->GetParameter(2); //this should be the RMS cout << "DUT mean X\t" << DUT_meanX[subjob] <<endl; cout << "DUT rms X\t" << DUT_rmsX[subjob] <<endl; //------------------ For Y ------------------// cout << locationY << endl; Ycanvas[subjob] = new TCanvas(); //creating a canvas for each histogram Ycanvas[subjob]->SetTitle("Y Biased Residal for DUT"); //setting canvas title YDUT[subjob] = (TH1F*)openFile[subjob]->Get(locationY); //getting each of the histograms from the kepler root files YDUT[subjob]->Fit("gauss", "R"); //fitting guassian DUT_meanY[subjob]=YDUT[subjob]->GetFunction("gauss")->GetParameter(1); //getting the mean of the postion DUT_rmsY[subjob]=YDUT[subjob]->GetFunction("gauss")->GetParameter(2); //this should be the RMS cout << "DUT mean Y\t" << DUT_meanY[subjob] <<endl; cout << "DUT rms Y\t" << DUT_rmsY[subjob] <<endl; } //Printing to the DUT histograms and gaussian fits to a new root file char rootFile[100]; sprintf(rootFile, "%s", "root_res_analysis.root"); cout << "creating\t" << rootFile << endl; TFile *myfile = new TFile(rootFile,"RECREATE"); // creating rootfile for (int subjob =0; subjob<run; subjob++){ XDUT[subjob]->Write(); //writing the plots to file YDUT[subjob]->Write(); //writing the plots to file } //Reading in the parameters from runList.txt char runList[100]; char str1[10],str2[10],str3[10],str4[10],str5[10],str6[10]; float a,b,c,f; char d[100], e[100]; float full_Angle[100], full_Bias[100], length[100]; float Angle[run], Bias[run], rmsX[run]; int r =0; sprintf(runList, "%s", "/afs/cern.ch/user/e/ebuchana/cmtuser/KEPLER/KEPLER_HEAD/Tb/Kepler/options/ResStudies/runList.txt"); FILE * runFile = fopen (runList,"read"); cout << "reading in runList.txt " << endl; fscanf(runFile, "%s \t %s \t %s \t %s \t %s \t %s", str1,str2,str3,str4,str5,str6); while (!feof(runFile)){ fscanf(runFile,"%f \t %f \t %f \t %s \t %s \t %f", &a, &b, &c, d, e, &f); full_Angle[r]=b;// all angles in runList.txt full_Bias[r]=c; // all bias voltages in runList.txt length[r]=f; // number of line in runList.txt r++; } //initalisng arrays (may not be needed) for (int range =beg-1; range <end; range ++){ Angle[range]=0; Bias[range]=0; } //saving the range of bias and angles that you need from the full set of parameters int in =0; for (int range =beg-1; range <end; range ++){ Angle[in]=full_Angle[range]; Bias[in]=full_Bias[range]; in++; } //Plots after this line will be in the LHCb style format. gROOT-> ProcessLine(".x lhcbStyle.C"); if (choice==0){ //if Bias scan //--------- for X ----------// TCanvas *c1 = new TCanvas("c1", "Bias vs Xrms (DUT)"); TGraph *g1 = new TGraph(run, Bias, DUT_rmsX); g1->Draw("ap"); g1->SetTitle("Bias vs. DUT rms; Bias Voltage; DUT X spatial resolution "); c1->Print(plot_bias); c1->Print(root_plotb); //--------- for Y ----------// TCanvas *c2 = new TCanvas("c2", "Bias vs Yrms (DUT)"); TGraph *g2 = new TGraph(run, Bias, DUT_rmsY); g2->Draw("ap"); g2->SetTitle("Bias vs. DUT rms; Bias Voltage; DUT Y spatial resolution "); // c2->Print(plot_bias); // c2->Print(root_plotb); } else{ //if angle scan TCanvas *c3 = new TCanvas("c3", "Angle vs Xrms (DUT)"); TGraph *g3 = new TGraph(run, Angle, DUT_rmsX); g3->Draw("ap"); c3->Print(plot_angle); c3->Print(root_plota); TCanvas *c4 = new TCanvas("c4", "Angle vs Yrms (DUT)"); TGraph *g4 = new TGraph(run, Angle, DUT_rmsY); g4->Draw("ap"); // c4->Print(plot_angle); // c4->Print(root_plota); } }