From: Michael R. Crusoe <michael.crusoe@gmail.com>
Subject: Don't hardcode number of --CPU (especially above 2)

blastn -num_threads will not accept a number larger than the cores/CPUs it
detects and will exit with an error. Some Debian test (virtual) machines only
have two cores and thus they failed our testing.

With this patch we detect in a unix/macOS friendly way the number of cores
using `nproc` or `sysctl -n hw.physicalcpu` (respectively). Thus execution of
the sample_data tests will be much faster for most developers/users.

Perhaps Trinity itself could be taught this trick and the --CPU option would
not be needed by default.

--- trinityrnaseq.orig/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe.diff_kmer_length.sh
+++ trinityrnaseq/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe.diff_kmer_length.sh
@@ -19,14 +19,14 @@
     gunzip -c reads2.left.fq.gz > reads2.left.fq
 fi
 
-
+CPU=$(nproc || sysctl -n hw.physicalcpu)
 
 #######################################################
 ##  Run Trinity to Generate Transcriptome Assemblies ##
 #######################################################
 
 ## use jellyfish
-../../Trinity --seqType fq --JM 2G --left reads.left.fq.gz,reads2.left.fq.gz --right reads.right.fq.gz,reads2.right.fq.gz --SS_lib_type RF --CPU 4 --trimmomatic --normalize_reads --no_cleanup --KMER_SIZE $KMER_SIZE
+../../Trinity --seqType fq --JM 2G --left reads.left.fq.gz,reads2.left.fq.gz --right reads.right.fq.gz,reads2.right.fq.gz --SS_lib_type RF --CPU ${CPU} --trimmomatic --normalize_reads --no_cleanup --KMER_SIZE $KMER_SIZE
 
 ##### Done Running Trinity #####
 
--- trinityrnaseq.orig/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_CuffFly.sh
+++ trinityrnaseq/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_CuffFly.sh
@@ -9,14 +9,14 @@
     gunzip -c reads.left.fq.gz > reads.left.fq
 fi
 
-
+CPU=$(nproc || sysctl -n hw.physicalcpu)
 
 #######################################################
 ##  Run Trinity to Generate Transcriptome Assemblies ##
 #######################################################
 
 ## use jellyfish
-../../Trinity.pl --seqType fq --JM 2G --left reads.left.fq --right reads.right.fq --SS_lib_type RF --CPU 4 --CuffFly
+../../Trinity.pl --seqType fq --JM 2G --left reads.left.fq --right reads.right.fq --SS_lib_type RF --CPU ${CPU} --CuffFly
 
 ##### Done Running Trinity #####
 
--- trinityrnaseq.orig/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_PasaFly.sh
+++ trinityrnaseq/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_PasaFly.sh
@@ -9,14 +9,14 @@
     gunzip -c reads.left.fq.gz > reads.left.fq
 fi
 
-
+CPU=$(nproc || sysctl -n hw.physicalcpu)
 
 #######################################################
 ##  Run Trinity to Generate Transcriptome Assemblies ##
 #######################################################
 
 ## use jellyfish
-../../Trinity.pl --seqType fq --JM 2G --left reads.left.fq --right reads.right.fq --SS_lib_type RF --CPU 4 --PasaFly
+../../Trinity.pl --seqType fq --JM 2G --left reads.left.fq --right reads.right.fq --SS_lib_type RF --CPU ${CPU} --PasaFly
 
 ##### Done Running Trinity #####
 
--- trinityrnaseq.orig/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_as_DS.sh
+++ trinityrnaseq/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_as_DS.sh
@@ -4,8 +4,10 @@
 ##  Run Trinity to Generate Transcriptome Assemblies ##
 #######################################################
 
+CPU=$(nproc || sysctl -n hw.physicalcpu)
+
 ## use jellyfish
-../../Trinity.pl --seqType fq --JM 2G --left reads.left.fq.gz --right reads.right.fq.gz  --CPU 4 
+../../Trinity.pl --seqType fq --JM 2G --left reads.left.fq.gz --right reads.right.fq.gz  --CPU ${CPU} 
 
 ##### Done Running Trinity #####
 
--- trinityrnaseq.orig/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_bowtie_components.sh
+++ trinityrnaseq/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_bowtie_components.sh
@@ -9,14 +9,14 @@
     gunzip -c reads.left.fq.gz > reads.left.fq
 fi
 
-
+CPU=$(nproc || sysctl -n hw.physicalcpu)
 
 #######################################################
 ##  Run Trinity to Generate Transcriptome Assemblies ##
 #######################################################
 
 ## use jellyfish
