def set_data_field(record, field_name, field_val):
assert(len(record.samples) == 1)
new_format = record.FORMAT
new_fields = new_format.split(':')
if not(field_name in new_fields):
new_fields = new_fields + [field_name]
new_format = ':'.join(new_fields)
sample_call = get_record_sample_call(record)
data = sample_call.data
data_dict = data._asdict()
data_dict[field_name] = field_val
new_sample_vals = []
for field in new_fields:
new_sample_vals.append(data_dict[field])
# Note - the old way of passing the fields to pyVCF is memory intensive
# because a fresh type is allocated for each call to make_calldata_tuple
#data_instantiator = vcf.model.make_calldata_tuple(new_fields)
#data = data_instantiator(*new_sample_vals)
data = FakeNamedTuple(new_fields, new_sample_vals)
sample_call.data = data
record.samples[0] = sample_call
record.FORMAT = new_format
评论列表
文章目录