LABG SUITE · OPEN SCIENCE IN THE BROWSER PalynoPro User’s Manual Manual de usuario From the electron micrograph to the pollen key De la micrografía electrónica a la clave polínica body 72.0 µm 10 µm outline body spines Morphotype B 32 spines measured simulated example0°90°180°270°360°3342radius (µm)RADIAL PROFILE · 720 DIRECTIONSA24 sp. · 2.0 µmB32 sp. · 2.8 µmC22 sp. · 1.7 µmTHREE MORPHOTYPES5 / 13 collapsedFERTILITYPC1 58.8% · PC2 23.4%THE COMPARISONLUIS ÁNGEL BARRERA-GUZMÁN FIRST ENGLISH EDITION · 2026 · VERSION 1.0
PalynoPro
User’s Manual · From the electron micrograph to the pollen key
Author
Luis Ángel Barrera-Guzmán
ORCID 0000-0001-8057-2583
Program
PalynoPro, version 1.0.0 (October 2026)
Manual
First English edition, 2026, translated from the first Spanish edition. Describes version 1.0 of the program.
Program license
GNU General Public License, version 3 or later (GPL-3.0-or-later).
Manual rights
© 2026 Luis Ángel Barrera-Guzmán. All rights reserved.
Interface language
Spanish or English, with the ES · EN switch on the top bar. In this manual the names of buttons, fields and menus are written as they appear on screen in English, for example Measure every one-grain picture.

How to cite the program

Barrera-Guzmán, L. Á. (2026). PalynoPro: quantitative pollen morphometry from electron micrographs (version 1.0.0) [Computer software]. Zenodo. https://doi.org/10.5281/zenodo.23883213

How to cite this manual

Barrera-Guzmán, L. Á. (2026). PalynoPro: User’s Manual (1st English ed.). Distributed with PalynoPro, version 1.0.0. https://doi.org/10.5281/zenodo.23883213

The program’s citation is the one the app itself gives, ready to copy, in the How to cite section of its home page. Both citations carry the Zenodo concept DOI, which always resolves to the latest version.

iPrivacy

PalynoPro runs entirely inside your browser. The micrographs, their text files and the indexes you open are read on your computer and are never sent to any server: you can work with the images of a thesis in progress or with unpublished data without any of it leaving your machine. The program uses no accounts, loads nothing from the internet and needs no connection to compute.

The illustrations, diagrams and screenshots in this manual are original: they were generated with the program itself or with code written for the manual. Every image of a grain and every figure comes from the app’s simulated example: three morphotypes that the program draws from known parameters. They are not photographs or measurements of any plant.

Contents

General contents of the manual

How to read this manual

The manual follows the same order as the app: seven numbered blocks that are worked through from top to bottom on the bar on the left. Each chapter explains one block and carries its number—Chapter 5 is Block 5, and its sections and figures are numbered 5.1, 5.2…. The introduction has no number: its sections are I.1, I.2….

Each chapter begins with what the block solves in a palynological study, goes on with what is on screen in the order in which it appears, and closes with the rules for reading the result and the most common mistakes. You do not need to read it straight through: if you only need the size of the grains, Chapters 2 and 3 are enough; if you have already measured and want to know whether your groups can be told apart, Chapter 6. Appendix B gathers the rules of every block.

A color for each block

The color of the block appears at the opening of its chapter, in the number of each section, on the tab at the edge of the page and in the contents, and it is the same as in the strip on the cover.

BlockName in the appWhat it does
1HomeHow a grain is measured, in plain words; a lab that draws a simulated grain and measures it live; the methods with their sources, the references and how to cite
2Images and calibrationOpens a folder, checks the groups and checks the calibration of each picture against its scale bar
3Outline and sizeThe body of each grain without its spines: diameters, elongation and circularity
4OrnamentationSpines on the outline, lumina of the reticulum and texture of the surface
5FertilityTurgid and collapsed grains in the overviews, by group
6Multivariate statisticsCan the groups be told apart by their pollen? With the grain as the unit
7ReportMethods, results, figures and gallery in one document to print or save as PDF

Kinds of boxes

iNote

Clarifications and practical tips that save time.

!Important

What can change your conclusions if it is overlooked.

θTheory in brief

The idea behind a calculation, without unnecessary formulas.

▸Worked example

A case worked with the program’s simulated example, with the numbers the app gives.

✓Decision rule
If the result falls in this case…then this is the recommended reading.

These are guides for interpretation, not laws: what you know about the plant, the preparation and how it was photographed always comes first.

✕When something goes wrong

What tends to fail when using the block—a mistyped magnification, a grain touching the edge of the picture, two pictures of the same grain taken for two grains—and how to fix it.

720
Key fact
A number or a fact worth remembering; for example, the number of directions in which the app reads the outline of each grain.

Writing conventions

Written like thisMeans
Compare the groupsA button, field or menu of the app, with its text exactly as it appears on screen in English.
Block 2›Calibration and reading of namesA path: open the first and look inside it for the second.
Ctrl + S, index.csvA key, a file name or a value that is typed as is.
body, spine, lumenThe grain without its ornamentation; each peak of the outline that the app recognizes as a spine (echina); each dark cell of the reticulum. Appendix C defines them all.
FeretThe largest and smallest diameter of the body: what a caliper would measure set in the longest and in the shortest direction.
63.2 µm · 0.1 µm/pxNumbers are written with a decimal point, as the app writes them, and with the unit separated by a space.
I
Introduction

Introduction to PalynoPro

A pollen study with scanning electron microscopy brings together tens or hundreds of photographs. Measuring them by hand, one by one, is slow and leaves much to the eye of whoever measures. PalynoPro reads them all, checks the scale of each one, measures the grain with the same criterion in all of them, and compares the groups with the grain, not the picture, as the unit.

I.1What is PalynoPro?

It is a program for quantitative pollen morphometry that runs in the browser, with nothing to install. It takes a folder of scanning electron micrographs and returns, for each grain, its size, shape and ornamentation measured with the same criterion, and for each group, whether its pollen can be told apart from that of the others.

It is designed to compare groups—morphotypes, varieties, populations, closely related species—by their pollen, and for teaching palynology. It calibrates each image from the magnification of the microscope and checks it against the scale bar printed on the picture itself; it separates the grain from the background and reads its outline in 720 directions; it removes the spines to measure the body; it counts and measures the spines on the outline; it finds the lumina of the reticulum and measures the texture of the surface; it estimates the proportion of collapsed grains in the overview pictures; and it compares the groups with tests by variable, principal components, PERMANOVA, discriminant analysis and random forest. At the end it writes a report with the methods, the tables and the figures.

Everything is computed with engines written from scratch for this program, without other people’s libraries, and each method cites the work that defines it: on the app’s home page, in the notes of each block and in the methods of the report.

The app’s home page: the tagline, the four buttons to get started and a measured echinate, reticulate pollen grain
Figure I.1. The PalynoPro home page when it opens. On the left, the bar of the seven blocks; in the center, the tagline, the buttons to get started and a simulated grain with the outline, the tips of the spines and the diameter the app measures; on the right, the list of the sections of the open block.

I.2Questions it answers

A good way to find out whether the program suits you is to see which questions it answers, and in which block.

QuestionBlock
How many micrometers does a pixel measure in each picture, and is it consistent with its scale bar?2
Which pictures show a single grain, which are overviews and which repeat a grain already photographed?2
How large is the body of each grain without its spines? How elongated and how circular is it?3
How many spines does it have on the outline, how tall and how far apart?4
How large are the lumina of the reticulum, and how rough or regular is the surface?4
What proportion of grains is collapsed in each group, and does it differ between groups?5
In which variables do the groups differ, and which of them resemble each other?6
Can the groups be told apart by the whole set of their measurements? How accurately would a new grain be classified?6
How do I publish the methods, the tables and the figures with the parameters I used?7

I.3Six ideas behind this manual

Everything that follows rests on six ideas. If you keep them in mind, many of the mistakes made when measuring pollen in photographs are no longer possible.

  1. The size of the pixel depends on the width at which the picture was saved. The magnification refers to a reference frame: the field measures that width divided by the magnification, and the pixel, that field divided by the width of the image in pixels. At the same magnification, a 1280 px picture has pixels twice as large as a 2560 px one. That is why Block 2 computes the pixel of each picture and checks it against its scale bar.
  2. A scale bar is there to check, not just to decorate. Its length in pixels times the pixel size must give a round length: 10, 20 or 50 µm. If it does not, something is wrong—a mistyped magnification, a different reference width—and the picture is flagged.
  3. Size is that of the body, without the ornamentation. Spines change the outline but not the grain. The app reads the outline as the distance from the center to the edge in 720 directions, cuts the peaks narrower than the base of a spine and measures what remains.
  4. What you see is a projection. A micrograph shows the silhouette and the face of the grain that looks toward the detector. The Feret diameters are equivalent to the polar and equatorial axes only in equatorial view, and the spines that are counted are those on the outline, not all of those on the surface.
  5. The grain is the unit, not the picture. The same grain is often photographed more than once. If every picture counted as a grain, the tests would believe they have more data than there are, and validation would classify a picture with the help of its twin. The app averages the pictures of each grain and validates by leaving out the whole grain.
  6. Shape is not viability. A collapsed grain loses solidity, and that makes it possible to compare groups in the overviews. But it is a morphological approximation: to claim that the pollen is viable you need a stain or a germination test.

I.4Data it accepts and what it delivers

The starting point is a folder of micrographs, with or without the files that accompany them. The other blocks work on what has already been read: they do not ask for separate tables.

InFormat and where
MicrographsTIFF from the microscope (8- or 16-bit, compressed or not), PNG or JPEG; a whole folder or individual files (Block 2)
Microscope filesThe .txt that many instruments leave next to each image, with the same name: the magnification, voltage, working distance and date are read from it (Block 2)
IndexAn optional .csv with one row per image and columns such as file, group, grain, magnification and exclude; without an index, the group and the grain are read from the file name (Block 2)
Key of groupsA text file with lines code = name to give a name to each group (Block 2)
ProjectsA .json saved earlier by the app itself (Ctrl + S to save, Ctrl + O to open)
OutFormat
FiguresDiameters by group, spines, lumina, texture, radial profile, fertility, biplot, variance explained, discriminant space and importance of the variables, in SVG or PNG; also through the suite’s figure studio
TablesThe index of the images and the tables by group, by picture and by variable in CSV, ready for a spreadsheet
ReportMaterial, methods with the parameters used and their citations, tables, figures, one measured grain per group, limitations and references, in Spanish or in English: to print, save as PDF or download as HTML
MethodsThe text of the methods, ready to paste into a manuscript

I.5What you need and how to open it

Only a modern browser, in a version from the last few years. You do not need to install anything or to have internet access; the whole program fits in one folder.

  1. Double-click index.html. It is the simplest way and everything works the same: the calculations and the example are inside the program.
  2. Or double-click Open PalynoPro.bat. It starts a minimal local server on port 9940 and opens the app at http://localhost:9940. You only need it to open the app from another computer or a tablet on the same network; the file server.ps1 explains how.

Preferences—the language and the light or dark theme—are stored in the browser itself and remembered next time. Data are not: each time you open the app it starts empty. To resume a study there is the .json project, which stores the settings, the list of images with their groups, their calibration and their exclusions, and the results of Blocks 3 to 5 (those of Block 6 are not stored: when the project is opened they are repeated, identical, with one click). If you try to close the tab with unsaved data, the app warns you.

!The project does not copy your pictures

Unlike other applications of the suite, a PalynoPro project stores a reference to each image, not the image. When you open a project the tables and figures come back, but to see the pictures again or to measure them anew you have to open the same folder in Block 2. Micrographs are heavy, and this way the project stays small and your images are not duplicated.

I.6A tour of the interface

All the applications of the suite share the same bar, the same navigation and the same figure tools, so what you learn here also serves you in the others.

The Block 3 screen with the simulated example measured and its parts numbered 1 2 3 4 5 6 7 8 9 10 11 12 13
Figure I.2. The Block 3 screen with the simulated example already measured. The numbers correspond to the list below.

Getting around without getting lost

At the foot of each block two buttons lead to the previous and the next one. When you change a control and the results are recomputed further down, a floating button appears that takes you back to the control you touched, and another one to go back to the top. Long calculations—measuring all the pictures, counting in the overviews, comparing the groups—show a waiting window with their progress. Almost everything can also be done from the keyboard:

KeyWhat it does
Alt + ← · Alt + →The previous or the next block; in focused mode, the previous or the next section
Ctrl + KSearch for a block, a section, a control or a figure
Ctrl + S · Ctrl + OSave the project to a .json · open a saved one
?Show the list of shortcuts
The search window with Feret typed: one figure, three Feret controls and three looser matches
Figure I.3. Search (Ctrl + K) with “Feret” typed, after measuring the example: it finds the figure Feret diameters of the body, which opens in the figure studio, the Feret layer of Block 3 and the two Feret variables of Block 6; below them come looser matches, whose names merely contain the letters f, e, r, e, t in that order. Enter takes you to the chosen result.

The check on the image

Blocks 3, 4 and 5 end with a check card: the picture with what the app measured drawn on top, so that you can see in each grain whether the outline, the body and the spines are the ones you would have marked. Each layer is turned on or off with its checkbox, and a badly measured picture is excluded with a button.

The check of picture 01_A of the simulated example: the grain with its mask, its outline, its body and its spines, and its measurements beside it
Figure I.4. Block 3›Check of every picture with the picture 01_A.png of the simulated example: the mask of the grain (blue), the outline with spines (orange), the body without spines (light blue) and the tips of the spines (red). On the right, its measurements: the body measures 59.56 µm, with Feret diameters of 59.86 × 59.23 µm.

The figures

Every figure of the app can be opened in the figure studio, a window shared by the whole suite where the texts, the font size, the legend and the colors are changed without touching the data, and which exports at the widths and resolutions journals ask for. Next to each figure, the ✎ button opens the figure editor. The SVG and PNG buttons of each figure, and the report, always write the colors of the light theme, even if you are working in the dark one. Chapter 7 explains it in depth.

I.7The simulated example

To learn without images of your own, the app comes with a simulated example: three morphotypes of echinate, reticulate pollen that the program itself draws, every time it is opened, from known parameters. They are not photographs of any plant. It is opened with Try the simulated example on the home page or with Simulated example in Block 2, and the app says that it is simulated.

The notice of the simulated example and the Summary card of Block 2: 33 images, 3 groups, 24 grains, 33 calibrated, 33 bars checked and 3 overviews
Figure I.5. The example just opened in Block 2: 33 images of three groups (A, B and C), with 24 grains in the one-grain pictures, all calibrated, and the 33 scale bars give round lengths.

Each morphotype has eight grains. Each grain is drawn in a 1280 × 960 px picture at a magnification of 1000 (0.1 µm per pixel), with its noise, its scale bar and its caption, as a microscope would; grains 3 and 6 of each morphotype are photographed twice, as happens in a real study. In addition, each morphotype has an overview at a magnification of 150 with fourteen grains, some of them collapsed. In all: 30 one-grain pictures, which are 24 grains, and 3 overviews.

The three simulated morphotypes, with the values they are drawn with (each grain varies around them)
MorphotypeBody (semi-axis, µm)Minor / majorSpines on the outlineSpine height (µm)Reticulum mesh (µm)Collapsed in the overview
A (simulated)310.97242.02.215%
B (simulated)350.95322.82.635%
C (simulated)330.90221.73.410%

Since it is known what each grain was drawn with, the example also shows how well the app measures. Morphotype B, for example, is drawn with a body of about 68 µm in diameter, and the app measures a mean of 67.93 µm over its eight grains. The names of the pictures follow the form 01_A.png: the number of the grain and, after the underscore, the group; repeated pictures carry a letter (03a_A.png) and overviews the number 90 (90_A.png).

iThe whole manual comes from this example

Every screenshot and every number in this manual comes from the simulated example, with the default values of each control unless the text says what was changed. It is called “morphotype B of the example,” never as if it were a real plant.

I.8How a study is carried out

The blocks are in the order of a real palynological study. You do not have to go through all of them: if you have no overviews, Block 5 is skipped. The How it works section of the home page sums it up in seven steps.

The seven steps of How it works: open the images, calibrate and check, outline and size, ornamentation, fertility, compare groups and report
Figure I.6. How it works: the seven steps of a study, from the folder of pictures to the report.
  1. Open and calibrate (Block 2). Open the folder and check that the group and the grain of each picture were read correctly, that all are calibrated and that no bar is doubtful; mark which pictures are overviews and exclude those that are of no use.
  2. Measure (Blocks 3 and 4). A single button measures all the one-grain pictures: the outline, the body, the spines, the lumina and the texture come out of the same pass. Check each picture on the image.
  3. Count (Block 5). In the overviews, the proportion of turgid and collapsed grains of each group.
  4. Compare (Block 6). The tests by variable, the principal components, the PERMANOVA and the two classifiers, with the grain as the unit.
  5. Publish (Block 7). The report with the methods, the tables, the figures and one measured grain per group.
iData are shared between blocks

What is read and calibrated in Block 2 is used by all the others; the measurement of Block 3 feeds Blocks 4, 6 and 7. If you change the calibration, a group or an exclusion, the results that depend on it are cleared and the block asks you to measure again; its check mark on the bar goes out as long as it has no result.

I.9How it was checked

A measuring program is worth what its numbers are worth. The PalynoPro engines were checked in two independent ways, and neither uses anybody’s pictures: grains drawn by the program itself, whose truth is known, and statistical calculations repeated separately.

6,705
Comparisons without disagreement
Analysis of variance, Kruskal–Wallis, Tukey, Holm, principal components, linear discriminant analysis with its validation, PERMANOVA, χ² and Wilson intervals: 18 families of results, all within their tolerance. In addition, 155 automated tests run in the browser and watch over the reading of images, the calibration, the engines and the example.

The tests also show where the app falls short, and that was written down. Spine height comes out somewhat lower than the drawn height—about one pixel, 4% in the median—because the finest tip of the cone does not manage to fill a pixel; the diameter of the lumen is proportional to the mesh of the reticulum, but not equal to it, because the lumen is only the dark part of each cell; and the default solidity threshold is conservative: it recognizes most collapsed grains without confusing healthy ones. The chapters say so where it matters.

I.10What the program does not do

Knowing where a tool ends is as useful as knowing what it does. The app’s home page says so in What this program does not do:

It does notWhy, and what to do
Rebuild the grain in 3DIt measures the silhouette and the visible face; the spines it counts are those of the outline, not all of those on the surface.
Guess the view of the grainPolar, equatorial or oblique: the Feret diameters are equivalent to the P and E axes only in equatorial view. If you need P and E, photograph oriented views and group them.
Read the number on the barIt computes the pixel size and checks that the bar gives a round length; it does not recognize the text written on the caption.
Replace a viability testFertility by solidity is a morphological approximation; to claim viability you need a stain or a germination test.
Measure the thickness of the wallThe exine, tectum and nexine are measured in sections or with transmission microscopy.
Upload your imagesEverything is computed on your computer; the app only keeps references to the files you open.
1
Chapter one · Block 1

Home: the theory, the lab and the methods