-../../Trinity.pl --seqType fq --JM 2G --left reads.left.fq --right reads.right.fq --SS_lib_type RF --CPU 4 --bowtie_comp
+../../Trinity.pl --seqType fq --JM 2G --left reads.left.fq --right reads.right.fq --SS_lib_type RF --CPU ${CPU} --bowtie_comp
 
 ##### Done Running Trinity #####
 
--- trinityrnaseq.orig/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_full_cleanup.sh
+++ trinityrnaseq/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_full_cleanup.sh
@@ -4,8 +4,10 @@
 ##  Run Trinity to Generate Transcriptome Assemblies ##
 #######################################################
 
+CPU=$(nproc || sysctl -n hw.physicalcpu)
+
 ## use jellyfish
-../../Trinity --seqType fq --max_memory 2G --left reads.left.fq.gz --right reads.right.fq.gz --SS_lib_type RF --CPU 2 --full_cleanup
+../../Trinity --seqType fq --max_memory 2G --left reads.left.fq.gz --right reads.right.fq.gz --SS_lib_type RF --CPU ${CPU} --full_cleanup
 
 ##### Done Running Trinity #####
 
--- trinityrnaseq.orig/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_include_long_reads.sh
+++ trinityrnaseq/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_include_long_reads.sh
@@ -4,13 +4,15 @@
 ##  Run Trinity to Generate Transcriptome Assemblies ##
 #######################################################
 
+CPU=$(nproc || sysctl -n hw.physicalcpu)
+
 ## use jellyfish
 ../../Trinity --seqType fq \
               --max_memory 2G \
               --left reads.left.fq.gz \
               --right reads.right.fq.gz \
               --SS_lib_type RF \
-              --CPU 4 \
+              --CPU ${CPU} \
               --no_cleanup \
               --long_reads longReads.fa \
               --output test_trinity_long_reads
--- trinityrnaseq.orig/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_no_cleanup.sh
+++ trinityrnaseq/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_no_cleanup.sh
@@ -4,8 +4,10 @@
 ##  Run Trinity to Generate Transcriptome Assemblies ##
 #######################################################
 
+CPU=$(nproc || sysctl -n hw.physicalcpu)
+
 ## use jellyfish
-../../Trinity.pl --seqType fq --JM 2G --left reads.left.fq.gz --right reads.right.fq.gz --SS_lib_type RF --CPU 2 --no_cleanup
+../../Trinity.pl --seqType fq --JM 2G --left reads.left.fq.gz --right reads.right.fq.gz --SS_lib_type RF --CPU ${CPU} --no_cleanup
 
 ##### Done Running Trinity #####
 
--- trinityrnaseq.orig/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_parallel_iworm_assembly.sh
+++ trinityrnaseq/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_parallel_iworm_assembly.sh
@@ -9,14 +9,14 @@
     gunzip -c reads.left.fq.gz > reads.left.fq
 fi
 
-
+CPU=$(nproc || sysctl -n hw.physicalcpu)
 
 #######################################################
 ##  Run Trinity to Generate Transcriptome Assemblies ##
 #######################################################
 
 ## use jellyfish
-../../Trinity.pl --seqType fq --JM 2G --left reads.left.fq --right reads.right.fq --SS_lib_type RF --CPU 4 --PARALLEL_IWORM
+../../Trinity.pl --seqType fq --JM 2G --left reads.left.fq --right reads.right.fq --SS_lib_type RF --CPU ${CPU} --PARALLEL_IWORM
 
 ##### Done Running Trinity #####
 
--- trinityrnaseq.orig/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_piecemeal.sh
+++ trinityrnaseq/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_piecemeal.sh
@@ -4,17 +4,19 @@
 ##  Run Trinity to Generate Transcriptome Assemblies ##
 #######################################################
 
+CPU=$(nproc || sysctl -n hw.physicalcpu)
+
 # stop before inchworm (just in silico norm)
-../../Trinity --seqType fq --max_memory 2G --left reads.left.fq.gz --right reads.right.fq.gz  --CPU 4 --output trinity_piecemeal --no_run_inchworm
+../../Trinity --seqType fq --max_memory 2G --left reads.left.fq.gz --right reads.right.fq.gz  --CPU ${CPU} --output trinity_piecemeal --no_run_inchworm
 
 # stop before chrysalis
-../../Trinity --seqType fq --max_memory 2G --left reads.left.fq.gz --right reads.right.fq.gz  --CPU 4 --output trinity_piecemeal --no_run_chrysalis
+../../Trinity --seqType fq --max_memory 2G --left reads.left.fq.gz --right reads.right.fq.gz  --CPU ${CPU} --output trinity_piecemeal --no_run_chrysalis
 
 # stop before phase 2
