{% extends "base.html" %} {% load crispy_forms_tags %} {% block content %}
Your username and password didn't match. Please try again.
{% endif %} {% if next %} {% if user.is_authenticated %}Your account doesn't have access to this page. To proceed, please log in with an account that has access.
{% else %}Please log in to see this page.
{% endif %} {% endif %}


class: center, middle, inverse, title-slide # Analysis of RNA-seq data in R and Bioconductor
###
http://rockefelleruniversity.github.io/RU_RNAseq/
--- ## RNA-seq RNA-seq offers a method to simulateously measure the genome wide expression of annotated and novel transcripts.

 --- ## RNA-seq for differential gene expression A common goal in RNA-seq is to identify genes and/or transcripts which are expressed at differing levels between our user defined sample groups. Absolute quantification of the expression level of gene is subject to measurement biases (GC bias in PCR and/or RNA capture/selection) so it is most appropriate to compare the levels of the expression of same gene across conditions than to compare differing genes' expression levels within a condition. This commonly referred to as differential gene or transcript expression (DGE/DTE).

 --- ## RNA-seq for differential transcript usage A less frequent but important goal in RNAseq is to identify any changes in the relative abundance of transcripts for a gene between conditions. This may be able to identify changes in a genes' functional role between conditions. i.e. One isoform of a protein may bind and activate, another may simply bind and obstruct other active forms. We call this differential transcript usage (DTU).

 --- ## The data. In this session we will be reviewing data from Christina Leslie's lab at MSKCC on T-Reg cells. This can be found on the Encode portal [here](https://www.encodeproject.org/experiments/ENCSR486LMB/) FastQ for TReg RNAseq replicate 1 used in this session can be downloaded [here](https://www.encodeproject.org/files/ENCFF332KDA/@@download/ENCFF332KDA.fastq.gz) FastQ for TReg RNAseq replicate 2 used in practical can be downloaded [here](https://www.encodeproject.org/files/ENCFF070QMF/@@download/ENCFF070QMF.fastq.gz) For differential splicing and transcript analysis we will use one of our datasets from a splicing factor Knockdown RNAseq experiment found at GEO [here](https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE101763). --- ## What we will cover. In the RNAseq sessions we will identify differential gene expression between our T-cell sample groups as well identify potential differential transcript usage. We will further identify biological functions associated with genes and visualise these in IGV and in summary plots. We will also identify differentially used transcript and exons from our splice factor dataset and visualise these in IGV. In our first session we will look at two separate ways we can gain gene expression estimates from raw sequencing data as fastQ files. --- # Working with raw RNAseq data. Once we have the raw fastQ data we can use the [ShortRead package](https://bioconductor.org/packages/release/bioc/html/ShortRead.html) to review our sequence data quality. We have reviewed how to work with raw sequencing data in the [**FastQ in Bioconductor** session.](https://rockefelleruniversity.github.io/Bioconductor_Introduction/r_course/presentations/slides/FastQInBioconductor.html#1) --- # Working with raw RNAseq data. We can subsample from a fastQ file using functions in **ShortRead** package. Here we use the [**FastqSampler** and **yield** function](https://rockefelleruniversity.github.io/Bioconductor_Introduction/r_course/presentations/slides/FastQInBioconductor.html#40) to randomly sample a defined number of reads from a fastQ file. Here we subsample 1 million reads. ```r library(ShortRead) fqSample <- FastqSampler("~/Downloads/ENCFF332KDA.fastq.gz",n=10^6) fastq <- yield(fqSample) fastq ``` ``` ## class: ShortReadQ ## length: 1000000 reads; width: 50 cycles ``` --- # Working with raw RNAseq data. Now we have our ShortRead object we can produce some of our more informative plots of fastQ properties. First we can extract the read sequences, using the **sread()** function, and retrieve a matrix of base pair abundance over sequencing cycles (or length of read) using the **alphabetByCycle()** function. ```r readSequences <- sread(fastq) readSequences_AlpbyCycle <- alphabetByCycle(readSequences) readSequences_AlpbyCycle[1:4,1:4] ``` ``` ## cycle ## alphabet [,1] [,2] [,3] [,4] ## A<PHONE_NUMBER>56<PHONE_NUMBER>58 ## C<PHONE_NUMBER>97<PHONE_NUMBER>02 ## G<PHONE_NUMBER>65<PHONE_NUMBER>70 ## T<PHONE_NUMBER>32<PHONE_NUMBER>70 ``` --- # Working with raw RNAseq data. We can plot the abundance of DNA bases (A,C,G,T) over the length of read to see any biases. ```r library(ggplot2) AFreq <- readSequences_AlpbyCycle["A",] CFreq <- readSequences_AlpbyCycle["C",] GFreq <- readSequences_AlpbyCycle["G",] TFreq <- readSequences_AlpbyCycle["T",] toPlot <- data.frame(Count=c(AFreq,CFreq,GFreq,TFreq), Cycle=rep(1:50,4), Base=rep(c("A","C","G","T"),each=50)) ggplot(toPlot,aes(y=Count,x=Cycle,colour=Base))+geom_line()+theme_bw() ``` ![](RU_RNAseq_p1_files/figure-html/tregFQ3-1.png) --- # Working with raw RNAseq sequence data. We can extract information on reads quality scores using the **quality()** function and translate this into a useful score summary per read using the **alphabetScore()** function. We plot the distribution of quality scores to identify whether low quality reads should be filtered. ```r readQuality <- quality(fastq) readQualityScores <- alphabetScore(readQuality) toPlot <- data.frame(ReadQ=readQualityScores) ggplot(toPlot,aes(x=ReadQ))+geom_histogram()+theme_minimal() ``` ``` ## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`. ``` ![](RU_RNAseq_p1_files/figure-html/tregFQ4-1.png) --- # Working with raw RNAseq sequence data. A final essential check of fastq quality is to plot the quality of sequencing over the length of the read (and so over time). Here we can use the **as(MYQUALITIES,"matrix")** function to translate our ASCI encoded scores into numeric values and create a boxplot for visualisation. ```r qualAsMatrix <- as(readQuality,"matrix") boxplot(qualAsMatrix[1:10000,]) ``` ![](RU_RNAseq_p1_files/figure-html/tregFQ55-1.png) --- # Aligning RNAseq reads Following assessment of read quality, we will want to align our reads to the genome taking into account splice junctions. Since RNAseq reads will not all align continously agaist our reference genome but will map across splice junctions we will use [our splice aware aligners we have seen in previous sessions.](https://rockefelleruniversity.github.io/Bioconductor_Introduction/r_course/presentations/slides/AlignmentInBioconductor.html#6) The resulting BAM file will contain aligned sequence reads for use in further analysis.

 --- # Creating a reference genome. First we need to retrieve the sequence information for the genome of interest in [FASTA format](https://rockefelleruniversity.github.io/Genomic_Data/genomicFileFormats.html#/6) We can use the [BSgenome libraries to retrieve the full sequence information.](https://rockefelleruniversity.github.io/Bioconductor_Introduction/r_course/presentations/slides/SequencesInBioconductor.html#4) For the mouse mm10 genome we load the package **BSgenome.Mmusculus.UCSC.mm10**. ```r library(BSgenome.Mmusculus.UCSC.mm10) BSgenome.Mmusculus.UCSC.mm10 ``` ``` ## Mouse genome: ## # organism: Mus musculus (Mouse) ## # provider: UCSC ## # provider version: mm10 ## # release date: Dec. 2011 ## # release name: Genome Reference Consortium GRCm38 ## # 66 sequences: ## # chr1 chr2 chr3 ## # chr4 chr5 chr6 ## # chr7 chr8 chr9 ## # chr10 chr11 chr12 ## # chr13 chr14 chr15 ## # ... ... ... ## # chrUn_GL456372 chrUn_GL456378 chrUn_GL456379 ## # chrUn_GL456381 chrUn_GL456382 chrUn_GL456383 ## # chrUn_GL456385 chrUn_GL456387 chrUn_GL456389 ## # chrUn_GL456390 chrUn_GL456392 chrUn_GL456393 ## # chrUn_GL456394 chrUn_GL456396 chrUn_JH584304 ## # (use 'seqnames()' to see all the sequence names, use the '$' or '[[' ## # operator to access a given sequence) ``` --- # Creating a reference genome. We will only use the major chromosomes for our analysis so we may exclude random and unplaced contigs. Here we cycle through the major chromosomes and create a [**DNAStringSet** object from the retrieved sequences](https://rockefelleruniversity.github.io/Bioconductor_Introduction/r_course/presentations/slides/SequencesInBioconductor.html#22). ```r mainChromosomes <- paste0("chr",c(1:19,"X","Y","M")) mainChrSeq <- lapply(mainChromosomes, function(x)BSgenome.Mmusculus.UCSC.mm10[[x]]) names(mainChrSeq) <- mainChromosomes mainChrSeqSet <- DNAStringSet(mainChrSeq) mainChrSeqSet ``` ``` ## A DNAStringSet instance of length 22 ## width seq names ## [1] 195471971 NNNNNNNNNNNNNNNNNN...NNNNNNNNNNNNNNNNNN chr1 ## [2] 182113224 NNNNNNNNNNNNNNNNNN...NNNNNNNNNNNNNNNNNN chr2 ## [3] 160039680 NNNNNNNNNNNNNNNNNN...NNNNNNNNNNNNNNNNNN chr3 ## [4] 156508116 NNNNNNNNNNNNNNNNNN...NNNNNNNNNNNNNNNNNN chr4 ## [5] 151834684 NNNNNNNNNNNNNNNNNN...NNNNNNNNNNNNNNNNNN chr5 ## ... ... ... ## [18] 90702639 NNNNNNNNNNNNNNNNNN...NNNNNNNNNNNNNNNNNN chr18 ## [19] 61431566 NNNNNNNNNNNNNNNNNN...NNNNNNNNNNNNNNNNNN chr19 ## [20] 171031299 NNNNNNNNNNNNNNNNNN...NNNNNNNNNNNNNNNNNN chrX ## [21] 91744698 NNNNNNNNNNNNNNNNNN...NNNNNNNNNNNNNNNNNN chrY ## [22] 16299 GTTAATGTAGCTTAATAA...CGCAATAAACATTAACAA chrM ``` --- # Creating a reference genome. Now we have a **DNAStringSet** object we can use the [**writeXStringSet** to create our FASTA file of sequences to align to.](https://rockefelleruniversity.github.io/Bioconductor_Introduction/r_course/presentations/slides/SequencesInBioconductor.html#23) ```r writeXStringSet(mainChrSeqSet, "BSgenome.Mmusculus.UCSC.mm10.mainChrs.fa") ``` --- # QuasR RNA-seq alignment - Sample table We can align our raw sequence data in fastQ format to the new FASTA file of our mm10 genome sequence using the **QuasR** package. As we have seen in previous sessions, [the QuasR package requires a sample table to specify alignment files.](https://rockefelleruniversity.github.io/Bioconductor_Introduction/r_course/presentations/slides/AlignmentInBioconductor.html#13) The sample table requires is a tab-delimited file listing the path to fastq(s) to be aligned and the desired sample names. ```r FileName <- "~/Downloads/ENCFF332KDA.fastq.gz" SampleName <- "Treg_1" sampleTable <- data.frame(FileName,SampleName) write.table(sampleTable,file="sampleTable.txt",sep="\t", quote=FALSE,row.names = FALSE) ``` ``` ## FileName SampleName ## 1 ~/Downloads/ENCFF332KDA.fastq.gz Treg_1 ``` --- # QuasR splice-aware with BSGenome object We can now align our data by using the **qAlign()** function. The **qAlign()** function requires the path to our sample table file and the path of a FASTA file to align sequence reads against. A major difference now compared to aligning ChIP-seq and ATAC-seq is we now set the parameter **splicedAlignment** to TRUE to allow us to map to/over splice junctions. ```r library(QuasR) qAlign("sampleTable.txt","BSgenome.Mmusculus.UCSC.mm10.mainChrs.fa", splicedAlignment=TRUE) ``` --- # Aligning RNAseq reads with Rsubread. The **Rsubread** package offers a faster aligner than the QuasR package although the **Rsubread** package is only available on Mac OS and Linux. As for ChIP-seq and ATAC-seq alignment with the **Rsubread** package we must first build our genome index for Rsubread using the **buildindex()** function. The [**buildindex()** function simply takes the parameters of our desired index name and the FASTA file to build index from.](https://rockefelleruniversity.github.io/Bioconductor_Introduction/r_course/presentations/slides/AlignmentInBioconductor.html#39) ```r library(Rsubread) buildindex("BSgenome.Mmusculus.UCSC.mm10.mainChrs", "BSgenome.Mmusculus.UCSC.mm10.mainChrs.fa") ``` --- # Aligning RNAseq reads with Rsubread. Having constructed our index, we can align our reads using the **Rsubread** package's **subjunc()** function. The [**subjunc()** function requires arguments for the index to align to, the fastQ to align and the name of output BAM](https://rockefelleruniversity.github.io/Bioconductor_Introduction/r_course/presentations/slides/AlignmentInBioconductor.html#41) ```r subjunc("BSgenome.Mmusculus.UCSC.mm10.mainChrs", "/Users/tcarroll//Downloads/ENCFF332KDA.fastq.gz", output_file="Treg_1.bam") ``` --- # Aligning RNAseq reads with Rsubread. We can provide a GTF to our Rsubread call. Although largely unnecessary for gene expression estimation, this will allow us to capture non-canonical splice sites. We simply need to provide a gtf to **annot.ext** parameter and set **useAnnotation** and **isGTF** to TRUE. ```r subjunc("BSgenome.Mmusculus.UCSC.mm10.mainChrs", "/Users/tcarroll//Downloads/ENCFF332KDA.fastq.gz", output_file="Treg_1.bam", useAnnotation = TRUE, annot.ext = "TxDb.Mmusculus.UCSC.mm10.knownGene.gtf", isGTF=TRUE ) ``` --- # Sort and index reads. As before, we sort and index our files using the [**Rsamtools** packages **sortBam()** and **indexBam()** functions respectively.](https://rockefelleruniversity.github.io/Bioconductor_Introduction/r_course/presentations/slides/AlignedDataInBioconductor.html#10) The resulting sorted and indexed BAM file is now ready for use in external programs such as IGV as well as for further downstream analysis in R. ```r library(Rsamtools) sortBam("Treg_1.bam","Sorted_Treg_1") indexBam("Sorted_Treg_1.bam") ```

 --- ## Counting in gene models With our newly aligned reads it is now possible to assign reads to genes in order to quantify a genes' expression level (as reads) within a sample. First we need to gather our gene models of exons and splice junctions which we can use in our later counting steps. ```r library(TxDb.Mmusculus.UCSC.mm10.knownGene) geneExons <- exonsBy(TxDb.Mmusculus.UCSC.mm10.knownGene,by="gene") class(geneExons) ``` ``` ## [1] "GRangesList" ## attr(,"package") ## [1] "GenomicRanges" ``` --- ## Counting in gene models Now we have our GRangesList with each entry corresponding to a gene and within each entry a GRanges object of the genes' exons. ```r geneExons[1:2] ``` ``` ## GRangesList object of length 2: ## $100009600 ## GRanges object with 7 ranges and 2 metadata columns: ## seqnames ranges strand | exon_id exon_name ## <Rle> <IRanges> <Rle> | <integer> <character> ## [1] chr9 [21062393, 21062717] - | 134539 <NA> ## [2] chr9 [21062894, 21062987] - | 134540 <NA> ## [3] chr9 [21063314, 21063396] - | 134541 <NA> ## [4] chr9 [21066024, 21066377] - | 134542 <NA> ## [5] chr9 [21066940, 21067925] - | 134543 <NA> ## [6] chr9 [21068030, 21068117] - | 134544 <NA> ## [7] chr9 [21073075, 21075496] - | 134546 <NA> ## ## $100009609 ## GRanges object with 6 ranges and 2 metadata columns: ## seqnames ranges strand | exon_id exon_name ## [1] chr7 [84940169, 84941088] - | 109989 <NA> ## [2] chr7 [84943141, 84943264] - | 109990 <NA> ## [3] chr7 [84943504, 84943722] - | 109991 <NA> ## [4] chr7 [84946200, 84947000] - | 109992 <NA> ## [5] chr7 [84947372, 84947651] - | 109993 <NA> ## [6] chr7 [84963816, 84964009] - | 109994 <NA> ## ## ------- ## seqinfo: 66 sequences (1 circular) from mm10 genome ``` --- ## Counting in gene models We can now use the **summarizeOverlaps()** to [count the reads in our BAM that overlap genes](). We specify a BamFile object using the **BamFile()** function and specifying the **yieldSize** parameter to 10000 to control memory footprint. The resulting **RangedSummarizedExperiment** object containing our counts and **GRanges** object. ```r library(GenomicAlignments) myBam <- BamFile("Sorted_Treg_1.bam",yieldSize = 10000) tregGeneCounts <- summarizeOverlaps(geneExons,myBam, ignore.strand = TRUE) tregGeneCounts ``` ``` ## class: RangedSummarizedExperiment ## dim: 24116 1 ## metadata(0): ## assays(1): counts ## rownames(24116): 100009600 100009609 ... 99929 99982 ## rowData names(0): ## colnames(1): Sorted_Treg_1.bam ## colData names(0): ``` --- ## Counting in exons models If want to start to evaluate differential transcript usage we will often evaluate counts over exons and assess for changes in exon usage.

 --- ## Counting in exons models To count over exons however we will encounter an issue of assigning reads to overlapping exons.

 --- ## Counting in exons models We can then work to differentiate exons by collapsing exons to the nonoverlapping, disjoint regions.

 --- ## Counting in exons models We can use the GenomicFeatures' package's **disjointExons()** function with our TxDb object, TxDb.Mmusculus.UCSC.mm10.knownGene, to extract a GRanges of our disjoint exons with their associated **gene_id**,**tx_name**,**exonic_part** in the metadata columns. We add some sensible names to our GRanges for use in later steps. ```r library(GenomicFeatures) nonOverlappingExons <- disjointExons(TxDb.Mmusculus.UCSC.mm10.knownGene) names(nonOverlappingExons) <- paste(mcols(nonOverlappingExons)$gene_id, mcols(nonOverlappingExons)$exonic_part, sep="_") nonOverlappingExons[1:3,] ``` ``` ## GRanges object with 3 ranges and 3 metadata columns: ## seqnames ranges strand | gene_id ## <Rle> <IRanges> <Rle> | <CharacterList> ## 100009600_1 chr9 [21062393, 21062717] - | 100009600 ## 100009600_2 chr9 [21062894, 21062987] - | 100009600 ## 100009600_3 chr9 [21063314, 21063396] - | 100009600 ## tx_name exonic_part ## <CharacterList> <integer> ## 100009600_1 uc009veu.1,uc033jjg.1 1 ## 100009600_2 uc009veu.1,uc033jjg.1 2 ## 100009600_3 uc009veu.1,uc033jjg.1 3 ## ------- ## seqinfo: 66 sequences (1 circular) from mm10 genome ``` --- ## Counting in exons models We can now again use the **summarizeOverlaps()** function with our nonOverlapping, disjoint exons to identify a BAM file of interest. We need to set the **inter.feature** to FALSE to allow us to count reads overlapping multiple features (such as a read spanning between two exons). ```r tregExonCounts <- summarizeOverlaps(nonOverlappingExons, myBam, ignore.strand = TRUE, inter.feature=FALSE) ``` --- ## Counting in exons models Now can review our counts from our gene-level and exon-level counting. We retrieve a matrix of counts from either **RangedSummarizedExperiment** object using the **assay()** function. ```r geneCounts <- assay(tregGeneCounts) exonCounts <- assay(tregExonCounts) head(exonCounts,2) ``` ``` ## Sorted_Treg_1.bam ## 100009600_1 1 ## 100009600_2 0 ``` ```r head(geneCounts,2) ``` ``` ## Sorted_Treg_1.bam ## 100009600 1 ## 100009609 0 ``` --- ## Transcript quantification. More recently methods have developed to directly quantify transcript abundance from fastq files using k-mer counting. k-mer counting offers a super fast method of gaining transcript abundance estimates but do not produce a genomic alignment so not so useful for visualisation. As we are most often interested in gene expression changes this offers a fast alternative to counting for alignment and counting. The two leading softwares for k-mer counting * [Salmon](http://salmon.readthedocs.io/en/latest/) - Relationship with DESeq2. * [Kallisto](https://pachterlab.github.io/kallisto/about). - History of splice aware aligners and transcript quantification. --- ## Salmon. Salmon is the latest in a set of k-mer counting tools from the Kingsford lab (Jellyfish and Sailfish) and offers a workflow for transcript quantification from fastq raw seqeuncing data and a fasta file of transcript sequences. Source code is available for all systems and binaries available for Macs and Linux [at their github.](https://github.com/COMBINE-lab/salmon/releases). Docker images available [here](https://combine-lab.github.io/salmon/getting_started/#obtaining-salmon) ![](imgs/salmon.png) --- ## Reference for transcript quantification. First we need to produce a FASTA file of transcript sequences. We can use the GenomicFeatures' packages **extractTranscriptSeqs** function to retrieve a DNAstringSet object of transcript sequences using our sequence data from **BSgenome.Mmusculus.UCSC.mm10** and gene models from **TxDb.Mmusculus.UCSC.mm10.knownGene** object. ```r allTxSeq <- extractTranscriptSeqs(BSgenome.Mmusculus.UCSC.mm10, TxDb.Mmusculus.UCSC.mm10.knownGene, use.names=TRUE) allTxSeq ``` ``` ## A DNAStringSet instance of length 63759 ## width seq names ## [1] 2355 GCACTGTCCGCCAGCCGG...AAGGTGAGGTTGAAGGGT uc007afg.1 ## [2] 2433 GCACTGTCCGCCAGCCGG...AATTTAATTTTGGCTTTA uc007afh.1 ## [3] 2671 ACTTCTACTTTCCAGTCT...TTTTTGTTGTTAAACATA uc007afi.2 ## [4] 2668 ACTTCTACTTTCCAGTCT...TTTTTGTTGTTAAACATA uc011wht.1 ## [5] 2564 GCTGCTGCTGCTCCGCGG...TTTTTGTTGTTAAACATA uc011whu.1 ## ... ... ... ## [63755] 168 TTCTTTCCTCTCTGGACA...ACGGAAACAGCCTCGACG uc029xhn.1 ## [63756] 3321 TCTCTGCTGCCGGAGCAA...CAGTCATCTCTACCCACT uc029xhi.1 ## [63757] 4188 GTGAAAATCCGAAAATGG...CTCCTTTGGTTCAACCCC uc057aqn.1 ## [63758] 511 CTGTGGTCCTCTAACCTG...CATCTGACTGGCCTGCAG uc029xhj.1 ## [63759] 1782 TCTCTGCTGCCGGAGCAA...TATATGAAAGTACTCAAA uc029xho.1 ``` --- ## Reference for transcript quantification. With our new DNAstringSet object of transcript sequences we can write a FASTA file for use in Salmon with the **writeXStringSet** function. ```r writeXStringSet(allTxSeq, "mm10Trans.fa") ``` --- ## Salmon index from R. As with standard aligners, the first part of our quantification requires us to make an index from our FASTA file using the **Salmon index** command. We specify the transcript fasta file (-t) and index name (-i). Here we arrange our Salmon command into a system call from R to allow us to loop through files. ```{} ~/bin/salmon index -i mm10Trans -t mm10Trans.fa ``` ```r salmonExec <- "~/bin/salmon index" fastaTx <- "mm10Trans.fa" indexName <- "mm10Trans" salmonIndexCmd <- paste(salmonExec, "-i",indexName, "-t",fastaTx) salmonIndexCmd system(salmonIndexCmd,wait = TRUE) ``` ``` ## [1] "~/bin/salmon index -i mm10Trans -t mm10Trans.fa" ``` --- ## Salmon quant from R. To quantify transcript abundance we use the **Salmon quant** command. *For Mac* [we may need to specify a library location as seen here](https://combine-lab.github.io/salmon/getting_started/#obtaining-salmon). We specify the index location (-i), the reads to quantify (-r), the output directory (-o) and the library type as automatic detection of type (-l A). ```{} ~/bin/salmon quant -i mm10Trans -r ~/Downloads/ENCFF332KDA.fastq.gz -o TReg_1_Quant -l A ``` ```r salmonExec <- "~/bin/salmon quant" fq <- "~/Downloads/ENCFF332KDA.fastq.gz" outDir <- "TReg_1_Quant" salmonQuantCmd <- paste(salmonExec, "-i",indexName, "-r",fq, "-o",outDir, "-l A") salmonQuantCmd system(salmonIndexCmd,wait = TRUE) ``` ``` ## [1] "~/bin/salmon quant -i mm10Trans -r ~/Downloads/ENCFF332KDA.fastq.gz -o TReg_1_Quant -l A" ``` --- ## Salmon outputs. The output from Salmon is our quantification of transcripts in the **quant.sf** file in the user defined output directory. We will use a new package **tximport** to handle these counts in next session but for now we can review file in standard R libraries. ```r myQuant <- read.delim("~/Downloads/TReg_1_Quant/quant.sf") myQuant[1:3,] ``` ``` ## Name Length EffectiveLength TPM NumReads ## 1 uc001aaa.3 1652 1403 0 0 ## 2 uc010nxq.1 1488 1239 0 0 ## 3 uc010nxr.1 1595 1346 0 0 ``` --- # Time for an exercise. [Link_to_exercises](../../Exercises/RNAseq_part1_exercises.html) [Link_to_answers](../../Answers/RNAseq_part1_answers.html)