The first block asks for no images: it teaches. It describes in seven steps how a study is carried out, lets you draw a simulated grain and see live how well the app measures it, explains in plain words the ideas behind each measurement, and puts in view the methods, their sources, the limits of the program and the way to cite it. It is also the way in: from here you open your images, the simulated example or a saved project.

1.1The home page

It is the first thing you see when you open the app, and also what appears every time you click the name PalynoPro on the top bar or the Home block on the bar on the left.

At the top come the label Quantitative palynology and the app’s tagline, From the electron micrograph to the pollen key, the same as on the cover of this manual. Below, a paragraph sums up everything the program does, and on the right a simulated echinate, reticulate grain shows what the app draws on each picture: the outline of the body (dashed line), the tips of some spines (circles) and the diameter it measures (the dimension line at the bottom).

The app’s home page: the label, the tagline, the introductory paragraph, the four buttons, the four badges and a simulated grain with its outline, its spines and its diameter 1 2 3 4 5 6 7
Figure 1.1. The Block 1 home page. The numbers correspond to the list below.
iThe example replaces whatever is open

If you already have images of your own open and press Try the simulated example, the app asks before replacing them. Whatever has not been saved in a project is lost: save first with Ctrl + S if you need to.

As you scroll down the home page, the sections that follow in this chapter appear in this order. The In this block list on the right names them all, and one click takes you to each.

1.2How it works: the seven steps

How it works sets out in a strip the seven steps of a palynological study, in the order in which they are done, each with its label and what it produces (Figure I.6 of the introduction shows it in full):

StepIn the appWhat it producesBlock
1Open the imagesa folder with its metadata2
2Calibrate and checkµm per pixel and scale bar2
3Outline and sizebody without spines, Feret3
4Ornamentationspines, lumina, texture4
5Fertilityturgid and collapsed grains5
6Compare groupsPCA, PERMANOVA, key6
7Reportmethods, tables and figures7

The first two steps take place in the same block, and Steps 3 and 4 come out of a single measuring pass (the one launched in Block 3). Step 5 is optional: it only makes sense if you photographed overviews, at low magnification, with many grains in each picture.

1.3Try it: this is how it measures a grain

Before trusting a program that measures, it is worth watching it measure something whose answer is known. The lab draws a simulated grain with the values you choose and measures it at once with the same engines the app uses on your pictures.

Five sliders set the grain that is drawn; each time you move one, the grain is drawn again and measured again:

SliderRangeDefaultWhat it changes in the drawing
Body diameter30 to 100 µm66 µmThe size of the body, without the spines
Elongation1 to 1.41.06The ratio between the major and the minor axis; 1 is a circle
Spines on the outline8 to 5026How many spines stick out of the silhouette
Spine height0.6 to 4 µm2.2 µmHow far each spine protrudes above the body
Reticulum mesh1.6 to 4.4 µm2.6 µmThe size of the cells of the net of walls on the surface
The lab with the default values: the five sliders, six tiles of drawn against measured, the simulated grain with its outline and its spines, and its radial profile
Figure 1.2. The lab with the default values. Each tile compares what was measured (the large number) with what was drawn (below). On the left, the grain with the outline (orange), the body (dashed light blue) and the tips of the spines (red); on the right, its radial profile.

The six tiles

Each tile shows at the top what the app measured and below what was drawn. With the default values the app gives:

TileMeasuredDrawnHow to read it
Body diameter66.1 µm66.0 µmThe diameter of the circle with the same area as the body
Feret68.0 × 64.168.0 × 64.1The largest and the smallest diameter of the body, in µm
Spines on the outline2626Spines found on the silhouette
Spine height2.08 µm2.20 µmThe mean of the heights, from the tip of each spine to the chord joining its two feet
Lumen (median)1.49 µmmesh 2.6 µmThe median diameter of the dark cells
Scale bar10.01 µmround: correctThe bar of the caption, measured with the calibration

The body of the default grain is not a circle: with an elongation of 1.06, its drawn major diameter is 68.0 µm and its minor diameter 64.1 µm, and its body diameter—that of the circle of equal area, the geometric mean of the two axes—is 66.0 µm. That is what the app calls Body diameter in every block: a single number that sums up the size even if the grain is somewhat elongated.

Below the two figures, a status line says it in words. With the default values: “The measured body differs from the drawn one by 0.08% and 26 of the 26 drawn spines were found,” and it goes on with a note on the height of the spines: “about one pixel of height is lost (here 0.161 µm), some 3 to 6% on spines many pixels high and more if the spine is short or the spines touch at the base. It is reported in the methods.” (below).

The two figures

The simulated grain and what was measured is the simulated micrograph, in grayscale, with its scale bar and its caption at the bottom as a microscope would put them, and on top what the app found. Radial profile: outline, body and spines is the same information unrolled: on the horizontal axis, the direction from the center of the grain (from 0 to 360°); on the vertical one, the radius in micrometers. The orange line is the outline with spines, each peak is a spine (red dot) and the dashed blue line is the body that remains when the peaks are cut. The two broad waves of the body are the elongation: in an elongated grain the radius grows and shrinks twice per turn.

θTheory in brief · how the body is separated from the spines

The outline is read as the distance from the center to the edge in 720 directions, one every half degree. A spine is a narrow peak in that profile; the body, by contrast, changes slowly. The app applies to the profile a grayscale opening (Serra, 1982) with an element as wide as the base of a spine: every peak narrower than that base disappears, and what remains is the body. The cut peaks that protrude at least 0.3 µm are the spines, and the height of each one is measured from its tip to the chord joining its two feet, so that it does not depend on the curvature of the body along that stretch. In the lab the base adjusts itself to the size of the drawn grain; with your pictures it is set by the Largest base of a spine (µm) control of Block 3.

A small, elongated and very spiny grain

Move the sliders to see where the measurement is put to the test. Figure 1.3 shows a grain of 40 µm, with an elongation of 1.30, 40 spines of 3.5 µm and a mesh of 4.0 µm.

The lab with a 40-micrometer, elongated grain with 40 spines: the tiles, the grain and its radial profile
Figure 1.3. A grain of 40 µm, elongation 1.30, 40 spines of 3.5 µm and a mesh of 4.0 µm. The body comes out at 40.3 µm (0.66% difference), Feret 45.6 × 35.7 against 45.6 × 35.1, all 40 spines, a height of 3.28 µm against 3.52 µm drawn and a median lumen of 2.30 µm.

There are three things to learn from the two figures, and all three come back with your pictures:

  1. Size and number of spines come out almost exact. In both grains the body differs by less than 1% from what was drawn, and all the spines are found.
  2. Spine height comes out somewhat lower than the drawn one. The finest tip of the cone does not manage to fill a pixel, so the edge of the image ends a little before the spine does. The app measures each spine from its tip to the chord joining its two feet, and what is lost is about one pixel of height: with the default values, the measured height is 5.7% lower (2.08 against 2.20 µm, with pixels of 0.161 µm). In the grain of Figure 1.3 the loss is 6.8% (3.28 against 3.52 µm): its 40 spines almost touch at the base, which is precisely the case in which the status line warns that the difference grows. The program’s validation tests give a median of 3.9% below, between 2.9 and 5.7% in nine grains out of ten. The bias is similar in all grains measured with the same pixel, so it does not get in the way of comparing groups, but do not take the height as absolute.
  3. The lumen is not the mesh. The mesh is the distance from one wall to the next; the lumen is only the dark part of each cell, without the wall. That is why the median lumen comes out at about half the mesh (1.49 µm with a mesh of 2.6 µm; 2.30 µm with a mesh of 4.0 µm). What matters is that it grows with it: it serves to compare reticula, not to report the mesh.

The grain of the lab is always drawn with the same seed, in an 800 × 600 px image, and with the magnification that makes the grain fill somewhat more than half of the field. That is why the same values always give the same numbers, and the scale bar comes out round (10.01 µm in Figure 1.2, 9.98 µm in Figure 1.3).

1.4The blocks

The blocks shows one card for each of Blocks 2 to 7, with its number, a small drawing, its label, its name and what it does. A click on the card opens the block, just like its button on the bar on the left. Blocks that need images or earlier results say so when they are opened and lead to the missing block.

BlockLabelWhat it does, according to its card
2DataReads TIFF, PNG or JPEG, the text files of the microscope and an optional index; calibrates each picture and checks it against its scale bar
3MorphometryThe outline of each grain, the body without spines, its Feret diameters, elongation and circularity, with a visual check of every measurement
4OrnamentationSpines on the outline (number, height, spacing and density), lumina of the reticulum and texture of the surface
5ViabilityIn the overviews, each grain with its silhouette and its solidity; the proportion of collapsed grains by group, with its interval
6ComparisonTable by group with Tukey letters, principal components, PERMANOVA, discriminant analysis and random forest validated by grain
7PublicationThe methods written out with their references, a report to print or save as PDF, and every table and figure
The six cards of Blocks 2 to 7 with their number, drawing, label, name and description
Figure 1.4. The blocks: Data, Morphometry, Ornamentation, Viability, Comparison and Publication. The drawing on each card sums up what the block does: the scale bar and the caption of Block 2, the dimension line of the body of Block 3, the profile with its peaks of Block 4…

1.5Pollen under the electron microscope

Pollen under the electron microscope, in plain words gathers, in six collapsible topics, the ideas behind the measurements. Each topic shows on the right the block where it is used; the first one comes open and the others open with a click on their title.

TopicUsed inThe idea, in one line
How a grain looks under the electron microscopeBlocks 2–4The secondary-electron image shows the surface: the edge and the spines shine against the dark background, and that is why the grain is separated from the background with a gray threshold. The wall is not seen in thickness, and only the half of the grain facing the detector is seen.
Calibration: how many micrometers a pixel measuresBlock 2The field measures the reference width divided by the magnification, and the pixel, that field divided by the width in pixels of the saved image; the scale bar checks it (Chapter 2).
Body and ornamentationBlocks 3–4Size is reported for the body; the radial profile in 720 directions without the narrow peaks is the body, and the peaks are the spines (echinae). Feret is equivalent to the polar and equatorial axes only in equatorial view.
The reticulum: muri and luminaBlock 4The bright walls enclose dark lumina; a lumen is a pixel darker than its neighborhood. Texture sums up the contrast and the regularity of the surface.
The grain is the unit, not the pictureBlock 6The pictures of the same grain are averaged, and validation leaves out the whole grain.
Fertility from the shapeBlock 5An empty grain folds and loses solidity (area divided by the area of the convex hull); it is a morphological approximation, not a viability test.
The six topics of the theory, with the calibration topic open
Figure 1.5. The six topics, with Calibration: how many micrometers a pixel measures open.

The introduction (I.3) turns these ideas into six rules, and each chapter applies them where they belong. If you are going to read only one topic before opening your pictures, read the one on calibration: it is the mistake that most often shrinks or enlarges grains without anybody noticing.

1.6The methods and where they come from

Fourteen cards name the methods the program uses, each with its family and the work that defines it. All are written from scratch for the app; the citation says where the idea comes from, not where the code comes from.

FamilyMethod and sourceBlock
CalibrationPixel size from magnification and width; scale bar checked2
ImageOtsu threshold (1979), to separate the grain from the background3 5
ImageArea resampling to a common pixel (Wolberg, 1990)2 3
ShapeGrayscale opening of the radial profile (Serra, 1982): the body without the spines3
ShapeFeret widths by rotating calipers (Shamos, 1978)3
ShapeConvex hull (Andrew, 1979), for solidity5
SurfaceLumina by local threshold (Niblack, 1986)4
SurfaceGray-level co-occurrence matrix (Haralick et al., 1973)4
StatisticsANOVA, Tukey (1949), Kruskal and Wallis (1952), Holm (1979)6
MultivariatePrincipal components (Pearson, 1901; Hotelling, 1933)6
MultivariatePERMANOVA (Anderson, 2001)6
ClassificationLinear discriminant analysis (Fisher, 1936)6
ClassificationRandom forest (Breiman, 2001)6
ViabilityProportion with the Wilson interval (1927)5
The fourteen method cards with their family and author
Figure 1.6. The methods and where they come from: fourteen methods in eight families.

Each chapter explains the method where it is used, and the report of Block 7 writes out those that took part in your analysis, with their parameters and their citations.

1.7What this program does not do

Six cards say where the tool ends. The introduction (I.10) already gathers them in a table; here is what each limit means when planning a study.

1.8References and how to cite

References lists, in alphabetical order, the 22 works cited by the methods and the texts of the app: those of the methods in Section 1.6 and, in addition, Borgefors (1986), for the distance transform with which Block 4 counts the density of lumina away from the edge of the grain; Cohen (1960), for the κ coefficient with which Block 6 sums up the accuracy of the classifiers; Erdtman (1952), Halbritter et al. (2018) and Punt et al. (2007), for the palynological terminology; and McArdle and Anderson (2001), for PERMANOVA. Appendix F gives them in full, grouped by topic.

At the end of the home page, How to cite gives the citation of the program ready to paste, and the Copy the citation button copies it to the clipboard (the app confirms with “Citation copied”). In the Spanish interface the citation is in Spanish. Below it, at the foot of the home page, the User’s manual link opens this manual (in the Spanish interface, Manual de usuario (en español) opens the Spanish edition).

The How to cite section with the citation of the program and the Copy the citation button
Figure 1.7. How to cite: the citation of version 1.0.0.
Barrera-Guzmán, L. Á. (2026). PalynoPro: quantitative pollen morphometry from electron micrographs (version 1.0.0) [Computer software]. Zenodo. https://doi.org/10.5281/zenodo.23883213

The DOI in the citation is the Zenodo concept DOI, which always resolves to the latest version. Cite the version you worked with—the one given by the citation in your copy—because results may change between versions. Along with the program, cite the methods you used: the methods text of Block 7 already includes their references.

✓Decision rule · before leaving Block 1
If this is the first time you use the app…open Try the simulated example and work through the blocks with this manual: all its numbers come from that example.
If your pollen has very fine or very tall spines…reproduce it in the lab with similar values and see how far the measured height is from the drawn one.
If you are going to report spine height…give it as a comparative measurement: it comes out about one pixel below the real one (6 to 7% in the grains of this chapter); the methods of Block 7 already say so.
If you are going to report the reticulum…report the diameter of the lumen as a lumen, not as a mesh.
If you already have a saved project…Open a project and then, in Block 2, open the folder of its pictures again: if they are the same, the results are kept.

These are guides for interpretation, not laws: what you know about the plant, the preparation and how it was photographed always comes first.

✕When something goes wrong

The lab does not change when a slider is moved. The grain is drawn and measured again a moment after you release it; if you move several at once, the app finishes the measurement in progress and makes one more with the final values. “Open a project” says the file is not a PalynoPro project. The .json belongs to another application of the suite or was edited by hand. The project opened but the pictures are not shown. That is expected: the project does not store the images; open their folder in Block 2 (Chapter 2).

2
Chapter two · Block 2

Images and calibration

Everything the app measures later depends on two things decided here: how many micrometers a pixel measures in each picture, and to which group and which grain each picture belongs. The block reads the folder with whatever comes with it, calibrates each image, checks it against its own scale bar, recognizes which pictures show one grain and which are overviews, and lets you correct whatever is needed before measuring.

2.1Opening a folder or the example

The block presents itself with its subtitle, Open a folder, check the groups and the calibration of every picture., a drop-down that explains it in two paragraphs, and a single card: the area where the images are dropped.

Block 2 without images: the title, the What this block does drop-down and the area to drop a folder, with its four buttons 1 2 3 4 5
Figure 2.1. Block 2 when it is opened, before any images are read.

You can also drag the folder, or a handful of files, from your system’s file explorer onto the dotted area of Drop a folder or your images here. Nothing is uploaded anywhere: the files are read on your computer, and each image is read in full only once—to learn its size, look for its scale bar and make a thumbnail—and again only when it is measured.

What the app recognizes in the folder

There is no need to sort anything: the app classifies each file by its extension and its name.

FileHow it recognizes it and what it takes from it
ImagesTIFF (8- or 16-bit; uncompressed or with LZW, PackBits or Deflate; grayscale, palette or color), PNG, JPEG, BMP, WebP and GIF. Everything is converted to grayscale: one gray level per pixel. TIFF is read by a reader of the program’s own, because the browser cannot display it.
The microscope’s .txtA .txt with the same name as an image (05_B.txt next to 05_B.tif). From it, or from the text some instruments store inside the TIFF itself, the magnification, the pixel size if it is written, the voltage, the working distance and the date are read.
The indexA .csv (or a .txt that does not belong to any image) with a header and one row per image. The only required column is the file column. Only the first index found is used.
The key of groupsA text file, other than the index, with lines code = name or code: name.

The index

Columns are recognized by their name, in English or in Spanish, regardless of capitals and accents, and the separator can be a comma, a semicolon or a tab. Each row is joined to its image by the file name, with or without the extension.

ColumnAlso acceptedWhat it does
filearchivo, image, foto, id…The name of the image (required)
groupgrupo, morfotipo, species, taxon, code…The group; it prevails over what is read from the file name
namenombre, group_name…The long name of the group of that row
graingrano, unit, specimen…The grain; two pictures with the same group and grain are the same grain
magnificationmagnificacion, mag, aumentos…The magnification, if the microscope’s .txt did not give it
um_per_pxum_por_px, pixel_size_um…The pixel size, if you already know it
excludeexcluir, excluded, descartarExcludes the picture if it says 1, si, yes, true or x
notenota, notes, comentario…A comment, which the viewer shows
tiernivel, tipo, kindThe kind of picture: whatever contains “pano” or “over” is an overview; “det,” a detail; anything else, one grain

The key of groups

It gives each group code a readable name, which then appears in tables, figures and the report. For example, a file key.txt with these two lines:

A = Morphotype A   ·   G1: Morphotype one

The code is a single word of letters and digits, like those read from file names: A, G1, P12 or 7 will do, and so will one of up to eight characters with a hyphen or an underscore in the middle (north-2). What comes after the = or the colon is the name. If you prefer not to make a separate file, type the names in the Groups card (2.4) or in the name column of the index.

The reading message

When it finishes, a message below the buttons says what was read: how many images, how many microscope files, the name of the index and how many group names the key brought; and, if some image could not be read, its name and the reason. With the example, the message warns that it is simulated: “three morphotypes drawn by the app with known parameters (they are not photographs of real plants). Some grains were photographed twice, as in a real study.” The five cards that follow appear below it.

iImages can be added

If images are already open and you choose another folder, the new ones are added to those already there; those with a name that is already present are not repeated. If you opened a project earlier, opening its folder joins each picture to its saved row again: the message says so (“…, 33 of the project opened again,” for example) and the results of the project are kept. If instead the folder brings images that were not there and there were already results, the app asks first: “There are N image(s) that were not in the set. Adding them clears the results already computed (outline, ornamentation, fertility and statistics), which will have to be computed again. Continue?”. If you go on, the reading message confirms it with “The set changed: the previous results were cleared.”. To start from scratch, Clear.

2.2The summary and its notices

Summary is the card worth looking at first: six tiles and, below them, the notices of whatever the app found. Figure I.5 of the introduction shows it with the example just opened.

