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.
- 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.
- 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.
- 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-212PB-214F 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 namaFileTypePattern.lib.

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″. - 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.libmemiliki 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 classDBHandlerdalam packageid.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
realdantext. Seperti itulah tipe data yang diakomodasi SQLite. Tipe datarealmenunjukkan data desimal,textuntuk karakter teks, sedangkannumericuntuk 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. - 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
splitpada classString. Cara lainnya adalahdengan menggunakan classStringTokenizeruntuk 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.

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 disetfalse. 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 sebagaitrue, sedangkan jika pola regex yang sedang dibaca adalah pola regex kedua (yang hanya berisi informasi nuklida), maka variabel disetfalse. - 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.
- 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
Sampai di sini yang dapat kami sampaikan. Pada tulisan berikutnya, akan kami lanjutkan dengan laporan mengenai pembacaan format data Batan NAA Utility.
