*********************************************************************
*                                                                   *
*                      Cartes Version 1.3.1 免费版                  *
*                          Written  By                              *
*                           Yang Wang                               *
*        Department of Chemistry, Beijing Normal University         *
*              Nov.1st-2nd.2002, Jun.2003, Jun.-Oct.2004            *
*                                                                   *
*********************************************************************

CopyRight (C) 2003-2004, Yang Wang

任何问题或建议，请Email: wy25@mail.bnu.edu.cn


=============================================================================================================================
☆☆☆ 版本历史 ☆☆☆

   早些时候，出于兴趣，我写了一个在DOS下将晶体的分数坐标和直角坐标进行互转的程序，当时刚刚
学了线性代数的课，整个程序就是用矩阵的线性运算实现的，写完后自己很以为然，为了纪念法国杰出
的数学家、哲学家笛卡尔对于解析几何和人类思想史的贡献，我就将这个程序命名为Cartes。后来没多
久，有个同学正需要将文献中的晶体测定得到的分数坐标转换成直角坐标，没想到这个程序居然派上了
用场。再后来，觉得这个程序在DOS下执行，需要动手写输入文件，格式规定又比较复杂，有点不方便，
于是就利用刚学一点的VC，把它包装成了可视化软件。此后，闲来无事或者偶尔心血来潮，就往这个程
序上添一点新东西，于是功能就越来越多，后来才发现这个程序早已不是开始时仅仅停留在将晶体的分
数坐标和直角坐标进行互转上了，在我以及其他老师或同学的工作中，这个程序给我们帮了不少的忙，
尤其是在构造分子模型，对分子进行对称操作这些问题上——其实有些问题可以临时编程来解决，但一
来不少人对编写此类程序无法下手，二来编写特定的程序有点费时费力，而使用Cartes往往不需要编程
就可以实现。别人在使用Cartes的过程中曾遇到了一些问题，我知道后都及时尽快地帮他们解决，而自
己也会因此产生一些想法，这些想法就再融入到Cartes中去，于是Cartes的版本就越来越高，以下就是
这些想法的足迹：

2002.11.1-2
  Cartes DOS版

2003.6
  Cartes v1.0.0
  可视化版本

2004.2
  Cartes v1.1.0
  增加Office XP界面

2004.6
  Cartes v1.2.0
  增加了自动识别点群，将一组坐标的中心平移到原点，支持中英文等功能，并且简化了操作（去掉了*.car的文件格式，输入输出都采用Gaussian的*.gjf文件格式。并且无需事先在文件中指明所导入的是直角坐标还是分数坐标，因为在“文件”菜单下面有两个菜单项：“导入直角坐标...”和“导入分数坐标...”，大家根据需要选择不同的菜单项即可。 输出文件中的标题部分将保留晶胞参数的信息，并且下次被导入时Cartes可以识别出来。 以前的版本是导入一次后就只能执行一种操作，然后所有菜单又全部变灰。在本版本中，一个文件被导入后，可以无限制地进行多种操作。），美化了界面。

2004.7
  Cartes v1.2.1
  增加了对称操作矩阵自动生成向导，可以十分方便地按照对称变换自动生成变换矩阵。


2004.7.6-7.7
  Cartes v1.2.2
  增加了自动调整分子取向的功能，并修改了一些BUG。


2004.7.11,7.15-16
  Cartes v1.2.3
  修改了点群判断程序内核PG的BUG：
    1) 与容差值比较时漏加了绝对值fabs()。（7.11）
    2) 判断水平和垂直反映面没考虑C2主轴时的情况。（7.15）
    3) 补全了C2轴的所有可能轴。（7.15）
    4) 补全了S4轴的所有可能轴。（7.15）
    5) 增加了打印主要对称元素的功能。（7.15）
  优化了判断点群判断程序内核PG的算法，判断速度提高了至少一倍多。（7.15）
  集成PG到Cartes。（7.16）
  
2004.9.6
  Cartes v1.2.4
  因需要增加了自动将分子的自定义的某个轴调整到自定义的另外一个轴上的功能。

2004.9.19
  Cartes v1.2.4
  1) 修改自动将分子的自定义的某个轴调整到自定义的另外一个轴上的功能中的一个BUG，应该将两个轴的叉积矢量进行归一化，而不是正规化。
  2) 纠正了首次启动时标题栏不是中文语言的小BUG。

2004.9.22
  Cartes v1.2.5
  1) 提高了输出文件的精度（由小数点后6位变为7位）。
  2) 增加了标题栏显示当前打开的文件名的功能。
  3) 改进了扩展名识别方法（原来只限于识别三位扩展名，现在则不限）。
  4) 纠正了无法清除"~cnaxes.tmp"或"~c2axes.tmp"临时文件的错误。

