Skip to content

Commit

Permalink
single-stranded library fields for qpcr assays A,B #145
Browse files Browse the repository at this point in the history
  • Loading branch information
MatthewMah committed May 2, 2024
1 parent 53212a7 commit ad0dcee
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 4 deletions.
4 changes: 2 additions & 2 deletions samples/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -565,15 +565,15 @@ class LibraryForm(UserModelForm):

class Meta:
model = Library
fields = ['well_position', 'reich_lab_library_id', 'p5_index', 'p7_index', 'p5_barcode', 'p7_barcode', 'nanodrop', 'qpcr_ds', 'plate_id', 'fluidx_barcode', 'notes']
fields = ['well_position', 'reich_lab_library_id', 'p5_index', 'p7_index', 'p5_barcode', 'p7_barcode', 'nanodrop', 'qpcr_ds', 'qpcr_assay_a_1_ss', 'qpcr_assay_a_2_ss', 'qpcr_assay_b_1_ss', 'qpcr_assay_b_2_ss', 'assay_a_percent_inhibition', 'assay_b_total_molecules', 'plate_id', 'fluidx_barcode', 'notes']
widgets = {
'notes': Textarea(attrs={'cols': 60, 'rows': 2}),
}

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['reich_lab_library_id'].disabled = True
for option in ['nanodrop', 'qpcr_ds']:
for option in ['nanodrop', 'qpcr_ds', 'qpcr_assay_a_1_ss', 'qpcr_assay_a_2_ss', 'qpcr_assay_b_1_ss', 'qpcr_assay_b_2_ss', 'assay_a_percent_inhibition', 'assay_b_total_molecules']:
self.fields[option].required = False
if self.instance:
layout_elements = self.instance.librarybatchlayout_set
Expand Down
48 changes: 48 additions & 0 deletions samples/migrations/0181_auto_20240502_1523.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Generated by Django 3.0.3 on 2024-05-02 19:23

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('samples', '0180_auto_20240502_1517'),
]

operations = [
migrations.AddField(
model_name='library',
name='assay_a_percent_inhibition',
field=models.FloatField(null=True),
),
migrations.AddField(
model_name='library',
name='assay_b_total_molecules',
field=models.BigIntegerField(null=True),
),
migrations.AddField(
model_name='library',
name='qpcr_assay_a_1_ss',
field=models.DecimalField(decimal_places=2, help_text='SS qpcr Assay A_1', max_digits=4, null=True),
),
migrations.AddField(
model_name='library',
name='qpcr_assay_a_2_ss',
field=models.DecimalField(decimal_places=2, help_text='SS qpcr Assay A_2', max_digits=4, null=True),
),
migrations.AddField(
model_name='library',
name='qpcr_assay_b_1_ss',
field=models.DecimalField(decimal_places=2, help_text='SS qpcr Assay B_1', max_digits=4, null=True),
),
migrations.AddField(
model_name='library',
name='qpcr_assay_b_2_ss',
field=models.DecimalField(decimal_places=2, help_text='SS qpcr Assay B_2', max_digits=4, null=True),
),
migrations.AlterField(
model_name='library',
name='qpcr_ds',
field=models.DecimalField(decimal_places=2, help_text='DS qpcr value', max_digits=4, null=True),
),
]
36 changes: 34 additions & 2 deletions samples/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
from .spreadsheet import *
from .validation import *

import decimal
import re, string

REICH_LAB = 'Reich Lab'
Expand Down Expand Up @@ -65,6 +66,13 @@ def get_value(obj, *property_name_chain, default=''):
if callable(current_object):
current_object = current_object()
return current_object

# convert a non-empty string using a coversion function
# or return None
def value_convert_or_none(value_str, conversion_function):
if len(value_str) > 0:
return conversion_function(value_str)
return None

class Timestamped(models.Model):
creation_timestamp = models.DateTimeField(default=timezone.now, null=True)
Expand Down Expand Up @@ -2089,7 +2097,13 @@ class Library(Timestamped):
fluidx_barcode = models.CharField(max_length=12, blank=True, help_text='Physical barcode on FluidX tube')

