File: trinity_pbs.sh

package info (click to toggle)
trinityrnaseq 2.6.6%2Bdfsg-6
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 346,416 kB
  • sloc: perl: 47,542; cpp: 20,209; java: 12,484; python: 2,766; sh: 1,665; makefile: 895; ansic: 90; xml: 83
file content (291 lines) | stat: -rwxr-xr-x 20,085 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
#!/bin/bash 
set -e  # turn on exit on error
##################################################################################################################################
##########################                                                                ########################################
##########################     Trinity PBS job submission with multi part dependencies    ########################################
##########################                                                                ########################################
##################################################################################################################################
### Author: Josh Bowden, Alexie Papanicolaou, CSIRO
### Version 1.0
###
###		
###		Script to split the Trinity workflow into multiple stages so as to efficiently request 
###		and use appropriate resources (walltime and number of cores) on a computer cluster / supercomputer.
###		Currently creates scripts for PBS Torque or PBSpro
###	    
###		trinity_pbs script install instructions:
###			1. Copy all trinity_pbs.* files into a directory (we will call it "TRINITY_PBS_DIR").
###			2. Add TRINITY_PBS_DIR to the PATH i.e. export or set PATH=TRINITY_PBS_DIR:$PATH  (perhaps export PATH in .bashrc file)
###			3. Change the "TRINITYPBSPATH" variable found below to point to the directory also. i.e. TRINITYPBSPATH=TRINITY_PBS_DIR
###			4. Set MEMDIRIN to name of a node-local filesystem so a network drive is not needed unecesarily for Scripts 4b and 5b
###			5. Set MODTRINITY to any modules that need to be loaded so Trinity.pl can be run.
###			6. Set TRINITYPATH to the path to Trinity.pl executable
###			7. Set PBSTYPE to --pbspro or --pbs, dependent on the system present.
###		That should be all that is needed from an admin perspective (besides making scripts accessible and exectable for users)			
###
###		Users need make a copy of TRINITY.CONFIG.template and then modify variables in it. See TRINITY.CONFIG.template for further details.
###		
###		The current script does the following.
###		Part 1. Reads data from TRINITY.CONFIG and creates the input directory, data file names, output data directory and Trinity.pl command line 
###			User inputs from TRINITY.CONFIG file :
###			JOBPREFIX				A string of less than 11 characters long. PBS will use this as a jobname prefix.
###			DATADIRECTORY  			Where input data exists
###			OUTPUTDIR  				Where user wants output data to go - requires a lot of space even for small datatsets 
###			STANDARD_JOB_DETAILS 	the Trinity.pl command line
###			ACCOUNT  				Account details of user (if required by PBS system being used)
###	   		
###		Part 2. Writes scripts to run Trinity.pl in 6 stages: 
###			3 intial (Inchworm, and 2 x Chrysalis stages: Chrysalis::GraphFromFasta and Chrysalis::ReadsFromTranscripts) 
###			2 parallel stages (Chrysalis::QuantifyGraph and Butterfly) which are executed in parallel.
###			1 collection of results as Trinity.Fasta.
###	      			
###			Information input from command line filename for stage 'x' : 
###			WALLTIME_Px  			Amount of time stage requires
###			MEM_Px					The amount of memory the stage requires
###			NCPU_Px     			The number of CPUs the stage may use
###			PBSNODETYPE _Px				The PBS (for --pbspro only) queue name
###			NUMPERARRAYITEM_Px		The number of massively parallel jobs in each parallel satge.
###	          		                                     
###		Part 3. Runs scripts dependant upon what stage has been detected as completed, using PBS job dependencies  
###                                                                                                      
###			Command line usage:
###				To start (or re-start) an analysis:
###					>trinity_pbs.sh TRINITY.CONFIG.template
###				To stop previously started PBS jobs on the queue:
###					>trinity_kill.pl OUTPUTDIR 
###				Where:
###					TRINITY.CONFIG.template = user specific job details
###					OUTPUTDIR   = is path to output data directory
### 
### Output job script submission files. These are saved in the output directory (OUTPUTDIR) and can be modified/re-run if any job fails.
### *_run.sh       Runs all the following scripts - with job dependencies and only the jobs that still need to be run.
### *_p1.sh        Runs Inchworm stage. Does not scale well past a single socket. Only request at most the number of cores on a single CPU.
### *_p2.sh        Runs Chrysalis::GrapghFromFasta clustering of Inchworm output. Should scale to number of cores on node
### *_p3.sh        Runs Chrysalis::ReadsToTranscripts. I/O limited. Try to use local filesystem (not implemented)
### *_p4a.sh       Creates jobs to run Chrysalis::QuantifyGraph and Butterfly parallel tasks
### *_p4b.sh       QuantifyGraph job. "NUMPERARRAYITEM" tasks from the file /chrysalis/quantifyGraph_commands are run for each job 
### *_p5b.sh       Butterfly job. "NUMPERARRAYITEM" tasks from the file /chrysalis/butterfly_commands are run for each job 
###                to start off at last completed stage. At present leaves all data on temporary area of shared network drive and 
###                copies Trinity.fatsa to home directory (with specific job prefix in filename). 
### * = $JOBPREFIX. $JOBPREFIX should not be > 10 characters long