2004.9.26
  Cartes v1.2.6
  1) 增加了在对分数坐标进行操作时，可以将对称操作后的所有原子都平移到同一个晶胞内，
这样在后面进行堆积时就能堆积出完整且整齐的晶体结构来。
  2) 将“方向余弦”改称为“方向矢量”，因为考虑到方向余弦都是小于1的，而本程序需要输入的矢量可以是不归一化的。

2004.10.1-2
  Cartes v1.3.0
  1)增加了显示空间群信息的功能。
  2)增加了按照空间群的对称性由不等价原子推出一个晶胞内所有原子的坐标。
  3)提高了计算和转换的精度（可达小数点后15位）。
  4)增加了多种文件格式兼容和互转的功能。
  5)增加了直接转换*.cif文件的功能。
  6)修改了点群判定中对于水平镜面，垂直镜面以及垂直C2轴判断函数中的一个错误（忘了与容差值比较，而不是与0比较了）。

2004.10.3
  Cartes v1.3.0
  改进了思路，使得Cartes不需要事先安装ViewerActiveX50.exe就可以直接运行。
  

=============================================================================================================================

一、使用说明：

1、Cartes软件的功能：

  Cartes软件是对分子和晶体的结构进行编辑和操作的强大工具，它可以帮助人们解决在进行理论和计算化学研究时模型构造中所遇到的困难。下面我们将看到，Cartes有着许其他分子结构编辑软件所没有的功能和优点，如果能结合诸如Chem3D, GaussView等软件辅助使用，通常的分子结构构造都能轻松完成。总体来说，Cartes的功能有：

  （一）晶体坐标变换

      (1)晶体的分数坐标转化成直角坐标。

      (2)晶体的直角坐标转化成分数坐标。

      (3)生成向ａ,ｂ,ｃ三个方向堆积i,j,k个晶胞的全部分数坐标或直角坐标。

      (4)生成按照给定对称性关系得出的所有相关原子的分数坐标或直角坐标。

      (5)按照空间群的对称性由不等价原子推出一个晶胞内所有原子的坐标。
 
      (6)查看空间群信息，包括国际空间群符号，Schonflies标记，晶系，Wyckoff位置以及所有对称性等价位置等。

      (7)自动转换*.cif文件：从*.cif文件中读取选定结构，然后自动将其转换成包含一个完整晶胞的坐标文件。


  （二）分子坐标变换

      (1)按照指定对称操作任意平移、旋转、反映或反演当前的坐标。

      (2)将一组坐标的中心平移到原点。

      (3)判断分子的点群，并显示主要对称元素（如旋转轴的轴向矢量，对称面的法向矢量等等）。

      (4)自动调整分子取向，包括：
        1)自动将分子的主轴调整到x,y,z轴上。
        2)自动将分子的自定义的某个轴调整到自定义的另外一个轴上。

  （三）各种文件格式的转换

       (1)可导入的直角坐标文件格式有：
	Gaussian Job Files (*.gjf)
	XYZ Coordinate (*.xyz)
	Brookhaven PDB Files (*.pdb,*.ent)
	Crystallographic Information Files (*.cif)
	MDL MOL Files (*.mol,*.sdf,*.sd,*.mdl)
	InsightII CAR Files (*.car)|*.car
	Cambridge Crystallographic (*.csd,*.fdat,*.dat)
	Quanta Files (*.msf)
	Sybyl MOL2 Files (*.mol2)
	Cerius2 Files (*.msi)
	Catalyst Files (*.cpd)
	Catalyst Query Files (*.chm)
	MDL Sketch (*.skc)|*.skc
	InsightII Grid Files (*.grd)
	DS ViewerPro Files (*.msv)

       (2)可导入的分数坐标文件格式有：
	Gaussian Job Files (*.gjf)
	Crystallographic Information Files (*.cif)

       (3)可导出的直角坐标文件格式有：
	Gaussian Job Files (*.gjf)
	XYZ Coordinate (*.xyz)
	Brookhaven PDB Files (*.pdb,*.ent)
	MDL MOL Files (*.mol,*.sdf,*.sd,*.mdl)
	Catalyst Files (*.cpd)
	Catalyst Query Files (*.chm)
	VRML World Files (*.wrl)
	Smiles Files (*.smi)
	GIF Files (*.gif)
	JPEG Files (*.jpg)
	DS ViewerPro Files (*.msv)

       (4)可导出的分数坐标文件格式有：
	Gaussian Job Files (*.gjf)
     