-../../Trinity --seqType fq --max_memory 2G --left reads.left.fq.gz --right reads.right.fq.gz  --CPU 4 --output trinity_piecemeal --no_distributed_trinity_exec
+../../Trinity --seqType fq --max_memory 2G --left reads.left.fq.gz --right reads.right.fq.gz  --CPU ${CPU} --output trinity_piecemeal --no_distributed_trinity_exec
 
 # finish it up
-../../Trinity --seqType fq --max_memory 2G --left reads.left.fq.gz --right reads.right.fq.gz  --CPU 4 --output trinity_piecemeal 
+../../Trinity --seqType fq --max_memory 2G --left reads.left.fq.gz --right reads.right.fq.gz  --CPU ${CPU} --output trinity_piecemeal 
 
 
 
--- trinityrnaseq.orig/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_trin_complete.sh
+++ trinityrnaseq/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_trin_complete.sh
@@ -4,10 +4,12 @@
 ##  Run Trinity to Generate Transcriptome Assemblies ##
 #######################################################
 
+CPU=$(nproc || sysctl -n hw.physicalcpu)
+
 ../../Trinity --seqType fq --max_memory 2G \
               --left reads.left.fq.gz \
               --right reads.right.fq.gz \
               --SS_lib_type RF \
-              --CPU 4 --trinity_complete --no_cleanup --output trinity_complete
+              --CPU ${CPU} --trinity_complete --no_cleanup --output trinity_complete
 
 
--- trinityrnaseq.orig/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_use_bowtie2.sh
+++ trinityrnaseq/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_use_bowtie2.sh
@@ -4,6 +4,8 @@
 ##  Run Trinity to Generate Transcriptome Assemblies ##
 #######################################################
 
+CPU=$(nproc || sysctl -n hw.physicalcpu)
+
 ## use jellyfish
 ../../Trinity \
     --seqType fq \
@@ -11,7 +13,7 @@
     --left reads.left.fq.gz \
     --right reads.right.fq.gz \
     --SS_lib_type RF \
-    --CPU 4 \
+    --CPU ${CPU} \
     --no_cleanup \
     --use_bowtie2 \
     --output test_trinity_bowtie2
--- trinityrnaseq.orig/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_use_my_ramdisk.sh
+++ trinityrnaseq/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_use_my_ramdisk.sh
@@ -15,11 +15,13 @@
 ##  Run Trinity to Generate Transcriptome Assemblies ##
 #######################################################
 
+CPU=$(nproc || sysctl -n hw.physicalcpu)
+
 ../../Trinity --seqType fq --max_memory 2G \
               --left reads.left.fq \
               --right reads.right.fq \
               --SS_lib_type RF \
-              --CPU 4 \
+              --CPU ${CPU} \
               --workdir  /Volumes/RamDisk/trinity.workdir.$$ --full_cleanup
 
 
--- trinityrnaseq.orig/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_use_workdir.sh
+++ trinityrnaseq/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_use_workdir.sh
@@ -15,11 +15,13 @@
 ##  Run Trinity to Generate Transcriptome Assemblies ##
 #######################################################
 
+CPU=$(nproc || sysctl -n hw.physicalcpu)
+
 ../../Trinity --seqType fq --max_memory 2G \
               --left reads.left.fq \
               --right reads.right.fq \
               --SS_lib_type RF \
-              --CPU 4 \
+              --CPU ${CPU} \
               --output trinity_with_workdir \
               --workdir  /tmp/trinity.workdir.$$ --full_cleanup
 
--- trinityrnaseq.orig/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_using_Grid_LSF.sh
+++ trinityrnaseq/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_using_Grid_LSF.sh
@@ -4,8 +4,6 @@
 ##  Run Trinity to Generate Transcriptome Assemblies ##
 #######################################################
 
-
-
-../../Trinity --seqType fq --JM 2G --left reads.left.fq.gz --right reads.right.fq.gz --SS_lib_type RF --CPU 4 --grid_conf_file ../../htc_conf/BroadInst_LSF.test.conf
+../../Trinity --seqType fq --JM 2G --left reads.left.fq.gz --right reads.right.fq.gz --SS_lib_type RF --CPU $4 --grid_conf_file ../../htc_conf/BroadInst_LSF.test.conf
 
 
--- trinityrnaseq.orig/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_w_monitoring.sh
+++ trinityrnaseq/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_w_monitoring.sh
@@ -15,6 +15,8 @@
 ##  Run Trinity to Generate Transcriptome Assemblies ##
 #######################################################
 