##################################################################################################################################
####################### SET TRINITY INSTALLATION PATH (where Trinity.pl resides #################################################
##################################################################################################################################
# We need the path even if loaded using module
TRINITYPATH="/home/pap056/software/trinity_2013_08_14/"
# If you are loading using module, you can make the next variable blank
NEWPATH=
NEWPATH="export PATH=$PATH:$TRINITYPATH"

##################################################################################################################################
########    Set TRINITYPBSPATH to the directory where trinity_pbs.sh scripts are installed
##################################################################################################################################
TRINITYPBSPATH=`dirname "$0"`; # set to location of this script

##################################################################################################################################
########  Set cluster specific name for compute node local filesystem
##################################################################################################################################
MEMDIRIN="\$TMPDIR"  # available on Barrine  


##################################################################################################################################
########     Set system specific PATHS and load system specific modules (if available) 
##################################################################################################################################
# Example for for Barrine:
PBSTYPE="--pbspro"
# Here we ensure that Java 1.6 is used and Java 1.7 is removed (Butterfly dependency)
MODTRINITY="
 module load mpt/2.00 perl/5.15.8 bowtie/12.7 jellyfish/1.1.5 samtools/1.18 java/1.6.0_22-sun;
 module rm java/1.7.0_02
"

## That should be all the admin modifications needed.

# Append Trinity path data to env variables loaded by every script
MODTRINITY="
 $NEWPATH;
 export TRINITYPATH="/home/pap056/software/trinity_2013_08_14";
 $MODTRINITY
"
##################################################################################################################################
##################################################################################################################################
##################################################################################################################################

##################################################################################################################################
#########    Load files that contains functions 
##################################################################################################################################
# Modify function F_GETNODESTRING in file trinity_pbs.header so that a correct PBS header is returned to suit your PBS cluster
if [ -e "$TRINITYPBSPATH"/trinity_pbs.header ] ; then
  	source "$TRINITYPBSPATH"/trinity_pbs.header 
else
	echo "$1 requires file \"trinity_pbs.header\" to be present in: "
	echo "$TRINITYPBSPATH"
	exit 1
fi

##################################################################################################################################
#########    Load input config file
##################################################################################################################################
if [ -e "$1" ] ; then
  	source "$1"
else
	echo "Error: Input file does not exist: "$1"  "
	exit 1
fi


##################################################################################################################################
## Common variables to PBS and PBSpro
## and other needed variables that a user should not need to modify
##################################################################################################################################
if [ $UEMAIL ]; then PBSUSER="#PBS -M "$UEMAIL"" ; fi
HASHBANG="#!/bin/bash"

##################################################################################################################################
## PBS torque and PBSpro have some differences. 
## Organise these here and also check further on (line 184) and change NODETYPE to match cluster system
## MODTRINITY will also be different on different clusters - it sets up the paths to the required executables
##################################################################################################################################
if [[ "$PBSTYPE" = "--pbspro" ]] ; then	
	JOBARRAY="-J"
	JOBARRAY_ID="\$PBS_ARRAY_INDEX"
	AFTEROKARRAY="afterok"	
