Merge branch 'template-updates' into 'dev'

template updates

See merge request epi2melabs/workflows/wf-transcriptomes!96
This commit is contained in:
Sarah Griffiths 2023-05-09 10:09:33 +00:00
commit fcefe9e138
4 changed files with 123 additions and 158 deletions

View File

@ -4,27 +4,31 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [unreleased]
### Changed
- LICENSE to Oxford Nanopore Technologies PLC. Public License Version 1.0.
## [v0.1.10]
### Updated
### Changed
- Condition sheet parameter description fixed to CSV
- Update fastqingress
## [v0.1.9]
### Updated
### Changed
- Simplify JAFFAL docs
## [v0.1.8]
### Changed
- Updated description in manifest
- Description in manifest
## [v0.1.7]
### Updated
### Changed
- `-profile conda` is no longer supported, users should use `-profile standard` (Docker) or `-profile singularity` instead
- `nextflow run epi2me-labs/wf-transcriptomes --version` will now print the workflow version number and exit
- Use parameter `--transcriptome-source` to define precalculated, reference-based or denovo
## [v0.1.6]
### Updated
### Changed
- Removed sanitize option
- Reduce size of differential expression data.
### Added

188
LICENSE
View File

@ -1,12 +1,5 @@
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
(c) 2021- Oxford Nanopore Technologies Ltd.
Mozilla Public License Version 2.0
==================================
Oxford Nanopore Technologies PLC. Public License Version 1.0
=============================================================
1. Definitions
--------------
@ -17,7 +10,7 @@ Mozilla Public License Version 2.0
1.2. "Contributor Version"
means the combination of the Contributions of others (if any) used
by a Contributor and that particular Contributor's Contribution.
by a Contributor and that particular Contributors Contribution.
1.3. "Contribution"
means Covered Software of a particular Contributor.
@ -28,59 +21,46 @@ Mozilla Public License Version 2.0
Form, and Modifications of such Source Code Form, in each case
including portions thereof.
1.5. "Incompatible With Secondary Licenses"
means
(a) that the initial Contributor has attached the notice described
in Exhibit B to the Covered Software; or
(b) that the Covered Software was made available under the terms of
version 1.1 or earlier of the License, but not also under the
terms of a Secondary License.
1.6. "Executable Form"
1.5. "Executable Form"
means any form of the work other than Source Code Form.
1.7. "Larger Work"
1.6. "Larger Work"
means a work that combines Covered Software with other material, in
a separate file or files, that is not Covered Software.
1.8. "License"
1.7. "License"
means this document.
1.9. "Licensable"
1.8. "Licensable"
means having the right to grant, to the maximum extent possible,
whether at the time of the initial grant or subsequently, any and
all of the rights conveyed by this License.
1.10. "Modifications"
1.9. "Modifications"
means any of the following:
(a) any file in Source Code Form that results from an addition to,
deletion from, or modification of the contents of Covered
Software; or
(b) any new file in Source Code Form that contains any Covered
Software.
1.11. "Patent Claims" of a Contributor
means any patent claim(s), including without limitation, method,
process, and apparatus claims, in any patent Licensable by such
Contributor that would be infringed, but for the grant of the
License, by the making, using, selling, offering for sale, having
made, import, or transfer of either its Contributions or its
Contributor Version.
1.10. "Research Purposes"
means use for internal research and not intended for or directed
towards commercial advantages or monetary compensation; provided,
however, that monetary compensation does not include sponsored
research of research funded by grants.
1.12. "Secondary License"
1.11 "Secondary License"
means either the GNU General Public License, Version 2.0, the GNU
Lesser General Public License, Version 2.1, the GNU Affero General
Public License, Version 3.0, or any later versions of those
licenses.
1.13. "Source Code Form"
1.12. "Source Code Form"
means the form of the work preferred for making modifications.
1.14. "You" (or "Your")
1.13. "You" (or "Your")
means an individual or a legal entity exercising rights under this
License. For legal entities, "You" includes any entity that
controls, is controlled by, or is under common control with You. For
@ -96,53 +76,47 @@ Mozilla Public License Version 2.0
2.1. Grants
Each Contributor hereby grants You a world-wide, royalty-free,
non-exclusive license:
(a) under intellectual property rights (other than patent or trademark)
Licensable by such Contributor to use, reproduce, make available,
modify, display, perform, distribute, and otherwise exploit its
Contributions, either on an unmodified basis, with Modifications, or
as part of a Larger Work; and
(b) under Patent Claims of such Contributor to make, use, sell, offer
for sale, have made, import, and otherwise transfer either its
Contributions or its Contributor Version.
non-exclusive license under Contributor copyrights Licensable by such
Contributor to use, reproduce, make available, modify, display,
perform, distribute, and otherwise exploit solely for Research Purposes
its Contributions, either on an unmodified basis, with Modifications,
or as part of a Larger Work.
2.2. Effective Date
The licenses granted in Section 2.1 with respect to any Contribution
become effective for each Contribution on the date the Contributor first
distributes such Contribution.
become effective for each Contribution on the date the Contributor
first distributes such Contribution.
2.3. Limitations on Grant Scope
The licenses granted in this Section 2 are the only rights granted under
this License. No additional rights or licenses will be implied from the
distribution or licensing of Covered Software under this License.
Notwithstanding Section 2.1(b) above, no patent license is granted by a
Contributor:
distribution or licensing of Covered Software under this License. The
License is incompatible with Secondary Licenses. Notwithstanding
Section 2.1 above, no copyright license is granted:
(a) for any code that a Contributor has removed from Covered Software;
or
(b) for infringements caused by: (i) Your and any other third party's
modifications of Covered Software, or (ii) the combination of its
Contributions with other software (except as part of its Contributor
Version); or
(b) use of the Contributions or its Contributor Version other than for
Research Purposes only; or
(c) under Patent Claims infringed by Covered Software in the absence of
its Contributions.
(c) for infringements caused by: (i) Your and any other third partys
modifications of Covered Software, or (ii) the combination of its
Contributions with other software (except as part of its Contributor
Version).
This License does not grant any rights in the trademarks, service marks,
or logos of any Contributor (except as may be necessary to comply with
the notice requirements in Section 3.4).
This License does not grant any rights in the patents, trademarks,
service marks, or logos of any Contributor (except as may be necessary
to comply with the notice requirements in Section 3.4).
2.4. Subsequent Licenses
No Contributor makes additional grants as a result of Your choice to
distribute the Covered Software under a subsequent version of this
License (see Section 10.2) or under the terms of a Secondary License (if
permitted under the terms of Section 3.3).
License (see Section 10.2) or under the terms of a Secondary License
(if permitted under the terms of Section 3.3).
2.5. Representation
@ -171,8 +145,7 @@ Modifications that You create or to which You contribute, must be under
the terms of this License. You must inform recipients that the Source
Code Form of the Covered Software is governed by the terms of this
License, and how they can obtain a copy of this License. You may not
attempt to alter or restrict the recipients' rights in the Source Code
Form.
attempt to alter or restrict the recipients rights in the Source Code Form.
3.2. Distribution of Executable Form
@ -185,22 +158,14 @@ If You distribute Covered Software in Executable Form then:
than the cost of distribution to the recipient; and
(b) You may distribute such Executable Form under the terms of this
License, or sublicense it under different terms, provided that the
license for the Executable Form does not attempt to limit or alter
the recipients' rights in the Source Code Form under this License.
License.
3.3. Distribution of a Larger Work
You may create and distribute a Larger Work under terms of Your choice,
provided that You also comply with the requirements of this License for
the Covered Software. If the Larger Work is a combination of Covered
Software with a work governed by one or more Secondary Licenses, and the
Covered Software is not Incompatible With Secondary Licenses, this
License permits You to additionally distribute such Covered Software
under the terms of such Secondary License(s), so that the recipient of
the Larger Work may, at their option, further distribute the Covered
Software under the terms of either this License or such Secondary
License(s).
the Covered Software. The Larger Work may not be a combination of Covered
Software with a work governed by one or more Secondary Licenses.
3.4. Notices
@ -212,16 +177,15 @@ the extent required to remedy known factual inaccuracies.
3.5. Application of Additional Terms
You may choose to offer, and to charge a fee for, warranty, support,
indemnity or liability obligations to one or more recipients of Covered
Software. However, You may do so only on Your own behalf, and not on
behalf of any Contributor. You must make it absolutely clear that any
such warranty, support, indemnity, or liability obligation is offered by
You alone, and You hereby agree to indemnify every Contributor for any
liability incurred by such Contributor as a result of warranty, support,
indemnity or liability terms You offer. You may include additional
disclaimers of warranty and limitations of liability specific to any
jurisdiction.
You may not choose to offer, or charge a fee for use of the Covered
Software or a fee for, warranty, support, indemnity or liability
obligations to one or more recipients of Covered Software. You must
make it absolutely clear that any such warranty, support, indemnity, or
liability obligation is offered by You alone, and You hereby agree to
indemnify every Contributor for any liability incurred by such
Contributor as a result of warranty, support, indemnity or liability
terms You offer. You may include additional disclaimers of warranty and
limitations of liability specific to any jurisdiction.
4. Inability to Comply Due to Statute or Regulation
---------------------------------------------------
@ -240,23 +204,12 @@ recipient of ordinary skill to be able to understand it.
--------------
5.1. The rights granted under this License will terminate automatically
if You fail to comply with any of its terms. However, if You become
compliant, then the rights granted under this License from a particular
Contributor are reinstated (a) provisionally, unless and until such
Contributor explicitly and finally terminates Your grants, and (b) on an
ongoing basis, if such Contributor fails to notify You of the
non-compliance by some reasonable means prior to 60 days after You have
come back into compliance. Moreover, Your grants from a particular
Contributor are reinstated on an ongoing basis if such Contributor
notifies You of the non-compliance by some reasonable means, this is the
first time You have received notice of non-compliance with this License
from such Contributor, and You become compliant prior to 30 days after
Your receipt of the notice.
if You fail to comply with any of its terms.
5.2. If You initiate litigation against any entity by asserting a patent
5.2. If You initiate litigation against any entity by asserting an
infringement claim (excluding declaratory judgment actions,
counter-claims, and cross-claims) alleging that a Contributor Version
directly or indirectly infringes any patent, then the rights granted to
directly or indirectly infringes, then the rights granted to
You by any and all Contributors for the Covered Software under Section
2.1 of this License shall terminate.
@ -299,8 +252,10 @@ prior to termination shall survive termination.
* and all other commercial damages or losses, even if such party *
* shall have been informed of the possibility of such damages. This *
* limitation of liability shall not apply to liability for death or *
* personal injury resulting from such party's negligence to the *
* extent applicable law prohibits such limitation. Some *
* personal injury resulting from such partys negligence to the *
* extent applicable law prohibits such limitation, but in such event, *
* and to the greatest extent permissible, damages will be limited to *
* direct damages not to exceed one hundred dollars. Some *
* jurisdictions do not allow the exclusion or limitation of *
* incidental or consequential damages, so this exclusion and *
* limitation may not apply to You. *
@ -314,7 +269,7 @@ Any litigation relating to this License may be brought only in the
courts of a jurisdiction where the defendant maintains its principal
place of business and such litigation shall be governed by laws of that
jurisdiction, without reference to its conflict-of-law provisions.
Nothing in this Section shall prevent a party's ability to bring
Nothing in this Section shall prevent a partys ability to bring
cross-claims or counter-claims.
9. Miscellaneous
@ -332,10 +287,10 @@ shall not be used to construe this License against a Contributor.
10.1. New Versions
Mozilla Foundation is the license steward. Except as provided in Section
10.3, no one other than the license steward has the right to modify or
publish new versions of this License. Each version will be given a
distinguishing version number.
Oxford Nanopore Technologies PLC. is the license steward. Except as
provided in Section 10.3, no one other than the license steward has the
right to modify or publish new versions of this License. Each version
will be given a distinguishing version number.
10.2. Effect of New Versions
@ -352,19 +307,12 @@ modified version of this License if you rename the license and remove
any references to the name of the license steward (except to note that
such modified license differs from this License).
10.4. Distributing Source Code Form that is Incompatible With Secondary
Licenses
If You choose to distribute Source Code Form that is Incompatible With
Secondary Licenses under the terms of this version of the License, the
notice described in Exhibit B of this License must be attached.
Exhibit A - Source Code Form License Notice
-------------------------------------------
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
This Source Code Form is subject to the terms of the Oxford Nanopore
Technologies PLC. Public License, v. 1.0. Full licence can be found
obtained from support@nanoporetech.com
If it is not possible or desirable to put the notice in a particular
file, then You may include the notice in a location (such as a LICENSE
@ -372,9 +320,3 @@ file in a relevant directory) where a recipient would be likely to look
for such a notice.
You may add additional accurate notices of copyright ownership.
Exhibit B - "Incompatible With Secondary Licenses" Notice
---------------------------------------------------------
This Source Code Form is "Incompatible With Secondary Licenses", as
defined by the Mozilla Public License, v. 2.0.

