A.STAR Code Snippets

Sample C#


// ASTAR / CSharp
// csc /r:AStar.dll /out:sample.cs.exe sample.cs

using System;
using AStar.Cif;
using AStar.Common;

namespace Sample.CSharp {
    public class Program {
        public static void Main() {
            string fn = "../data/fa3203.cif";
            Console.WriteLine("Read the CIF file: {0}", fn);
            CifPack pack = new CifPack(fn);
            foreach(CifBlock block in pack) {
                Console.WriteLine("[Block: {0}]", block.Name);
                if(block.Contains("_chemical_formula_sum")) {
                    Console.WriteLine("  Formula: {0}", block["_chemical_formula_sum"].Value);
                    Console.WriteLine("  atom  U(iso/eq)  s.u.");
                    foreach(CifLoopRow row in block.GetLoop("_atom_site_U_iso_or_equiv").Rows) {
                        CifValue val = row["_atom_site_U_iso_or_equiv"];
                        Console.WriteLine("  {0,-4}  {1,-9:F6}  ({2:F6})", row["_atom_site_label"], val.ToNumber(), val.ToMeasurand().Su);
                    }
                }
            }

            CifBlock test = new CifBlock("TEST");
            pack.Add(test);
            test.CreateField("_astar_test_description", "CSharp");
            test.CreateField("_astar_test_number", 50);
            test.CreateField("_astar_test_measurand", new Measurand(2.3533, 0.0022));
            test.Add(new CifLoop("_astar_test_la", "_astar_test_lb"));
            test["_astar_test_la"].List = new CifValueList("AAA", "AAB", "ABB");
            test["_astar_test_lb"].List = new CifValueList("BBB", "BBA", "BAA");
            fn = "output/fa3203_test.cif";
            Console.WriteLine("Write the CIF file: {0}", fn);
            pack.Save(fn);
        }
    }
}

	  

Sample VB.Net


' ASTAR / VB.Net
' vbc /r:AStar.dll /out:sample.vb.exe sample.vb

Imports System
Imports AStar.Cif
Imports AStar.Common

Namespace Sample.VBNet
    Public Class Program
        Public Shared Sub Main()
            Dim fn As String = "../data/fa3203.cif"
            Console.WriteLine("Read the CIF file: {0}", fn)
            Dim pack As New CifPack(fn)
            For Each block As CifBlock In pack
                Console.WriteLine("[Block: {0}]", block.Name)
                If block.Contains("_chemical_formula_sum") Then
                    Console.WriteLine("  Formula: {0}", block("_chemical_formula_sum").Value)
                    Console.WriteLine("  atom  U(iso/eq)  s.u.")
                    For Each row As CifLoopRow In block.GetLoop("_atom_site_U_iso_or_equiv").Rows
                        Dim val As CifValue = row("_atom_site_U_iso_or_equiv")
                        Console.WriteLine("  {0,-4}  {1,-9:F6}  ({2:F6})", row("_atom_site_label"), val.ToNumber(), val.ToMeasurand().Su)
                    Next
                End If
            Next

            Dim test As CifBlock = New CifBlock("TEST")
            pack.Add(test)
            test.CreateField("_astar_test_description", "VB.net")
            test.CreateField("_astar_test_number", 50)
            test.CreateField("_astar_test_measurand", New Measurand(2.3533, 0.0022))
            test.Add(New CifLoop("_astar_test_la", "_astar_test_lb"))
            test("_astar_test_la").List = New CifValueList("AAA", "AAB", "ABB")
            test("_astar_test_lb").List = New CifValueList("BBB", "BBA", "BAA")
            fn = "output/fa3203_test.cif"
            Console.WriteLine("Write the CIF file: {0}", fn)
            pack.Save(fn)
        End Sub
    End Class
End Namespace

	  

Sample Python (IronPython)


# ASTAR / IronPython
# ipy sample.py

import clr
clr.AddReference('AStar.dll')
from AStar.Cif import *
from AStar.Common import Measurand

