OSCR

MIF-Induced CD74+ Microglia and Macrophages Promote Progression of Brain Metastasis and Are Clinically Relevant across Central Nervous System Disorders.

Code ↔ Paper

1 match between paragraphs of the paper and lines of its authors' code, computed by the harvester (lexical-v1). Click a colored paragraph or line to see its counterpart.

The 1 match
  1. [1] § Materials and Methods › Bulk RNA-seq ↔ RNAseq/RNAseq.pl, lines 485–542 · score 0.65 · fastQC, DESeq2, HTSeq, Bowtie, genome, TopHat

Paper

Loaded from Europe PMC by your browser, not stored by OSCR: doi.org · Europe PMC

The paper is loaded when this pane is shown.

The authors' code

Perl · 720 lines · 32 KB · CC-BY-NC-ND-4.0 · 1 match

  1. #!/usr/bin/perl -w
  2. # nextpresso
  3. # RNAseq.pl
  4. # Author: Osvaldo Grana
  5. # Description : RNA-seq analysis pipeline
  6. # v1.9.1 oct2017 - creates the temporal directory (tmp) inside the workspace, and not inside the /tmp of the machine
  7. #
  8. # v1.9.2 ene2018 - removes genes with expression levels below background + removes genes with flat pattern expression.
  9. # After this removal, a new GTF is created that contains only those genes that passed the filtering: cuffquant+cuffdiff+cuffnorm
  10. # or htseqcount+deseq is run again using this reduced gene annotation (new GTF)
  11. # (see addings in level 5 and level 6 here, plus the addings in ExecutionLevels.pm
  12. # mar2018 - run.log now appends new contents (instead of writing from scratch again)
  13. my $version="v1.9.2, ene2018";
  14. use strict;
  15. use warnings;
  16. use autodie;
  17. #determines current working directory
  18. #use Cwd qw(cwd);
  19. #my $bin=cwd;
  20. use File::Temp qw(tempdir); #assigns a temp. subdir inside the main temp. dir
  21. use FindBin qw($Bin); #finds out script path
  22. use File::Basename qw(dirname); #calls dirname function to find out the parent dir below
  23. use File::Spec::Functions qw(catdir); #calls catdir function
  24. #loads own packages
  25. use lib catdir(dirname($Bin), 'Utils'); #finds out Utils dir from parent dir
  26. use xmlParRNAseq 'processXML'; #loads modules from Utils
  27. use ExecutionLevels;
  28. use Miscellaneous;
  29. use Getopt::Long; #to get options
  30. #use File::Basename;
  31. use File::Spec;
  32. use File::Path qw(make_path);
  33. use FileHandle;
  34. #use File::Copy;
  35. #use Sys::Hostname;
  36. use Carp qw( confess ); # to verbose stack traces
  37. use Config; # to check if perl was compiled with thread support
  38. #subroutine prototypes
  39. sub main();
  40. sub help();
  41. sub checkProgramPaths($);
  42. sub checkSampleFiles($$);
  43. main(); #calls main function
  44. sub main(){
  45. system("clear");
  46. print "*****************************************************************************\n";
  47. print "* *\n";
  48. print "* nextpresso: next generation sequencing expression analysis pipeline *\n";
  49. print "* ".$version." *\n";
  50. print "* Author: Osvaldo Grana *\n";
  51. print "* *\n";
  52. print "*****************************************************************************\n\n";
  53. #creates a temporal subdirectory in the temporal directory of the machine (like '/tmp')
  54. #with an unrecognized name like ('/tmp/mY0qHO36dP')
  55. # CLEANUP => 1 implies that this subdirectory is removed when the execution finishes
  56. # CLEANUP => 0 implies that this subdirectory is NOT removed when the execution finishes
  57. #my $executionCreatedTempDir = tempdir( CLEANUP => 0 );
  58. #Checks if perl was compiled with thread support
  59. $Config{useithreads} or die("\n\n**** Please recompile Perl with thread support before running nextpresso.\n\n");
  60. # Verbose stack traces
  61. $SIG{__DIE__} = \&confess;
  62. $SIG{__WARN__} = \&confess;
  63. my $level = "1345"; # default value;
  64. my $configXMLSchema = $Bin."config/config.xsd";
  65. my $experimentXMLSchema = $Bin."config/experiment.xsd";
  66. my $configXMLDocument = undef;
  67. my $experimentXMLDocument = undef;
  68. my $Cuffdiff_ONLY_background_and_flatPattern_filtering=0;
  69. my $DESeq2_ONLY_background_and_flatPattern_filtering=0;
  70. GetOptions(
  71. "configDoc=s"=>\$configXMLDocument, #string
  72. "expDoc=s"=>\$experimentXMLDocument, #string
  73. "step=i"=>\$level, #numeric
  74. "Cuffdiff_ONLY_background_and_flatPattern_filtering" =>\$Cuffdiff_ONLY_background_and_flatPattern_filtering,
  75. "DESeq2_ONLY_background_and_flatPattern_filtering" =>\$DESeq2_ONLY_background_and_flatPattern_filtering
  76. );
  77. #it always checks level 0
  78. $level="0".$level;
  79. if(defined($configXMLDocument) && defined($configXMLDocument)){
  80. if((!-e $configXMLSchema) || (!-e $configXMLDocument) || (!-e $experimentXMLSchema) || (!-e $experimentXMLDocument)){
  81. print "**** One or several of the following files do not exist:\n\n";
  82. print "File 1: ".$configXMLSchema."\nFile 2: ".$configXMLDocument."\nFile 3: ".$experimentXMLSchema."\nFile 4: ".$experimentXMLDocument."\n";
  83. print "\n[Execution finished]\n\n";
  84. help();
  85. }
  86. }else{
  87. help();
  88. }
  89. #<------------- GETS THE DATA FROM THE XML DOCUMENTS ------------->
  90. #validates XML documents and returns them as hash tables
  91. my $configHashRef=xmlParRNAseq::processXML($configXMLSchema, $configXMLDocument);
  92. my $experimentHashRef=xmlParRNAseq::processXML($experimentXMLSchema, $experimentXMLDocument);
  93. #returns a new hash ref, with "/" added at the end of path lines in the case it was not present
  94. $configHashRef=checkProgramPaths($configHashRef);
  95. #getting config info
  96. my $fastQCpath=${$configHashRef}{fastQCpath}[0];
  97. my $fastQScreenPath=${$configHashRef}{fastQScreen}[0]{path}[0];
  98. my $fastQScreenConf=${$configHashRef}{fastQScreen}[0]{configurationFile}[0];
  99. my $fastQScreenSubset=${$configHashRef}{fastQScreen}[0]{subset}[0];
  100. my $bedtoolsPath=${$configHashRef}{bedtoolsPath}[0];
  101. my $samtoolsPath=${$configHashRef}{samtoolsPath}[0];
  102. my $bowtiePath=${$configHashRef}{bowtiePath}[0];
  103. my $tophatPath=${$configHashRef}{tophatPath}[0];
  104. my $peakAnnotatorPath=${$configHashRef}{peakAnnotatorPath}[0];
  105. my $htseqCountPath=${$configHashRef}{htseqCount}[0]{path}[0];
  106. my $htseqCountPythonpath=${$configHashRef}{htseqCount}[0]{pythonpath}[0];
  107. my $tophatFusion=${$configHashRef}{tophatFusion}[0]{path}[0];
  108. my $cufflinksPath=${$configHashRef}{cufflinks}[0]{path}[0];
  109. my $bedGraphToBigWigPath=${$configHashRef}{bedGraphToBigWig}[0]{path}[0];
  110. my $maximunNumberOfInstancesAllowedToRunSimultaneouslyInOneParticularStep=${$configHashRef}{maximunNumberOfInstancesAllowedToRunSimultaneouslyInOneParticularStep};
  111. my $seqtkPath=${$configHashRef}{seqtk}[0]{path}[0];
  112. my $seqtk_maximunNumberOfInstancesForDownSampling=${$configHashRef}{seqtk}[0]{maximunNumberOfInstancesForDownSampling}[0];
  113. my $queueSystem=${$configHashRef}{queueSystem}[0];
  114. my $queueName=${$configHashRef}{queueName}[0];
  115. my $multicore=${$configHashRef}{multicore}[0];
  116. my $perl5lib=${$configHashRef}{PERL5LIB}[0];
  117. my $gseaPath=${$configHashRef}{gsea}[0]{path}[0];
  118. my $gseaChip=${$configHashRef}{gsea}[0]{chip}[0];
  119. my $gseamaxMemory=${$configHashRef}{gsea}[0]{maxMemory}[0];
  120. my $extraPathsRequired=${$configHashRef}{extraPathsRequired}[0];
  121. if($extraPathsRequired=~ /HASH\(/){$extraPathsRequired="NO_EXTRA_PATHS"}
  122. #getting experiment info
  123. my $experimentName=${$experimentHashRef}{projectName};
  124. my $queueProject=$experimentName;
  125. my $workspace=${$experimentHashRef}{workspace};
  126. #creates a temporal directory
  127. my $executionCreatedTempDir=$workspace."/tmp/".$experimentName;
  128. my $initialTimeANDdate=Miscellaneous::getCurrentDateAndTime();
  129. $initialTimeANDdate=~ s/ //g;
  130. my $temporaryFilesPrefix=$initialTimeANDdate;
  131. $temporaryFilesPrefix=~ s/\[//;
  132. $temporaryFilesPrefix=~ s/\]//;
  133. $temporaryFilesPrefix=~ s/-//g;
  134. $temporaryFilesPrefix=~ s/,/_/;
  135. $temporaryFilesPrefix=~ s/\:/-/g;
  136. $executionCreatedTempDir.="_".$temporaryFilesPrefix;
  137. #removes it and create it again
  138. File::Path::make_path($executionCreatedTempDir,$executionCreatedTempDir);
  139. my $referenceSequence=${$experimentHashRef}{referenceSequence};
  140. my $indexPrefixForReferenceSequence=${$experimentHashRef}{referenceSequence};
  141. $indexPrefixForReferenceSequence=~ s/\.fa$//;
  142. $indexPrefixForReferenceSequence=~ s/\.fasta$//;
  143. my $GTF=${$experimentHashRef}{GTF};
  144. # one copy of the original GTF is preserved below in mind (initialGTF). This is valid when having spikes in the created annotation.
  145. # It is more appropriated, in this case, to run htseqcount and cuffdiff withou including spikes in the GTF annotation,
  146. # as their quantification values could affect and modify FPKM normalization for the rest of the genes.
  147. my $initialGTF=$GTF;
  148. my $samples=${$experimentHashRef}{library}; # hashRef
  149. my $comparisons=${$experimentHashRef}{comparison}; # hashRef
  150. my $tophatParams=${$experimentHashRef}{tophat}; # hashRef
  151. my $pairedEnd=${$experimentHashRef}{pairedEnd};
  152. my $fileWithChecksumCodesToValidate=${$experimentHashRef}{fileWithChecksumCodesToValidate};
  153. my $cufflinksParams=${$experimentHashRef}{cufflinks}; # hashRef
  154. my $cuffmergeParams=${$experimentHashRef}{cuffmerge}; # hashRef
  155. my $cuffquantParams=${$experimentHashRef}{cuffquant}; # hashRef
  156. my $cuffnormParams=${$experimentHashRef}{cuffnorm}; # hashRef
  157. my $cuffdiffParams=${$experimentHashRef}{cuffdiff}; # hashRef
  158. my $htseqcountParams=${$experimentHashRef}{htseqcount}; # hashRef
  159. my $deseqParams=${$experimentHashRef}{deseq2};
  160. my $bedGraphToBigWigParams=${$experimentHashRef}{bedGraphToBigWig};
  161. my $gseaParams=${$experimentHashRef}{gsea};
  162. my $tophatfusionParams=${$experimentHashRef}{tophatfusion};
  163. my $spikeInControlMixesParams=${$experimentHashRef}{spikeInControlMixes};
  164. my $doSpikesAndGenomeRefIndexing=lc($spikeInControlMixesParams->[0]->{do});
  165. #checks that the sample files exist
  166. checkSampleFiles($pairedEnd,$samples);
  167. # <----------------- only for testing ----------------------->
  168. #use Data::Dumper;
  169. #print STDERR "FILE:\n".Dumper($experimentHashRef)."\n";
  170. #<------------- ANALYSIS OF THE DATA STARTS ------------->
  171. if (! File::Spec->file_name_is_absolute($workspace)){
  172. print STDERR "\n[ERROR]: Incorrect absolute path for output directory: $workspace\n\n";
  173. exit(-1);
  174. }
  175. # the workspace directory is created
  176. if($workspace!~ /\/$/){
  177. $workspace.="/";
  178. }
  179. File::Path::make_path($workspace);
  180. if(!-d $workspace){
  181. print STDERR "\n[ERROR]: Cannot create workspace $workspace\n\n";
  182. exit(-1);
  183. }
  184. my $logFile=$workspace."run.log";
  185. my $logfh=FileHandle->new(">>".$logFile);
  186. if(!-e $logfh){
  187. print STDERR "\n[ERROR]: Cannot create ".$logfh."\n\n";
  188. exit(-1);
  189. }else{
  190. print $logfh $initialTimeANDdate." RNAseq pipeline: Starting analysis for $experimentName experiment\n";
  191. if(-d $executionCreatedTempDir){
  192. print $logfh (Miscellaneous::getCurrentDateAndTime())."[DONE]: created temporal subdirectory for this execution ".$executionCreatedTempDir."\n";}
  193. else{
  194. print $logfh (Miscellaneous::getCurrentDateAndTime())."[ERROR]: could not create temporal subdirectory for this execution ".$executionCreatedTempDir."\n";
  195. print STDERR "\n[ERROR]: could not create temporal subdirectory for this execution ".$executionCreatedTempDir."\n";
  196. exit(-1);
  197. }
  198. }
  199. ########## level 0: converts raw read bam files to fastq files if needed or/and prepares reference and GTF index files in case of having spike-in control mixes
  200. if($level=~ /0/){
  201. #**** IMPORTANT: since this level is always done, steps within this level are done ONLY if they were not done before.
  202. #**** for example: suppose that the user wants to do differential expression again (adding a new comparison), in this case it wouldn't make sense
  203. #**** to perform again bam files conversion to fastq files or indexing again the reference for spike-in controls, as these steps were already done
  204. #**** with the first execution of the analysis
  205. #**** IMPORTANT: in the case of using spike-in control mixes, the reference file and the GTF file are different and new files,
  206. #**** that's why they are recovered here
  207. ($referenceSequence,$GTF,$indexPrefixForReferenceSequence)=ExecutionLevels::level_0($fileWithChecksumCodesToValidate,$workspace,$experimentName,$logfh,$maximunNumberOfInstancesAllowedToRunSimultaneouslyInOneParticularStep,$spikeInControlMixesParams,$referenceSequence,$GTF,$samples,$bedtoolsPath,$pairedEnd,$bowtiePath,$indexPrefixForReferenceSequence,
  208. $executionCreatedTempDir,$queueSystem,$queueName,$multicore,$queueProject);
  209. }
  210. ########## level 1: sequencing quality and contamination check ##########
  211. if($level=~ /1/){
  212. ExecutionLevels::level_1($perl5lib,$fastQCpath,$fastQScreenPath,$fastQScreenConf,$bowtiePath,$experimentName,$workspace,$referenceSequence,
  213. $GTF,$samples,$logfh,$executionCreatedTempDir,$maximunNumberOfInstancesAllowedToRunSimultaneouslyInOneParticularStep,$fastQScreenSubset,$pairedEnd,$queueSystem,$queueName,$multicore,$queueProject);
  214. }
  215. ########## level 2: trimming && downsampling ##########
  216. if($level=~ /2/){
  217. ExecutionLevels::level_2($fastQCpath,$fastQScreenPath,$fastQScreenConf,$bowtiePath,$experimentName,$workspace,$referenceSequence,
  218. $GTF,$samples,$logfh,$executionCreatedTempDir,$maximunNumberOfInstancesAllowedToRunSimultaneouslyInOneParticularStep,$fastQScreenSubset,$pairedEnd,$seqtkPath,
  219. $seqtk_maximunNumberOfInstancesForDownSampling,$queueSystem,$queueName,$multicore,$queueProject);
  220. #for those samples that were trimmed, or trimmed & downsampled (but not only downsampled)
  221. #it must perform level1 again
  222. my %auxHash=%$samples; # hash unref
  223. my $auxiliarSamples=\%auxHash; # hash ref again
  224. foreach my $key (keys %$auxiliarSamples){
  225. my $trimming=$auxiliarSamples->{$key}{trimming}[0]{do};
  226. if($trimming eq "false"){
  227. delete $auxiliarSamples->{$key};
  228. }
  229. }
  230. #if the size of the hash %auxiliarSamples==0, i.e., none of the samples required trimming => no additional FASTQC is required
  231. if(keys(%$auxiliarSamples)>0){
  232. ExecutionLevels::level_1($perl5lib,$fastQCpath,$fastQScreenPath,$fastQScreenConf,$bowtiePath,$experimentName,$workspace,$referenceSequence,
  233. $GTF,$auxiliarSamples,$logfh,$executionCreatedTempDir,$maximunNumberOfInstancesAllowedToRunSimultaneouslyInOneParticularStep,$fastQScreenSubset,$pairedEnd,$queueSystem,$queueName,$multicore,$queueProject);
  234. }
  235. }else{
  236. #in case that a previous analysis was done for this experiment, requiring trimming/downsampling for maybe some of the samples,
  237. #and if a new re-analysis is started just after this step (level 3 for example), it implies that the program has to be aware of
  238. #what are the proper trimmed/downsampled samples
  239. ExecutionLevels::changeSampleNamesInCaseTheyWereTrimmedAndOrDownsampledBefore($samples,$workspace,$pairedEnd);
  240. }
  241. ########## level 3: aligning of reads ##########
  242. if($level=~ /3/){
  243. ExecutionLevels::level_3($tophatPath,$bowtiePath,$samtoolsPath,$bedtoolsPath,$peakAnnotatorPath,$referenceSequence,
  244. $indexPrefixForReferenceSequence,$samples,$GTF,$tophatParams,$maximunNumberOfInstancesAllowedToRunSimultaneouslyInOneParticularStep,$workspace,$experimentName,$logfh,
  245. $executionCreatedTempDir,$pairedEnd,$queueSystem,$queueName,$multicore,$queueProject);
  246. }
  247. ########## level 4: transcripts assembly and quantification (cufflinks and cuffmerge) ##########
  248. if($level=~ /4/){
  249. ExecutionLevels::level_4($extraPathsRequired,$spikeInControlMixesParams,$cufflinksPath,$samtoolsPath,
  250. $bedtoolsPath,$referenceSequence,$indexPrefixForReferenceSequence,$samples,$GTF,$cufflinksParams,
  251. $cuffmergeParams,$maximunNumberOfInstancesAllowedToRunSimultaneouslyInOneParticularStep,
  252. $workspace,$experimentName,$logfh,$executionCreatedTempDir,$queueSystem,$queueName,$multicore,$queueProject);
  253. }
  254. ########## level 5: differential expression (cuffquant, cuffdiff and cuffnorm) ##########
  255. if($level=~ /5/){
  256. my $doItALL=0;
  257. if(!$Cuffdiff_ONLY_background_and_flatPattern_filtering){$doItALL=1}
  258. else{#only background and flat pattern correction
  259. my $cuffdiffOutDir=$workspace."cuffdiff/"; #checks if initial cuffdiff execution was performed
  260. if(!-e $cuffdiffOutDir){
  261. $doItALL=1; #if general/initial cuffdiff execution was NOT performed, it is then mandatory first
  262. }
  263. }
  264. if($doItALL){#it does it all
  265. # Mandatory during the first execution, or if asked for it again
  266. ExecutionLevels::level_5($doSpikesAndGenomeRefIndexing,$initialGTF,$extraPathsRequired,$comparisons,$cufflinksPath,$samtoolsPath,$bedtoolsPath,$referenceSequence,$indexPrefixForReferenceSequence,
  267. $samples,$GTF,$cuffquantParams,$cuffnormParams,$cuffdiffParams,$maximunNumberOfInstancesAllowedToRunSimultaneouslyInOneParticularStep,$workspace,$experimentName,$logfh,
  268. $executionCreatedTempDir,$queueSystem,$queueName,$multicore,$queueProject);
  269. #removes back ground level genes + flat pattern genes
  270. ExecutionLevels::removeBackgroundLevelGenesANDFlatPatternGenes_for_cuffdiff_branch($cuffnormParams,$initialGTF,$workspace,$logfh);
  271. #executes all again using the reduced GTF (without back ground level genes + without flat pattern genes)
  272. my $originalAlignmentsDir=$workspace."alignments/";
  273. my $new_workspace=$workspace."cuffdiff_backgroundFiltered_AND_flatPatternFiltered/";
  274. # creates a symbolic link to the alignments dir, to emulate its presence in the new workspace directory
  275. my $reducedGTF=$new_workspace."GTF_without_background_AND_flatpatternGenes.gtf";
  276. my $command="ln -s ".$originalAlignmentsDir." ".$new_workspace;
  277. system($command);
  278. ExecutionLevels::level_5($doSpikesAndGenomeRefIndexing,$reducedGTF,$extraPathsRequired,$comparisons,$cufflinksPath,$samtoolsPath,$bedtoolsPath,$referenceSequence,$indexPrefixForReferenceSequence,
  279. $samples,$reducedGTF,$cuffquantParams,$cuffnormParams,$cuffdiffParams,$maximunNumberOfInstancesAllowedToRunSimultaneouslyInOneParticularStep,$new_workspace,$experimentName,$logfh,
  280. $executionCreatedTempDir,$queueSystem,$queueName,$multicore,$queueProject);
  281. }else{
  282. #removes back ground level genes + flat pattern genes
  283. ExecutionLevels::removeBackgroundLevelGenesANDFlatPatternGenes_for_cuffdiff_branch($cuffnormParams,$initialGTF,$workspace,$logfh);
  284. #executes all again using the reduced GTF (without back ground level genes + without flat pattern genes)
  285. my $originalAlignmentsDir=$workspace."alignments/";
  286. my $new_workspace=$workspace."cuffdiff_backgroundFiltered_AND_flatPatternFiltered/";
  287. # creates a symbolic link to the alignments dir, to emulate its presence in the new workspace directory
  288. my $reducedGTF=$new_workspace."GTF_without_background_AND_flatpatternGenes.gtf";
  289. my $command="ln -s ".$originalAlignmentsDir." ".$new_workspace;
  290. system($command);
  291. ExecutionLevels::level_5($doSpikesAndGenomeRefIndexing,$reducedGTF,$extraPathsRequired,$comparisons,$cufflinksPath,$samtoolsPath,$bedtoolsPath,$referenceSequence,$indexPrefixForReferenceSequence,
  292. $samples,$reducedGTF,$cuffquantParams,$cuffnormParams,$cuffdiffParams,$maximunNumberOfInstancesAllowedToRunSimultaneouslyInOneParticularStep,$new_workspace,$experimentName,$logfh,
  293. $executionCreatedTempDir,$queueSystem,$queueName,$multicore,$queueProject);
  294. }
  295. }
  296. ########## level 6: runs htseq-count (gets read counts for genes) + DESeq2 differential expression
  297. if($level=~ /6/){
  298. my $doItALL=0;
  299. if(!$DESeq2_ONLY_background_and_flatPattern_filtering){$doItALL=1}
  300. else{#only background and flat pattern correction
  301. my $deseqOutDir=$workspace."deseq/"; #checks if initial DESeq2 execution was performed
  302. if(!-e $deseqOutDir){
  303. $doItALL=1; #if general/initial DESeq2 execution was NOT performed, it is then mandatory first
  304. }
  305. }
  306. if($doItALL){#it does it all
  307. if($doSpikesAndGenomeRefIndexing eq "false"){
  308. ExecutionLevels::level_6($perl5lib,$comparisons,$deseqParams,$extraPathsRequired,$htseqCountPath,$htseqCountPythonpath,$htseqcountParams,$samtoolsPath,$samples,$GTF,$maximunNumberOfInstancesAllowedToRunSimultaneouslyInOneParticularStep,$workspace,$experimentName,$logfh,
  309. $executionCreatedTempDir,$queueSystem,$queueName,$multicore,$queueProject);
  310. #removes back ground level genes + flat pattern genes
  311. ExecutionLevels::removeBackgroundLevelGenesANDFlatPatternGenes_for_deseq_branch($deseqParams,$GTF,$workspace,$logfh);
  312. #executes all again using the reduced GTF (without back ground level genes + without flat pattern genes)
  313. my $originalAlignmentsDir=$workspace."alignments/";
  314. my $new_workspace=$workspace."deseq_backgroundFiltered_AND_flatPatternFiltered/";
  315. # creates a symbolic link to the alignments dir, to emulate its presence in the new workspace directory
  316. my $reducedGTF=$new_workspace."GTF_without_background_AND_flatpatternGenes.gtf";
  317. my $command="ln -s ".$originalAlignmentsDir." ".$new_workspace;
  318. system($command);
  319. ExecutionLevels::level_6($perl5lib,$comparisons,$deseqParams,$extraPathsRequired,$htseqCountPath,$htseqCountPythonpath,$htseqcountParams,$samtoolsPath,$samples,$reducedGTF,$maximunNumberOfInstancesAllowedToRunSimultaneouslyInOneParticularStep,$new_workspace,$experimentName,$logfh,
  320. $executionCreatedTempDir,$queueSystem,$queueName,$multicore,$queueProject);
  321. }else{ # when having spikes, it is more appropriate to not consider them for htseqcount as they could affect
  322. # normalization values for regular genes. So in this case, the original GTF is given instead of the
  323. #one with the combined annotation (genes+spikes)
  324. ExecutionLevels::level_6($perl5lib,$comparisons,$deseqParams,$extraPathsRequired,$htseqCountPath,$htseqcountParams,$samtoolsPath,$samples,$initialGTF,$maximunNumberOfInstancesAllowedToRunSimultaneouslyInOneParticularStep,$workspace,$experimentName,$logfh,
  325. $executionCreatedTempDir,$queueSystem,$queueName,$multicore,$queueProject);
  326. #removes back ground level genes + flat pattern genes
  327. ExecutionLevels::removeBackgroundLevelGenesANDFlatPatternGenes_for_deseq_branch($deseqParams,$initialGTF,$workspace,$logfh);
  328. #executes all again using the reduced GTF (without back ground level genes + without flat pattern genes)
  329. my $originalAlignmentsDir=$workspace."alignments/";
  330. my $new_workspace=$workspace."deseq_backgroundFiltered_AND_flatPatternFiltered/";
  331. # creates a symbolic link to the alignments dir, to emulate its presence in the new workspace directory
  332. my $reducedGTF=$new_workspace."GTF_without_background_AND_flatpatternGenes.gtf";
  333. my $command="ln -s ".$originalAlignmentsDir." ".$new_workspace;
  334. system($command);
  335. ExecutionLevels::level_6($perl5lib,$comparisons,$deseqParams,$extraPathsRequired,$htseqCountPath,$htseqCountPythonpath,$htseqcountParams,$samtoolsPath,$samples,$reducedGTF,$maximunNumberOfInstancesAllowedToRunSimultaneouslyInOneParticularStep,$new_workspace,$experimentName,$logfh,
  336. $executionCreatedTempDir,$queueSystem,$queueName,$multicore,$queueProject);
  337. }
  338. }#if($doItALL)
  339. else{
  340. if($doSpikesAndGenomeRefIndexing eq "false"){
  341. #removes back ground level genes + flat pattern genes
  342. ExecutionLevels::removeBackgroundLevelGenesANDFlatPatternGenes_for_deseq_branch($deseqParams,$GTF,$workspace,$logfh);
  343. #executes all again using the reduced GTF (without back ground level genes + without flat pattern genes)
  344. my $originalAlignmentsDir=$workspace."alignments/";
  345. my $new_workspace=$workspace."deseq_backgroundFiltered_AND_flatPatternFiltered/";
  346. # creates a symbolic link to the alignments dir, to emulate its presence in the new workspace directory
  347. my $reducedGTF=$new_workspace."GTF_without_background_AND_flatpatternGenes.gtf";
  348. my $command="ln -s ".$originalAlignmentsDir." ".$new_workspace;
  349. system($command);
  350. ExecutionLevels::level_6($perl5lib,$comparisons,$deseqParams,$extraPathsRequired,$htseqCountPath,$htseqCountPythonpath,$htseqcountParams,$samtoolsPath,$samples,$reducedGTF,$maximunNumberOfInstancesAllowedToRunSimultaneouslyInOneParticularStep,$new_workspace,$experimentName,$logfh,
  351. $executionCreatedTempDir,$queueSystem,$queueName,$multicore,$queueProject);
  352. }else{ # when having spikes, it is more appropriate to not consider them for htseqcount as they could affect
  353. # normalization values for regular genes. So in this case, the original GTF is given instead of the
  354. #one with the combined annotation (genes+spikes)
  355. #removes back ground level genes + flat pattern genes
  356. ExecutionLevels::removeBackgroundLevelGenesANDFlatPatternGenes_for_deseq_branch($deseqParams,$initialGTF,$workspace,$logfh);
  357. #executes all again using the reduced GTF (without back ground level genes + without flat pattern genes)
  358. my $originalAlignmentsDir=$workspace."alignments/";
  359. my $new_workspace=$workspace."deseq_backgroundFiltered_AND_flatPatternFiltered/";
  360. # creates a symbolic link to the alignments dir, to emulate its presence in the new workspace directory
  361. my $reducedGTF=$new_workspace."GTF_without_background_AND_flatpatternGenes.gtf";
  362. my $command="ln -s ".$originalAlignmentsDir." ".$new_workspace;
  363. system($command);
  364. ExecutionLevels::level_6($perl5lib,$comparisons,$deseqParams,$extraPathsRequired,$htseqCountPath,$htseqCountPythonpath,$htseqcountParams,$samtoolsPath,$samples,$reducedGTF,$maximunNumberOfInstancesAllowedToRunSimultaneouslyInOneParticularStep,$new_workspace,$experimentName,$logfh,
  365. $executionCreatedTempDir,$queueSystem,$queueName,$multicore,$queueProject);
  366. }
  367. }#else #if($doItALL)
  368. }
  369. ########## level 7: creates wiggle files from bam alignments
  370. if($level=~ /7/){
  371. ExecutionLevels::level_7($bedGraphToBigWigPath,$bedGraphToBigWigParams,$bedtoolsPath,$samtoolsPath,$samples,$maximunNumberOfInstancesAllowedToRunSimultaneouslyInOneParticularStep,$workspace,$experimentName,$logfh,
  372. $executionCreatedTempDir,$queueSystem,$queueName,$multicore,$queueProject);
  373. }
  374. ########## level 8: preRanked GSEA
  375. if($level=~ /8/){
  376. #****rnk files are directly taken from cuffdiff output files
  377. ExecutionLevels::level_8($gseaChip,$gseamaxMemory,$gseaPath,$gseaParams,$workspace,$experimentName,$logfh,$maximunNumberOfInstancesAllowedToRunSimultaneouslyInOneParticularStep,$comparisons,
  378. $executionCreatedTempDir,$queueSystem,$queueName,$multicore,$queueProject);
  379. }
  380. ########## level 9: gene fusion prediction with Tophat-fusion
  381. if($level=~ /9/){
  382. ExecutionLevels::level_9($tophatfusionParams,$tophatPath,$bowtiePath,$samtoolsPath,$workspace,$experimentName,$logfh,$maximunNumberOfInstancesAllowedToRunSimultaneouslyInOneParticularStep,$samples,$referenceSequence,
  383. $executionCreatedTempDir,$queueSystem,$queueName,$multicore,$queueProject);
  384. }
  385. #close the log file
  386. $logfh->close;
  387. }
  388. sub help(){
  389. my $usage = qq{
  390. perl RNAseq.pl --configDoc configDocFile --expDoc expDocFile --step step_number
  391. Example:
  392. a) complete execution of all steps in each workflow level
  393. perl RNAseq.pl --configDoc config/configurationParameters.xml --expDoc config/experimentParameters.xml --step 123456789
  394. b) execution of some detailed steps
  395. perl RNAseq.pl --configDoc config/configurationParameters.xml --expDoc config/experimentParameters.xml --step 1345
  396. Steps Description:
  397. Step 1: sequencing quality && contamination check (fastQC & fastQScreen)
  398. Step 2: trimming && downsampling (seqtk)
  399. Step 3: Aligning (tophat)
  400. Step 4: transcripts assembly && quantification (cufflinks and cuffmerge)
  401. Step 5: differential expression (cuffquant, cuffdiff and cuffnorm)
  402. Step 6: htseq-count (gets read counts for genes) + DESeq2 differential expression
  403. Step 7: BedGraph and BigWig files for genome browsers
  404. Step 8: GSEA for specific gene sets over the different comparisons done with cuffdiff
  405. Step 9: gene fusion prediction
  406. [Optional parameters]
  407. --Cuffdiff_ONLY_background_and_flatPattern_filtering [allows repeating only the last part of setp 5]
  408. --DESeq2_ONLY_background_and_flatPattern_filtering [allows repeating only the last part of setp 6]
  409. };
  410. print STDERR $usage;
  411. exit(1);
  412. }
  413. sub checkProgramPaths($){
  414. my ($configHashRef) = @_;
  415. if(${$configHashRef}{fastQCpath}[0]!~ /\/$/){
  416. ${$configHashRef}{fastQCpath}[0]=${$configHashRef}{fastQCpath}[0].="/";
  417. }
  418. my $program=${$configHashRef}{fastQCpath}[0]."fastqc";
  419. if (!-e $program){
  420. print STDERR "\n[ERROR]: The program ".$program." doesn't exist\n\n";
  421. exit(-1);
  422. }
  423. if(${$configHashRef}{fastQScreen}[0]{path}[0]!~ /\/$/){
  424. ${$configHashRef}{fastQScreen}[0]{path}[0]=${$configHashRef}{fastQScreen}[0]{path}[0].="/";
  425. }
  426. $program=${$configHashRef}{fastQScreen}[0]{path}[0]."fastq_screen";
  427. if (!-e $program){
  428. print STDERR "\n[ERROR]: The program ".$program." doesn't exist\n\n";
  429. exit(-1);
  430. }
  431. $program=${$configHashRef}{fastQScreen}[0]{configurationFile}[0];
  432. if (!-e $program){
  433. print STDERR "\n[ERROR]: The program ".$program." doesn't exist\n\n";
  434. exit(-1);
  435. }
  436. if(${$configHashRef}{seqtk}[0]{path}[0]!~ /\/$/){
  437. ${$configHashRef}{seqtk}[0]{path}[0]=${$configHashRef}{seqtk}[0]{path}[0].="/";
  438. }
  439. $program=${$configHashRef}{seqtk}[0]{path}[0]."seqtk";
  440. if (!-e $program){
  441. print STDERR "\n[ERROR]: The program ".$program." doesn't exist\n\n";
  442. exit(-1);
  443. }
  444. if(${$configHashRef}{bedtoolsPath}[0]!~ /\/$/){
  445. ${$configHashRef}{bedtoolsPath}[0]=${$configHashRef}{bedtoolsPath}[0].="/";
  446. }
  447. $program=${$configHashRef}{bedtoolsPath}[0]."bedtools";
  448. if (!-e $program){
  449. print STDERR "\n[ERROR]: The program ".$program." doesn't exist\n\n";
  450. exit(-1);
  451. }
  452. if(${$configHashRef}{samtoolsPath}[0]!~ /\/$/){
  453. ${$configHashRef}{samtoolsPath}[0]=${$configHashRef}{samtoolsPath}[0].="/";
  454. }
  455. $program=${$configHashRef}{samtoolsPath}[0]."samtools";
  456. if (!-e $program){
  457. print STDERR "\n[ERROR]: The program ".$program." doesn't exist\n\n";
  458. exit(-1);
  459. }
  460. if(${$configHashRef}{bowtiePath}[0]!~ /\/$/){
  461. ${$configHashRef}{bowtiePath}[0]=${$configHashRef}{bowtiePath}[0].="/";
  462. }
  463. $program=${$configHashRef}{bowtiePath}[0]."bowtie";
  464. if (!-e $program){
  465. print STDERR "\n[ERROR]: The program ".$program." doesn't exist\n\n";
  466. exit(-1);
  467. }
  468. if(${$configHashRef}{tophatPath}[0]!~ /\/$/){
  469. ${$configHashRef}{tophatPath}[0]=${$configHashRef}{tophatPath}[0].="/";
  470. }
  471. $program=${$configHashRef}{tophatPath}[0]."tophat";
  472. if (!-e $program){
  473. print STDERR "\n[ERROR]: The program ".$program." doesn't exist\n\n";
  474. exit(-1);
  475. }
  476. if(${$configHashRef}{htseqCount}[0]{path}[0]!~ /\/$/){
  477. ${$configHashRef}{htseqCount}[0]{path}[0]=${$configHashRef}{htseqCount}[0]{path}[0].="/";
  478. }
  479. $program=${$configHashRef}{htseqCount}[0]{path}[0]."htseq-count";
  480. if (!-e $program){
  481. print STDERR "\n[ERROR]: The program ".$program." doesn't exist\n\n";
  482. exit(-1);
  483. }
  484. if(${$configHashRef}{tophatFusion}[0]{path}[0]!~ /\/$/){
  485. ${$configHashRef}{tophatFusion}[0]{path}[0]=${$configHashRef}{tophatFusion}[0]{path}[0].="/";
  486. }
  487. $program=${$configHashRef}{tophatFusion}[0]{path}[0]."tophat-fusion-post";
  488. if (!-e $program){
  489. print STDERR "\n[ERROR]: The program ".$program." doesn't exist\n\n";
  490. exit(-1);
  491. }
  492. if(${$configHashRef}{cufflinks}[0]{path}[0]!~ /\/$/){
  493. ${$configHashRef}{cufflinks}[0]{path}[0]=${$configHashRef}{cufflinks}[0]{path}[0].="/";
  494. }
  495. $program=${$configHashRef}{cufflinks}[0]{path}[0]."cufflinks";
  496. if (!-e $program){
  497. print STDERR "\n[ERROR]: The program ".$program." doesn't exist\n\n";
  498. exit(-1);
  499. }
  500. $program=${$configHashRef}{cufflinks}[0]{path}[0]."cuffmerge";
  501. if (!-e $program){
  502. print STDERR "\n[ERROR]: The program ".$program." doesn't exist\n\n";
  503. exit(-1);
  504. }
  505. $program=${$configHashRef}{cufflinks}[0]{path}[0]."cuffquant";
  506. if (!-e $program){
  507. print STDERR "\n[ERROR]: The program ".$program." doesn't exist\n\n";
  508. exit(-1);
  509. }$program=${$configHashRef}{cufflinks}[0]{path}[0]."cuffnorm";
  510. if (!-e $program){
  511. print STDERR "\n[ERROR]: The program ".$program." doesn't exist\n\n";
  512. exit(-1);
  513. }$program=${$configHashRef}{cufflinks}[0]{path}[0]."cuffdiff";
  514. if (!-e $program){
  515. print STDERR "\n[ERROR]: The program ".$program." doesn't exist\n\n";
  516. exit(-1);
  517. }
  518. if(${$configHashRef}{bedGraphToBigWig}[0]{path}[0]!~ /\/$/){
  519. ${$configHashRef}{bedGraphToBigWig}[0]{path}[0]=${$configHashRef}{bedGraphToBigWig}[0]{path}[0].="/";
  520. }
  521. $program=${$configHashRef}{bedGraphToBigWig}[0]{path}[0]."bedGraphToBigWig";
  522. if (!-e $program){
  523. print STDERR "\n[ERROR]: The program ".$program." doesn't exist\n\n";
  524. exit(-1);
  525. }
  526. if(${$configHashRef}{peakAnnotatorPath}[0]!~ /\/$/){
  527. ${$configHashRef}{peakAnnotatorPath}[0]=${$configHashRef}{peakAnnotatorPath}[0].="/";
  528. }
  529. $program=${$configHashRef}{peakAnnotatorPath}[0]."PeakAnnotator.jar";
  530. if (!-e $program){
  531. print STDERR "\n[ERROR]: The program ".$program." doesn't exist\n\n";
  532. exit(-1);
  533. }
  534. $program=${$configHashRef}{gsea}[0]{path}[0];
  535. if (!-e $program){
  536. print STDERR "\n[ERROR]: The program ".$program." doesn't exist\n\n";
  537. exit(-1);
  538. }
  539. return($configHashRef);
  540. }
  541. sub checkSampleFiles($$){
  542. my($pairedEnd,$samples)=@_;
  543. foreach my $key (keys %$samples){
  544. my $type=$samples->{$key}{type}[0];
  545. my $leftFastqFile=$samples->{$key}{leftFile};
  546. if(!-e $leftFastqFile){
  547. print STDERR "\n[ERROR]: The left sample file ".$leftFastqFile." doesn't exist\n\n";
  548. exit(-1);
  549. }
  550. #if paired end experiment
  551. if($pairedEnd eq "true"){
  552. my $rightFastqFile=$samples->{$key}{rightFile}[0];
  553. if(!-e $leftFastqFile){
  554. print STDERR "\n[ERROR]: The right sample file ".$rightFastqFile." doesn't exist\n\n";
  555. exit(-1);
  556. }
  557. }
  558. }
  559. }

