Esempio n. 1
0
    def __init__(self, data: Path or None, config: Path):

        PoreLogger.__init__(self, level=logging.INFO, name='DataStorage')

        self.data = data
        self.workdir = Path.home() / '.npc' / '.storage_client'

        self.netflow = NetflowClient(node_config=config,
                                     workdir=Path.home() / '.npc' /
                                     '.storage_client')
        self.netflow.configure_storage_nodes(client_entry='storage')
Esempio n. 2
0
    def __init__(self, pipeline_client: PipelineClient):
        PoreLogger.__init__(self, level=logging.INFO, name='PipelinePollster')

        self.pipeline_client = pipeline_client

        # When instantiated, remove the previous registry if present
        self.result_registry = self.pipeline_client.workdir / 'result.registry'

        # List of files from last poll
        self.last_file_poll = []

        # If pipeline screen is queried:
        self.last_screen_open = False
Esempio n. 3
0
    def __init__(self, name: str, collection: str, version: int, author: str,
                 data: Path):

        PoreLogger.__init__(self, level=logging.INFO, name="Dataset")

        self.name = name
        self.collection = collection
        self.version = version
        self.data = data
        self.author = author

        self.dataset = Path(f"{self.collection}-{self.name}-v{self.version}")

        self.files = None
Esempio n. 4
0
    def __init__(self, host, user, ssh_key, name, logger_name: str = 'PipelineClient'):

        PoreLogger.__init__(self, level=logging.INFO, name=logger_name)

        self.remote = True if host != 'local' else False
        self.name = name

        self.host = host
        self.user = user
        self.ssh_key = ssh_key

        self.client = None
        self.sftp = None
        self.conn = None

        self.active_screens = {}
Esempio n. 5
0
    def __init__(self, pathogen_path: Path = None, signal_path: Path = None):

        PoreLogger.__init__(self, level=logging.INFO, name="AppServer")

        self.pipelines = {}

        self.pathogen_path = pathogen_path
        self.signal_path = signal_path

        if self.pathogen_path:
            self.pipelines['pathogen'] = PathogenPipeline()

        if self.signal_path:
            self.pipelines['signal'] = SignalPipeline()

        pass
Esempio n. 6
0
    def __init__(self,
                 path=os.getcwd(),
                 species="Staphylococcus aureus",
                 force=False,
                 verbose=True):

        PoreLogger.__init__(self, name="NCTC")

        self.date = time.strftime("%d-%m-%Y-%H-%M")

        self.path = os.path.abspath(path)
        self.project = True

        self.species = species
        self.species_name = self.species.replace(" ", "_").lower()
        self.species_path = os.path.join(self.path, self.species_name)

        self.force = force
        self.verbose = verbose

        # Infrastructure

        self.config_path = os.path.join(self.path, ".nctc")

        # Analysis with NCTC Programs and Snakemake

        self.nctc = os.path.dirname(os.path.dirname(
            os.path.realpath(__file__)))

        self.abricate = os.path.join(self.nctc, "bin", "abricate", "bin",
                                     "abricate")

        self.env_file = os.path.join(self.nctc, "env", "nctc.json")
        self.snake_file = os.path.join(self.nctc, "pipe", "nctc.snk")
        self.config_file = os.path.join(self.nctc, "pipe", "nctc.json")

        self.config_run_file = None

        # HTML NCTC3000

        self.url = "http://www.sanger.ac.uk/resources/downloads/bacteria/nctc/"

        self.tables = dict()

        self.files = dict()
        self.report_files = dict()
Esempio n. 7
0
    def __init__(self, app_data: dict, db_reports: dict, group_reads: dict):

        PoreLogger.__init__(self, level=logging.INFO, name="PathogenReport")

        self.app_data = app_data  # report configuration sent by app
        self.db_reports = db_reports  # database report tables
        self.group_reads = group_reads  # total reads by group / sample

        self.config = dict()
        self.report_data = None

        self.template_path = Path(__file__).parent / 'templates' / 'reports'

        self.sample_id = self.app_data['header']['sample_id']

        self.uuid = str(uuid4())
        self.uid = self.uuid.split('-')[0]
Esempio n. 8
0
    def __init__(self, node_config: Path, workdir: Path):

        PoreLogger.__init__(self, level=logging.INFO, name='NanoPathClient')

        logging.getLogger("paramiko").setLevel(logging.WARNING)

        self.logger.info(
            f"{Y}NanoPathClient{RE}"
        )

        # Read the netflow configurations
        self.config = self.read_config(file=node_config)

        # Working directory structure
        self.workdir = workdir
        self.nexus = self.workdir / 'nexus'
        self.nexus.mkdir(parents=True, exist_ok=True)

        # Store the clients for later use:
        self.clients = {}
Esempio n. 9
0
def remove_human(fq, fq1, fq2, ref, out, mapq, preset, human_out, threads):
    """ Filter a read file (single, paired) by mapping to human reference index """

    logger = PoreLogger(level=logging.INFO, name="HostRemoval").logger

    remove_by_alignment(fq=fq,
                        ref=ref,
                        out=out,
                        mapq=mapq,
                        preset=preset,
                        human_out=human_out,
                        threads=threads,
                        logger=logger)
Esempio n. 10
0
def rename_barcodes(directory, file, panel, outdir, extension, megalodon):
    """ Rename barcode read files after basecalling"""

    pl = PoreLogger(level=logging.INFO, name="Utils").logger

    pl.info(f'Creating output directory: {outdir}')
    outdir.mkdir(parents=True, exist_ok=True)

    pl.info(f'Reading panel data from file: {file}')
    df = pandas.read_csv(file, sep='\t', header=0)

    if panel:
        pl.info(f'Subsetting panel data to: {panel}')
        df = df.loc[df['panel'].isin([str(panel)]), :]

    if megalodon:
        df['megalodon'] = df[['panel', 'barcode']].apply(lambda x: '_'.join(x),
                                                         axis=1)
        for d in directory.glob("*"):
            if d.name in df.megalodon.tolist():
                row = df.loc[df.megalodon == d.name, :]
                name = row.name.values[0]
                pl.info(f"Copy directory {d.name} to {outdir / name}")
                shutil.copytree(str(d), str(outdir / name))
    else:
        for p in directory.rglob("*"):
            if p.stem in df.barcode.tolist():
                row = df.loc[df.barcode == p.stem, :]
                name = row.name.values[0] + f"{extension}"
                pl.info(f'Rename and copy {p.name} to:  {outdir / name}')
                shutil.copy(str(p), str(outdir / name))