Asteroid Belt
Top Score: 0
Top Speed: 0 km/hr
Avoid the asteroids.
You can move using the arrow keys or using wasd.
-Press the spacebar to begin-
Score: 0
100 km/hr


These are our favorite places
Paris
Here is a link about Paris
Paris
.
Maui
Here is a link about Maui
Maui
.
But the best place in the world is our bed!
Isn't it nice?
Thanks for reading!


Map markers indicate the following distances from base station:
1 Mile
3 Miles
5-60 Miles, increments of 5
100 Miles
[ Reset Map ]
[ Map Info ]
Squak 7x00 is reported and shown.
This is most likely an error in receiving or decoding.
Please do not call the local authorities, they already know about it if it is valid squak.


Online only due to COVID-19
May 22-23, 2020
Guidelines for using Zoom for the presentations
Due to the large number of registrants, please follow these guidelines:
- Please mute yourself when joining the session and stay muted
unless you are asking a question.
- We will try to save time for a few questions at the end of
each presentation, and then we have an hour scheduled for additional
questions and general discussion at 12:00 MDT. So please don't
interupt the presentations with oral questions.
- When possible, type your question into the chat box on Zoom
(while the presentation is going on if you want) so we can scan
them and try to answer the ones of most general interest first,
and get back to others privately later.
- You could also ask a question in the form of an
issue
on the GitHub repository
that we'll be using specifically for this workshop,
You can start making issues now if there are things you'd like
us to discuss!
- If you want to ask a question or make some comments or
suggestions during the open discussion, please do! But when
possible, particularly to start a new topic, use the "raise
hand" feature you should see if you open the "participants" tab
on Zoom, so we don't have lots of people trying to talk at once.
We will try to moderate the discussion.
- In general it's best to turn your video off in the interest of
bandwidth, so that the presentations come through well for
everyone. But feel free to turn it on during the discussion or
when asking a question, or not if you prefer.
- We expect everyone to abide by the
Clawpack Code of Conduct, and interact in a respectful manner.


