|
我想知道Geant4自己到底定义了多少Ions,就看了看几个相关文档。
那个G4IonTable类里面定义的
typedef std::vector< G4ParticleDefinition * > G4IonList
private里面有:
G4IonList * fIonList
我最初的想法是,是不是所有的Ions都已经默认被定义好,然后保存到这个fIonList里面。
我作了如下测试,在GeneratePrimaries(G4Event* anEvent) 里面写:
G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable();
G4String particleName;
G4IonTable* ionTable = particleTable->GetIonTable();
ionTable->DumpTable(particleName="ALL");
G4cout<<"The current number of ions defined in IonTable is : " << ionTable->Entries() <<G4endl;
//here only 6 ion types: proton, GenericIon,deuteron,triton,He3,alpha will be shown by default
然后我运行一下,event次数为1,发现输出只有6种Ions,分别是:
proton, GenericIon,deuteron,triton,He3,alpha
我看geant4-09-01-patch-01的G4Ions的派生类有7个,还有一个是中子,可是这个默认并没有显示有中子,原因我不知道。
(补充,原来在后来的Geant4版本中,中子被从G4Ions里面移到barions里面去了)
然后我测试更多的events,例如当我改为10个事件时,多了一个O16粒子出来,总离子数成为7个。
然后我又增加event数目,例如100,我会在屏幕上不断的看到这个总粒子数目增长,由开始的6个,变为7个,过一会变为8个,最后变到15个。什么N15啊,O18的都出来了。
我继续增加event数目,这个IonTable中的总离子数目也在不断增长。但是我其实并没有自己写任何代码去创建新的Ion,而且我也想不明白哪里会自己调用CreateIon函数。
如果这个时候,我按nucl以前帖子里面的讲解,添加代码:
G4ParticleDefinition* particleFe56 = ionTable->GetIon(26,56,0);
G4cout<<"The name of particleFe56 is : " << particleFe56->GetParticleName() <<G4endl;
G4cout<<"The current number of ions defined in IonTable is : " << ionTable->Entries() <<G4endl;
beamOn后面还是只设定1个event,此时的确可以看到有Fe56生成,名字是Fe56[0.0],而且ionTable里面的离子数目变成了7。
我的理解就是,其实当我们用Find或是Get来获取一个离子时,如果它的参数Z,A什么的的确是合理存在的,就会生成这个离子,然后ionTable里面就会多一个离子类型出来。
我继续添加代码:
ionTable->CreateAllIon();//
G4cout<<"The total number of ions defined in IonTable is : " << ionTable->Entries() <<G4endl;//3116
这样以后,会看到此时ionTable里面有3116个离子类型存在。
如果我添加
ionTable->DumpTable(particleName="ALL");
后,的确可以看到这些离子被显示出来,太多了,看不过来。
经过上面的测试后,我觉得其实最开始只有那6个离子被默认创建并放在那个fIonList里面,其余的离子无非是后来用的时候才被添加进去的。
我们这里说的离子Ion是不是电子全被剥光了的呢?我想是的。
不知道我的理解是否正确,开个帖子,引个话题,希望各位和我一起讨论。
转自www.52mc.net
|
|