# Fileset

[mst_dobj.pdf](https://mdr.nims.go.jp/filesets/14753aec-fcfb-4910-814f-0857ef034a04/download)

## Creator

[TODOROKI, Shin-ichi](https://orcid.org/0000-0003-3986-1900)

## Rights



## Other metadata

[Object-oriented virtual sample library: a container of multi-dimensional data for acquisition, visualization and sharing](https://mdr.nims.go.jp/datasets/38f2a1df-f287-4eaf-840a-3489d09cbce4)

## Fulltext

Object-oriented virtual sample library: a container ofmulti-dimensional data for acquisition, visualization andsharingShin-ichi Todoroki†Advanced Materials Laboratory, National Institute for Materials Science,Namiki 1-1, Tsukuba, Ibaraki 305-0044, JAPANAbstract. Combinatorial methods bring about enormous data not only in size but alsoin dimension. To handle multi-dimensional data easily, a concept of virtual container forcombinatorially acquired data is demonstrated which is called “virtual sample library” (VSL).VSL stores the data hierarchically in the order of (1) coordinates in the sample library, (2)names of the measurements performed, and (3) data obtained from each measurement. Thus,the stored data are accessed intuitively just by tracing this tree-like structure and are providedfor visualization and sharing with others. This framework is constructed by the aid of anobject-oriented scripting language which is good at abstracting complicated data structure. Inthis paper, after summarizing the problems of handling data acquired from combinatoriallyintegrated samples and availabilities of software tools to solve them, the concept of VSLis proposed and its structure and functions are demonstrated on the basis of one specificexperimental data. Its extensibility as a platform for numerical simulation is also discussed.PACS numbers: 07.05.Kf, 07.05.RmReceived 12 April 2004, in final form 26 July 2004Published 16 December 2004Meas. Sci. Technol., 16, 1, pp. 285-291 (2005). [c© 2005 IOP Publishing Ltd]http://dx.doi.org/10.1088/0957-0233/16/1/037http://www.geocities.com/Tokyo/1406/node2.html#Todoroki05MST2851. IntroductionWe can enjoy the benefit of combinatorial technology only after we can afford to analyzethe large amount of data obtained. Although large scale data processing is an everydaytechnique in other fields such as genomics and geophysical fluid dynamics, there stillremain some problems unique to our fields. It appears when we perform several kinds ofmeasurements per one combinatorially integrated sample and examine the correlation amongthese measurements.In general, the data of each measurement are stored independently in various formats,thus it is very laborious work to pick up the correlated data measured at a specific position in† Correspondence author (TODOROKI.Shin-ichi at nims.go.jp)http://dx.doi.org/10.1088/0957-0233/16/1/037�http://www.geocities.com/Tokyo/1406/node2.html#Todoroki05MST285�Object-oriented virtual sample library 2τaSample libraryAnnealing Temp.AppearanceFluores. SpectrumFluores. Lifetime• Acquisition• ProvisionVisualizationToolsZcalcXgraph ???T  f...??????• SharingT1( x ), T2( x )a( x )τ( x )480°C, 550°Ccrystallized5.2msecPosition ( x )λCondition & Measurementsf( x, λ )Figure 1. Illustration showing an example of the situation when multi-dimensional datamanagement is needed. Four kinds of measurements over a combinatorially integratedsample[1] bring about an enormous number of data in various formats, which forms 7-dimensional data and are hard to be analyzed and be shared with colleagues.the sample library (see Fig. 1). Moreover, a number of files in various formats are difficult tobe shared with colleagues. In order to solve these problems, all the data should be stored atone place in a common format, i.e. they should be treated as a set of multi-dimensional data.Thus, we need a special software to structuralize and standardize them.It would be easiest if we can find such software as ready-made or custom-madeproduct, but we often feel not to be willing to pay for them because they do not satisfyour requirements such as compatibility with existing data and/or environments, and costperformance. Therefore, sometimes it is simpler to make software by ourselves, by the aid ofmodern user-friendly programming languages.In this context, the author has proposed a concept of ’virtual sample library’ (VSL)[2, 3],a container of multi-dimensional data, used for acquisition, visualization and sharing. Themost important feature of VSL is that it is written by an object-oriented scripting language,which enables us to treat our complicated data in a simple way. In the former articles[2, 3],however, the author could not give sufficient discussion about why this language was chosenand how the functions of VSL are realized by the language, due to the limited space.Thus, in this paper, VSLs are fully described including the problems to be solved(Section 2), the reason why object-oriented scripting language is used (Section 3) and theirfunctions (Section 4). Lastly, the extensibility of VSLs is discussed in comparison to existingvirtual libraries (Section 5). The aim of this paper is to demonstrate the merits of the presentdata managing method without any preliminary knowledge of object-oriented programming.For the sake of helping the understanding of its mechanism, its explanation is made on thebasis of a specific experimental data[1]. The readers, who want to know the concept of VSLObject-oriented virtual sample library 3briefly and quickly, are recommended to read the former and shorter articles[2, 3] first.2. The root of our problemThe problems we are facing with are summarized in the following three situations.2.1. AcquisitionIn a combinatorially integrated sample, each pixel is identified as the condition it wasfabricated, such as composition, temperature, etc. In addition to these, we perform severalmeasurements on it. Since these operations are done separately for the most part, acquireddata are recorded independently in various formats, as illustrated in the upper left part ofFig. 1. This situation becomes more complex when some measurements are performed pixelby pixel sequentially and the results are saved separately. Thus, we have to organize manyfiles more than the number of pixels in the sample library.2.2. ProvisionIt is quite easy to draw a graph from the data stored in a single file. All you have to do isto specify which data in the file are plotted toward the software you are using. In contrast,when the data for plotting are distributed over a number of files, we have to provide them afterre-compiling the files. Such an editing job requires our patience to remember every format ofthe files needed, as illustrated in the upper right part of Fig. 1.2.3. SharingDispersed data also causes another difficulty in sharing them with collaborators. Peoplewho have not be involved in preparation and/or measurements of the sample find it hard torecognize which files are to be accessed for their needs.3. Selection of software toolsThe solution of these problems is so simple. All the data are to be structuralized andstandardized so as to be treated as a single object, as illustrated in Fig. 2. It is, however,easier said than done and there is more than one way to do it. The first thing to do is to selectsoftware tools to realize it. In this section, several alternatives are surveyed briefly with theirpros and cons, and finally the author’s choice is presented. Such a discussion is useful forthose who wish to find better way to meet with their own requirements.3.1. Creating a database or other solutionWhat we have to note here is that the problems listed above are not resolved simply by creatinga database. As far as the data are registered individually into the database, we have to re-Object-oriented virtual sample library 4τaSample libraryAnnealing Temp.AppearanceFluores. SpectrumFluores. Lifetime• Acquisition• ProvisionVisualizationToolPGPlotT  f...• SharingMulti-dimensional data• Structuralization& StandardizationCondition & MeasurementsFigure 2. Illustration showing a solution of data flooding. Combinatorially acquired data,which are recorded independently in various formats, are structuralized and standardized so asto be treated as a single object, which is easy to handle and share.organize them as a multi-dimensional data. Thus, we still need a software for data collectionfrom the database to make a single object of multi-dimensional data.3.2. Do-it-yourself or outsourcingThere is a bit of truth to say that we as researchers in materials science should outsource such adevelopment of data managing system and devote ourselves to our specialties. It’s a trade-offbetween what we must/can do for outsourcing and do-it-ourselves. For outsourcing, we haveto get enough funds, write specifications for system vendors, and wait for the completionof the development. For do-it-ourselves, the size of to-do list depends on our skill forprogramming, available software tools, and the application area we want to cover. The firsttwo items are complementary; programming skill is less needed when a better human-centereduser interface is provided with the software tools. The last item includes data acquisition fromexperimental apparatus and/or database system, data provision for visualization tools, and datasharing among others.3.3. Programming languagesHistory of programming language is the one getting rid of the tasks of programmers toadjust to the convenience of computers and focusing their efforts on more substantial works.Just as assembly languages were expelled from the main stream in the past by high-levelObject-oriented virtual sample library 5languages such as FORTRAN, Pascal and C, some new languages have been on the riserecently including scripting languages and object-oriented languages[4].Scripting language is often called as glue language. According to FOLDOC (FreeOn-Line Dictionary Of Computing,http://foldoc.doc.ic.ac.uk/foldoc/), its definition is,Anylanguage, ..., used towrite glueto integrate tools and other programs to solve some problem.This metaphoric name of “glue” comes from its easy of use like a stationery and its ability toprocess data into any required format so as to collaborate with existing software tools. In otherwords, the programs written by this language, called script, are executed without compiling,unlike the conventional high-level languages. Moreover, the language is full of features tomake scripts easy to write and read. Perl, one of the most popular scripting languages, iscommonly used in bioinformatics[5].Object-oriented languages provide us a different way to reduce the load forprogramming. The language has an ability to describe a group of data as an “object” with aset of procedures of how to treat these data. This feature is suitable for us to construct a singleobject containing multi-dimensional data. Once multi-dimensional data object is generated,we don’t have to worry about remembering its inner data structure in detail and can processit just by calling the procedures stored in it. Entry-level users should be, however, ready tospend some time to learn object-oriented programming.There are some languages having both the two features, called object-oriented scriptinglanguage. They include Python, Ruby and Perl, which are open source software (see the latertext) and used in other scientific field such as geophysics[6] and bioinformatics[7].3.4. Extensibility and open source softwareWhatever ideal options we discuss, final choice eventually depends on individualcircumstances, such as necessity for special functions which are available only by specificsoftware/language. For example, we may need data acquisition via GP-IB / RS232C / parallel/ TCP-IP / USB port, data retrieval from databases via Structured Query Language (SQL),or data provision for specific visualization tools. Such features are not necessarily availablein every software as it is. We should notice, however, whether they can be implemented byexisting external libraries or not. Some software provide such an extensibility by linking asmall user-written program to bridge between the software and the libraries.The ultimate extensibility is realized when the source code of software is open andallowed for the users to improve. “Open source” software is one of the software havingthis nature. The definition of “open source” is strictly given here[8] in order to promotethe development of open source software by utilizing this nature. We are free to improveit, write add-in packages and release them to the public. Thus, we may also find a specificfunction already implemented by others. Many software packages like GNU/Linux, Apache,Perl etc. have grown up in this framework and become popular because of their high qualityand reliability. Other pros and cons in laboratory use are summarized in [9].http://foldoc.doc.ic.ac.uk/foldoc/�Object-oriented virtual sample library 6Table 1. List of the 7-dimensional data used in this study (see text). Some of these are plottedin Fig. 3 and 4.# Data Fig. 3 Fig. 41 Position,x/mm ✓ ✓2 1st annealing temp.,T1/◦C ✓ ✓3 2nd annealing temp.,T2/◦C ✓4 Appearance of glass segment ✓ ✓( White, Opaque, or Transparent )5 Fluorescence lifetime,τ /msec ✓ ✓Fluorescence spectra (CW component)6 Intensity (a.u.) ✓7 Wavelength,λ/nm ✓3.5. The author’s choiceAs the author’s solution, virtual containers of multi-dimensional data are constructed, namedvirtual sample libraries (VSLs) written by open source object-oriented scripting language,Ruby[10, 11]. Ruby has been developed by a Japanese software engineer since 1993 andwas designed to make the users “concentrate on the creative side of programming, with lessstress”[11]. In order to visualize the data in VSLs, an external graphic library is used, calledRuby/PGPLOT[12]. It was originally developed for use with astronomical data reductionprograms in Caltech since 1983 written in FORTRAN[13]. Thanks to the variety of graphicprimitives available via function call, we can design graphs with a high degree of flexibility.4. Virtual sample librariesIn this section, the structure and functions of VSLs are explained with an example of multi-dimensional data acquired from a series of fluorescence lifetime measurements over threeEr-doped glass sample libraries[1], whose segments are arrayed in a row and were annealedin a temperature gradient furnace so as to be heat-treated in three different conditions; (0) noannealing, (1) being annealed for 5min, and (2) another successive annealing at a differentposition in the furnace for 5min. The sum of the dimension becomes seven, which are listedin Table 1, and the total size of data file is about 8MB in text format. The data obtained fromthree sample libraries are compiled and plotted in Fig. 3 and 4 using VSLs[2, 3].Hereafter, some simple Ruby codes are given with plain explanations for those whohave no background knowledge of Ruby and object-oriented programming, rather than to beterminologically strict. Skilled readers are advised not to rely on the explanations too literallyand to consult the codes directly.Object-oriented virtual sample library 7Figure 3. Fluorescence spectra of Er3+ (three columns from left, #6 and 7 in the Table 1),lifetime of 1.533nm fluorescence (right, #5) and appearance of glass segment (between theformers, plotted in red, light-gray and dark-gray, #4) plotted along the sample library or asa function of the 1st annealing temperature,T1. Excitation wavelength is 977nm. (0) withno annealing treatment for reference. (1) with 1st annealing for 5min only. (2) with twosuccessive heat treatments, each for 5min. For the appearance plot, red is for completelycrystallized segment, dark gray for transparent, and light gray for opaque. Solid and dashedlines in the lower row and in the right are for the positions named A and B, respectively. Thehorizontal black solid lines in the intensity plot correspond to the data withdrawn due to theirlow signal/noise ratio. A lifetime increase is found at around the glass segment A in the sample(2). At the same time, the fluorescence peak at 1.55µm is broadened.4.1. StructureVSL models after actual combinatorially integrated sample library. Namely, its logical arraystructure is similar to the cell structure of the real library. In each cell in the VSL, referencesto experimental data (or another references to data) are stored. In other words, VSL storesthe data hierarchically in the order of (1) coordinates in the sample library, (2) names of themeasurements performed, and (3) data obtained from each measurement. Thus, VSL has atree structure and each experimental data is intuitively accessed by tracing references from theroot of the tree. Namely, VSL stores not only experimental data but also the relations amongthe data and the positions in the actual sample library.This hierarchy structure is visualized as “pull-down menu” style in Fig. 5. In the bottomof the window, the root menu is located showing the coordinates in the library, from 40 to 60.After the item of “41” is selected, a sub-menu appears showing what kinds of data are stored.Next, the item of “Fluorescence Spectrum” is chosen and another sub-menu is opened toshow it consists of two items. Finally, by choosing “Wavelength” item, a series of wavelengthvalues are shown at “Value” box just above the main menu. In this way, such a hierarchyObject-oriented virtual sample library 8Figure 4. Annealing conditional and/or positional dependence of the lifetime and appearanceof the sample libraries. An and Bn indicate specific glass segments. These notations are alsoused in Fig. 3. The maximum lifetime was obtained by annealing at 550◦C and then 470◦C(A2).Figure 5. An illustration showing an example of VSL’s hierarchy structure by “pull-downmenu” style (see text).structure can store the whole multi-dimensional data systematically and gives us an easy wayto access the individual data.4.2. ProvisionFigures 3 and 4 are generated by user-written Ruby scripts, in which three VSL objects areconstructed and some functions of Ruby/PGPLOT are called with some extracted data fromthe VSL objects. The action of tracing data tree shown in Fig. 5 is equivalent to the Ruby codedisplayed in the “Code” box, where the variablevl corresponds to one of the VSL objectsand the following square brackets mean an operator returning the element referred as the keyinside the brackets. Thus,vl [41] corresponds to the list of measurements performed at thepixel of 41 andvl [41][ ’Fluorescence spectrum’ ] the axes list of fluorescencespectrum at 41.Object-oriented virtual sample library 9Followings are the examples of Ruby code used for plotting the extracted data used inFig. 3. The fluorescence spectra plotted at the bottom of Fig. 3 are generated by the followingcode,pgline vl [x][ ’Fluorescence spectrum’ ][ ’Wavelength (nm)’ ],vl [x][ ’Fluorescence spectrum’ ][ ’Intensity (a.u.)’ ]where pgline is a function for drawing a line specified with the accompanying twoarguments representing x- and y-axes.Three color images at the top-left of Fig. 3 representing the positional dependence offluorescence spectra are generated by the code,a = []vl .each do |v|a << v[ ’Fluorescence spectrum’ ][ ’Intensity (a.u.)’ ]endpgimag a, RANGE_OF_Z-AXISwhere a two-dimensional array,a, is formed during the first four lines andpgimag is afunction for drawing a color image of the array. The first line defines an empty array namedasa. The lines from the second to the fourth form a loop executed for each of the elements invl . The variablev in the third line corresponds to one of the elements,vl [x] . In the loop,an array representing fluorescence spectrum is extracted from VSL and added toa, where thisoperation is described as “<<”, to form the two-dimensional data array.Frequently we need another cross-sectional view along an axis other than wavelength,such as the positional dependence of fluorescence lifetime plotted at the top-right of Fig. 3. Inthis case, a simple procedure picking up the related data are required as listed below.x, y = [], []vl .each_with_index do |v,i|x << v[ ’Lifetime/Wavelength’ ][ ’Lifetime (ms)’ ][z]y << iendpgpt x, y, SYMBOLwherepgpt is a function for drawing a series of points specified with the accompanying twoarguments representing x- and y-axes. The first line defines empty arrays named asx andy . In the loop from the second line to the fifth, thez -th lifetime value, that is, the value atthe wavelength ofv[ ’Lifetime/Wavelength’ ][ ’Wavelength (nm)’ ][z] nm,is added tox and the pixel number ofi is added toy .Sometimes we have to plot data in the way not provided by the standard functionsof visualization tool, such as Fig. 4 and the positional dependence of appearance plottedbetween the color images and the lifetime curves in Fig. 3. We can clear it up by the aidof programming language. The sample code for the latter case (Fig. 3) is the following,Object-oriented virtual sample library 10vl .each_with_index do |v,i|case v[ ’Appearance’ ]when ’transparent’ ; pgsci DARKGRAYwhen ’opaque’ ; pgsci LIGHTGRAYwhen ’white’ ; pgsci REDendpgpt1 0.4, i, SYMBOLendwherepgsci is a command to set the color for plotting andpgpt1 a function for drawing asymbol specified with the accompanying two arguments representing x- and y-values. In theloop, the color is set according to the value ofv[ ’Appearance’ ] and a symbol is plottedat (0.4,i ). For plotting the data in Fig. 4, the position, the size and the color of each datapoint is changed according to the properties of #1–#5 in Table 1.In summary, every data in VSL objects is accessed via a series of brackets operators soas to trace its tree-like structure shown in Fig. 5. This excellent traceability helps us to writeconcise scripts customized with advanced features.4.3. AcquisitionThe data extraction described above becomes possible only after the VSL object is generated.The code for its generation is shown on the top line of the window shown in Fig. 5, in whichthree data files are specified.Tk55vlib is the name ofclassandvl is an instanceof thisclass. The relation between the two is illustrated in Fig. 6 using a metaphor of a mold and itscasting. In the definition ofTk55vlib class, it is described there how to read the data filesspecified with the arguments ofnew operator (or “method”, a term used in object-orientedprograming) and construct a tree-like structure on the basis of fabrication conditions recordedin these files, i.e. #1–#4 in Table 1. Thenew method returns a VSL object, in other words, aninstance ofTk55vlib class, corresponding to the data stored in the specified files.After a measurement on the sample library, we can register the result into the VSLobject via user-defined methods. In the present case,register_fluorescence andregister_lifetime methods are defined together with the definition ofTk55vlibclass. It is described there how to find and read data files and add branches corresponding to#5–#7 in Table 1 to the main tree-like structure. These methods are executed by the followingcode,vl .register_fluorescencevl .register_lifetimeafter which the tree structure shown in Fig. 5 is fully constructed. We can add new methodsfor data acquisition from other data sources, such as database and measurement equipment,as far as the programming language supports to communicate with these sources.One thing to be noticed here is thatTk55vlib class is only valid for the librarieswith one-dimensional pixel array. Thus, whenever a new sample library with different pixelObject-oriented virtual sample library 11aT• Instance• Classen wFigure 6. An illustration showing the relation betweenclassandinstanceusing a metaphor ofa mold and its casting. (see text).geometry is prepared, we have to design a new VSL class for it. It takes, however, notmuch time for programming since object-oriented languages have a special feature for reusingexisting codes with least modifications. Moreover, we can design a new class forming a newtree-like structure consisting of existing VSL objects, which corresponds to an increment ofdimensional number. This means that it is possible to treat multi-dimensional data, acquiredfrom a group of “real” sample libraries, as one “virtual” sample library.4.4. Accessing VSLs over networkConstruction of VSL objects takes longer time with increasing the size of multi-dimensionaldata. Thus, it is not efficient to generate VSLs every time VSL-based script is executed. Thisproblem is solved by using a Ruby library which enables to provide objects over network,called “drb” (distributed Ruby[11]). Under this scheme, one computer acts as a VSL serverresponding to the requests from client computers, which do not have to spend any CPU timefor VSL generation and store any data files. This framework is also used to share VSL objectswith colleagues on a secure network.4.5. Alternative implementationSince the basic part of VSLs is realized by object-oriented programming technology, VSLsare implementable by other object-oriented scripting languages, such as Python and Perl,conventional object-oriented languages, such as Java, C++, or possibly object-orienteddatabase systems. The choice depends on user’s need for the interfaces for acquisition,provision and sharing, i.e. functions for communicating with measurement apparatus,databases, visualization tools and networks.Object-oriented virtual sample library 125. Extensibility beyond data containersVSLs have a potential to go beyond managing existing data. Since VSLs are objects (pleaserecall the description at the third paragraph of section 3.3), we can add to them someprocedures to generate new data or perform simulations by referring the data stored inside. Inother words, object-oriented VSLs have functions to perform virtual experiments just like in-silico combinatorial library and virtual combinatorial library[14] do. All these virtual librarieshave common characteristic features of storing data for a group of samples and also storingprocedures to treat them. The procedures in the present VLSs are focused on acquiring,visualizing, and sharing the data, and the others on simulations. In contrast to the latter, thepresent VSLs are distinguishable by calling them “object-oriented virtual sample libraries”[3].6. ConclusionsA concept of virtual sample library (VSL) is presented. VSLs are used for multi-dimensional data management for combinatorial experiments, in which several measurementsare performed per one sample library. VSLs enable us to treat the whole data as one objectand to access any of the data inside by tracing their hierarchy structure. VSLs are written inopen source object-oriented scripting language Ruby, because of its high ability in abstractionand extensibility. Their structure and functions are demonstrated using a specific experimentaldata.AcknowledgmentsThe author express his sincere thanks to Yukihiro Matsumoto (Ruby), Masahiro Tanaka(NArray & Ruby/PGPLOT) and Masatoshi Seki (drb) for providing their excellent softwareas open source.References[1] S. Todoroki and S. Inoue, “Combinatorial fluorescence lifetime measuring system for developing Er-dopedtransparent glass ceramics,”Appl. Surface Sci., vol. 223, no. 1-3, pp. 39–43, 2004.[2] S. Todoroki and S. Inoue, “Multi-dimensional data management by virtual sample library written in object-oriented script language Ruby,”Transactions of the Materials Research Society of Japan, vol. 29, no. 1,pp. 293–296, 2004. (Proceedings of The 8th IUMRS International Conference on Advanced Materials,Oct. 2003, Yokohama, Japan, A3-13-O09).[3] S. Todoroki and S. Inoue, “Management of combinatorially acquired multi-dimensional data throughobject-oriented virtual sample library,” inCombinatorial and Artificial Intelligence Methods in MaterialScience II(R. A. Potyrailo, Q. Wang, T. Chikyow, and A. Karim, eds.), vol. 804 ofMaterial ResearchSociety Symposium Proceedings, (Pennsylvania, USA), pp. 327–332, Material Research Society, 2004.(JJ6.7).[4] J. K. Ousterhout, “Scripting: Higher level programming for the 21st century,”IEEE Computer, vol. 31,no. 3, pp. 23–30, 1998. (available online athttp://home.pacbell.net/ouster/scripting.html).[5] C. Gibas, P. Jambeck, and J. M. Fenton,Developing Bioinformatics Computer Skills. Oreilly & Associates,2001. (ISBN 1565926641).http://home.pacbell.net/ouster/scripting.html�Object-oriented virtual sample library 13[6] “Dennou ruby project.” (http://www.gfd-dennou.org/arch/ruby/).[7] “Bioruby project.” (http://bioruby.org/).[8] “Open Source Initiative.” (http://www.opensource.org/).[9] C. Laird, “Open source in the lab,” IBM developerWorksTM, Oct. 2002. (http://www-106.ibm.com/developerworks/linux/library/l-oslab/).[10] “Ruby Home Page.” (http://www.ruby-lang.org).[11] D. Thomas and A. Hunt,Programing Ruby, The Pragmatic Programmer’s Guide. Addison-Wesley, 2001.(available online athttp://www.rubycentral.com/book/).[12] M. Tanaka, “Ruby/PGPLOT.”http://www.ir.isas.ac.jp/˜masa/ruby/pgplot/index.html.[13] T. J. Pearson, “PGPLOT.”http://www.astro.caltech.edu/˜tjp/pgplot/.[14] C. Suh, A. Rajagopalan, X. Li, and K. Rajan, “Combinatorial materials design through database science,”in Combinatorial and Artificial Intelligence Methods in Material Science II(R. A. Potyrailo, Q. Wang,T. Chikyow, and A. Karim, eds.), vol. 804 ofMaterial Research Society Symposium Proceedings,(Pennsylvania, USA), pp. 333–341, Material Research Society, 2004. (JJ9.23).http://www.gfd-dennou.org/arch/ruby/�http://bioruby.org/�http://www.opensource.org/�http://www-106.ibm.com/developerworks/linux/library/l-oslab/�http://www-106.ibm.com/developerworks/linux/library/l-oslab/�http://www.ruby-lang.org�http://www.rubycentral.com/book/�http://www.ir.isas.ac.jp/unhbox voidb@x �group let unhbox voidb@x setbox @tempboxa hbox {global mathchardef accent@spacefactor spacefactor }accent 126 egroup spacefactor accent@spacefactor masa/ruby/pgplot/index.html�http://www.astro.caltech.edu/unhbox voidb@x �group let unhbox voidb@x setbox @tempboxa hbox {global mathchardef accent@spacefactor spacefactor }accent 126 egroup spacefactor accent@spacefactor tjp/pgplot/