diff --git a/trimsp/src/Makefile b/trimsp/src/Makefile index f5fd25c..a91a6e0 100644 --- a/trimsp/src/Makefile +++ b/trimsp/src/Makefile @@ -16,13 +16,13 @@ DIALECT = prefix = /usr/local OPS=-c $(DIALECT) $(WARN) $(DEBUG) -all : trimsp7l +all : trimspNL -trimsp7l : trimsp7l.F +trimsp7l : trimspNL.F $(FC) -o $@ $< clean: - rm -f *.o *~ \#* .#* trimsp7l + rm -f *.o *~ \#* .#* trimspNL install: - mv trimsp7l $(prefix)/bin/. + mv trimspNL $(prefix)/bin/. diff --git a/trimsp/src/TrimSPGUI/TrimSP b/trimsp/src/TrimSPGUI/TrimSP index 046ce01..463547a 100755 --- a/trimsp/src/TrimSPGUI/TrimSP +++ b/trimsp/src/TrimSPGUI/TrimSP @@ -1,7 +1,7 @@ #!/bin/bash # Copyright 2009 by Zaher Salman and the LEM Group. -export TRIMBIN=/usr/local/bin/trimsp7l +export TRIMBIN=/usr/local/bin/trimspNL export PERLLIB=$HOME/LEM/simulation/trimsp/src/TrimSPGUI perl $PERLLIB/TrimSPGUI.pl diff --git a/trimsp/src/TrimSPGUI/TrimSP.cfg b/trimsp/src/TrimSPGUI/TrimSP.cfg index 9eba22a..c17d8c9 100644 --- a/trimsp/src/TrimSPGUI/TrimSP.cfg +++ b/trimsp/src/TrimSPGUI/TrimSP.cfg @@ -1,12 +1,12 @@ [Layers] -NL=1 +NL=2 L1Comp=SrTiO3 L1rho=5.12 L1d=200 -L2Comp= -L2rho= -L2d= +L2Comp=LaAlO3 +L2rho=6.7 +L2d=200 L3Comp= L3rho= L3d= @@ -36,12 +36,14 @@ Seed= 78741. [Files] FNPre=SrTiO3 -Path=./ +Path=/tmp/. [ScanSequence] ScanSeq= ERadio=1 SigERadio= +AngleRadio= +SigAngleRadio= NProjRadio= dRadio= ListRadio= diff --git a/trimsp/src/TrimSPGUI/TrimSPGUI.pl b/trimsp/src/TrimSPGUI/TrimSPGUI.pl index f0c3f19..f368c37 100644 --- a/trimsp/src/TrimSPGUI/TrimSPGUI.pl +++ b/trimsp/src/TrimSPGUI/TrimSPGUI.pl @@ -1,6 +1,6 @@ # Form implementation generated from reading ui file 'TrimSPGUI.ui' # -# Created: Wed Mar 13 15:36:56 2013 +# Created: Thu Apr 4 13:53:16 2013 # by: The PerlQt User Interface Compiler (puic) # # WARNING! All changes made in this file will be lost! @@ -16,6 +16,7 @@ use Qt::isa qw(Qt::MainWindow); use Qt::slots ToggleScanSingle => [], PrepLayers => [], + removeRowFromTable => [], ProjSmartDefaults => [], OpenHelpWindow => [], CollectValues => [], @@ -36,40 +37,6 @@ use Qt::attributes qw( Progress tabs LayersTab - groupBox1 - textLabel1_4 - NL - textLabel2_4 - textLabel3 - textLabel4 - BoxL1 - L1rho - L1d - L1Comp - BoxL2 - L2rho - L2d - L2Comp - BoxL3 - L3Comp - L3rho - L3d - BoxL4 - L4Comp - L4rho - L4d - BoxL5 - L5Comp - L5rho - L5d - BoxL6 - L6Comp - L6rho - L6d - BoxL7 - L7Comp - L7rho - L7d ProjParam textLabel1 ProjType @@ -97,6 +64,10 @@ use Qt::attributes qw( Browse Start Quit + groupBox1 + textLabel1_4 + NL + LayerTable AddParTab AddParam textLabelEF @@ -1319,161 +1290,26 @@ sub NEW tabs = Qt::TabWidget(centralWidget(), "tabs"); tabs->setGeometry( Qt::Rect(11, 11, 714, 526) ); + tabs->setSizePolicy( Qt::SizePolicy(4, 4, 0, 0, tabs->sizePolicy()->hasHeightForWidth()) ); LayersTab = Qt::Widget(tabs, "LayersTab"); - groupBox1 = Qt::GroupBox(LayersTab, "groupBox1"); - groupBox1->setGeometry( Qt::Rect(5, 0, 445, 485) ); - groupBox1->setFrameShape( &Qt::GroupBox::GroupBoxPanel() ); - groupBox1->setFrameShadow( &Qt::GroupBox::Sunken() ); + my $LayoutWidget = Qt::Widget(LayersTab, '$LayoutWidget'); + $LayoutWidget->setGeometry( Qt::Rect(455, 0, 250, 480) ); + my $layout13 = Qt::VBoxLayout($LayoutWidget, 0, 0, '$layout13'); - my $LayoutWidget = Qt::Widget(groupBox1, '$LayoutWidget'); - $LayoutWidget->setGeometry( Qt::Rect(5, 20, 435, 460) ); - my $layout27 = Qt::VBoxLayout($LayoutWidget, 11, 3, '$layout27'); + ProjParam = Qt::GroupBox($LayoutWidget, "ProjParam"); - my $layout19 = Qt::HBoxLayout(undef, 0, 6, '$layout19'); - - textLabel1_4 = Qt::Label($LayoutWidget, "textLabel1_4"); - $layout19->addWidget(textLabel1_4); - - NL = Qt::SpinBox($LayoutWidget, "NL"); - NL->setMaxValue( int(7) ); - NL->setMinValue( int(1) ); - $layout19->addWidget(NL); - my $spacer = Qt::SpacerItem(251, 20, &Qt::SizePolicy::Expanding, &Qt::SizePolicy::Minimum); - $layout19->addItem($spacer); - $layout27->addLayout($layout19); - - my $layout26 = Qt::HBoxLayout(undef, 0, 6, '$layout26'); - - textLabel2_4 = Qt::Label($LayoutWidget, "textLabel2_4"); - textLabel2_4->setSizePolicy( Qt::SizePolicy(0, 1, 0, 0, textLabel2_4->sizePolicy()->hasHeightForWidth()) ); - $layout26->addWidget(textLabel2_4); - my $spacer_2 = Qt::SpacerItem(101, 20, &Qt::SizePolicy::Fixed, &Qt::SizePolicy::Minimum); - $layout26->addItem($spacer_2); - - textLabel3 = Qt::Label($LayoutWidget, "textLabel3"); - textLabel3->setSizePolicy( Qt::SizePolicy(1, 5, 0, 0, textLabel3->sizePolicy()->hasHeightForWidth()) ); - $layout26->addWidget(textLabel3); - - textLabel4 = Qt::Label($LayoutWidget, "textLabel4"); - $layout26->addWidget(textLabel4); - $layout27->addLayout($layout26); - - BoxL1 = Qt::GroupBox($LayoutWidget, "BoxL1"); - BoxL1->setMargin( int(0) ); - - L1rho = Qt::LineEdit(BoxL1, "L1rho"); - L1rho->setGeometry( Qt::Rect(200, 20, 111, 25) ); - - L1d = Qt::LineEdit(BoxL1, "L1d"); - L1d->setGeometry( Qt::Rect(320, 20, 85, 25) ); - L1d->setSizePolicy( Qt::SizePolicy(0, 0, 0, 0, L1d->sizePolicy()->hasHeightForWidth()) ); - - L1Comp = Qt::LineEdit(BoxL1, "L1Comp"); - L1Comp->setGeometry( Qt::Rect(10, 20, 180, 25) ); - $layout27->addWidget(BoxL1); - - BoxL2 = Qt::GroupBox($LayoutWidget, "BoxL2"); - BoxL2->setEnabled( 0 ); - - L2rho = Qt::LineEdit(BoxL2, "L2rho"); - L2rho->setGeometry( Qt::Rect(200, 20, 111, 25) ); - - L2d = Qt::LineEdit(BoxL2, "L2d"); - L2d->setGeometry( Qt::Rect(320, 20, 85, 25) ); - L2d->setSizePolicy( Qt::SizePolicy(0, 0, 0, 0, L2d->sizePolicy()->hasHeightForWidth()) ); - - L2Comp = Qt::LineEdit(BoxL2, "L2Comp"); - L2Comp->setGeometry( Qt::Rect(10, 20, 180, 25) ); - $layout27->addWidget(BoxL2); - - BoxL3 = Qt::GroupBox($LayoutWidget, "BoxL3"); - BoxL3->setEnabled( 0 ); - - L3Comp = Qt::LineEdit(BoxL3, "L3Comp"); - L3Comp->setGeometry( Qt::Rect(10, 20, 180, 25) ); - - L3rho = Qt::LineEdit(BoxL3, "L3rho"); - L3rho->setGeometry( Qt::Rect(200, 20, 111, 25) ); - - L3d = Qt::LineEdit(BoxL3, "L3d"); - L3d->setGeometry( Qt::Rect(320, 20, 85, 25) ); - L3d->setSizePolicy( Qt::SizePolicy(0, 0, 0, 0, L3d->sizePolicy()->hasHeightForWidth()) ); - $layout27->addWidget(BoxL3); - - BoxL4 = Qt::GroupBox($LayoutWidget, "BoxL4"); - BoxL4->setEnabled( 0 ); - - L4Comp = Qt::LineEdit(BoxL4, "L4Comp"); - L4Comp->setGeometry( Qt::Rect(10, 20, 180, 25) ); - - L4rho = Qt::LineEdit(BoxL4, "L4rho"); - L4rho->setGeometry( Qt::Rect(200, 20, 111, 25) ); - - L4d = Qt::LineEdit(BoxL4, "L4d"); - L4d->setGeometry( Qt::Rect(320, 20, 85, 25) ); - L4d->setSizePolicy( Qt::SizePolicy(0, 0, 0, 0, L4d->sizePolicy()->hasHeightForWidth()) ); - $layout27->addWidget(BoxL4); - - BoxL5 = Qt::GroupBox($LayoutWidget, "BoxL5"); - BoxL5->setEnabled( 0 ); - - L5Comp = Qt::LineEdit(BoxL5, "L5Comp"); - L5Comp->setGeometry( Qt::Rect(10, 20, 180, 25) ); - - L5rho = Qt::LineEdit(BoxL5, "L5rho"); - L5rho->setGeometry( Qt::Rect(200, 20, 111, 25) ); - - L5d = Qt::LineEdit(BoxL5, "L5d"); - L5d->setGeometry( Qt::Rect(320, 20, 85, 25) ); - L5d->setSizePolicy( Qt::SizePolicy(0, 0, 0, 0, L5d->sizePolicy()->hasHeightForWidth()) ); - $layout27->addWidget(BoxL5); - - BoxL6 = Qt::GroupBox($LayoutWidget, "BoxL6"); - BoxL6->setEnabled( 0 ); - - L6Comp = Qt::LineEdit(BoxL6, "L6Comp"); - L6Comp->setGeometry( Qt::Rect(10, 20, 180, 25) ); - - L6rho = Qt::LineEdit(BoxL6, "L6rho"); - L6rho->setGeometry( Qt::Rect(200, 20, 111, 25) ); - - L6d = Qt::LineEdit(BoxL6, "L6d"); - L6d->setGeometry( Qt::Rect(320, 20, 85, 25) ); - L6d->setSizePolicy( Qt::SizePolicy(0, 0, 0, 0, L6d->sizePolicy()->hasHeightForWidth()) ); - $layout27->addWidget(BoxL6); - - BoxL7 = Qt::GroupBox($LayoutWidget, "BoxL7"); - BoxL7->setEnabled( 0 ); - - L7Comp = Qt::LineEdit(BoxL7, "L7Comp"); - L7Comp->setGeometry( Qt::Rect(10, 20, 180, 25) ); - - L7rho = Qt::LineEdit(BoxL7, "L7rho"); - L7rho->setGeometry( Qt::Rect(200, 20, 111, 25) ); - - L7d = Qt::LineEdit(BoxL7, "L7d"); - L7d->setGeometry( Qt::Rect(320, 20, 85, 25) ); - L7d->setSizePolicy( Qt::SizePolicy(0, 0, 0, 0, L7d->sizePolicy()->hasHeightForWidth()) ); - $layout27->addWidget(BoxL7); - - my $LayoutWidget_2 = Qt::Widget(LayersTab, '$LayoutWidget_2'); - $LayoutWidget_2->setGeometry( Qt::Rect(455, 0, 250, 480) ); - my $layout13 = Qt::VBoxLayout($LayoutWidget_2, 0, 0, '$layout13'); - - ProjParam = Qt::GroupBox($LayoutWidget_2, "ProjParam"); - - my $LayoutWidget_3 = Qt::Widget(ProjParam, '$LayoutWidget_3'); - $LayoutWidget_3->setGeometry( Qt::Rect(5, 25, 240, 260) ); - my $layout8 = Qt::VBoxLayout($LayoutWidget_3, 0, 0, '$layout8'); + my $LayoutWidget_2 = Qt::Widget(ProjParam, '$LayoutWidget_2'); + $LayoutWidget_2->setGeometry( Qt::Rect(5, 25, 240, 260) ); + my $layout8 = Qt::VBoxLayout($LayoutWidget_2, 0, 0, '$layout8'); my $layout7 = Qt::HBoxLayout(undef, 0, 6, '$layout7'); - textLabel1 = Qt::Label($LayoutWidget_3, "textLabel1"); + textLabel1 = Qt::Label($LayoutWidget_2, "textLabel1"); $layout7->addWidget(textLabel1); - ProjType = Qt::ComboBox(0, $LayoutWidget_3, "ProjType"); + ProjType = Qt::ComboBox(0, $LayoutWidget_2, "ProjType"); ProjType->setSizePolicy( Qt::SizePolicy(0, 0, 0, 0, ProjType->sizePolicy()->hasHeightForWidth()) ); $layout7->addWidget(ProjType); $layout8->addLayout($layout7); @@ -1482,85 +1318,85 @@ sub NEW my $layout5 = Qt::VBoxLayout(undef, 0, 0, '$layout5'); - NLabel = Qt::Label($LayoutWidget_3, "NLabel"); + NLabel = Qt::Label($LayoutWidget_2, "NLabel"); NLabel->setSizePolicy( Qt::SizePolicy(5, 5, 0, 0, NLabel->sizePolicy()->hasHeightForWidth()) ); $layout5->addWidget(NLabel); - z0Label = Qt::Label($LayoutWidget_3, "z0Label"); + z0Label = Qt::Label($LayoutWidget_2, "z0Label"); $layout5->addWidget(z0Label); - dzLabel = Qt::Label($LayoutWidget_3, "dzLabel"); + dzLabel = Qt::Label($LayoutWidget_2, "dzLabel"); $layout5->addWidget(dzLabel); - ELabel = Qt::Label($LayoutWidget_3, "ELabel"); + ELabel = Qt::Label($LayoutWidget_2, "ELabel"); $layout5->addWidget(ELabel); - SigELabel = Qt::Label($LayoutWidget_3, "SigELabel"); + SigELabel = Qt::Label($LayoutWidget_2, "SigELabel"); $layout5->addWidget(SigELabel); - AlbleLabel = Qt::Label($LayoutWidget_3, "AlbleLabel"); + AlbleLabel = Qt::Label($LayoutWidget_2, "AlbleLabel"); $layout5->addWidget(AlbleLabel); - SigAngleLabel = Qt::Label($LayoutWidget_3, "SigAngleLabel"); + SigAngleLabel = Qt::Label($LayoutWidget_2, "SigAngleLabel"); $layout5->addWidget(SigAngleLabel); - SeedLabel = Qt::Label($LayoutWidget_3, "SeedLabel"); + SeedLabel = Qt::Label($LayoutWidget_2, "SeedLabel"); $layout5->addWidget(SeedLabel); $layout6->addLayout($layout5); my $layout4 = Qt::VBoxLayout(undef, 0, 0, '$layout4'); - NProj = Qt::LineEdit($LayoutWidget_3, "NProj"); + NProj = Qt::LineEdit($LayoutWidget_2, "NProj"); NProj->setSizePolicy( Qt::SizePolicy(7, 0, 0, 0, NProj->sizePolicy()->hasHeightForWidth()) ); NProj->setMaximumSize( Qt::Size(32767, 32767) ); $layout4->addWidget(NProj); - z0 = Qt::LineEdit($LayoutWidget_3, "z0"); + z0 = Qt::LineEdit($LayoutWidget_2, "z0"); z0->setMaximumSize( Qt::Size(32767, 32767) ); $layout4->addWidget(z0); - dz = Qt::LineEdit($LayoutWidget_3, "dz"); + dz = Qt::LineEdit($LayoutWidget_2, "dz"); $layout4->addWidget(dz); - E = Qt::LineEdit($LayoutWidget_3, "E"); + E = Qt::LineEdit($LayoutWidget_2, "E"); $layout4->addWidget(E); - SigE = Qt::LineEdit($LayoutWidget_3, "SigE"); + SigE = Qt::LineEdit($LayoutWidget_2, "SigE"); $layout4->addWidget(SigE); - Angle = Qt::LineEdit($LayoutWidget_3, "Angle"); + Angle = Qt::LineEdit($LayoutWidget_2, "Angle"); $layout4->addWidget(Angle); - SigAngle = Qt::LineEdit($LayoutWidget_3, "SigAngle"); + SigAngle = Qt::LineEdit($LayoutWidget_2, "SigAngle"); $layout4->addWidget(SigAngle); - Seed = Qt::LineEdit($LayoutWidget_3, "Seed"); + Seed = Qt::LineEdit($LayoutWidget_2, "Seed"); $layout4->addWidget(Seed); $layout6->addLayout($layout4); $layout8->addLayout($layout6); $layout13->addWidget(ProjParam); - groupBox15 = Qt::GroupBox($LayoutWidget_2, "groupBox15"); + groupBox15 = Qt::GroupBox($LayoutWidget, "groupBox15"); - my $LayoutWidget_4 = Qt::Widget(groupBox15, '$LayoutWidget_4'); - $LayoutWidget_4->setGeometry( Qt::Rect(6, 23, 240, 100) ); - my $layout14 = Qt::VBoxLayout($LayoutWidget_4, 0, 0, '$layout14'); + my $LayoutWidget_3 = Qt::Widget(groupBox15, '$LayoutWidget_3'); + $LayoutWidget_3->setGeometry( Qt::Rect(6, 23, 240, 100) ); + my $layout14 = Qt::VBoxLayout($LayoutWidget_3, 0, 0, '$layout14'); - textLabelFN = Qt::Label($LayoutWidget_4, "textLabelFN"); + textLabelFN = Qt::Label($LayoutWidget_3, "textLabelFN"); $layout14->addWidget(textLabelFN); - FNPre = Qt::LineEdit($LayoutWidget_4, "FNPre"); + FNPre = Qt::LineEdit($LayoutWidget_3, "FNPre"); $layout14->addWidget(FNPre); - textLabelPath = Qt::Label($LayoutWidget_4, "textLabelPath"); + textLabelPath = Qt::Label($LayoutWidget_3, "textLabelPath"); $layout14->addWidget(textLabelPath); my $layout13_2 = Qt::HBoxLayout(undef, 0, 6, '$layout13_2'); - Path = Qt::LineEdit($LayoutWidget_4, "Path"); + Path = Qt::LineEdit($LayoutWidget_3, "Path"); $layout13_2->addWidget(Path); - Browse = Qt::PushButton($LayoutWidget_4, "Browse"); + Browse = Qt::PushButton($LayoutWidget_3, "Browse"); Browse->setSizePolicy( Qt::SizePolicy(7, 0, 0, 0, Browse->sizePolicy()->hasHeightForWidth()) ); $layout13_2->addWidget(Browse); $layout14->addLayout($layout13_2); @@ -1568,18 +1404,60 @@ sub NEW my $layout12 = Qt::HBoxLayout(undef, 4, 6, '$layout12'); - Start = Qt::PushButton($LayoutWidget_2, "Start"); + Start = Qt::PushButton($LayoutWidget, "Start"); Start->setSizePolicy( Qt::SizePolicy(7, 7, 0, 0, Start->sizePolicy()->hasHeightForWidth()) ); Start->setMinimumSize( Qt::Size(0, 25) ); Start->setPixmap( $image1 ); $layout12->addWidget(Start); - Quit = Qt::PushButton($LayoutWidget_2, "Quit"); + Quit = Qt::PushButton($LayoutWidget, "Quit"); Quit->setSizePolicy( Qt::SizePolicy(7, 7, 0, 0, Quit->sizePolicy()->hasHeightForWidth()) ); Quit->setMinimumSize( Qt::Size(0, 25) ); Quit->setPixmap( $image2 ); $layout12->addWidget(Quit); $layout13->addLayout($layout12); + + groupBox1 = Qt::GroupBox(LayersTab, "groupBox1"); + groupBox1->setGeometry( Qt::Rect(5, 0, 445, 485) ); + groupBox1->setFrameShape( &Qt::GroupBox::GroupBoxPanel() ); + groupBox1->setFrameShadow( &Qt::GroupBox::Sunken() ); + + my $LayoutWidget_4 = Qt::Widget(groupBox1, '$LayoutWidget_4'); + $LayoutWidget_4->setGeometry( Qt::Rect(8, 25, 432, 460) ); + my $layout66 = Qt::VBoxLayout($LayoutWidget_4, 11, 6, '$layout66'); + + my $layout19 = Qt::HBoxLayout(undef, 0, 6, '$layout19'); + + textLabel1_4 = Qt::Label($LayoutWidget_4, "textLabel1_4"); + $layout19->addWidget(textLabel1_4); + + NL = Qt::SpinBox($LayoutWidget_4, "NL"); + NL->setMaxValue( int(100) ); + NL->setMinValue( int(1) ); + $layout19->addWidget(NL); + my $spacer = Qt::SpacerItem(240, 20, &Qt::SizePolicy::Expanding, &Qt::SizePolicy::Minimum); + $layout19->addItem($spacer); + $layout66->addLayout($layout19); + + LayerTable = Qt::Table($LayoutWidget_4, "LayerTable"); + LayerTable->setNumCols(LayerTable->numCols() + 1); + LayerTable->horizontalHeader()->setLabel(LayerTable->numCols() - 1, trUtf8("Composition")); + LayerTable->setNumCols(LayerTable->numCols() + 1); + LayerTable->horizontalHeader()->setLabel(LayerTable->numCols() - 1, trUtf8("Density [g/cm^3]")); + LayerTable->setNumCols(LayerTable->numCols() + 1); + LayerTable->horizontalHeader()->setLabel(LayerTable->numCols() - 1, trUtf8("Thickness [Å]")); + LayerTable->setSizePolicy( Qt::SizePolicy(4, 4, 100, 100, LayerTable->sizePolicy()->hasHeightForWidth()) ); + LayerTable->setMinimumSize( Qt::Size(410, 405) ); + LayerTable->setAcceptDrops( 1 ); + LayerTable->setResizePolicy( &Qt::Table::AutoOneFit() ); + LayerTable->setDragAutoScroll( 1 ); + LayerTable->setNumRows( int(1) ); + LayerTable->setNumCols( int(3) ); + LayerTable->setRowMovingEnabled( 0 ); + LayerTable->setReadOnly( 0 ); + LayerTable->setSelectionMode( &Qt::Table::NoSelection() ); + LayerTable->setFocusStyle( &Qt::Table::FollowStyle() ); + $layout66->addWidget(LayerTable); tabs->insertTab( LayersTab, "" ); AddParTab = Qt::Widget(tabs, "AddParTab"); @@ -1789,23 +1667,23 @@ sub NEW my $LayoutWidget_6 = Qt::Widget(ConfigTab, '$LayoutWidget_6'); $LayoutWidget_6->setGeometry( Qt::Rect(10, 20, 680, 80) ); - my $layout27_2 = Qt::GridLayout($LayoutWidget_6, 1, 1, 11, 6, '$layout27_2'); + my $layout27 = Qt::GridLayout($LayoutWidget_6, 1, 1, 11, 6, '$layout27'); - my $layout26_2 = Qt::HBoxLayout(undef, 0, 6, '$layout26_2'); + my $layout26 = Qt::HBoxLayout(undef, 0, 6, '$layout26'); textLabel1_2_2 = Qt::Label($LayoutWidget_6, "textLabel1_2_2"); textLabel1_2_2->setSizePolicy( Qt::SizePolicy(0, 5, 0, 0, textLabel1_2_2->sizePolicy()->hasHeightForWidth()) ); textLabel1_2_2->setMinimumSize( Qt::Size(110, 0) ); textLabel1_2_2->setMaximumSize( Qt::Size(130, 32767) ); - $layout26_2->addWidget(textLabel1_2_2); + $layout26->addWidget(textLabel1_2_2); TrimGUIPath = Qt::LineEdit($LayoutWidget_6, "TrimGUIPath"); - $layout26_2->addWidget(TrimGUIPath); + $layout26->addWidget(TrimGUIPath); GUIPathBrowse = Qt::PushButton($LayoutWidget_6, "GUIPathBrowse"); - $layout26_2->addWidget(GUIPathBrowse); + $layout26->addWidget(GUIPathBrowse); - $layout27_2->addLayout($layout26_2, 1, 0); + $layout27->addLayout($layout26, 1, 0); my $layout25 = Qt::HBoxLayout(undef, 0, 6, '$layout25'); @@ -1821,7 +1699,7 @@ sub NEW TrimBinBrowse = Qt::PushButton($LayoutWidget_6, "TrimBinBrowse"); $layout25->addWidget(TrimBinBrowse); - $layout27_2->addLayout($layout25, 0, 0); + $layout27->addLayout($layout25, 0, 0); tabs->insertTab( ConfigTab, "" ); fileNewAction= Qt::Action(this, "fileNewAction"); @@ -1897,7 +1775,6 @@ sub NEW resize( $resize ); clearWState( &Qt::WState_Polished ); - Qt::Object::connect(L1Comp, SIGNAL "textChanged(const QString&)", this, SLOT "findDensity()"); Qt::Object::connect(TrimBinBrowse, SIGNAL "clicked()", this, SLOT "TrimBin()"); Qt::Object::connect(GUIPathBrowse, SIGNAL "clicked()", this, SLOT "GUIPath()"); Qt::Object::connect(plotFractionsAction, SIGNAL "activated()", this, SLOT "PlotFraction()"); @@ -1924,36 +1801,10 @@ sub NEW Qt::Object::connect(helpContentsAction, SIGNAL "activated()", this, SLOT "OpenHelpWindow()"); Qt::Object::connect(fileQuitAction, SIGNAL "activated()", this, SLOT "ConfirmQuit()"); Qt::Object::connect(fileChangeDirAction, SIGNAL "activated()", this, SLOT "DirectoryBrowse()"); - Qt::Object::connect(L2Comp, SIGNAL "textChanged(const QString&)", this, SLOT "findDensity()"); - Qt::Object::connect(L3Comp, SIGNAL "textChanged(const QString&)", this, SLOT "findDensity()"); - Qt::Object::connect(L4Comp, SIGNAL "textChanged(const QString&)", this, SLOT "findDensity()"); - Qt::Object::connect(L5Comp, SIGNAL "textChanged(const QString&)", this, SLOT "findDensity()"); - Qt::Object::connect(L6Comp, SIGNAL "textChanged(const QString&)", this, SLOT "findDensity()"); - Qt::Object::connect(L7Comp, SIGNAL "textChanged(const QString&)", this, SLOT "findDensity()"); + Qt::Object::connect(LayerTable, SIGNAL "valueChanged(int,int)", this, SLOT "findDensity()"); setTabOrder(tabs, NL); - setTabOrder(NL, L1Comp); - setTabOrder(L1Comp, L1rho); - setTabOrder(L1rho, L1d); - setTabOrder(L1d, L2Comp); - setTabOrder(L2Comp, L2rho); - setTabOrder(L2rho, L2d); - setTabOrder(L2d, L3Comp); - setTabOrder(L3Comp, L3rho); - setTabOrder(L3rho, L3d); - setTabOrder(L3d, L4Comp); - setTabOrder(L4Comp, L4rho); - setTabOrder(L4rho, L4d); - setTabOrder(L4d, L5Comp); - setTabOrder(L5Comp, L5rho); - setTabOrder(L5rho, L5d); - setTabOrder(L5d, L6Comp); - setTabOrder(L6Comp, L6rho); - setTabOrder(L6rho, L6d); - setTabOrder(L6d, L7Comp); - setTabOrder(L7Comp, L7rho); - setTabOrder(L7rho, L7d); - setTabOrder(L7d, ProjType); + setTabOrder(NL, ProjType); setTabOrder(ProjType, NProj); setTabOrder(NProj, z0); setTabOrder(z0, dz); @@ -1998,27 +1849,6 @@ sub NEW sub languageChange { setCaption(trUtf8("TrimSP GUI") ); - groupBox1->setTitle( trUtf8("Layers") ); - textLabel1_4->setText( trUtf8("Number of Layers") ); - Qt::WhatsThis::add(NL, trUtf8("Select the number of the layers of your structure (maximum 7 layers).")); - textLabel2_4->setText( trUtf8("Composition") ); - Qt::ToolTip::add(textLabel2_4, trUtf8("Chemical formula")); - textLabel3->setText( trUtf8("Density [g/cm3]") ); - textLabel4->setText( trUtf8("Thickness [Å]") ); - BoxL1->setTitle( trUtf8("Layer 1") ); - L1rho->setText( trUtf8("5.12") ); - Qt::WhatsThis::add(L1rho, trUtf8("Insert the density of the layer here.")); - L1d->setText( trUtf8("200") ); - Qt::WhatsThis::add(L1d, trUtf8("Insert the thickness of the layer here.")); - L1Comp->setText( trUtf8("SrTiO3") ); - Qt::ToolTip::add(L1Comp, trUtf8("Chemical formula of L1")); - Qt::WhatsThis::add(L1Comp, trUtf8("Insert the chemical formula here as you would write it.")); - BoxL2->setTitle( trUtf8("Layer 2") ); - BoxL3->setTitle( trUtf8("Layer 3") ); - BoxL4->setTitle( trUtf8("Layer 4") ); - BoxL5->setTitle( trUtf8("Layer 5") ); - BoxL6->setTitle( trUtf8("Layer 6") ); - BoxL7->setTitle( trUtf8("Layer 7") ); ProjParam->setTitle( trUtf8("Projectile parameters") ); textLabel1->setText( trUtf8("Projectile") ); ProjType->clear(); @@ -2064,6 +1894,12 @@ sub languageChange Quit->setText( undef ); Qt::ToolTip::add(Quit, trUtf8("Quit")); Qt::WhatsThis::add(Quit, trUtf8("Quit the application.")); + groupBox1->setTitle( trUtf8("Layers") ); + textLabel1_4->setText( trUtf8("Number of Layers") ); + Qt::WhatsThis::add(NL, trUtf8("Select the number of the layers of your structure (maximum 7 layers).")); + LayerTable->horizontalHeader()->setLabel( 0, trUtf8("Composition") ); + LayerTable->horizontalHeader()->setLabel( 1, trUtf8("Density [g/cm^3]") ); + LayerTable->horizontalHeader()->setLabel( 2, trUtf8("Thickness [Å]") ); tabs->changeTab( LayersTab, trUtf8("Layers") ); AddParam->setTitle( trUtf8("Additional parameters") ); textLabelEF->setText( trUtf8("EF") ); @@ -2201,6 +2037,7 @@ sub ToggleScanSingle $All{"ScandL"}=ScandL->text(); $All{"ListRadio"}=ListRadio->isChecked(); $All{"LoopRadio"}=LoopRadio->isChecked(); + $All{"NL"}=NL->text(); # Enable everything E->setDisabled(0); @@ -2213,10 +2050,9 @@ sub ToggleScanSingle # SigAngle->setText("15"); NProj->setDisabled(0); # NProj->setText("10000"); - for (my $i=1;$i<=7;$i++) { - my $LayerName = "L".$i."d"; - my $LayerAttrib = child($LayerName); - $LayerAttrib->setDisabled(0); + for (my $i=1;$i<=$All{"NL"};$i++) { + my $LayerAttrib = LayerTable->item($i-1,2); + $LayerAttrib->setEnabled(1); } # Enable depth increment for Energy scan only @@ -2247,28 +2083,21 @@ sub ToggleScanSingle Angle->setDisabled(0); SigAngle->setDisabled(0); NProj->setDisabled(0); - my $LayerName = "L".$All{"ScandL"}."d"; - my $LayerAttrib = child($LayerName); - $LayerAttrib->setDisabled(0); + LayerTable->setColumnReadOnly(2,0); # then disable one if ($All{"ERadio"}) { E->setDisabled(1); -# E->setText(""); } elsif ($All{"SigERadio"}) { SigE->setDisabled(1); -# SigE->setText(""); } elsif ($All{"AngleRadio"}) { Angle->setDisabled(1); -# Angle->setText(""); } elsif ($All{"SigAngleRadio"}) { SigAngle->setDisabled(1); -# SigAngle->setText(""); } elsif ($All{"NProjRadio"}) { NProj->setDisabled(1); -# NProj->setText(""); } elsif($All{"dRadio"}) { - $LayerAttrib->setDisabled(1); -# $LayerAttrib->setText(""); + my $LayerAttrib = LayerTable->item($All{"ScandL"}-1,2); + $LayerAttrib->setEnabled(0); } # and change title of tab to say enabled tabs->changeTab( ScansTab, trUtf8("Scans (Enabled)") ); @@ -2285,19 +2114,47 @@ sub PrepLayers my %All=(); $All{"NL"}=NL->text(); -# Enable layers up to required and disable the rest - for (my $i=1;$i<=7;$i++) { - my $LayerName = "BoxL".$i; - my $LayerAttrib = child($LayerName); - if ($i<=$All{"NL"}) { - $LayerAttrib->setDisabled(0); - } else { - $LayerAttrib->setDisabled(1); +# Prepare enough Rows in table for layers + my $OldNL=LayerTable->numRows(); + if ($OldNL<=$All{"NL"}) { + LayerTable->setNumRows($All{"NL"}); + } else { + for (my $i=$All{"NL"};$i<=$OldNL-1;$i++) { + print $i."\n"; + removeRowFromTable($i); } } } +sub removeRowFromTable +{ + +# This function is to remove rows from table +# I cannot use the standard removeRow() due to a bug in perl-qt3 +# This is a good and simple workaround. + +# Takes as an input the row number to be removed + my ($deadRow) = @_; + +# Loop over columns and take items of the row to remove + for my $col (0..LayerTable->numCols()-1) { + my $dummy=LayerTable->item($deadRow, $col); +# In the items is not defined the row can be removed by simply +# reducing the number of rows in table + if ($dummy ne "") { + LayerTable->takeItem(LayerTable->item($deadRow, $col)); + for my $row ($deadRow..LayerTable->numRows()-2) { + my $item = LayerTable->item($row+1, $col); + LayerTable->takeItem($item); + LayerTable->setItem($row, $col, $item); + } + } + } + LayerTable->setNumRows(LayerTable->numRows()-1); + +} + sub ProjSmartDefaults { @@ -2373,12 +2230,9 @@ sub CollectValues my $LComp = "L".$i."Comp"; my $Lrho="L".$i."rho"; my $Ld="L".$i."d"; - my $LCompAttrib = child($LComp); - my $LrhoAttrib=child($Lrho); - my $LdAttrib=child($Ld); - $All{"$LComp"}=$LCompAttrib->text(); - $All{"$Lrho"}=$LrhoAttrib->text(); - $All{"$Ld"}=$LdAttrib->text(); + $All{"$LComp"}=LayerTable->text($i-1,0); + $All{"$Lrho"}=LayerTable->text($i-1,1); + $All{"$Ld"}=LayerTable->text($i-1,2); } # Collect projectile parameters @@ -2486,11 +2340,18 @@ sub CreateInpFile # Values of Z,A as well as other needed parameters are obtained from Chem.pm. -# This is the form of the input file: +# This is the form of the begining of the input file: my $TemplateFile= " ProjZ ProjAM E SigE Angle SigAngle EF ESB SHEATH ERC - NProj Seed Seed Seed z0 RD dz CA KK0 KK0R KDEE1 KDEE2 IPOT IPOTR IRL - L1d L2d L3d L4d L5d L6d L7d L1rho L2rho L3rho L4rho L5rho L6rho L7rho L1CK L2CK L3CK L4CK L5CK L6CK L7CK + NProj Seed Seed Seed z0 RD dz CA KK0 KK0R KDEE1 KDEE2 IPOT IPOTR IRL"; + +# Then comes the number of layers (new format) for example 4 layers: +# N_Layers=4 + $TemplateFile=$TemplateFile."\n"."N_Layers=NL"."\n"; + +# Then loop over the layers and for each give the following structure + my $TemplateLayer= + "L1d L1rho L1CK L1ELZ1 L1ELZ2 L1ELZ3 L1ELZ4 L1ELZ5 L1ELW1 L1ELW2 L1ELW3 L1ELW4 L1ELW5 L1ELC1 L1ELC2 L1ELC3 L1ELC4 L1ELC5 @@ -2502,74 +2363,8 @@ sub CreateInpFile L1ELST13 L1ELST23 L1ELST33 L1ELST43 L1ELST53 L1ELST14 L1ELST24 L1ELST34 L1ELST44 L1ELST54 L1ELST15 L1ELST25 L1ELST35 L1ELST45 L1ELST55 - L2ELZ1 L2ELZ2 L2ELZ3 L2ELZ4 L2ELZ5 - L2ELW1 L2ELW2 L2ELW3 L2ELW4 L2ELW5 - L2ELC1 L2ELC2 L2ELC3 L2ELC4 L2ELC5 - L2ELE1 L2ELE2 L2ELE3 L2ELE4 L2ELE5 - L20301 L20302 L20303 L20304 L20305 - 0.0000 0.0000 0.0000 0.0000 0.0000 - L2ELST11 L2ELST21 L2ELST31 L2ELST41 L2ELST51 - L2ELST12 L2ELST22 L2ELST32 L2ELST42 L2ELST52 - L2ELST13 L2ELST23 L2ELST33 L2ELST43 L2ELST53 - L2ELST14 L2ELST24 L2ELST34 L2ELST44 L2ELST54 - L2ELST15 L2ELST25 L2ELST35 L2ELST45 L2ELST55 - L3ELZ1 L3ELZ2 L3ELZ3 L3ELZ4 L3ELZ5 - L3ELW1 L3ELW2 L3ELW3 L3ELW4 L3ELW5 - L3ELC1 L3ELC2 L3ELC3 L3ELC4 L3ELC5 - L3ELE1 L3ELE2 L3ELE3 L3ELE4 L3ELE5 - L30301 L30302 L30303 L30304 L30305 - 0.0000 0.0000 0.0000 0.0000 0.0000 - L3ELST11 L3ELST21 L3ELST31 L3ELST41 L3ELST51 - L3ELST12 L3ELST22 L3ELST32 L3ELST42 L3ELST52 - L3ELST13 L3ELST23 L3ELST33 L3ELST43 L3ELST53 - L3ELST14 L3ELST24 L3ELST34 L3ELST44 L3ELST54 - L3ELST15 L3ELST25 L3ELST35 L3ELST45 L3ELST55 - L4ELZ1 L4ELZ2 L4ELZ3 L4ELZ4 L4ELZ5 - L4ELW1 L4ELW2 L4ELW3 L4ELW4 L4ELW5 - L4ELC1 L4ELC2 L4ELC3 L4ELC4 L4ELC5 - L4ELE1 L4ELE2 L4ELE3 L4ELE4 L4ELE5 - L40301 L40302 L40303 L40304 L40305 - 0.0000 0.0000 0.0000 0.0000 0.0000 - L4ELST11 L4ELST21 L4ELST31 L4ELST41 L4ELST51 - L4ELST12 L4ELST22 L4ELST32 L4ELST42 L4ELST52 - L4ELST13 L4ELST23 L4ELST33 L4ELST43 L4ELST53 - L4ELST14 L4ELST24 L4ELST34 L4ELST44 L4ELST54 - L4ELST15 L4ELST25 L4ELST35 L4ELST45 L4ELST55 - L5ELZ1 L5ELZ2 L5ELZ3 L5ELZ4 L5ELZ5 - L5ELW1 L5ELW2 L5ELW3 L5ELW4 L5ELW5 - L5ELC1 L5ELC2 L5ELC3 L5ELC4 L5ELC5 - L5ELE1 L5ELE2 L5ELE3 L5ELE4 L5ELE5 - L50301 L50302 L50303 L50304 L50305 - 0.0000 0.0000 0.0000 0.0000 0.0000 - L5ELST11 L5ELST21 L5ELST31 L5ELST41 L5ELST51 - L5ELST12 L5ELST22 L5ELST32 L5ELST42 L5ELST52 - L5ELST13 L5ELST23 L5ELST33 L5ELST43 L5ELST53 - L5ELST14 L5ELST24 L5ELST34 L5ELST44 L5ELST54 - L5ELST15 L5ELST25 L5ELST35 L5ELST45 L5ELST55 - L6ELZ1 L6ELZ2 L6ELZ3 L6ELZ4 L6ELZ5 - L6ELW1 L6ELW2 L6ELW3 L6ELW4 L6ELW5 - L6ELC1 L6ELC2 L6ELC3 L6ELC4 L6ELC5 - L6ELE1 L6ELE2 L6ELE3 L6ELE4 L6ELE5 - L60301 L60302 L60303 L60304 L60305 - 0.0000 0.0000 0.0000 0.0000 0.0000 - L6ELST11 L6ELST21 L6ELST31 L6ELST41 L6ELST51 - L6ELST12 L6ELST22 L6ELST32 L6ELST42 L6ELST52 - L6ELST13 L6ELST23 L6ELST33 L6ELST43 L6ELST53 - L6ELST14 L6ELST24 L6ELST34 L6ELST44 L6ELST54 - L6ELST15 L6ELST25 L6ELST35 L6ELST45 L6ELST55 - L7ELZ1 L7ELZ2 L7ELZ3 L7ELZ4 L7ELZ5 - L7ELW1 L7ELW2 L7ELW3 L7ELW4 L7ELW5 - L7ELC1 L7ELC2 L7ELC3 L7ELC4 L7ELC5 - L7ELE1 L7ELE2 L7ELE3 L7ELE4 L7ELE5 - L70301 L70302 L70303 L70304 L70305 - 0.0000 0.0000 0.0000 0.0000 0.0000 - L7ELST11 L7ELST21 L7ELST31 L7ELST41 L7ELST51 - L7ELST12 L7ELST22 L7ELST32 L7ELST42 L7ELST52 - L7ELST13 L7ELST23 L7ELST33 L7ELST43 L7ELST53 - L7ELST14 L7ELST24 L7ELST34 L7ELST44 L7ELST54 - L7ELST15 L7ELST25 L7ELST35 L7ELST45 L7ELST55 - "; - + "; + # Get values from form my %All = CollectValues(); my $ProjType=$All{"ProjType"}; @@ -2577,37 +2372,39 @@ sub CreateInpFile $All{"ProjAM"}=sprintf("%6.2f",Chem::Massof($ProjType)); my $Check=0; + my $Layer=""; + my $Li=""; # Loop over layers an create appropriate values - for (my $i=1;$i<=7;$i++){ + for (my $i=1;$i<=$All{"NL"};$i++){ + $Li = "L".$i; + $Layer = $TemplateLayer; + $Layer =~ s/L1/$Li/g; + $TemplateFile=$TemplateFile.$Layer; $Check=0; # Composition of layers my $LComp="L".$i."Comp"; - my $LCompAttrib = child($LComp); - my $Comp = $LCompAttrib->text(); + my $Comp = LayerTable->text($i-1,0); + $All{$LComp} = $Comp; my %LElComp=Chem::parse_formula($Comp); if ($Comp eq "") {$Check++;} # Densities of layers my $Lrho="L".$i."rho"; - my $LrhoAttrib = child($Lrho); - my $rho = $LrhoAttrib->text(); + my $rho = LayerTable->text($i-1,1); $All{$Lrho}=sprintf("%6.2f",$rho); if ($rho eq "") {$Check++;} # Thickness of layers my $Ld ="L".$i."d"; - my $LdAttrib = child($Ld); - my $d = $LdAttrib->text(); + my $d = LayerTable->text($i-1,2); $All{$Ld}=sprintf("%8.2f",$d); if ($d eq "") {$Check++;} # Sanity check, is the layer supposed to have value? are they all there? - if ($Check!=0 && $i<=$All{"NL"}) { + if ($Check!=0) { my $ErrMsg="Error: Layer $i is empty. Expecting it to be defined!\n"; print STDERR $ErrMsg; my $HelpWindow = Qt::MessageBox::information( this, "Error!",$ErrMsg); -# my $ErrorDialog = Qt::ErrorMessage(TrimSPGUI); -# $ErrorDialog->message($ErrMsg); return "ERROR"; } @@ -2619,10 +2416,7 @@ sub CreateInpFile $Sum=$Sum+$LElComp{$_}; } if ($Sum==0) {$Sum=1;} - -# print STDOUT "Layer: ".$i."\n"; -# print STDOUT "Composition: ".$Comp."\n"; - + my @Els = keys %LElComp; for (my $NEl=1;$NEl<=5;$NEl++) { @@ -2634,7 +2428,7 @@ sub CreateInpFile my $ElE = Chem::Elastof($El); my $El030 = 30; if ($El eq "") { $El030 = 0.0;} -# print STDOUT "$El, ElC=$ElC ElZ=$ElZ ElW=$ElW ElE=$ElE\n"; + $All{$LEkey."Z".$NEl}=sprintf("%8.4f",$ElZ); $All{$LEkey."W".$NEl}=sprintf("%8.4f",$ElW); $All{$LEkey."C".$NEl}=sprintf("%8.4f",$ElC); @@ -2653,7 +2447,6 @@ sub CreateInpFile } foreach my $key (keys %All) { -# print $key,$All{$key},"\n"; if ($All{$key} ne ""){ $TemplateFile =~ s/$key/$All{$key}/; # Seed repeats three times @@ -2959,20 +2752,37 @@ sub OpenFile my @InitPar = split (/=/,$line); # Check it is not empty or title line if ($InitPar[0] ne "" && $InitPar[1] ne "") { - $Attrib = child($InitPar[0]); - if ($Types{$InitPar[0]} == 1) { - $Attrib->setValue($InitPar[1]); - } elsif ($Types{$InitPar[0]} == 2 ) { - if($InitPar[1] == 1) { - $Attrib->setChecked(1); - } else { - $Attrib->setChecked(0); - } - } elsif ($Types{$InitPar[0]} == 3) { - $Attrib-> setCurrentText($InitPar[1]); +# First take care of the layers, with patters L?Comp, L?rho, L?d + my $CRow=$InitPar[0]; + if ($InitPar[0] =~ m/L.*Comp$/ ) { + $CRow =~ s/\D//g; + LayerTable->setText($CRow-1,0,$InitPar[1]); + } elsif ($InitPar[0] =~ m/L.*rho$/ ) { + $CRow =~ s/\D//g; + LayerTable->setText($CRow-1,1,$InitPar[1]); + } elsif ($InitPar[0] =~ m/L.*d$/ ) { + $CRow =~ s/\D//g; + LayerTable->setText($CRow-1,2,$InitPar[1]); } else { - $Attrib->setText($InitPar[1]); - } + $Attrib = child($InitPar[0]); + if ($Types{$InitPar[0]} == 1) { + $Attrib->setValue($InitPar[1]); +# Create enough rows in LayerTable + if ($InitPar[0] eq "NL") { + LayerTable->setNumRows($InitPar[1]); + } + } elsif ($Types{$InitPar[0]} == 2 ) { + if($InitPar[1] == 1) { + $Attrib->setChecked(1); + } else { + $Attrib->setChecked(0); + } + } elsif ($Types{$InitPar[0]} == 3) { + $Attrib-> setCurrentText($InitPar[1]); + } else { + $Attrib->setText($InitPar[1]); + } + } } } } @@ -2985,29 +2795,21 @@ sub SaveFile my %All = CollectValues(); my $InitFile=" [Layers] -NL=$All{'NL'} -L1Comp=$All{'L1Comp'} -L1rho=$All{'L1rho'} -L1d=$All{'L1d'} -L2Comp=$All{'L2Comp'} -L2rho=$All{'L2rho'} -L2d=$All{'L2d'} -L3Comp=$All{'L3Comp'} -L3rho=$All{'L3rho'} -L3d=$All{'L3d'} -L4Comp=$All{'L4Comp'} -L4rho=$All{'L4rho'} -L4d=$All{'L4d'} -L5Comp=$All{'L5Comp'} -L5rho=$All{'L5rho'} -L5d=$All{'L5d'} -L6Comp=$All{'L6Comp'} -L6rho=$All{'L6rho'} -L6d=$All{'L6d'} -L7Comp=$All{'L7Comp'} -L7rho=$All{'L7rho'} -L7d=$All{'L7d'} - +NL=$All{'NL'}"; + + for (my $i=1;$i<=$All{"NL"};$i++){ + my $Li="L".$i; + my $LComp=$Li."Comp"; + my $Lrho=$Li."rho"; + my $Ld=$Li."d"; + $InitFile=$InitFile." +$LComp=$All{$LComp} +$Lrho=$All{$Lrho} +$Ld=$All{$Ld} +"; + } + + $InitFile=$InitFile." [ProjectileParameters] ProjType=$All{'ProjType'} NProj=$All{'NProj'} @@ -3054,29 +2856,21 @@ sub SaveFileAs my %All = CollectValues(); my $InitFile=" [Layers] -NL=$All{'NL'} -L1Comp=$All{'L1Comp'} -L1rho=$All{'L1rho'} -L1d=$All{'L1d'} -L2Comp=$All{'L2Comp'} -L2rho=$All{'L2rho'} -L2d=$All{'L2d'} -L3Comp=$All{'L3Comp'} -L3rho=$All{'L3rho'} -L3d=$All{'L3d'} -L4Comp=$All{'L4Comp'} -L4rho=$All{'L4rho'} -L4d=$All{'L4d'} -L5Comp=$All{'L5Comp'} -L5rho=$All{'L5rho'} -L5d=$All{'L5d'} -L6Comp=$All{'L6Comp'} -L6rho=$All{'L6rho'} -L6d=$All{'L6d'} -L7Comp=$All{'L7Comp'} -L7rho=$All{'L7rho'} -L7d=$All{'L7d'} - +NL=$All{'NL'}"; + + for (my $i=1;$i<=$All{"NL"};$i++){ + my $Li="L".$i; + my $LComp=$Li."Comp"; + my $Lrho=$Li."rho"; + my $Ld=$Li."d"; + $InitFile=$InitFile." +$LComp=$All{$LComp} +$Lrho=$All{$Lrho} +$Ld=$All{$Ld} +"; + } + + $InitFile=$InitFile." [ProjectileParameters] ProjType=$All{'ProjType'} NProj=$All{'NProj'} @@ -3108,6 +2902,7 @@ SFrom=$All{'SFrom'} STo=$All{'STo'} SStep=$All{'SStep'} "; + my $file=Qt::FileDialog::getSaveFileName( "TrimSP.cfg", "TrimSP GUI Initialization file (*.cfg)", @@ -3171,15 +2966,16 @@ sub findDensity use Chem; # Get sender name to know which layer my $sender = sender()->name(); -# Generate the name of the density field - my $rhoSender = substr($sender,0,2)."rho"; -# Get the compound formula - my $Compound = sender() -> text(); + my $CCol=sender()->currentColumn(); + if ($CCol==0) { +# The composition changed, find density + my $CRow=sender()->currentRow(); + my $Compound=sender()->text($CRow,$CCol); # See if you have the density - my $Density=Chem::Densities($Compound); + my $Density=Chem::Densities($Compound); # If the density is in the database submit it - my $rho = child($rhoSender); - $rho -> setText($Density); + sender()->setText($CRow,1,$Density); + } } diff --git a/trimsp/src/TrimSPGUI/TrimSPGUI.ui b/trimsp/src/TrimSPGUI/TrimSPGUI.ui index 2ac0fe4..2c90ce5 100644 --- a/trimsp/src/TrimSPGUI/TrimSPGUI.ui +++ b/trimsp/src/TrimSPGUI/TrimSPGUI.ui @@ -46,6 +46,14 @@ 526 + + + 4 + 4 + 0 + 0 + + LayersTab @@ -53,595 +61,6 @@ Layers - - - groupBox1 - - - - 5 - 0 - 445 - 485 - - - - GroupBoxPanel - - - Sunken - - - Layers - - - - layout27 - - - - 5 - 20 - 435 - 460 - - - - - unnamed - - - 3 - - - - layout19 - - - - unnamed - - - - textLabel1_4 - - - Number of Layers - - - - - NL - - - 7 - - - 1 - - - Select the number of the layers of your structure (maximum 7 layers). - - - - - spacer2 - - - Horizontal - - - Expanding - - - - 251 - 20 - - - - - - - - layout26 - - - - unnamed - - - - textLabel2_4 - - - - 0 - 1 - 0 - 0 - - - - Composition - - - Chemical formula - - - - - spacer1 - - - Horizontal - - - Fixed - - - - 101 - 20 - - - - - - textLabel3 - - - - 1 - 5 - 0 - 0 - - - - Density [g/cm<sup>3</sup>] - - - - - textLabel4 - - - Thickness [Å] - - - - - - - BoxL1 - - - 0 - - - Layer 1 - - - - L1rho - - - - 200 - 20 - 111 - 25 - - - - 5.12 - - - Insert the density of the layer here. - - - - - L1d - - - - 320 - 20 - 85 - 25 - - - - - 0 - 0 - 0 - 0 - - - - 200 - - - Insert the thickness of the layer here. - - - - - L1Comp - - - - 10 - 20 - 180 - 25 - - - - SrTiO3 - - - Chemical formula of L1 - - - Insert the chemical formula here as you would write it. - - - - - - BoxL2 - - - false - - - Layer 2 - - - - L2rho - - - - 200 - 20 - 111 - 25 - - - - - - L2d - - - - 320 - 20 - 85 - 25 - - - - - 0 - 0 - 0 - 0 - - - - - - L2Comp - - - - 10 - 20 - 180 - 25 - - - - - - - BoxL3 - - - false - - - Layer 3 - - - - L3Comp - - - - 10 - 20 - 180 - 25 - - - - - - L3rho - - - - 200 - 20 - 111 - 25 - - - - - - L3d - - - - 320 - 20 - 85 - 25 - - - - - 0 - 0 - 0 - 0 - - - - - - - BoxL4 - - - false - - - Layer 4 - - - - L4Comp - - - - 10 - 20 - 180 - 25 - - - - - - L4rho - - - - 200 - 20 - 111 - 25 - - - - - - L4d - - - - 320 - 20 - 85 - 25 - - - - - 0 - 0 - 0 - 0 - - - - - - - BoxL5 - - - false - - - Layer 5 - - - - L5Comp - - - - 10 - 20 - 180 - 25 - - - - - - L5rho - - - - 200 - 20 - 111 - 25 - - - - - - L5d - - - - 320 - 20 - 85 - 25 - - - - - 0 - 0 - 0 - 0 - - - - - - - BoxL6 - - - false - - - Layer 6 - - - - L6Comp - - - - 10 - 20 - 180 - 25 - - - - - - L6rho - - - - 200 - 20 - 111 - 25 - - - - - - L6d - - - - 320 - 20 - 85 - 25 - - - - - 0 - 0 - 0 - 0 - - - - - - - BoxL7 - - - false - - - Layer 7 - - - - L7Comp - - - - 10 - 20 - 180 - 25 - - - - - - L7rho - - - - 200 - 20 - 111 - 25 - - - - - - L7d - - - - 320 - 20 - 85 - 25 - - - - - 0 - 0 - 0 - 0 - - - - - - - layout13 @@ -1166,6 +585,156 @@ + + + groupBox1 + + + + 5 + 0 + 445 + 485 + + + + GroupBoxPanel + + + Sunken + + + Layers + + + + layout66 + + + + 8 + 25 + 432 + 460 + + + + + unnamed + + + + layout19 + + + + unnamed + + + + textLabel1_4 + + + Number of Layers + + + + + NL + + + 100 + + + 1 + + + Select the number of the layers of your structure (maximum 7 layers). + + + + + spacer2 + + + Horizontal + + + Expanding + + + + 240 + 20 + + + + + + + + + Composition + + + + + Density [g/cm^3] + + + + + Thickness [Å] + + + + LayerTable + + + + 4 + 4 + 100 + 100 + + + + + 410 + 405 + + + + true + + + AutoOneFit + + + true + + + 1 + + + 3 + + + false + + + false + + + NoSelection + + + FollowStyle + + + + + @@ -2661,12 +2230,6 @@ - - L1Comp - textChanged(const QString&) - TrimSPGUI - findDensity() - TrimBinBrowse clicked() @@ -2824,38 +2387,8 @@ DirectoryBrowse() - L2Comp - textChanged(const QString&) - TrimSPGUI - findDensity() - - - L3Comp - textChanged(const QString&) - TrimSPGUI - findDensity() - - - L4Comp - textChanged(const QString&) - TrimSPGUI - findDensity() - - - L5Comp - textChanged(const QString&) - TrimSPGUI - findDensity() - - - L6Comp - textChanged(const QString&) - TrimSPGUI - findDensity() - - - L7Comp - textChanged(const QString&) + LayerTable + valueChanged(int,int) TrimSPGUI findDensity() @@ -2863,27 +2396,6 @@ tabs NL - L1Comp - L1rho - L1d - L2Comp - L2rho - L2d - L3Comp - L3rho - L3d - L4Comp - L4rho - L4d - L5Comp - L5rho - L5d - L6Comp - L6rho - L6d - L7Comp - L7rho - L7d ProjType NProj z0 @@ -2927,6 +2439,7 @@ ToggleScanSingle() PrepLayers() + removeRowFromTable() ProjSmartDefaults() OpenHelpWindow() CollectValues() diff --git a/trimsp/src/TrimSPGUI/TrimSPGUI.ui.h b/trimsp/src/TrimSPGUI/TrimSPGUI.ui.h index 8ed4fae..9d6a58c 100644 --- a/trimsp/src/TrimSPGUI/TrimSPGUI.ui.h +++ b/trimsp/src/TrimSPGUI/TrimSPGUI.ui.h @@ -44,6 +44,7 @@ void TrimSPGUI::ToggleScanSingle() $All{"ScandL"}=ScandL->text(); $All{"ListRadio"}=ListRadio->isChecked(); $All{"LoopRadio"}=LoopRadio->isChecked(); + $All{"NL"}=NL->text(); # Enable everything E->setDisabled(0); @@ -56,10 +57,9 @@ void TrimSPGUI::ToggleScanSingle() # SigAngle->setText("15"); NProj->setDisabled(0); # NProj->setText("10000"); - for (my $i=1;$i<=7;$i++) { - my $LayerName = "L".$i."d"; - my $LayerAttrib = child($LayerName); - $LayerAttrib->setDisabled(0); + for (my $i=1;$i<=$All{"NL"};$i++) { + my $LayerAttrib = LayerTable->item($i-1,2); + $LayerAttrib->setEnabled(1); } # Enable depth increment for Energy scan only @@ -90,28 +90,21 @@ void TrimSPGUI::ToggleScanSingle() Angle->setDisabled(0); SigAngle->setDisabled(0); NProj->setDisabled(0); - my $LayerName = "L".$All{"ScandL"}."d"; - my $LayerAttrib = child($LayerName); - $LayerAttrib->setDisabled(0); + LayerTable->setColumnReadOnly(2,0); # then disable one if ($All{"ERadio"}) { E->setDisabled(1); -# E->setText(""); } elsif ($All{"SigERadio"}) { SigE->setDisabled(1); -# SigE->setText(""); } elsif ($All{"AngleRadio"}) { Angle->setDisabled(1); -# Angle->setText(""); } elsif ($All{"SigAngleRadio"}) { SigAngle->setDisabled(1); -# SigAngle->setText(""); } elsif ($All{"NProjRadio"}) { NProj->setDisabled(1); -# NProj->setText(""); } elsif($All{"dRadio"}) { - $LayerAttrib->setDisabled(1); -# $LayerAttrib->setText(""); + my $LayerAttrib = LayerTable->item($All{"ScandL"}-1,2); + $LayerAttrib->setEnabled(0); } # and change title of tab to say enabled tabs->changeTab( ScansTab, trUtf8("Scans (Enabled)") ); @@ -127,18 +120,48 @@ void TrimSPGUI::PrepLayers() my %All=(); $All{"NL"}=NL->text(); -# Enable layers up to required and disable the rest - for (my $i=1;$i<=7;$i++) { - my $LayerName = "BoxL".$i; - my $LayerAttrib = child($LayerName); - if ($i<=$All{"NL"}) { - $LayerAttrib->setDisabled(0); - } else { - $LayerAttrib->setDisabled(1); +# Prepare enough Rows in table for layers + my $OldNL=LayerTable->numRows(); + if ($OldNL<=$All{"NL"}) { + LayerTable->setNumRows($All{"NL"}); + } else { + for (my $i=$All{"NL"};$i<=$OldNL-1;$i++) { + print $i."\n"; + removeRowFromTable($i); } } } +# LayerTable->horizontalHeader()->setResizeMode(Qt::HeaderView::Stretch); +# LayerTable->adjustColumn(0); +# LayerTable->adjustColumn(1); +# LayerTable->adjustColumn(2); +} +void TrimSPGUI::removeRowFromTable() +{ +# This function is to remove rows from table +# I cannot use the standard removeRow() due to a bug in perl-qt3 +# This is a good and simple workaround. + +# Takes as an input the row number to be removed + my ($deadRow) = @_; + +# Loop over columns and take items of the row to remove + for my $col (0..LayerTable->numCols()-1) { + my $dummy=LayerTable->item($deadRow, $col); +# In the items is not defined the row can be removed by simply +# reducing the number of rows in table + if ($dummy ne "") { + LayerTable->takeItem(LayerTable->item($deadRow, $col)); + for my $row ($deadRow..LayerTable->numRows()-2) { + my $item = LayerTable->item($row+1, $col); + LayerTable->takeItem($item); + LayerTable->setItem($row, $col, $item); + } + } + } + LayerTable->setNumRows(LayerTable->numRows()-1); +} void TrimSPGUI::ProjSmartDefaults() { @@ -211,12 +234,9 @@ void TrimSPGUI::CollectValues() my $LComp = "L".$i."Comp"; my $Lrho="L".$i."rho"; my $Ld="L".$i."d"; - my $LCompAttrib = child($LComp); - my $LrhoAttrib=child($Lrho); - my $LdAttrib=child($Ld); - $All{"$LComp"}=$LCompAttrib->text(); - $All{"$Lrho"}=$LrhoAttrib->text(); - $All{"$Ld"}=$LdAttrib->text(); + $All{"$LComp"}=LayerTable->text($i-1,0); + $All{"$Lrho"}=LayerTable->text($i-1,1); + $All{"$Ld"}=LayerTable->text($i-1,2); } # Collect projectile parameters @@ -308,7 +328,6 @@ void TrimSPGUI::CollectValues() return %All; } - void TrimSPGUI::CreateInpFile() { use Chem; @@ -323,11 +342,18 @@ void TrimSPGUI::CreateInpFile() # Values of Z,A as well as other needed parameters are obtained from Chem.pm. -# This is the form of the input file: +# This is the form of the begining of the input file: my $TemplateFile= " ProjZ ProjAM E SigE Angle SigAngle EF ESB SHEATH ERC - NProj Seed Seed Seed z0 RD dz CA KK0 KK0R KDEE1 KDEE2 IPOT IPOTR IRL - L1d L2d L3d L4d L5d L6d L7d L1rho L2rho L3rho L4rho L5rho L6rho L7rho L1CK L2CK L3CK L4CK L5CK L6CK L7CK + NProj Seed Seed Seed z0 RD dz CA KK0 KK0R KDEE1 KDEE2 IPOT IPOTR IRL"; + +# Then comes the number of layers (new format) for example 4 layers: +# N_Layers=4 + $TemplateFile=$TemplateFile."\n"."N_Layers=NL"."\n"; + +# Then loop over the layers and for each give the following structure + my $TemplateLayer= + "L1d L1rho L1CK L1ELZ1 L1ELZ2 L1ELZ3 L1ELZ4 L1ELZ5 L1ELW1 L1ELW2 L1ELW3 L1ELW4 L1ELW5 L1ELC1 L1ELC2 L1ELC3 L1ELC4 L1ELC5 @@ -339,74 +365,8 @@ void TrimSPGUI::CreateInpFile() L1ELST13 L1ELST23 L1ELST33 L1ELST43 L1ELST53 L1ELST14 L1ELST24 L1ELST34 L1ELST44 L1ELST54 L1ELST15 L1ELST25 L1ELST35 L1ELST45 L1ELST55 - L2ELZ1 L2ELZ2 L2ELZ3 L2ELZ4 L2ELZ5 - L2ELW1 L2ELW2 L2ELW3 L2ELW4 L2ELW5 - L2ELC1 L2ELC2 L2ELC3 L2ELC4 L2ELC5 - L2ELE1 L2ELE2 L2ELE3 L2ELE4 L2ELE5 - L20301 L20302 L20303 L20304 L20305 - 0.0000 0.0000 0.0000 0.0000 0.0000 - L2ELST11 L2ELST21 L2ELST31 L2ELST41 L2ELST51 - L2ELST12 L2ELST22 L2ELST32 L2ELST42 L2ELST52 - L2ELST13 L2ELST23 L2ELST33 L2ELST43 L2ELST53 - L2ELST14 L2ELST24 L2ELST34 L2ELST44 L2ELST54 - L2ELST15 L2ELST25 L2ELST35 L2ELST45 L2ELST55 - L3ELZ1 L3ELZ2 L3ELZ3 L3ELZ4 L3ELZ5 - L3ELW1 L3ELW2 L3ELW3 L3ELW4 L3ELW5 - L3ELC1 L3ELC2 L3ELC3 L3ELC4 L3ELC5 - L3ELE1 L3ELE2 L3ELE3 L3ELE4 L3ELE5 - L30301 L30302 L30303 L30304 L30305 - 0.0000 0.0000 0.0000 0.0000 0.0000 - L3ELST11 L3ELST21 L3ELST31 L3ELST41 L3ELST51 - L3ELST12 L3ELST22 L3ELST32 L3ELST42 L3ELST52 - L3ELST13 L3ELST23 L3ELST33 L3ELST43 L3ELST53 - L3ELST14 L3ELST24 L3ELST34 L3ELST44 L3ELST54 - L3ELST15 L3ELST25 L3ELST35 L3ELST45 L3ELST55 - L4ELZ1 L4ELZ2 L4ELZ3 L4ELZ4 L4ELZ5 - L4ELW1 L4ELW2 L4ELW3 L4ELW4 L4ELW5 - L4ELC1 L4ELC2 L4ELC3 L4ELC4 L4ELC5 - L4ELE1 L4ELE2 L4ELE3 L4ELE4 L4ELE5 - L40301 L40302 L40303 L40304 L40305 - 0.0000 0.0000 0.0000 0.0000 0.0000 - L4ELST11 L4ELST21 L4ELST31 L4ELST41 L4ELST51 - L4ELST12 L4ELST22 L4ELST32 L4ELST42 L4ELST52 - L4ELST13 L4ELST23 L4ELST33 L4ELST43 L4ELST53 - L4ELST14 L4ELST24 L4ELST34 L4ELST44 L4ELST54 - L4ELST15 L4ELST25 L4ELST35 L4ELST45 L4ELST55 - L5ELZ1 L5ELZ2 L5ELZ3 L5ELZ4 L5ELZ5 - L5ELW1 L5ELW2 L5ELW3 L5ELW4 L5ELW5 - L5ELC1 L5ELC2 L5ELC3 L5ELC4 L5ELC5 - L5ELE1 L5ELE2 L5ELE3 L5ELE4 L5ELE5 - L50301 L50302 L50303 L50304 L50305 - 0.0000 0.0000 0.0000 0.0000 0.0000 - L5ELST11 L5ELST21 L5ELST31 L5ELST41 L5ELST51 - L5ELST12 L5ELST22 L5ELST32 L5ELST42 L5ELST52 - L5ELST13 L5ELST23 L5ELST33 L5ELST43 L5ELST53 - L5ELST14 L5ELST24 L5ELST34 L5ELST44 L5ELST54 - L5ELST15 L5ELST25 L5ELST35 L5ELST45 L5ELST55 - L6ELZ1 L6ELZ2 L6ELZ3 L6ELZ4 L6ELZ5 - L6ELW1 L6ELW2 L6ELW3 L6ELW4 L6ELW5 - L6ELC1 L6ELC2 L6ELC3 L6ELC4 L6ELC5 - L6ELE1 L6ELE2 L6ELE3 L6ELE4 L6ELE5 - L60301 L60302 L60303 L60304 L60305 - 0.0000 0.0000 0.0000 0.0000 0.0000 - L6ELST11 L6ELST21 L6ELST31 L6ELST41 L6ELST51 - L6ELST12 L6ELST22 L6ELST32 L6ELST42 L6ELST52 - L6ELST13 L6ELST23 L6ELST33 L6ELST43 L6ELST53 - L6ELST14 L6ELST24 L6ELST34 L6ELST44 L6ELST54 - L6ELST15 L6ELST25 L6ELST35 L6ELST45 L6ELST55 - L7ELZ1 L7ELZ2 L7ELZ3 L7ELZ4 L7ELZ5 - L7ELW1 L7ELW2 L7ELW3 L7ELW4 L7ELW5 - L7ELC1 L7ELC2 L7ELC3 L7ELC4 L7ELC5 - L7ELE1 L7ELE2 L7ELE3 L7ELE4 L7ELE5 - L70301 L70302 L70303 L70304 L70305 - 0.0000 0.0000 0.0000 0.0000 0.0000 - L7ELST11 L7ELST21 L7ELST31 L7ELST41 L7ELST51 - L7ELST12 L7ELST22 L7ELST32 L7ELST42 L7ELST52 - L7ELST13 L7ELST23 L7ELST33 L7ELST43 L7ELST53 - L7ELST14 L7ELST24 L7ELST34 L7ELST44 L7ELST54 - L7ELST15 L7ELST25 L7ELST35 L7ELST45 L7ELST55 - "; - + "; + # Get values from form my %All = CollectValues(); my $ProjType=$All{"ProjType"}; @@ -414,37 +374,39 @@ void TrimSPGUI::CreateInpFile() $All{"ProjAM"}=sprintf("%6.2f",Chem::Massof($ProjType)); my $Check=0; + my $Layer=""; + my $Li=""; # Loop over layers an create appropriate values - for (my $i=1;$i<=7;$i++){ + for (my $i=1;$i<=$All{"NL"};$i++){ + $Li = "L".$i; + $Layer = $TemplateLayer; + $Layer =~ s/L1/$Li/g; + $TemplateFile=$TemplateFile.$Layer; $Check=0; # Composition of layers my $LComp="L".$i."Comp"; - my $LCompAttrib = child($LComp); - my $Comp = $LCompAttrib->text(); + my $Comp = LayerTable->text($i-1,0); + $All{$LComp} = $Comp; my %LElComp=Chem::parse_formula($Comp); if ($Comp eq "") {$Check++;} # Densities of layers my $Lrho="L".$i."rho"; - my $LrhoAttrib = child($Lrho); - my $rho = $LrhoAttrib->text(); + my $rho = LayerTable->text($i-1,1); $All{$Lrho}=sprintf("%6.2f",$rho); if ($rho eq "") {$Check++;} # Thickness of layers my $Ld ="L".$i."d"; - my $LdAttrib = child($Ld); - my $d = $LdAttrib->text(); + my $d = LayerTable->text($i-1,2); $All{$Ld}=sprintf("%8.2f",$d); if ($d eq "") {$Check++;} # Sanity check, is the layer supposed to have value? are they all there? - if ($Check!=0 && $i<=$All{"NL"}) { + if ($Check!=0) { my $ErrMsg="Error: Layer $i is empty. Expecting it to be defined!\n"; print STDERR $ErrMsg; my $HelpWindow = Qt::MessageBox::information( this, "Error!",$ErrMsg); -# my $ErrorDialog = Qt::ErrorMessage(TrimSPGUI); -# $ErrorDialog->message($ErrMsg); return "ERROR"; } @@ -456,10 +418,7 @@ void TrimSPGUI::CreateInpFile() $Sum=$Sum+$LElComp{$_}; } if ($Sum==0) {$Sum=1;} - -# print STDOUT "Layer: ".$i."\n"; -# print STDOUT "Composition: ".$Comp."\n"; - + my @Els = keys %LElComp; for (my $NEl=1;$NEl<=5;$NEl++) { @@ -471,7 +430,7 @@ void TrimSPGUI::CreateInpFile() my $ElE = Chem::Elastof($El); my $El030 = 30; if ($El eq "") { $El030 = 0.0;} -# print STDOUT "$El, ElC=$ElC ElZ=$ElZ ElW=$ElW ElE=$ElE\n"; + $All{$LEkey."Z".$NEl}=sprintf("%8.4f",$ElZ); $All{$LEkey."W".$NEl}=sprintf("%8.4f",$ElW); $All{$LEkey."C".$NEl}=sprintf("%8.4f",$ElC); @@ -490,7 +449,6 @@ void TrimSPGUI::CreateInpFile() } foreach my $key (keys %All) { -# print $key,$All{$key},"\n"; if ($All{$key} ne ""){ $TemplateFile =~ s/$key/$All{$key}/; # Seed repeats three times @@ -500,7 +458,6 @@ void TrimSPGUI::CreateInpFile() return $TemplateFile; } - void TrimSPGUI::StartSequenceOne() { my %All = CollectValues(); @@ -789,20 +746,37 @@ void TrimSPGUI::OpenFile() my @InitPar = split (/=/,$line); # Check it is not empty or title line if ($InitPar[0] ne "" && $InitPar[1] ne "") { - $Attrib = child($InitPar[0]); - if ($Types{$InitPar[0]} == 1) { - $Attrib->setValue($InitPar[1]); - } elsif ($Types{$InitPar[0]} == 2 ) { - if($InitPar[1] == 1) { - $Attrib->setChecked(1); - } else { - $Attrib->setChecked(0); - } - } elsif ($Types{$InitPar[0]} == 3) { - $Attrib-> setCurrentText($InitPar[1]); +# First take care of the layers, with patters L?Comp, L?rho, L?d + my $CRow=$InitPar[0]; + if ($InitPar[0] =~ m/L.*Comp$/ ) { + $CRow =~ s/\D//g; + LayerTable->setText($CRow-1,0,$InitPar[1]); + } elsif ($InitPar[0] =~ m/L.*rho$/ ) { + $CRow =~ s/\D//g; + LayerTable->setText($CRow-1,1,$InitPar[1]); + } elsif ($InitPar[0] =~ m/L.*d$/ ) { + $CRow =~ s/\D//g; + LayerTable->setText($CRow-1,2,$InitPar[1]); } else { - $Attrib->setText($InitPar[1]); - } + $Attrib = child($InitPar[0]); + if ($Types{$InitPar[0]} == 1) { + $Attrib->setValue($InitPar[1]); +# Create enough rows in LayerTable + if ($InitPar[0] eq "NL") { + LayerTable->setNumRows($InitPar[1]); + } + } elsif ($Types{$InitPar[0]} == 2 ) { + if($InitPar[1] == 1) { + $Attrib->setChecked(1); + } else { + $Attrib->setChecked(0); + } + } elsif ($Types{$InitPar[0]} == 3) { + $Attrib-> setCurrentText($InitPar[1]); + } else { + $Attrib->setText($InitPar[1]); + } + } } } } @@ -814,29 +788,21 @@ void TrimSPGUI::SaveFile() my %All = CollectValues(); my $InitFile=" [Layers] -NL=$All{'NL'} -L1Comp=$All{'L1Comp'} -L1rho=$All{'L1rho'} -L1d=$All{'L1d'} -L2Comp=$All{'L2Comp'} -L2rho=$All{'L2rho'} -L2d=$All{'L2d'} -L3Comp=$All{'L3Comp'} -L3rho=$All{'L3rho'} -L3d=$All{'L3d'} -L4Comp=$All{'L4Comp'} -L4rho=$All{'L4rho'} -L4d=$All{'L4d'} -L5Comp=$All{'L5Comp'} -L5rho=$All{'L5rho'} -L5d=$All{'L5d'} -L6Comp=$All{'L6Comp'} -L6rho=$All{'L6rho'} -L6d=$All{'L6d'} -L7Comp=$All{'L7Comp'} -L7rho=$All{'L7rho'} -L7d=$All{'L7d'} - +NL=$All{'NL'}"; + + for (my $i=1;$i<=$All{"NL"};$i++){ + my $Li="L".$i; + my $LComp=$Li."Comp"; + my $Lrho=$Li."rho"; + my $Ld=$Li."d"; + $InitFile=$InitFile." +$LComp=$All{$LComp} +$Lrho=$All{$Lrho} +$Ld=$All{$Ld} +"; + } + + $InitFile=$InitFile." [ProjectileParameters] ProjType=$All{'ProjType'} NProj=$All{'NProj'} @@ -882,29 +848,21 @@ void TrimSPGUI::SaveFileAs() my %All = CollectValues(); my $InitFile=" [Layers] -NL=$All{'NL'} -L1Comp=$All{'L1Comp'} -L1rho=$All{'L1rho'} -L1d=$All{'L1d'} -L2Comp=$All{'L2Comp'} -L2rho=$All{'L2rho'} -L2d=$All{'L2d'} -L3Comp=$All{'L3Comp'} -L3rho=$All{'L3rho'} -L3d=$All{'L3d'} -L4Comp=$All{'L4Comp'} -L4rho=$All{'L4rho'} -L4d=$All{'L4d'} -L5Comp=$All{'L5Comp'} -L5rho=$All{'L5rho'} -L5d=$All{'L5d'} -L6Comp=$All{'L6Comp'} -L6rho=$All{'L6rho'} -L6d=$All{'L6d'} -L7Comp=$All{'L7Comp'} -L7rho=$All{'L7rho'} -L7d=$All{'L7d'} - +NL=$All{'NL'}"; + + for (my $i=1;$i<=$All{"NL"};$i++){ + my $Li="L".$i; + my $LComp=$Li."Comp"; + my $Lrho=$Li."rho"; + my $Ld=$Li."d"; + $InitFile=$InitFile." +$LComp=$All{$LComp} +$Lrho=$All{$Lrho} +$Ld=$All{$Ld} +"; + } + + $InitFile=$InitFile." [ProjectileParameters] ProjType=$All{'ProjType'} NProj=$All{'NProj'} @@ -936,6 +894,7 @@ SFrom=$All{'SFrom'} STo=$All{'STo'} SStep=$All{'SStep'} "; + my $file=Qt::FileDialog::getSaveFileName( "TrimSP.cfg", "TrimSP GUI Initialization file (*.cfg)", @@ -1010,19 +969,22 @@ void TrimSPGUI::TrimBin() return $file; } - + void TrimSPGUI::findDensity() { use Chem; # Get sender name to know which layer my $sender = sender()->name(); -# Generate the name of the density field - my $rhoSender = substr($sender,0,2)."rho"; -# Get the compound formula - my $Compound = sender() -> text(); + my $CCol=sender()->currentColumn(); + if ($CCol==0) { +# The composition changed, find density + my $CRow=sender()->currentRow(); + my $Compound=sender()->text($CRow,$CCol); # See if you have the density - my $Density=Chem::Densities($Compound); + my $Density=Chem::Densities($Compound); # If the density is in the database submit it - my $rho = child($rhoSender); - $rho -> setText($Density); + sender()->setText($CRow,1,$Density); + } } + + diff --git a/trimsp/src/trimspNL.F b/trimsp/src/trimspNL.F index 1e1bf8a..eeee70f 100644 --- a/trimsp/src/trimspNL.F +++ b/trimsp/src/trimspNL.F @@ -393,7 +393,7 @@ C Second line: simulation related parameters & ,IPOTR,IRL C Third line: Number of layers read(11,66) NLayers - 66 format(8x,I4) + 66 format(9x,I4) LMAX=NLayers C Here we read the NLayers structure DO I=1,NLayers