RNAseq.pl at commit 1b4c1dd, under CC-BY-NC-ND-4.0 · at the source

Overview

20 affiliations
  1. Brain Metastasis Group, Spanish National Cancer Research Centre (CNIO), Madrid, Spain
  2. Instituto de Neurociencias (CSIC-UMH), San Juan de Alicante, Spain
  3. Bioinformatics Unit, Spanish National Cancer Research Centre (CNIO), Madrid, Spain
  4. Confocal Microscopy Unit, Spanish National Cancer Research Centre (CNIO), Madrid, Spain
  5. Endocrine Oncology Research Group, Department of Surgery, Royal College of Surgeons in Ireland, University of Medicine and Health Sciences, Dublin, Ireland
  6. The School of Pharmacy and Biomolecular Sciences, RCSI University of Medicine and Health Sciences, Dublin, Ireland
  7. Department of Surgery, RCSI University of Medicine and Health Sciences, Dublin, Ireland
  8. Beaumont RCSI Cancer Centre, Beaumont Hospital, Dublin, Ireland
  9. Functional Genetics of the Oxidative Phosphorylation System (GENOXPHOS), Centro Nacional de Investigaciones Cardiovasculares Carlos III (CNIC), Madrid, Spain
  10. Centro de Investigaciones Biomédicas en Red en Fragilidad y Envejencimiento Saludable (CIBERFES), Madrid, Spain
  11. Experimental Therapeutics Programme, Spanish National Cancer Research Centre (CNIO), Madrid, Spain
  12. Melanoma Group, Spanish National Cancer Research Centre (CNIO), Madrid, Spain
  13. Division of Vascular Biology, Institute for Stroke and Dementia Research (ISD), LMU University Hospital, Ludwig-Maximilians-Universität (LMU) Munich, Munich, Germany
  14. Munich Heart Alliance, Munich, Germany
  15. Munich Cluster for Systems Neurology (SyNergy), Munich, Germany
  16. Centro de Biología Molecular Severo Ochoa (UAM-CSIC), Madrid, Spain
  17. Instituto Cajal-CSIC, Madrid, Spain
  18. Achucarro Basque Center for Neuroscience, University of the Basque Country UPV/EHU, Leioa, Spain
  19. Department of Biochemistry and Molecular Biology, University of the Basque Country UPV/EHU, Leioa, Spain
  20. Ikerbasque Foundation, Bilbao, Spain