A LIFE LESS ORDINARY (R)
A review by E. Benjamin Kelsey
* * * (out of four)
Sometimes a movie comes along that falls somewhat askew of the rest. Some people call it "original" or "artsy" or "abstract". Some people simply call it "trash". A LIFE LESS ORDINARY is sure to bring about mixed feelings.
Definitely a Generation-X aimed movie, A LIFE LESS ORDINARY has everything from claymation to profane angels to a Karaoke-based musical dream sequence. WHEW! Anyone in their 30's or above is probably not going to grasp what can be enjoyed about this film. It's somewhat silly, it's somewhat outrageous, and it's definitely not your typical romance story, but for the right audience, it works.
A lot of hype has been surrounding this film due to the fact that it comes to us from the same team that brought us TRAINSPOTTING. Well sorry folks, but I haven't seen TRAINSPOTTING so I can't really compare. Whether that works in this film's favor or not is beyond me. But I do know this: Ewan McGregor, whom I had never had the pleasure of watching, definitely charmed me. He was great! Cameron Diaz's character was uneven and a bit hard to grasp. The audience may find it difficult to care about her, thus discouraging the hopes of seeing her unite with McGregor after we are immediately sucked into caring about and identifying with him. Misguided? You bet. Loveable? You bet.
A LIFE LESS ORDINARY was a delight and even had a bonus for me when I realized it was filmed in my hometown of Salt Lake City, Utah. This was just one more thing I didn't know about this movie when I sat down with a five dollar order of nachos and a three dollar Coke. Maybe not knowing the premise behind this film made for a pleasant surprise, but I think even if I had known, I would have been just as happy. A LIFE LESS ORDINARY is quirky, eccentric, and downright charming! Not for everyone, but a definite change of pace for your typical night at the movies.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Cindy Crawford's Throwback Pic With Jennifer Aniston, Gabrielle Union and More Is a Whole 'Lot of Girl Power'
by Jackie WillisCindy Crawford had several ladies to call out in her Woman Crush Wednesday post.
The 53-year-old supermodel shared a photo on Instagram that features a slew of famous faces! "That's a lot of girl power in one photo. #WCW," she captioned the pic.
While Crawford doesn't mention when or where this photograph was taken, she tagged most of the famous women who are posing with her. Among those stars are Jennifer Aniston, Gabrielle Union, Calista Flockhart, Allison Janney, Jennifer Love Hewitt, Fran Drescher, Rachel Hunter, Deidre Hall, Amber Valletta and former ET host Nancy O'Dell.
The late Carrie Fisher and her daughter, Billie Lourd, are also in the pic.
After doing some digging, it appears that this epic image was taken in 2003 at the St. Jude Runway for Life at the Beverly Hilton in Los Angeles, California, where celebrities walked the catwalk for a good cause.
Crawford still runs with a fun, famous crowd! Her husband, Rande Gerber, is best friends and business partners with George Clooney and back when the actor's twins were born, Gerber revealed to ET that he and Crawford went to visit the little ones.
"I did see the babies. Cindy and I went to London and went to the house and spent some time with them," he shared in 2017. "The kids are the perfect mix of George and Amal. I mean, they really are so cute!"
Here's more on Crawford's star-studded social circle.


