【问题标题】:Cannot repopulate ElectrodeGroup datajoint table无法重新填充 ElectrodeGroup 数据联合表
【发布时间】:2021-10-31 22:04:52
【问题描述】:

我是加州大学旧金山分校 Loren Frank 实验室的一名研究员,他使用数据联合和 nwb 格式的文件。我对定义 ElectrodeGroup 表中条目的代码进行了一些更改,并希望通过删除表中的条目并使用新代码重新生成它来测试这些。我能够删除该条目,但无法重新填充它。特别是,当我运行 ElectrodeGroup.populate() 或 ElectrodeGroup.populate({"nwb_file_name": my_file_name}) 时,不会对表进行任何更改。我确认我删除并尝试重新生成的电极组是在原始 nwb 文件中定义的。我正在寻求有关为什么 populate 命令似乎在这里不起作用的输入。提前感谢您的帮助!

【问题讨论】:

    标签: datajoint


    【解决方案1】:

    该用户还通过其他渠道联系了我们的团队。参考this schema,为未来的用户分享以下解决方案。简而言之,填充过程是为唯一的上游主键保留的。

    由于 ElectrodeGroup 唯一的上游表依赖是 Session,因此只有当该会话没有电极组时才会调用 make 方法。这是因为从 DataJoint 的角度来看,关于该表应该存在什么的唯一“保证”知识仅由相关上游记录的存在/不存在定义。由于 'new' 主要的 'electrode_group_name' 属性是由 ElectrodeGroup 表本身定义的,DataJoint 不知道 make 将创建多少个副本,因此每个 Session 只需调用 make 1 次,期望单个 make 调用完全定义表将使用的所有可能的电极组名称值。如果该会话只有一个值,则无需进行任何工作,因此不会发生 make() 调用。

    有几种可能的解决方案:

    1. 显式建模电极组,使用表格定义电极组的存在(例如 ElectrodeGroupConfiguration)。然后,此 ElectrodeGroup 将从 Session 和 ElectrodeGroupConfiguration 继承主键。将调整 ElectrodeGroup make 函数以跨上游表加载该唯一键。
    2. 调整 make 函数以处理部分插入/更新情况,并在需要发生此类“异常”更新时直接使用所需的主键调用 make 函数。

    方法 #1 对 DataJoint 数据模型来说是“最干净的”(使用 make/populate 显式建模数据依赖关系),而方法 #2 是以受控方式稍微“转义”DataJoint 数据模型以实现所需的架构/数据结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-11
      • 2020-10-21
      • 2021-01-29
      相关资源
      最近更新 更多