Posted by: komputasibatan | January 22, 2010

Membaca Format Data Hyperlab dalam k0-BATAN

Tulisan ini merupakan tulisan pertama dari serangkain laporan mengenai pengembangan perangkat lunak k0-BATAN.
Di bagian pertama ini, dijelaskan mengenai sebagaian kebutuhan k0-BATAN, yaitu pembacaan file hasil pengukuran khususnya untuk format Hyperlab. Untuk format lain seperti Batan NAA Utility yang dikembangkan oleh Drs. Putranto IlhamYazid, juga format hasil simulasi MCNP untuk perhitungan efisiensi detektor akan dijelaskan pada tulisan berikutnya. Tulisan ini juga akan menyinggung sedikit mengenai k0-IAEA yang digunakan sebagai acuan dalam memahami alur berpikir perhitungan k0.
Berikut adalah daftar kebutuhan k0-BATAN secara umum, terutama yang terkait dengan pembacaan file hasil pengukuran.

  1. Dari k0-IAEA, terdapat dua jenis data secara umum, masing-masing adalah data permanent dan data series. Data permanent adalah data yang terkait dengan konstanta k0 dan nuklida, konstanta parameter reaktor dan detektor, jarang mengalami perubahan, dan perubahanharus dilakukan oleh user tertentu (Administrator). Sedangkan data series adalah data yang terkait dengan sample yang dianalisis, seperti informasi mengenai fasilitas irradiasi dan detektor yang digunakan, waktu yang digunakan untuk irradiasi, pendinginan dan pengukuran. Dari sini, teridentifikan kebutuhan untuk membedakan fitur perangkat lunak k0-BATAN untuk dua macam user, Administrator dan Analyst, terkait aktifitas memodifikasi dua data tersebut.
  2. Dari k0-IAEA juga, diketahui bahwa kegiatan analisis akan diberikan sebuah directory tersendiri, yang didefinisikan oleh user, di mana akan diletakkan. Di dalam directory tersebut, disipan data series dalam bentuk biner. Karenanya, k0-BATAN juga akan memberikan directory khusus untuk sebuah project analisis yang baru dilakukan. Di sinilah diperlukannya SQLite. Dengan SQLite, tidak perlu dibuat struktur file sendiri, penyimpanan dan pengembailan informasi juga bisa dilakukan dengan bahasa SQL yang standar. Selain itu, SQLite berlisensi publik yang merupakan salah satu kebutuhan awal dari dikembangkannya k0-BATAN, multiplatform dan open source. Kedua latar belakang tersebut yang kemudian menempatkan Java sebagai pilihan platform yang digunakan untuk k0-BATAN.
  3. Di tahap pertama, format yang akan diakomodasi adalah hasil perangkat lunak Hyperlab. Dari berbagai informasi yang terdapat dalam file tersebut, yang akan diambil untuk diproses adalah baris-baris berikut ini, yang mewakili tiga macam format.
    • m 3 215- 253 241.81 75.09 2.77E+002 43.92 2.90E+003 PB-212
    • PB-214
    • F 8 381- 403 387.61 121.65 2.85E+002 38.25 2.80E+003 EU-152

    Dari tiga baris informasi yang mewakili tersebut, berikut ini adalah pola regex-nya.

    • [a-zA-Z][\\s]+[0-9]+[\\s]+[0-9]+[-][\\s]+[0-9]+[\\s]+[0-9]+[.][0-9]+[\\s]+[0-9]+[.][0-9]+[\\s]+[0-9]+[.][0-9]+[E][+][0-9]+[\\s]+[0-9]+[.][0-9]+[\\s]+[0-9]+[.][0-9]+[E][+][0-9]+[\\s]+[A-Z]+[-][0-9]+.*
    • [\\s]+[A-Z]+[-][0-9]+.*
    • [a-zA-Z][\\s]+[0-9]+[\\s]+[0-9]+[-][\\s]+[0-9]+[\\s]+[0-9]+[.][0-9]+[\\s]+[0-9]+[.][0-9]+[\\s]+[0-9]+[.][0-9]+[E][+][0-9]+[\\s]+[0-9]+[.][0-9]+[\\s]+[0-9]+[.][0-9]+[E][+][0-9]+[\\s]+[A-Z]+[-][0-9]+.*

    Namun, perlu diperhatikan bahwa ketika format regex tersebut akan dimasukkan sebagai variabel, karakter “[\\s]” harus diganti menjadi “[\s]“. Penjelasannya dapat dilihat di sini.
    Nah, dari tiga regex tersebut, informasinya disimpan dalam SQLite dengan pemisah karakter “;”. Ilustrasinya adalah seperti Gambar berikut ini. File database tersebut diberi nama FileTypePattern.lib.
    Skema database FileTypePattern
    Format Hyperlab ditempatkan di tipe nomor 3, setelah format Batan NAA utility dan MCNP. Field ncr pada tabel tersebut merupakan flag, apakah format data yang akan dibaca merupakan format data yang menggunakan Net Count Rate atau bukan. Jika ya, akan diberi nilai “1″.

  4. Seperti telah dijelaskan sebelumnya, format data yang akan dibaca ada yang menggunakan nilai Net Count Rate, ada yang tidak. Meski tidak berpengaruh terhadap struktur tabel secara umum, nilai yang dikandung dalam field untuk format yang berbeda akan menimbulkan masalah dalam perhitungan karena peruntukannya berbeda. Karena itulah nilai flag dalam file database FileTypePattern.lib memiliki field ncr.
    Untuk format Hyperlab, skema series data pengukuran adalah sebagai berikut. Field pertama hingga keempat adalah data yang diambil dari format Hyperlab, sedangkan sisanya adalah konstanta k0 dari IUPAC untuk nuklida yang teridentifikasi berada dalam sample. Skema ini akan diimplementasi ke dalam class DBHandler dalam package id.go.batan.k0.utils. Untuk format data Batan-NAA Utility, yang berbeda hanya pada field kedua dan ketiga. Aktifitas menangani format Batan NAA Utility akan dijelaskan pada tulisan berikutnya.

    • centroid real
    • netPeakArea real
    • netAreaError real
    • nuclide text
    • energy real
    • k0gamma real
    • hlife real
    • rhlife text
    • q0 real

    Dalam skema tersebut terlihat bahwa tipe data yang digunakan adalah real dan text. Seperti itulah tipe data yang diakomodasi SQLite. Tipe data real menunjukkan data desimal, text untuk karakter teks, sedangkan numeric untuk data integer.
    Ada satu masalah lagi yang perlu diperhatikan untuk format Hyperlab. Nuklida yang terdeteksi terkadang berada dalam peak area yang sama (dianggap memiliki karakteristik energy gamma yang sama). Seperti ditunjukkan pada pola regex kedua, pola tersebut adalah pola nuklida terdeteksi yang energi gamma-nya dideteksi sama dengan nuklida terdeteksi sebelumnya. Nah, untuk memetakan data-data hasil Hyperlab tersebut ke dalam skema data series, ada dua opsi (setidaknya) yang dapat digunakan.
    Pertama, kita dapat menggunakan energi gamma (centroid) sebagai key, sehingga pada kolom nuklida bisa terdapat lebih dari satu nuklida. Sayangnya, pendekatan ini akan menyulitkan ketika akan melakukan pencarian nilai konstanta untuk nuklida yang berbeda, yang konstanta tersebut diperlukan dalam perhitungan k0. Opsi kedua, dengan sedikit berkompromi terhadap redundansi data energi dan peak area, setiap nuklida diberikan satu baris sendiri. Cara ini akan memudahkan kita melakukan pencarian nilai konstanta untuk setiap nuklida, meski untuk memformat data dengan format di atas sesuai dengan skema data series memerlukan trick khusus. Opsi kedua inilah yang dipilih dengan pertimbangan kemudahan proses data dengan mengabaikan aturan normalisasi database karena pertimbangan data yang akan ditampung tidak banyak.

  5. Tahap berikutnya adalah memformat data dari Hyperlab untuk dipetakan ke skema data series. Selain agar setiap nuklida terdeteksi bisa tersusun dalam satu baris tersendiri, kegiatan memformat ini juga ditujukan agar setiap elemen terpisah dengan karakter yang sama, yaitu “;”, sehingga ketika akan dimasukkan ke series data, kita bisa menggunakan perintah split pada class String. Cara lainnya adalahdengan menggunakan class StringTokenizer untuk memisah karakter serupa whitespace (dengan panjang berapapun). Tetapi dengan split, sebuah string dapat dipisah menjadi array yang index array ini menjadi penanda elemen mana yang akan disimpan. Kenapa harus begitu? Ya, karena elemen yang akan diambil hanya yang sesuai dengan data series. Dan jika format regex di atas di split ke dalam array, maka elemen dengan index array ke 5,6,7 dan 9. Triknya digambarkan dalam diagram aktifitas berikut ini.
    Membaca format database Hyperlab
    Penjelasan ringkasnya adalah sebagai berikut.

    • Register identifier adalah variabel yang menunjukkan apakah pola regex adalah yang pertama dibaca atau bukan. Jika pola regex pertama kali ditemukan (dan sebelum ditemukan) diset sebagai true, sedangkan setelah pola regex pertama, variabel tersebut diset false. Selain itu adalah variable yang menunjukkan bahwa pola regex lengkap (bukan hanya informasi nuklida) yang terbaca. Jika pola regex yang sedang terbaca adalah pola regex yang pertama dan ketiga (pola regex lengkap), maka variabel ini diset sebagai true, sedangkan jika pola regex yang sedang dibaca adalah pola regex kedua (yang hanya berisi informasi nuklida), maka variabel diset false.
    • Aktifitas Update Identifier Variable merupakan aktifitas memodifikasi nilai variabel yang dijelaskan di atas, tergantung kondisi pola regex apa yang sedang terbaca.
    • Update Previously Nuclide to the Current adalah aktifitas mengganti nuklida yang sebelumnya ditemukan, dengan nuklida baru tetapi yang masuk tingkat energi gamma yang sama dengan sebelumnya. Singkatnya, pola regex yang terbaca adalah pola regex kedua.
    • Save Entry Data merupakan aktifitas menambahkan informasi ke dalam database series. Aktifitas ini meliputi aktifitas memformat data dengan mengganti delimiter whitespace dengan karakter “;”.
    • Last Entry Found adalah aktifitas ditemukannya pola regex terakhir dalam file.

Sampai di sini yang dapat kami sampaikan. Pada tulisan berikutnya, akan kami lanjutkan dengan laporan mengenai pembacaan format data Batan NAA Utility.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s

Categories

Follow

Get every new post delivered to your Inbox.