Journal: Cancer research, volume 86, issue 13, pages 3249-3269
Dates: received 6 September 2025; accepted 6 March 2026; published online 24 March 2026; in print 2 July 2026
Type: Research article · Language: English
License: CC BY-NC-ND
Identifiers: DOI 10.1158/0008-5472.can-25-4018 · PMID 41874311 · PMCID PMC7618953 · OpenAlex W7140232145
Open access: hybrid, a free copy (OpenAlex)
Status: code verified
Categories: human (organism), mouse (organism), other condition (population), cellular / molecular (subfield)
Methods: Statistics, Smoothing, state filtering, decompositions, Machine learning, Evoked potentials, Connectivity, fMRI & imaging
MeSH: Antigens, Differentiation, B-Lymphocyte*, Brain Neoplasms*, Central Nervous System Diseases*, Histocompatibility Antigens Class II*, Intramolecular Oxidoreductases*, Macrophage Migration-Inhibitory Factors*, Macrophages*, Microglia*, Animals, Cell Line, Tumor, Disease Progression, Humans, Mice, Tumor Microenvironment (* major topic)
Topic: Macrophage Migration Inhibitory Factor (Immunology, Immunology and Microbiology), according to OpenAlex
Funding: Research Ireland (Researchirel) (20/FFP-P/8597, 23/SPP/11783, 19/FFP/6443); European Molecular Biology Organization (EMBO) (4053); Fundación Ramón Areces (FRA) (CIVP19A5917, CIVP20S10662, CIVP19S8163); Eusko Jaurlaritza (IT1473-22); Ministerio de Ciencia, Innovación y Universidades (MCIU) (SAF2014-57243-R, PID2022-143110OB-I00 and RED2024-153909-E, RTI2018-099357-B-I00, SAF2017-89643-R, and TED2021-131611B-I00, SAF2015-62547-ERC, PID2021-1279880B, RTI2018-102260-B-I00, RTI2018-099267-B-I00 and PID2022-136698OB-I00, PRE2018-083478); Breast Cancer Now (2021JulyPCC1460, 2019AugSF1310); H2020 Future and Emerging Technologies (828972); European Research Council (884699, 864759); Instituto de Salud Carlos III (ISCIII) (AC20/00114); Ministerio de Asuntos Económicos y Transformación Digital, Gobierno de España (BES-2017-081995, RYC-2013-13365); Fundación Científica Asociación Española Contra el Cáncer (AECC) (POSTD19016PRIE, PRYCO234528VALI, TRNSC213878VALI, LABAE19002VALI); Breast Cancer Ireland (BCI) (18239A01); Melanoma Research Alliance (498103); Centro de Investigación Biomédica en Red Fragilidad y Envejecimiento Saludable (CIBERFES) (CB16/10/00282); "la Caixa" Foundation ("la Caixa") (HR23-00051, LCF/BQ/DI17/11620028, LCF/BQ/DI19/11730044); Fondation Leducq (17CVD04); Transcan (Transcan-3) (TRANSCAN2021-203); Alzheimer's Association (AA) (AARG-NTF-24-1304352); Cancer Research Institute (54545); Generalitat Valenciana (PROMETEO/2020/007); Fundació la Marató de TV3 (201906-30-31-32)
Citations: cited by 2 papers (Europe PMC); 75 references in the paper
Notices: A comment on this paper has been published (42388022, from Europe PMC)