+CPU=$(nproc || sysctl -n hw.physicalcpu)
+
 # monitoring at 1 second intervals because this test runs very quick.  You might monitor on the order of minutes rather than seconds for 'regular' runs.
-../../Trinity --seqType fq --max_memory 1G --left reads.left.fq --right reads.right.fq --SS_lib_type RF --CPU 4 --monitoring --monitor_sec 1 --output trinity_out_dir_monitored
+../../Trinity --seqType fq --max_memory 1G --left reads.left.fq --right reads.right.fq --SS_lib_type RF --CPU ${CPU} --monitoring --monitor_sec 1 --output trinity_out_dir_monitored
 
--- trinityrnaseq.orig/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_with_qual_trimming.sh
+++ trinityrnaseq/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_with_qual_trimming.sh
@@ -15,6 +15,8 @@
 ##  Run Trinity to Generate Transcriptome Assemblies ##
 #######################################################
 
+CPU=$(nproc || sysctl -n hw.physicalcpu)
+
 ## use jellyfish
 ../../Trinity \
     --seqType fq \
@@ -22,7 +24,7 @@
     --left reads.left.fq \
     --right reads.right.fq \
     --SS_lib_type RF \
-    --CPU 4 \
+    --CPU ${CPU} \
     --no_normalize_reads \
     --trimmomatic \
     --output __test_trinity_with_trimmomatic
--- trinityrnaseq.orig/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_with_qual_trimming_and_normalization.sh
+++ trinityrnaseq/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_with_qual_trimming_and_normalization.sh
@@ -15,8 +15,10 @@
 ##  Run Trinity to Generate Transcriptome Assemblies ##
 #######################################################
 
+CPU=$(nproc || sysctl -n hw.physicalcpu)
+
 ## use jellyfish
-../../Trinity --seqType fq --max_memory 2G --left reads.left.fq --right reads.right.fq --SS_lib_type RF --CPU 4 --trimmomatic --normalize_reads --output __test_trinity_qual_and_norm
+../../Trinity --seqType fq --max_memory 2G --left reads.left.fq --right reads.right.fq --SS_lib_type RF --CPU ${CPU} --trimmomatic --normalize_reads --output __test_trinity_qual_and_norm
 
 ##### Done Running Trinity #####
 
--- trinityrnaseq.orig/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_with_qual_trimming_and_normalize_libs_separately.sh
+++ trinityrnaseq/sample_data/test_Trinity_Assembly/misc_run_tests/__runMe_with_qual_trimming_and_normalize_libs_separately.sh
@@ -22,13 +22,15 @@
 ##  Run Trinity to Generate Transcriptome Assemblies ##
 #######################################################
 
+CPU=$(nproc || sysctl -n hw.physicalcpu)
+
 ## use jellyfish
 ../../Trinity --seqType fq \
               --max_memory 2G \
               --left reads.left.fq,reads2.left.fq \
               --right reads.right.fq,reads2.right.fq \
               --SS_lib_type RF \
-              --CPU 4 \
+              --CPU ${CPU} \
               --trimmomatic \
               --normalize_reads \
               --normalize_by_read_set \
--- trinityrnaseq.orig/sample_data/test_Trinity_Assembly/misc_run_tests/__test_runMe.singleFQ.sh
+++ trinityrnaseq/sample_data/test_Trinity_Assembly/misc_run_tests/__test_runMe.singleFQ.sh
@@ -6,7 +6,9 @@
 ##  Run Trinity to Generate Transcriptome Assemblies ##
 #######################################################
 
-../../Trinity.pl --seqType fq --single reads.left.fq.gz  --JM 1G  --CPU 4  --output trinity_single_outdir
+CPU=$(nproc || sysctl -n hw.physicalcpu)
+
+../../Trinity.pl --seqType fq --single reads.left.fq.gz  --JM 1G  --CPU {CPU}  --output trinity_single_outdir
 
 
 
--- trinityrnaseq.orig/sample_data/test_Trinity_Assembly/misc_run_tests/__test_runMe_NO_normalization.sh
+++ trinityrnaseq/sample_data/test_Trinity_Assembly/misc_run_tests/__test_runMe_NO_normalization.sh
@@ -15,13 +15,15 @@
 ##  Run Trinity to Generate Transcriptome Assemblies ##
 #######################################################
 
+CPU=$(nproc || sysctl -n hw.physicalcpu)
+
 ## use jellyfish
 ../../Trinity --seqType fq \
               --max_memory 2G \
               --left reads.left.fq \
               --right reads.right.fq \
               --SS_lib_type RF \
-              --CPU 4 \
+              --CPU ${CPU} \
               --no_normalize_reads \
               --output __test_trinity_wo_normalization
 
