Categories
Mathematica

เขียน Mathematica package แบบง่ายๆ

มาลองเขียน Mathematica package แบบง่ายๆกันครับ

Mathematica package คืออะไร Mathematica package ก็คือชุดคำสั่งหรือโปรแกรมที่ถูกเขียนขึ้นเพื่อใช้ในการคำนวณเฉพาะด้าน ซึ่งจะมีสกุล .m

โดยถ้าเปิดไฟล์ .m ด้วย text editor อย่างเช่น notepad หรือ Mathematica เองเราจะเห็น code ข้างในมีคำสั่งหลักๆดังนี้ เช่น

BeginPackage[ “ชื่อpackage`”]
คำสั่ง1::usage = “คำสั่ง1[ x] คำอธิบายการใช้คำสั่ง1”
Begin[ “Private`”]
คำสั่ง1[ x_] :=  ….
End[]
EndPackage[]

การเรียกใช้งาน package ใน Mathematica เพียงใช้คำสั่ง Get หรือเครื่องหมาย << เช่น ถ้าpackage เราชื่อ MyPackage ก็เพียงพิมพ์
Get[MyPackage`]
หรือ
<<MyPackage`

ตัวอย่าง Package ชื่อ MyPackage ซึ่งมีคำสั่งอยู่ สองคำสั่งคือ fun1[x ] สำหรับหาค่า x^3 กับ fun2[x,y] สำหรับหาค่า sin(x)*cos(y)

BeginPackage[ “MyPackage`”]

fun1::usage = “fun1[ x] calculates x^3 ”
fun2::usage = “fun2[ x,y] calculates sin(x)*cos(y)”

Begin[ “Private`”]

fun1[ x_] := x^3

fun2[x_,y_]:=Sin[x ] * Cos[y]

End[]
EndPackage[]

ในการทดลองเขียน package ก็เพียงเปิด Mathematica แล้วพิมพ์ Code ของ package
ลงไปใน notebook แล้ว save เป็นแบบ Mathematica package ดูขั้นตอนตามรูปครับ

ในการเรียกใช้งาน package ก่อนอื่นเราต้องทำการบอก Mathematica ก่อนว่า package (MyPackage.m) ของเราอยู่ที่ไหน
ในตัวอย่างนี้สมมุติว่า MyPackage.m อยู่ที่ C:/TEMP ซึ่งเราสามารถบอก Mathematica
โดยใช้คำสั่ง AppendTo เพื่อเพิ่ม “C:/TEMP” เข้าไปในตัวแปร $Path
ซึ่งเป็นตัวแปรที่เก็บ Path หลักๆที่ Mathematica จะใช้ในการค้นหา Package ต่างๆ
หรือจะใช้ Needs[“MyPackage`”,”C:/TEMP/MyPacjage.m”] ในการเรียกใช้งานก็ได้ครับ

Categories
News Uncategorized

จาก f1000.com

http://f1000.com/8615961

by Christopher Plowe

Intrahost modeling of artemisinin resistance in Plasmodium falciparum.

S Saralamba, W Pan-Ngum,…, AM Dondorp, LJ White Proc Natl Acad Sci U S A 2011 Jan 4 108 1:397-402 PMID 21173254 DOI 10.1073/pnas.1006113108

Evaluation details:

Sections:

Genomics,Immunity to Infections,Cellular Microbiology & Pathogenesis,Parasitology,Pharmacogenomics,Pharmacokinetics & Drug Delivery,Antimicrobial Agents

Comments:

Recent reports from clinical trials conducted along the Thai-Cambodian border have provided evidence of prolonged parasite clearance times following treatment with artemisinin derivatives {1, 2}. In this study, the authors have used detailed parasite clearance and pharmacokinetic data, from clinical trials of artesunate conducted in western Cambodia and northwestern Thailand {2}, to develop and validate a mathematical model describing the stage-specific effects of artemisinins. The model predicts that the delayed parasite clearance observed in western Cambodia is most likely due to reduced susceptibility of ring-stage parasites to the drug and predicts that more frequent dosing would accelerate the clearance of artemisinin-resistant parasites. This study contributes to a better understanding of the artemisinin resistance phenotype, which will aid in conducting genome-wide association studies to identify regions of the parasite genome that may be associated with artemisinin resistance, as well as prioritization of candidate genes and polymorphisms for validation, and may also be useful for developing in vitro drug susceptibility assays that correlate better with slow parasite clearance. Widespread resistance to former first-line antimalarial drugs has led most malaria-endemic countries to change to artemisinin-based combination therapies (ACTs) as the first-line antimalarial treatment. However, clinical evidence of emerging resistance to artemisinins, in the form of significantly delayed parasite clearance times following treatment with artemisinin derivatives, has recently been reported in western Cambodia {1,2}. In this study, the authors hypothesize that the delayed parasite clearance observed in western Cambodia is due to a reduced susceptibility of the parasite ring stages to artemisinins. To test the hypothesis, they developed a mathematical model describing the parasite population dynamics by life stage and time and incorporating individual patient pharmacokinetic and pharmacodynamic data derived from participants in clinical trials of artesunate in western Cambodia (where parasite clearance times are dramatically prolonged) and northwestern Thailand (where parasite clearance times are much shorter), and used this model to infer stage-specific drug effects on parasite killing. The model benefited from using individual patient data to quantify and account for known sources of variation affecting parasite clearance, and did not assume any parasite stage-specific dose effect. The best model fits were observed for the Cambodian data when ring-stage drug susceptibility was reduced, supporting the hypothesis that the delayed parasite clearance observed in this area is due to reduced killing of the parasite ring stages. The authors also argue that reduced susceptibility of the rings stages is more consistent with the data and model output than one alternative mechanism, dormancy. As investigators search for a molecular marker of artemisinin resistance, higher priority may be warranted for candidate genes differentially expressed during the ring stages.

References:

{1} Noedl et al. N Engl J Med 2008, 359:2619-20 [PMID:19064625].

{2} Dondorp et al. N Engl J Med 2009, 361:455-67 [PMID:19641202].

Categories
Mathematica

เกี่ยวกับ AppendTo Sow Reap

ดูเหมือนว่าการใช้ AppendTo ในการเก็บค่าของตัวแปรที่สนใจจะทำให้การคำนวณช้าลงเมื่อ list ของตัวแปรมีขนาดใหญ่ขึ้นเรื่อย ๆ

แนะนำว่าควรจะใช้ Sow และ Reap ช่วยจะดีกว่า ซึ่งก็ช่วยได้ เร็วขึ้นมาจริง (รู้สึกได้)

ถ้าต้องการจะใช้ Sow แบบ Parallel ก็ทำแบบนี้ได้ครับ

SetSharedFunction[ParallelSow]
ParallelSow[expr_]:=Sow[expr]

Categories
Mathematica

อ่าน input file โดยใช้ Mathematica

จากตัวอย่างเกี่ยวกับการหาคำแรกหรือชื่อตัวแปรจาก input file http://www.sakngoi.com/?p=69 เราสามารถเขียนโดยใช้ Mathematica ได้เช่น

ExtractVal[txtin_List, keyword_String] := Module[{pos, val},
(* extract the value of the keyword from the input file *)
(* txtin = Import[inputfile,”Table”]; *)
pos = Select[Position[ToLowerCase /@ txtin, keyword], #[[2]] == 1 &];
If[Length@pos == 1, val = txtin[[pos[[1, 1]], 2]];];
val
];

โดยที่ keyword ใน function ExtractVal นั้นก็เป็นชื่อตัวแปรที่เราต้องการนำไปใช้

ตัวอย่าง function ReadPar นี้จะให้ค่าที่อ่านได้จาก input file โดยในที่นี้สมมุติให้ ชื่อตัวแปรที่ต้องการค่าสำหรับ function DistributeN มีดังนี้คือ “initn”, “lifecycle”, “mu”, และ “sigma”

ReadPar[inputfile_String] := Module[{txtin, outls, distributenparms},
txtin = Import[inputfile, “Table”];
outls = {};

(* for DistributeN *)
distributenparms = {“initn”, “lifecycle”, “mu”, “sigma”};
outls = ToExpression/@(ExtractVal[txtin, #] & /@ distributenparms);

If[Length@outls!=Length@distributenparms,
Print[“Please check your input file. Some values are missing.”];
];

outls
];

ตัวอย่างของ input file (input.in)

initN    2.30*10^11
Mu       10
LifeCycle    48
Sigma    5

การใช้ก็เพียงพิมพ์ ReadPar[“input.in”] โดยคำตอบที่ได้จะเป็น

{2.3*10^11, 48, 10, 5}

Categories
IT

Debian Lenny

เพราะความอยากรู้อยากเห็นนี่แหละเป็นตัวขับเคลื่อนให้มีการเรียนรู้สิ่งใหม่ๆ  นี่ก็เป็นอีกครั้งหนึ่งที่ยอม ลง Linux ใหม่โดยเปลี่ยนจาก Fedora ที่ใช้มาถึงเกือบสามปีแล้วไปเป็น Debian ตัว Debian รุ่นที่ลงคือ Lenny amd64 ก็ต้องบอกเลยว่าเดี๋ยวนี้ Linux ติดตั้งง่ายมาก

จริงๆแล้วรุ่นล่าสุด คือ Squeeze ซึ่งเปิดตัวเป็นทางการเมื่อ 6 ชม. (6 ก.พ. 2554) ที่ผ่านมานี้เอง ^_^’

Categories
IT

การหาคำแรกในบรรทัด

ในหลายโปรแกรมจะมีการอ่านค่าพารามิเตอร์จาก text file โดยที่จะมีชื่อของพารามิเตอร์หรือตัวแปรอยู่ใน column แรกและค่าที่เราจะส่งผ่านเข้าในโปรแกรมจะอยู่ใน column ถัดไปโดยมี space ระหว่างตัวแปรและค่านี้ เช่น

InitialParasites         2.3*10^10

MeanAge           10

โปรแกรมเหล่านี้จะอ่านค่า input จาก text file ทีละบรรทัดโดยจะมีการหาว่าตัวแปรที่โปรแกรมต้องการแต่ละตัวอยู่ในบรรทัดใด จากนั้นก็จะส่งผ่านค่าไปให้ตัวพารามิเตอร์ตัวนั้นในโปรแกรม

นี่เป็นตัวอย่างภาษา C ที่ใช้ในการหาคำแรก (พารามิเตอร์) จากบรรทัดที่อ่านเข้ามา (source) ตัวอย่างนี้มีการใช้ isspace ซึ่งเป็น function ที่ใช้ในการหา white space หรือที่ว่างระหว่างคำ เช่น ‘ ‘ , ‘\t’, ‘\n’, ‘\v’, ‘\f’, ‘\r’  (ต้องมีการโหลด ctype.h หรือ cctype ก่อนครับ)

//find the first word from a line
void find_first_word(char *source, char *word)
{
int i=0;    //  Position within source
int j=0;    //  Position within word

/*  Skip leading white space                    */
while((source[i] != ‘\0’) && isspace(source[i]))
i++;

/*  Copy the word                        */
while((source[i] != ‘\0′) && !isspace(source[i]))
{
word[j]=source[i];
i++;
j++;
}

word[j]=’\0’;

return;
}

Categories
IT Molecular Dynamics

การทำงานของโปรแกรมสำหรับ Molecular dynamics simulation

ใครที่สนใจว่าโปรแกรมที่เราใช้ศึกษาด้าน molecular dynamics simulation เช่น AMBER, GROMACS, CHARMM หรือ NAMD ทำงานอย่างไร ผมขอแนะนำให้ลองศึกษาจาก source codes ของ  Mindy ครับ http://www.ks.uiuc.edu/Development/MDTools/mindy มันเป็นเหมือนเวอร์ชั่นย่อๆ ของ NAMD ครับ ซึ่งมันทำงานหลักๆอย่างที่ NAMD ทำเลยครับ จะไม่มีก็ในส่วนของการคำนวณแบบขนาน

Categories
Uncategorized

Have you ever thought about it?

“Have you ever thought about it? We want to be famous as a writer, as a poet, as a painter, as a politician, as a singer, or what you will. Why? Because we really don’t love what we are doing. If you loved to sing, or to paint, or to write poems—if you really loved it—you would not be concerned with whether you are famous or not. To want to be famous is tawdry, trivial, stupid, it has no meaning; but, because we don’t love what we are doing, we want to enrich ourselves with fame. Our present education is rotten because it teaches us to love success and not what we are doing. The result has become more important than the action.

You know, it is good to hide your brilliance under a bushel, to be anonymous, to love what you are doing and not to show off. It is good to be kind without a name. That does not make you famous, it does not cause your photograph to appear in the newspapers. Politicians do not come to your door. You are just a creative human being living anonymously, and in that there is richness and great beauty.”

J. Krishnamurti

Categories
IT

การติดตั้ง package ของ R เพิ่ม

การติดตั้ง package ของ R เพิ่ม สำหรับบน Linux ครับ

1. ติดตั้งจาก source

source ที่พูดถึงก็เป็นพวกไฟล์ package ที่มีสกุล tar.gz ที่สามารถ download ได้จากเวบ http://www.r-project.org/ หรือ http://cran.r-project.org/mirrors.html  หลังจากที่ download มาแล้วเก็บไว้ที่ เช่น /home/MyAccount/Rlib ก็สามารถพิมพ์คำสั่งนี้ได้เลย

$ R CMD INSTALL ชื่อไฟล์.tar.gz -l /home/MyAccount/Rlib/

2. ติดตั้งจากเวบ CRAN โดยตรง

พิมพ์คำสั่งนี้ใน R console สำหรับติดตั้ง package ที่ต้องการไว้ที่ /home/MyAccount/Rlib

> install.packages(“ชื่อ package”, lib=”/home/MyAccount/Rlib/”)

หลังจากติดตั้งแล้วจะเรียกใช้ก็ให้พิมพ์ใน R console คำสั่ง นี้ครับ

library(“ชื่อ package”, lib.loc=”/home/MyAccount/Rlib/”)

ถ้าหากมีปัญหาว่าต้องโหลดผ่าน proxy ก็ให้ลอง export http_proxy=”http://proxy:port” ดูครับ

3. ติดตั้งจาก github

กรณีที่อยากติดตั้ง package ที่อยู่บน Github เราสามารถทำได้โดยใช้คำสั่ง install_github ของ devtools ครับ เช่น

library(devtools)

install_github(“package”)

หรือถ้าต้องการระบุ path ที่จะเก็บpackageนี้ด้วยก็ทำได้โดยใช้ with_libpaths เช่น

with_libpaths(new=”/home/MyAccount/Rlib”, install_github(“package”))

Categories
IT

Thai Latex บน Fedora 14 LXDE Desktop

การติดตั้ง Thai Latex บน Fedora 14 LXDE Desktop

วิธีนี้ต้องมี gcc compiler ก่อนนะครับ ซึ่งติดตั้งได้เลยจากตัว Add/Remove Software

ก่อนอื่นต้องไป download ไฟล์พวกนี้ก่อนนะครับ

  1. ftp://linux.thai.net/pub/ThaiLinux/software/libthai/libdatrie-0.2.4.tar.gz
  2. ftp://linux.thai.net/pub/thailinux/software/thailatex/thailatex-0.4.4.tar.gz
  3. ftp://linux.thai.net/pub/thailinux/software/swath/swath-0.4.0.tar.gz

หลังจากนั้นก็แตกไฟล์พวกนี้ออกโดยที่อยู่folder ของใครของมัน

จากนั้นก็เริ่มติดตั้งโดยเริ่มที่ตัว libdatrie ก่อนครับ

ที่ terminal ก็เปลี่ยน folder ไปที่ folder ของ libdatrie จากนั้นก็พิมพ์

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

ตามด้วย

./configure

และ

make install

หลังจากนั้นก็ติดตั้ง swath โดยทำเช่นเดียวกันครับคือพิมพ์ ./configure แล้วตามด้วย make install

ต่อด้วย thailatex ครับทำเช่นเดียวกันกับ swath

เป็นอันว่าเสร็จแล้วครับ ผมใช้งานได้ไม่มีปัญหาครับ

ผมใช้ TexMakerX ในการแก้ไขไฟล์ Latex ครับ อาจต้องมีการปรับแต่งให้มันอ่านและบันทึกภาษาไทยโดยไปที่ Edit -> Setup Encoding… แล้วเลือก TIS-620 ครับ