// 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,*labels; TObjString *strtoken; Int_t nPars = 0; Int_t ntokens = 0; Int_t i = 0; Int_t nline=0; Int_t intNorm=0; Ssiz_t pos; Double_t x[100],yl1[100],yl2[100],yl3[100],yl4[100],yl5[100],yl6[100],yl7[100],bck[100]; Int_t Flag[7]=0; 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++; labels = line.Tokenize(" "); ntokens = labels->GetEntries(); nPars=ntokens; ostr = dynamic_cast(labels->At(0)); xlab = ostr->GetString(); 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(6); label = strtoken->GetName(); bck[i] = label.Atof(); if (bck[i]>0) { Flag[7]=1; intNorm = intNorm++; } strtoken = (TObjString*) token->At(10); label = strtoken->GetName(); yl1[i] = label.Atof(); if (yl1[i]>0) { Flag[0]=1; intNorm = intNorm++; } strtoken = (TObjString*) token->At(11); label = strtoken->GetName(); yl2[i] = label.Atof(); if (yl2[i]>0) { Flag[1]=1; intNorm = intNorm++; } strtoken = (TObjString*) token->At(12); label = strtoken->GetName(); yl3[i] = label.Atof(); if (yl3[i]>0) { Flag[2]=1; intNorm = intNorm++; } strtoken = (TObjString*) token->At(13); label = strtoken->GetName(); yl4[i] = label.Atof(); if (yl4[i]>0) { Flag[3]=1; intNorm = intNorm++; } strtoken = (TObjString*) token->At(14); label = strtoken->GetName(); yl5[i] = label.Atof(); if (yl5[i]>0) { Flag[4]=1; intNorm = intNorm++; } strtoken = (TObjString*) token->At(15); label = strtoken->GetName(); yl6[i] = label.Atof(); if (yl6[i]>0) { Flag[5]=1; intNorm = intNorm++; } strtoken = (TObjString*) token->At(16); label = strtoken->GetName(); yl7[i] = label.Atof(); if (yl7[i]>0) { Flag[6]=1; intNorm = intNorm++; } //} nline++; i++; } } TCanvas *c = new TCanvas("c",str); c->Show(); TLegend *legend = new TLegend(0.8, 0.8, 0.95, 0.95); legend->SetFillColor(TColor::GetColor(255,255,255)); // white TMultiGraph *mg = new TMultiGraph(); if (Flag[0]==1){ TGraph *gr1 = new TGraph(i-1,x,yl1); gr1->GetXaxis()->SetTitle(xlab); gr1->GetYaxis()->SetTitle("Implanted Fraction"); // gr1->Draw("APC"); gr1->SetMarkerStyle(20); gr1->SetMarkerColor(TColor::kRed); gr1->SetLineColor(TColor::kRed); legend->AddEntry(gr1,"Layer 1"); mg->Add(gr1); } if (Flag[1]==1){ TGraph *gr2 = new TGraph(i-1,x,yl2); gr2->SetMarkerStyle(20); gr2->SetMarkerColor(TColor::kGreen); gr2->SetLineColor(TColor::kGreen); // gr2->Draw("PC"); legend->AddEntry(gr2,"Layer 2"); mg->Add(gr2); } if (Flag[2]==1){ TGraph *gr3 = new TGraph(i-1,x,yl3); gr3->SetMarkerStyle(20); gr3->SetMarkerColor(TColor::kBlue); gr3->SetLineColor(TColor::kBlue); // gr3->Draw("PC"); legend->AddEntry(gr3,"Layer 3"); mg->Add(gr3); } if (Flag[3]==1){ TGraph *gr4 = new TGraph(i-1,x,yl4); gr4->SetMarkerStyle(20); gr4->SetMarkerColor(TColor::kMagenta); gr4->SetLineColor(TColor::kMagenta); // gr4->Draw("PC"); legend->AddEntry(gr4,"Layer 4"); mg->Add(gr4); } if (Flag[4]==1){ TGraph *gr5 = new TGraph(i-1,x,yl5); gr5->SetMarkerStyle(20); gr5->SetMarkerColor(TColor::kOrange); gr5->SetLineColor(TColor::kOrange); // gr5->Draw("PC"); legend->AddEntry(gr5,"Layer 5"); mg->Add(gr5); } if (Flag[5]==1){ TGraph *gr6 = new TGraph(i-1,x,yl6); gr6->SetMarkerStyle(20); gr6->SetMarkerColor(TColor::kViolet); gr6->SetLineColor(TColor::kViolet); // gr6->Draw("PC"); legend->AddEntry(gr6,"Layer 6"); mg->Add(gr6); } if (Flag[6]==1){ TGraph *gr7 = new TGraph(i-1,x,yl7); gr7->SetMarkerStyle(20); gr7->SetMarkerColor(TColor::kAzure+7); gr7->SetLineColor(TColor::kAzure+7); // gr7->Draw("PC"); legend->AddEntry(gr7,"Layer 7"); mg->Add(gr7); } if (Flag[7]==1){ TGraph *gr8 = new TGraph(i-1,x,bck); gr8->SetMarkerStyle(20); gr8->SetMarkerColor(TColor::kAzure+7); gr8->SetLineColor(TColor::kAzure+7); // gr8->Draw("PC"); legend->AddEntry(gr8,"Back Scat."); mg->Add(gr8); } mg->Draw("APC"); mg->GetXaxis()->SetTitle("Energy [keV]"); mg->GetYaxis()->SetTitle("Implanted Particles"); legend->Draw(); // 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(); }