More work towards plotting implantation profiles.

This commit is contained in:
salman 2009-11-20 13:19:51 +00:00
parent 68a38ee357
commit 17b4ebbc2f
4 changed files with 2993 additions and 23 deletions

2788
trimsp/TrimSPGUI/TrimSP.pl Normal file

File diff suppressed because it is too large Load Diff

View File

@ -8,29 +8,13 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>722</width> <width>719</width>
<height>601</height> <height>610</height>
</rect> </rect>
</property> </property>
<property name="caption"> <property name="caption">
<string>TrimSP GUI</string> <string>TrimSP GUI</string>
</property> </property>
<widget class="QProgressBar">
<property name="name">
<cstring>Progress</cstring>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>525</y>
<width>715</width>
<height>20</height>
</rect>
</property>
<property name="frameShape">
<enum>WinPanel</enum>
</property>
</widget>
<widget class="QTabWidget"> <widget class="QTabWidget">
<property name="name"> <property name="name">
<cstring>tabs</cstring> <cstring>tabs</cstring>
@ -38,7 +22,7 @@
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>5</y>
<width>715</width> <width>715</width>
<height>525</height> <height>525</height>
</rect> </rect>
@ -2095,6 +2079,22 @@
</widget> </widget>
</widget> </widget>
</widget> </widget>
<widget class="QProgressBar">
<property name="name">
<cstring>Progress</cstring>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>530</y>
<width>715</width>
<height>20</height>
</rect>
</property>
<property name="frameShape">
<enum>WinPanel</enum>
</property>
</widget>
</widget> </widget>
<menubar> <menubar>
<property name="name"> <property name="name">
@ -2107,8 +2107,8 @@
</item> </item>
<item text="&amp;Plot" name="Plot"> <item text="&amp;Plot" name="Plot">
<separator/> <separator/>
<action name="editFindAction"/> <action name="plotProfilesAction"/>
<action name="plotPlot_FractionsAction"/> <action name="plotFractionsAction"/>
</item> </item>
<item text="&amp;Help" name="helpMenu"> <item text="&amp;Help" name="helpMenu">
<action name="helpContentsAction"/> <action name="helpContentsAction"/>
@ -2305,7 +2305,7 @@
</action> </action>
<action> <action>
<property name="name"> <property name="name">
<cstring>editFindAction</cstring> <cstring>plotProfilesAction</cstring>
</property> </property>
<property name="iconSet"> <property name="iconSet">
<iconset>image11</iconset> <iconset>image11</iconset>
@ -2364,7 +2364,10 @@
</action> </action>
<action> <action>
<property name="name"> <property name="name">
<cstring>plotPlot_FractionsAction</cstring> <cstring>plotFractionsAction</cstring>
</property>
<property name="enabled">
<bool>false</bool>
</property> </property>
<property name="iconSet"> <property name="iconSet">
<iconset>image12</iconset> <iconset>image12</iconset>
@ -2535,6 +2538,12 @@
<receiver>TrimSPGUI</receiver> <receiver>TrimSPGUI</receiver>
<slot>StartSequenceOne()</slot> <slot>StartSequenceOne()</slot>
</connection> </connection>
<connection>
<sender>plotProfilesAction</sender>
<signal>activated()</signal>
<receiver>TrimSPGUI</receiver>
<slot>PlotProfiles()</slot>
</connection>
</connections> </connections>
<includes> <includes>
<include location="local" impldecl="in implementation">TrimSPGUI.ui.h</include> <include location="local" impldecl="in implementation">TrimSPGUI.ui.h</include>
@ -2549,6 +2558,8 @@
<slot>StartSequenceOne()</slot> <slot>StartSequenceOne()</slot>
<slot>DirectoryBrowse()</slot> <slot>DirectoryBrowse()</slot>
<slot>ConfirmQuit()</slot> <slot>ConfirmQuit()</slot>
<slot>PlotProfiles()</slot>
<slot>PlotFraction()</slot>
</slots> </slots>
<layoutdefaults spacing="6" margin="11"/> <layoutdefaults spacing="6" margin="11"/>
</UI> </UI>

View File

@ -608,3 +608,26 @@ void TrimSPGUI::ConfirmQuit()
# print STDOUT $ENV{'TRIMBIN'}."\n"; # print STDOUT $ENV{'TRIMBIN'}."\n";
} }
void TrimSPGUI::PlotProfiles()
{
my $files_ref=Qt::FileDialog::getOpenFileNames(
"RGE Files (*.rge)",
"./",
this,
"Select RGE files dialog",
"Choose RGE file to plot");
my @files = @$files_ref;
my $filenames=join(",",@files);
print "Selected file: $filenames\n";
# Now that we have the file list send it to root macro for plotting.
}
void TrimSPGUI::PlotFraction()
{
}