| result.Future {future} | R Documentation |
Get the results of a resolved future
## S3 method for class 'Future' result(future, ...)
future |
A Future. |
... |
Not used. |
This function is only part of the backend Future API. This function is not part of the frontend Future API.
The FutureResult object.


How to stop the bathroom mirror from fogging
I have just read Clouds in A Glass of Beer by Craig Bohren - a book about atmospheric physics. It's a pretty good book, not a total classic that I would recommend to anyone, but good all the same.
It contains some nice experiments which you can do yourself. One particularly useful thing I learnt, is how to stop the bathroom mirror from fogging.
With liquid soap or detergent make a figure on the dry bathroom mirror. Then hop in the tub and take a good hot bath. The moist air of the bathroom is much warmer than the dry mirror. Water will therefore gradually condense onto it. The fogged part of the mirror is covered with small water droplets, whereas the clear part is covered with a more or less continuous film of water. The thin coating of detergent reduces the [surface tension so] that water condenses onto the mirror as a thin film rather than independent droplets. The water droplets scatter light in all directions [causing the fogging]; the water film scatters light mostly in a few directions [acting like a mirror].
Every now and then Bohren produces a really good quote too:
In science there is no authority other than observation and experiment illuminated by reason.
A cloud in many ways is just the inverse of a bubbly glass of beer.
When theory and experiment disagree, it is the theory that must be judged the loser.
Only fools choose to make something more complicated than it need be.
The last point something I feel software engineers could do with taking considerably more notice of.