fn = '../data/fa3203.cif'
print 'Read the CIF file: %s' % fn
pack = CifPack(fn)
for block in pack:
    print '[Block: %s]' % block.Name
    if block.Contains('_chemical_formula_sum'):
        print '  Formula: %s' % block['_chemical_formula_sum'].Value
        print '  atom  U(iso/eq)  s.u.'
        for row in block.GetLoop('_atom_site_U_iso_or_equiv').Rows:
            val = row['_atom_site_U_iso_or_equiv']
            print '  %-4s  %-9f  (%f)' % (row['_atom_site_label'], val.ToNumber(), val.ToMeasurand().Su)

test = CifBlock('TEST')
pack.Add(test)
test.CreateField('_astar_test_description', 'PYthon')
test.CreateField('_astar_test_number', 50)
test.CreateField('_astar_test_measurand', Measurand(2.3533, 0.0022))
test.Add(CifLoop('_astar_test_la', '_astar_test_lb'))
test['_astar_test_la'].List = CifValueList('AAA', 'AAB', 'ABB')
test['_astar_test_lb'].List = CifValueList('BBB', 'BBA', 'BAA')
fn = 'output/fa3203_test.cif'
print 'Write the CIF file: %s' % fn
pack.Save(fn)

	  

Sample Ruby (IronRuby)


# ASTAR / IronRuby
# ir sample.rb

require 'AStar.dll'
include AStar::Cif
include AStar::Common

fn = '../data/fa3203.cif'
puts("Read the CIF file: #{fn}")
pack = CifPack.new(fn)
for block in pack do
    printf("[Block: %s]\n", block.Name)
    if block.Contains('_chemical_formula_sum') then
        printf("  Formula: %s\n", block['_chemical_formula_sum'].Value)
        print("  atom  U(iso/eq)  s.u.\n")
        for row in block.GetLoop('_atom_site_U_iso_or_equiv').Rows do
            val = row['_atom_site_U_iso_or_equiv']
            printf("  %-4s  %-9f  (%f)\n", row['_atom_site_label'], val.ToNumber(), val.ToMeasurand().Su)
        end
    end
end

test = CifBlock.new('TEST')
pack.Add(test)
test.CreateField('_astar_test_description', CifValue.new('RuBy'))
test.CreateField('_astar_test_number', CifValue.new(50))
test.CreateField('_astar_test_measurand', Measurand.new(2.3533, 0.0022))
pack['TEST'].Add(CifLoop.new('_astar_test_la', '_astar_test_lb'))
test['_astar_test_la'].List = CifValueList.new('AAA', 'AAB', 'ABB')
test['_astar_test_lb'].List = CifValueList.new('BBB', 'BBA', 'BAA')
fn = 'output/fa3203_test.cif'
puts("Write the CIF file: #{fn}")
pack.Save(fn)

	  

Sample F#


(* ASTAR / FSharp *)
(* fsc -r:AStar.dll -o sample.fs.exe sample.fs *)