nanodrop = models.DecimalField(max_digits=5, decimal_places=2, null=True)
qpcr_ds = models.DecimalField(max_digits=4, decimal_places=2, null=True)
qpcr_ds = models.DecimalField(max_digits=4, decimal_places=2, null=True, help_text='DS qpcr value')
qpcr_assay_a_1_ss = models.DecimalField(max_digits=4, decimal_places=2, null=True, help_text='SS qpcr Assay A_1')
qpcr_assay_a_2_ss = models.DecimalField(max_digits=4, decimal_places=2, null=True, help_text='SS qpcr Assay A_2')
qpcr_assay_b_1_ss = models.DecimalField(max_digits=4, decimal_places=2, null=True, help_text='SS qpcr Assay B_1')
qpcr_assay_b_2_ss = models.DecimalField(max_digits=4, decimal_places=2, null=True, help_text='SS qpcr Assay B_2')
assay_a_percent_inhibition = models.FloatField(null=True)
assay_b_total_molecules = models.BigIntegerField(null=True)

# single stranded libraries have indices directly assigned
p5_index = models.ForeignKey(P5_Index, on_delete=models.PROTECT, null=True)
Expand Down Expand Up @@ -2161,6 +2175,12 @@ def spreadsheet_header(cumulative=False):
'p7_barcode',
'nanodrop',
'qpcr_ds',
'qpcr_assay_a_1_ss',
'qpcr_assay_a_2_ss',
'qpcr_assay_b_1_ss',
'qpcr_assay_b_2_ss',
'assay_a_percent_inhibition',
'assay_b_total_molecules',
'plate_id',
'fluidx_barcode',
'notes',
Expand All @@ -2179,6 +2199,12 @@ def to_spreadsheet_row(self, cumulative=False):
get_value(self.library, 'p7_barcode', 'label'),
get_value(self.library, 'nanodrop'),
get_value(self.library, 'qpcr_ds'),
get_value(self.library, 'qpcr_assay_a_1_ss'),
get_value(self.library, 'qpcr_assay_a_2_ss'),
get_value(self.library, 'qpcr_assay_b_1_ss'),
get_value(self.library, 'qpcr_assay_b_2_ss'),
get_value(self.library, 'assay_a_percent_inhibition'),
get_value(self.library, 'assay_b_total_molecules'),
get_value(self.library, 'plate_id'),
get_value(self.library, 'fluidx_barcode'),
get_value(self.library, 'notes')
Expand Down Expand Up @@ -2222,7 +2248,13 @@ def from_spreadsheet_row(self, headers, arg_array, user):
library.p7_barcode = None

library.nanodrop = float(arg_array[headers.index('nanodrop')])
library.qpcr = float(arg_array[headers.index('qpcr_ds')])
library.qpcr_ds = value_convert_or_none(arg_array[headers.index('qpcr_ds')], decimal.Decimal)
library.qpcr_assay_a_1_ss = value_convert_or_none(arg_array[headers.index('qpcr_assay_a_1_ss')], decimal.Decimal)
library.qpcr_assay_a_2_ss = value_convert_or_none(arg_array[headers.index('qpcr_assay_a_2_ss')], decimal.Decimal)
library.qpcr_assay_b_1_ss = value_convert_or_none(arg_array[headers.index('qpcr_assay_b_1_ss')], decimal.Decimal)
library.qpcr_assay_b_2_ss = value_convert_or_none(arg_array[headers.index('qpcr_assay_b_2_ss')], decimal.Decimal)
library.assay_a_percent_inhibition = value_convert_or_none(arg_array[headers.index('assay_a_percent_inhibition')], float)
library.assay_b_total_molecules = value_convert_or_none(arg_array[headers.index('assay_b_total_molecules')], int)
library.plate_id = arg_array[headers.index('plate_id')]
library.fluidx_barcode = arg_array[headers.index('fluidx_barcode')]
library.notes = arg_array[headers.index('notes')]
Expand Down

0 comments on commit ad0dcee

Please sign in to comment.