The Bluffer casts a quizzical eye over how to run a quiz in Irish
by Robert McMillenTOP OF THE MORNING to yez, and sure isn’t it another Bluffer’s Guide to Irish.
The Bluffer is a big fan of tráthanna ceist - quizzes and watches a lot of them on television.
He is particularly fond of Only Connect and is the only person on the planet who actually likes Victoria Coren. Not all the time, though.
There are different types of quizzes of course but what if you want you run your own quiz in Irish over the Christmas period. What sort of constructions do you need.
Well, eolas ginearálta - general knowledge is what most quizzes are about and the questions can be about anything under the sun.
Na ceisteanna - the questions in some are very easy like asking about capital cities.
Cad é príomhchathair na Fraince? - What is the capital of France?)for example.
There are other geographical questions like cá bhfuil Caolas Bheiring? - where is the Bering Strait?
Cad é an fásach is mó ar domhan? What is the biggest desert in the world?
(The Bluffer likes doing on line map quizzes where you have to click on an Mholdóiv - Moldova for example on a map of Europe).
History often crops up in quizzes so cad é an bhliain inar ... in what year did ... and you can fill in the rest.
Cad é an bhliain inar thosaigh an Gorta Mór? - In what year did the Great Famine begin? for example.
Sport is another evergreen of the table quiz.
Cé a bhain Corn an Domhain sa rugbaí i mbliana? - Who won this year’s rugby World Cup?
(At least we won’t be hearing about it for the next six months!)
Or what about cé a fuair an cúl - who scored the goal (eg which robbed Kerry of a 5-in-a-row)
And what about the music round?
This can be a tricky one because those who know everything about Engelbert Humperdink and Brotherhood of Man might know nothing about Arctic Monkey or Arcade Fire.
You could also be the first person ever to have a sean-nós music round!
Questions might be cé a cheol - who sang (eg Bohemian Rhapsody) or cé a chum - who composed (eg Für Elise)?
Na scannáin - films or movies play a big part in quizzes too.
Cé a bhain Oscar ...? - who won an Oscar (eg for their role in Gone with the Wind)
Other categories in typical table quiz can deal with current affairs, there will be a picture round with photos of everyone from Rasputin to Margaret Thatcher, television programmes – this can be particularly anoraky as you will be amazed by how much the wee guy with the beard wearing the parka knows about Thunderbirds!
There are Irish language quiz-books including Ceist Agam Ort - I’ve a question for you which contains 1,000 questions) for 12-14 year olds, with a distinctly Irish flavour.
Now, quizzes are meant to be spraíúil - fun but each quiz will have its resident quizaholic, you know the type, the guy who hackles the quizmaster and shouts “that’s not strictly accurate” to an answer.
Ignore them!
CÚPLA FOCAL
tráthanna na gceist (trahana kesht) - quizzes
eolas ginearálta (awliss ginearaalta) - general knowledge
Na ceisteanna (ne keshtana) - the questions
Cad é príomhchathair na Fraince? (cadge ay preeookhaher na franka) - What is the capital of France?
Cá bhfuil Caolas Bheiring? (ca wil cayliss vering) - where is the Bering Strait?
Cad é an fásach is mó ar domhan? (cadge ay an faasakh is moe er dowan) - What is the biggest desert in the world?
an Mholdóiv (un woldawv) - Moldova
Cad é an bhliain inar thosaigh an Gorta Mór? (cadge ay un vleean inar hossee un gorta more) - In what year did the Great Famine begin?
Cé a bhain Corn an Domhain sa rugbaí i mbliana? (cay a win corn un dowan sa rudgbee i mleeana) - Who won this year’s rugby World Cup
Cé a fuair an cúl (cay a foor un cool) - who scored the goal
Cé a cheol (cay a cyawl) - who sang
cé a chum (cay a khum) - who composed
Cé a bhain Oscar (cay a win oscar) - who won an Oscar
Ceist Agam Ort - (kesht ugum ort) - I’ve a question for you
spraíúil (spreooil) - fun


{% extends "correctiv_eurosfueraerzte/zerodocs/form.html" %} {% load i18n %} {% block zerodoc_posting_means %}
{% trans "Download the following form letter, sign it, stamp it and send it to us via post, fax or email (details are on the letter)." %}
{% endblock %}


