AI/neuron

[neuron][파이썬] 10. 여러 섹션 만들기 - Create the sections

내만 2022. 7. 21. 11:23
728x90
반응형

 

 

 

 

 

🙆‍♂️ 시작 설정


from neuron import h
from neuron.units import ms, mV

h.load_file('stdrun.hoc')

시작하기 전에 라이브러리들을 import 시켜주고

 

%matplotlib notebook

주피터 노트북에서 하고 있다면 이 코드도 넣어줍니다.

 

 

 

🙋‍♂️ 섹션 생성


섹션 = 셀입니다.

셀은 ball과 stick으로 구성되는데 ball은 soma(세포체)이고 stick은 dendrites(수상 둘기) 입니다.

 

이전에 배웠던 방법으로는 여러 셀을 만들 수 없습니다. 클래스로 정의해서 만들어야 합니다.

class BallAndStick:
    def __init__(self):
        self.soma = h.Section(name='soma', cell=self)
        self.dend = h.Section(name='dend', cell=self)

 

이렇게 BallAndStick 클래스를 선언하고 Section을 생성해야 합니다. __init__함수는 생성자입니다.

 

h.toplogy() 함수를 통해서 섹션이 생성되었는지 확인해보면

h.topology()

1.0이 출력되지만 생성된 섹션은 보이지 않습니다.

그 이유는 아직 class만 선언한거지 세포를 만든 것은 아닙니다.

 

my_cell = BallAndStick()

변수로 해서 생성해주고 h.toplogy() 함수로 확인해보면

 

이번엔 생성이 된 모습입니다. 그러나 앞에<__main__ .... 0x000...> 부분이 사람 친화적으로 나오지 않아서 불편합니다.

그냥 영어단어만 나오도록 설정을 하려면

 

class BallAndStick:
    def __init__(self):
        self.soma = h.Section(name='soma', cell=self)
        self.dend = h.Section(name='dend', cell=self)
    def __repr__(self):
        return 'BallAndStick'

def __repr__부분을 추가해서 BallAndStick이라는 단어가 나오도록 코딩합니다.

결과를 다시 확인해보면

 

잘 설정되어 나오는 모습입니다. 그러나 또 문제점이 생깁니다.

soma와 dend가 한 세트가 아닌 두 세트가 있다면

 

네. 구분이 안됩니다. 이를 구분하기 위해서는 다시 class의 내용을 수정해줘야 합니다.

 

class BallAndStick:
    def __init__(self, gid):
        self._gid = gid
        self.soma = h.Section(name='soma', cell=self)
        self.dend = h.Section(name='dend', cell=self)
    def __repr__(self):
        return 'BallAndStick[{}]'.format(self._gid)

gid라는 개념을 추가하여 애초에 생성할 때 id값을 넣어서 생성하도록 합니다.

 

my_cell = BallAndStick(0)
my_cell2 = BallAndStick(1)

h.topology()

섹션 생성 후 확인해 보면

 

인덱스 값이 잘 적용된 모습입니다.

 

728x90
반응형