Geant4 가이드

Ntuple 추가

Analysis Manager

이벤트 당 볼륨의 에너지 축적량을 저장하기 위해서 "step" Ntuple 외에 "event" Ntuple 을 OTRunAction 에서 추가 한다.

analysisManager -> CreateNtuple("event", "energy deposit per event in volume-1");
analysisManager -> CreateNtupleDColumn("edep1");
analysisManager -> FinishNtuple();

값을 채워넣을 때 순서가 중요하므로 이 전의 Ntuple이 끝나고 난 후 (FinishNtuple() 함수 이후에) 다음과 위와 같이 추가하도록 하자. 이때 이 Ntuple의 번호는 1번(두번째)이 된다. 기존 0번 Ntuple을 채울 때

analysisManager -> FillNtupleIColumn(0, eventID);
analysisManager -> AddNtupleRow();

와 같이 FillNtupleIColumn(변수ID,값) 과 AddNtupleRow() 을 사용하였다. 하지만 1번 혹은 더 큰 번호를 가진 ntuple의 경우

analysisManager -> FillNtupleDColumn(1, 0, edep1);
analysisManager -> AddNtupleRow(1);

와 같이 FillNtupleIColumn(Ntuple 번호,변수ID,값) 과 AddNtupleRow(ntuple-ID) 처럼 Ntuple 번호 를 첫번째 매개변수로 써주어야 한다.

두개 이상의 Ntuple을 가지고 있을 때 csv 파일 형식을 사용할 경우 Ntuple 하나 당 파일이 하나씩 추가되는 방식을 사용한다. 예제의 경우 편의를 위해서 두개 이상의 Ntuple이 하나의 파일에 저장되는 형식인 root 를 이용하였다(g4csv.hh 을 모두 g4root.hh 로 변경).

댓글