--- trinityrnaseq.orig/sample_data/test_Trinity_Assembly/misc_run_tests/__test_runMe_docker.sh
+++ trinityrnaseq/sample_data/test_Trinity_Assembly/misc_run_tests/__test_runMe_docker.sh
@@ -1,2 +1,4 @@
-docker run --rm -v`pwd`:`pwd` trinityrnaseq/trinityrnaseq Trinity --seqType fq --single `pwd`/reads.left.fq.gz  --max_memory 1G --CPU 2 --output `pwd`/trinity_out_dir_docker
+CPU=$(nproc || sysctl -n hw.physicalcpu)
+
+docker run --rm -v`pwd`:`pwd` trinityrnaseq/trinityrnaseq Trinity --seqType fq --single `pwd`/reads.left.fq.gz  --max_memory 1G --CPU ${CPU} --output `pwd`/trinity_out_dir_docker
 
--- trinityrnaseq.orig/sample_data/test_Trinity_Assembly/misc_run_tests/__test_runMe_include_normalization.sh
+++ trinityrnaseq/sample_data/test_Trinity_Assembly/misc_run_tests/__test_runMe_include_normalization.sh
@@ -15,8 +15,10 @@
 ##  Run Trinity to Generate Transcriptome Assemblies ##
 #######################################################
 
+CPU=$(nproc || sysctl -n hw.physicalcpu)
+
 ## use jellyfish
-../../Trinity --seqType fq --max_memory 2G --left reads.left.fq --right reads.right.fq --SS_lib_type RF --CPU 4 --normalize_reads --output __test_trinity_w_normalization
+../../Trinity --seqType fq --max_memory 2G --left reads.left.fq --right reads.right.fq --SS_lib_type RF --CPU ${CPU} --normalize_reads --output __test_trinity_w_normalization
 
 ##### Done Running Trinity #####
 
--- trinityrnaseq.orig/sample_data/test_Trinity_Assembly/misc_run_tests/__test_runMe_lenient_path_extension.sh
+++ trinityrnaseq/sample_data/test_Trinity_Assembly/misc_run_tests/__test_runMe_lenient_path_extension.sh
@@ -15,7 +15,9 @@
 ##  Run Trinity to Generate Transcriptome Assemblies ##
 #######################################################
 
+CPU=$(nproc || sysctl -n hw.physicalcpu)
+
 ## use jellyfish
-../../Trinity --seqType fq --max_memory 2G --left reads.left.fq --right reads.right.fq --SS_lib_type RF --CPU 4 --path_reinforcement_distance 1  --output __test_trinity_lenient_path_ext
+../../Trinity --seqType fq --max_memory 2G --left reads.left.fq --right reads.right.fq --SS_lib_type RF --CPU ${CPU} --path_reinforcement_distance 1  --output __test_trinity_lenient_path_ext
 
 
--- trinityrnaseq.orig/sample_data/test_Trinity_Assembly/misc_run_tests/runMe_no_qualTrim.sh
+++ trinityrnaseq/sample_data/test_Trinity_Assembly/misc_run_tests/runMe_no_qualTrim.sh
@@ -6,8 +6,10 @@
 ##  Run Trinity to Generate Transcriptome Assemblies ##
 #######################################################
 
+CPU=$(nproc || sysctl -n hw.physicalcpu)
+
 ## use jellyfish
-../../Trinity --seqType fq --max_memory 2G --left reads.left.fq.gz,reads2.left.fq.gz --right reads.right.fq.gz,reads2.right.fq.gz --SS_lib_type RF --CPU 4 --normalize_reads --no_cleanup --output trinity_test_no_qtrim
+../../Trinity --seqType fq --max_memory 2G --left reads.left.fq.gz,reads2.left.fq.gz --right reads.right.fq.gz,reads2.right.fq.gz --SS_lib_type RF --CPU ${CPU} --normalize_reads --no_cleanup --output trinity_test_no_qtrim
 
 ##### Done Running Trinity #####
 
--- trinityrnaseq.orig/sample_data/test_Trinity_Assembly/runMe.sh
+++ trinityrnaseq/sample_data/test_Trinity_Assembly/runMe.sh
@@ -4,11 +4,13 @@
 ##  Run Trinity to Generate Transcriptome Assemblies ##
 #######################################################
 
+CPU=$(nproc || sysctl -n hw.physicalcpu)
+
 ../../Trinity --seqType fq --max_memory 2G \
               --left reads.left.fq.gz \
               --right reads.right.fq.gz \
               --SS_lib_type RF \
-              --CPU 4 
+              --CPU ${CPU}
 
 ##### Done Running Trinity #####
 