View File

@ -11,7 +11,10 @@ def main(args):
barcodes = []
aliases = []
types = []
sample_types = []
allowed_sample_types = [
"test_sample", "positive_control", "negative_control", "no_template_control"
]
try:
with open(args.sample_sheet, "r") as f:
@ -31,45 +34,48 @@ def main(args):
barcodes.append(row["barcode"])
except KeyError:
sys.stdout.write("'barcode' column missing")
exit()
sys.exit()
try:
aliases.append(row["alias"])
except KeyError:
sys.stdout.write("'alias' column missing")
exit()
sys.exit()
try:
types.append(row["type"])
sample_types.append(row["type"])
except KeyError:
pass
except Exception as e:
sys.stdout.write(f"Parsing error: {e}")
exit()
sys.exit()
# check barcode and alias values are unique
if len(barcodes) > len(set(barcodes)):
sys.stdout.write("values in 'barcode' column not unique")
exit()
sys.exit()
if len(aliases) > len(set(aliases)):
sys.stdout.write("values in 'alias' column not unique")
exit()
sys.exit()
if types:
if sample_types:
# check if "type" column has unexpected values
unexp_type_vals = set(types) - set(
[
"test_sample",
"positive_control",
"negative_control",
"no_template_control",
]
)
unexp_type_vals = set(sample_types) - set(allowed_sample_types)
if unexp_type_vals:
sys.stdout.write(
f"found unexpected values in 'type' column: {unexp_type_vals}. "
"allowed values are: `['test_sample', 'positive_control', "
"'negative_control', 'no_template_control']`"
f"Allowed values are: {allowed_sample_types}"
)
exit()
sys.exit()
if args.required_sample_types:
for required_type in args.required_sample_types:
if required_type not in allowed_sample_types:
sys.stdout.write(f"Not an allowed sample type: {required_type}")
sys.exit()
if sample_types.count(required_type) < 1:
sys.stdout.write(
f"Sample sheet requires at least 1 of {required_type}")
sys.exit()
logger.info(f"Checked sample sheet {args.sample_sheet}.")
@ -78,4 +84,10 @@ def argparser():
"""Argument parser for entrypoint."""
parser = wf_parser("check_sample_sheet")
parser.add_argument("sample_sheet", help="Sample sheet to check")
parser.add_argument(
"--required_sample_types",
help="List of required sample types. Each sample type provided must "
"appear at least once in the sample sheet",
nargs="*"
)
return parser

