Skip to content

Commit 238e936

Browse files
andyclaude
andcommitted
README: screenshots, and release entries cut to one line each
The release history was several paragraphs per version, which is a changelog rather than a summary. One line each now, with a pointer to the releases page, where the full notes and the packages already live. Adds six screenshots under docs/images: a full view of the Organizer with a calculation being set up and launched, a full view of the viewer, and tighter crops of benzene's pi HOMO and its electrostatic potential surface. The Verify dialog and the editor-and-launcher pair are there for release notes rather than the README -- new features should be shown when they ship, not described. Under a megabyte for all of them. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EFMUNbw2UpRPmgsqviAowb
1 parent 8a01928 commit 238e936

10 files changed

Lines changed: 135 additions & 55 deletions

File tree

‎README.md‎

Lines changed: 45 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@ version 8: reaching it took a real modernization of the build system and
1414
every major dependency, not just a recompile, on top of bringing the
1515
application itself back to life.
1616

17+
![The Organizer, with a calculation being set up and
18+
launched](docs/images/organizer.png)
19+
20+
*The Organizer is the front door: calculations on the left, a summary of
21+
the selected one in the middle, and the code's own editor and the
22+
launcher opened from it.*
23+
1724
## General features
1825

1926
* **Build molecular models**, or import a structure and work from that.
@@ -82,62 +89,48 @@ theory setup), and a long list of crashes and silent failures surfaced by
8289
actually using the application have been root-caused and fixed rather
8390
than papered over.
8491

92+
### Screenshots
93+
94+
![The viewer, showing a molecular orbital of
95+
benzene](docs/images/viewer.png)
96+
97+
*The viewer: a calculation's orbitals, energies and geometry, with the
98+
orbital list on the left and the structure rendered from the results.*
99+
100+
| | |
101+
|---|---|
102+
| ![Benzene's highest occupied molecular orbital](docs/images/orbital-benzene.png) | ![The electrostatic potential on benzene's surface](docs/images/esp-benzene.png) |
103+
| Benzene's π HOMO | Electrostatic potential mapped on the surface |
104+
85105
### Release history
86106