Gov. Ayade presents N1.1t budget for 2020
by The Eagle OnlineGovernor Ben Ayade of Cross River on Thursday presented a budget of N1.1trillion for 2020 to the State House of Assembly.
The budget, tagged “Budget of Olimpotic Meristemasis”, has a capital expenditure of N911 billion representing 82.8 per cent and a recurrent expenditure of N188 billion, representing 17.2 per cent.
While explaining that meristemasis is the active cell that stimulates growth in a young plant, which in this case represented the state, he pointed out that, “the budget will catalyse into existence a great opportunity for the state to put all hands and legs on the pedal”.
He said the decision to set aside 82.8 per cent of the budget for capital expenditure, was indicative of government commitment that will continue to reduce recurrent expenditure and focus on capital expenditure.
On the sectoral breakdown, Ayade disclosed that the health sector has an allocation of N44 billion, education N38 billion, New City Development N35 billion while agriculture was allocated N22 billion and social housing N12 billion, among others.
The governor announced that his administration would sustain its current tax policy with adjustment.
“All low income people like civil servants earning below N100,000 will be exempted from tax.
“Small scale businesses like barbing saloon, hair dressing and others are hereby exempted from taxation,” he said.
He also abolished daily levy of between N500 and N1000 by taxis in the state, noting that they will now pay N2000 only every month.
“We must come to the understanding that indeed any state whose budget is driven by envelope size is limited in vision.
“There are two ways in business and public sector management that you place your budget. It is either that your budget comes as an expression of your envelope size or as an expression of your ambition.
“The prosperity agenda set for this state does not allow me the opportunity of an envelope budgeting,” he said.
Previous Post
Oshodi-Isolo LG signs new players
Next Post
Buhari meets Speakers of 36 states Houses of Assembly at Aso Rock


