Skip to content

Commit be54bed

Browse files
abelsiqueiradatejadag-moralesespanaclizbe
authored
JOSS paper (#1284)
* [WIP] JOSS paper * [WIP] Updates to joss * [WIP] JOSS paper * [WIP] JOSS paper * Add scientific references to the bib * Update affiliations * Apply suggestions from code review Co-authored-by: Diego Alejandro Tejada Arango <12887482+datejada@users.noreply.github.com> * Update paper.md * Update paper.md * Update paper.md * Update paper.md Added Mathijs * Update paper.md * Update paper.md Updated tittle and abstract * Update paper.md * Update paper.md New statement of need * Update paper.md Updated modelling innovations * Update paper.md minor text updates * Update paper.bib Adding 3 references * Update paper.md updated references in the document * Update paper.md * Update paper.md * Update paper.md fixing references * Update paper.md Minor changes * Update paper.md Small change to the tittle * Fix Tejada2025 reference and fix linting * Add tulipa-overview image * Add images * Add HiGHS bib * Small fixes to the scientific part * Update to the software design part * Integrate Mathijs de Weerdt comments * Update Juha's paper info * Update paper/paper.md Co-authored-by: Lauren Clisby <lclisby@gmail.com> * Update paper/paper.md Co-authored-by: Lauren Clisby <lclisby@gmail.com> * Some of Lauren's changes * Update paper/paper.md Co-authored-by: Lauren Clisby <lclisby@gmail.com> * Update paper.md * Update paper/paper.md Co-authored-by: Lauren Clisby <lclisby@gmail.com> * Update paper/paper.md Co-authored-by: Lauren Clisby <lclisby@gmail.com> * Apply suggestions from code review Last updates Co-authored-by: Lauren Clisby <lclisby@gmail.com> * Update paper.md Grammar corrections and language consistency (British English) * More of Lauren's changes * Apply suggestions from code review Co-authored-by: Lauren Clisby <lclisby@gmail.com> * Add metadata to JOSS paper --------- Co-authored-by: Diego Alejandro Tejada Arango <diego.tejadaarango@tno.nl> Co-authored-by: Diego Alejandro Tejada Arango <12887482+datejada@users.noreply.github.com> Co-authored-by: Germán Morales <42405171+g-moralesespana@users.noreply.github.com> Co-authored-by: Lauren Clisby <lclisby@gmail.com>
1 parent 4fb9024 commit be54bed

File tree

9 files changed

+578
-0
lines changed

9 files changed

+578
-0
lines changed

paper/build-paper.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#!/bin/bash
2+
3+
docker run --rm -v $PWD:/data --user $(id -u):$(id -g) --env JOURNAL=joss openjournals/inara

paper/codemeta.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"@context": "https://raw.githubusercontent.com/codemeta/codemeta/master/codemeta.jsonld",
3+
"@type": "Code",
4+
"author": [],
5+
"codeRepository": "https://github.com/TulipaEnergy/TulipaEnergyModel.jl/",
6+
"dateCreated": "2025-10-19",
7+
"dateModified": "2025-10-19",
8+
"datePublished": "2025-10-19",
9+
"description": "An energy system optimization model that is flexible, computationally efficient, and academically robust.",
10+
"identifier": "https://doi.org/10.5281/zenodo.8363262",
11+
"keywords": "julia, energy-system optimisation, unit commitment, multi-year investment, DC-OPF, seasonal storage, representative periods, flexible temporal resolution",
12+
"license": "Apache 2.0",
13+
"title": "TulipaEnergyModel.jl: A Modelling Framework Breaking the Tradeoff Between Fidelity and Computational Load",
14+
"version": "v0.18.2"
15+
}

paper/count-paper-words.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#!/bin/bash
2+
3+
awk '/## Summary/,EOF { print $0}' paper.md | wc -w
108 KB
Loading

paper/images/indices-storage.png

32.2 KB
Loading

paper/images/tulipa-overview.jpg

123 KB
Loading