TileExampleWhat it counts
Images33All the open images; below, how many are excluded (0)
Groups3The distinct group codes, with the first six below (A · B · C)
Grains24The distinct grains (the combinations of group and grain) in the one-grain pictures that are not excluded: repeated pictures of a grain count once, and overviews do not count
Calibrated33 / 33Those that have a pixel size; the green border says they all do
Bar checked33The bars that give a round length; below, how many are doubtful (none doubtful)
Overviews3The pictures of the overview kind; below, the detail ones (0)
i30 pictures, 24 grains

The example has 30 one-grain pictures, but 24 grains: eight per morphotype, of which grains 3 and 6 were photographed twice. The Grains tile counts grains, not pictures, and it is the same number that Block 3 will measure. If you see more grains here than you photographed, some repeated picture did not end up with the same group and grain as its twin (2.5).

The notices

Below the tiles the app writes one notice for each thing it found. With the example only the green one appears: “The 33 bars found give round lengths: the calibration is consistent.”

Notice (abridged)What it means and what to do
… image(s) have no magnification nor pixel sizeNeither the .txt, nor the TIFF, nor the index gave anything to calibrate them with. Type their magnification in the table (2.5) or measure their bar by hand (2.6). Meanwhile they stay out of the measurements.
… bar(s) do not give a round length with the calibrationCheck those pictures with the Doubtful bar filter. The most common cause is a mistyped magnification; the other, an instrument with a different reference width (2.3).
The … bars found give round lengthsEverything is in order (green).
In … image(s), the pixel size of the index or the file did not match the scale bar while the magnification did: the magnification was usedA pixel size copied wrongly into an index, or written wrongly by the instrument. The app replaced it with the one from the magnification, and the viewer says what the original was. Correct that index.
… picture(s) without a barThey are calibrated by their magnification, without a check (blue, for information).
No group was recognized in the namesAdjust the pattern of the name (2.3) or load an index with a group column.
▸Worked example · a mistyped magnification

In the table of images, change the magnification of 02_A.png from 1000 to 1200, as if it had been mistyped. The app recomputes the pixel of that picture: 128,000 µm ÷ (1200 × 1280 px) = 0.08333 µm. Its bar measures 100 px, which would now give 8.333 µm: that is not a round length—the nearest one, 10 µm, is almost 17% away—so the picture is flagged. The tile changes to 32 with 1 with a doubtful bar, with an amber border, and the notice appears (Figure 2.2). At 1200× the grain of that picture would have measured a sixth less than it does.

The Summary card with 32 bars checked, one doubtful, and the notice of a bar that does not give a round length
Figure 2.2. Summary after typing 1200 instead of 1000 as the magnification of 02_A.png.

A doubtful bar does not take the picture out of the analysis: the app goes on measuring it with the calibration it has, because it cannot know which of the two—the magnification or the bar—is wrong. That is for you to decide. When you type 1000 again, the notice disappears.

2.3Calibration and reading of names

Three settings that apply to all the images, and that are not applied until you press Apply.

The Calibration and reading of names card with the reference width of 128 mm, the automatic analysis pixel of 0.1 micrometers and the pattern of the name
Figure 2.3. Calibration and reading of names with the example and the default values. The line below shows how the first three names are read.

Width of the reference frame (mm)

The magnification an electron microscope writes refers to a reference frame of fixed width: the photographed field measures that width divided by the magnification. The pixel size is that field divided by the width in pixels of the image as it was saved:

µm per pixel = reference width (mm) × 1000 ÷ (magnification × image width in px)

The default value, 128 mm, is that of many instruments (those that leave text files with $CM_MAG lines). In the example: 128 × 1000 ÷ (1000 × 1280) = 0.1 µm per pixel in the one-grain pictures, and 128 × 1000 ÷ (150 × 1280) = 0.66667 µm in the overviews. If your instrument uses a different frame, the doubtful-bar notice will come up in almost all the pictures at once and in the same proportion: that is the sign that this number must be changed. An empty or non-positive value goes back to 128.

θTheory in brief · where the size of each pixel comes from

The app takes the pixel size from the strongest source each picture has, in this order: the one you measured by hand on the bar (2.6); the one in the index (um_per_px); the one the instrument wrote in its .txt or in the TIFF; the one that comes from the magnification and the reference width; and, if there is nothing, the picture stays not calibrated. The Source column of the table says which one was used. There is a single exception: if the size from the index or the instrument contradicts the bar and the one from the magnification agrees with it, the magnification wins, and the summary gives notice of it.

The check against the scale bar

When it reads each image, the app looks for its bar in the bottom fifth: a strip of almost white pixels, at least 2% and at most 45% of the width of the picture, that repeats with the same start and the same length (±2 px) over at least three consecutive rows, and that is almost completely filled. If there are several, it takes the longest. Its length in pixels times the pixel size must give a round length: 1, 2 or 5 times a power of ten (1, 2, 5, 10, 20, 50, 100 µm…), with a tolerance of 4%.

The scale bar in the example
PicturesMagnificationµm per pixelBarLengthVerdict
30 one-grain1000×0.1100 px10 µmround: 10 µm
3 overviews150×0.66667152 px101.333 µmround: 100 µm (1.3% difference)
02_A.png at 1200× (example in 2.2)1200×0.08333100 px8.333 µmexpected 10 µm

The bar also tells where the microscope’s caption begins—the strip at the bottom with the bar, the voltage and the other data—: the app cuts the picture a few rows above the bar, so that neither the bar nor the letters are taken for part of the grain. If there is no bar, it cuts at a dark strip at the foot, if there is one. The viewer (2.6) draws that cut.

Pixel of the analysis (µm)

Before measuring, all the one-grain pictures are brought to the same pixel size by area resampling (Wolberg, 1990). That way texture, lumina and spines are measured with the same fineness in pictures taken at different resolutions. Empty—the normal case—means automatic: the 90th percentile of the pixel size of the included one-grain pictures, rounded to two significant figures, so that almost none of them has to be enlarged. The help line below says what it came to: empty = automatic: 0.1 µm in the example, where all one-grain pictures have the same pixel. Pictures with less resolution than the analysis pixel are enlarged, and Block 3 flags them. Overviews are not brought to this pixel: Block 5 counts them at their own pixel (reduced, if they are more than 1600 px wide).

Type a value only if you want to fix it—for example, to compare two studies at the same pixel. A pixel finer than that of your pictures adds no detail: it only enlarges.

Pattern of the name (group and grain)

If there is no index, the group and the grain of each picture are read from its name (without the extension) with a regular expression that has two named parts, (?<grain>…) for the grain and (?<group>…) for the group. The one the app comes with is:

^(?<grain>\d+)[A-Za-z]*_(?<group>[A-Za-z]+\d*)

It reads like this: at the start, one or more digits (the grain); then optional letters (the one that tells a second picture of the same grain apart); an underscore; and letters followed by optional digits (the group). With it, 01_A is grain 01 of group A, and 03a_A is another picture of the same grain 03. The line This is how the first names are read checks it live on the first three images while you type: in the example, “01_A → group A, grain 01 · 02_A → group A, grain 02 · 03_A → group A, grain 03”.

Patterns for other ways of naming the pictures
Your files are calledPattern
A_01.tif, A_01b.tif^(?<group>[A-Za-z]+\d*)_(?<grain>\d+)
P3-g12-1.tif^(?<group>P\d+)-g(?<grain>\d+)
north_07.png^(?<group>[a-z]+)_(?<grain>\d+)

When you press Apply, the app checks that the pattern is a valid expression (if not, it says so and changes nothing); if the pattern changed, it reads the group and the grain of the pictures again with it; it recomputes the calibration of all of them with the reference width, classifies the kinds of picture again and confirms with “Calibration applied”. Everything that had been measured in Blocks 3 to 6 is cleared, because it depended on the previous settings.

iThe index and the table prevail over the pattern

The pattern only guesses. A group or a grain that came from the index, or that you typed in the table of images, is respected even if you change the pattern, and the app says so: “The new pattern did not change the group or grain of N image(s): they came from the index or were typed in the table, and those prevail. To change them, edit them in the table.”. The same goes for the pixel size: if, on recomputing, the one from the index or the instrument still contradicts the bar, the app keeps using the one from the magnification, as when the folder was opened.

2.4Groups

One row per group, with its code and its color—the same it will have in every figure—, a Name field and two counts without the excluded pictures: Images (all) and Grains (in the one-grain pictures).

The Groups card with the three simulated morphotypes, 11 images and 8 grains each
Figure 2.4. Groups with the example: each morphotype has 11 images (10 one-grain pictures and its overview) and 8 grains: the two repeated pictures count once and the overview does not count, as in the Grains tile of 2.2.

The name is used in the tables, the figures and the report instead of the code; if you leave it empty, the code is used. It comes from the key of groups, from the name column of the index or, in the example, from the app itself (“Morphotype A (simulated)”). Changing it clears no result: it only changes how things are labeled.

The code, on the other hand, is changed in the table of images, picture by picture (2.5). A group exists as long as some picture has it.

2.5The table of images

One row per image, with what the app read and computed from it, and the fields you can correct. At the top, seven filters choose which rows are shown: All, One grain, Overviews, Detail, Doubtful bar, Not calibrated and Excluded.

The Images card with the filters and the first seven rows of the example
Figure 2.5. Images with the All filter: the first pictures of morphotype A, all at 1000× and 1280 px wide, with 0.1 µm per pixel taken from the magnification and the bar checked at 10 µm. The highlighted row is the one the viewer shows.
ColumnWhat it shows
(thumbnail)A click opens it in the viewer (2.6)
FileThe name of the file
Group · GrainEditable: correct here what the pattern or the index read wrongly. Two pictures with the same group and grain are averaged as a single grain
Magnif.Editable: the magnification. When it is changed, the pixel is recomputed and the bar is checked
Width (px)The width of the saved image, the one that goes into the formula
µm/pxThe pixel size, with five significant figures
SourceWhere the pixel came from: by hand, index, instrument, magnification or not calibrated
Bar✓ and the length if it is round (green); ! and the length if it is doubtful (amber); no bar; or not calibrated. Hovering the pointer shows its length in pixels
KindOne grain, Overview or Detail, with a menu to change it
ExcludeLeaves the picture out of everything without deleting it; the row is shown dimmed

The three kinds of picture

The app proposes the kind of each picture by comparing its magnification with the median of all of them: if it is 0.6 times the median or less, it is an overview (many grains, for Block 5); if it is 1.8 times or more, it is a detail (a close-up of the surface); anything else is one grain (for Blocks 3 and 4). In the example the median is 1000×, and the three pictures at 150× are overviews. Block 3 measures only the one-grain pictures and Block 5 counts only the overviews; detail pictures are kept and can be seen in the viewer, but they are not measured. If the proposal is not right, change the kind with the menu: your choice is respected even if you press Apply afterward.

Correcting and excluding

Any change in the group, the grain, the magnification, the kind or the exclusion of a picture clears whatever had been measured in Blocks 3 to 6, because it no longer applies; their check mark on the bar goes out until you measure again. That is why it is worth leaving this block in order before moving on to the next. Exclude a picture when it should not count—out of focus, with the grain cut by the edge, with two grains on top of each other—; a picture that is not calibrated stays out by itself until it has a pixel size.

The table with the Doubtful bar filter: only picture 02_A, with magnification 1200 and a bar of 8.333 micrometers
Figure 2.6. The Doubtful bar filter with the wrong magnification of the example in 2.2: only 02_A.png remains, with 1200×, 0.08333 µm per pixel and the bar marked ! 8.333 µm.

Download the index (CSV)

Saves the whole table as palynopro_index.csv, with the columns archivo, grupo, nombre, grano, magnificacion, ancho_px, um_por_px, fuente, barra_px, barra_um, nivel, excluir and nota (the column names are always these, in either interface language). It is a good record of how each picture was calibrated, for the supplementary material of a paper, and also an index that the app reads again: correct it in a spreadsheet, put it in the folder of the pictures and open the folder again. The fuente (source) and nivel (kind) columns are written with the words of the interface (with the interface in English, magnification, one grain, overview, detail), and when the index is read again the app understands the kind in either language.

iWhen the downloaded index is read again

The downloaded index comes with um_por_px filled in, so when it is read again the source of every picture becomes index. If you later correct a magnification, first delete that value in the spreadsheet; otherwise the index will keep prevailing.

2.6The viewer and the bar measured by hand

The viewer shows the chosen picture, in grayscale and at most 1200 px wide, with two marks on top, and on its right the data the app knows about it. When the block is opened it shows the first image.

The viewer with picture 01_A of the example: the grain, the detected bar in yellow, the start of the caption as a dashed red line, the buttons and the data of the picture 1 2 3 4 5 6 7
Figure 2.7. Viewer with 01_A.png, the first simulated grain of morphotype A.

For 01_A.png the data are: 1280 × 960 px, 1000×, 0.1 µm (magnification), a field of 128 × 96 µm and a bar of “100 px = 10 µm (round: 10 µm)”. If the microscope file has them, the Voltage, the Working distance and the Date are added, as well as the Note from the index. When the app replaced the pixel size from an index or from the instrument (2.2), it says here what it was and why it was not used.

Look at the two marks on any picture that seems odd to you. The yellow rectangle must surround the scale bar, not some other white thing in the caption; the red line must lie above the whole caption and below the grain. Whatever lies below the line is never analyzed.

The viewer with the overview of morphotype B: fourteen grains, some of them collapsed, at a magnification of 150
Figure 2.8. The overview of morphotype B (90_B.png) at 150×: 0.66667 µm per pixel, a field of 853.3333 × 640 µm and a bar of “152 px = 101.333 µm (round: 100 µm)”. The folded grains are the collapsed ones that Block 5 will count.

Measuring the bar by hand

For a picture without a magnification, with a bar the app does not find, or with a bar you know is correct even though the calibration says otherwise:

  1. Choose the picture in the table and press Measure the bar by hand. The app asks: “Click on both ends of the scale bar.”
  2. Click on one end and then on the other. Each click leaves a blue dot.
  3. Type the length of the bar in micrometers when the app asks for it; the question says how many pixels you marked.

The pixel size becomes length ÷ pixels, with the source by hand, which prevails over all the others; the app confirms with “Calibrated by hand:” and the value, and clears whatever had been measured afterward. Make the clicks carefully and on the largest picture you can: an error of two pixels on a 100 px bar changes every size in that picture by 2%.

A picture that came from a project but whose folder has not been opened again cannot be seen: the viewer says “The image is not open in this session: open its folder again.”

✓Decision rule · before leaving Block 2
If Calibrated does not say all of them…type the magnification of the missing ones or measure their bar by hand (Not calibrated filter).
If one or a few bars are doubtful…check their magnification: it is almost always a mistyped digit.
If almost all the bars are doubtful, in the same proportion…your instrument uses a different reference width: change it and press Apply.
If the app warns that it replaced the pixel size from an index…correct the index; the value it had is in the viewer.
If the groups or the grains were not read correctly…adjust the pattern, load an index or correct them in the table.
If a picture is an overview or a detail and was left as “One grain”…change its kind: Block 3 would measure it as if it were a grain.
If everything is green…go on to Block 3.

These are guides for interpretation, not laws: what you know about the plant, the preparation and how it was photographed always comes first.

✕When something goes wrong

An image could not be read. The message says which one and why: “TIFF compression N not supported”, “TIFF without size”, “not a TIFF” or “the browser could not read this image (damaged file or unsupported format)”. The most common case is a TIFF with an unusual compression. Open it in an image program and save it as uncompressed TIFF or as PNG. Two different grains ended up as one. They have the same group and the same grain number: correct the grain in the table. The same grain ended up as two. The pattern did not recognize the letter of the repeated picture (03a): correct the grain. The yellow bar surrounds something else. Something in the caption is longer and whiter than the bar: measure the bar by hand. The key of groups did not set the names. Its codes are not the same as those of the pictures (capitals and lowercase count) or they carry spaces: correct them, or type the names in Groups. The results of the other blocks were cleared. That is expected when the calibration, a group, a grain, a kind or an exclusion is changed: measure again.

3
Chapter three · Block 3

Outline and size

The size of a pollen grain is the size of its body, without the ornamentation. This block separates every grain from the background, reads its outline in 720 directions, strips off the spines and measures what is left: the diameter, the Feret diameters, the elongation and the circularity. A single pass measures every one-grain picture; the ornamentation of Block 4 comes out of it as well.

3.1How the body is measured

Below the title of the block, Outline and size, and its subtitle, “The body of every grain without its spines: diameters, elongation and circularity.”, the drop-down How it is measured sums up the method in two paragraphs. This section explains it step by step, in the order in which the app works through each picture.

The title of Block 3, the drop-down How it is measured open and the Measure card with its three fields and the message of 30 of 30 pictures measured
Figure 3.1. Block 3 with the simulated example already measured: the drop-down How it is measured open and the Measure card with its default values (3 µm, 0.3 µm and 2%). The line next to the button tells how many pictures will be measured and at what pixel; the green message, how many were measured and how long it took.
  1. The common pixel. All the one-grain pictures are brought to the same pixel size before measuring, so that a 2 µm spine spans the same number of pixels in all of them. That pixel is the one you typed in Block 2›Calibration and reading of names›Pixel of the analysis (µm) or, if you left it empty, the 90th percentile of the native pixel of the one-grain pictures, rounded to two significant digits: that way hardly any picture has to be enlarged. Resampling is by area (Wolberg 1990). The microscope’s caption is cut off first: whatever lies below the red line of the Block 2 viewer is not analyzed. In the example, the 30 pictures are at 1000× and 1280 px, and the common pixel is 0.1 µm.
  2. Grain and background. In a scanning electron micrograph the grain is light on a dark background. Otsu’s (1979) threshold picks the gray level that best separates the two; pixels lighter than it are grain. Holes (dark areas surrounded by grain, such as the lumina) are filled, stray specks are removed and gaps of one or two pixels are closed.
  3. The central grain. If several regions remain in the picture, the app takes the largest one whose center falls in the central 70% of the frame and that is at least 30% of the largest; if none qualifies, simply the largest. That way a neighboring grain peeking in at the edge is not mistaken for the one in the picture.
  4. The outline in 720 directions. From the center of the grain, at every half degree, the app looks for the farthest edge pixel. The result is the radial profile: the radius of the grain in 720 directions, with the spines as narrow peaks. Chapter 4 shows it as a plot (Figure 4.8).
  5. The body. A morphological opening (Serra 1982) is applied to that profile: every peak narrower than the Largest base of a spine (µm) is cut off, and what remains, smoothed, is the outline of the body. An undulation wider than that base is not a spine: it is the shape of the grain, and it stays in the body.
  6. The measures. The area and perimeter of the body polygon are computed, and from them the measures of Table 3.1. The Feret diameters are obtained with rotating calipers on the polygon (Shamos 1978).
  7. The cut outline. Directions in which the outline reaches the edge of the picture or the caption are cut: there it is unknown where the grain ends. If they exceed the Acceptable cut outline (%), the picture is flagged and left out of the size comparisons. Spines in cut directions are not counted either.
