docs: def createConns(self):
          # SONATA method - works but same results as NeuroMLlite
          '''
          from sonata.io import File, Edge
          data = File(data_files=[self.subs('$NETWORK_DIR/excvirt_cortex_edges.h5')],
                  data_type_files=[self.subs('$NETWORK_DIR/excvirt_cortex_edge_types.csv')])
          '''
  
          # NeuroMLlite Method
          self.edges_info = {}
          self.conn_info = {}
  
          synMechSubs = {'level_of_detail': 'mod', 
                          'erev': 'e'}
          
          if 'edges' in self.network_config['networks']:
              for e in self.network_config['networks']['edges']:
                  edges_file = self.subs(e['edges_file'])
                  edge_types_file = self.subs(e['edge_types_file'])
  
                  print("\nLoading edges from %s and %s"%(edges_file,edge_types_file))
  
                  h5file=tables.open_file(edges_file,mode='r')
  
                  print("Opened HDF5 file: %s"%(h5file.filename))
                  self.parse_group(h5file.root.edges)
                  h5file.close()
                  self.edges_info[self.current_edge] = load_csv_props(edge_types_file)
                  self.current_edge = None
  
          for conn in self.conn_info:
              
              pre_node = self.conn_info[conn]['pre_node']
              post_node = self.conn_info[conn]['post_node']
              
              print('   Adding projection %s: %s -> %s '%(conn, pre_node, post_node))
  
              # add all synMechs in this projection to netParams.synMechParams
              for type in self.edges_info[conn]:
                  syn_label = self.edges_info[conn][type]['dynamics_params'].split('.')[0]
                  if syn_label not in sim.net.params.synMechParams:
                      dynamics_params_file = self.subs(self.network_config['components']['synaptic_models_dir']) +'/'+self.edges_info[conn][type]['dynamics_params']        
                      syn_dyn_params = load_json(dynamics_params_file)
                      synMechParams = dict(syn_dyn_params)
                      for k in synMechParams:  # replace keys
                          if k in synMechSubs:
                              synMechParams[synMechSubs[k]] = synMechParams.pop(k) 
                      synMechParams['mod'] = self.edges_info[conn][type]['model_template']
                      sim.net.params.synMechParams[syn_label] = synMechParams
                      print('   Added synMech %s '%(syn_label))
  
              # add individual connections in this projection
              for i in range(len(self.conn_info[conn]['pre_id'])):
                  pre_id = self.conn_info[conn]['pre_id'][i]
                  post_id = self.conn_info[conn]['post_id'][i]
                  pre_gid = self.cell_info[pre_node]['gid_from_id'][pre_id] 
                  post_gid = self.cell_info[post_node]['gid_from_id'][post_id]
  
  
                  if post_gid in sim.net.gid2lid:
  
                      type = self.conn_info[conn]['edge_type_id'][i]
  
                      print('   Conn: type %s pop %s (id %s) -> pop %s (id %s) MAPPED TO: cell gid %s -> cell gid %s'%(type,pre_node,pre_id,post_node,post_id, pre_gid,post_gid))
                      #print(self.edges_info[conn][type])
                      
                      connParams = {}
                      postCell = sim.net.cells[sim.net.gid2lid[post_gid]]
  
                      # preGid
                      connParams['preGid'] = pre_gid
  
                      # synMech
                      connParams['synMech'] = self.edges_info[conn][type]['dynamics_params'].split('.')[0]                
                      
                      # weight
                      sign = syn_dyn_params['sign'] if 'sign' in syn_dyn_params else 1
                      try:
                          weight = self.conn_info[conn]['syn_weight'][i] 
                      except:
                          weight = self.edges_info[conn][type]['syn_weight'] if 'syn_weight' in self.edges_info[conn][type] else 1.0
                      connParams['weight'] = sign*weight
                      
                      # delay
                      connParams['delay'] = self.edges_info[conn][type]['delay'] if 'delay' in self.edges_info[conn][type] else 0
                      
                      # sec 
                      sec_id = self.conn_info[conn]['sec_id'][i] 
                      connParams['sec'] = postCell.secLists['SONATA_sec_id'][sec_id]
  
                      # loc
                      connParams['loc'] = self.conn_info[conn]['sec_x'][i] 
  
                      # add connection
                      postCell.addConn(connParams)