diff --git a/.Rproj.user/9DAE6990/sources/prop/3A328548 b/.Rproj.user/9DAE6990/sources/prop/3A328548 index 7a73a41bfdf76d6f793007240d80983a52f15f97..a5638714b0481f1423ea85365c8af64243a71277 100644 --- a/.Rproj.user/9DAE6990/sources/prop/3A328548 +++ b/.Rproj.user/9DAE6990/sources/prop/3A328548 @@ -1,2 +1,4 @@ { + "cursorPosition" : "9,51", + "scrollLine" : "0" } \ No newline at end of file diff --git a/.Rproj.user/9DAE6990/sources/prop/75F49619 b/.Rproj.user/9DAE6990/sources/prop/75F49619 index 7a73a41bfdf76d6f793007240d80983a52f15f97..4c067597f326f93a2178a77bfffe89df9d1ceed1 100644 --- a/.Rproj.user/9DAE6990/sources/prop/75F49619 +++ b/.Rproj.user/9DAE6990/sources/prop/75F49619 @@ -1,2 +1,4 @@ { + "cursorPosition" : "20,46", + "scrollLine" : "0" } \ No newline at end of file diff --git a/.Rproj.user/9DAE6990/sources/prop/D602FFE4 b/.Rproj.user/9DAE6990/sources/prop/D602FFE4 index 1b4759ca6abaa64809f32a79600c59dd5bce738e..e5eb4991d110bdccead8e28e67be8913da57431f 100644 --- a/.Rproj.user/9DAE6990/sources/prop/D602FFE4 +++ b/.Rproj.user/9DAE6990/sources/prop/D602FFE4 @@ -1,5 +1,5 @@ { - "cursorPosition" : "89,0", + "cursorPosition" : "106,18", "last_setup_crc32" : "39B546A65bfca283", - "scrollLine" : "74" + "scrollLine" : "90" } \ No newline at end of file diff --git a/.Rproj.user/9DAE6990/sources/s-39B546A6/17AE345 b/.Rproj.user/9DAE6990/sources/s-39B546A6/17AE345 deleted file mode 100644 index 3d4ffec7d1a62ab16711b90287eab022e3216334..0000000000000000000000000000000000000000 --- a/.Rproj.user/9DAE6990/sources/s-39B546A6/17AE345 +++ /dev/null @@ -1,33 +0,0 @@ -{ - "collab_server" : "", - "contents" : "", - "created" : 1622641680399.000, - "dirty" : false, - "encoding" : "", - "folds" : "", - "hash" : "0", - "id" : "17AE345", - "lastKnownWriteTime" : 140481884136632, - "last_content_update" : 1622641680399, - "path" : null, - "project_path" : null, - "properties" : { - "cacheKey" : "E58FACDB", - "caption" : "stuart_tab", - "contentUrl" : "grid_resource/gridviewer.html?env=&obj=stuart_tab&cache_key=E58FACDB", - "displayedObservations" : 11125, - "environment" : "", - "expression" : "stuart_tab", - "object" : "stuart_tab", - "preview" : 0, - "totalObservations" : 11125, - "variables" : 7 - }, - "read_only" : false, - "read_only_alternatives" : [ - ], - "relative_order" : 2, - "source_on_save" : false, - "source_window" : "", - "type" : "r_dataframe" -} \ No newline at end of file diff --git a/.Rproj.user/9DAE6990/sources/s-39B546A6/76AC3EC b/.Rproj.user/9DAE6990/sources/s-39B546A6/76AC3EC index 669afa63ba7559a7a854776221d12c0cd57d41e0..19b279e0190cba636ccbe66aa8dcf40ccca650c5 100644 --- a/.Rproj.user/9DAE6990/sources/s-39B546A6/76AC3EC +++ b/.Rproj.user/9DAE6990/sources/s-39B546A6/76AC3EC @@ -5,13 +5,15 @@ "dirty" : false, "encoding" : "UTF-8", "folds" : "", - "hash" : "897610086", + "hash" : "0", "id" : "76AC3EC", - "lastKnownWriteTime" : 1622462353, - "last_content_update" : 1622462353, + "lastKnownWriteTime" : 1622644628, + "last_content_update" : 1622644628349, "path" : "~/stuart_package/stuart/R/mark_match.R", "project_path" : "R/mark_match.R", "properties" : { + "cursorPosition" : "20,46", + "scrollLine" : "0" }, "read_only" : false, "read_only_alternatives" : [ diff --git a/.Rproj.user/9DAE6990/sources/s-39B546A6/76AC3EC-contents b/.Rproj.user/9DAE6990/sources/s-39B546A6/76AC3EC-contents index 8781242a7568eb4081bcd0170f5ff17a049f2358..e1c38342708d568c92282dd02bf7938859b2d1d0 100644 --- a/.Rproj.user/9DAE6990/sources/s-39B546A6/76AC3EC-contents +++ b/.Rproj.user/9DAE6990/sources/s-39B546A6/76AC3EC-contents @@ -13,12 +13,12 @@ mark_match <- function(tab, #tab_mark df #finds SNPs that are in both files: snp_strains <- as.character(ref$marker) #extracts SNPs in strains ref geno file - snp_genfile <- as.character(tab$SNP.Name) #extracts SNPs in cross geno file + snp_genfile <- as.character(tab$marker) #extracts SNPs in cross geno file snp <- intersect(snp_strains,snp_genfile) #take intercept #add results in exclude column - return(tab %>% mutate(exclude_match=ifelse(!SNP.Name %in% snp, + return(tab %>% mutate(exclude_match=ifelse(!marker %in% snp, 1, 0))) diff --git a/.Rproj.user/9DAE6990/sources/s-39B546A6/8DB3123E b/.Rproj.user/9DAE6990/sources/s-39B546A6/8DB3123E deleted file mode 100644 index ad4597a11476cab0ef8a820787d96988365976a3..0000000000000000000000000000000000000000 --- a/.Rproj.user/9DAE6990/sources/s-39B546A6/8DB3123E +++ /dev/null @@ -1,33 +0,0 @@ -{ - "collab_server" : "", - "contents" : "", - "created" : 1622642648310.000, - "dirty" : false, - "encoding" : "", - "folds" : "", - "hash" : "0", - "id" : "8DB3123E", - "lastKnownWriteTime" : 140647294042113, - "last_content_update" : 1622642648310, - "path" : null, - "project_path" : null, - "properties" : { - "cacheKey" : "B33E01E3", - "caption" : "tab", - "contentUrl" : "grid_resource/gridviewer.html?env=&obj=tab&cache_key=B33E01E3", - "displayedObservations" : 2000, - "environment" : "", - "expression" : "tab", - "object" : "tab", - "preview" : 0, - "totalObservations" : 2000, - "variables" : 7 - }, - "read_only" : false, - "read_only_alternatives" : [ - ], - "relative_order" : 14, - "source_on_save" : false, - "source_window" : "", - "type" : "r_dataframe" -} \ No newline at end of file diff --git a/.Rproj.user/9DAE6990/sources/s-39B546A6/96AB3736 b/.Rproj.user/9DAE6990/sources/s-39B546A6/96AB3736 index 1b68bc9ef4da3c55cc0937cf143165d551e66719..ad317c9a6404f708108765fc1086dcf5b8cb6ac1 100644 --- a/.Rproj.user/9DAE6990/sources/s-39B546A6/96AB3736 +++ b/.Rproj.user/9DAE6990/sources/s-39B546A6/96AB3736 @@ -5,16 +5,16 @@ "dirty" : false, "encoding" : "UTF-8", "folds" : "", - "hash" : "3133824271", + "hash" : "0", "id" : "96AB3736", - "lastKnownWriteTime" : 1622642682, - "last_content_update" : 1622642682378, + "lastKnownWriteTime" : 1622645218, + "last_content_update" : 1622645218034, "path" : "~/stuart_package/stuart/vignettes/stuaRt.Rmd", "project_path" : "vignettes/stuaRt.Rmd", "properties" : { - "cursorPosition" : "89,0", + "cursorPosition" : "106,18", "last_setup_crc32" : "39B546A65bfca283", - "scrollLine" : "74" + "scrollLine" : "90" }, "read_only" : false, "read_only_alternatives" : [ diff --git a/.Rproj.user/9DAE6990/sources/s-39B546A6/96AB3736-contents b/.Rproj.user/9DAE6990/sources/s-39B546A6/96AB3736-contents index 123928d6aded4403210eb7a59eeca6c059d7f7f0..e80cec19543afb20b7ca13c7553a96563d2a8641 100644 --- a/.Rproj.user/9DAE6990/sources/s-39B546A6/96AB3736-contents +++ b/.Rproj.user/9DAE6990/sources/s-39B546A6/96AB3736-contents @@ -91,9 +91,9 @@ data(stuart_tab) summary(stuart_tab) ``` -Then we will use the different mark_* functions in order to filter the markers. First, we can use mark_match() function. This function excludes markers that are in your genotype file but not in the reference genotype dataset. We recomend using this function as the chip used for genotyping may change. +Then we will use the different mark_* functions in order to filter the markers. First, we can use `mark_match()`` function. Here, the parental strains were genotyped with the F2 individuals, but it can happen that you use previous genotyping results for the parental strains. `mark_match()` function excludes markers that are in your genotype file but not in the reference genotype dataset. We recomend using this function as the chip used for genotyping may change. -```{r mark_match,eval=F} +```{r mark_match} tab2 <- mark_match(stuart_tab,ref=strains) @@ -102,28 +102,28 @@ tab2 %>% filter(exclude_match==1) Here the reference strains were genotyped with the same version of the chip as the F2 individuals so no marker was excluded. -Then, we can use the mark_poly() function, which will exclude the markers that are not polymorphic. +Then, we can use the `mark_poly()` function, which will exclude the markers that are not polymorphic. -```{r mark_poly ex,eval=F} +```{r mark_poly ex} tab2 <- mark_poly(tab2) head(tab2) ``` -The mark_prop() function can be used to filter markers depending on the proportion of each genotype. Here, we have a F2 so we can use the "homo" argument in order to filter depending on the proportion of both homozygous genotype. If we have a N2, we can filter with the proportion of homozygous individuals with the "homo" argument and of heterozygous individuals with the hetero" argument. Moreover, this function allows to filter marker depending on the proportion on non genotyped animals. By defaults, markers for which more than 50% of individuals were not genotyped. +The `mark_prop()` function can be used to filter markers depending on the proportion of each genotype. Here, we have a F2 so we can use the "homo" argument in order to filter depending on the proportion of both homozygous genotype. If we have a N2, we can filter with the proportion of homozygous individuals with the "homo" argument and of heterozygous individuals with the hetero" argument. Moreover, this function allows to filter marker depending on the proportion on non genotyped animals. By defaults, markers for which more than 50% of individuals were not genotyped. ```{r mark_prop ex,eval=F} tab2 <- mark_prop(tab2,cross="F2",homo=0.1,hetero=0.1) head(tab2) ``` -Last, we can use the mark_allele(). This very helpful function excludes markers for which the alleles found in the F2/N2 individuals do not correspond to the alleles found in the parental strains. For example, if for a marker is not polymorphic in the parental strains but we found two alleles in the F2/N2 individuals, it will be excluded. +Last, we can use the `mark_allele()` function. This very helpful function excludes markers for which the alleles found in the F2/N2 individuals do not correspond to the alleles found in the parental strains. For example, if for a marker is not polymorphic in the parental strains but we found two alleles in the F2/N2 individuals, it will be excluded. ```{r mark_allele,eval=F} tab2 <- mark_allele(tab=tab2,ref=strains,par1="parent1",par2="parent2") tab2 %>% arrange(desc(exclude_allele)) %>% head() ``` -Indeed, we can see that the markers excluded with mark_allele() have different alleles in the parental strains. +Indeed, we can see that the markers excluded with `mark_allele()` have different alleles in the parental strains. ```{r mark_allele-strains,eval=F} strains %>% filter(marker %in% c("gJAX00038569","gJAX00425031","gUNC12245354","gUNC15530876","gUNC21555204","gUNC21596600")) %>% arrange(marker) %>% select(marker,parent1,parent2) @@ -131,7 +131,7 @@ strains %>% filter(marker %in% c("gJAX00038569","gJAX00425031","gUNC12245354","g # Creation of the R/qtl file -After excluding the problematic markers, we can create the R/qtl file. The individuals must have the same ID in the geno and in the pheno file. If there is a prefix in the geno file that must be removed in order to acheive this, you can use the "prefix" argument. The "path" argument can be used in order to create a CSV file that you can laod with qtl::read.cross. +After excluding the problematic markers, we can create the R/qtl file. The individuals must have the same ID in the geno and in the pheno file. If there is a prefix in the geno file that must be removed in order to acheive this, you can use the "prefix" argument. The "path" argument can be used in order to create a CSV file that you can laod with `qtl::read.cross`. ```{r write_qtl,eval=F} rqtl_file <- write_rqtl(geno=genos,pheno=phenos,tab=tab2,ref=strains,par1="parent1",par2="parent2",prefix="ind_",pos="cM_cox") diff --git a/.Rproj.user/9DAE6990/sources/s-39B546A6/C2CE7FEA b/.Rproj.user/9DAE6990/sources/s-39B546A6/C2CE7FEA deleted file mode 100644 index 5b72e3a7a36f8d69de0503f12879ea24bdec4739..0000000000000000000000000000000000000000 --- a/.Rproj.user/9DAE6990/sources/s-39B546A6/C2CE7FEA +++ /dev/null @@ -1,33 +0,0 @@ -{ - "collab_server" : "", - "contents" : "", - "created" : 1622638761182.000, - "dirty" : false, - "encoding" : "", - "folds" : "", - "hash" : "0", - "id" : "C2CE7FEA", - "lastKnownWriteTime" : 1622638687, - "last_content_update" : 1622638761182, - "path" : null, - "project_path" : null, - "properties" : { - "cacheKey" : "862FB1D9", - "caption" : "annot_mini", - "contentUrl" : "grid_resource/gridviewer.html?env=&obj=annot_mini&cache_key=862FB1D9", - "displayedObservations" : 11125, - "environment" : "", - "expression" : "annot_mini", - "object" : "annot_mini", - "preview" : 0, - "totalObservations" : 11125, - "variables" : 12 - }, - "read_only" : false, - "read_only_alternatives" : [ - ], - "relative_order" : 6, - "source_on_save" : false, - "source_window" : "", - "type" : "r_dataframe" -} \ No newline at end of file diff --git a/.Rproj.user/9DAE6990/sources/s-39B546A6/C5228C18 b/.Rproj.user/9DAE6990/sources/s-39B546A6/C5228C18 index a48b29a0245e5ccb1ab077b14a31fa1bc6efba63..57f6d66cd07d3b881fe3dcc18d07bd201c027b9d 100644 --- a/.Rproj.user/9DAE6990/sources/s-39B546A6/C5228C18 +++ b/.Rproj.user/9DAE6990/sources/s-39B546A6/C5228C18 @@ -5,13 +5,15 @@ "dirty" : false, "encoding" : "UTF-8", "folds" : "", - "hash" : "1539229739", + "hash" : "0", "id" : "C5228C18", - "lastKnownWriteTime" : 1622462353, - "last_content_update" : 1622462353, + "lastKnownWriteTime" : 1622645200, + "last_content_update" : 1622645200474, "path" : "~/stuart_package/stuart/R/mark_poly.R", "project_path" : "R/mark_poly.R", "properties" : { + "cursorPosition" : "9,51", + "scrollLine" : "0" }, "read_only" : false, "read_only_alternatives" : [ diff --git a/.Rproj.user/9DAE6990/sources/s-39B546A6/C5228C18-contents b/.Rproj.user/9DAE6990/sources/s-39B546A6/C5228C18-contents index 168ccf3c35f28348477d6700238dc487666aae6a..170f601676934dbc84ae76f5dca7aa9967547b78 100644 --- a/.Rproj.user/9DAE6990/sources/s-39B546A6/C5228C18-contents +++ b/.Rproj.user/9DAE6990/sources/s-39B546A6/C5228C18-contents @@ -7,7 +7,7 @@ #' #' @export mark_poly <- function(tab){ - return(tab %>% mutate(exclude_poly=ifelse(is.na(Allele_2)==TRUE, + return(tab %>% mutate(exclude_poly=ifelse(is.na(allele_2)==TRUE, 1, 0))) } diff --git a/.Rproj.user/9DAE6990/sources/s-39B546A6/E7584E4F b/.Rproj.user/9DAE6990/sources/s-39B546A6/E7584E4F deleted file mode 100644 index c5aba762a2ab65e228efd618fd2292465c82cb7e..0000000000000000000000000000000000000000 --- a/.Rproj.user/9DAE6990/sources/s-39B546A6/E7584E4F +++ /dev/null @@ -1,33 +0,0 @@ -{ - "collab_server" : "", - "contents" : "", - "created" : 1622642417308.000, - "dirty" : false, - "encoding" : "", - "folds" : "", - "hash" : "0", - "id" : "E7584E4F", - "lastKnownWriteTime" : -1152921504606846976, - "last_content_update" : 1622642417308, - "path" : null, - "project_path" : null, - "properties" : { - "cacheKey" : "6BE6FDA8", - "caption" : "genos", - "contentUrl" : "grid_resource/gridviewer.html?env=&obj=genos&cache_key=6BE6FDA8", - "displayedObservations" : 1957993, - "environment" : "", - "expression" : "genos", - "object" : "genos", - "preview" : 0, - "totalObservations" : 1957993, - "variables" : 11 - }, - "read_only" : false, - "read_only_alternatives" : [ - ], - "relative_order" : 13, - "source_on_save" : false, - "source_window" : "", - "type" : "r_dataframe" -} \ No newline at end of file diff --git a/.Rproj.user/9DAE6990/viewer-cache/862FB1D9.Rdata b/.Rproj.user/9DAE6990/viewer-cache/862FB1D9.Rdata deleted file mode 100644 index 192c879fc924932c6b6bda4448066e64fbf92a34..0000000000000000000000000000000000000000 Binary files a/.Rproj.user/9DAE6990/viewer-cache/862FB1D9.Rdata and /dev/null differ diff --git a/.Rproj.user/9DAE6990/viewer-cache/E58FACDB.Rdata b/.Rproj.user/9DAE6990/viewer-cache/E58FACDB.Rdata deleted file mode 100644 index 305b55ce0cc1ca9c86f3470f5b973e64bc1c5a0c..0000000000000000000000000000000000000000 Binary files a/.Rproj.user/9DAE6990/viewer-cache/E58FACDB.Rdata and /dev/null differ diff --git a/R/mark_match.R b/R/mark_match.R index 8781242a7568eb4081bcd0170f5ff17a049f2358..e1c38342708d568c92282dd02bf7938859b2d1d0 100755 --- a/R/mark_match.R +++ b/R/mark_match.R @@ -13,12 +13,12 @@ mark_match <- function(tab, #tab_mark df #finds SNPs that are in both files: snp_strains <- as.character(ref$marker) #extracts SNPs in strains ref geno file - snp_genfile <- as.character(tab$SNP.Name) #extracts SNPs in cross geno file + snp_genfile <- as.character(tab$marker) #extracts SNPs in cross geno file snp <- intersect(snp_strains,snp_genfile) #take intercept #add results in exclude column - return(tab %>% mutate(exclude_match=ifelse(!SNP.Name %in% snp, + return(tab %>% mutate(exclude_match=ifelse(!marker %in% snp, 1, 0))) diff --git a/R/mark_poly.R b/R/mark_poly.R index 168ccf3c35f28348477d6700238dc487666aae6a..170f601676934dbc84ae76f5dca7aa9967547b78 100755 --- a/R/mark_poly.R +++ b/R/mark_poly.R @@ -7,7 +7,7 @@ #' #' @export mark_poly <- function(tab){ - return(tab %>% mutate(exclude_poly=ifelse(is.na(Allele_2)==TRUE, + return(tab %>% mutate(exclude_poly=ifelse(is.na(allele_2)==TRUE, 1, 0))) } diff --git a/stuart_0.1.0.tar.gz b/stuart_0.1.0.tar.gz index e4e3cefe63a27dd1f3522e92722e9461ed3d3bc7..37a19187856fd1245069768322f1ef5defff879f 100644 Binary files a/stuart_0.1.0.tar.gz and b/stuart_0.1.0.tar.gz differ diff --git a/vignettes/stuaRt.Rmd b/vignettes/stuaRt.Rmd index 123928d6aded4403210eb7a59eeca6c059d7f7f0..e80cec19543afb20b7ca13c7553a96563d2a8641 100755 --- a/vignettes/stuaRt.Rmd +++ b/vignettes/stuaRt.Rmd @@ -91,9 +91,9 @@ data(stuart_tab) summary(stuart_tab) ``` -Then we will use the different mark_* functions in order to filter the markers. First, we can use mark_match() function. This function excludes markers that are in your genotype file but not in the reference genotype dataset. We recomend using this function as the chip used for genotyping may change. +Then we will use the different mark_* functions in order to filter the markers. First, we can use `mark_match()`` function. Here, the parental strains were genotyped with the F2 individuals, but it can happen that you use previous genotyping results for the parental strains. `mark_match()` function excludes markers that are in your genotype file but not in the reference genotype dataset. We recomend using this function as the chip used for genotyping may change. -```{r mark_match,eval=F} +```{r mark_match} tab2 <- mark_match(stuart_tab,ref=strains) @@ -102,28 +102,28 @@ tab2 %>% filter(exclude_match==1) Here the reference strains were genotyped with the same version of the chip as the F2 individuals so no marker was excluded. -Then, we can use the mark_poly() function, which will exclude the markers that are not polymorphic. +Then, we can use the `mark_poly()` function, which will exclude the markers that are not polymorphic. -```{r mark_poly ex,eval=F} +```{r mark_poly ex} tab2 <- mark_poly(tab2) head(tab2) ``` -The mark_prop() function can be used to filter markers depending on the proportion of each genotype. Here, we have a F2 so we can use the "homo" argument in order to filter depending on the proportion of both homozygous genotype. If we have a N2, we can filter with the proportion of homozygous individuals with the "homo" argument and of heterozygous individuals with the hetero" argument. Moreover, this function allows to filter marker depending on the proportion on non genotyped animals. By defaults, markers for which more than 50% of individuals were not genotyped. +The `mark_prop()` function can be used to filter markers depending on the proportion of each genotype. Here, we have a F2 so we can use the "homo" argument in order to filter depending on the proportion of both homozygous genotype. If we have a N2, we can filter with the proportion of homozygous individuals with the "homo" argument and of heterozygous individuals with the hetero" argument. Moreover, this function allows to filter marker depending on the proportion on non genotyped animals. By defaults, markers for which more than 50% of individuals were not genotyped. ```{r mark_prop ex,eval=F} tab2 <- mark_prop(tab2,cross="F2",homo=0.1,hetero=0.1) head(tab2) ``` -Last, we can use the mark_allele(). This very helpful function excludes markers for which the alleles found in the F2/N2 individuals do not correspond to the alleles found in the parental strains. For example, if for a marker is not polymorphic in the parental strains but we found two alleles in the F2/N2 individuals, it will be excluded. +Last, we can use the `mark_allele()` function. This very helpful function excludes markers for which the alleles found in the F2/N2 individuals do not correspond to the alleles found in the parental strains. For example, if for a marker is not polymorphic in the parental strains but we found two alleles in the F2/N2 individuals, it will be excluded. ```{r mark_allele,eval=F} tab2 <- mark_allele(tab=tab2,ref=strains,par1="parent1",par2="parent2") tab2 %>% arrange(desc(exclude_allele)) %>% head() ``` -Indeed, we can see that the markers excluded with mark_allele() have different alleles in the parental strains. +Indeed, we can see that the markers excluded with `mark_allele()` have different alleles in the parental strains. ```{r mark_allele-strains,eval=F} strains %>% filter(marker %in% c("gJAX00038569","gJAX00425031","gUNC12245354","gUNC15530876","gUNC21555204","gUNC21596600")) %>% arrange(marker) %>% select(marker,parent1,parent2) @@ -131,7 +131,7 @@ strains %>% filter(marker %in% c("gJAX00038569","gJAX00425031","gUNC12245354","g # Creation of the R/qtl file -After excluding the problematic markers, we can create the R/qtl file. The individuals must have the same ID in the geno and in the pheno file. If there is a prefix in the geno file that must be removed in order to acheive this, you can use the "prefix" argument. The "path" argument can be used in order to create a CSV file that you can laod with qtl::read.cross. +After excluding the problematic markers, we can create the R/qtl file. The individuals must have the same ID in the geno and in the pheno file. If there is a prefix in the geno file that must be removed in order to acheive this, you can use the "prefix" argument. The "path" argument can be used in order to create a CSV file that you can laod with `qtl::read.cross`. ```{r write_qtl,eval=F} rqtl_file <- write_rqtl(geno=genos,pheno=phenos,tab=tab2,ref=strains,par1="parent1",par2="parent2",prefix="ind_",pos="cM_cox")