Table 3.1. The six size and shape measures of Block 3, with their names in the app
In the appWhat it is
Body diameter (µm)The equivalent diameter: that of a circle with the same area as the body, √(4A/π)
Body major diameter (Feret) (µm)The largest width of the body: what a caliper set along the longest direction would read
Body minor diameter (Feret) (µm)The smallest width, along the shortest direction
Body elongation (major/minor)The major Feret over the minor: 1 for a circle, more the more elongated the grain
Body circularity4πA/P²: 1 for a perfect circle, less the more irregular or angular the outline
Diameter with spines (µm)The equivalent diameter of the outline with the spines; its difference from the body diameter gives an idea of the weight of the ornamentation
θTheory in brief · why the body and not the outline

In palynological terminology (Punt et al. 2007; Halbritter et al. 2018) the size of an echinate grain is given without the spines, because the ornamentation varies with the preparation and the view, and its height is described separately. Opening the radial profile does with numbers what the eye does when it traces the outline “along the base” of the spines: the result does not depend on how many spines fall on the silhouette or how tall they are. The circularity of the body therefore stays very close to 1 in spherical grains (0.992 to 0.999 in the example); on the outline with spines it would be much lower and would measure the ornamentation, not the shape.

!Feret is not the same as P and E

The Feret diameters are those of the silhouette you see. They match the polar axis (P) and the equatorial diameter (E) only if the grain is in equatorial view; in polar or oblique view they measure something else. The app does not guess the view: if you need P and E, photograph oriented views and put them in different groups.

3.2Measure

The Measure card has three fields and a button. The default values suit most echinate grains of 20 to 100 µm photographed at 1000× or more; change them only if the check in Section 3.4 shows you that something is not being recognized well.

Table 3.2. The settings of the Measure card
FieldDefaultWhat it decides
Largest base of a spine (µm)3The widest a spine can be at its base. Profile peaks narrower than this are cut off the body and may be counted as spines; wider ones are part of the shape of the body. Raise it if your spines are broad and conical; lower it if the outline of the body is wavy and the app cuts off the waves.
Least height of a spine (µm)0.3The least a peak must stand out from the body to be a spine; never less than 1.5 pixels of the analysis. Below it lie the noise of the edge and the roughness of the tectum.
Acceptable cut outline (%)2The part of the outline that may be cut by the edge or the caption without the picture leaving the size comparisons.

Next to the button Measure every one-grain picture a line tells how many pictures will be measured and at what pixel: with the example, 30 one-grain picture(s), at a pixel of 0.1 µm. Only the included pictures that Block 2 has as One grain enter; the overviews go to Block 5. If there are no images yet, the line says “First open your images in Block 2.” and the button is disabled.

When you press the button the waiting window appears, telling which picture is being measured and how many are left. At the end, a green message gives the total and the time—“30 of 30 pictures measured in 26.0 s.” in Figure 3.1; the time varies from one computer to another—and the block bar puts the check mark on Blocks 3 and 4. If no grain is found in a picture, the message turns amber and names the pictures after No recognizable grain:.

iMeasuring again erases what came before

Each pass starts from scratch: it erases the measures of every picture and the comparison of Block 6, which will have to be computed again. The same happens when you change the calibration, a group or an exclusion in Block 2, and when you press Measure again with these values in Block 4.

3.3Results by group

The Results card appears as soon as there are measured pictures. At the top, four tiles:

The four Results tiles (30 pictures, 24 grains, 0 cut, body of 63.2 µm) and the By group table with the three morphotypes as columns and the six measures as rows
Figure 3.2. The results of the example: 30 pictures measured, which are 24 grains with a complete outline; no picture cut; the body measures 63.2 µm on average, with Feret diameters of 65.5 × 61.0 µm. Below, the By group table, with one morphotype per column (8 grains each) and one measure per row.

If any picture had to be enlarged to reach the common pixel (its native pixel was larger), an amber notice says so: “… had less resolution than the pixel of the analysis and were enlarged: their fine measures (spines, lumina) are less reliable.” If any has a cut outline, another notice asks you to check them below. With the example neither appears.

The table by group

The By group table puts one group in each column, with its number of grains below the name (n = 8 in the example), and one measure in each row, under the heading Measure: the mean ± standard deviation of the six measures of Table 3.1. That way it fits on the screen even with many groups. Its caption says so: “Mean ± standard deviation among grains (the pictures of a grain are averaged).” The pictures of each grain are averaged first, and then the mean and the deviation are computed among grains: the standard deviation is the variation among grains, not among pictures. The CSV button downloads the table as palynopro_size_by_group.csv, with one row per group and a mean column and a deviation column for each measure.

▸Worked example · drawn against measured

The example is drawn with known parameters (Section I.7), so the table can be read against them. Morphotype B has the largest body, 67.93 µm; A and C measure almost the same (60.95 and 60.85 µm) and do not separate by diameter. They do separate by shape: C is drawn with a minor/major ratio of 0.90, that is, an elongation of about 1.11, and the app measures 1.123; A (0.97) and B (0.95) come out at 1.039 and 1.064. The circularity of all three exceeds 0.99 because all three bodies are smooth: elongation and circularity measure different things.

The two figures

Body diameter by group is a box plot with the grains as points on top: the box runs from the first to the third quartile, the line is the median and the whiskers reach the most extreme data within 1.5 times the interquartile range. Feret diameters of the body places each grain with its major Feret on the horizontal axis and its minor Feret on the vertical one, with an ellipse enclosing 95% of each group. A round grain falls near the diagonal; an elongated one, below it.

The box plot of the body diameter of the three morphotypes and the scatter plot of major against minor Feret with ellipses
Figure 3.3. The two figures of Results. On the left, B lies above A and C, which overlap. On the right, the ellipse of C (green triangles) lies below the others: for the same major Feret, its grains are narrower. Each figure has its SVG and PNG buttons, the ✎ editor and the figure studio (Chapter 7).

3.4Check of every picture

No number is worth more than the outline it comes from. The Check of every picture card draws over each image what the app measured, so you can verify, picture by picture, that the grain, the body and the spines are the ones you would have traced.

The check of picture 03_C of the example with the mask, the outline, the body, the spines and the two Feret diameters, and its measures on the right 1 2 3 4 5
Figure 3.4. Picture 03_C.png, a grain of morphotype C, with every layer on, including Feret. Its body measures 61.71 µm, with Feret diameters of 65.38 × 58.06 µm and an elongation of 1.126; no part of the outline is cut. The numbers match the list below.

The layers

LayerWhat it draws
Grain (mask)Tints blue the pixels the threshold took as grain. If the blue patch spills beyond the grain or has pieces missing, the threshold did not separate grain and background well.
Outline with spinesThe radial profile, in orange: the silhouette with its spines.
BodyThe outline of the body, in light blue and dashed: it should run along the base of the spines.
SpinesA red dot at the tip of each counted spine.
FeretOff on opening. The two Feret diameters, in yellow, with their length in µm written next to one end, always inside the picture.

Directions with a cut outline are always marked with small white squares on the edge, whatever layer is on. The data on the right end with the Cut outline as a percentage, the Threshold (gray) chosen by Otsu (between 89 and 91 in the pictures of the example; 90.0 in Figure 3.4) and the Flags: a check mark if the picture is fine, cut outline or enlarged if not.

▸Worked example · two pictures, one grain

Grain 3 of morphotype C was photographed twice, 03_C.png and 03a_C.png, with different noise and a different rotation. Its body measures 61.71 µm in both pictures (61.708 and 61.715 in the table of every picture), and both count 26 spines. In the table by group they count as a single grain, with the average of the two: that is why morphotype C has 10 pictures and n = 8.

Excluding a picture

Exclude this picture takes the picture out of the study: its measure is erased, it disappears from the table and the figures, and the comparison of Block 6 is erased so that you compute it again. Use it with a picture that is truly useless—a broken grain, two grains stuck together, a blurred picture—not with one that gives a number you do not like. With the example, excluding 03_C.png brings the Pictures measured tile down to 29, but Grains stays at 24, because grain 3 of C keeps its other picture.

The excluded picture does not vanish from the viewer: it stays in the selector as “03_C.png — excluded”, and you can view it with its layers to decide; in the data on the right, instead of the measures, it reads Status: “Excluded: it does not enter the analysis.”. The button changes to Include again, which measures it again on the spot, with the same settings as the others, and reports “Picture included and measured”; the others need not be measured again. There is one exception: the common pixel (Section 3.1) depends on the included pictures, and if excluding or including one shifts it, the notice says “The common pixel of the analysis changed: measure every picture again.”; then press Measure every one-grain picture again. You can also exclude or include pictures in Block 2, with the Exclude column of the table of images.

The table of every picture

Below the viewer, the drop-down Table of every picture has one row per picture with Picture, Group, Grain, the six measures, Cut (%) and Flags. The rows of pictures left out of the comparisons are highlighted; a click on a row brings that picture into the viewer. Its CSV button downloads palynopro_measurements_by_picture.csv, with the 19 variables of the app (the ornamentation ones too) and a usable column that is 1 or 0.

If you opened a saved project without opening the folder of images again, the measures are still there but the viewer says “Open the folder again to see the picture.”: the project stores references, not the pictures (Section I.5).

✓Decision rule · is the picture well measured?
If the blue mask covers the grain and nothing else, and the light-blue body runs along the base of the spines…then the picture is well measured; move on to the next one.
If the body “eats” broad undulations of the outline, or leaves spines inside…adjust the Largest base of a spine (µm) (smaller in the first case, larger in the second) and measure again.
If the picture carries the cut outline flag…the grain touches the edge or the caption: it does not enter the comparisons. If the cut is small and you are sure of the shape, you can raise the acceptable percentage; if not, photograph the grain again, centered.
If the picture carries the enlarged flag…the body size is still reliable, but the spines and lumina less so; prefer pictures at higher magnification or a coarser pixel of the analysis.
If the mask takes in a neighboring grain, dust or a stain on the background…exclude the picture, or crop it outside the app and open it again.

The check is the only guarantee that a number comes from a well-read grain. With dozens of pictures, step through them all with Next →: it takes a few minutes.

✕When something goes wrong

The button is disabled. There are no included one-grain pictures: open your images in Block 2 and check that they are not all marked as Overview or Detail. “No recognizable grain”. The picture is almost uniform, very dark, or the grain is darker than the background; look at it in the Block 2 viewer. Sizes come out doubled or halved. The calibration is wrong: check the magnification and the Width of the reference frame (mm) in Block 2, and that the scale bar is not flagged as doubtful. Two pictures of the same grain count as two grains. The name does not let the grain be read: correct the Pattern of the name (group and grain) or put the grain column in the index. Grains are missing from the table. Their pictures have a cut outline or are excluded: look for them in the selector, with ⚠ or with “— excluded”.

4
Chapter four · Block 4

Ornamentation

Two grains of the same size can be told apart by their surface: how many spines show on the outline and how tall they are, how open the mesh of the reticulum is and how rough the surface looks. This block presents those measures, which come out of the same pass as Block 3, and lets you adjust how the lumina are found.

4.1Spines, lumina and texture

Block 4 has no button to measure: the ornamentation is measured in the same pass as the outline, when you press Measure every one-grain picture in Block 3. If you come here before measuring, the block shows only a box that explains this and a button to go and measure.

The box First measure the grains with the button Go to Block 3
Figure 4.1. Block 4 with the example open but not measured: First measure the grains, “Ornamentation is measured in the same pass of Block 3.” and the button Go to Block 3.

The subtitle of the block is “Spines on the outline, lumina of the reticulum and texture of the surface.” The drop-down How it is measured explains the three groups of measures in one paragraph each; here they are in more detail.

The spines of the outline

The spines come from the radial profile of Block 3 (Section 3.1): the height of each direction above the body is the difference between the outline and the body. A peak of that difference is a spine if it stands out more than the Least height of a spine (µm) and is narrower than the Largest base of a spine (µm); two peaks closer than half a base count as one, the taller. Spines that fall in directions with a cut outline, or next to them, are not counted.

The height of each spine is measured from the tip to the chord joining its two feet: the foot on each side is the lowest point of the outline between the tip and the place where the outline meets the body again. Measuring it this way, and not over the trimmed body, matters in elongated grains: there the body slopes under the spine, and the chord follows that slope. Five measures come from the spines:

Table 4.1. The spine measures
In the appWhat it is
Spines on the outlineHow many spines show on the silhouette
Mean spine height (µm)The mean height of their tips, each over the chord between its two feet
Spacing between spines (µm)The free perimeter of the body (without the cut part) divided by the number of spines
Spine density (/100 µm)Spines per 100 µm of free perimeter of the body; unlike the number, it does not depend on the size of the grain
Spine area / body areaHow much the spines add to the area of the silhouette, as a fraction of the body area: it sums up their number, height and width at once
!These are the spines of the outline, not all of them

Spines pointing toward the detector look like dots on the face of the grain and are not part of the silhouette: they are not counted. The number is therefore comparable between groups photographed in the same way, but it is not the total number of spines on the grain. To compare grains of different sizes, density is better than number.

The lumina of the reticulum

In a reticulate grain, the lumina—the cells of the reticulum—look darker than the muri that surround them. The app looks for lumina in the inner part of the body, away from its edge (it leaves out the outer 18% of the radius, where the surface is seen edge-on), with a local threshold along the lines of Niblack (1986): a pixel is lumen if it is darker than the mean of its neighborhood by more than a certain number of standard deviations of that neighborhood. Each cluster of dark pixels that does not touch the border of that zone, between 0.05 and 12 µm², is a lumen; larger dark patches, such as the apertures, are left out by their size. Three measures come from them:

The texture of the surface

Texture is measured in the same inner zone with the gray-level co-occurrence matrix (Haralick et al. 1973): how often one gray level appears next to another at a given distance. The app reduces the grays to 32 levels between the 1st and 99th percentiles of the zone, counts the pairs at 0.2 and 0.4 µm in four directions (0°, 45°, 90° and 135°), only when both pixels lie on the surface, and averages the eight matrices.

Table 4.2. The texture measures
In the appRises when…
Texture: contrastneighboring pixels differ a lot in gray: a rough surface or one with marked meshes
Texture: homogeneityneighbors are alike: a smooth surface or one with a coarse pattern
Texture: entropythe combination of grays is varied and hard to predict
Texture: correlationthe gray of a pixel predicts that of its neighbor: broad light and dark zones, such as large cells

The app also computes Texture: energy, which rises on uniform surfaces; it does not appear in the tables of this block, but it is among the variables of Block 6 and in the CSV of every picture.

4.2Lumina: the two settings

The Lumina card holds the two parameters of the local threshold. Those of the spines are in Block 3, because they also decide where the body is.

The title of Block 4, the drop-down How it is measured open and the Lumina card with its two fields, the button and the validation note
Figure 4.2. Block 4 with How it is measured open and the Lumina card with its default values: 1.5 µm and 0.15 standard deviations. Below the button, the note on how it was validated.
Table 4.3. The settings of the Lumina card
FieldDefaultWhat it decides
Radius of the neighborhood (µm)1.5The size of the square each pixel is compared with; never less than 2 pixels. It should be somewhat larger than half a lumen: that way the neighborhood spans murus and lumen at once.
Darker than the neighborhood by (st. dev.)0.15How much darker than the mean of the neighborhood a pixel must be to count as lumen. Higher, smaller and fewer lumina; lower, noise creeps in.

The values are applied with Measure again with these values, which goes to Block 3 and measures every picture again (with the example, some 20 to 30 s). Like any new measurement, it erases the comparison of Block 6.

The note at the foot of the card tells how it was validated: “Validated on simulated reticula: the median lumen diameter came out proportional to the drawn mesh over the whole range from 1.8 to 4 µm, with less than 3% variation among replicates.” “Proportional” is not “equal”: Section 4.3 explains why.

▸Worked example · a larger neighborhood

With the example, changing the Radius of the neighborhood (µm) from 1.5 to 2.5 and measuring again barely moves the lumina: the Lumen (median) tile stays at 1.53 µm and the density goes from 25.5 to 25.2 per 100 µm²; by group, the median diameter goes from 1.272 to 1.275 µm in A, from 1.429 to 1.434 in B and from 1.876 to 1.890 in C. The threshold is robust as long as the neighborhood spans one cell and its murus; if your lumina are much larger than those of the example, raise the radius in proportion.

4.3Results by group

The Results card begins with four tiles, all of them means over the grains with a complete outline, all groups together: Spines on the outline (per grain (mean)), Spine height, Spine density (per 100 µm of outline) and Lumen (median), with the lumen density below.

The four Results tiles of Block 4: 26.5 spines, 2.05 µm high, 13.28 spines per 100 µm and lumen of 1.53 µm
Figure 4.3. The tiles of the example: 26.5 spines on the outline per grain, 2.05 µm high on average, 13.28 spines per 100 µm of outline, and lumina 1.53 µm in median diameter, 25.5 per 100 µm².

Next comes the By group table, like that of Block 3: one group per column, with its number of grains below the name, and one measure per row, with the mean ± standard deviation among grains. The twelve measures fall into three sections: Spines (the five of Table 4.1), Lumina (the three lumen measures) and Texture (four of the five texture measures). Its CSV button downloads palynopro_ornamentation_by_group.csv, with one row per group.

The By group table of Block 4 with the three morphotypes as columns and twelve measures in three sections: Spines, Lumina and Texture
Figure 4.4. The By group table of the example: mean ± SD among the 8 grains of each simulated morphotype. B has more spines, taller and denser; C, fewer and shorter spines, larger and less dense lumina, and a less contrasted surface.
▸Worked example · drawn against measured

Number of spines. 24, 32 and 22 spines are drawn on the outline of A, B and C (Section I.7), and the app counts 25.1, 32.1 and 22.3 on average. Height. 2.0, 2.8 and 1.7 µm are drawn and the app measures 1.848, 2.756 and 1.540 µm: always somewhat less, by 0.04 to 0.16 µm, on the order of one pixel of the analysis (0.1 µm); in proportion, the difference is largest in C, the one with the shortest spines. Lumen. The drawn mesh is 2.2, 2.6 and 3.4 µm and the median lumen measures 1.272, 1.429 and 1.876 µm: the order is the same and the lumen/mesh ratio is about 0.55 in all three. Texture. C, the one with the most open mesh, has less contrast and more correlation: its light and dark zones are broader.

θTheory in brief · two biases worth knowing

Height comes out a little low. The tip of a spine is finer than a pixel and does not get past the threshold: the peak of the profile stays below the true tip, and about one pixel of height is lost. In the validation with 60 simulated grains, with spines of 1.2 to 3.2 µm, the measured height fell short of the drawn one by a median of 3.9% (between 2.9 and 5.7%); the loss weighs more, in proportion, when the spine is only a few pixels high or when the spines touch at the base. Compare heights between groups photographed in the same way, and if you give the height in µm, state in the methods that it is underestimated by about one pixel (the Block 7 report says so). The lumen is proportional to the mesh, not equal to it. The mesh runs from the center of one murus to the center of the next; the lumen is only the dark part of each cell, without the muri or the penumbra at its rim. In the validation, the ratio was 0.558 with a variation among grains of 1.8%: constant, so the lumen ranks and compares reticula well.

The four figures