elif [[ "$PBSTYPE" = "--pbs" ]] ; then
	## PBS torque:
	JOBARRAY="-t"
	JOBARRAY_ID="\$PBS_ARRAYID"
	AFTEROKARRAY="afterokarray"	
else # no paramaters present
	F_USAGE	
	exit 0
fi

##############################################################################################################################################
##########     Part 1: Set up file names for input directory and for output data dir and Trinity.pl command line          ####################
##############################################################################################################################################
	echo ""
	## Ensure JOBPREFIX is not greatr than 11 characters as PBS-pro can not handle > 15 characters for total job name length
	echo "submitting trinity jobs with prefix: "
	echo "		$JOBPREFIX"	

	###### Set input data directory - $DATADIR is CSIRO specific	
	echo "Input directory: "
	echo "		$DATADIRECTORY"

	###### Set output data directory (OUTPUTDIR)
	echo "Output directory: Scripts and output data will be written to:"
	echo "		$OUTPUTDIR" 
	mkdir -p "$OUTPUTDIR"
	cd "$OUTPUTDIR"

	
	### Modify STANDARD_JOB_DETAILS for analysis specific input to Trinity.pl 
	echo "The following trinity command line will be run:"
	echo "$STANDARD_JOB_DETAILS" 
	echo "" 
	if [[ "$1" = "--pbs" ]] ; then
		echo "		Use: \"pbs_check.pl -t PBS_JOBID\" "
		echo "		To view stdout and stderr from each separate job while they are running" 
	fi
###########################################################################################################################################################		
###		Do some checking that files exist etc. (User should not modify)  
###		This sets the $DS variable

SET_DS "$FILENAMEINPUT"

###########################################################################################################################################################	
#################################                                                                                       ###################################
#################################       Part 2: Create the shell scripts to be run via the PBS batch system             ###################################
#################################       Users should modify WALLTIME and MEM dependent upon dataset size                ###################################
#################################       and NCPU to appropriate value for compute node cpu resources                    ###################################
#################################       Check: "Trinity RNA-seq Assembler Performance Optimisation" (Henschel 2012)     ###################################
#################################       for current best practice.                                                      ###################################
#################################       N.B. On busy clusters it may be best not to try to request                      ###################################
#################################       a full nodes resources. i.e. If 8 cores per node are present,                   ###################################
#################################       only request half of these.                                                     ###################################
###########################################################################################################################################################

###########################################################################################################################################################
##############################  Script 1: Write script to run Inchworm                                         ############################################
#############################   MEM should equal JFMEM, which is the amount of memory requested for Jellyfish ############################################

JOBNAME1="$JOBPREFIX"_p1
NODESCPUS=$(F_GETNODESTRING "$PBSTYPE" "$MEM_P1" "$NCPU_P1" "$PBSNODETYPE_P1" "$WALLTIME_P1" "$JOBNAME1" "$ACCOUNT" "$PBSUSER" "$MODTRINITY" "$JOBPREFIX")

F_WRITESCRIPT "$0" ""$TRINITYPBSPATH"/trinity_pbs.p1"

#############################################################################################################################################################
##############################  Script 2: Chrysalis::GraphFromFasta                                             #############################################
##############################  This script has a dependency on part 1 completion without error.                #############################################
# It would be good to force an exit(0) before ReadsToTranscripts after checkpoint file /chrysalis/GraphFromIwormFasta.finished is 
# written (i.e. add --no_run_readstotrans to Trinity and pass through to Chrysalis) as the script 3  can be started directly after.
# This may be less of an issue with the new (fast) version of Trinity::GraphFromFasta (since version 2012-06-08).


JOBNAME2="$JOBPREFIX"_p2 
NODESCPUS=$(F_GETNODESTRING "$PBSTYPE" "$MEM_P2" "$NCPU_P2" "$PBSNODETYPE_P2" "$WALLTIME_P2" "$JOBNAME2" "$ACCOUNT" "$PBSUSER" "$MODTRINITY" "$JOBPREFIX")

