Other articles


  1. Geant4模拟总结(一)

    笔者是Geant4的初学者,在Geant4学习过程中经历了一段只有例程为师的“痛苦”历程(据说学习Geant4的各位前辈都经历过相同的磨练,并毅然决定把这种心灵与肉体的双重磨砺传播发扬下去。于是在神功初成之后就果断归隐山林,从此不为世人所知。=.- :))。

    在摸索学习Geant4三个月后,笔者对Geant4的使用建立了初步基本的认识。一方面想整理自己对Geant4基本使用方法的粗浅认识,更好的组织和精练自己的知识系统;另一方面也想总结分享下自己学习Geant4的过程和方法以及一些体会,但愿能为后来的Geant4初学者提供绵薄微助。于是有了写这个系列博文的想法。(其实你能看到这些东西还有一个更大的原因,那就是笔者最近迷上了用wordpress写博客=.=!)

    本文正如题目所说,是针对没有任何Geant4基础的初学者。不过笔者暂时还没有写如何安装Geant4的教程的想法。笔者也不打算普及计算机教育,默认读者有C++编程基础(如果你还不能阅读C++代码,那还是快先去学一学C++,不用对C++有多么深刻的体会和丰富的实践经验,你只要能读懂一个由数个或者十数个C++类写成的简单C++程序即可),因为Geant4是用C++编写的,你要在Geant4基础上开发模拟程序也要使用C++语言。(鉴于笔者的人生经验尚十分不丰富,如有出现不懂C++却依然能学好Geant4的,纯属奇迹,不管你信不信,反正笔者信;或者说,你丫就是天才!)

    好言归正传!

    先概括讲一下笔者对Geant4的整体印象。初识Geant4(就是半年前),是因为笔者的本科毕业设计是模拟宇宙线的一个小题目。还没怎么开始做,指导老师量才为用就中途给换了题目 ...

    read more

    There are comments.

  2. Geant4模拟总结(二)

    今天要讲的主要是DetectorConstructor的编写。

    首先介绍下神马是DetectorConstructor。我们知道唱戏先得搭台子。创建编写DetectorConstructor类就是为模拟搭戏台舞台。比如你要模拟中子穿过晶体的过程。那么你首先得摆一块晶体。要摆一块晶体,除非你已经有一块形状尺寸材料都很理想的晶体了,然后你可以把它摆到某一个位置,放到位置后还可以再转一转方向什么的。否则,你就得自己去定义一块晶体出来,就像上边提到的,定义出晶体的材料、形状、尺寸。然后你就可以把这块晶体放到你想放置的位置了。

    首先,定义材料。比如你想用的材料是纯CsI材料。你要先定义Cs原子和I原子。你可以像这样来定义:

    G4Element* elementCs = new G4Element( "Cesium", "Cs", 55. , 132.90543*g/mole );
    G4Element* elementI = new G4Element( "Iodine", "I", 53. , 126.90447*g/mole );
    

    我们知道,上边的c++代码的语义是:第一行,创建一个指针elementCs,指向一个G4Element类的对象 ...

    read more

    There are comments.

  3. IApplication文档解析

    类图如下:

    Iapp类图

    是所有app对象的基类。子类在GPI中给出程序逻辑并从功能上实现配置操作。app配置是作业提交的第一步。

    实现配置方法的基本规则:

    一般configure()和master_configure()方法会在作业提交的时候调用,所以原则上你

    方法文档:

    1.master_configure(self)

    • 配置app的共享(主要)方面。
    • 调用一次,splitting情况下也会调用
    • 返回元组(modified_flag, appconfig)
      • -appconfig(或appextra): 结构任意。由特定app运行时handler处理
      • -modified_flag: 如果configure()时对象self被改变了则为true
    • 如果方法未实现则忽略掉

    2.config(self,master_aapconfig)

    • 配置app的特定方面。与方法1有类似语义并且返回元组(modified_flag,appconfig).
    • 具体子类必须实现,否则作业提交(submission)会失败。
    • 参数master_configure是方法1的返回
    • splitting情况下每个子作业对象调用一次。即有多少子作业就会调用多少次。
    • 无spliting情况下则会调用一次.
    • 从Ganga4.0.x开始,方法1被忽略。

    3 ...

    read more

    There are comments.

  4. IMerger及ISplitter文档解析

    IMerger

    类图如下:

    IMerger类图

    文档解析:

    1.merger(self,subjobs,sum_outputdir,**option)

    • 合并子作业的输出到sum_outputdir.
    • options(关键字参数)由具体的子类定义

    2.validatedMerge(self.job)

    ISplitter

    类图如下:

    ISplitter类图

    文档解析:

    1.split(self,job)

    • 根据主作业返回子作业列表
    • 主作业不会被更改
    • 具体子类必须实现本方法
    • 修改子作业的确定部分(如特定的属性)。子作业的其他部分都会相同。只有在schema中声明为"splitable"的属性才可修改。如果app handler不能处理被修改的参数,这个限定应用在app对象上就可以避免前后不一致。
    • 当前的实现中,backend的类型也不可更改。

    2.validatedSplit(self,job)

    • 调用split()方法执行作业拆分,并使mutability inveriants有效
    • 如果invariants损坏(或者split()中发生异常),则抛出SplittingError异常 ...
    read more

    There are comments.

  5. 关于

    我是一个粒子物理专业的研究生,目前在中国科学院的高能所学习,主要在一些实验中参加一些软件工作。

    我喜欢linux,热爱编程,对人工智能相关的兴趣堪比我对基础物理学的热情,纯理科男。

    欢迎在相关领域有兴趣的一起来交流。

    我的对外联系mail: zsneoks@gmail.com

    read more

    There are comments.

  6. Ganga中文

    GangaDoc

    Ganga文档首页入口

    3 实现

    这章提供了GANGA中一些重要部分的当前实现细节。
    3.1 组件
    作业的各个组件以插件类的形式来实现,需用户在配置文件中设为enabled,则会由GANGA在启动时导入。这表示用户仅能看到与其特定工作环境相关的组件。
    插件维护十分简单,采用了一组内部接口和一个产生代理类的机制。组件类继承自接口类。每个插件类都定义了一个schema,用它描述插件的属性和指定类型(只读/读写/内部)、可见性以及相关的用户友好(user-convinence)的过滤器和语法快捷方式(shortcut)。
    与用户直接进行交互的不是插件类,而是一个自动产生的代理类,代理类在GPI中可见。代理类只包含插件类中的一些在schema中定义可见的属性以及选出用于导出的方法。插件和代理的层次(level)分离十分灵活。在GPI层插件的实现细节不可见;所有代理类都遵循相同的设计逻辑(例如按值拷贝copy-by-value);持续性自动化,会话等级锁定透明。用这种方法,底层的内部的API就与用户层的GPI分离开。
    框架不强迫开发者支持app和backend的所有组合,只要支持有意义和有趣的组合即可。为便于管理这些组合,提出了submission handler的概念。sumission handler是app和backend组件的一个连接器。在提交时间,它将app的内部表示(representation)传送给特定backend可以接受的表示(representation ...
    read more

    There are comments.

Page 1 / 4 »

blogroll

social