Three box plots, with the grains as points—Spine density by group, Lumen diameter by group and Spine height by group—and a scatter plot, Texture: contrast against homogeneity, with an ellipse enclosing 95% of each group.

The box plots of spine density and lumen diameter of the three morphotypes
Figure 4.5. The first two figures of Results. B has the densest spines, although its box overlaps that of A; C has the largest lumina, with no overlap with A or B.
The box plot of spine height by group and the plot of contrast against homogeneity with ellipses
Figure 4.6. The other two. B has the tallest spines, and those of C, short and even, form an almost flat box. In the texture, C stands apart, with less contrast and more homogeneity, while A and B blend together; the grains fall almost on a line, because contrast and homogeneity measure almost the same thing from two sides.

4.4Check of every picture and radial profile

As in Block 3, the Check of every picture card draws over the image what was measured, with ← Previous, the selector and Next → to step through the pictures. It has three layers: Lumina (in green, each measured lumen), Spines (the tips, in red) and Body (in light blue, dashed). On the right are the picture, its twelve ornamentation measures and the Lumina measured. There is no button to exclude here: pictures are excluded in Block 3.

The check of picture 01_C of the example with the lumina in green, the spines in red and the body, and its ornamentation measures
Figure 4.7. Block 4›Check of every picture with 01_C.png, a grain of morphotype C, with an open mesh: the green covers the cells of the interior and leaves out the rim of the body, where the surface is seen edge-on. On the right, its measures: 23 spines on the outline, 1.524 µm high on average; 343 lumina measured, with a median diameter of 1.833 µm and 15.3 lumina per 100 µm².

What to look for in the Lumina layer: that the green falls in the cells and not on the muri; that no two cells merge into one large patch; and that no light cells are left unmarked. Missing lumina at the rim of the grain are expected: that zone is not analyzed.

The radial profile

Below the viewer, Radial profile of the chosen picture shows the outline as the app reads it: the Direction from the center (°), from 0 to 360, on the horizontal axis, and the Radius (µm) on the vertical one. The thin line is the Outline, with the spines as peaks; the thick dashed one, the Body left after trimming them; the circles, the counted Spines. It is the most direct way to see why a peak was or was not counted.

The radial profile of picture 01_C: the outline with its peaks, the body and the marked spines
Figure 4.8. The radial profile of 01_C.png. The body rises and falls twice around the circle, between about 30.6 and 33.7 µm of radius: it is the trace of an elongated grain (its two ends and its two sides). The 23 spines are the narrow peaks, 1 to 2 µm above the body; the line passes through all 720 directions, so each circle falls right on the tip of its peak. The height of each spine is measured from that tip to the chord between its two feet (Section 4.1).
✓Decision rule · reading the ornamentation
If the groups differ in size…then compare the Spine density or the spacing, not the number: a larger grain has more spines on the outline even if its ornamentation is the same.
If a clear peak in the profile has no circle…it is lower than the Least height of a spine (µm) or wider than the base: adjust those fields in Block 3.
If small waves of the edge are counted as spines in the profile…raise the least height, or check whether the picture has strong noise or is enlarged.
If the Lumina layer marks the muri or merges cells…change the Darker than the neighborhood by (st. dev.) or the radius, and measure again.
If you want to report a spine height in µm…remember that the app underestimates it by about one pixel (3 to 6% in spines many pixels high, more in short ones); for comparing groups it is fine as it is.

On surfaces that are not reticulate (psilate, verrucate), the lumina found are specks of noise: do not use those variables in Block 6.

✕When something goes wrong

The block only says “First measure the grains”. Measure in Block 3; if you already measured and changed something in Block 2, the measures were erased. No lumen, or the density blank. The picture has too little resolution for the reticulum (enlarged flag), the surface is not reticulate or the grain is so small that no inner zone is left. Far too many spines. The outline is rough because of noise: raise the Least height of a spine (µm). Heights change when the pixel of the analysis changes. That is expected: with a coarser pixel the tip is lost more; use the same pixel throughout the study.

5
Chapter five · Block 5

Fertility

A well-formed grain is turgid and almost convex; an empty or aborted one folds. In the overview pictures, with many grains at once, this block separates every grain, measures how convex its body is and estimates, by group, the proportion of collapsed grains with its confidence interval, and whether that proportion differs between groups.

5.1How it is estimated

The block works only with the pictures that Block 2 has as Overview: shots at low magnification with many grains. Its subtitle sums it up: “Turgid and collapsed grains in the overviews, by group.” The drop-down How it is estimated explains the method; these are its steps.

The title of Block 5, the drop-down How it is estimated open and the Count card with its five fields and the button
Figure 5.1. Block 5 with How it is estimated open and the Count card with its default values. Next to the button, 3 overview(s): those of the example, one per morphotype.
  1. The whole picture. Each overview is analyzed at its own pixel (in the example, 150× and 1280 px give 0.6667 µm/px), without the caption; if it is more than 1600 px wide, it is reduced to that width.
  2. Every grain. Otsu’s threshold separates the grains from the background, as in Block 3, and each region whose diameter falls between the Least diameter of a grain (µm) and the Largest diameter of a grain (µm) is a candidate.
  3. Those on the edge, out. A grain that touches the edge of the picture has an incomplete silhouette and its shape cannot be judged: it is flagged and not counted.
  4. The body of each grain. Each candidate’s own radial profile is read (in 360 directions) and its spines are removed with the same Largest base of a spine (µm) as in Block 3. Spines lower the convexity of a healthy grain; without them, only a folded grain loses it.
  5. The typical grain. It is the median body diameter of the grains that do not touch the edge of that overview. If there are fewer than three, the median body measured in Block 3 is used.
  6. Fragments and aggregates, out. A region smaller than the typical grain by the factor of Fragment: smaller than the typical grain (×) is a fragment or debris of the mount; one larger by the factor of Aggregate: larger than the typical grain (×), several touching grains. Neither is classified.
  7. Turgid or collapsed. The remaining grains are classified by the solidity of their body: if it reaches the Least solidity of the body of a turgid grain, the grain is turgid; if not, collapsed or misshapen.
solidity = area of the body / area of its convex hull
θTheory in brief · solidity

The convex hull is the shape a rubber band stretched around the body would make (the app computes it with Andrew’s 1979 algorithm). In a convex body, such as a circle or an ellipse, the band touches the whole edge and the solidity is 1. A grain that empties caves in on one side: the band skips over the hollow and the area left between the two lowers the solidity. That is why solidity picks out a folded grain even if it is the same size as a healthy one, and does not penalize a grain merely for being elongated. The turgid grains of the example have a solidity of 0.99 or more.

!Shape is not viability

Solidity is a morphological proxy. A turgid grain may not be viable, and preparation for the electron microscope (drying, the vacuum) may collapse grains that were. To claim viability you need a staining or germination test. The block serves to compare groups treated in the same way and, with few overviews, take it as a pilot study. The app reminds you of this in the results.

5.2Count

The Count card has five fields and the button Count in every overview. Next to it, a line tells how many overviews there are; if there are none, it says “There are no overviews: mark them as “Overview” in Block 2.” and the button is disabled.

Table 5.1. The settings of the Count card
FieldDefaultWhat it decides
Least solidity of the body of a turgid grain0.95The cut between turgid and collapsed. It is conservative: it recognizes most folded grains without taking a healthy one for collapsed.
Least diameter of a grain (µm)15Smaller regions are ignored: dust, noise.
Aggregate: larger than the typical grain (×)1.3From how many times the typical diameter a region is taken as an aggregate.
Fragment: smaller than the typical grain (×)0.6Below how many times the typical diameter a region is taken as a fragment.
Largest diameter of a grain (µm)200Larger regions are ignored: stains on the stub, clumps.

Fit the minimum and the maximum to the pollen you study: they must keep all the grains in and the debris of the mount out. When you press the button, the waiting window tells which overview is being counted; with the three of the example, it takes a few seconds. If an overview cannot be read, an amber notice names it.

5.3Results: proportion, interval and χ²

The Results card begins with four tiles:

The four tiles, the three verdicts and the table by group of the fertility of the example
Figure 5.2. The fertility of the example: 3 overviews, 39 grains counted and 3 left out; 5 collapsed out of 39 (12.8%), all in morphotype B; χ² = 11.47 with 2 df and p = 0.003. Below, the three verdicts and the table by group.

The verdicts

Below the tiles come up to three notices. The first gives the conclusion of the test: “The proportion of collapsed grains differs between groups (χ²).” if p < 0.05, or “No difference between groups was detected in the proportion of collapsed grains (χ²).” if not. The second appears when any expected frequency is below 5—with the example, “3 cell(s) with expected frequency below 5: the χ² test is approximate; count more overviews.”. The third is always there: “Remember: solidity is a morphological proxy for fertility, not a viability test.”

The table by group

One row per group with Overviews, Grains (those classified), Collapsed, the %, the 95% CI (Wilson) and the Diameter (µm) of the classified grains, mean ± standard deviation. The CSV button downloads palynopro_fertility.csv, with the proportion and the limits of the interval as fractions. With the example, the table is the one in Figure 5.2: B has 5 collapsed out of 13 (38.5%, with an interval from 17.7 to 64.5%), and A and C, 0 out of 13 (from 0.0 to 22.8%).

θTheory in brief · the Wilson interval and the χ² test

Wilson (1927). With 13 grains, a proportion of 0 out of 13 does not mean that the group has no collapsed grains: only that none was seen. The Wilson interval gives the range of proportions compatible with what was counted—from 0 to 22.8% for 0 out of 13—and, unlike the “textbook” interval (the proportion ± 1.96 standard errors), it does not go beyond 0 to 100% or shrink to zero when there are no collapsed grains. χ² of homogeneity. The table of groups × (turgid, collapsed) is compared with the one that would be expected if all groups had the same proportion; the degrees of freedom are the number of groups minus one. The χ² approximation calls for expected frequencies of at least 5: with 5 collapsed among 39 grains, each group of 13 would “expect” fewer than 2, hence the notice.

The diameter in this table does not replace that of Block 3: it is measured at low magnification (0.67 µm/px in the example) and includes the collapsed grains, which are smaller; that is why the deviation of B is larger. Besides, in the example the grains of the overviews are drawn almost round, without the elongation of each morphotype, and that of C comes out larger than in the one-grain pictures. Use it only to check that pollen of the expected size was counted.

▸Worked example · how much it depends on the threshold

The example draws each grain of the overviews as collapsed with a given probability—15, 35 and 10% in A, B and C (Section I.7)—so the count in each overview is not exactly that percentage: in those of the example 1, 7 and 1 collapsed grains out of 14 were drawn, counting those that touch the edge. With the threshold of 0.95, the app recognizes 5 in B—of the other two, one touches the edge and the other reaches 0.962 (Figure 5.4)—and none in A or C, where the least solid grain reaches 0.958 and 0.968. This is how the results change as you move the Least solidity of the body of a turgid grain:

Least solidityABCCollapsedχ² (2 df)p
0.930307.7%6.500.039
0.95 (default)05012.8%11.470.003
0.9615015.4%8.270.016
0.9716120.5%7.860.020

The conclusion—B has more collapsed grains than A and C—holds in all four cases; the percentages do not. That is why you should report the threshold along with the result (the Block 7 report does) and look at the histogram: if there is a clear gap between the healthy and the folded grains, the threshold can go in it.

The two figures

Collapsed grains by group gives the percentage of collapsed grains in each group as bars, with the Wilson interval as a whisker. Solidity of the body of the grains is a histogram of the solidity of all classified grains, between 0.75 and 1, with a vertical line at the threshold: the grains to its left are the collapsed ones.

The bars of the percentage of collapsed grains by group with their interval and the histogram of solidity with the threshold line
Figure 5.3. The figures of the example. On the left, only B has collapsed grains; even so, the intervals of A and C (up to 22.8%) overlap that of B (from 17.7%): with 13 grains per group, precision is low even though the χ² test comes out significant. On the right, five grains lie to the left of the 0.95 threshold, between 0.92 and 0.95, and the rest lie to its right, most of them close to 1: the last interval, from 0.99 to 1, holds 28 of the 39 grains. There is no clear gap around the threshold: just to its right lie grains of 0.958 and 0.962, which is why the count changes when you move it.

5.4Check of every overview

The Check of every overview card draws a circle around each region found, in the color of its class, with its solidity written to three decimals above the grain or, if the grain is next to the top edge, below it; always inside the picture. The overviews are chosen in the selector. The color key goes below the image:

Color and labelWhat it means
green · turgidBody solidity equal to or greater than the threshold
red · collapsed or misshapenSolidity below the threshold
violet · aggregate (not counted)Larger than the typical grain by the aggregate factor
yellow · fragment (not counted)Smaller than the typical grain by the fragment factor
gray · touches the edge (not counted)Incomplete silhouette
Overview 90_B of the example with each grain circled in green, red or gray with its solidity, and the count on the right
Figure 5.4. Overview 90_B.png of morphotype B: 13 complete grains, 8 turgid (green) and 5 collapsed (red), with solidity from 0.92 to 0.95; the one at the left edge (gray, 0.94) is folded too, but it touches the edge and is not counted. The typical grain measures 62.4 µm. Note the green grain marked 0.96, at the lower left: it has a notch and is folded, but its solidity passes the 0.95 threshold. It is the one added to B when the threshold is raised to 0.97 (Section 5.3).

On the right are the Overview, the Group, the Complete grains (those classified), how many are Turgid and how many Collapsed, how many were On the edge, how many Aggregates and Fragments, and the Typical grain in µm against which they were judged. In the overview of morphotype A, for instance: 13 complete grains, all 13 turgid, 1 on the edge and a typical grain of 60.8 µm.

✓Decision rule · reading the fertility
If p < 0.05 and there is no notice of small frequencies…then the proportion of collapsed grains differs between groups; look in the table and the bars to see which one stands apart.
If p < 0.05 but the notice of expected frequencies below 5 appears…the difference is likely but the test is approximate: count more overviews before claiming it.
If the Wilson intervals are wide (more than 30 points)…there are few grains per group; the percentage is imprecise even if the test comes out significant.
If the check shows folded grains in green…raise the least solidity a little; if there are healthy grains in red, lower it. Look for the gap in the histogram.
If two grains stuck together come out green or red, or a healthy one violet or yellow…adjust the aggregate and fragment factors.

Always report the solidity threshold and the number of grains per group, and call the result “collapsed grains”, not “inviable pollen”.

✕When something goes wrong

The button is disabled. There are no overviews: mark them in the Kind column of the table of images in Block 2. Many grains left out. The overviews are so crowded that the grains touch (aggregates) or reach the edge: take less crowded fields. The fragments are genuinely small grains. If your sample mixes grains of very different sizes, the typical grain does not represent them all: lower the fragment factor or separate the overviews by group. All grains come out collapsed. Otsu’s threshold also took in part of the background, or the grains are out of focus: check the picture in the Block 2 viewer.

6
Chapter six · Block 6

Multivariate statistics

The question behind almost every pollen study: can the groups be told apart by their pollen? The block answers it at three scales—variable by variable, with all the variables at once, and grain by grain, like a key—and always with the grain as the unit, so that a grain photographed twice neither counts double nor helps itself to be classified.

Block 6 works with what Block 3 measured—the outline, the size and, in the same pass, the ornamentation of Block 4; it does not read the images again. Under the title, the app says what it does: “Can the groups be told apart by their pollen? With the grain as the unit.” It has a drop-down, What is computed, the Variables card with the button that runs the analysis and, once computed, five result cards: In short, By variable, Principal components, PERMANOVA and Pollen key: classifying a grain. Every figure in this chapter comes from the simulated example measured with the default values and compared with the default settings.

6.1What is computed: the grain as the unit

Before any test, the app merges the pictures of each grain into a single row: the average of its measurements. Everything else—the tests, the components, the PERMANOVA and the classifiers—is done with those grains, not with the pictures.

The What is computed drop-down sums it up in one paragraph. Step by step, this is what the app does when you press Compare the groups:

  1. It takes the usable measured pictures. The included and calibrated one-grain pictures that have a result in Block 3, without those with a cut outline (those above the Acceptable cut outline (%), Chapter 3).
  2. It averages by grain. Pictures with the same group and the same grain number are a single unit (in the example, 03_A.png and 03a_A.png are grain A·03). If a grain lacks any of the chosen variables, it is left out, and the app says so next to the button (Section 6.2).
  3. It drops the groups with fewer than three grains and stops if fewer than two groups remain.
  4. It tests each variable: one-way analysis of variance, the Kruskal–Wallis test and Tukey letters, with the p-values adjusted by Holm over all the chosen variables.
  5. It standardizes the variables (mean 0, standard deviation 1) so that a measurement in micrometers does not weigh more than a proportion, and computes the principal components and the global and pairwise PERMANOVA.
  6. It fits and validates two classifiers, linear discriminant analysis and random forest, leaving out one whole grain at a time.

While it computes, the “Comparing the groups” wait window says which step it is on: Tests by variable, Principal components, PERMANOVA, Discriminant analysis, Random forest (validation by grain) and Importance of the variables. With the example it takes a few seconds.

θTheory in brief · why the grain and not the picture

Two pictures of the same grain are not two independent observations: they look alike because they are the same grain. If they counted separately, the tests would believe they had more data than there are and would give p-values that are too small (what statistics calls pseudoreplication). And in the validation of a classifier, a picture would be classified with the help of its twin, which sits in the training set, and the accuracy would come out inflated. Averaging by grain and leaving out the whole grain avoids both traps. In the example, six grains (grains 3 and 6 of each morphotype) have two pictures: 30 pictures are 24 grains.

6.2Variables and settings

The Variables card decides which measurements enter the multivariate analysis and sets the three numbers that govern the random parts. Below it is the Compare the groups button.

The Variables card with 19 checkboxes, eleven checked, the fields Trees of the forest 500, Permutations 999 and Random seed 1, and the Compare the groups button with the note 24 grains from 3 groups
Figure 6.1. The Variables card with the measured example: the 19 measurements of a grain, 11 checked by default, and the three settings. To the right of the button, “24 grains from 3 groups”.

Enter the analysis

The Enter the analysis box has one checkbox for each measurement produced by Block 3 or 4. When the app opens, eleven are checked, chosen so that the analysis does not repeat information:

Table 6.1. The 19 variables and those that enter by default
Checked by default (11)Unchecked (8)
Body diameter · Body major diameter (Feret) · Body minor diameter (Feret) · Body circularityBody elongation (major/minor) · Diameter with spines
Spine area / body area · Mean spine height · Spine densitySpines on the outline · Spacing between spines
Lumen diameter (median) · Lumen densityLumen variation (CV)
Texture: contrast · Texture: homogeneityTexture: entropy · Texture: correlation · Texture: energy

Those left out are, almost all, combinations of others: elongation is the ratio of the two Feret diameters; the diameter with spines is, roughly, the body plus two spine heights; the number of spines and their spacing follow from the density and the perimeter; texture entropy and energy almost always go hand in hand with homogeneity. You can check or uncheck any you like—the app asks for at least two—and the choice is saved in the project. If you measure again in Block 3, the choice is kept, but the result is cleared and you have to compare again.

iMany variables and few grains