Abstract

The abstract is not reproduced here: the paper's license (CC BY-NC-ND) does not allow it. Read it in the paper, at the publisher or on Europe PMC.

Repository

Its files are read in the Code ↔ Paper reader above, with 1 match between paragraphs and lines of code.

osvaldogc/nextpresso1.9.2

License: CC-BY-NC-ND-4.0
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Commit: 1b4c1dd66013acbfe16266dfe4230340f880da35, 8 March 2018
Languages: Perl (13)
Size: 216 files, 13 scripts
Software Heritage: archived
Found in: the text, “Bulk RNA-seq”
Holds: README, license file
Not found: CITATION.cff, environment file, tests, continuous integration, documentation
Availability: 1 check, the latest on 27 September 2026: the link answers
  • 27 September 2026: the link answers
15 files

Tracing map

Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.

What the map holds:

  • 1 repository of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
  • 13 scripts, each with its path and the digest of its content;
  • 1 match between paragraphs of the paper and lines of the code (method lexical-v1);
  • neither the text of the paper nor the code itself.

Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.

Data

Datasets cited

Data availability statement

The paper has a data availability statement. Its license (CC BY-NC-ND) does not allow reproducing it here; in short, from what the harvester recognized in it:

Read it in the paper: doi.org/10.1158/0008-5472.can-25-4018.

