Geant4 가이드

입자 생성 컷

설명

입자 생성 컷이란 트랙이 진행을 하면서 입자의 생성을 어느정도로 제한 할 것인가를 결정하는 컷이다. Geant4는 이 입자 생성컷을 범위 컷(생성된 입자가 진행할 수 있는 거리 컷) 형태로 설정한다(영어로 'range cut' 이라 한다). 따라서 범위 컷에 해당하는 입자의 에너지 컷은 입자와 물질의 종류에 따라서 달라진다. 입자 생성 컷을 조금 더 쉽게 설명하면 아래와 같다.

예를 들어서 감마의 범위 컷을 1 mm 로 설정했다고 하자. Geant4는 트랙이 진행하면서 생성된 입자들을 임시로 저장한다. 이렇게 저장된 새로운 감마들 중 해당 물질에서 1 mm 이상 진행 할 수 있는 에너지를 가진 감마들만 시뮬레이션 상에서 새로 생성된 입자(secondary particle)로 (스택에) 추가된다.

만약에 A라는 물질에서 1 mm 이상 진행하기 위한 감마의 에너지가 1 MeV 인데, 한 트랙에서 10개의 감마가 생성되었고 그 중 2개의 감마가 1 MeV 이상, 나머지는 1 MeV 이하일 때 시뮬레이션 상에서 새로 생성 되는 감마는 2개가 되는 식이다. 나머지 8개의 감마는 잃어버린 에너지로 남는다.

 

설정

입자 생성 컷을 설정하는 방법에는 두가지가 있다. 따로 설정하지 않는 경우 범위 컷의 기본 값은 1 mm 이다.

a. PhysicsList를 작성하는 경우

G4UserPhysicsList 클래스를 이용하여 PhysicsList를 작성하는 경우, SetCuts() 함수안에서 설정한다.

void MyPhysicsList::SetCuts()
{
  SetCutValue(1.*mm, "gamma");
  SetCutValue(2.*mm, "e-");
  SetCutValue(3.*mm, "e+");
  SetCutValue(4.*mm, "proton");
}

 혹은 간단하게 클래스 생성자 안에서 기본값(defaultCutValue)을 바꾸는 방법도 있다.

MyPhysicsList::MyPhysicsList()
{
  defaultCutValue = 10.*mm;
}

특정 볼륨(아래 코드에서 A 혹은 B)안에서 컷을 설정하려면 다음과 같은 방법이 있다.

void MyPhysicsList::SetCuts()
{
  G4ProductionCuts *cuts;
  G4Region *region;
  
  region = G4RegionStore::GetInstance() -> GetRegion("A");
  cuts = new G4ProductionCuts;
  cuts -> SetProductionCut(0.01*mm);
  region -> SetProdutionCuts(cuts);
}

혹은

void MyPhysicsList::SetCuts()
{
  G4ProductionCuts *cuts;
  G4Region *region;
  
  region = G4RegionStore::GetInstance() -> GetRegion("B");
  cuts = new G4ProductionCuts;
  cuts -> SetProductionCut(10.*mm, G4ProductionCuts::GetIndex("gamma"));
  cuts -> SetProductionCut(20.*mm, G4ProductionCuts::GetIndex("e-"));
  cuts -> SetProductionCut(30.*mm, G4ProductionCuts::GetIndex("e+"));
  cuts -> SetProductionCut(40.*mm, G4ProductionCuts::GetIndex("proton"));
  region -> SetProdutionCuts(cuts);
}

b. 커맨드 라인 혹은 매크로 이용

Geant4 커맨드 라인과 매크로

/run/setCut [cut] [Unit]

Range : cut >=0.0
Available Geant4 state(s) : PreInit Idle

Parameters

cut type d    
Unit type s Omittable : default value = mm Parameter candidates : pc km m cm mm um nm Ang fm parsec kilometer meter centimeter millimeter micrometer nanometer angstrom fermi

/run/setCutForAGivenParticle [particleName] [cut] [unit]

Set a cut value to a specific particle 
Usage: /run/setCutForAGivenParticle gamma 1. mm
Available Geant4 state(s) : PreInit Idle

Parameters

particleName type s   Parameter candidates : e- e+ gamma proton
cut type d   Parameter range : cut >=0.0
Unit type s Omittable : default value = mm Parameter candidates : pc km m cm mm um nm Ang fm parsec kilometer meter centimeter millimeter micrometer nanometer angstrom fermi

/run/SetCutForRegion [Region] [cut] [Unit]

Set cut value for a region
Availalble Geant4 state(s) : Idle

Parameters

Region type s    
cut type d   Parameter range : cut >=0.0
Unit type s Omittable : default value = mm Parameter candidates : pc km m cm mm um nm Ang fm parsec kilometer meter centimeter millimeter micrometer nanometer angstrom fermi

예시)

/run/setCuts 3. mm

/run/setCutForAGivenParticle e- 7. mm

/run/setCutForRegion detector 8. cm

 

참고

댓글

댓글 본문
  1. ejungwoo
    main 프로그램에서 physicsList 를 만들 때 아래처럼 physics 를 등록해 보시겠어요?

    G4VModularPhysicsList* physicsList = new ...
    physicsList -> RegisterPhysics(new G4StepLimiterPhysics()); // 스텝 컷
    physicsList -> RegisterPhysics(new SpecialCutsBuilder()); // 트랙 컷
    대화보기
    • 찬천
      정우님 덕분에 많이 배우고 있습니다. 다름이 아니라 지금 뮤온입자 충돌 시뮬레이션을 돌리고 있는데 입자 생성 컷을 조정하고 싶습니다. 기본값이 1mm인데 커멘드 라인 사용해서 컷을 올리는 것은 되는데 1mm보다 낮은 값을 줬을 때는 조정이 되지 않는 것 같습니다. 값을 낮출 순 없을까요?
    버전 관리
    ejungwoo
    현재 버전
    선택 버전
    graphittie 자세히 보기