Linear discriminant analysis estimates a covariance matrix with as many rows as there are variables. With few grains per group and many checked variables the matrix becomes nearly singular, and the app stabilizes it with a small correction (a ridge of 0.001) so it can go on; the accuracy then depends more on the chance of sampling. As a guide, try to have more grains in the smallest group than checked variables. The example has 8 grains per group and 11 variables, right at the limit: that is why the leave-one-grain-out validation matters so much.

The three settings

FieldDefaultWhat it does
Trees of the forest500Trees of the whole random forest, from which the importance of the variables and the out-of-bag error come. Fewer than 50 is raised to 50. In the leave-one-grain-out validation, each model uses at most 300 trees, so that the computation does not drag on: it is one forest per grain. The app says so in the tiles of Section 6.7 and in the methods of the report.
Permutations999Permutations of the PERMANOVA, global and pairwise. Fewer than 99 is raised to 99. With 999, the smallest possible p-value is 1 / (999 + 1) = 0.001.
Random seed1The starting point of the random number generator for the permutations and the forest. The same seed always gives the same result; an empty field or a zero goes back to 1.

To the right of the button, the app says how many grains and groups it will work with (“24 grains from 3 groups” in the example); if there are no measurements yet, it says “First measure the grains in Block 3.” and the button is disabled. If, on comparing, some grain was left out because it lacked a chosen variable (for example, with no lumina measured), the line adds: “… · 2 without a value in some chosen variable: left out”. This does not happen with the example.

6.3In short

Six tiles and a few verdicts that answer, at a glance, whether the groups differ and whether a single grain is enough to recognize its group.

The In short card with six tiles: Grains 24, PERMANOVA R² 0.711, Variables that differ 11 of 11, Classification LDA 100.0%, Classification forest 100.0% and By chance 33.3%, and three verdicts
Figure 6.2. In short with the example: the three morphotypes differ as a whole (R² = 0.711, p = 0.001) and in all 11 variables, and both classifiers assign the 24 grains correctly.
Table 6.2. The In short tiles, with the values of the example
TileExampleWhat it is
Grains24 · 3 groupsThe grains (not the pictures) that entered the analysis, and the groups.
PERMANOVAR² = 0.711 · F = 25.83 · p = 0.001The global test of Section 6.6. The tile carries a green stripe if p < 0.05.
Variables that differ11 / 11How many variables have a significant analysis of variance after Holm’s adjustment (α = 0.05).
Classification (LDA)100.0% · κ = 1.00The accuracy of linear discriminant analysis leaving out one grain, with Cohen’s κ.
Classification (forest)100.0% · κ = 1.00The same with the random forest.
By chance33.3%The accuracy of someone who assigned every grain to the largest group: the yardstick for the two above. With three groups of 8 grains, 8 / 24.

The verdicts

Below the tiles, the app writes out in words what they mean. The rules are fixed:

6.4By variable

A table with one row per variable: the mean and standard deviation of each group with its Tukey letter, and the three tests. Below it, the figure of the variable that best separates the groups.

The By variable table with the 11 variables, the mean and standard deviation of A, B and C with their letters, F, the ANOVA p, the Kruskal p and eta squared, and the box plot of lumen diameter by group
Figure 6.3. By variable with the example. The variable with the largest F is Lumen diameter (median) (F = 58.32), and its three groups have different letters: c, b and a.

The note on the card sums it up: “Mean ± standard deviation by group; groups sharing no letter differ (Tukey, α = 0.05). p-values adjusted by Holm over all variables.” The columns are:

ColumnWhat it is
VariableThe name of the measurement, with its unit.
One per group (A, B, C)Mean ± standard deviation among the grains of the group and, in bold, its letter. Letter a goes to the group with the highest mean; two groups that share a letter do not differ according to Tukey’s test (with the Tukey–Kramer correction if the groups have different numbers of grains).
FThe statistic of the one-way analysis of variance: how much more the means vary between groups than the grains within each group.
p (ANOVA)The p-value of the analysis of variance, already adjusted by Holm over all the variables; “< 0.001” if it is smaller.
p (Kruskal)That of the Kruskal–Wallis test, which compares ranks instead of means and does not assume normality; also adjusted by Holm.
η²The proportion of the variation of the variable explained by group (the between-group sum of squares divided by the total): an effect size that does not depend on the number of grains.
θTheory in brief · Holm and Tukey do different things

With 11 variables and α = 0.05, if the groups did not differ at all you would expect one of them to come out significant just by chance. Holm’s adjustment (1979) corrects the p-values across variables: it sorts the p-values from smallest to largest and multiplies the first by 11, the second by 10, and so on, without letting them decrease. Tukey’s letters (1949) correct within a variable, across the pairs of groups. A variable can have a significant F and still two groups with the same letter: the groups differ as a whole, but not that pair.

▸Worked example · what sets each morphotype apart

All 11 variables have p (ANOVA) < 0.001. Reading the letters shows what separates whom. Morphotype B is the largest: Body diameter 67.93 ± 2.56 µm, letter a, against 60.95 ± 4.03 (A) and 60.85 ± 2.33 µm (C), which share b; it also has the tallest spines (2.756 ± 0.451 µm, a, against 1.848 for A and 1.540 µm for C, which share b) and the densest (15.06 ± 1.25 per 100 µm). Morphotype C stands apart by its reticulum: larger lumina (1.876 ± 0.131 µm, a), fewer lumina per area (15.4 ± 2.0 per 100 µm², c), a more homogeneous, lower-contrast texture, and a slightly less circular body (0.992 ± 0.002, b). A and B differ only in size, spines and reticulum, not in texture: they share the letter in contrast and in homogeneity. Compare it with what was drawn (Section I.7): B is drawn with the larger body and the taller spines, and C with the more open mesh.

The CSV button downloads the table as palynopro_by_variable.csv, with the numbers unrounded: one row per variable, with its internal key in variable (such as corp_d) and its name with the unit in nombre (“Body diameter (µm)”), and, for each group, the columns A_media, A_de and A_letra (mean, standard deviation and letter); then F, p_anova_holm, H, p_kruskal_holm and eta2.

The variable that best separates the groups

The box plot on the card shows the variable with the largest F, with each grain as a point, the box from the first to the third quartile with the median, the whiskers, and the Tukey letter above each group. It changes by itself if you change the chosen variables: it is always the one with the largest F among those that entered.

6.5Principal components

A two-dimensional map of the grains that summarizes all the variables at once, with arrows that show where each one grows. It is for seeing the structure—which groups separate, which overlap, which variables go together—not for testing anything.

The Principal components card with the biplot of the 24 grains and 11 variables, the chart of variance explained by component and the table of correlations of each variable with PC1, PC2 and PC3
Figure 6.4. Principal components with the example. PC1 explains 58.8% of the variation and PC2 23.4%. Morphotype C (triangles) lies on the left, on the side of the large lumina and homogeneous texture; B (squares), at the upper right, on the side of size and spines; A (circles), at the lower right.
θTheory in brief · principal component analysis

With the variables standardized, principal component analysis (Pearson 1901; Hotelling 1933) looks for new axes, combinations of the original variables, that are uncorrelated with each other: the first (PC1) captures the largest possible variation, the second (PC2) the largest of what remains, and so on. The app computes them from the eigenvalues and eigenvectors of the correlation matrix, by Jacobi rotations. There are as many components as variables (11 in the example), and their eigenvalues add up to 11: a component with an eigenvalue greater than 1 summarizes more than a single variable.

Biplot: grains and variables

Each point is a grain, with the shape and color of its group, and each group has its 95% ellipse. The arrows are the variables: the tip sits at the correlation of the variable with PC1 (horizontal) and with PC2 (vertical), so they point where the variable grows and their length tells how well the plane represents it. Two arrows close together are variables that go hand in hand; opposite ones, that one rises when the other falls. The axes carry the percentage of variance of each component: “PC1 (58.8%)” and “PC2 (23.4%)”.

Each arrow carries the name of its variable, in the language of the interface (without the unit). In the example, the arrows of the reticulum and the texture are spread along PC1: Texture: contrast and Lumen density to the right and slightly down, Lumen diameter (median) and Texture: homogeneity to the left, right where the grains of morphotype C are. Those of size (Body major diameter (Feret), Body diameter, Body minor diameter (Feret)) and Mean spine height rise toward the right, toward the grains of B. Those of A lie at the lower right: they are the smallest and those with the densest lumina.

Variance explained

One bar per component with the percentage of the total variation it explains. It is the scree plot: when the bars stop dropping sharply, the components that follow are noise. In the example, PC1 explains 58.8%, PC2 23.4% and PC3 11.8% (eigenvalues 6.47, 2.57 and 1.29): the first three, the only ones with an eigenvalue greater than 1, add up to almost 94%, and from PC6 on the bars can hardly be seen.

The table of correlations

Under the figures, “Correlation of each variable with the components.”: one row per variable with its correlation (r) with PC1, PC2 and PC3. An |r| close to 1 says that the component is, to a large extent, that variable. In the example, PC1 is mostly texture and reticulum (contrast 0.925, homogeneity −0.917, lumen diameter −0.858, lumen density 0.813); PC2, size (major Feret 0.863, body diameter 0.739); and PC3, the spines (spine density 0.668, spine area 0.590).

iComponents know nothing of groups

Principal component analysis does not use the group of each grain: it looks for variation, wherever it comes from. If the groups separate in the biplot, it is because the largest variation among grains is precisely the one between groups. If they do not separate, they may differ in a direction that explains little variance: the PERMANOVA and the discriminant analysis, which do use the group, will tell.

6.6PERMANOVA

The test of whether the groups differ in the whole set of their measurements, without assuming that the variables follow a normal distribution: the global answer and, with more than two groups, pair by pair.

The PERMANOVA card: Global pseudo-F 25.832, df 2 and 21, R² 0.711, p 0.001 with 999 permutations, and the pairwise table A–B, A–C and B–C
Figure 6.5. The PERMANOVA of the example. All three pairs differ (Holm p = 0.003); the most similar pair is A–B (F = 12.46, R² = 0.471) and the most different, B–C (F = 47.11, R² = 0.771).
θTheory in brief · PERMANOVA

PERMANOVA (Anderson 2001; McArdle and Anderson 2001) is an analysis of variance done with distances. The app computes the Euclidean distance between each pair of grains on the standardized variables, splits the sum of squared distances into a between-group part and a within-group part, and forms a pseudo-F as in an analysis of variance. To know whether that pseudo-F is large, it shuffles the groups among the grains as many times as Permutations says and counts in how many the shuffled pseudo-F equals or exceeds the observed one: p = (those times + 1) / (permutations + 1). R² is the part of the variation among grains that group explains.

The Global line gives the pseudo-F, its degrees of freedom (number of groups − 1 and number of grains − number of groups), R², the p-value, the number of permutations and the distance used. In the example: “pseudo-F = 25.832, df 2, 21; R² = 0.711; p = 0.001 (999 permutations, Euclidean distance on standardized variables)”. The p of 0.001 is the smallest that can be obtained with 999 permutations: no shuffle matched the observed value. To claim a smaller p you have to increase the permutations.

The pairwise table repeats the test for each pair of groups—Pair, F, R², p—and adds p (Holm), adjusted for the number of pairs. Pairs with a Holm p below 0.05 carry a green stripe on the left. With only two groups there is no pairwise table: the global test already is the comparison.

!A difference in location or in dispersion

A PERMANOVA can come out significant because the groups sit in different places of the variable space or because one is much more dispersed than another. Look at the biplot and the ellipses: if one group has a much larger ellipse than the others and the centers nearly coincide, the difference is one of dispersion, not of average form. In the example the centers are clearly apart.

6.7Pollen key: classifying a grain

The last card answers the practical question: if you were given a single grain, could you tell which group it belongs to from its measurements alone? To find out, it fits two classifiers and measures their accuracy with grains they did not see.

The tiles

The Pollen key card with three accuracy tiles, the LD1 by LD2 discriminant space with the three groups apart, the importance of the variables in the random forest as mean decrease in Gini, and the two confusion matrices
Figure 6.6. The pollen key of the example. Both classifiers get all 24 grains right in the validation; the out-of-bag error of the whole forest is 4.2%. In the discriminant space, the three groups do not overlap.
θTheory in brief · two classifiers and an honest validation

Linear discriminant analysis (Fisher 1936) looks for the combinations of variables that best separate the groups, assuming that all of them share the same covariance matrix, and assigns a grain to the group with the highest posterior probability, with prior probabilities equal to the frequency of each group. The random forest (Breiman 2001) brings together hundreds of decision trees, each fitted with a sample of the grains drawn with replacement and, at each split, with √p variables chosen at random (3 of 11 in the example); each tree votes and the most voted group wins. The discriminant works best when the groups are similar elliptical clouds; the forest assumes no shape at all, but needs more grains. Leave-one-grain-out validation takes out one grain—with all its pictures—, fits the model with the rest (standardizing without it as well), classifies it, and repeats with every grain. What you get is the accuracy to expect for a new grain; Cohen’s κ (1960) discounts the agreement you would get by chance: 1 is perfect agreement and 0, that of chance.

Discriminant space (LD1 × LD2)

The grains on the first two discriminant axes, with the 95% ellipse of each group. Each axis carries the percentage of the separation between groups that it captures: “LD1 (78.4%)” and “LD2 (21.6%)” in the example. Unlike the biplot, these axes are chosen to separate the groups, so the figure shows the best separation possible with linear combinations; with three groups there are two axes. The grains are drawn with the model fitted to all the grains; the accuracy in the tiles, in contrast, comes from the validation. With two groups there is a single axis, and instead of the figure the app says “With two groups there is a single discriminant axis.”

Importance of the variables (random forest)

One bar per variable with the mean decrease in Gini impurity: how much, on average, each variable helps make the splits of the trees of the whole forest purer. The bars are horizontal, with the name of each variable on the left, from the most important at the top to the least important at the bottom. In the example the most important is Mean spine height (0.110), followed by Lumen diameter (median) (0.081), Lumen density (0.077) and Spine area / body area (0.075); the least, Spine density (0.020). Importance tells what the forest uses, not which variable differs most: two highly correlated variables share the importance between them.

The confusion matrices

One per classifier, Linear discriminant and Random forest, with the caption “Rows: true group · columns: assigned group”. The diagonal holds the correct assignments, shaded with the primary color; off it, the errors, in the accent color. The last column, Correct, is the percentage of grains of each group assigned correctly. In the example, both matrices have 8, 8 and 8 on the diagonal and zeros off it (Correct 100% in each group). When a classifier makes mistakes with your data, look at which groups the errors fall between and compare it with the pairwise PERMANOVA: you would expect the most similar pairs to be confused (in the example, A–B).

▸Worked example · does pollen work as a key for the three morphotypes?

With the 11 default variables, the PERMANOVA says that the morphotypes differ as a whole (R² = 0.711, p = 0.001) and pairwise; the discriminant and the forest correctly classify 100% of the grains they did not see (κ = 1.00 in both), against 33.3% by chance, and the out-of-bag error of the forest is 4.2%. The app concludes that “pollen works as a key for these groups”. For a manuscript you would write: “The three morphotypes differed in their pollen morphology (PERMANOVA: pseudo-F = 25.83, R² = 0.71, p = 0.001); in leave-one-grain-out cross-validation, every grain was assigned to its morphotype, both by linear discriminant analysis and by random forest (κ = 1.00).” Remember that these are simulated data: the example was drawn so that the groups could be told apart.

!The grain is the unit, but not the plant

The app treats each grain as independent. If your grains come from few plants, the grains of one plant resemble each other more than those of another, and the tests overstate the evidence in the same way repeated pictures would. If you can, photograph grains from several plants per group and check, with the per-picture measurement table of Block 3, that the variation among plants does not dominate. The app does not model that second level.

✓Decision rule
If the PERMANOVA gives p < 0.05 and classification is 80% or more…the groups can be told apart by their pollen and a single grain is enough to recognize them: pollen is a good key for them.
If the PERMANOVA gives p < 0.05 but classification falls below 80%…the groups differ on average, but they overlap: pollen serves to characterize them, not to identify a single grain. Check in the confusion matrix which pairs are confused.
If the PERMANOVA is not significant…with these variables and these grains there is no evidence of a difference. Before concluding that they do not differ, check how many grains each group has.
If the PERMANOVA gives p = 0.001 with 999 permutations…report “p ≤ 0.001”; for a finer value, increase the permutations.
If a variable has a significant F and two groups share a letter…that variable separates some groups, not that pair.
If the discriminant and the forest give very different accuracies…with few grains, trust more the one with the higher κ and the out-of-bag error; with groups of very irregular shape, the forest.

These are guides for interpretation, not laws: the sampling design—how many plants, how many flowers, how many grains per plant—weighs more than any p-value.

✕When something goes wrong

The Compare the groups button is disabled and says “First measure the grains in Block 3.”: there are no measurements; go to Block 3 and press Measure every one-grain picture. “Choose at least two variables.” Check two or more boxes. “At least two groups with three grains or more are needed.” After averaging by grain and removing the pictures with a cut outline, fewer than two groups with three grains remain; check in Block 2 that the group and the grain were read correctly (a wrong name pattern can put all the grains in one group or give all of them the same grain number). A group does not appear. It had fewer than three grains, and the app says so in a verdict. “… without a value in some chosen variable: left out”. Those grains lack some of the checked variables (for example, a grain with no lumina measured); uncheck that variable or check the picture in Block 4. The results disappeared. You measured again or changed the calibration, a group or an exclusion: the block is cleared so as not to show stale results; compare again. On opening a project there are no results. The project saves the measurements and the settings, not the comparison, and the app reminds you of this when opening it: press Compare the groups again and it will come out the same, because the seed is saved too.

7
Chapter seven · Block 7

Report

The end of the journey: what goes into the thesis, the paper or the lab notebook. The block assembles into a single document the material, the methods written out with the parameters you used and their citations, the tables, every figure, one measured grain per group, the limitations and the references. This chapter also explains the figures—their downloads, the studio and the ✎ editor—and how to save the project to pick it up again.

Block 7 has two cards: Details of the report, with the fields and the buttons, and Preview, which appears when you make the report. Under the title, the app sums it up: “Methods, results, figures and gallery in one document to print or save as PDF.” Nothing is computed here for the first time: the report takes what Blocks 2 to 6 already computed, with the settings you left in each one. The screenshots in this chapter were taken with the simulated example measured, counted and compared, with the title “Pollen morphometry of the simulated example”.

7.1Details of the report

Four text fields for the cover of the report, the language it is written in, and a list that says which parts of the study are already computed.

The Details of the report card with the title and material of the example filled in, author and institution empty, the language That of the screen, the four green check marks and the five buttons
Figure 7.1. Details of the report after making the report of the example: the four parts of the study computed and the five buttons enabled.
FieldWhat it holds
TitleThe title of the report. Empty, it shows “Pollen morphometry of …” as a hint, and the report comes out as “Quantitative pollen morphometry”. It also names the files you download.
Species or materialWhat was studied; on the cover of the report it appears as “Material”.
AuthorWho did the study.
InstitutionThe laboratory or the institution.
Language of the reportThat of the screen (on opening), Español or English. It changes the language of the report and of the copied methods, not that of the interface.