View File

@ -149,7 +149,7 @@ def watch_path(Map margs) {
// add metadata from sample sheet (we can't use join here since it does not work
// with repeated keys; we therefore need to transform the sample sheet data into
// a map with the barcodes as keys)
def ch_sample_sheet = get_sample_sheet(file(margs.sample_sheet))
def ch_sample_sheet = get_sample_sheet(file(margs.sample_sheet), margs.required_sample_types)
| collect
| map { it.collectEntries { [(it["barcode"]): it] } }
// now we can use this channel to annotate all files with the corresponding info
@ -247,6 +247,7 @@ Map parse_arguments(Map arguments) {
"analyse_unclassified": false,
"fastcat_stats": false,
"fastcat_extra_args": "",
"required_sample_types": [],
"watch_path": false],
name: "fastq_ingress")
return parser.parse_args(arguments)
@ -319,7 +320,7 @@ def get_valid_inputs(Map margs){
// filter based on sample sheet in case one was provided
if (margs.sample_sheet) {
// get channel of entries in the sample sheet
def ch_sample_sheet = get_sample_sheet(file(margs.sample_sheet))
def ch_sample_sheet = get_sample_sheet(file(margs.sample_sheet), margs.required_sample_types)
// get the union of both channels (missing values will be replaced with
// `null`)
def ch_union = Channel.fromPath(sub_dirs_with_fastq_files).map {
@ -396,7 +397,7 @@ ArrayList get_fq_files_in_dir(Path dir) {
* @param sample_sheet: path to the sample sheet CSV
* @return: channel of maps (with values in sample sheet header as keys)
*/
def get_sample_sheet(Path sample_sheet) {
def get_sample_sheet(Path sample_sheet, ArrayList required_sample_types) {
// If `validate_sample_sheet` does not return an error message, we can assume that
// the sample sheet is valid and parse it. However, because of Nextflow's
// asynchronous magic, we might emit values from `.splitCSV()` before the
@ -405,7 +406,7 @@ def get_sample_sheet(Path sample_sheet) {
// in STDOUT. Thus, we use the somewhat clunky construct with `concat` and `last`
// below. This lets the CSV channel only start to emit once the error checking is
// done.
ch_err = validate_sample_sheet(sample_sheet).map {
ch_err = validate_sample_sheet(sample_sheet, required_sample_types).map {
// check if there was an error message
if (it) error "Invalid sample sheet: ${it}."
it
@ -425,13 +426,19 @@ def get_sample_sheet(Path sample_sheet) {
* message is emitted.
*
* @param: path to sample sheet CSV
* @param: list of required sample types (optional)
* @return: string (optional)
*/
process validate_sample_sheet {
label params.process_label
input: path csv
input:
path csv
val required_sample_types
output: stdout
script:
String req_types_arg = required_sample_types ? "--required_sample_types "+required_sample_types.join(" ") : ""
"""
workflow-glue check_sample_sheet $csv
workflow-glue check_sample_sheet $csv $req_types_arg
"""
}