"""Small hand-transcribed tables (values typed from published tables/text; each row carries its source and a verification flag: V = checked against the open-access full text downloaded by fetch_data.py during this study; L = literature value quoted from memory of the cited paper and NOT re-verified here). Writes data/neurons_highend_transcribed.csv and data/hominin_body_mass_assumed.csv. """ import csv import os HERE = os.path.dirname(os.path.abspath(__file__)) DATA = os.path.join(HERE, "..", "data") A25 = "Avelino-de-Souza et al. 2025 J Comp Neurol (PMC12445405) Table 2" # lineage, species, common, brain_g, cortical(pallial) neurons [1e9], kind, source, flag NEURONS = [ # --- measured with the isotropic fractionator (IF) ("Hominini", "Homo_sapiens", "human", 1460, 16.3, "IF_measured", A25 + " citing Azevedo et al. 2009", "V"), ("Panini", "Pan_troglodytes", "chimpanzee", 449, 6.5, "IF_measured", A25 + " ('6-7 billion')", "V"), ("Cercopithecidae", "Papio_anubis", "baboon", 152, 2.9, "IF_measured", A25, "V"), ("Cercopithecidae", "Macaca_mulatta", "rhesus macaque", 93, 1.7, "IF_measured", A25, "V"), ("Proboscidea", "Loxodonta_africana", "African elephant", 4619, 5.59, "IF_measured", "Herculano-Houzel et al. 2014 Front Neuroanat 8:46 (PMC4053853) Table 1", "V"), ("Mysticeti", "Balaenoptera_acutorostrata", "minke whale", 2684, 3.17, "IF_measured", "Avelino-de-Souza et al. 2025 (PMC12445405) Table 1", "V"), ("Giraffidae", "Giraffa_camelopardalis", "giraffe", 700, 1.7, "IF_measured", A25 + " citing Kazu et al. 2014", "V"), # --- predicted from brain mass with the published IF scaling rules (same table) ("Mysticeti", "Balaenoptera_physalus", "fin whale", 7100, 5.2, "IF_rule_predicted", A25, "V"), ("Mysticeti", "Balaenoptera_musculus", "blue whale", 6800, 5.1, "IF_rule_predicted", A25, "V"), ("Delphinidae", "Orcinus_orca", "killer whale", 6052, 4.7, "IF_rule_predicted", A25, "V"), ("Delphinidae", "Globicephala_macrorhynchus", "short-finned pilot whale", 2818, 3.0, "IF_rule_predicted", A25, "V"), ("Monodontidae", "Delphinapterus_leucas", "beluga", 2354, 2.7, "IF_rule_predicted", A25, "V"), ("Hippopotamidae", "Hippopotamus_amphibius", "hippopotamus", 720, 1.3, "IF_rule_predicted", A25, "V"), ("Gorillini", "Gorilla_gorilla", "gorilla", 574, 10.3, "IF_rule_predicted", A25, "V"), ("Ponginae", "Pongo_pygmaeus", "orangutan", 422, 7.7, "IF_rule_predicted", A25, "V"), # --- optical-fractionator stereology (Pakkenberg group); neocortex only ("Delphinidae", "Globicephala_melas", "long-finned pilot whale", "", 37.2, "stereology", "Mortensen et al. 2014 Front Neuroanat 8:132 (PMC4244864)", "V"), ("Mysticeti", "Balaenoptera_acutorostrata", "minke whale", 2684, 12.8, "stereology", "Eriksen & Pakkenberg 2007 as quoted by Avelino-de-Souza et al. 2025", "V"), ("Phocoenidae", "Phocoena_phocoena", "harbour porpoise", "", 15.0, "stereology", "Walloe et al. 2010 as quoted ('15 billion') by Avelino-de-Souza et al. 2025", "V"), ("Hominini", "Homo_sapiens", "human", "", 21.0, "stereology", "Pakkenberg & Gundersen 1997 J Comp Neurol 384:312 (19 billion in females, 23 billion in males)", "L"), ] # Approximate species-mean body masses used ONLY to put hominin endocranial volumes on the EQ axis of # Fig. 3. Round numbers of the size reported in the palaeoanthropological literature (e.g. McHenry 1992; # Grabowski et al. 2015; Ruff et al. 2018); not re-verified here (flag L). A +-30 % error in body mass # moves EQ by -+19 %. HOMININ_BODY = [ ("Au. afarensis", 40), ("Au. garhi", 40), ("Au. africanus", 33), ("Au. sediba", 30), ("P. aethiopicus", 38), ("P. robustus", 35), ("P. boisei", 40), ("H. habilis", 35), ("H. erectus", 55), ("H. heidelbergensis", 68), ] def main(): with open(os.path.join(DATA, "neurons_highend_transcribed.csv"), "w", newline="", encoding="utf8") as f: w = csv.writer(f) w.writerow(["lineage", "species", "common", "brain_g", "cortical_neurons_1e9", "kind", "source", "verified"]) w.writerows(NEURONS) with open(os.path.join(DATA, "hominin_body_mass_assumed.csv"), "w", newline="", encoding="utf8") as f: w = csv.writer(f) w.writerow(["taxon", "body_kg_assumed", "verified"]) for t, b in HOMININ_BODY: w.writerow([t, b, "L"]) print(f" transcribed tables: {len(NEURONS)} neuron-count rows, {len(HOMININ_BODY)} hominin body masses") if __name__ == "__main__": main()