The four texts and the language of the report are saved in the project and return to their fields when you open it; texts you leave empty do not appear on the cover. Without a project, every time you open the app the language starts at That of the screen.

Below, four badges say what is there: Calibrated images (Block 2), Outline and size (Block 3), Fertility (Block 5) and Multivariate statistics (Block 6). Each carries a green check mark if its part is computed, or a dot if not. If anything is missing, the app adds: “What is missing appears in the report as "not computed"; you can make it anyway.” This is normal when the study has no overviews: the report comes out without fertility.

7.2Make, print and download

Five buttons: one assembles the report, three take it out of the app, and the last one saves the project.

ButtonWhat it does
Make the reportAssembles the document with whatever there is at that moment (the “Putting the report together” wait goes through Gallery and Figures) and shows it in the Preview. With no images open it warns “First open your images.” When it is made, the block is marked as done in the block bar.
Print / save as PDFOpens the browser’s print dialog with the report alone, without the interface. For a PDF, choose Save as PDF as the destination: the text stays vector and can be searched and copied. The page is A4, with margins of 16 mm at top and bottom and 15 mm at the sides.
Download (HTML)Saves the report as a page that opens offline in any browser, with the figures and the gallery pictures inside. It is named after the title, without accents and with underscores: Pollen_morphometry_of_the_simulated_example.html in the example, or palynopro_report.html without a title.
Copy the methodsPuts the text of the methods (Section 7.3) on the clipboard, unformatted and with a blank line between paragraphs, ready to paste into a manuscript; the app confirms “Methods copied”.
Save the projectThe same as Ctrl + S (Section 7.5). It is the only button that works before the report is made.

The three output buttons are disabled until you make the report. Under the buttons, a note recalls two things: “Figures come out with the colors of the light theme, whatever that of the screen. In the print dialog choose "Save as PDF" to get the file; the text stays vector.”

The preview of the report: the cover with the title Pollen morphometry of the simulated example, the material, the date November 2, 2026, the simulated-data note, the figures 33 images, 3 groups, 24 grains measured and 100% classification, and the beginning of the material and the methods
Figure 7.2. The beginning of the report of the example in the Preview. Since the data are from the example, the cover says so: “example simulated by the app (not photographs of real plants)”.
!The report does not remake itself

The preview is a snapshot of the study at the moment you pressed Make the report. If you then change a title, a group, a variable of Block 6 or measure again, the report you see—and the one you print or download—is still the old one. Press Make the report again before printing.

7.3What the report contains

A cover and nine numbered sections, always in the same order. Whatever is not computed appears as “Not computed.”; nothing is made up.

The cover

At the top, the heading “Pollen morphometry report” and the title. Below, the material, the author and the institution if you wrote them, the date of the day (such as “November 2, 2026”) and, if the study is the example, the simulated-data note. Four figures close the cover: the images analyzed, the groups, the grains measured and, if there are statistics, the accuracy of the classification by grain (the better of the two classifiers, without decimals). In the example: 33 images, 3 groups, 24 grains measured and 100%.

Table 7.1. The sections of the report
SectionWhat it contains
1. MaterialOne row per group: Code, Group (the name in the Groups card of Block 2), One-grain pictures, Overviews and Grains. In the example, each morphotype has 10 one-grain pictures (8 grains, two of them photographed twice) and 1 overview.
2. MethodsThe paragraphs written out with the parameters used (below).
3. Size and ornamentation by groupMean ± standard deviation among grains of ten fixed variables: body diameter, major and minor Feret, elongation, circularity, spines on the outline, mean spine height, spine density, lumen diameter and lumen density, with the number of grains in each group.
4. Comparison between groupsThe table of Block 6 with the variables chosen there (mean ± standard deviation with its Tukey letter, F and the Holm-adjusted p) and a paragraph with the PERMANOVA and the two classifiers, with κ and the chance accuracy.
5. FertilityBy group: overviews, grains counted, collapsed grains, percentage and 95% Wilson interval, and the χ² test.
6. FiguresAll the figures of Blocks 3 to 6, numbered, in two columns (the wide ones span both), as vectors and with the colors of the light theme. With the example there are 14.
7. Measured grains, one per groupA picture of each group with the outline with spines, the body and the spine tips drawn over it, its name and its body diameter.
8. LimitationsFive fixed caveats about what the method cannot tell.
9. ReferencesThe 22 works of the methods and the citation of the program, in alphabetical order.
Sections 4 and 5 of the report of the example: the table comparing the groups with the Tukey letters, the paragraph with the PERMANOVA and the classification, and the fertility table with the chi-square test
Figure 7.3. Sections 4 and 5 of the report of the example. In fertility, morphotype B has 5 collapsed grains out of 13 (38.5%, 95% CI 17.7 to 64.5%), and the groups differ (χ² = 11.47, df = 2, p = 0.003).

The methods

Section 2 is the most useful part of the report: a draft of the methods that writes down what was really done, with the numbers you used and each method cited to its source. It has up to six paragraphs:

!It is a draft: complete it

The app writes how things were measured, not what it cannot know: the origin of the material, how many plants and flowers were sampled, how the grains were prepared (acetolysis, dehydration, sputter coating), and the microscope, voltage and detector. Add that, remove what you will not report and adapt the wording to the journal. Report also the spine-height limitation of Section 8 (below): it is part of the method.

The gallery and the limitations

The gallery takes, from each group, the first one-grain picture that is included, measured, free of warnings (cut outline or enlarged) and open in the session, and draws it with the outline with spines, the body and the spine tips, as in the review of Block 3. In the example they are 01_A.png (body 59.6 µm), 01_B.png (72.0 µm) and 01_C.png (64.2 µm). If you opened a project without opening the folder of the pictures again, it says instead “The images are not open in this session.”

The limitations are fixed, because they belong to the method, not to your data: the body and the spines are measured on the two-dimensional silhouette; the Feret diameters amount to the polar and equatorial axes only in equatorial view; spine height, measured from the tip to the chord joining its two feet, comes out about one pixel short, because the finest tip of the cone does not fill a pixel (with simulated grains at 0.1 µm per pixel, by 3 to 6%, median 4%; more for short spines or spines touching at the base); fertility by solidity is a morphological proxy, not a viability test; and images enlarged to the common pixel give less reliable fine measurements.

Section 7 of the report with three measured simulated grains, one per morphotype
Figure 7.4. The gallery of the report of the example: one grain per morphotype, with what the app measured drawn over it.

7.4The figures, the studio and the editor

Every figure of Blocks 3 to 6 has the same four tools in its header: two quick downloads and two ways of editing it.

The SVG and PNG buttons save files named after the title of the figure, without accents and with underscores (Biplot_grains_and_variables.svg), and they come out with the colors of the light theme even if you work in the dark one: the colors, the lines and the lettering are written inside the file, which does not depend on the app to be displayed. Whatever you changed with the ✎ editor goes inside too, because the editor writes onto the figure itself.

The biplot of Block 6 with its header: the title, the SVG and PNG buttons, the editor pencil and the figure studio button 1 2 3 4
Figure 7.5. A figure of the app (the biplot of Block 6) with its tools.

The figure studio

The button with the ruler and pencil opens the figure studio, the same in every application of the suite. You can also reach it from the search (Ctrl + K): the figures appear among the results and open directly in the studio, or from the In this block index, with the button next to the sections that have figures.

The figure studio full screen with the biplot in the center, the toolbar at the top and the controls on the right
Figure 7.6. The biplot in the figure studio. The figure is shown at its export size, with the dotted guide of the one-and-a-half-column width (114 mm); below it, its final size: 85 × 65.5 mm at 600 dpi, 2008 × 1547 pixels. On the right, the inspector, with the fine editing of the ✎ editor docked.

The top bar undoes and redoes, compares before and after with a curtain, zooms the figure in and out (Fit makes it the size of the screen, with the zoom percentage), shows it at actual size, applies one-click Presets (and saves your own), copies the image to the clipboard and, with Export, downloads it at the width of one column, one and a half columns, two columns or a free width, in millimeters or inches, at 300, 600 or 1200 dpi, as PNG, SVG, vector PDF or TIFF, with a white or transparent background. The buttons on the right change the place of the inspector (right, left or floating) and show the shortcuts; Close studio returns to the app with the figure where it was.

The inspector brings together, in collapsible sections, Figure settings (the figures of PalynoPro have no options of their own, and the studio says so), Fine editing of this figure (the app’s ✎), which is the editor below docked, and the studio’s own tools: scientific palettes with color-blindness simulation (Palette and color), text size and line width tuned to the output size, and the legend (inside the plot in eight places, outside, below or hidden; it can also be dragged). Search a control… finds any setting by its name. Double-clicking a text in the figure lets you change it right there. The studio remembers its settings in this browser.

The ✎ editor

The ✎ button opens, without leaving the page, a floating panel that works on that figure, titled “Edit this figure” with the name of the figure. It has six tabs:

The figure editor panel on its General tab: title, subtitle and footnote, font and stroke, background and border
Figure 7.7. The ✎ editor of the biplot on the General tab.

At the foot of the panel, Undo everything on this figure, Copy the style to every figure and Export. The edits are saved figure by figure in this browser, not in the project, and are applied again every time the figure is redrawn—on recomputing, on changing the language or the theme—: texts are recognized by their original wording and colors by their original value. If you open the project on another computer, the figures come out without your edits.

iThe fonts are those of the computer

The figures use the fonts installed on your computer; the app downloads none. An SVG you send to someone else may be displayed with a similar but different font on their computer. For it to look the same everywhere, export it as vector PDF or PNG from the studio.

7.5Saving and resuming the project

The project is a small .json file with everything needed to see the results again and repeat the analysis, except the pictures.

It is saved with Ctrl + S from any block or with Save the project in Block 7. The file is named after the title of the report followed by .palynopro.json (project.palynopro.json if there is no title); the app confirms “Project saved:” with the name and reminds you that it does not carry the results of Block 6 or the ✎ edits. It is opened with Ctrl + O or with Open a project on the home page; the app confirms “Project opened:”, reminds you that “Compare the groups” has to be repeated, and takes you to Block 2.

Table 7.2. What the project saves
SavedNot saved
The details of the report (title, material, author, institution) and its languageThe pictures: only their name and a thumbnail
All the settings of Blocks 2 to 6, with the chosen variables and the seed (those of Block 6 show in their fields on opening)The comparison of Block 6: it is repeated identically with Compare the groups
The list of images with their group and grain (and whether they came from the index or were typed in the table), their magnification, their calibration (with the replacement of a contradicted pixel size), their bar, their kind, their notes and their exclusions; the names of the groupsThe report: it is made again
The measurements of each picture (Blocks 3 and 4) and the count of the overviews (Block 5)The edits of the ✎ editor (they stay in the browser)

On opening a project, the tables and the figures of Blocks 2 to 5 come back. To see the pictures again, review them on the image or have the gallery of the report, open the same folder in Block 2: the app joins each picture to its row by its name and keeps its groups, calibration, exclusions and results (“… of the project opened again”). Only if the folder brings images that were not in the set does it ask first, because adding them clears the results and you have to measure, count and compare again (Appendix D). Without opening the folder you can consult the tables and the figures; the viewers will say “Open the folder again to see the picture.” With the simulated example, which the app draws, the pictures come back by themselves.

!Save before closing

The app saves nothing on its own: every time it opens it starts empty. If you try to close the tab with images open, the browser asks you to confirm. Save the project at the end of each session and, together with it, the folder of the pictures as it was: if you rename a picture, the project no longer finds it.

✓Before handing in
If you changed something after making the report…press Make the report again before printing or downloading.
If you use the written-out methods…complete the material, the sampling, the preparation and the equipment, which the app does not know.
If the journal asks for a figure width and resolution…export from the studio at that width (one column, one and a half, two) and at 300 or 600 dpi, or as vector PDF.
If the report goes in another language…choose English or Español in Language of the report and make it again; for the figures to change language too, change that of the interface (ES · EN).
Always…save the project together with the folder of the pictures: it is the record of how each number was obtained.

These are guides for handing in, not laws: the instructions of the journal or of your graduate program come first.

✕When something goes wrong

“First open your images.” There are no images: open a folder or the example in Block 2. A section says “Not computed.” Its block is missing: measure (Block 3), count (Block 5) or compare (Block 6), and make the report again. Section 6 says “There are no figures yet.” No block has drawn a figure yet. The gallery says “The images are not open in this session.” You opened a project: open the folder of the pictures again in Block 2. The grain of a group is missing from the gallery. All its pictures have some warning (cut outline or enlarged) or are excluded. The methods are not copied. The browser did not allow the use of the clipboard (it happens in some browsers when the app is opened with a double click); download the report as HTML and copy from there. The figures of the report come out in Spanish even though the report is in English. The figures are taken as they are on screen: change the language of the interface and make the report again. “Could not open the project: The file is not a PalynoPro project.” The JSON belongs to another app or is not a project.

A
Appendices

Appendices

What is worth having at hand and did not fit in any chapter: which files the app reads and writes and how it reads them, the rules of the seven blocks gathered in one place, the vocabulary of palynology and statistics used in the manual, what to do when something does not work, the license of the tool with the way to cite it, and the 22 references of the app.

AThe files the app reads and writes

PalynoPro runs in the browser and sends nothing to any server: files come in from your computer and what the app writes goes to your downloads folder. The pictures are never copied: the app keeps a reference to each one while the tab is open.

A.1 · What the app reads

Everything comes in through Block 2—Choose a folder, Choose files or by dropping onto the Drop a folder or your images here area—except the project. The app recognizes each file by its extension and its content; there is no need to tell it what each one is.

WhatExtensionHow it is read
Micrographs.tif .tiff .png .jpg .jpeg .bmp .webp .gifEach image is converted to a single gray channel (0 = black); color images are converted with the weights 0.299, 0.587 and 0.114. TIFF is read by a reader of its own (below); the other formats, by the browser.
Microscope file.txt with the same name as the imageFrom it the magnification, the pixel size if present, the voltage, the working distance, the date and the instrument are read (below). The text that some instruments write inside the TIFF itself is read the same way if there is no .txt.
Index.csv, .tsv or .txt with a headerOne row per image; the columns are looked up by name (below). The first one that has the file column and at least one row is taken.
Group key.txt or .csvLines code = name or code: name (below).
Project.jsonOpen a project on the home page or Ctrl + O. Only a file written by the app, with "app": "PalynoPro"; any other is rejected. It replaces whatever was open (Section 7.5).

The TIFF

The reader accepts TIFF in strips or in tiles; uncompressed, with LZW (with or without horizontal predictor), PackBits or Deflate; at 1, 8, 16 or 32 bits; in grayscale, with a palette or in color. It does not accept TIFF with the channels in separate planes or other compressions (JPEG inside the TIFF, for example): those pictures are reported as not read. 16-bit images are brought to 8 bits for analysis.

The microscope file

The app recognizes these ways of writing the data, in the .txt or inside the TIFF:

LineWhat is read
$CM_MAG 1000The magnification. With this family of files also $CM_ACCEL_VOLT (voltage), $$SM_WD (working distance), $CM_DATE (date), $CM_INSTRUMENT (instrument) and, if they come together, $$SM_MICRON_MARKER 10um and $$SM_MICRON_BAR 128, from which the pixel size follows (the bar in µm divided by its length in pixels).
PixelWidth=1.0e-007The pixel size, in meters.
Image Pixel Size = 100 nmThe pixel size, in pm, nm, µm or mm.
PixelSize=100The pixel size, in nm (at the start of the line).
Magnification=1000 · Mag: x1000The magnification, if it was not read before.
AcceleratingVoltage= · HV= · EHT=The voltage, in kV (or in V if it says so).

If the file has none of this, the magnification is typed by hand in the table of Block 2 or given in the index.

The index

The first line is the header. The separator is guessed from it: semicolon if it has more semicolons than commas; otherwise, tab if it has any; otherwise, comma. Quoted fields are respected, the byte order mark at the start is ignored and empty lines are skipped. Headers are compared ignoring case, accents and symbols (Magnificación and magnificacion are the same). Each column is recognized by any of these names:

ColumnHeaders that name it
File (required)archivo, file, filename, imagen, image, base_id, id, foto
Groupgrupo, group, morfotipo, landrace_code, taxon, especie, species, codigo, code, clase, class
Group namenombre, name, landrace_name, nombre_grupo, group_name
Graingrano, grain, unidad, unit, specimen, ejemplar
Magnificationmagnificacion, magnification, mag, aumento, aumentos
Pixel sizeum_por_px, um_per_px, micras_por_pixel, pixel_size_um, umpx (in µm)
Excludeexcluir, exclude, excluded, descartar; counted as yes: 1, si, yes, true, x, excluir, exclude
Notenota, note, notas, notes, comentario
Kindnivel, tier, tipo, kind; in Spanish or in English: a value with “pano”, “over”, “campo” or “field” is an overview, with “det” a detail, and any other (un grano, one grain…) one grain

Each row is joined to its image by the file name, with or without extension. What the index brings prevails over what is read from the name (group and grain), also if you later change the name pattern (B.1); the magnification of the index is used only if the microscope file did not give it, and a pixel size in the index takes precedence over the magnification (B.1). Decimals may use a point or a comma (0,1), but with a decimal comma separate the columns with semicolons or tabs. The index that Block 2 itself downloads comes back in complete:

archivo;grupo;nombre;grano;magnificacion;excluir;nota
01_G1.tif;G1;Group one;01;1000;;
02_G1.tif;G1;Group one;02;1000;1;broken grain
90_G1.tif;G1;Group one;90;150;;overview

The group key

A text file with one line per group, A = Morphotype A, G1 = Group one or G1: Group one. The code is a single word of letters and digits, 1 to 8 characters long, which may contain hyphens or underscores (- or _) inside: A, G1, M12, P3b, Lin-2. A group that is not in the key is named by hand in the Groups card of Block 2 or with the name column in the index.

Group and grain from the name

Without an index, the group and the grain come from the file name with the Pattern of the name (group and grain) of Block 2, a regular expression with two named parts: (?<grain>…) and (?<group>…). The default, ^(?<grain>\d+)[A-Za-z]*_(?<group>[A-Za-z]+\d*), reads 07a_G1.tif as grain 07 of group G1: the letters after the grain number mark a repeated picture of the same grain. If the pattern has no names, the first and second parentheses are used as grain and group.

A.2 · What the app writes