댓글 본문
작성자
비밀번호
  1. ejungwoo
    하나 하나 세는 것 밖에는 방법이 없습니다.
    대화보기
    • PKA. SKA2
      스텝컷 트랙컷 입자생성컷 등을 다푼다고 하면 어느정도까지 확인을 할 수 있는지 혹시 알수 있는 방법이 있나요??
      대화보기
      • ejungwoo
        cascade 양은 입자가 가질 수 있는 physics procss 종류, 스텝 컷, 트랙 컷, 입자 생성 컷(range cut) 등에 영향을 받겠지만 일반적으로 그 양을 계산 하기는 어려울 것 같습니다.
        대화보기
        • PKA. SKA
          안녕하세여, 이전질문에 연달아서 조금더 질문드릴꼐요
          그렇다면, PKA와 SKA이상의 아래에서 말씀해주셧던
          - SKA : TrackID>N, ParentID>N 이 조건으로 SKA를 계산하면 일반적으로
          SKA이상의 모든 입자들이 나오는것으로 생각되는데 그렇다면 어느정도 까지 나오는지 궁급합니다.

          예를 들어 Si의 Threshold Energy가 28eV인데 28eV 까지 계속 분열되어 총 cascade양을 알 수 있는건지 아니면
          적당한 cutoff가 있어서 충돌이 SKA TKA이후로는 발생이 안되는건지 궁급합니다
        • ejungwoo
          SKA: TrackID>1 ParentID>1
          입니다만, 주의할점이 몇 가지 있습니다.

          여기에는 SKA 에서 생성된 Secondary 도 포함이 되고 또 SKA의 Secondary의 Secondary ... 도 포함이 됩니다.
          즉 위 조건이 의미하는 바는 K>=2 인 K'th order knock-on atom 이 됩니다.

          또 트랙의 번호가 붙는 방식은 먼저 생성된 순서대로 붙기 때문에
          단순히 TrackID와 ParentID 만으로 2 이상인 K값을 알 수 없습니다.
          Geant4는 (제가 아는 한) 이 값을 저장하지 않기 때문에
          사용자가 이 정보를 따로 저장하지 않는 한 K값을 알기 어렵습니다.

          ParentID가 1번 이후에 172번 이라면 2번부터 171번 트랙은 Secondary 를 생성하지 않았다는 뜻이고 충분히 가능한 일입니다. 2번 부터 172번 트랙은 모두 1번 트랙의 Secondary가 되겠네요.
          대화보기
          • PKA, SKA
            답변감사합니다.

            추가로 몇가지 더 질문 하도록 하겠습니다.

            예를 들어 Neutron 조사를 10000번을 반복해서 하는 Sim을 생각해 보겠습니다.
            그럼 각각의 Sim은 독릭접이므로 Event 는 1~10000까지 있을 것입니다.

            각 Event는 중성자를 1번쏘는 것이구요
            즉 중성자의 Track ID=1 Parent ID=0입니다.
            그리고 이들의 PKA는 Track ID>1 Parent=1이 될것입니다.

            그렇다면 이때 SKA의 TrackID와 Parent ID는 어떻게 되는건가요?
            아래 글로 이해하기에는 TrackID > 1, ParentID >1로 이해됩니다
            제가 아직 개념이 정확히 안잡힌거 같네요 틀린 내용있으면 바로 잡아주세요

            아 그리고 FTFP_BERT_HP는 single Scattering model이라 SKA가 안 생길수도 있다고 생각이 드는데요
            multi SCattring model인 EMStandardNR에서는 결과 파일에서 ParentID 값이 띄엄 띄엄 나오는 것으로 확인됩니다. 예를 들어 Parent ID = 10 그다음 값은 Parent ID = 18 가운데 값이 없고 이런식으로 output이 나온느데 이건 cutoff 때문에 중간값이 안나온다고 생각하면 될까요?
            대화보기
            • ejungwoo
              TrackID 와 ParentID 에 대해서 어떻게 알고 계시는지 잘 모르겠습니다만, 명확하게 하기 위해서 예를 들어보겠습니다.
              처음에 N개의 초기 입자를 쏜다고 했을 때 N개의 입자는 1번부터 N번까지의 TrackID 를 가지게 됩니다.
              중간에 M번의 트랙이 PKA를 생성했을 때 PKA 에서 생성된 트랙의 TrackID는 N+1, ParentID는 M번이 됩니다.
              즉 TrackID는 트랙이 추가되는 순서대로 붙고 ParentID는 생성의 원인이 되는 트랙의 TrackID 가 됩니다.

              이 시뮬레이션에서 각 트랙 분류는 다음과 같이 쓸 수 있습니다:
              - 초기입자 : TrackID=1~N, ParentID=0
              - PKA : TrackID>N, ParentID=1~N
              - SKA : TrackID>N, ParentID>N
              이 됩니다.

              정확하게 확인하기 위해서는 Visualization 을 켜고
              "/tracking/verbose 2" 명령으로 Tracking 내용을 Secondary 생성 내용까지 출력하도록 한 후,
              런을 실행하면 화면에 출력되는 정보에서 Secondary를 포함한 트랙의 TrackID와 ParentID를 확인할 수 있습니다.

              Tracking Action에서 아무 데이터를 얻을 수 없었다면 위 내용과 같이 조건을 부여하지 않았거나
              SKA가 생성되지 않았을 가능성이 클 것 같습니다.
              대화보기
              • PKA, SKA
                안녕하세요
                제가 쏜 입자에 대해 정보를 얻고 싶으면 tracking action 에서 TrackID=1 ParentID=0으로 정보를 얻을 수 있습니다. 마찬가지로 secodary에 대한 정보를 얻고 싶으면 TrackID>0 ParentID=1을 넣어주면 PKA(Primary knock on atom) 즉 첫번쨰로 맞아서 튕겨 나간 secondary에 의한 정보를 얻을 수 있습니다.

                같은방식으로 PKA에 의해 맞아서 움직이게 되는 SKA(Secondary knock on atom)는 TrackID>0 이고 ParentID=2이면 얻어질 것 같은데 계산을 돌려보니 아무 데이터도 얻어 지지 않습니다.

                Geant4에서 이들에 대한 정보를 만들지 않는것인지 아니면 코딩을 잘못한것인지 궁금하네요 혹시 위의 질문한 내용을 하기위해서는 어떤 옵션 같은 것을 추가해야 볼수 있는건가요?

                physics list 는 FTFP_BERT_HP를 사용했습니다. 참고로 FTFP_BERT_HP를 사용 했을 때는 Parent ID =1 까지만 결과가 나왔고 EMstandardNR을 쓰면 Parent ID가 일관성 없이 Parent ID =253 Parent ID 172 이런식으로 띄엄 띄엄 나오더라구요....
              버전 관리
              ejungwoo
              현재 버전
              선택 버전
              graphittie 자세히 보기