except ImportError, e:
import simplejson as json
-from django.contrib.csrf.middleware import csrf_exempt
+from django.views.decorators.csrf import csrf_exempt
from htsworkflow.frontend.auth import require_api_key
from htsworkflow.frontend.experiments.models import FlowCell, Lane, LANE_STATUS_MAP
-from htsworkflow.frontend.samples.changelist import ChangeList
+from htsworkflow.frontend.experiments.admin import LaneOptions
+from htsworkflow.frontend.samples.changelist import HTSChangeList
from htsworkflow.frontend.samples.models import Antibody, Library, Species, HTSUser
+from htsworkflow.frontend.samples.admin import LibraryOptions
from htsworkflow.frontend.samples.results import get_flowcell_result_dict
from htsworkflow.frontend.bcmagic.forms import BarcodeMagicForm
from htsworkflow.pipelines.runfolder import load_pipeline_run_xml
from htsworkflow.pipelines import runfolder
from htsworkflow.pipelines.eland import ResultLane
+from htsworkflow.pipelines.samplekey import SampleKey
from htsworkflow.util.conversion import unicode_or_none, parse_flowcell_id
from htsworkflow.util import makebed
from htsworkflow.util import opener
'bcmagic': BarcodeMagicForm()
}
+LOGGER = logging.getLogger(__name__)
+
def count_lanes(lane_set):
single = 0
paired = 1
cl.result_count = unicode(cl.paginator._count)
return {'library_list': records }
-def library(request):
+
+def library(request, todo_only=False):
+ queryset = Library.objects.filter(hidden__exact=0)
+ filters = {'hidden__exact': 0}
+ if todo_only:
+ filters[lane] = None
# build changelist
- fcl = ChangeList(request, Library,
+ fcl = HTSChangeList(request, Library,
list_filter=['affiliations', 'library_species'],
search_fields=['id', 'library_name', 'amplified_from_sample__id'],
list_per_page=200,
- queryset=Library.objects.filter(hidden__exact=0)
+ model_admin=LibraryOptions(Library, None),
+ extra_filters=filters
)
- context = { 'cl': fcl, 'title': 'Library Index'}
+ context = { 'cl': fcl, 'title': 'Library Index', 'todo_only': todo_only}
context.update(create_library_context(fcl))
t = get_template('samples/library_index.html')
c = RequestContext(request, context)
return HttpResponse( t.render(c) )
+def library_not_run(request):
+ return library(request, todo_only=True)
+
+
def library_to_flowcells(request, lib_id):
"""
Display information about all the flowcells a library has been run on.
"""
-
try:
- lib = Library.objects.get(id=lib_id)
+ lib = Library.objects.get(id=lib_id)
except:
- return HttpResponse("Library %s does not exist" % (lib_id))
+ raise Http404('Library %s does not exist' % (lib_id,))
flowcell_list = []
flowcell_run_results = {} # aka flowcells we're looking at
lane_summary_list = []
eland_results = []
for fc, lane_number in flowcell_list:
- lane_summary, err_list = _summary_stats(fc, lane_number)
+ lane_summary, err_list = _summary_stats(fc, lane_number, lib_id)
lane_summary_list.extend(lane_summary)
eland_results.extend(_make_eland_results(fc, lane_number, flowcell_run_results))
if username is not None:
user = HTSUser.objects.get(username=username)
query.update({'library__affiliations__users__id':user.id})
- fcl = ChangeList(request, Lane,
+ fcl = HTSChangeList(request, Lane,
list_filter=[],
search_fields=['flowcell__flowcell_id', 'library__id', 'library__library_name'],
list_per_page=200,
+ model_admin=LaneOptions,
queryset=Lane.objects.filter(**query)
)
return HttpResponse(bedgen, mimetype="application/x-bedfile")
-def _summary_stats(flowcell_id, lane_id):
+def _summary_stats(flowcell_id, lane_id, library_id):
"""
Return the summary statistics for a given flowcell, lane, and end.
"""
run = load_pipeline_run_xml(xmlpath)
gerald_summary = run.gerald.summary.lane_results
- for end in range(len(gerald_summary)):
- end_summary = run.gerald.eland_results.results[end]
- if end_summary.has_key(lane_id):
- eland_summary = run.gerald.eland_results.results[end][lane_id]
- else:
- eland_summary = ResultLane(lane_id=lane_id, end=end)
+ key = SampleKey(lane=lane_id, sample='s')
+ eland_results = list(run.gerald.eland_results.find_keys(key))
+ key = SampleKey(lane=lane_id, sample=library_id)
+ eland_results.extend(run.gerald.eland_results.find_keys(key))
+ for key in eland_results:
+ eland_summary = run.gerald.eland_results.results[key]
# add information to lane_summary
eland_summary.flowcell_id = flowcell_id
- if len(gerald_summary) > end and gerald_summary[end].has_key(lane_id):
- eland_summary.clusters = gerald_summary[end][lane_id].cluster
- else:
- eland_summary.clusters = None
+
+ read = key.read-1 if key.read is not None else 0
+ try:
+ eland_summary.clusters = gerald_summary[read][key.lane].cluster
+ except (IndexError, KeyError) as e:
+ eland_summary.clustes = None
eland_summary.cycle_width = cycle_width
if hasattr(eland_summary, 'genome_map'):
eland_summary.summarized_reads = runfolder.summarize_mapped_reads(
# grab some more information out of the flowcell db
flowcell = FlowCell.objects.get(flowcell_id=flowcell_id)
#pm_field = 'lane_%d_pM' % (lane_id)
- lane_obj = flowcell.lane_set.get(lane_number=lane_id)
+ lanes = flowcell.lane_set.filter(lane_number=lane_id)
eland_summary.flowcell = flowcell
- eland_summary.lane = lane_obj
+ eland_summary.lanes = lanes
summary_list.append(eland_summary)
#except Exception, e:
# summary_list.append("Summary report needs to be updated.")
- # logging.error("Exception: " + str(e))
+ # LOGGER.error("Exception: " + str(e))
return (summary_list, err_list)
return []
flowcell = FlowCell.objects.get(flowcell_id=flowcell_id)
- lane = flowcell.lane_set.get(lane_number=lane_number)
+ lanes = flowcell.lane_set.filter(lane_number=lane_number)
# Loop throw storage devices if a result has been archived
storage_id_list = []
if cur_fc is not None:
results = []
for cycle in cur_fc.keys():
- result_path = cur_fc[cycle]['eland_results'].get(lane, None)
- result_link = make_result_link(fc_id, cycle, lane, result_path)
+ result_path = cur_fc[cycle]['eland_results'].get(lanes[0], None)
+ result_link = make_result_link(fc_id, cycle, lanes[0], result_path)
results.append({'flowcell_id': fc_id,
'flowcell': flowcell,
'run_date': flowcell.run_date,
'cycle': cycle,
- 'lane': lane,
+ 'lane': lanes[0],
'summary_url': make_summary_url(flowcell_id, cycle),
'result_url': result_link[0],
'result_label': result_link[1],
for lane in lib.lane_set.all():
lane_info.append( {'flowcell':lane.flowcell.flowcell_id,
'lane_number': lane.lane_number,
+ 'lane_id': lane.id,
'paired_end': lane.flowcell.paired_end,
'read_length': lane.flowcell.read_length,
'status_code': lane.status,
context.update(SAMPLES_CONTEXT_DEFAULTS)
return render_to_response('registration/profile.html', context,
context_instance=RequestContext(request))
-
-