rl_Multilayer_rdb.h

00001 #ifndef rl_Multilayer_rdb_h_INCLUDED
00002 #define rl_Multilayer_rdb_h_INCLUDED
00003 
00004 // File:   rl_Multilayer_rdb.h
00005 // Author: Terry Gaetz
00006 
00007 /* --8<--8<--8<--8<--
00008  *
00009  * Copyright (C) 2006 Smithsonian Astrophysical Observatory
00010  *
00011  * This file is part of rl_ray
00012  *
00013  * rl_ray is free software; you can redistribute it and/or
00014  * modify it under the terms of the GNU General Public License
00015  * as published by the Free Software Foundation; either version 2
00016  * of the License, or (at your option) any later version.
00017  *
00018  * rl_ray is distributed in the hope that it will be useful,
00019  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00020  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00021  * GNU General Public License for more details.
00022  *
00023  * You should have received a copy of the GNU General Public License
00024  * along with this program; if not, write to the 
00025  *       Free Software Foundation, Inc. 
00026  *       51 Franklin Street, Fifth Floor
00027  *       Boston, MA  02110-1301, USA
00028  *
00029  * -->8-->8-->8-->8-- */
00030 
00031 #include <cstddef>                        // ptrdiff_t
00032 #include <rl_raylib/rl_Traits.h>          // rl_Traits::rl_DielectricPOD
00033 #include <rl_raylib/rl_Multilayer.h>      // rl_Multilayer
00034 
00035 //########################################################################
00036 // rl_Multilayer_rdb
00037 //########################################################################
00038 
00039 
00040 //
00041  /***
00042  * /class rl_Multilayer_rdb
00043  *
00044  * Construct or initialize rl_Multilayer based on contents of an /rdb table.
00045  * The rdb table is assumed to contain one row for each layer
00046  * of the multilayer, ordered from the top (adjacent to vacuum) layer
00047  * to the substrate (conventionally with thickness of 1.e30).
00048  * The rdb table is assumed to contain the following columns:
00049  * - material: an ascii string containing the compostion of
00050  *   the layer; used for labeling and i/o.  This column is required.
00051  * - thickness: thickness of the layer in Angstroms
00052  * - bulkdensity: relative bulk density of the layer; 1.0 is full
00053  *   nominal bulk density.  This column is required.
00054  * - roughness_type: type of interlayer grading. 
00055  *   This column is optional; if it is not present, "none" is assumed.
00056  *   Currently acceptable values are (case-insensitive):
00057  *   - none: no interlayer grading
00058  *   - DW_RSAO: Debye-Waller factor (SAO variant on Windt's DW,
00059  *              taking only the real part of the factor)
00060  *   - DW_CSAO: Debye-Waller factor (SAO variant on Windt's DW,
00061  *              using the complex factor)
00062  *   - DW_SPILLER: Debye-Waller factor (variant on DW from a paper by
00063  *                 Spiller (1988)
00064  *   - MDW: "Modified Debye-Waller" factor
00065  *   - NC: Nevot-Croce factor
00066  * - srough: interlayer grading "roughness" sigma (in Angstroms);
00067  *    This column is required only if the roughness_type column is present.
00068  * - pathname</code> - This contains a string containing the filename
00069  *       (optionally prefixed with a path) for the /rdb table containing the
00070  *       optical constant data for this layer.  The layer is optical 
00071  *       constants are initialized using rl_DielectricPOD_rdb to read 
00072  *       the /rdb data.
00073  */
00074 class rl_Multilayer_rdb
00075   : public rl_Multilayer
00076 {
00077 public:
00078 
00082  ~rl_Multilayer_rdb();
00083 
00098   rl_Multilayer_rdb( char const rdb_file[], rl_Traits::EInterpMode interp_mode );
00099 
00113   void init_from_rdb( char const rdb_file[], rl_Traits::EInterpMode interp_mode );
00114 };
00115 
00116 // rl_Multilayer_rdb_h_INCLUDED
00117 #endif