(* for fsi / fsc: *)
(* with the switch: -r:AStar.dll *)
(* or for fsi interactive or in a .fsx script: *)
(* #r "AStar.dll" *)

open AStar.Cif
open AStar.Common

let fn_i = "../data/fa3203.cif"
printfn "Read the CIF file: %s" fn_i
let pack = CifPack(fn_i)
for block in pack do
    printfn "Formula: %s" block.Name
    if block.Contains("_chemical_formula_sum") then
        printfn "  Formula: %s" (pack.["I"].["_chemical_formula_sum"].Value.ToString())
        printfn "  atom  U(iso/eq)  s.u."
        for row in block.GetLoop("_atom_site_U_iso_or_equiv").Rows do
            let v = row.["_atom_site_U_iso_or_equiv"]
            printfn "  %-4s  %-9f  (%f)" (row.["_atom_site_label"].ToString()) (v.ToNumber()) (v.ToMeasurand().Su)

let test = CifBlock("TEST")
pack.Add(test)
test.CreateField("_astar_test_description", CifValue("FSharp"))
test.CreateField("_astar_test_number", CifValue(50L))
test.CreateField("_astar_test_measurand", CifValue(Measurand(2.3533, 0.0022)))
test.Add(CifLoop("_astar_test_la", "_astar_test_lb"))
test.["_astar_test_la"].List <- CifValueList("AAA", "AAB", "ABB")
test.["_astar_test_lb"].List <- CifValueList("BBB", "BBA", "BAA")
let fn_o = "output/fa3203_test.cif"
printfn "Write the CIF file: %s" fn_o
pack.Save(fn_o)

	  

Sample BOO


# ASTAR / BOO
# booc -r:AStar.dll -o:sample.boo.exe sample.boo
# - or -
# booi sample.boo

import System

# import AStar.Cif
# import AStar.Common
# for booi:
import AStar.Cif from 'AStar.dll'
import AStar.Common from 'AStar.dll'

fn = '../data/fa3203.cif'
Console.WriteLine('Read the CIF file: {0}', fn)
pack = CifPack(fn)
for block as CifBlock in pack:
    Console.WriteLine('[Block: {0}]', block.Name)
    if block.Contains('_chemical_formula_sum'):
        Console.WriteLine('  Formula: {0}', block['_chemical_formula_sum'].Value)
        Console.WriteLine('  atom  U(iso/eq)  s.u.')
        for row as CifLoopRow in block.GetLoop('_atom_site_U_iso_or_equiv').Rows:
            val as CifValue = row['_atom_site_U_iso_or_equiv']
            Console.WriteLine('  {0,-4}  {1,-9:F6}  ({2:F6})', row['_atom_site_label'], val.ToNumber(), val.ToMeasurand().Su)

test = CifBlock('TEST')
pack.Add(test)
test.CreateField('_astar_test_description', CifValue('BOO'))
test.CreateField('_astar_test_number', 50)
test.CreateField('_astar_test_measurand', Measurand(2.3533, 0.0022))
test.Add(CifLoop('_astar_test_la', '_astar_test_lb'))
test['_astar_test_la'].List = CifValueList('AAA', 'AAB', 'ABB')
test['_astar_test_lb'].List = CifValueList('BBB', 'BBA', 'BAA')
fn = 'output/fa3203_test.cif'
Console.WriteLine('Write the CIF file: {0}', fn)
pack.Save(fn)

	  

Sample JScript.Net


// ASTAR / JS.Net
// jsc /r:AStar.dll /out:sample.js.exe sample.js

import System;
import AStar.Cif;
import AStar.Common;

var fn : String = "../data/fa3203.cif";
Console.WriteLine("Read the CIF file: {0}", fn);
var pack : CifPack = new CifPack(fn);
for(var block : CifBlock in pack) {
    Console.WriteLine("[Block: {0}]", block.Name);
    if(block.Contains("_chemical_formula_sum")) {
        Console.WriteLine("  Formula: {0}", block["_chemical_formula_sum"].Value);
        Console.WriteLine("  atom  U(iso/eq)  s.u.");
        // JS.Net does not support IEnumerable<T> / .Rows.
        for(var i : int = 0, loop = block.GetLoop("_atom_site_U_iso_or_equiv"); i < loop.RowCount; i++) {
            var val : CifValue = loop[i, "_atom_site_U_iso_or_equiv"];
            Console.WriteLine("  {0,-4}  {1,-9:F6}  ({2:F6})", loop[i, "_atom_site_label"], val.ToNumber(), val.ToMeasurand().Su);
        }
    }
}

var test : CifBlock = new CifBlock("TEST");
pack.Add(test);
test.CreateField("_astar_test_description", new CifValue("JS.net"));
test.CreateField("_astar_test_number", new CifValue(50));
test.CreateField("_astar_test_measurand", new Measurand(2.3533, 0.0022));
pack["TEST"].Add(new CifLoop("_astar_test_la", "_astar_test_lb"));
test["_astar_test_la"].List = new CifValueList("AAA", "AAB", "ABB");
test["_astar_test_lb"].List = new CifValueList("BBB", "BBA", "BAA");
fn = "output/fa3203_test.cif";
Console.WriteLine("Write the CIF file: {0}", fn);
pack.Save(fn);