paper/metadata-gen.rb

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
#!/usr/bin/ruby
2+
# Copied from https://gist.github.com/arfon/478b2ed49e11f984d6fb
3+
4+
# For an OO language, this is distinctly procedural. Should probably fix that.
5+
require 'json'
6+
7+
details = Hash.new({})
8+
9+
capture_params = [
10+
{ :name => "title", :message => "Enter project name." },
11+
{ :name => "url", :message => "Enter the URL of the project repository." },
12+
{ :name => "description", :message => "Enter the (short) project description." },
13+
{ :name => "license", :message => "Enter the license this software shared under. (hit enter to skip)\nFor example MIT, BSD, GPL v3.0, Apache 2.0" },
14+
{ :name => "doi", :message => "Enter the DOI of the archived version of this code. (hit enter to skip)\nFor example http://dx.doi.org/10.6084/m9.figshare.828487" },
15+
{ :name => "keywords", :message => "Enter keywords that should be associated with this project (hit enter to skip)\nComma-separated, for example: turkey, chicken, pot pie" },
16+
{ :name => "version", :message => "Enter the version of your software (hit enter to skip)\nSEMVER preferred: http://semver.org e.g. v1.0.0" }
17+
]
18+
19+
puts "I'm going to try and help you prepare some things for your JOSS submission"
20+
puts "If all goes well then we'll have a nice codemeta.json file soon..."
21+
puts ""
22+
puts "************************************"
23+
puts "* First, some basic details *"
24+
puts "************************************"
25+
puts ""
26+
27+
# Loop through the desired captures and print out for clarity
28+
capture_params.each do |param|
29+
puts param[:message]
30+
print "> "
31+
input = gets
32+
33+
details[param[:name]] = input.chomp
34+
35+
puts ""
36+
puts "OK, your project has #{param[:name]}: #{input}"
37+
puts ""
38+
end
39+
40+
puts ""
41+
puts "************************************"
42+
puts "* Experimental stuff *"
43+
puts "************************************"
44+
puts ""
45+
46+
puts "Would you like me to try and build a list of authors for you?"
47+
puts "(You need to be running this script in a git repository for this to work)"
48+
print "> (Y/N)"
49+
answer = gets.chomp
50+
51+
case answer.downcase
52+
when "y", "yes"
53+
54+
# Use git shortlog to extract a list of author names and commit counts.
55+
# Note we don't extract emails here as there's often different emails for
56+
# each user. Instead we capture emails at the end.
57+
58+
git_log = `git shortlog --summary --numbered --no-merges`
59+
60+
# ["252\tMichael Jackson", "151\tMC Hammer"]
61+
authors_and_counts = git_log.split("\n").map(&:strip)
62+
63+
authors_and_counts.each do |author_count|
64+
count, author = author_count.split("\t").map(&:strip)
65+
66+
puts "Looks like #{author} made #{count} commits"
67+
puts "Add them to the output?"
68+
print "> (Y/N)"
69+
answer = gets.chomp
70+
71+
# If a user chooses to add this author to the output then we ask for some
72+
# additional information including their email, ORCID and affiliation.
73+
case answer.downcase
74+
when "y", "yes"
75+
puts "What is #{author}'s email address? (hit enter to skip)"
76+
print "> "
77+
email = gets.chomp
78+
79+
puts "What is #{author}'s ORCID? (hit enter to skip)"
80+
puts "For example: http://orcid.org/0000-0000-0000-0000"
81+
print "> "
82+
orcid = gets.chomp
83+
84+
puts "What is #{author}'s affiliation? (hit enter to skip)"
85+
print "> "
86+
affiliation = gets.chomp
87+
88+
89+
details['authors'].merge!(author => { 'commits' => count,
90+
'email' => email,
91+
'orcid' => orcid,
92+
'affiliation' => affiliation })
93+
94+
when "n", "no"
95+
puts "OK boss..."
96+
puts ""
97+
end
98+
end
99+
when "n", "no"
100+
puts "OK boss..."
101+
puts ""
102+
end
103+
104+
puts "Reticulating splines"
105+
106+
5.times do
107+
print "."
108+
sleep 0.5
109+
end
110+
111+
puts ""
112+
puts "Generating some JSON goodness..."
113+
114+
# TODO: work out how to use some kind of JSON template here.
115+
# Build the output list of authors from the inputs we've collected.
116+
output_authors = []
117+
118+
details['authors'].each do |author_name, values|
119+
entry = {
120+
"@id" => values['orcid'],
121+
"@type" => "Person",
122+
"email" => values['email'],
123+
"name" => author_name,
124+
"affiliation" => values['affiliation']
125+
}
126+
output_authors << entry
127+
end
128+
129+
# TODO: this is currently a static template (written out here). It would be good
130+
# to do something smarter here.
131+
output = {
132+
"@context" => "https://raw.githubusercontent.com/codemeta/codemeta/master/codemeta.jsonld",
133+
"@type" => "Code",
134+
"author" => output_authors,
135+
"identifier" => details['doi'],
136+
"codeRepository" => details['url'],
137+
"datePublished" => Time.now.strftime("%Y-%m-%d"),
138+
"dateModified" => Time.now.strftime("%Y-%m-%d"),
139+
"dateCreated" => Time.now.strftime("%Y-%m-%d"),
140+
"description" => details['description'],
141+
"keywords" => details['keywords'],
142+
"license" => details['license'],
143+
"title" => details['title'],
144+
"version" => details['version']
145+
}
146+
147+
File.open('codemeta.json', 'w') {|f| f.write(JSON.pretty_generate(output)) }

0 commit comments

Comments
 (0)