Versions

The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.

Version 2, 28 September 2026

  • Publisher: n/a → American Association for Cancer Research

Version 1, 27 September 2026: the first record

Recorded: type, language, journal, volume, issue, pages, dates, 36 authors, 14 MeSH terms, 21 funders, 74 references, 1 integrity notice.

Cite

This paper

Alvaro-Espinosa, L., Marquez-Galera, A., Priego, N., García-Calvo, V., Perea-García, M., Hernandez-Oliver, C., Retana, D., Sanchez, O., de Pablos-Aragoneses, A., García-Gómez, P., Graña-Castro, O., Lapuente-Santana, Ó., Serrano-Ron, L., Al-Shahrour, F., Cayuela López, A., Peset, I., Megías, D., Ola, M., Varešlija, D., . . . Valiente, M. (2026). MIF-Induced CD74+ Microglia and Macrophages Promote Progression of Brain Metastasis and Are Clinically Relevant across Central Nervous System Disorders. Cancer research, 86(13), 3249-3269. https://doi.org/10.1158/0008-5472.can-25-4018

BibTeX

@article{alvaroespinosa2026mif,
author = {Alvaro-Espinosa, Laura and Marquez-Galera, Angel and Priego, Neibla and García-Calvo, Virginia and Perea-García, Maria and Hernandez-Oliver, Carolina and Retana, Diana and Sanchez, Oliva and de Pablos-Aragoneses, Ana and García-Gómez, Pedro and Graña-Castro, Osvaldo and Lapuente-Santana, Óscar and Serrano-Ron, Laura and Al-Shahrour, Fatima and Cayuela López, Ana and Peset, Isabel and Megías, Diego and Ola, Mihaela and Varešlija, Damir and Young, Leonie S and Martí-Mateos, Yolanda and Enríquez, Jose A and Hernández-Encinas, Elena and Blanco-Aparicio, Carmen and Soengas, Maria S and Bernhagen, Juergen and Antón-Fernández, Alejandro and Ávila, Jesús and Marchena, Miguel A and Torres, Maximiliano and de Castro, Fernando and Márquez-Ropero, Mar and Sierra, Amanda and Lopez-Atalaya, Jose P and {RENACER Group} and Valiente, Manuel},
title = {{MIF-Induced CD74+ Microglia and Macrophages Promote Progression of Brain Metastasis and Are Clinically Relevant across Central Nervous System Disorders}},
journal = {Cancer research},
year = {2026},
month = jul,
volume = {86},
number = {13},
pages = {3249--3269},
publisher = {American Association for Cancer Research},
issn = {0008-5472},
doi = {10.1158/0008-5472.can-25-4018},
url = {https://doi.org/10.1158/0008-5472.can-25-4018},
pmid = {41874311},
pmcid = {PMC7618953}
}

RIS

TY - JOUR
AU - Alvaro-Espinosa, Laura
AU - Marquez-Galera, Angel
AU - Priego, Neibla
AU - García-Calvo, Virginia
AU - Perea-García, Maria
AU - Hernandez-Oliver, Carolina
AU - Retana, Diana
AU - Sanchez, Oliva
AU - de Pablos-Aragoneses, Ana
AU - García-Gómez, Pedro
AU - Graña-Castro, Osvaldo
AU - Lapuente-Santana, Óscar
AU - Serrano-Ron, Laura
AU - Al-Shahrour, Fatima
AU - Cayuela López, Ana
AU - Peset, Isabel
AU - Megías, Diego
AU - Ola, Mihaela
AU - Varešlija, Damir
AU - Young, Leonie S
AU - Martí-Mateos, Yolanda
AU - Enríquez, Jose A
AU - Hernández-Encinas, Elena
AU - Blanco-Aparicio, Carmen
AU - Soengas, Maria S
AU - Bernhagen, Juergen
AU - Antón-Fernández, Alejandro
AU - Ávila, Jesús
AU - Marchena, Miguel A
AU - Torres, Maximiliano
AU - de Castro, Fernando
AU - Márquez-Ropero, Mar
AU - Sierra, Amanda
AU - Lopez-Atalaya, Jose P
AU - RENACER Group
AU - Valiente, Manuel
TI - MIF-Induced CD74+ Microglia and Macrophages Promote Progression of Brain Metastasis and Are Clinically Relevant across Central Nervous System Disorders
T2 - Cancer research
J2 - Cancer Res
PY - 2026
DA - 2026/07/01
VL - 86
IS - 13
SP - 3249
EP - 3269
SN - 0008-5472
PB - American Association for Cancer Research
DO - 10.1158/0008-5472.can-25-4018
UR - https://doi.org/10.1158/0008-5472.can-25-4018
LA - en
ER -

CSL-JSON

{
"id": "10.1158/0008-5472.can-25-4018",
"type": "article-journal",
"title": "MIF-Induced CD74+ Microglia and Macrophages Promote Progression of Brain Metastasis and Are Clinically Relevant across Central Nervous System Disorders",
"container-title": "Cancer research",
"author": [
{
"family": "Alvaro-Espinosa",
"given": "Laura"
},
{
"family": "Marquez-Galera",
"given": "Angel"
},
{
"family": "Priego",
"given": "Neibla"
},
{
"family": "García-Calvo",
"given": "Virginia"
},
{
"family": "Perea-García",
"given": "Maria"
},
{
"family": "Hernandez-Oliver",
"given": "Carolina"
},
{
"family": "Retana",
"given": "Diana"
},
{
"family": "Sanchez",
"given": "Oliva"
},
{
"family": "de Pablos-Aragoneses",
"given": "Ana"
},
{
"family": "García-Gómez",
"given": "Pedro"
},
{
"family": "Graña-Castro",
"given": "Osvaldo"
},
{
"family": "Lapuente-Santana",
"given": "Óscar"
},
{
"family": "Serrano-Ron",
"given": "Laura"
},
{
"family": "Al-Shahrour",
"given": "Fatima"
},
{
"family": "Cayuela López",
"given": "Ana"
},
{
"family": "Peset",
"given": "Isabel"
},
{
"family": "Megías",
"given": "Diego"
},
{
"family": "Ola",
"given": "Mihaela"
},
{
"family": "Varešlija",
"given": "Damir"
},
{
"family": "Young",
"given": "Leonie S"
},
{
"family": "Martí-Mateos",
"given": "Yolanda"
},
{
"family": "Enríquez",
"given": "Jose A"
},
{
"family": "Hernández-Encinas",
"given": "Elena"
},
{
"family": "Blanco-Aparicio",
"given": "Carmen"
},
{
"family": "Soengas",
"given": "Maria S"
},
{
"family": "Bernhagen",
"given": "Juergen"
},
{
"family": "Antón-Fernández",
"given": "Alejandro"
},
{
"family": "Ávila",
"given": "Jesús"
},
{
"family": "Marchena",
"given": "Miguel A"
},
{
"family": "Torres",
"given": "Maximiliano"
},
{
"family": "de Castro",
"given": "Fernando"
},
{
"family": "Márquez-Ropero",
"given": "Mar"
},
{
"family": "Sierra",
"given": "Amanda"
},
{
"family": "Lopez-Atalaya",
"given": "Jose P"
},
{
"literal": "RENACER Group"
},
{
"family": "Valiente",
"given": "Manuel"
}
],
"container-title-short": "Cancer Res",
"volume": "86",
"issue": "13",
"page": "3249-3269",
"DOI": "10.1158/0008-5472.can-25-4018",
"PMID": "41874311",
"PMCID": "PMC7618953",
"ISSN": "0008-5472",
"publisher": "American Association for Cancer Research",
"URL": "https://doi.org/10.1158/0008-5472.can-25-4018",
"language": "en",
"issued": {
"date-parts": [
[
2026,
7,
1
]
]
}
}

The tracing map gets a citation of its own once an author has validated it and it has a DOI.

Similar papers

The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.

[1] doi:10.1093/jnci/djaf295
Targeting CDK12 disrupts estrogen-receptor chromatin recruitment and ER-MED1 transcription in advanced ER+ breast cancer.
Journal: Journal of the National Cancer Institute
In common: other condition, mouse, cellular / molecular, 1 reference, 3 authors
[2] doi:10.1172/jci.insight.199498
Distinct immune landscapes characterize highly versus minimally invasive brain metastases.
Journal: JCI insight
In common: other condition, mouse, 5 references
[3] doi:10.1038/s41467-026-76232-w [code]
Th17 effector cytokines induce shared and distinct microglial and endothelial cell responses in a mouse model for post-streptococcal encephalitis.
Journal: Nature communications
In common: other condition, mouse, cellular / molecular, 4 references
[4] doi:10.26508/lsa.202503551 [code]
Convergent transcriptomic signature in iPSC-dopaminergic neurons of hereditary Parkinson's disease.
Journal: Life science alliance
In common: cellular / molecular, 5 references
[5] doi:10.1038/s41586-026-10515-6 [code]
An X-linked long non-coding RNA, PTCHD1-AS, and the core features of autism.
Journal: Nature
In common: mouse, cellular / molecular, 5 references
[6] doi:10.1371/journal.pcbi.1014460 [code]
Quantitative anatomy and biophysical modeling of ascending neuromodulatory systems in the developing rat neocortex.
Journal: PLoS computational biology
In common: author Alejandro Antón-Fernández
[7] doi:10.1038/s41593-026-02267-3 [code]
Spatial proteomic analysis in human Alzheimer's disease brains enables identification of microenvironment-dependent microglial cell states.
Journal: Nature neuroscience
In common: cellular / molecular, 3 references
[8] doi:10.3389/fbinf.2026.1832826 [code]
Spatial transcriptomics reveal heterogeneous cell‒cell interactions among brain regions in cuprizone model consistent with multiple sclerosis lesions.
Journal: Frontiers in bioinformatics
In common: cellular / molecular, 4 references
[9] doi:10.1038/s41586-026-10512-9 [code]
Astrocyte glucocorticoid receptor signalling restricts neuronal plasticity.
Journal: Nature
In common: mouse, cellular / molecular, 4 references
[10] doi:10.1016/j.isci.2026.115970 [code]
Thyroid hormones maintain parvalbumin neuron functions in the mouse neocortex.
Journal: iScience
In common: mouse, 4 references

Contribute

The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.

Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.

Request its removal

To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).

Discussion, reproductions, activity

Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.

Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.

Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.