Dungeons & Dragons * * (out of * * * * )
Directed by Courtney Solomon. Cast: Justin Whalin, Marlon Wayans, Zoe McLellan, Jeremy Irons, Thora Birch, Bruce Payne, Kristen Wilson, Lee Arenberg, Tom Baker. 2000 - 108 minutes Rated PG-13 (for violence and mild profanity). Reviewed by Dustin Putman, December 10, 2000.
The role-playing game, "Dungeons & Dragons," has had a heavy cult following since the mid-1970s. Although popularity has seemed to have faltered in recent years, it has taken two-and-a-half decades for the game to be adapted into a live-action feature. Not being a close follower of the game, "Dungeons & Dragons," the film, had to stand on its own for me, and it does. Knowing very few particulars of the plot before stepping into the theater auditorium, it was relatively easy to follow and kept me fairly interested for the entirety of its running time (a great feat, indeed, for someone who isn't a fan of sword-and-sorcery stories).
The problem with the movie does not have as much to do with its entertainment value as it does about its clearly restricted budget (reportedly $36-million), which is simply not enough money to do such an epic story justice, as well as its decidedly threadbare screenplay, by writer-director Courtney Solomon. The appearance of dungeons are few and far between, while the only sign of dragons come during the first and last ten minutes of the 108-minute running time. The war of dragons that make up the grand finale are impressive visual effects, indeed, but not overwhelming. They always look like well-done computer-generated graphics, rather than actual living-and-breathing creatures, as do most of the backgrounds. If anything, the effects in "Dungeons & Dragons" are picture-perfect examples of realism and artistry compared to the recent haphazard bomb, "Battlefield Earth."
Set in the mythical empire of Izmer, 17-year-old Empress Savina (Thora Birch) is in the midst of a controversial fight with the dastardly Profion (Jeremy Irons), a powerful magic-user. The Empress wholeheartedly believes that the upper-class Mages and lower-class commoners should finally be treated as equals, while Profion disagrees. In an attempt to capture a powerful rod that controls the kingdom, Profion sends his henchman Damidar (Bruce Payne) out to find it, while bright-eyed commoners Ridley (Justin Whalin) and Snails (Marlon Wayans), along with Mage Marina (Zoe McLellan), find themselves on the opposing side, appointed to once again bring justice to the land.
"Dungeons & Dragons" is a respectable take on the classic good-versus-evil theme, despite its constant resemblance to a low-rent version of "Star Wars." While a sometimes pleasurable diversion, the writing and aformentioned budget restraints bring the end result down several notches. Since director Solomon (a long-time "D&D" fan) knew that money would be tight, he should have concentrated on making the story and writing original and smart. Alas, his script is ridden with cliches and the dialogue comes off unintentionally silly.
Not helping matters are the mediocre performances given by all. Best of the lot is most likely Justin Whalin (1991's "Child's Play 3"), as Ridley, as he is the center of the movie and equips himself well. He is bland, however, particularly in comparison to Marlon Wayans (2000's "Scary Movie"), as his sidekick Snails, whose wisecracks aren't nearly as annoying as expected. Rounding out the main three players is Zoe McLellan (1997's "Inventing the Abbotts"), who may or may not be a good actress; from the evidence presented here, I would guess the latter. As the head villain, Jeremy Irons (1998's "The Man in the Iron Mask") is outrageously cheesy, overacting and chewing up the scenery to such a degree that everyone acting next to him might as well not even open their mouths--his yelling and evil laughter often drown out the other dialogue. Finally, Thora Birch (1999's "American Beauty") is severely wasted as Empress Savina. To go from such a masterful motion picture as "American Beauty" down to something as inconsequential as "Dungeons & Dragons" (and to not even be particularly that good) is mindboggling. Hopefully, Birch got a servicable paycheck for playing what is basically the poor-man's Queen Amidala character, played by Natalie Portman, from "Star Wars--Episode 1."
With a bigger budget, a stronger screenplay, and generally more accomplished actors, "Dungeons & Dragons" might have been a film worth remembering--the first notable release of its type since the "Conan" movies. Instead, it stands as a near-success with too many holes and problematic sections to be able to recommend. Perhaps the best thing that can honestly be said about "Dungeons & Dragons" is that it could have been much worse. Now how's that for being positive?
- Copyright 2000 by Dustin Putman http://www.young-hollywood.com http://www.atnzone.com http://us.imdb.com/ReviewsBy?Dustin+Putman ( Reviews by Dustin Putman )
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Kelly, from Plymouth, said her six-month-old daughter Grace had a burn-like mark after 'Sticky Slug' landed on her head.
The toy, which are meant to be thrown around by youngsters for fun, also left a mark on tablecloth at their home.

"It was quite late so I put her to bed, and when she woke up the next morning I noticed she had a red mark where the slug had landed, almost like a burn.
"I'd put the slug on my table cloth overnight and went to look and it had also melted quite an obvious and visible mark into my table."
She took baby Grace to the doctors who told her to keep monitoring in case her condition worsened.
She complained to the Garden Centre where she bought the £2 toy around a month ago and was told to contact Scotland-based manufacturer Keycraft.
Kelly said: "I received a call from Keycraft, who offered me £20 to replace my tablecloth, but refused to acknowledge what had happened to Grace's face, so obviously I wasn't happy with it."
She received a second offer of £100 but Kelly didn't want the money and wanted them to take responsibility that 'the toy burned my child'.
"It should not be being sold. If a so-called children's toy can mark my baby and melt my tablecloth, something clearly isn't right," she added.
Toy manufacturer Keycraft asked Kelly to send the toy back but she had already thrown it away.
A Keycraft spokesman said: "We were concerned to learn of a possible safety incident with our Sticky Slug toy which we and our supplier have sold for several years without any similar issues being reported.
"On being alerted to the alleged incident we contacted the parent to give support and to request that they consult their GP to examine the child’s skin and identify any possible allergic reaction to the materials used in the toy.
"We also asked for the toy to be returned to us so we could investigate it thoroughly. The parent was unable to respond positively to either of these requests, which limits our ability to address the issue as effectively as we would hope to.
"We have attempted to offer support as best we can despite these limitations, and will continue to do so.
"Sticky Slug is not suitable for children under 36 months and the packaging is clearly labelled with warnings to inform parents of this.
"The parent initially stated that a two-year-old child had been playing with the toy when it allegedly came in to contact with the baby.
"After we pointed out the age grade of the toy, the older child’s age was said to be four years."


--- layout: default ---
Find out more about solar cells and the emerging material that is Perovskite below.


A farmer is a person engaged in agriculture, raising living organisms for food or raw materials. The term usually applies to people who do some combination of raising field crops, orchards, vineyards, poultry, or other livestock. A farmer might own the farmed land or might work as a laborer on land owned by others, but in advanced economies, a farmer is usually a farm owner, while employees of the farm are known as farm workers, or farmhands. However, in the not so distant past, a farmer was a person who promotes or improves the growth of (a plant, crop, etc.) by labor and attention, land or crops or raises animals (as livestock or fish). Over 1/2 billion farmers are smallholders, most of whom are in developing countries, and who economically support almost two billion people. Globally, women constitute more than 40% of agricultural employees.


Developed by: Ben Reeves University of Michigan class of 2019
Released under the MIT License. View the source code on GitHub.
Copyright (c) 2016 Benjamin Reeves


{% include head.html %}
{% include nav.html %} {% include header-fr.html %} {% include services-fr.html %} {% include call-to-action-fr.html %} {% include archives-fr.html %} {% include portfolio-fr.html %} {% include contact-fr.html %} {% include partners-fr.html %} {% include scripts.html %}


{{_("Dear")}} {{ first_name }}{% if last_name %} {{ last_name}}{% endif %},
{{_("Your training document {0} has been rejected by central delivery {1}.Please read the comments given by central delivery.").format(training_name, cd)}}
Comments By CD:
{{ comments }}
{{_("Thank you")}}
Team MyCFO


--- layout: archive title: Zulip Chat Archive permalink: /stream/116395-maths/topic/filter.20disease.html ---
This feels really strange: I just caught myself writing a long string of manipulations involving filters pull-backed, push-forwarded, multiplied and compared, because it felt easier than thinking in terms of compositions of limits and such things
The key point is how filters allow to talk about limits when x tends to x' while staying in the image of a dense embedding.
It's on my to-do list to understand if and when filters can be pulled back and pushed forward
filters live on bare sets, hence can be pulled back and pushed forward by bare set morphisms
aka any map
both operation are order preserving. And f_*F \le G iff F \le f^*G
Now let's do composition of limits. f goes to G along F (I don't know how to pronounce this) if, by definition, f_*F \le G. Now it's an exercise for you
of course f_* is covariantly functorial
Are they adjoint functors? @Kenny Lau you'd like this stuff
You'll soon be complaining that they teach limits wrong at Imperial. Did you see my filter blog post? Maybe you know all this stuff already
What would be Hom between two filters?
sorry
you mean for the poset structure?
Yes, we have f_*f^*G \le G and F \le f^f_F for all F and G
I must be careful not to be carried away, or else I'll be tempted to teach this to innocent students
where are adjoint functors in mathlib now that we got a category PR accepted?
You're right, I guess it must be like the opens in a top space, the inclusions are the only morphisms, and the one equation you mentioned above is I guess precisely the affirmative answer
I managed to abstract the lemma I was using three times in my proof.
import analysis.topology.continuity open set filter variables {α : Type*} [topological_space α] variables {β : Type*} [topological_space β] variables {γ : Type*} variables {δ : Type*} [topological_space δ] variables {e : α → β} {f : γ → α} {g : γ → δ} {h : δ → β} /- γ -f→ α g↓ ↓e δ -h→ β -/ lemma key {d : δ} {a : α} (H : tendsto h (nhds d) (nhds (e a))) (comm : h ∘ g = e ∘ f) (de : dense_embedding e) : tendsto f (vmap g (nhds d)) (nhds a) := begin have lim1 : map g (vmap g (nhds d)) ≤ nhds d := map_vmap_le, replace lim1 : map h (map g (vmap g (nhds d))) ≤ map h (nhds d) := map_mono lim1, rw [filter.map_map, comm, ← filter.map_map, map_le_iff_le_vmap] at lim1, have lim2 : vmap e (map h (nhds d)) ≤ vmap e (nhds (e a)) := vmap_mono H, rw de.induced at lim2, exact le_trans lim1 lim2, end
@Johannes Hölzl I hope you're proud of me. But I'd still be interested if there is a smarter proof (or if it's already in mathlib).
By the way, why isn't dense_embedding
a class?
Also, I find it a bit painful that the map is an implicit argument in map_mono
and vmap_mono
.
Now I'll go sleeping, feeling I've learned some nice stuff today.
+1 for the commutative diagram!
where are adjoint functors in mathlib now that we got a category PR accepted?
Sorry to disappoint, @Patrick Massot, but only the first epsilon of category theory has been PR'd. It's a ways to go before you have adjoint functors.
However, adjoint functors between posets are Galois connections, and they are in mathlib (order/galois_connection.lean
).
@Johannes Hölzl I hope you're proud of me. But I'd still be interested if there is a smarter proof (or if it's already in mathlib).
Looks good to me. I don't think there is a related proof in mathlib. I'm on a bike trip this week, I can check out next Monday.
@Scott Morrison Sorry about this joke. I know it's only the beginning, I did look at your PR.
There is no hurry at all. The more difficult question is: how should we name that?
And also I'm a bit confused by the relation between dense_embedding
and embedding
in mathlib. My lemma actually doesn't use the dense part, but it uses the way the induced
axiom is stated. But I guess it could be stated that way for embeddings too, right?
Last updated: Apr 24 2020 at 19:02 UTC


Thermostat
Temperature:
12
API Temperature:
Up
Down
Reset
Power saving mode:
on
Toggle Power saving mode
Energy status


Color Refinement
Round
keyboard_arrow_left
Previous round of color refinement [left, backspace, h]
0
keyboard_arrow_right
Next round of color refinement [right, space, l]
of
help
URL parameters:
#n=
&m=
&charge=
Also try:
&seed=hello (to set the random seed)
&navbar=false (hide navbar)
&crtrees=false (hide trees and improve performance)
replay
Resample random graph from a new seed [r]
keyboard_arrow_up
Increase charge [up, k]
keyboard_arrow_down
Decrease charge [down, j]
functions
Show number of nodes with given color [c]
by
Holger Dell
(2020). Source code on
github
.


Tricia Miranda’s Top 10 Ways to Own Your Career
Commercial superstar Tricia Miranda is everywhere. Her viral class videos dominate our YouTube feed, her choreography was seen by millions of people during Missy Elliott’s Super Bowl 50 performance and she recently completed work on her own MTV show, “Going Off.” If there’s anyone who can give advice on how to be a consummate professional, it’s Miranda. Wondering about the kinds of details that define a career and make you unforgettable? Here are Miranda’s words of wisdom. 1. Create a choreographic signature. “You may want to copy what’s already been done, because that’s what’s hot, or getting a lot of views. But roll with your unique style. It might take longer than copying, but that’s what makes you memorable.” 2. Know your worth. “We want to make a living doing what we love. But don’t take a job just because it’s a paycheck. Respect yourself as an artist and figure out what you feel OK with.” 3. Love the skin you’re in. “When you’re insecure, people can sense it and no one wants to hire that. Being comfortable with yourself is huge in our industry. When you’re not chosen at an audition, it’s not a personal attack. You’re already enough.” 4. Allow things to happen organically. “I’m a strong believer in taking your time. Walking into an audition or class with confidence is great. But choreographers see right through it when you’re in their face.” 5. There’s a difference between “current” and “trendy.” “It’s important to stay current, because dance styles are rapidly evolving. But if you only perform or choreograph popular moves, you’re limiting yourself.” 6. Pull your weight. “A lot of dancers like to blame their agent for not getting them gigs. But it’s a relationship in which both parties have to do work. Set up regular meetings with your agent. Tell him or her what your goals are and what kinds of jobs you want.” 7. Polish your look. “Commercial dancers don’t have to have any particular look anymore. Find what’s natural for you and amp it up—pull the choreographer’s focus. Invest in your hair, wardrobe and makeup.  8. Delegate, delegate, delegate. “No one person can do every single job. Pull in people who are trustworthy, work extremely hard and know what you want.” 9. Make connections. “Networking and creating relationships is super-important. If you’re uncomfortable running up to choreographers or teachers, start by just going to a ton of classes.” 10. Being human > being perfect. “Validation and recognition on social media shouldn’t give you a sense of entitlement. If you’re not getting called out in class, it’s no reason to feel embarrassed. Let your fans see you as someone who’s still learning. It’s healthy and important to mess up.”


Mourinho brings in new backroom staff
by TEAMtalk MediaNAIROBI, Kenya, Nov 21 – Portuguese tactician Jose Mourinho has wasted no time in appointing his new backroom staff and has vowed to lift Tottenham Hotspur up the Premier League table.
The 56-year-old has been named as Mauricio Pochettino’s successor, signing a three-and-a-half-year deal at the north London club and has already named his backroom team.
Joao Sacramento and Nuno Santos have joined from Lille as assistant manager and goalkeeping coach, respectively.
Carlos Lalin arrives as fitness coach, Ricardo Formosinho as tactical analyst and Giovanni Cerra as technical analyst. All three worked under Mourinho at Manchester United.
Mourinho met his new squad following his hasty appointment, which was announced less than 12 hours after Mauricio Pochettino was fired, on Wednesday and then took training ahead of his first game in charge at West Ham on Saturday.
The Portuguese, who has been out of work since losing his job at United last December, inherits a squad that are languishing in the bottom half of the Premier League, having taken 14 points from their 12 games.
They are 11 points off the top four and while Mourinho stopped short of saying Spurs could bridge that gap, he promised they would be in a better position once he gets going.
Mourinho is certainly up for the challenge and says he is determined to ‘bring happiness to everyone that loves the club’.
“In relation to the Premier League I think we know where we are and we know that we don’t belong there,” he told Spurs TV. “We should just play match after match. The next match we want to win and that is the same for the next and the next and the next until the last.
“At the end of the season we will see where we are but I know that we are going to be in a different position than we are now.”
Mourinho will hold his first press conference with the assembled media at 2pm on Thursday.
(Visited 61 times, 5 visits today)


Rogues Among the Stars __________ _____ ____________ _________ \______ \ / _ \ \___ ___/ / _____/ | _/ / / \ \ | | \_____ \ | | \ / /___\ \ | | ___/ \ | | \ \ | / | | / \ |____|_ / /\ \___|_ / /\ |_ / /\ /_______ / /\ \/ \/ \/ \/ \/ \/ \/ \/
A Roguelike Retro Game Made for the 7DRL Challenge 2020
A keyboard is required to play.
Press Enter to begin.
Coding by Luke @ Deathray Games
Based on Runestar: Origins
Uses the open source libraries: rote js and rot js
Fonts: "Fix15Mono-Bold" by LambdaHack and "AppleII"
Thanks to Rougelike Radio and the /r/roguelikedev subreddit for inspiration.
Based on Runestar: Origins
Uses the open source libraries: rote js and rot js
Fonts: "Fix15Mono-Bold" by LambdaHack and "AppleII"
Thanks to Rougelike Radio and the /r/roguelikedev subreddit for inspiration.


Notify
HMRC that you’re required to send a
country-by-country report.
Register to use the country-by-country reporting service.
Send a report using the reporting service.
The UK follows the country-by-country reporting requirements of the
Organisation for Economic Co-operation and Development (OECD).
You’ll have to send HMRC a report
if you meet certain criteria.
Groups which must complete a
report
The reporting requirements apply to multinational groups with a consolidated
revenue of €750 million or more in the relevant accounting period.
You can find information on the qualifying criteria, and other areas, in the
International
Exchange of Information Manual.
You’ll need to know which business, company or partnership is in overall
control of your multinational group. This will be your ‘group parent
business’, which the OECD refer to as the 'ultimate parent entity'.
Who must send the report
For HMRC’s purposes, you’ll have
to send us your group’s country-by-country report if you’re any of the
following:
• based in the UK, and you’re the group parent business of the group in
question
• the highest level UK business of a group whose group parent business is
based in a country that either:
    • doesn’t require that group parent business to file a country-by-country
report
    • has entered into a tax information exchange agreement, but with no
country-by-country reporting requirements
    • has information exchange agreements already in place between it and the
UK, but HMRC has notified you
that they aren’t working effectively
You can also volunteer
to send HMRC a report if you
aren’t required to do so.
Notifications
If your group needs to send a report, you must tell HMRC
each year at the end of your accounting period:
• that this is the case
• who will be sending the report
• which country the report will be sent to
You do this by emailing notification.cbcrfiling@@hmrc.gsi.gov.uk.
Don’t send your country-by-country report to the notification
mailbox.
You will have until 1 September 2017 to do so if this is later than your
relevant accounting period.
If you have an HMRC Customer
Relationship Manager (CRM),
copy them into your email.
Register to send a report
If you’ve told HMRC you’ll need
eo send a country-by-country report to us, you’ll need to register
if you haven’t already done so.
Send your report
You’ll have to upload a valid, completed XML (extensible markup language)
file as part of the country-by-country reporting
process.
XML is designed to store and transfer data across different systems. The XML
format is required by the OECD,
and the required structure for completing it is referred to as a ‘schema’.
You may need to ask a colleague with knowledge of XML to create the file for you to send.
You must follow these
rules when completing the schema.
In order to send HMRC your
report, you’ll use the reporting
service.
HMRC recommends you register at
least 1 day before you need to send the report as you’ll need the country-by-country
ID number you’ll receive from registering in order to complete your XML
schema.
Deadline
You must have sent your report within 12 months from the end of your relevant
accounting period.
If you need to correct or amend your report after you send it to HMRC,
you have 3 years from the end of the relevant accounting period to do so.
Penalties
You could be charged a penalty for late filing or inaccuracies in your
country-by-country report. You may be charged:
• £300 for failing to notify
HMRC by the notification deadline,
with a daily penalty of up to £60
• £300 for failing to report by the reporting
deadline, with a daily penalty of up to £60
• up to £3,000 for an inaccurate report
If there’s an error in your report, you can send a replacement schema by
using the reporting service again.
You won’t receive a penalty for an inaccurate report where you’ve sent an
accurate replacement schema before the deadline.
If you already have an HMRC CRM, they should be your first
point of contact for any questions in relation to:
• notifications
• the registration service
• the reporting service
• HMRC’s rules for completing
the XML schema
If you don’t have a CRM,
you can email HMRC.
You can find more details on the above in the International
Exchange of Information Manual.