BlockFileWhat it contains
all<title>.palynopro.json (Ctrl + S)The project: details of the report and its language (reportLang), settings, list of images with their calibration (with the rounded bar, nice, and the mark of a replaced pixel size, replaced), where their group and grain came from (groupFrom, grainFrom: from the index or from the table) and their exclusions, measurements and count of the overviews (Table 7.2). It does not carry the results of Block 6. Without a title, project.palynopro.json.
2palynopro_index.csvOne row per image: archivo, grupo, nombre, grano, magnificacion, ancho_px, um_por_px, fuente, barra_px, barra_um, nivel, excluir, nota (file, group, name, grain, magnification, width in pixels, µm per pixel, source, bar in pixels, bar in µm, kind, exclude, note). The source (by hand, index, instrument, magnification, not calibrated) and the kind (one grain, overview, detail) are in the language of the interface. It can be opened again as an index, in either language.
3palynopro_size_by_group.csvBy group: grupo, nombre, n_granos and, for each outline measurement, its mean and standard deviation (corp_d_media, corp_d_de…).
3palynopro_measurements_by_picture.csvBy picture: foto, grupo, grano, usable (0 if its outline is cut) and the 19 measurements with their internal key.
4palynopro_ornamentation_by_group.csvBy group: the means and standard deviations of the spines, the lumina and the texture.
5palynopro_fertility.csvBy group: panoramicas, granos, colapsados, proporcion, ic_inf, ic_sup (Wilson interval), diametro_media and diametro_de (overviews, grains, collapsed, proportion, interval limits, and mean and standard deviation of the diameter).
6palynopro_by_variable.csvBy variable: variable (the internal key), nombre (name, with its unit), means, standard deviations and letters of each group, F, p_anova_holm, H, p_kruskal_holm and eta2.
7<title>.htmlThe report (Section 7.3), with the figures and the gallery inside. Without a title, palynopro_report.html.
any<figure title>.svg · .pngEach figure, with the colors of the light theme; the PNG at three times its size. The studio also exports PDF and TIFF at the size and resolution you ask for.

The names that come from a title are written without accents and with underscores (Pollen_morphometry_of_the_simulated_example.html). All the CSV files use the comma as separator and the decimal point, with unrounded numbers, and are in UTF-8 with a byte order mark so that a spreadsheet reads the accents and the µ. The column headers are the same in both languages, and the measurements go with their internal key (corp_d, sp_h, lum_d…), which does not change with the language; the per-variable CSV of Block 6 also carries the name of each one.

iWhat the browser remembers

The browser keeps only preferences, not data: the language of the interface, the light or dark theme, the animations, the settings of the figure studio and the edits made with the ✎ editor. To keep a study, save the project.

BThe rules, gathered

The rules the app applies to calibrate, measure, classify, warn or decide, with the block where they act and their default values. They are the same ones each chapter explains; here they are together to be consulted at a glance.

B.1 · Calibration (Block 2)

Pixel sizeµm/px = width of the reference frame (128 mm = 128,000 µm) ÷ (magnification × width of the image in pixels). With 1000× and 1280 px, 0.1 µm/px; with 150× and 1280 px, 0.6667 µm/px.
Order of the sourcesFrom strongest to weakest: the bar measured by hand → the pixel size of the index → the one written by the instrument → the magnification with the reference width → none (the picture stays uncalibrated and out of the comparisons).
The scale barIt is searched for in the bottom 20% of the picture: a rectangle of very light pixels (gray ≥ 235 of 255) between 2% and 45% of the width of the image, repeated with the same start and length (± 2 px) in at least 3 rows, and almost full (95%). If there are several, the longest.
Checked barIts length times the pixel size must be within 4% of a round length: 1, 2 or 5 × 10k µm (10, 20, 50 µm…). If not, the bar is doubtful.
ReplacementIf the pixel size of the index or the instrument gives a doubtful bar and the magnification does give a round one, the magnification is used and the app warns about it. The replacement is kept when the calibration is recomputed (on changing a magnification or the reference width) and is saved in the project.
Group and grainFrom the index or typed in the table, they prevail; otherwise, they are read from the name with the pattern. On pressing Apply with a new pattern, only those that came from the pattern change; the others are changed in the table.
The captionEverything from just above the bar downward is not analyzed (never higher than 60% of the height). Without a bar, a black strip at the bottom is cut if it takes up at least 3% of the height.
Kind of pictureBy the magnification relative to the median of the set: up to 0.6 times, overview; from 1.8 times, detail; in between, one grain. It can be changed by hand in the table.
Pixel of the analysisEmpty, the 90th percentile of the pixel size of the pictures that are not overviews, rounded to two significant digits (0.1 µm in the example): almost no picture has to be enlarged. Those that do are flagged.

B.2 · Outline, size and ornamentation (Blocks 3 and 4)

The grainOtsu threshold, hole filling, speck removal and closing; the largest region near the center.
The outlineThe largest distance from the center to the edge in 720 directions (every half degree).
The bodyEvery peak of the profile narrower than the Largest base of a spine (µm) is cut off: 3 µm.
A spineA peak of the profile above the body of at least the Least height of a spine (µm): 0.3 µm.
Spine heightFrom the tip to the chord joining its two feet. It comes out about one pixel shorter than the real one (by 3 to 6% in spines many pixels high with simulated grains, median 4%; more if the spine is short or the spines touch at the base); it is reported in the limitations.
Cut outlineIf the edge of the picture or the caption cut more than the Acceptable cut outline (%)—2%—of the outline, the picture is flagged and does not enter the comparisons.
Excluded pictureIt stays in the viewer of the review (“— excluded”) and does not enter the analysis; Include again measures it on the spot. If the common pixel changes with it, the app asks to measure all the pictures again.
Enlarged pictureIf it had to be enlarged by more than 5% to reach the pixel of the analysis, it is flagged: its fine measurements are less reliable.
LuminaPixels darker than the mean of their neighborhood (Radius of the neighborhood (µm): 1.5) by more than 0.15 standard deviations; the equivalent diameter of each closed cell is measured and its median is reported.
Pictures of the same grainThey are averaged: the grain is the unit.

B.3 · Fertility (Block 5)

What countsComplete grains from 15 to 200 µm in diameter; those touching the edge of the picture do not count.
Typical grainThe median diameter of the grains not touching the edge; with fewer than three, the median of the body measured in Block 3.
Fragment and aggregateSmaller than 0.6 times the typical grain, fragment; larger than 1.3 times, aggregate. Neither counts.
Turgid or collapsedTurgid if the solidity of the body without spines (area ÷ area of its convex hull) is 0.95 or more; otherwise, collapsed or misshapen.
The testProportion with its 95% Wilson interval; the groups are compared with a χ² test of homogeneity (they differ if p < 0.05). If any expected frequency is below 5, the app warns that the test is approximate.

B.4 · Multivariate statistics (Block 6)

MinimumsAt least two variables; groups with at least three grains (the others are left out); at least two groups. A grain without a value in some chosen variable leaves the analysis, and the app says so next to the button and in the methods of the report.
By variableAnalysis of variance and Kruskal–Wallis with Holm’s adjustment over all the variables; Tukey letters (Tukey–Kramer) with α = 0.05; a for the group with the highest mean.
MultivariateStandardized variables; principal components of the correlation matrix; PERMANOVA with Euclidean distance, 999 permutations, p = (times + 1) / (permutations + 1); pairs with Holm.
ClassifiersLinear discriminant with a common covariance and prior probabilities equal to the frequency of each group (with a ridge of 0.001 if the matrix is singular); random forest of 500 trees, Gini splits, √p variables per split. Validation leaving out one whole grain, with the standardization redone without it and forests of at most 300 trees (the tiles and the methods say so).
Verdict of the keyWith the better classifier: 80% or more, pollen works as a key; below 80% but at least twice chance, the groups overlap; below that, it barely beats chance. Chance is the proportion of the largest group.
Seed1 by default: the same project always gives the same result.

All of them are guides for reading the results, not laws: what you know about your material, the preparation and how it was photographed always comes first.

CGlossary

The terms of palynology, image analysis and statistics used in the manual, in the sense in which the app uses them. Pollen terminology follows Punt et al. (2007) and Halbritter et al. (2018).

TermMeaning
AggregateIn an overview, a region much larger than the typical grain: grains touching each other. It is not classified.
Body (corpus)The grain without its ornamentation: the silhouette left after cutting off the spines.
CalibrationThe size in micrometers of one pixel of the picture.
Circularity4π × area ÷ perimeter²: 1 for a perfect circle, less the more irregular or elongated the outline.
Cohen’s κAgreement between the true and the assigned group discounting the agreement expected by chance: 1 is perfect, 0 that of chance.
CollapsedA sunken or folded grain that has lost turgor; in the app, one with solidity below the threshold (“collapsed or misshapen” in the review of the overviews; the “collapsed” of Block 5 and of the report).
Common pixel (of the analysis)The pixel size to which all the pictures are brought before measuring them, so that they are comparable.
Convex hullThe smallest convex polygon that contains the silhouette, like a rubber band stretched around it.
DetailA picture of part of the surface at a magnification much higher than that of the rest; it is not measured as a grain.
EchinateWith spines (echinae) longer than 1 µm on the surface.
ElongationThe major Feret diameter divided by the minor: 1 for an outline with no dominant direction.
Equatorial · polar viewThe grain seen from the side (with the polar axis in the plane of the picture) or from a pole. The Feret diameters amount to the polar (P) and equatorial (E) axes only in equatorial view.
ExineThe outer wall of the pollen grain, resistant, which bears the ornamentation.
Feret diametersThe width of the body measured between two parallel lines touching it; the largest and the smallest over all directions.
FragmentIn an overview, a region much smaller than the typical grain: debris or dust. It is not classified.
Grain (unit)A pollen grain, with all its pictures; the unit of the tests and of the validation.
Gray-level co-occurrenceA table of how often two gray tones appear together at a given distance; the contrast, homogeneity, entropy, correlation and energy of the texture are derived from it.
Holm adjustmentA correction of the p-values when many tests are run at once.
Leave-one-grain-out validationOne whole grain is taken out, the model is fitted with the rest and the grain taken out is classified; this is repeated with every grain.
Linear discriminantA classifier that looks for the combinations of variables that best separate the groups.
Lumen (pl. lumina)Each space between the muri of a reticulum; in the micrograph, each dark cell.
MagnificationHow many times the microscope enlarges the field relative to the reference frame.
Murus (pl. muri)Each of the ridges that form the mesh of a reticulum and bound the lumina.
OverviewA low-magnification picture with many grains, for counting turgid and collapsed ones.
PERMANOVAA multivariate analysis of variance done with distances and tested by permutations.
Principal componentsNew axes, combinations of the variables, that summarize the largest possible variation without being correlated with each other.
PseudoreplicationTreating as independent data that are not, such as two pictures of the same grain.
Radial profileThe distance from the center of the grain to its edge in each direction, from 0 to 360°.
Random forestA classifier that brings together hundreds of decision trees fitted with random samples of the grains; each tree votes.
ReticulateWith a reticulum on the surface.
ReticulumA net-like ornamentation: muri that leave lumina between them.
Scale barThe segment printed on the picture with its length; the app uses it to check the calibration, not to read it.
SolidityThe area of a silhouette divided by the area of its convex hull: 1 for a shape with no indentations, less for a sunken grain.
Spine (echina)A pointed ornamentation element; in the app, each peak of the outline above the body with the minimum height.
Spine densitySpines on the outline per 100 µm of free outline.
Spine heightIn the app, the distance from the tip of the spine to the chord joining its two feet on the profile of the outline.
TectumThe outer layer of the exine, which totally or partially covers its elements; it is seen in sections, not in a surface micrograph.
TurgidA full grain, with a rounded outline; in the app, one with solidity equal to or above the threshold.
η² (eta squared)The part of the variation of a variable that is explained by group.

DWhen something does not work

The messages of the app, as they appear, with what they usually mean and what to do. The ellipses are the part of the message that changes (a name, a number).

MessageWhat is going on and what to do
Opening images and projects
“… image(s) read, … microscope file(s), index "…", … group name(s)” with “Could not be read: …”The images in the list could not be opened; the reason follows the name: “not a TIFF” (even if its extension says so), “TIFF compression … not supported” (a compression the app does not read: save the picture uncompressed or with LZW), “TIFF planar layout not supported”, “TIFF of … bits not supported”, “TIFF without size”, “TIFF without image data” or, for the other formats, “the browser could not read this image (damaged file or unsupported format)”. Convert it to 8- or 16-bit TIFF or to PNG.
“0 image(s) read, … of the project opened again.”You opened the folder of an open project: the pictures were joined to their rows and the results are kept.
“There are … image(s) that were not in the set. Adding them clears the results already computed (outline, ornamentation, fertility and statistics), which will have to be computed again. Continue?”The folder brings new pictures. If you accept, the app says “The set changed: the previous results were cleared.” and you have to measure, count and compare again; if not, nothing changes.
The index does not appear in the messageThe file column was not recognized (A.1) or it has no rows; the app then tries it as a group key.
“Could not open the project: The file is not a PalynoPro project.”The JSON belongs to another app or is not a project. Open a .palynopro.json.
“This replaces the open images with the simulated example. Continue?”You pressed Simulated example with your images open. Save the project first if you want to keep them.
“Remove every image and result?”You pressed Clear.
Calibration (Block 2)
“… image(s) have no magnification nor pixel size: type their magnification in the table or measure their bar by hand.”The microscope file and the index are missing. Type the magnification in the Magnif. column or use Measure the bar by hand.
“… bar(s) do not give a round length with the calibration: check those pictures (filter "Doubtful bar")…”A mistyped magnification, another reference width or another image width. Filter Doubtful bar, compare with the number on the caption and correct the magnification or the Width of the reference frame (mm).
“In … image(s), the pixel size of the index or the file did not match the scale bar while the magnification did: the magnification was used. Check that index.”The index has a wrong pixel size (often copied from pictures of another width). The app has already corrected it; fix the index.
“… picture(s) without a bar: calibrated by their magnification, without a check.”Just a note: the bar was covered, cropped or is dark.
“No group was recognized in the names: adjust the pattern or load an index with a "group" column.”The names do not follow the pattern (A.1). Change the Pattern of the name (group and grain) and press Apply, or load an index.
“The pattern is not a valid expression.”The pattern is missing a parenthesis or a bracket.
“The new pattern did not change the group or grain of … image(s): they came from the index or were typed in the table, and those prevail. To change them, edit them in the table.”Just a warning: the pattern changed the others (B.1).
“How many µm is the bar you marked? (… px)”You made the two clicks of Measure the bar by hand: type the number on the caption. The app confirms “Calibrated by hand: … µm/px”.
Measuring and counting (Blocks 3 to 5)
“First open your images in Block 2.”There are no included and calibrated one-grain pictures.
“… of … pictures measured in … s.” with “No recognizable grain: …”In those pictures the threshold did not separate a grain from the background: a very small grain, a picture with almost no contrast or a light background. Check them in the viewer; exclude them or improve the contrast.
“… picture(s) with more than 2% of the outline cut by the edge or the caption…”The grain touches the edge or runs into the caption. They do not enter the comparisons; if there are many, raise the Acceptable cut outline (%) with care.
“… picture(s) had less resolution than the pixel of the analysis and were enlarged…”Pictures of lower magnification or smaller width than the rest. Their spines and lumina are less reliable; set a larger Pixel of the analysis (µm) or exclude them.
“The common pixel of the analysis changed: measure every picture again.”You included a picture again in the review of Block 3 and the common pixel changed with it: press Measure every one-grain picture again.
“First measure the grains” (Block 4)Ornamentation comes from the measurement of Block 3: press Go to Block 3.
“There are no overviews: mark them as "Overview" in Block 2.”No picture has the overview kind; change it in the Kind column.
“… cell(s) with expected frequency below 5: the χ² test is approximate; count more overviews.”Few collapsed grains or few grains in total; count more.
“Open the folder again to see the picture.” · “The image is not open in this session: open its folder again.”You opened a project: the pictures are not inside it (Section 7.5).
Comparing and reporting (Blocks 6 and 7)
“First measure the grains in Block 3.”There are no measurements; the Compare the groups button stays disabled.
“Choose at least two variables.”Check two or more in Enter the analysis.
“At least two groups with three grains or more are needed.”Check the groups and the grains of Block 2 and the pictures with a cut outline.
“Groups with fewer than three grains, left out: …”Photograph more grains of those groups or merge them with another if it makes sense.
“… without a value in some chosen variable: left out”Those grains lack some checked variable (for example, with no lumina measured). Uncheck that variable or check their pictures in Block 4.
“Project saved: …. It does not keep the results of Block 6…” · “Project opened: …. The results of Block 6 are not saved: repeat them with "Compare the groups".”Just warnings: the comparison does not go in the project, but it comes out the same when repeated, with the same seed (Section 7.5).
“First open your images.”You pressed Make the report with no images.
“Not computed.” · “There are no figures yet.” · “The images are not open in this session.” (in the report)A block is still to be computed, no figure has been drawn or the pictures are not open (Section 7.3).
“There is no figure yet.” · “Could not export: …”You pressed SVG or PNG on an empty figure, or the browser could not draw the PNG (a huge figure); try SVG.

If the app goes blank or a card does not respond, reload the page: the data are lost, but the saved project is not. If the problem persists, open the app with Open PalynoPro.bat instead of double-clicking index.html; some browsers limit what a page opened as a file can do.

EThe tool: license and how to cite it

E.1 · What it is and what it is not

PalynoPro is written for this program: the TIFF reading with its compressions, the image analysis, the statistics, the multivariate analysis, the figures, the report and the illustrations are in its own code, which can be read. It uses no third-party libraries, ships no fonts (it uses those of the computer), has no minified code or build steps and loads nothing from the network: that is why it opens with a double click and offline. PNG and JPEG images are decoded by the browser itself. The only outbound link, the one to the portal of the suite, is followed only if you click it.

The common modules of the suite—the block navigator, the figure studio and the ✎ editor—are by the same author and come in their variant with original icons, drawn for the suite. The example is simulated: the grains, their spines, their reticulum, the noise and the scale bar are drawn by code with fixed seeds every time it is opened, and they are not pictures of any plant. It implements published methods, each cited to its original source in the code, on the home page of the app and in the methods of the report (Appendix F). The file PROCEDENCIA.md, in the folder of the program, says where each part comes from.

E.2 · License

PalynoPro is distributed under the GNU General Public License, version 3 or later (GPL-3.0-or-later). The full text is in the LICENSE file, in the folder of the program.

iLicensing is not giving up authorship

The license states what whoever receives the program may do: use it for any purpose, study it, modify it and redistribute it. In return it asks that, if you distribute a modified version, you do so with the same freedoms and with its source code. Authorship is neither transferred nor waived. The program is provided without warranty, as the license says; this manual has its own rights, reserved by its author.

E.3 · How to cite it

The How to cite section on the home page of the app gives the citation ready to copy, with Copy the citation. Both citations below carry the Zenodo concept DOI, which always resolves to the latest version (version 1.0.0 has its own: 10.5281/zenodo.23883214).

“
Suggested citations
The program: Barrera-Guzmán, L. Á. (2026). PalynoPro: quantitative pollen morphometry from electron micrographs (version 1.0.0) [Computer software]. Zenodo. https://doi.org/10.5281/zenodo.23883213

This manual: Barrera-Guzmán, L. Á. (2026). PalynoPro. User’s Manual (1st ed.). Distributed with PalynoPro, version 1.0.0. https://doi.org/10.5281/zenodo.23883213

In your methods, also cite the works of the methods you used. The methods of the report (Section 7.3) already cite them by author and year, and its references section gives the full entries.

FReferences

The 22 works in the catalog of the app, grouped by topic—palynology, image analysis and statistics—and, within each topic, in alphabetical order. They are the same as in the References section of the home page and of the report.

F.1 · Palynology and pollen terminology

F.2 · Image analysis

F.3 · Statistics, multivariate analysis and classification