// File: plotFrc.C // Author: Zaher Salman // Date: 11/01/2012 // Purpose: ROOT macro to read and plot implantation fractions in layers from trimsp calculation // Assume following file Format: // // $Id$ // // Energy SigmaE Alpha SigAlpha ntot imp backsc trans tried negE impL1 impL2 impL3 impL4 impL5 impL6 impL7 range straggeling Eback sigEback Etrans SigEtrans red. E PRC // 15.00 0.45 0.00 15.00 100000 98362 1638 0 100000 0 98362 0 0 0 0 0 0 0.6664E+03 0.1799E+03 0.4980E+04 0.4250E+04 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 // plotFrc(file_name) void plotFrc(char *FileName) { TObjString *ostr; TString str,xlab,ylab; TString line, label, treeLabel; TString rootFileName; TObjArray *token; TObjString *strtoken; Int_t nPars = 0; Int_t ntokens = 0; Int_t i = 0; Int_t nline=0; Ssiz_t pos; Double_t x[100],yl1[100],yl2[100],yl3[100],yl4[100],yl5[100],yl6[100],yl7[100]; FILE *fp = fopen(FileName,"r"); if ( fp == NULL ){ printf("File %s does not exist!\n", FileName); return; } while (line.Gets(fp)){ if ( nline==0 ){ // First line, get data labels nline++; token = line.Tokenize(" "); ntokens = token->GetEntries(); nPars=ntokens; ostr = dynamic_cast(token->At(0)); xlab = ostr->GetString(); ostr = dynamic_cast(token->At(10)); ylab = ostr->GetString(); } else { token = line.Tokenize(" "); ntokens = token->GetEntries(); strtoken = (TObjString*) token->At(0); label = strtoken->GetName(); x[i] = label.Atof(); // Plot all layers for now. Maybe stop when sum is zero in the future // Layers start from column # 10 up to 16. // for (col=10;col<17;col++) { strtoken = (TObjString*) token->At(10); label = strtoken->GetName(); yl1[i] = label.Atof(); printf("(x,y)[%d]= (%f,%f)\n",i,x[i],yl1[i]); strtoken = (TObjString*) token->At(11); label = strtoken->GetName(); yl2[i] = label.Atof(); strtoken = (TObjString*) token->At(12); label = strtoken->GetName(); yl3[i] = label.Atof(); strtoken = (TObjString*) token->At(13); label = strtoken->GetName(); yl4[i] = label.Atof(); strtoken = (TObjString*) token->At(14); label = strtoken->GetName(); yl5[i] = label.Atof(); strtoken = (TObjString*) token->At(15); label = strtoken->GetName(); yl6[i] = label.Atof(); strtoken = (TObjString*) token->At(16); label = strtoken->GetName(); yl7[i] = label.Atof(); //} // delete token; nline++; i++; } } TCanvas *c = new TCanvas("c",str); TGraph *gr1 = new TGraph(i-1,x,yl1); gr1->GetXaxis()->SetTitle(xlab); gr1->GetYaxis()->SetTitle(ylab); gr1->Draw("AC*"); TGraph *gr2 = new TGraph(i-1,x,yl2); gr2->Draw("C*"); TGraph *gr3 = new TGraph(i-1,x,yl3); gr3->Draw("C*"); TGraph *gr4 = new TGraph(i-1,x,yl4); gr4->Draw("C*"); TGraph *gr5 = new TGraph(i-1,x,yl5); gr5->Draw("C*"); TGraph *gr6 = new TGraph(i-1,x,yl6); gr6->Draw("C*"); TGraph *gr7 = new TGraph(i-1,x,yl7); gr7->Draw("C*"); c->Show(); // I am not sure what this does, but it waits until canvas is closed c->WaitPrimitive(" "); cout << endl << "Canvas Closed" << endl ; // Then quit root cleanly gApplication->Terminate(); }