148
trimsp/TrimSPGUI/plotRge.C Normal file
View File

@ -0,0 +1,148 @@
// File: plotRge.C
// Author: Andreas Suter
// Date: 03/06/2009
// Purpose: ROOT macro to read and plot Range data from trimsp calculation
// Assume following file Format:
// Very simple at the moment...
//
// $Id$
//
// DEPTH PARTICLES
// 15. 260
// 45. 595
// 75. 820
// 105. 1179
//
// plotRge(names), e.g.
// plotRge("InSne_E2500, InSne_E4000");
// will read files
void plotRge(TString &names)
{
if (names.CompareTo("help", TString::kIgnoreCase) == 0) {
cout << endl << "usage: plotRge(<names>) or plotRge(\"help\")";
cout << endl << " <names> is a list of rge-files";
cout << endl << endl;
return;
}
TObjArray *tokens;
TObjString *ostr;
TString str;
char cstr[128];
Int_t i, j;
Int_t nStep = 0;
Double_t *depth;
Double_t *nStop;
Double_t norm;
Double_t intNorm;
Double_t normStop[1000];
TGraph *rge[1000];
tokens = names.Tokenize(" \t,;");
Double_t min = 0, max = 0;
for (i=0; i<tokens->GetEntries(); i++) {
ostr = dynamic_cast<TObjString*>(tokens->At(i));
str = ostr->GetString();
cout << endl << i << ": read " << str.Data();
TGraph *fileGraph = new TGraph(str);
if ( fileGraph->IsZombie() ){
cout << endl;
cout << "File " << str << " does not exist!!!" << endl << endl;
return;
}
depth = fileGraph->GetX();
nStop = fileGraph->GetY();
nStep = fileGraph->GetN();
// calculate stops/nm
norm = depth[1] - depth[0];
intNorm = 0.0;
for (j=0; j<nStep; j++) {
intNorm += nStop[j];
}
for (j=0; j<nStep; j++) {
if (norm > 0.) {
normStop[j] = nStop[j]/norm*10.0/intNorm;
} else {
normStop[j] = -1.;
}
depth[j] = depth[j]/10.; // scale depth to nm
if (normStop[j] > max)
max = normStop[j];
if (normStop[j] < min)
min = normStop[j];
}
rge[i] = new TGraph(nStep, depth, normStop);
ostr = dynamic_cast<TObjString*>(tokens->At(i));
str = ostr->GetString() + ", ";
sprintf(cstr, "%.1lf", ostr->GetString().Atof() /1000.0);
str += cstr;
str += " (keV)";
rge[i]->SetTitle(str.Data());
rge[i]->SetFillColor(TColor::kWhite);
delete fileGraph;
}
cout << endl;
Int_t color[1000];
for (i=0; i<1000; i++)
color[i] = -1;
color[0] = TColor::kRed;
color[1] = TColor::kGreen;
color[2] = TColor::kBlue;
color[3] = TColor::kMagenta;
color[4] = TColor::kOrange;
color[5] = TColor::kViolet;
color[6] = TColor::kAzure+7;
color[7] = TColor::kOrange+4;
color[8] = TColor::kBlue-7;
Int_t last = tokens->GetEntries()-1;
rge[last]->SetMarkerStyle(20);
rge[last]->GetXaxis()->SetTitle("depth (nm)");
rge[last]->GetYaxis()->SetTitle("normalized stopping distribution (nm^{-1})");
TCanvas *c1 = new TCanvas("c1", "rge plot");
c1->Show();
rge[last]->Draw("apl");
rge[last]->GetYaxis()->SetRangeUser(min, 1.05*max);
Int_t col;
for (i=0; i<last; i++) {
if (color[i] >= 0) {
rge[i]->SetMarkerColor(color[i]);
rge[i]->SetLineColor(color[i]);
} else {
TRandom *rand = new TRandom(i);
col = TColor::GetColor((Int_t)rand->Integer(255),(Int_t)rand->Integer(255),(Int_t)rand->Integer(255));
rge[i]->SetMarkerColor(col);
rge[i]->SetLineColor(col);
delete rand;
}
rge[i]->SetMarkerStyle(20);
rge[i]->Draw("plsame");
}
TLegend *legend = new TLegend(0.7, 0.7, 0.95, 0.95);
legend->SetFillColor(TColor::GetColor(255,255,255)); // white
for (i=0; i<tokens->GetEntries(); i++) {
legend->AddEntry(rge[i]);
}
legend->Draw();
delete tokens;
}