2、Cartes软件的特色

   （一）自动识别点群

    象Chem3D这样专业的软件目前尚没有自动识别点群的功能，而GaussView的3.07以来的版本已经增加了此项功能，但是其准确程度令人担忧。似乎GaussView倾向于低估分子的对称性，例如它往往无法判断出高于6重轴的对称性，如碳管(7,7)，GaussView给出的点群是C2h，而实际是D7d；又比如碳管(5,5)，它认为其点群是C5，而实际是D5d。
    可见自己动手写一个自动识别点群的程序是很具有挑战性的，于是我就写了这样的程序，现在正好把它集成到Cartes软件里来了。

   （二） 自动调整分子取向

   自动将分子的主轴调整到x,y,z轴上。
   自动将分子的自定义的某个轴调整到自定义的另外一个轴上。

 
   （三）对称操作矩阵自动生成向导

    在进行对称操作时，原先需要自行输入变换矩阵，这往往要求用户自己推求矩阵元，因而极为不方便。
    现在我加入了对称操作矩阵自动生成向导，可以十分方便地按照对称变换自动生成变化矩阵。我想这是一个令人振奋的改进！

   （四）通过空间群自动添加操作矩阵

     严格按照各个空间群的对称性关系自动来添加对称操作矩阵，这应该是继对称操作矩阵自动生成向导之后又一个明显方便有效的改进。

   （五）多种文件格式的兼容和互转

     如果有可能的话，以后我还会兼容其他文件格式——比如Gaussian等量化软件的out文件等等。

   （六） 语言切换

     有中文和英文两种语言的支持。

   （七） Office XP界面

     另外还采用了真彩色菜单的技术，进一步美化了界面。

   （八） 绿色软件

     无需安装，直接运行，不产生垃圾文件，不对注册表进行操作。


3. 关于对称操作的使用

  当选择“对称操作”后，会弹出一个输入对称性操作矩阵的面板，对称性操作矩阵的格式和意义如下：

     每一个对称性相关矩阵必须以%（表示该对称性相关矩阵对分数坐标进行操作，其平移量采用分数坐标的单位）或#（表示该
对称性相关矩阵对直角坐标进行操作，其平移量采用以埃为单位）开头，换行或空格后，就输入对称性相关矩阵，格式为：

      p11   p12   p13  t1
      p21   p22   p23  t2 
      p31   p32   p33  t3

  其中t1,t2,t3的单位由标识符‘%’和‘#’指明（含义见上），对于同一个输入文件‘%’和‘#’可以混合使用。




=============================================================================================================================

二、使用技巧：

1、只将部分方向上的坐标进行转换：

   可以通过设置特定的晶胞参数值来实现。

   例如：只让x直角坐标转化成分数坐标，y、z坐标仍保持直角坐标不变：

         可以取a=a, b=1, c=1, alpha=90, beta=90, gamma=90

   又如：只让A和B分数坐标转化成直角坐标，C坐标仍保持分数坐标不变：

         可以取a=a, b=b, c=1, alpha=90, beta=90, gamma=gamma

   其余情况同理设置。


2、生成按照给定对称性关系得出的所有相关原子的分数坐标或直角坐标。

   如果既要演化出对称性相关的坐标，又要保持原有坐标不变（通常情况下确实如此），就应该将第一个对称性相关矩阵设为恒等阵，即：

                        %
                        1 0 0  0
                        0 1 0  0
                        0 0 1  0

   然后再接着输入给定对称操作对应的对称性相关矩阵即可。

3、按照指定需要任意平移、旋转、反映或反演当前的坐标：

   只写相应操作的对称性相关矩阵即可，但最好用对直角坐标进行操作的方法（因为对分数坐标的操作会受到
晶体对称元素的限制），如反演原先晶胞，再沿y方向平移1.8埃就可以写为：

                        #
                        -1  0  0   0
                         0 -1  0   1.8
                         0  0 -1   0

4、DOS下命令行方式

  (1) 在DOS下打开文件

   命令行输入：cartes 输入文件名

  (2) 查看本使用帮助文件：

   命令行输入：cartes /?

=============================================================================================================================

三、理论原理

    免费版略。

=============================================================================================================================


四、致谢

    谨以此程序献给我最亲爱的父母，他们总是无时无刻关怀着这个尚未有出息的儿子。

    同时感谢北大未名BBS和CSDN上热心网友给予我的技术上的启发和帮助。

--
  I think, therefore I am. - Renatus Cartesius