F_WRITESCRIPT "$0" ""$TRINITYPBSPATH"/trinity_pbs.p2"

###########################################################################################################################################################
##############################  Script 3: Script to run Chrysalis::ReadsToTranscripts                                                   ###################
##############################  ReadsToTranscripts can be slow due to reads from disk,                                                  ###################
##############################  This script has a dependency on part 2 completion with error.                                            ###################
##############################  Section script is skipped if enough time was given in Part 2.                                           ###################


JOBNAME3="$JOBPREFIX"_p3 
NODESCPUS=$(F_GETNODESTRING "$PBSTYPE" "$MEM_P3" "$NCPU_P3" "$PBSNODETYPE_P3" "$WALLTIME_P3" "$JOBNAME3" "$ACCOUNT" "$PBSUSER" "$MODTRINITY" "$JOBPREFIX")

F_WRITESCRIPT "$0" ""$TRINITYPBSPATH"/trinity_pbs.p3"


##########################################################################################################################################################
############################## Script 4a: Write script to call the Chrysalis QuantifyGraph array job                                    ##################
############################## N.B. SLOTLIMIT="%x" indicates 'slot limit' i.e. the number of concurrent jobs to execute in an array     ##################
############################## (Not available in PBSpro )                                                                               ##################
#### NB Disabling emails for arrays

#SLOTLIMIT="%64"   # available for PBS Torque
JOBNAME4="$JOBPREFIX"_p4a
NODESCPUS=$(F_GETNODESTRING "$PBSTYPE" 1gb 1 "$PBSNODETYPE_P4" 00:30:00 "$JOBNAME4" "$ACCOUNT" "$PBSUSER" "$MODTRINITY" "$JOBPREFIX" )

F_WRITESCRIPT "$0" ""$TRINITYPBSPATH"/trinity_pbs.p4a"

###########################################################################################################################################################
##############################   Script Array part 4b: Write script to be run as an array Job . Runs Chrysalis::QuantifyGraph            ##################
##############################   This scipt has a dependency on part 4a being run. If an array component fails it will email user.       ##################
##############################   Files named quantifyGraph_commands_X are written with subset of total commands (X is the array ID from the PBS system)  ##


JOBNAME4B="$JOBPREFIX"_p4b
NODESCPUS=$(F_GETNODESTRING "$PBSTYPE" "$MEM_P4" "$NCPU_P4" "$PBSNODETYPE_P4" "$WALLTIME_P4" "$JOBNAME4B" "$ACCOUNT" " " "$MODTRINITY" "$JOBPREFIX")

F_WRITESCRIPT "$0" ""$TRINITYPBSPATH"/trinity_pbs.p4b"


###########################################################################################################################################################
##############################   Script Array 5b: Write script to run Butterfly Array Job                                                ##################
##############################   This script has a dependency on part 4a 4b being run.                                                   ##################
##############################   Files named butterfly_commands_X are written with subset of total commands (X is the array ID from the PBS system) ###

JOBNAME5B="$JOBPREFIX"_p5b
NODESCPUS=$(F_GETNODESTRING "$PBSTYPE" "$MEM_P5" "$NCPU_P5" "$PBSNODETYPE_P5" "$WALLTIME_P5" "$JOBNAME5B" "$ACCOUNT" " " "$MODTRINITY" "$JOBPREFIX")

F_WRITESCRIPT "$0" ""$TRINITYPBSPATH"/trinity_pbs.p5b"

############################################################################################################################################################
###############                                                                                                                          ###################
###############  Part 3:  Write main control script that executes scripts that were created above.                                       ###################
###############                                                                                                                          ###################
############################################################################################################################################################
F_WRITESCRIPT "$0" ""$TRINITYPBSPATH"/trinity_pbs.cont"

###############  Run the script written in Part 3
###############  Checks to see what is current stage of calculation and executes scripts created in above code                           ###################
bash ""$JOBPREFIX"_run.sh"

exit 0