87-
- **v8.15.0** — **Verify: a check on the input file before it is
88-
submitted.** A lamp beside a new button in the Calculation Editor,
89-
set whenever a deck is written; clicking it shows the deck with the
90-
offending lines marked, green where a check covered it and amber
91-
where none did. It reads the shape of a deck — sections, spacing,
92-
block closing, the basis block, charge against the electron count —
93-
and judges no keyword, because a checker that calls a correct deck
94-
wrong gets ignored. **The point group you choose now reaches
95-
Gaussian**: it was dropped silently, so a calculation set to D2h ran
96-
in whatever Gaussian guessed. **Final Edit no longer strips the
97-
terminating blank line**, which broke every deck it touched.
98-
**Register Machines works on a fresh install** again (#149). MO
99-
diagrams gain fragment orbitals with real energies, chemical groups
100-
for molecules with no central atom, a π-only view for planar
101-
molecules, and a menu offering only the constructions a given
102-
molecule can be drawn by; still experimental.
103-
104-
- **v8.14.0** — **Qualitative MO correlation diagrams**, shipped as
105-
experimental: a molecule's orbitals correlated against its fragments,
106-
with terminal-atom symmetry orbitals and Mulliken labels, and an
107-
extended Hückel fallback so a diagram can be drawn from a structure
108-
alone. **"Use symmetry" moves onto the Calculation Editor** beside the
109-
point group and defaults on — every Gaussian deck ECCE had ever
110-
written carried `NoSymm`, so Gaussian never reported orbital labels.
111-
**Fixes basis sets being silently corrupted**: a bare pointer into a
112-
frozen stream buffer put six bytes of binary where the basis block
113-
belongs, in both ORCA and Gaussian decks, and the codes refused them.
114-
Also Gaussian 16 Raman and anharmonic frequencies, a filter for the
115-
Basis Set Tool's 377 sets, one password per session, and RPM packages.
116-
117-
- **v8.13.2** — **Jobs that staged and never ran now run.** ECCE
118-
backgrounded the submit script with Bourne-shell redirection, which csh
119-
rejects outright — so nothing started, while ECCE reported the
120-
calculation as running. Affects any machine whose `/usr/bin/csh` is
121-
tcsh (Ubuntu, RHEL); Debian's `bsd-csh` accepts it, which is why the
122-
same build worked there. Present since v8.0.3. `ecce-diagnose` becomes
123-
a general-purpose collector for any problem.
107+
One line each. Full notes, and the packages, are on the
108+
[releases page](https://github.com/FriendsofECCE/ECCE/releases).
109+
110+
- **v8.15.0** — **Verify**: a check on the generated input file before
111+
it is submitted. The point group you choose now reaches Gaussian.
112+
Final Edit no longer strips a deck's terminating blank line. Register
113+
Machines works on a fresh install. MO diagrams gain fragment
114+
orbitals, chemical groups and a π-only view; still experimental.
115+
116+
- **v8.14.0** — **Qualitative MO correlation diagrams**, experimental.
117+
"Use symmetry" moves onto the Calculation Editor and defaults on.
118+
Fixes basis sets being silently corrupted in ORCA and Gaussian decks.
119+
Gaussian 16 Raman and anharmonic frequencies; RPM packages.
120+
121+
- **v8.13.2** — **Jobs that staged and never ran now run**: the submit
122+
script was backgrounded with a redirection csh rejects. Affects any
123+
machine whose `/usr/bin/csh` is tcsh. Present since v8.0.3.
124124

125125
- **v8.13.1** — **Running against a central server works again**:
126-
`ecce -remote` starts no local services, and `ecce-remote-setup <host>`
127-
configures a client in one command. Fixes helper programs invoked by
128-
relative path, which could only work from `$ECCE_HOME/bin` — background
129-
remote commands, password dialogs and job-monitor startup failed
130-
silently depending on where ECCE was started from. Also fixes a failed
131-
symmetry search reporting "no symmetry".
132-
133-
- **v8.13.0** — **Electrostatic potential maps**, from the density or
134-
from point charges, drawn on the molecular surface. 3-D orbitals for
135-
MOPAC. Queues configurable inside ECCE instead of by editing root-owned
136-
files. Dispersion corrections and twelve further functionals.
137-
**Fixes ORCA p functions being declared in the wrong order**, so
138-
orbitals with p character have been drawn wrong since v8.0.7 —
139-
re-render any you rely on — and 24045 basis-set values read without
140-
their exponent, corrupting several standard sets.
126+
`ecce -remote`, and `ecce-remote-setup <host>` to configure a client.
127+
Fixes helper programs invoked by relative path.
128+
129+
- **v8.13.0** — **Electrostatic potential maps** on the molecular
130+
surface. 3-D orbitals for MOPAC. Queues configurable inside ECCE.
131+
**Fixes ORCA p functions declared in the wrong order** — orbitals with
132+
p character were drawn wrong since v8.0.7, so re-render any you rely
133+
on — and basis-set values read without their exponent.
141134

142135
- **v8.12.0** — **The Gateway window is gone**: `ecce` opens the Organizer
143136
directly, which becomes the front door (`ECCE_GATEWAY_WINDOW=1` restores

‎docs/images/editor-launcher.png‎

143 KB
Loading

‎docs/images/esp-benzene.png‎

119 KB
Loading

‎docs/images/orbital-benzene.png‎

165 KB
Loading

‎docs/images/organizer.png‎

294 KB
Loading

‎docs/images/verify.png‎

84.5 KB
Loading

‎docs/images/viewer.png‎

178 KB
Loading

‎scripts/parsers/verifyinput‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -541,6 +541,24 @@ sub gaussian
541541
"says which one.");
542542
}
543543

544+
# SYMMETRY OFF IS A CHOICE WITH A CONSEQUENCE, so say it before
545+
# the job runs rather than after.
546+
#
547+
# A deck carrying NoSymm produces no orbital symmetry labels, and
548+
# without those there is no MO correlation diagram to be had from
549+
# it -- which is only discovered once the calculation has finished,
550+
# and then looks like the diagram being broken rather than like the
551+
# deck having asked for this. Amber, because switching symmetry off
552+
# is a legitimate thing to want.
553+
if ($whole =~ /\bNoSymm\b/i) {
554+
finding("UNSURE", $routeAt + 1, "symmetry",
555+
"This deck says NoSymm, so the calculation will report no " .
556+
"orbital symmetry labels -- no MO correlation diagram can " .
557+
"be drawn from it, and orbitals will be numbered rather " .
558+
"than named. Tick \"Use symmetry\" in the Calculation " .
559+
"Editor if that was not intended.");
560+
}
561+
544562
# ------------------------------------------------- section spacing
545563
if ($routeEnd > $#L) {
546564
finding("BAD", $routeAt + 1, "sections",

‎src/apps/builder/MoDiagramCanvas.H‎

Lines changed: 59 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,14 +102,16 @@ class MoDiagramCanvas : public wxPanel
102102
void setDiagram(const MoColumn& left, const MoColumn& centre,
103103
const MoColumn& right,
104104
const vector<MoConnection>& links,
105-
bool haveFragments, const string& note)
105+
bool haveFragments, const string& note,
106+
const string& headline = "")
106107
{
107108
p_left = left;
108109
p_centre = centre;
109110
p_right = right;
110111
p_links = links;
111112
p_haveFragments = haveFragments;
112113
p_note = note;
114+
p_headline = headline;
113115
Refresh();
114116
}
115117

@@ -1016,8 +1018,19 @@ class MoDiagramCanvas : public wxPanel
10161018
void paintOnto(wxDC& dc, const wxSize& size)
10171019
{
10181020
if (p_centre.levels.empty()) {
1021+
int y = 20;
1022+
if (!p_headline.empty()) {
1023+
wxFont banner = dc.GetFont();
1024+
banner.SetPointSize(banner.GetPointSize() + 3);
1025+
banner.SetWeight(wxFONTWEIGHT_BOLD);
1026+
dc.SetFont(banner);
1027+
dc.SetTextForeground(wxColour(140, 90, 0));
1028+
dc.DrawText(wxString(p_headline.c_str(), wxConvUTF8), 20, y);
1029+
y += dc.GetTextExtent(wxT("Xg")).y + 12;
1030+
dc.SetTextForeground(wxColour(30, 30, 30));
1031+
}
10191032
dc.SetFont(*wxNORMAL_FONT);
1020-
dc.DrawText(wxString(p_note.c_str(), wxConvUTF8), 20, 20);
1033+
dc.DrawText(wxString(p_note.c_str(), wxConvUTF8), 20, y);
10211034
return;
10221035
}
10231036

@@ -1125,6 +1138,37 @@ class MoDiagramCanvas : public wxPanel
11251138
dc.SetFont(heading);
11261139
top += 22;
11271140
}
1141+
// THE REASON THE DIAGRAM IS MISSING, WHERE IT WILL BE READ.
1142+
//
1143+
// Drawn across the width, above the levels, in the colour of a
1144+
// warning -- not appended to the footnote under the picture,
1145+
// which is where it used to be and where nobody looked.
1146+
if (!p_headline.empty()) {
1147+
wxFont banner = dc.GetFont();
1148+
banner.SetPointSize(banner.GetPointSize() + 3);
1149+
banner.SetWeight(wxFONTWEIGHT_BOLD);
1150+
dc.SetFont(banner);
1151+
1152+
const wxString text(p_headline.c_str(), wxConvUTF8);
1153+
const wxSize extent = dc.GetTextExtent(text);
1154+
1155+
// A panel behind it, so it reads as a notice rather than as
1156+
// a stray caption over an empty diagram.
1157+
const int pad = 8;
1158+
const wxRect box((size.x - extent.x)/2 - 2*pad, top,
1159+
extent.x + 4*pad, extent.y + 2*pad);
1160+
dc.SetBrush(wxBrush(wxColour(255, 244, 214)));
1161+
dc.SetPen(wxPen(wxColour(214, 170, 60), 1));
1162+
dc.DrawRectangle(box);
1163+
1164+
dc.SetTextForeground(wxColour(140, 90, 0));
1165+
dc.DrawText(text, (size.x - extent.x)/2, top + pad);
1166+
dc.SetTextForeground(wxColour(30, 30, 30));
1167+
1168+
top += box.height + 10;
1169+
dc.SetFont(*wxNORMAL_FONT);
1170+
}
1171+
11281172
const wxRect plot(0, top, size.x,
11291173
max(40, size.y - top - footerHeight - 6));
11301174

@@ -1401,6 +1445,19 @@ class MoDiagramCanvas : public wxPanel
14011445
MoDiagramClickTarget *p_owner;
14021446
MoColumn p_left, p_centre, p_right;
14031447
vector<MoConnection> p_links;
1448+
1449+
/**
1450+
* A reason the diagram is missing, said where it will be read.
1451+
*
1452+
* The explanation used to be a sentence in the footnote under the
1453+
* picture, in small grey text, below a spectrum that looks like a
1454+
* diagram with its sides missing. Nobody reads a footnote to find
1455+
* out why the thing they asked for is not there -- reported as
1456+
* "the MO diagram for water is broken" when the calculation had
1457+
* simply been run with symmetry switched off, which the footnote
1458+
* said in its second sentence.
1459+
*/
1460+
string p_headline;
14041461
bool p_haveFragments;
14051462
bool p_showEnergies;
14061463
string p_group;

‎src/apps/builder/MoDiagramPanel.C‎

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1069,9 +1069,21 @@ void MoDiagramPanel::build()
10691069
note << " The orbital energies are shown on their own below.";
10701070
if (!why.empty()) note << " " << why;
10711071

1072+
// SAID ONCE, LOUDLY, AT THE TOP.
1073+
//
1074+
// The explanation was the second sentence of a grey footnote
1075+
// under a spectrum that looks like a diagram with its sides
1076+
// missing, and it was read as "the MO diagram is broken" --
1077+
// which it was not; the calculation had been run with symmetry
1078+
// switched off, and nothing can be drawn from one that was.
1079+
const string headline = haveSymmetryLabels
1080+
? "The orbital labels do not match the structure's symmetry"
1081+
: "This job was run WITHOUT SYMMETRY - no diagram can be drawn";
1082+
10721083
p_canvas->setGroup(group);
10731084
p_canvas->setFormula(MoDiagram::formula(elements, charge));
1074-
p_canvas->setDiagram(left, centre, right, links, false, note.str());
1085+
p_canvas->setDiagram(left, centre, right, links, false, note.str(),
1086+
headline);
10751087
return;
10761088
}
10771089

0 commit comments

Comments
 (0)