|
151 | 151 | "outputs": [], |
152 | 152 | "source": [ |
153 | 153 | "#First let's install mamba to configure our environment\n", |
154 | | - "! curl -L -O \"https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh\"\n", |
155 | | - "! bash Miniforge3-$(uname)-$(uname -m).sh -u -b -p $HOME/mambaforge\n", |
| 154 | + "! curl -L -O -s \"https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh\"\n", |
| 155 | + "! bash Miniforge3-$(uname)-$(uname -m).sh -u -b -p $HOME/mambaforge > /dev/null 2>&1\n", |
156 | 156 | "print(\"done\")" |
157 | 157 | ] |
158 | 158 | }, |
|
164 | 164 | "outputs": [], |
165 | 165 | "source": [ |
166 | 166 | "#now let's install several required packages\n", |
167 | | - "!mamba install -c bioconda picard samtools deeptools bedtools==2.27 ucsc-bedgraphtobigwig macs3 seacr meme manorm -y\n", |
168 | | - "!pip install jupyterquiz==2.0.7 jupytercards\n", |
169 | | - "!pip install --user igv-notebook\n", |
| 167 | + "!mamba install -q -c bioconda picard samtools deeptools bedtools==2.27 ucsc-bedgraphtobigwig macs3 seacr meme manorm -y\n", |
| 168 | + "!pip install -q jupyterquiz==2.0.7 jupytercards\n", |
| 169 | + "!pip install -q --user igv-notebook\n", |
170 | 170 | "print(\"done\")" |
171 | 171 | ] |
172 | 172 | }, |
|
254 | 254 | "metadata": {}, |
255 | 255 | "outputs": [], |
256 | 256 | "source": [ |
257 | | - "# These commands move into our Tutorial 2 directory and create our subdirectory structure.\n", |
| 257 | + "# These commands move into our Tutorial 1 directory and create our subdirectory structure.\n", |
258 | 258 | "!mkdir -p $wd/Submodule2/\n", |
259 | 259 | "%cd $wd/Submodule2/\n", |
260 | 260 | "!mkdir -p $wd/Submodule2/Filtering\n", |
|
271 | 271 | "outputs": [], |
272 | 272 | "source": [ |
273 | 273 | "#Let's copy and extract our tutorial files\n", |
274 | | - "!wget https://chromatinoccupancytutorial.s3.us-east-2.amazonaws.com/Submodule2.zip\n", |
| 274 | + "!wget https://nigms-sandbox.s3.us-east-1.amazonaws.com/chromatinoccupancytutorial/Submodule2.zip\n", |
275 | 275 | "!unzip Submodule2.zip\n", |
276 | 276 | "print(\"done\")" |
277 | 277 | ] |
|
362 | 362 | "metadata": {}, |
363 | 363 | "outputs": [], |
364 | 364 | "source": [ |
365 | | - "#list the files in CUTnRUNSam which we just downloaded.\n", |
| 365 | + "#list the files in ChIPseqSam which we just downloaded.\n", |
366 | 366 | "!ls $wd/Submodule2/Submodule2/CUTnRUNsam" |
367 | 367 | ] |
368 | 368 | }, |
|
371 | 371 | "id": "1df8945d", |
372 | 372 | "metadata": {}, |
373 | 373 | "source": [ |
374 | | - " You will notice that in addition to the mm39 sam files (mapped to mouse genome), we have additional sam files mapped to R64-1-1 (Saccharomyces cereviseae a.k.a the budding yeast) genome. These are for spike-in reads. In CUT&RUN and CUT&Tag, users add a constant and tiny amount of pre-fragmented heterogous DNA as \"spike-in\" (e.g., yeast spike-in for experiments targeting protein in mouse cells) to quantitatively compare signals or reads from the target genome. This helps to account for differences in cell number, DNA purification, library preparation, and sequencing efficiencies between controls and treatment sets. See PMID: PMID: [34117481](https://pubmed.ncbi.nlm.nih.gov/34117481/) " |
| 374 | + " You will notice that in addition to the mm39 sam files (mapped to mouse genome), we have additional sam files mapped to R64-1-1 (Saccharomyces cereviseae a.k.a the budding yeast) genome. These are for spike-in reads. In CUT&RUN and CUT&Tag, users add a constant and tiny amount of pre-fragmented heterogous DNA as \"spike-in\" (e.g., yeast spike-in for experiments targeting protein in mouse cells) to quantitatively compare signals or reads from the target genome. This helps to account for differences in cell number, DNA purification, library preparation, and sequencing efficiencies between controls and treatment sets. See PMID: [31232687](https://pubmed.ncbi.nlm.nih.gov/31232687/)" |
375 | 375 | ] |
376 | 376 | }, |
377 | 377 | { |
|
395 | 395 | "</div>In the cell below, let's view the first few lines of the bed file to see how they look.\n", |
396 | 396 | "</div>\n", |
397 | 397 | "\n", |
398 | | - "</div>Note: the first column (\"chrom\") denotes the chromosome number to which the reads mapped, the second and the third columns show the first and the last base pair positions of mapped fragment, \"chromStart\" and \"chromEnd\", respectively. Remember, we used paired-end sequencing, so we can obtain the coordinates of both the beginining an the end of each mapped fragment. This is the minimum requirement for a bed file. There can be up to 9 more columns. What are information can be there in a bed file? Learn more: [UCSC_BED_format] (https://genome.ucsc.edu/FAQ/FAQformat.html#format1)" |
| 398 | + "</div>Note: the first column denotes the chromosome number to which the reads mapped, the second and the third columns show the first and the last base pair positions of mapped fragment. Remember, we used paired-end sequencing, so we can obtain the coordinates of both the beginining an the end of each mapped fragment." |
399 | 399 | ] |
400 | 400 | }, |
401 | 401 | { |
|
415 | 415 | "metadata": {}, |
416 | 416 | "outputs": [], |
417 | 417 | "source": [ |
418 | | - "#Now let's make the bam and bed files for the treatment and IgG data.\n", |
419 | | - "#This may take a few minutes: 🕘\n", |
420 | | - "\n", |
| 418 | + "#Now let's do the same thing for the treatment data and IgG files.\n", |
421 | 419 | "!samtools view -b -h $wd/Submodule2/Submodule2/CUTnRUNsam/BRG1_CnR_FLV.mm39_chr4.sam -o $wd/Submodule2/Filtering/BRG1_CnR_FLV.mm39_chr4.bam\n", |
422 | 420 | "!bedtools bamtobed -bedpe -i $wd/Submodule2/Filtering/BRG1_CnR_FLV.mm39_chr4.bam | cut -f 1,2,6 | sort -k1,1 -k2,2n -k3,3n > $wd/Submodule2/Filtering/BRG1_CnR_FLV.mm39_chr4.bed\n", |
423 | 421 | "print(\"done with BRG1_CnR_FLV\")\n", |
|
434 | 432 | "metadata": {}, |
435 | 433 | "outputs": [], |
436 | 434 | "source": [ |
437 | | - "#Let's make the spike-in bed files.\n", |
| 435 | + "#Now let's make the spike-in bed files.\n", |
438 | 436 | "!samtools view -b -h $wd/Submodule2/Submodule2/CUTnRUNsam/BRG1_CnR_con.R64-1-1.sam -o $wd/Submodule2/Filtering/BRG1_CnR_con.R64-1-1.bam\n", |
439 | 437 | "!bedtools bamtobed -bedpe -i $wd/Submodule2/Filtering/BRG1_CnR_con.R64-1-1.bam | cut -f 1,2,6 | sort -k1,1 -k2,2n -k3,3n > $wd/Submodule2/Filtering/BRG1_CnR_con.R64-1-1.bed\n", |
440 | 438 | "print(\"done with BRG1_CnR_con\")\n", |
|
463 | 461 | "metadata": {}, |
464 | 462 | "outputs": [], |
465 | 463 | "source": [ |
466 | | - "#list the files in CUTnTagSam which we just downloaded.\n", |
| 464 | + "#list the files in ChIPseqSam which we just downloaded.\n", |
467 | 465 | "!ls $wd/Submodule2/Submodule2/CUTnTagSam" |
468 | 466 | ] |
469 | 467 | }, |
|
495 | 493 | "source": [ |
496 | 494 | "</div>In the cell below, let's view the first few lines of the bed file to see how they look.\n", |
497 | 495 | "</div>\n", |
498 | | - "</div>Note: the first column (\"chrom\") denotes the chromosome number to which the reads mapped, the second and the third columns show the first and the last base pair positions of mapped fragment, \"chromStart\" and \"chromEnd\", respectively. Remember, we used paired-end sequencing, so we can obtain the coordinates of both the beginining an the end of each mapped fragment. This is the minimum requirement for a bed file. There can be up to 9 more columns. What are information can be there in a bed file? Learn more: [UCSC_BED_format] (https://genome.ucsc.edu/FAQ/FAQformat.html#format1)" |
| 496 | + "\n", |
| 497 | + "</div>Note: the first column denotes the chromosome number to which the reads mapped, the second and the third columns show the first and the last base pair positions of mapped fragment. Remember, we used paired-end sequencing, so we can obtain the coordinates of both the beginining an the end of each mapped fragment." |
499 | 498 | ] |
500 | 499 | }, |
501 | 500 | { |
|
515 | 514 | "metadata": {}, |
516 | 515 | "outputs": [], |
517 | 516 | "source": [ |
518 | | - "#Let's make the bam and bed files for the treatment and IgG data.\n", |
519 | | - "#This may take a few minutes: 🕘\n", |
520 | | - "\n", |
| 517 | + "#Now let's do the same thing for the treatment data and IgG files.\n", |
521 | 518 | "!samtools view -b -h $wd/Submodule2/Submodule2/CUTnTagSam/RNAPII-S5P_CnT_FLV.mm39_chr4.sam -o $wd/Submodule2/Filtering/RNAPII-S5P_CnT_FLV.mm39_chr4.bam\n", |
522 | 519 | "!bedtools bamtobed -bedpe -i $wd/Submodule2/Filtering/RNAPII-S5P_CnT_FLV.mm39_chr4.bam | cut -f 1,2,6 | sort -k1,1 -k2,2n -k3,3n > $wd/Submodule2/Filtering/RNAPII-S5P_CnT_FLV.mm39_chr4.bed\n", |
523 | 520 | "print(\"done with RNAPII-S5P_CnT_FLV\")\n", |
|
581 | 578 | "\n", |
582 | 579 | "<img src=\"images/peaksofsignal.jpg\" alt=\"Drawing\" style=\"width: 500px;\"/>\n", |
583 | 580 | "\n", |
584 | | - "<div class=\"alert-warning\" style=\"font-size:200%\">\n", |
| 581 | + "<div class=\"alert-info\" style=\"font-size:200%\">\n", |
585 | 582 | " \n", |
586 | 583 | " \n", |
587 | 584 | "<img src=\"images/CUT&RUNLogo.jpg\" alt=\"Drawing\" style=\"width: 120px;\" align=\"left\"/>\n", |
588 | 585 | " \n", |
589 | | - "<div class=\"alert-warning\" style=\"font-size:50%\">\n", |
| 586 | + "<div class=\"alert-info\" style=\"font-size:50%\">\n", |
590 | 587 | "</div>\n", |
591 | 588 | "NOTE for CUT&RUN and CUT&Tag\n", |
592 | 589 | "</div>\n", |
|
685 | 682 | "metadata": {}, |
686 | 683 | "source": [ |
687 | 684 | "### We have previously learnt that we can see the coordinates of each read in the bam or bed files. However, this can be tideous and not practical for datasets with millions of reads. We need a better way of visualizing the results.\n", |
688 | | - "### In this step we will create files that summarize the pileup of reads at each base-pair along our genome, in [bedgraph](https://genome.ucsc.edu/goldenpath/help/bedgraph.html) or [bigwig](https://genome.ucsc.edu/goldenpath/help/bigWig.html) formats. \n", |
| 685 | + "### In this step we will create a binary file that summarizes the pileup of reads at each base-pair along our genome, in [bedgraph](https://genome.ucsc.edu/goldenpath/help/bedgraph.html) or [bigwig](https://genome.ucsc.edu/goldenpath/help/bigWig.html) formats. \n", |
689 | 686 | "\n", |
690 | 687 | "For ChIP-seq datasets, we will create bigwig files using the command bamCoverage, part of the [deeptools](https://deeptools.readthedocs.io/en/develop/) package.\n", |
691 | 688 | "\n", |
|
761 | 758 | "display_quiz(\"../questions/BPMnorm.json\")" |
762 | 759 | ] |
763 | 760 | }, |
764 | | - { |
765 | | - "cell_type": "markdown", |
766 | | - "id": "d4ca9524", |
767 | | - "metadata": {}, |
768 | | - "source": [ |
769 | | - "<div class=\"alert-info\" style=\"font-size:150%\">\n", |
770 | | - "How does spike-in calibration work?\n", |
771 | | - "</div>\n", |
772 | | - "In the example below, although sample A and sample B have about the same amounts of experimental DNA, sample B has more spike-in DNA which results in lower enrichment of expermental reads.\n", |
773 | | - "For spike-in calibration, we need to first count the number of spike-in reads in each sample." |
774 | | - ] |
775 | | - }, |
776 | | - { |
777 | | - "cell_type": "markdown", |
778 | | - "id": "019e4e91", |
779 | | - "metadata": {}, |
780 | | - "source": [ |
781 | | - "<img src=\"images/spike-in.jpg\" alt=\"Drawing\" style=\"width: 300px;\"/>" |
782 | | - ] |
783 | | - }, |
784 | 761 | { |
785 | 762 | "cell_type": "markdown", |
786 | 763 | "id": "ecc66087", |
787 | 764 | "metadata": {}, |
788 | 765 | "source": [ |
789 | 766 | "<img src=\"images/CUT&RUNLogo.jpg\" alt=\"Drawing\" style=\"width: 120px;\" align=\"left\"/> Run the following command for CUT&RUN datasets.\n", |
790 | | - "<div>We will first need to calculate the calibration factor for each sample by dividing a large constant number, such as 10,000, by the count of spike-in reads" |
| 767 | + "<div>We will first need to calculate the calibration factor for each sample" |
791 | 768 | ] |
792 | 769 | }, |
793 | 770 | { |
|
834 | 811 | "metadata": {}, |
835 | 812 | "source": [ |
836 | 813 | "<img src=\"images/CUT&TagLogo.jpg\" alt=\"Drawing\" style=\"width: 120px;\" align=\"left\"/> Run the following command for CUT&Tag datasets.\n", |
837 | | - "<div>We will first need to calculate the calibration factor for each sample by dividing a large constant number, such as 10,000, by the count of spike-in reads" |
| 814 | + "<div>We will first need to calculate the calibration factor for each sample" |
838 | 815 | ] |
839 | 816 | }, |
840 | 817 | { |
|
963 | 940 | "igv_notebook.init()\n", |
964 | 941 | "myigv = igv_notebook.Browser(\n", |
965 | 942 | " {\n", |
966 | | - " \"genome\": \"mm39\",\n", |
| 943 | + " \"genome\": \"mm10\",\n", |
967 | 944 | " \"locus\": \"chr4:10,000,000-150,000,000\"\n", |
968 | 945 | " }\n", |
969 | 946 | ")\n", |
970 | 947 | "myigv.load_track(\n", |
971 | 948 | "{\n", |
972 | 949 | " \"name\": \"BRG1_CnR_con\",\n", |
973 | | - " \"url\": \"Submodule2/Visualization/BRG1_CnR_con.mm39_chr4.bw\",\n", |
| 950 | + " \"url\": \"Submodule2/Submodule2/Viz/BRG1_CnR_con.bw\",\n", |
974 | 951 | " \"format\": \"bigwig\",\n", |
975 | 952 | " \"type\": \"wig\"\n", |
976 | 953 | " }\n", |
|
979 | 956 | "myigv.load_track(\n", |
980 | 957 | "{\n", |
981 | 958 | " \"name\": \"BRG1_CnR_FLV\",\n", |
982 | | - " \"url\": \"Submodule2/Visualization/BRG1_CnR_FLV.mm39_chr4.bw\",\n", |
| 959 | + " \"url\": \"Submodule2/Submodule2/Viz/BRG1_CnR_FLV.bw\",\n", |
983 | 960 | " \"format\": \"bigwig\",\n", |
984 | 961 | " \"type\": \"wig\"\n", |
985 | 962 | " }\n", |
|
988 | 965 | "myigv.load_track(\n", |
989 | 966 | "{\n", |
990 | 967 | " \"name\": \"IgG_CnR\",\n", |
991 | | - " \"url\": \"Submodule2/Visualization/IgG_CnR.mm39_chr4.bw\",\n", |
| 968 | + " \"url\": \"Submodule2/Submodule2/Viz/IgG_CnR.bw\",\n", |
992 | 969 | " \"format\": \"bigwig\",\n", |
993 | 970 | " \"type\": \"wig\"\n", |
994 | 971 | " }\n", |
|
1015 | 992 | "igv_notebook.init()\n", |
1016 | 993 | "myigv = igv_notebook.Browser(\n", |
1017 | 994 | " {\n", |
1018 | | - " \"genome\": \"mm39\",\n", |
| 995 | + " \"genome\": \"mm10\",\n", |
1019 | 996 | " \"locus\": \"chr4:10,000,000-150,000,000\"\n", |
1020 | 997 | " }\n", |
1021 | 998 | ")\n", |
1022 | 999 | "myigv.load_track(\n", |
1023 | 1000 | "{\n", |
1024 | 1001 | " \"name\": \"RNAPII-S5P_CnT_con\",\n", |
1025 | | - " \"url\": \"Submodule2/Visualization/RNAPII-S5P_CnT_con.mm39_chr4.bw\",\n", |
| 1002 | + " \"url\": \"Submodule2/Submodule2/Viz/RNAPII-S5P_CnT_con.bw\",\n", |
1026 | 1003 | " \"format\": \"bigwig\",\n", |
1027 | 1004 | " \"type\": \"wig\"\n", |
1028 | 1005 | " }\n", |
|
1031 | 1008 | "myigv.load_track(\n", |
1032 | 1009 | "{\n", |
1033 | 1010 | " \"name\": \"RNAPII-S5P_CnT_FLV\",\n", |
1034 | | - " \"url\": \"Submodule2/Visualization/RNAPII-S5P_CnT_FLV.mm39_chr4.bw\",\n", |
| 1011 | + " \"url\": \"Submodule2/Submodule2/Viz/RNAPII-S5P_CnT_FLV.bw\",\n", |
1035 | 1012 | " \"format\": \"bigwig\",\n", |
1036 | 1013 | " \"type\": \"wig\"\n", |
1037 | 1014 | " }\n", |
|
1040 | 1017 | "myigv.load_track(\n", |
1041 | 1018 | "{\n", |
1042 | 1019 | " \"name\": \"IgG_CnT\",\n", |
1043 | | - " \"url\": \"Submodule2/Visualization/IgG_CnT.mm39_chr4.bw\",\n", |
| 1020 | + " \"url\": \"Submodule2/Submodule2/Viz/IgG_CnT.bw\",\n", |
1044 | 1021 | " \"format\": \"bigwigh\",\n", |
1045 | 1022 | " \"type\": \"wig\"\n", |
1046 | 1023 | " }\n", |
|
1053 | 1030 | "id": "6fa8ee5e-024c-44d6-9f35-c223bb049f26", |
1054 | 1031 | "metadata": {}, |
1055 | 1032 | "source": [ |
1056 | | - "<div class=\"alert-info\" style=\"font-size:150%\">\n", |
| 1033 | + "<div class=\"alert-info\" style=\"font-size:120%\">\n", |
1057 | 1034 | "Average Profiles\n", |
1058 | 1035 | "</div>\n", |
1059 | 1036 | "\n", |
|
1127 | 1104 | "source": [ |
1128 | 1105 | "%cd $wd\n", |
1129 | 1106 | "# -S option specifies the bigwig signal file, where we can specify multiple separated by spaces. -R option specifies the genome annotation bed file. -a and -b specify how many bp to plot on either side. \n", |
1130 | | - "!computeMatrix reference-point -S Submodule2/Visualization/BRG1_CnR_con.mm39_chr4.bw Submodule2/Visualization/BRG1_CnR_FLV.mm39_chr4.bw -R Submodule2/Submodule2/GenomeAnnotations/mm39v36_chr4_genes.bed -o Submodule2/Visualization/CUTnRUN_GeneprofileMatrix -a 5000 -b 5000\n", |
| 1107 | + "!computeMatrix reference-point -S Submodule2/Submodule2/Viz/BRG1_CnR_con.bw Submodule2/Submodule2/Viz/BRG1_CnR_FLV.bw -R Submodule2/Submodule2/GenomeAnnotations/mm39v36_chr4_genes.bed -o Submodule2/Visualization/CUTnRUN_GeneprofileMatrix -a 5000 -b 5000\n", |
1131 | 1108 | "print(\"done creating the matrix... plotting....\")\n", |
1132 | 1109 | "!plotProfile -m Submodule2/Visualization/CUTnRUN_GeneprofileMatrix -o Submodule2/Visualization/CUTnRUN_Geneprofile.png --perGroup\n", |
1133 | 1110 | "print(\"done\")" |
|
1163 | 1140 | "source": [ |
1164 | 1141 | "%cd $wd\n", |
1165 | 1142 | "# -S option specifies the bigwig signal file, where we can specify multiple separated by spaces. -R option specifies the genome annotation bed file. -a and -b specify how many bp to plot on either side. \n", |
1166 | | - "!computeMatrix reference-point -S Submodule2/Visualization/RNAPII-S5P_CnT_con.mm39_chr4.bw Submodule2/Visualization/RNAPII-S5P_CnT_FLV.mm39_chr4.bw -R Submodule2/Submodule2/GenomeAnnotations/mm39v36_chr4_genes.bed -o Submodule2/Visualization/CUTnTag_GeneprofileMatrix -a 5000 -b 5000\n", |
| 1143 | + "!computeMatrix reference-point -S Submodule2/Submodule2/Viz/RNAPII-S5P_CnT_con.bw Submodule2/Submodule2/Viz/RNAPII-S5P_CnT_FLV.bw -R Submodule2/Submodule2/GenomeAnnotations/mm39v36_chr4_genes.bed -o Submodule2/Visualization/CUTnTag_GeneprofileMatrix -a 5000 -b 5000\n", |
1167 | 1144 | "print(\"done creating the matrix... plotting....\")\n", |
1168 | 1145 | "!plotProfile -m Submodule2/Visualization/CUTnTag_GeneprofileMatrix -o Submodule2/Visualization/CUTnTag_Geneprofile.png --perGroup\n", |
1169 | 1146 | "print(\"done\")" |
|
1216 | 1193 | "</div>\n", |
1217 | 1194 | "In ChIP-seq, CUT&RUN, and CUT&Tag it is important to control for non-specific signal enrichment. The processing steps up until this point are exactly the same for those control samples, but we'll use the control samples during peak calling to provide a background level.\n", |
1218 | 1195 | "\n", |
1219 | | - "### Note that control samples are of different kinds for ChIP-seq (input) and CUT&RUN or CUT&Tag (IgG/non-specific antibody).\n", |
1220 | | - "\n", |
1221 | | - "\n", |
1222 | 1196 | "<img src=\"images/ChIPseqLogo.jpg\" alt=\"Drawing\" style=\"width: 100px;\" align=\"left\" /> Run the following command for ChIP-seq datasets.\n", |
1223 | 1197 | "</div>\n", |
1224 | 1198 | "</div>We've prepared the bam files for the Input control samples for you, and specify them in the following command. " |
|
1377 | 1351 | { |
1378 | 1352 | "cell_type": "code", |
1379 | 1353 | "execution_count": null, |
1380 | | - "id": "a9172dde", |
| 1354 | + "id": "891987fa-70a6-4ff4-bef8-06fc08b2ff78", |
1381 | 1355 | "metadata": {}, |
1382 | 1356 | "outputs": [], |
1383 | 1357 | "source": [] |
|
1435 | 1409 | { |
1436 | 1410 | "cell_type": "code", |
1437 | 1411 | "execution_count": null, |
1438 | | - "id": "e0ee26ca", |
| 1412 | + "id": "75945418-183f-4acb-a048-b5c83d7926a5", |
1439 | 1413 | "metadata": {}, |
1440 | 1414 | "outputs": [], |
1441 | 1415 | "source": [] |
|
1480 | 1454 | "</div>" |
1481 | 1455 | ] |
1482 | 1456 | }, |
1483 | | - { |
1484 | | - "cell_type": "code", |
1485 | | - "execution_count": null, |
1486 | | - "id": "9da9a098", |
1487 | | - "metadata": {}, |
1488 | | - "outputs": [], |
1489 | | - "source": [] |
1490 | | - }, |
1491 | 1457 | { |
1492 | 1458 | "cell_type": "markdown", |
1493 | 1459 | "id": "2a5bf9f4-6814-4889-86ad-02c9088cbecd", |
|
0 commit comments