from neuron import h, gui


class Cell:
    def __init__(self, gid):
        self._gid = gid

        self._define_geometry()
        self._define_biophysics()

        self.syn = h.ExpSyn(self.dend(0.5))
        self.syn.tau = 2  # ms

        self.nc = h.NetCon(self.soma(0.5)._ref_v, None, sec=self.soma)
        self.spike_times = h.Vector()
        self.nc.record(self.spike_times)
    
    def _define_geometry(self):
        soma = h.Section(name='soma', cell=self)
        dend = h.Section(name='dend', cell=self)
        dend.connect(soma)

        dend.diam = 2
        dend.L = 50

        soma.diam = 10
        soma.L = 10

        self.soma = soma
        self.dend = dend
        self.all = soma.wholetree()
    
    def _define_biophysics(self):
        self.soma.insert('hh')
        for sec in self.all:
            sec.insert('pas')
            for seg in sec:
                seg.pas.e = -65
    
    def __repr__(self):
        return 'Cell[{}]'.format(self._gid)
