mesa_cli 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +11 -0
- data/bin/mesa +107 -1
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 24acf53efdea5f730721936a3e65e7fb29eb7418
|
4
|
+
data.tar.gz: 2d2ae1dcd9246f44e7023aa7289d4fa94370f2ec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e9afe5c45473b6d4d57ecf0f24ebf32462919093b7f1c2fb8f723b709facaef4816533e29e7eb19ef6b5dc62a852e333c61cb81b762bdf693e77a61afb8490c
|
7
|
+
data.tar.gz: 6f0c15eb122a8508109f344af0fe7b48eaf55ad772517658de2ffb69ea4f90a35e3b5a5680bd6e760a1d6e659f2236d016cbf7be67e598036bbeb96226be508f
|
data/README.md
CHANGED
@@ -144,6 +144,17 @@ where `INLIST_TO_POINT_TO` is the name of an inlist that you would like your loc
|
|
144
144
|
The `-p` or `--pgstar` option will also point the main `inlist` file to the
|
145
145
|
`INLIST_TO_POINT_TO` file for the `pgstar` namelist.
|
146
146
|
|
147
|
+
|
148
|
+
### rates
|
149
|
+
|
150
|
+
To use, just type
|
151
|
+
|
152
|
+
mesa rates REACTION_NAME OUTFILE
|
153
|
+
|
154
|
+
where `REACTION_NAME` is the name of a reaction found in `$MESA_DIR/data/rates_data/cache`, without the preceding `r_` and optionally specifying `_1`, `_2`, or whatever other option is available. For instance, `c12_pg_n13` is a valid `REACTION_NAME`, as is `c12_pg_n13_1`. If no ending number is specified, `_1` is assumed.
|
155
|
+
|
156
|
+
`OUTFILE` is an optional argument that specifies a file name where the rate data will be written to. If it is omitted, the data is simply written to the standard output.
|
157
|
+
|
147
158
|
### test
|
148
159
|
|
149
160
|
To use, just type
|
data/bin/mesa
CHANGED
@@ -270,6 +270,95 @@ class MyCLI < Thor
|
|
270
270
|
end
|
271
271
|
end
|
272
272
|
|
273
|
+
desc "rates REACTION [OUTFILE]", "Calculate and output out reaction rates"
|
274
|
+
|
275
|
+
long_desc <<-LONGDESC
|
276
|
+
Calls the `show_rates' executable from $MESA_DIR/rates/test for a REACTION
|
277
|
+
found in $MESA_DIR/data/rates_data/cache. The reaction is whatever comes
|
278
|
+
after "r" or "r_" in the .bin file in the cache directory. You may also
|
279
|
+
include the number at the end if you'd like to specify which rate to use, but
|
280
|
+
if none is provided, the "_1" option will be used.
|
281
|
+
|
282
|
+
If OUTFILE is provided, the output is redirected to a text file with the name
|
283
|
+
indicated by OUTFILE. Otherwise it is simply written to the screen.
|
284
|
+
|
285
|
+
For example,\n
|
286
|
+
|
287
|
+
>>> mesa rates c12_pg_n13
|
288
|
+
|
289
|
+
will spit 10,000 lines of rate data to the terminal, while
|
290
|
+
|
291
|
+
>>> mesa rates c12_pg_n13 c12_pg_n13.data
|
292
|
+
|
293
|
+
will save the same data to a file, c12_pg_n13.data.
|
294
|
+
LONGDESC
|
295
|
+
|
296
|
+
def rates(reaction, outfile = '')
|
297
|
+
return unless check_for_mesa_dir
|
298
|
+
cache_dir = File.join(ENV['MESA_DIR'], 'data', 'rates_data', 'cache')
|
299
|
+
|
300
|
+
# set up regular expressions; allow for specific ending number (first case)
|
301
|
+
# or leave it ambiguous (second case)
|
302
|
+
if reaction =~ /_\d$/
|
303
|
+
matcher = /r_?#{reaction}\.bin/
|
304
|
+
else
|
305
|
+
matcher = /r_?#{reaction}_(\d)\.bin/
|
306
|
+
end
|
307
|
+
|
308
|
+
# search for matching cache files. Return if none are found and find lowest
|
309
|
+
# "number" cache file if multiple matches are found
|
310
|
+
rate_files = Dir.entries(cache_dir).select { |f| f =~ matcher }
|
311
|
+
case rate_files.length
|
312
|
+
when 0
|
313
|
+
puts "No reactions matching #{reaction} found in #{cache_dir}. Exiting."
|
314
|
+
return
|
315
|
+
when 1
|
316
|
+
rate_file = File.join(cache_dir, reactions[0])
|
317
|
+
else
|
318
|
+
min_num = nil
|
319
|
+
rate_file = nil
|
320
|
+
rate_files.each do |f|
|
321
|
+
if min_num.nil? or matcher.match(f).captures.first.to_i < min_num
|
322
|
+
min_num = matcher.match(f).captures.first.to_i
|
323
|
+
rate_file = File.join(cache_dir, f)
|
324
|
+
end
|
325
|
+
end
|
326
|
+
end
|
327
|
+
|
328
|
+
data = ''
|
329
|
+
# Execute the `show_rates` function and capture the output
|
330
|
+
visit File.join(ENV['MESA_DIR'], 'rates', 'test') do
|
331
|
+
data = `./show_rates #{rate_file}`
|
332
|
+
end
|
333
|
+
|
334
|
+
# scrub the output for poorly formatted floats
|
335
|
+
|
336
|
+
lines = data.split("\n")[4..-1]
|
337
|
+
t8 = []
|
338
|
+
sigv = []
|
339
|
+
float_matcher = /(\d\.\d+)D?(\-|\+)(\d+)/i
|
340
|
+
lines.each do |line|
|
341
|
+
new_t8, new_sigv = line.split
|
342
|
+
new_t8 =~ float_matcher
|
343
|
+
t8 << $1.to_f * (10**(exp_sign($2) * $3.to_i))
|
344
|
+
new_sigv =~ float_matcher
|
345
|
+
sigv << $1.to_f * (10**(exp_sign($2) * $3.to_i))
|
346
|
+
end
|
347
|
+
lines = t8.zip(sigv).map do |pair|
|
348
|
+
sprintf("%-26.16e", pair[0]) + sprintf("%-26.16e", pair[1])
|
349
|
+
end
|
350
|
+
data = lines.join("\n")
|
351
|
+
|
352
|
+
# save output to screen or to file
|
353
|
+
if outfile.empty?
|
354
|
+
puts data
|
355
|
+
else
|
356
|
+
File.open(outfile, 'w') do |f|
|
357
|
+
f.puts data
|
358
|
+
end
|
359
|
+
end
|
360
|
+
end
|
361
|
+
|
273
362
|
private
|
274
363
|
def create_ms_file(inlist_name, ms_name)
|
275
364
|
ms_name += '.rb' unless ms_name[-3..-1] == '.rb'
|
@@ -326,7 +415,6 @@ class MyCLI < Thor
|
|
326
415
|
|
327
416
|
# adjust MESA_DIR location and document changes
|
328
417
|
lines_to_fix.reverse.each do |i|
|
329
|
-
have_fixed = true
|
330
418
|
line = contents[i]
|
331
419
|
contents[i].sub!(/=.*/, "=#{dir_name}")
|
332
420
|
contents.insert(i, '# ' + "Changed MESA_DIR to #{dir_name} on " +
|
@@ -363,6 +451,24 @@ class MyCLI < Thor
|
|
363
451
|
"not a supported shell."
|
364
452
|
end
|
365
453
|
end
|
454
|
+
|
455
|
+
def visit(new_dir)
|
456
|
+
old_dir = Dir.pwd
|
457
|
+
Dir.chdir(new_dir)
|
458
|
+
yield
|
459
|
+
Dir.chdir(old_dir)
|
460
|
+
end
|
461
|
+
|
462
|
+
def exp_sign(str)
|
463
|
+
case str
|
464
|
+
when '-'
|
465
|
+
return -1
|
466
|
+
when '+'
|
467
|
+
return 1
|
468
|
+
else
|
469
|
+
raise "invalid sign: #{exp_sign}"
|
470
|
+
end
|
471
|
+
end
|
366
472
|
end
|
367
473
|
|
368
474
|
MyCLI.start(ARGV)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mesa_cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- William Wolf
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-01-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -91,9 +91,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
91
91
|
version: '0'
|
92
92
|
requirements: []
|
93
93
|
rubyforge_project:
|
94
|
-
rubygems_version: 2.
|
94
|
+
rubygems_version: 2.6.8
|
95
95
|
signing_key:
|
96
96
|
specification_version: 4
|
97
97
|
summary: Mesa CLI - a command line interface for simple MESA tasks.
|
98
98
|
test_files: []
|
99
|
-
has_rdoc: false
|