PK'cBe455blacktie-latest/index.html Welcome to Blacktie’s documentation! — Blacktie 0.2.1.2 documentation

Project Versions

Table Of Contents

Next topic

Project Summary

This Page

PK'cBK}..blacktie-latest/searchindex.jsSearch.setIndex({objects:{"blacktie.utils.errors.MissingArgumentError":{"__init__":[2,2,1,""]},"blacktie.utils.calls.BaseCall":{purge_progress_bars:[2,2,1,""],execute:[2,2,1,""],set_call_id:[2,2,1,""],get_condition_id:[2,2,1,""],log_msg:[2,2,1,""],build_qsub:[2,2,1,""],notify_start_of_call:[2,2,1,""],init_opt_dict:[2,2,1,""],build_out_dir_path:[2,2,1,""],construct_options_list:[2,2,1,""],log_start:[2,2,1,""],init_log_file:[2,2,1,""],notify_end_of_call:[2,2,1,""],log_end:[2,2,1,""],"_flag_out_dir":[2,2,1,""],"__init__":[2,2,1,""]},"blacktie.utils.misc":{email_notification:[2,4,1,""],bunchify:[2,4,1,""],get_version_number:[2,4,1,""],map_condition_groups:[2,4,1,""],get_time:[2,4,1,""],whoami:[2,4,1,""],Bunch:[2,3,1,""]},"blacktie.utils.misc.Bunch":{"__init__":[2,2,1,""]},"blacktie.utils":{errors:[2,0,1,""],misc:[2,0,1,""],externals:[2,0,1,""],calls:[2,0,1,""]},"blacktie.utils.calls.CuffdiffCall":{get_cuffmerge_gtf:[2,2,1,""],get_out_dir:[2,2,1,""],get_mask_file:[2,2,1,""],get_genome:[2,2,1,""],get_sample_bams:[2,2,1,""],get_labels:[2,2,1,""],get_bam_path:[2,2,1,""],"__init__":[2,2,1,""]},"blacktie.utils.calls.CummerbundCall":{get_cuffmerge_gtf:[2,2,1,""],get_out_dir:[2,2,1,""],get_cuffdiff_dir:[2,2,1,""],"__init__":[2,2,1,""]},"blacktie.utils.calls.CuffmergeCall":{get_genome:[2,2,1,""],get_out_dir:[2,2,1,""],"__init__":[2,2,1,""],get_cufflinks_gtfs:[2,2,1,""],get_cuffGTF_path:[2,2,1,""],get_gtf_anno:[2,2,1,""]},"blacktie.utils.calls.CufflinksCall":{get_out_dir:[2,2,1,""],get_mask_file:[2,2,1,""],get_genome:[2,2,1,""],get_accepted_hits:[2,2,1,""],verify_options:[2,2,1,""],get_bam_path:[2,2,1,""],get_gtf_anno_guide:[2,2,1,""],"__init__":[2,2,1,""],get_gtf_anno:[2,2,1,""]},"blacktie.utils.calls.TophatCall":{get_out_dir:[2,2,1,""],get_lt_reads:[2,2,1,""],get_gtf_anno:[2,2,1,""],get_rt_reads:[2,2,1,""],"__init__":[2,2,1,""],get_bt_idx:[2,2,1,""]},"blacktie.utils.calls":{CuffdiffCall:[2,3,1,""],CufflinksCall:[2,3,1,""],CummerbundCall:[2,3,1,""],TophatCall:[2,3,1,""],CuffmergeCall:[2,3,1,""],BaseCall:[2,3,1,""]},"blacktie.utils.errors":{MissingArgumentError:[2,1,1,""],BlacktieError:[2,1,1,""],InvalidFileFormatError:[2,1,1,""],UnexpectedValueError:[2,1,1,""],SystemCallError:[2,1,1,""],SanityCheckError:[2,1,1,""]},"blacktie.utils.externals":{whereis:[2,4,1,""],runExternalApp:[2,4,1,""],mkdirp:[2,4,1,""]},"blacktie.utils.errors.SystemCallError":{"__init__":[2,2,1,""]}},terms:{all:[2,3,4],code:[0,1,2,4],partial:2,scratch:4,month:0,abil:4,follow:[3,4],specif:2,depend:0,sorri:4,base64:4,readabl:4,get_out_dir:2,send:[0,2,3,4],articl:0,program:[0,2,3,4],swoop:4,under:[2,4],exit:[2,3,4],cummerbund_opt:[2,4],sent:[3,4],everyth:4,sourc:2,everi:4,string:[2,4],augustin:0,fals:[2,3,4],get_sample_bam:2,account:4,util:2,yourdict:2,condit:[2,3,4],veri:3,verify_opt:2,strang:4,seemingli:4,valuabl:0,did:[0,2],virtual_python:[],list:[2,4],"try":[3,4],login_info:4,adjust:2,get_bt_idx:2,email_li:2,mutipl:[],dir:[2,4],core_rang:4,pleas:0,upper:4,log_start:2,speci:4,build_out_dir_path:2,everytim:4,biolog:4,callobject:2,download:[1,3],further:4,replicate_id:[2,4],port:[2,4],index:[0,1,4],what:[0,4],hide:[1,3,4],addr:2,get_genom:2,sun:4,abl:0,access:[2,4],version:[0,1,2,3,4],"new":[0,2,3,4],ever:4,method:2,full:0,condition_queu:[2,4],gener:[0,1,2,3,4],never:4,here:[0,3,4],bodi:2,let:4,get_cuffdiff_dir:2,address:[2,4],path:[2,3,4],becom:4,sinc:4,valu:[2,4],convert:2,right_read:[2,4],sender:[2,4],prognam:2,opt_dict:2,genome_seq:4,server_info:2,host:[2,4],queue:4,credit:0,purge_progress_bar:2,chang:2,gene:0,modul:[1,3,4],foundat:2,ask:4,volv:2,uniqu:4,init_log_fil:2,txt:[2,3,4],sge:[0,3,4],base64_encod:4,plot:0,get_mask_fil:2,from:[0,1,2,3,4],zip:3,commun:2,visit:0,get_lt_read:2,coverag:4,next:4,few:0,call:[0,1,2,4],msg:2,to_you:4,stage:4,type:[0,2,3,4],tell:4,more:[0,3,4],get_label:2,qualiti:0,share:4,relat:4,wadunn83:0,site:[],warn:4,stderr_str:2,flag:[2,4],train:0,templat:4,pprocess:3,obj:2,starter:4,must:[3,4],bowtie_indexes_dir:4,none:[2,4],hour:0,xguse:[0,3],notify_start_of_cal:2,quartil:4,setup:[2,3,4],work:[0,1,2,3,4],annot:4,dev:4,itself:[],can:[0,2,4],learn:3,control:0,malform:2,tar:4,give:4,process:[0,4],sudo:3,smtp:4,accept:2,zcvf:4,unzip:3,want:[0,1,3,4],cummerbundcal:2,occur:2,missingargumenterror:2,differenti:0,end:2,goal:0,turn:2,rather:4,comfort:0,write:[0,2,4],how:[3,4],actual:4,scrambl:4,get_bam_path:2,config:[2,3,4],updat:[0,4],get_tim:2,alwai:4,pypi:[1,3],clone:3,after:[3,4],lab:0,befor:4,cuffdiff_opt:[2,4],date:4,multipl:[0,3,4],show_titl:0,associ:2,bowtie2:4,github:[0,3],attempt:2,practic:4,get_rt_read:2,explicit:4,issu:[0,1],inform:2,combin:4,allow:[0,2],enter:4,order:4,get_accepted_hit:2,config_fil:[3,4],help:[3,4],over:4,move:4,accepted_hit:[2,4],unexpectedvalueerror:2,bunchifi:2,through:[0,2,3,4],left:4,still:4,dynam:2,paramet:2,streamlin:0,style:2,exp2_control:4,group:[0,2,4],monitor:2,gtf:[2,4],yaml_config:2,queue1:4,queue3:4,cufflinks_opt:[2,4],better:[],yaml:[2,3,4],complex:[0,4],get_cuffgtf_path:2,mail:[1,4],hidden:[3,4],might:[0,4],alter:4,them:[0,2,4],good:4,"return":2,thei:[0,4],handl:2,auto:[1,2],dai:0,initi:2,gtf_annot:4,email_to:2,construct_options_list:2,instead:[],now:[2,4],choic:2,eventu:4,name:[2,4],edit:0,simpl:0,doabl:0,authent:4,easili:0,mode:[1,2,3,4],truth:4,each:[0,4],found:4,mean:4,frag:[2,4],out_dir:[2,4],intellig:0,replac:4,individu:4,idea:4,expect:4,wherei:2,happen:2,ommit:[2,4],todo:[2,4],special:4,out:[0,2,3,4],get_cuffmerge_gtf:2,cuffmerg:[2,3,4],foolproof:4,open:[2,3,4],publish:0,content:1,mate:4,suitabl:[3,4],print:[3,4],merg:4,ref:[2,4],correct:[2,4],dunn:0,insid:4,workflow:4,nightmar:0,differ:[0,4],standard:[3,4],base:[0,2,3,4],usabl:4,dictionari:[2,4],put:[2,4],org:0,bash:[3,4],pyyaml:3,yarg:2,keep:[0,3,4],thing:4,perhap:4,place:4,errno:2,summari:[0,1],support:2,frequent:4,first:4,origin:[],softwar:0,directli:4,onc:[0,4],custom_smtp:4,misc:[1,2],number:[3,4],system:[2,3,4],mai:4,instruct:0,alreadi:[0,4],done:[2,4],messag:[0,3,4],blank:4,miss:2,given:2,"long":4,script:[0,2,3,4],data:[0,2,4],mkdir:4,sometim:0,construct:2,input_fil:4,master:3,termin:[3,4],conveni:2,cite:0,store:[2,4],shell:4,option:[1,2,3,4],especi:0,tool:[3,4],copi:4,task:0,part:4,pars:2,consult:4,rst:[],exactli:4,grace:2,std:4,wide:4,silli:4,provid:[0,2,3,4],remov:[2,4],bea:4,tree:2,exampl:4,project:[0,1,4],experiment_id:[2,4],were:[2,4],posit:[3,4],tophat:[0,1,2,3,4],seri:4,"function":[0,2,3],comput:[0,3,4],positional_arg:[2,4],fastq:[0,4],ani:[2,3,4],packag:[0,1,2,3],qsub_script:[2,3,4],have:[0,3,4],close:2,need:[0,2,4],dedic:0,tidi:[3,4],engin:4,built:0,lib:[],self:2,runexternalapp:2,note:[3,4],also:4,without:[1,3],samtool:4,take:[0,4],which:[3,4],poster:[0,1],bowtie2_index:[2,4],gmail:[0,2,4],singl:[0,2,4],simplifi:0,pipelin:[0,2,3,4],sure:[2,4],unless:4,though:4,track:[0,1],object:2,most:4,plan:4,phase:2,transcript:0,"class":[0,2],sub:2,exp1_treat:4,doi:0,excut:2,doc:[],later:0,request:0,doe:[0,2,4],dummi:4,usual:4,dot:2,recipi:[2,4],show:[3,4],cufflink:[0,1,2,3,4],text:[2,3,4],random:2,cufflinkscal:2,subprocess:2,bring:0,session:[3,4],qsub:[0,2,3,4],label:[2,4],fine:4,find:0,transcripts_gtf:[2,4],slot:4,current:[2,4],submit:[0,4],locat:[],basedirectori:4,explain:4,configur:[1,4],activ:[2,4],figur:4,"short":4,experiment:4,dict:2,analyz:[0,2,3,4],wget:3,analys:4,get:[0,1,4],familiar:4,express:0,watch:4,autom:0,repo:3,progress:2,requir:[0,1,2,3],bar:2,figshar:0,organ:[0,3,4],emb:0,build_qsub:2,unmet:3,"default":[2,3,4],stuff:4,common:2,contain:[2,3,4],where:[2,4],whoami:2,wrote:0,view:4,unexpectedli:2,set:[0,2,3,4],aspect:2,seq:[0,1,4],see:[0,1,3,4],result:[2,4],arg:2,fail:[0,2],reserv:4,dunnw:4,subject:2,parent:2,set_call_id:2,pattern:0,someth:[3,4],exp2_treat:4,call_id:[2,4],state:2,between:0,"import":[2,4],experi:[0,4],email:[0,2,3,4],attribut:2,str:2,kei:[2,4],cmd_str:4,get_gtf_anno_guid:2,job:[2,4],cuffdiffcal:2,toler:4,from_condit:[2,4],come:[0,2],popul:2,both:2,howev:[3,4],etc:2,tutori:[1,4],pdf:4,log_end:2,com:[0,3,4],ld_library_path:4,load:4,fester:0,simpli:4,kwd:2,run_id:[2,4],queue5:4,email_info:[2,4],walk:[0,3,4],written:4,openmp:4,respect:4,guid:[2,4],assembly_list:[2,4],creat:[0,2,4],nonsens:2,due:2,been:[2,4],much:4,basic:[0,4],"0rc1":[],addit:2,invalidfileformaterror:2,datahom:4,condition_dict:2,worker:4,search:[1,4],argument:[2,3,4],coordin:0,understand:0,togeth:2,func:2,input:[0,4],"case":2,replic:4,multi:[0,4],ident:4,look:[3,4],plain:4,aim:0,defin:2,"while":[2,4],error:[1,2,4],get_gtf_anno:2,bowti:4,email_from:2,errmsg:2,pack:4,path_to_setup:2,bin:4,coher:0,log_msg:2,almost:0,tabl:1,henc:4,non:2,worri:4,cuffmerge_opt:[2,4],cluster:[0,3,4],archiv:3,blacktieerror:2,sample_bam:[2,4],"__init__":2,mako:[3,4],develop:4,welcom:1,dry_run:[2,3,4],make:[0,2,3,4],same:4,instal:[0,1,3,4],python:[0,3],html:[],output_dir:4,email_addi:4,document:[1,2,4],start:[1,2,4],conflict:2,week:0,unstrand:4,ifram:0,finish:4,http:[0,3],get_cufflinks_gtf:2,someon:[0,4],nix:4,rais:2,sooner:0,mani:[0,4],extern:[1,2],run_opt:4,typic:4,traine:0,travers:2,map_condition_group:2,off:2,equival:2,entri:[],well:4,contact:0,command:[0,2,3,4],thi:[0,2,3,4],model:0,anybodi:0,latest:[1,3],comment:4,systemcallerror:2,just:4,strerror:2,obtain:[1,3],indic:1,collabor:[0,1],human:4,yet:0,taken:4,password:[2,4],get_version_numb:2,point:4,except:2,param:2,framebord:0,add:[2,4],treatment:4,els:0,save:2,exp1_control:4,match:4,build:[0,2],real:4,qsub_opt:[2,4],cuffmergecal:2,around:4,format:[2,3,4],read:[0,3,4],rna:[0,1,4],bia:[2,4],test:[1,3,4],grid:4,know:[3,4],shadow:4,height:0,python2:[],like:[2,3,4],success:[3,4],filenam:2,should:[2,3,4],arbitrari:[],manual:4,server:[0,2,4],remind:4,notify_end_of_cal:2,bunch:2,tophat_aa0:2,mkdirp:2,manag:2,yyyi:2,node:4,right:4,deal:4,some:[0,1,2],back:[0,2,4],sampl:4,mistak:4,proper:2,home:4,successfulli:4,librari:[0,4],password_fil:4,uniq:4,lead:4,avoid:4,preliminari:0,whole:[2,4],leav:[0,4],prog:[1,3,4],myscratch:4,three:4,reproduc:0,left_read:[2,4],core:4,run_log:2,run:[0,2,3,4],cuffdiff:[2,3,4],genom:4,usag:[3,4],facilit:2,interfac:0,step:[0,3,4],great:[3,4],repositori:[1,3],output:[0,2,4],pswrd:4,notif:[1,2,3,4],don:[3,4],simpler:[0,1],continu:0,src:0,about:[0,4],central:4,would:[3,4],memori:4,page:1,act:4,base_dir:4,norm:4,produc:4,own:0,basenam:4,encod:[2,4],automat:0,two:4,basecal:2,empti:2,from_m:4,detail:[0,4],log_fil:2,soon:[],your:[0,2,3,4],leverag:0,git:[1,3],log:[1,2,3,4],wai:[0,1,4],pictur:0,bioinformat:0,execut:[2,3,4],overwrit:4,custom:[0,2,4],avail:0,width:0,email_notif:2,includ:[0,1,2,4],suit:4,submiss:4,overhang:4,argstr:2,analysi:[0,3,4],properli:3,get_condition_id:2,tophatcal:2,virt_python:[],techrep2:4,techrep1:4,multiprocessor:4,link:0,renam:2,line:[0,2,3,4],"true":4,bug:0,info:[2,4],notat:2,made:[0,4],cummerbund:[0,1,2,3],possibl:[2,4],whether:[1,3,4],until:4,record:[0,2],below:4,job_nam:4,otherwis:2,problem:2,featur:[0,1],dict_tre:2,"int":2,certain:4,init_opt_dict:2,meaningless:4,repres:[2,4],tophat_opt:[2,4],exist:[2,4],file:[0,1,2,3,4],our:4,pip:[1,3],improv:0,check:[0,2,4],echo:4,coder:0,beyond:4,personnel:0,user:[0,2,4],homepag:0,when:[0,2,4],discoveri:0,prepend:2,other:2,futur:[],peopl:4,hpc:4,you:[0,1,3,4],poor:4,variabl:[2,4],repeat:0,consit:2,fulli:0,sequenc:[2,4],why:0,introduc:[0,1],docstr:2,fell:4,rpy2:3,dropbox:[],blackti:[0,1,2,3,4],"_flag_out_dir":2,directori:[2,3,4],reliabl:0,space:4,mask:2,visual:[],ignor:4,py274:[],blacktie_config_exampl:4,time:[0,2,4],far:0,backward:4,sanitycheckerror:2,cpu:4},objtypes:{"0":"py:module","1":"py:exception","2":"py:method","3":"py:class","4":"py:function"},titles:["Project Summary","Welcome to Blacktie’s documentation!","Blacktie Auto-Generated Code Documentation","Installation","Getting started"],objnames:{"0":["py","module","Python module"],"1":["py","exception","Python exception"],"2":["py","method","Python method"],"3":["py","class","Python class"],"4":["py","function","Python function"]},filenames:["project","index","code","install","tutorial"]})PK'cBij**blacktie-latest/code.html Blacktie Auto-Generated Code Documentation — Blacktie 0.2.1.2 documentation

Blacktie Auto-Generated Code Documentation

Todo

DONE Convert docstring style from (given,does,returns) to (:param a: format)

calls.py

Code defining classes to represent and excute pipeline program calls.

class blacktie.utils.calls.BaseCall(yargs, email_info, run_id, run_logs, conditions, mode='analyze')[source]

Defines common methods for all program call types.

__init__(yargs, email_info, run_id, run_logs, conditions, mode='analyze')[source]

initializes a BaseCall object

Parameters:
  • yargs – argument tree generated by parsing the yaml config file
  • email_info – Bunch() object containing keys: email_from, email_to, email_li
  • run_id – id for the whole set of calls
  • run_logs – the directory where log file should be put
  • conditions – one or a list of condition-dictionaries from yargs.condition_queue
  • mode – choices = [‘analyze’,’dry_run’,’qsub_script’]
Returns:

an initialized BaseCall object

_flag_out_dir()[source]

renames out directory, prepending ‘FAILED’ flag: equivalent of mv tophat_Aa0 FAILED.tophat_Aa0

build_out_dir_path()[source]

builds correct out_dir path based on state of self

Returns:out_dir
build_qsub()[source]

Builds and writes this CallObject’s qsub script to current working directory using options provided under the “qsub_options” sub-tree in the yaml config file.

construct_options_list()[source]

converts opt_dict into list encoding proper options to send to the current program: saves to self.

execute()[source]

calls correct program, records results, and manages errors

get_condition_id(condition_dict)[source]

Constructs condition ID :param condition_dict: a dictionary containing consition info like name, replicate_id, etc. :returns: an ID used to construct the call_id of a call.

init_log_file()[source]

creates empty log file for this call and stores its path in self.log_file

init_opt_dict()[source]

builds a dict with non-job-specific values set and job-specific values set to False based on option names in the yaml file for this phase

Returns:partially populated opt_dict
log_end()[source]

records command string used, program output, and the end of call in self.log_file

log_msg(log_msg='')[source]
  • opens self.log_file
  • writes log_msg
  • closes self.log_file
log_start()[source]

records start of call in self.log_file

notify_end_of_call()[source]

sends notification email informing user that self.call_id has exited

notify_start_of_call()[source]

sends notification email informing user that self.call_id has been initiated

purge_progress_bars(stderr_str)[source]

removes the dynamic progress bars included in some output in case user did not turn them off

set_call_id()[source]

builds and stores this call’s call ID in self.call_id

class blacktie.utils.calls.CuffdiffCall(yargs, email_info, run_id, run_logs, conditions, mode)[source]

Manage a single call to cuffdiff and store associated run data.

__init__(yargs, email_info, run_id, run_logs, conditions, mode)[source]

initializes the CuffdiffCall object

Parameters:
  • yargs – argument tree generated by parsing the yaml config file
  • email_info – Bunch() object containing keys: email_from, email_to, email_li
  • run_id – id for the whole set of calls
  • run_logs – the directory where log file should be put
  • conditions – one or a list of condition-dictionaries from yargs.condition_queue
  • mode – choices = [‘analyze’,’dry_run’,’qsub_script’]
Returns:

an initialized CuffdiffCall object

get_bam_path(condition)[source]

Supports self.get_sample_bams().

get_cuffmerge_gtf()[source]

Handles yaml_config.cuffdiff_options.positional_args.transcripts_gtf: from_conditions.

get_genome()[source]

Handles yaml_config.cuffdiff_options.frag-bias-correct: from_conditions.

get_labels()[source]

Handles yaml_config.cuffdiff_options.labels: from_conditions.

get_mask_file()[source]

Handles yaml_config.cuffdiff_options.mask-file: from_conditions.

get_out_dir()[source]

Handles yaml_config.cuffdiff_options.o: from_conditions.

get_sample_bams()[source]

Handles yaml_config.cuffdiff_options.positional_args.sample_bams: from_conditions.

class blacktie.utils.calls.CufflinksCall(yargs, email_info, run_id, run_logs, conditions, mode)[source]

Manage a single call to cufflinks and store associated run data.

__init__(yargs, email_info, run_id, run_logs, conditions, mode)[source]

initializes the CufflinksCall object

Parameters:
  • yargs – argument tree generated by parsing the yaml config file
  • email_info – Bunch() object containing keys: email_from, email_to, email_li
  • run_id – id for the whole set of calls
  • run_logs – the directory where log file should be put
  • conditions – one or a list of condition-dictionaries from yargs.condition_queue
  • mode – choices = [‘analyze’,’dry_run’,’qsub_script’]
Returns:

an initialized CufflinksCall object

Todo

DONE add support for –GTF in addition to currently supported –GTF-guide

get_accepted_hits()[source]

Handles yaml_config.cufflinks_options.positional_args.accepted_hits: from_conditions.

get_bam_path()[source]

Supports self.get_accepted_hits().

get_genome()[source]

Handles yaml_config.cufflinks_options.frag-bias-correct: from_conditions.

get_gtf_anno()[source]

Handles yaml_config.cufflinks_options.GTF: from_conditions.

get_gtf_anno_guide()[source]

Handles yaml_config.cufflinks_options.GTF-guide: from_conditions.

get_mask_file()[source]

Handles yaml_config.cufflinks_options.mask-file: from_conditions.

get_out_dir()[source]

Handles yaml_config.cufflinks_options.o: from_conditions.

verify_options()[source]

Makes sure that conflicting options were not imported from yaml config file.

Todo

DONE GTF and GTF-guide should not be used together but both can be ommited

class blacktie.utils.calls.CuffmergeCall(yargs, email_info, run_id, run_logs, conditions, mode)[source]

Manage a single call to cuffmerge and store associated run data.

__init__(yargs, email_info, run_id, run_logs, conditions, mode)[source]

initializes the CuffmergeCall object

Parameters:
  • yargs – argument tree generated by parsing the yaml config file
  • email_info – Bunch() object containing keys: email_from, email_to, email_li
  • run_id – id for the whole set of calls
  • run_logs – the directory where log file should be put
  • conditions – one or a list of condition-dictionaries from yargs.condition_queue
  • mode – choices = [‘analyze’,’dry_run’,’qsub_script’]
Returns:

an initialized CuffmergeCall object

get_cuffGTF_path(condition)[source]

Supports self.get_cufflinks_gtfs().

Handles yaml_config.cuffmerge_options.positional_args.assembly_list: from_conditions.

get_genome()[source]

Handles yaml_config.cuffmerge_options.ref-sequence: from_conditions.

get_gtf_anno()[source]

Handles yaml_config.cuffmerge_options.ref-gtf: from_conditions.

get_out_dir()[source]

Handles yaml_config.cuffmerge_options.o: from_conditions.

class blacktie.utils.calls.CummerbundCall(yargs, email_info, run_id, run_logs, conditions, mode)[source]

Manage a single call to blacktie-cummerbund script and store associated run data.

__init__(yargs, email_info, run_id, run_logs, conditions, mode)[source]

initializes the CummerbundCall object

Parameters:
  • yargs – argument tree generated by parsing the yaml config file
  • email_info – Bunch() object containing keys: email_from, email_to, email_li
  • run_id – id for the whole set of calls
  • run_logs – the directory where log file should be put
  • conditions – one or a list of condition-dictionaries from yargs.condition_queue
  • mode – choices = [‘analyze’,’dry_run’,’qsub_script’]
Returns:

an initialized CummerbundCall object

get_cuffdiff_dir()[source]

Handles yaml_config.cummerbund_options.cuffdiff-dir: from_conditions.

get_cuffmerge_gtf()[source]

Handles yaml_config.cummerbund_options.gtf-path: from_conditions.

get_out_dir()[source]

Handles yaml_config.cummerbund_options.out: from_conditions.

class blacktie.utils.calls.TophatCall(yargs, email_info, run_id, run_logs, conditions, mode)[source]

Manage a single call to tophat and store associated run data.

__init__(yargs, email_info, run_id, run_logs, conditions, mode)[source]

initializes the TophatCall object

Parameters:
  • yargs – argument tree generated by parsing the yaml config file
  • email_info – Bunch() object containing keys: email_from, email_to, email_li
  • run_id – id for the whole set of calls
  • run_logs – the directory where log file should be put
  • conditions – one or a list of condition-dictionaries from yargs.condition_queue
  • mode – choices = [‘analyze’,’dry_run’,’qsub_script’]
Returns:

an initialized TophatCall object

get_bt_idx()[source]

Handles yaml_config.tophat_options.positional_args.bowtie2_index: from_conditions.

get_gtf_anno()[source]

Handles yaml_config.tophat_options.G: from_conditions.

get_lt_reads()[source]

Handles yaml_config.tophat_options.positional_args.left_reads: from_conditions.

get_out_dir()[source]

Handles yaml_config.tophat_options.o: from_conditions.

get_rt_reads()[source]

Handles yaml_config.tophat_options.positional_args.right_reads: from_conditions.

errors.py

Code defining custom base error classes to provide a foundation for graceful error handling.

exception blacktie.utils.errors.BlacktieError[source]

Base class for exceptions in the blacktie package.

exception blacktie.utils.errors.InvalidFileFormatError[source]

When errors occur due to malformed file formats.

exception blacktie.utils.errors.MissingArgumentError(errMsg)[source]

When a required argument is missing from the parsed command line options.

__init__(errMsg)[source]
exception blacktie.utils.errors.SanityCheckError[source]

When a ‘state check’ comes back as conflicting or nonsensical.

exception blacktie.utils.errors.SystemCallError(errno, strerror, filename=None)[source]

Error raised when a problem occurs while attempting to run an external system call.

Attributes:
errno – return code from system call
filename – file in volved if any
strerror – error msg
__init__(errno, strerror, filename=None)[source]
exception blacktie.utils.errors.UnexpectedValueError[source]

When values that “should” not be possible happen; like if a variable was changed unexpectedly.

externals.py

Code facilitating the execution of external system calls.

blacktie.utils.externals.mkdirp(path)[source]

Create new dir while creating any parent dirs in the path as needed.

blacktie.utils.externals.runExternalApp(progName, argStr)[source]

Convenience func to handle calling and monitoring output of external programs.

Parameters:
  • progName – name of system program command
  • argStr – string containing command line options for progName
Returns:

subprocess.communicate object

blacktie.utils.externals.whereis(program)[source]

returns path of program if it exists in your $PATH variable or None otherwise

misc.py

Code facilitating random aspects of this package.

class blacktie.utils.misc.Bunch(*args, **kwds)[source]

A dict like class to facilitate setting and access to tree-like data. Allows access to dictionary keys through ‘dot’ notation: “yourDict.key = value”.

__init__(*args, **kwds)[source]
blacktie.utils.misc.bunchify(dict_tree)[source]

Traverses a dictionary tree and converts all sub-dictionaries to Bunch() objects.

blacktie.utils.misc.email_notification(sender, to, subject, txt, pw, server_info)[source]

Sends email to recipient using GMAIL server by default but will now accept server_info to customize this.

Parameters:
  • sender – email address of sender
  • to – email addres of recipient
  • subject – subject text
  • txt – body text
  • pw – password of sender
  • server_info – dictionary = {‘host’:str,’port’:int}
Returns:

None

Todo

DONE make email_notification() adjustable for other email servers

blacktie.utils.misc.get_time()[source]

Return system time formatted as ‘YYYY:MM:DD-hh:mm:ss’.

blacktie.utils.misc.get_version_number(path_to_setup)[source]

Provides access to current version info contained in setup.py

blacktie.utils.misc.map_condition_groups(yargs)[source]

creates a Bunch obj groups with key=’experiment_id’ from yargs, value=list(condition_queue objects with ‘experiment_id’)

Parameters:yargs – argument object generated from the yaml config file
Returns:groups
blacktie.utils.misc.whoami()[source]

Returns the name of the currently active function.

Project Versions

Table Of Contents

Previous topic

Getting started

This Page

PK'cBeohG>G>blacktie-latest/project.html Project Summary — Blacktie 0.2.1.2 documentation

Project Summary

I want to collaborate with you!

Contact me at wadunn83@gmail.com if you are a Python coder and want to or already have made improvements on this code.

Getting the code

The code is available from the Python Package Index or from its homepage: https://github.com/xguse/blacktie

Visit Installation for more detailed instructions on getting and building the package.

Issue tracking

If you find issues, bugs, or have feature requests, please go here to submit them: https://github.com/xguse/blacktie/issues

Blacktie Poster

To credit the use of blacktie please cite the poster using the DOI link provided.

Introducing Blacktie: a simpler way to do RNA-seq using Tophat/Cufflinks/CummeRbund. Augustine Dunn. figshare. http://dx.doi.org/10.6084/m9.figshare.714149
PK'cBZ5[5[blacktie-latest/genindex.html Index — Blacktie 0.2.1.2 documentation

Index

_ | B | C | E | G | I | L | M | N | P | R | S | T | U | V | W

_

__init__() (blacktie.utils.calls.BaseCall method)
(blacktie.utils.calls.CuffdiffCall method)
(blacktie.utils.calls.CufflinksCall method)
(blacktie.utils.calls.CuffmergeCall method)
(blacktie.utils.calls.CummerbundCall method)
(blacktie.utils.calls.TophatCall method)
(blacktie.utils.errors.MissingArgumentError method)
(blacktie.utils.errors.SystemCallError method)
(blacktie.utils.misc.Bunch method)
_flag_out_dir() (blacktie.utils.calls.BaseCall method)

B

BaseCall (class in blacktie.utils.calls)
blacktie.utils.calls (module)
blacktie.utils.errors (module)
blacktie.utils.externals (module)
blacktie.utils.misc (module)
BlacktieError
build_out_dir_path() (blacktie.utils.calls.BaseCall method)
build_qsub() (blacktie.utils.calls.BaseCall method)
Bunch (class in blacktie.utils.misc)
bunchify() (in module blacktie.utils.misc)

C

construct_options_list() (blacktie.utils.calls.BaseCall method)
CuffdiffCall (class in blacktie.utils.calls)
CufflinksCall (class in blacktie.utils.calls)
CuffmergeCall (class in blacktie.utils.calls)
CummerbundCall (class in blacktie.utils.calls)

E

email_notification() (in module blacktie.utils.misc)
execute() (blacktie.utils.calls.BaseCall method)

G

get_accepted_hits() (blacktie.utils.calls.CufflinksCall method)
get_bam_path() (blacktie.utils.calls.CuffdiffCall method)
(blacktie.utils.calls.CufflinksCall method)
get_bt_idx() (blacktie.utils.calls.TophatCall method)
get_condition_id() (blacktie.utils.calls.BaseCall method)
get_cuffdiff_dir() (blacktie.utils.calls.CummerbundCall method)
get_cuffGTF_path() (blacktie.utils.calls.CuffmergeCall method)
get_cufflinks_gtfs() (blacktie.utils.calls.CuffmergeCall method)
get_cuffmerge_gtf() (blacktie.utils.calls.CuffdiffCall method)
(blacktie.utils.calls.CummerbundCall method)
get_genome() (blacktie.utils.calls.CuffdiffCall method)
(blacktie.utils.calls.CufflinksCall method)
(blacktie.utils.calls.CuffmergeCall method)
get_gtf_anno() (blacktie.utils.calls.CufflinksCall method)
(blacktie.utils.calls.CuffmergeCall method)
(blacktie.utils.calls.TophatCall method)
get_gtf_anno_guide() (blacktie.utils.calls.CufflinksCall method)
get_labels() (blacktie.utils.calls.CuffdiffCall method)
get_lt_reads() (blacktie.utils.calls.TophatCall method)
get_mask_file() (blacktie.utils.calls.CuffdiffCall method)
(blacktie.utils.calls.CufflinksCall method)
get_out_dir() (blacktie.utils.calls.CuffdiffCall method)
(blacktie.utils.calls.CufflinksCall method)
(blacktie.utils.calls.CuffmergeCall method)
(blacktie.utils.calls.CummerbundCall method)
(blacktie.utils.calls.TophatCall method)
get_rt_reads() (blacktie.utils.calls.TophatCall method)
get_sample_bams() (blacktie.utils.calls.CuffdiffCall method)
get_time() (in module blacktie.utils.misc)
get_version_number() (in module blacktie.utils.misc)

I

init_log_file() (blacktie.utils.calls.BaseCall method)
init_opt_dict() (blacktie.utils.calls.BaseCall method)
InvalidFileFormatError

L

log_end() (blacktie.utils.calls.BaseCall method)
log_msg() (blacktie.utils.calls.BaseCall method)
log_start() (blacktie.utils.calls.BaseCall method)

M

map_condition_groups() (in module blacktie.utils.misc)
MissingArgumentError
mkdirp() (in module blacktie.utils.externals)

N

notify_end_of_call() (blacktie.utils.calls.BaseCall method)
notify_start_of_call() (blacktie.utils.calls.BaseCall method)

P

purge_progress_bars() (blacktie.utils.calls.BaseCall method)

R

runExternalApp() (in module blacktie.utils.externals)

S

SanityCheckError
set_call_id() (blacktie.utils.calls.BaseCall method)
SystemCallError

T

TophatCall (class in blacktie.utils.calls)

U

UnexpectedValueError

V

verify_options() (blacktie.utils.calls.CufflinksCall method)

W

whereis() (in module blacktie.utils.externals)
whoami() (in module blacktie.utils.misc)

Project Versions

This Page

PK'cBYpƶ##blacktie-latest/search.html Search — Blacktie 0.2.1.2 documentation

Search

Please activate JavaScript to enable the search functionality.

From here you can search these documents. Enter your search words into the box below and click "search". Note that the search function will automatically search for all of the words. Pages containing fewer words won't appear in the result list.

Project Versions

This Page

PK'cB kblacktie-latest/.buildinfo# Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. config: 182b9f75e80a7fb6dcbddcf5d56be0f2 tags: fbb0d17656682115ca4d033fb2f83ba1 PK'cBk 2blacktie-latest/objects.inv# Sphinx inventory version 2 # Project: Blacktie # Version: 0.2.1.2 # The remainder of this file is compressed using zlib. xڭXn0+W 5HH+A+0*%e!; ̥o6MݙᮕBsXW;I6 5P^oՋABn:П,ڍN+SP4u;঑:x!]ͨ.Nm7Q1an;^-NW"=XM*~R'!XEcOhf0xatu{0qhˠ&hkB~{/y3COс'o HO,Pram:HHi1Թ>P7.ĴMXdO bC4HpNvAzq5.lQX򜐸h=A's!/x_&iNTQb9&=Z{K:L sb8V5TPq`4IDBW8 @`vs!JIta ,x( jcbexnFoΈYe]Nz᳷QDEI)&_ȶTĈxX94@Q!辂1:SَoIPn E"35F8J60贿 +n=_!-zcjU~ LyjA;l+z8*IuTtdzRboOhQfKUɱS]\.٠M<(U&qܽBcUVJ[NJKG !!<5R.:,FD]lq'u8r):B5ap-UUS?̟Ȓa)l5fWrPK'cBmblacktie-latest/tutorial.html Getting started — Blacktie 0.2.1.2 documentation

Getting started

Note

Make sure that you have successfully installed the blacktie module before trying the activities below.

To test whether your installation was successful, open a new terminal session and type the following command.

$ blacktie

You should see the help text for blacktie and it should look something like this:

$ blacktie

usage: blacktie [-h] [--version]
    [--prog {tophat,cufflinks,cuffmerge,cuffdiff,all}]
    [--hide-logs] [--no-email]
    [--mode {analyze,dry_run,qsub_script}]
    config_file

This script reads options from a yaml formatted file and organizes the
execution of tophat/cufflinks runs for multiple condition sets.

positional arguments:
    config_file           Path to a yaml formatted config file containing setup
        options for the runs.

optional arguments:
    -h, --help            show this help message and exit
    --version             Print version number.
    --prog {tophat,cufflinks,cuffmerge,cuffdiff,all}
        Which program do you want to run? (default: tophat)
    --hide-logs           Make your log directories hidden to keep a tidy
        'looking' base directory. (default: False)
    --no-email            Don't send email notifications. (default: False)
    --mode {analyze,dry_run,qsub_script}
        1) 'analyze': run the analysis pipeline. 2) 'dry_run':
        walk through all steps that would be run and print out
        the command lines; however, do not send the commands
        to the system to be run. 3) 'qsub_script': generate
        bash scripts suitable to be sent to a compute
        cluster's SGE through the qsub command. (default:
        analyze)

If this worked, great! Let’s move on to what all that means.

The –prog option

This tells blacktie which part of the pipeline you would like to run. Any part can be run individually as long as the correct files exist. You can also run the whole thing from tophat to cuffdiff in one fell swoop if you like!

The –hide-logs option

This names your log files so that they are hidden in “*nix” systems.

The –modes option

blacktie can run in three modes. The first, analyze, actually runs the pipeline and does the analyses. However, it can be useful to simply view what WOULD be done to make sure that `blacktie is producing command line calls that match what you expected. For this, use the dry_run mode.

Further, if you are working on a compute cluster running something like a “Sun Grid Engine” (SGE) to which you must submit jobs using qsub, it may not be a good idea to submit a job running all of blacktie as a single qsub job. For this it can be helpful to have blacktie write all of your qsub scripts for you based on a template. Each bash script represents a single program call to the tophat/cufflinks suite.

Note

A starter template for SGE submission can be found here: blacktie/examples/qsub.template. You will want to become familiar with how Mako processes templates if you plan to customize this much.

Here is what the starter template looks like:

 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
#!/bin/bash
#$ -S /bin/bash                                             # Use a real BASH shell on the worker node
#$ -q ${queues}                                             # What queues do you want to submit to
#$ -M ${email_addy}                                         # Send email updates to this address
#$ -m beas                                                  # When to send an email update
#$ -e /data/users/dunnw/logs/${call_id}.e                   # Write standard error to this file
#$ -o /data/users/dunnw/logs/${call_id}.o                   # Write standard out to this file
#$ -N ${job_name}                                           # Name my job this
#$ -R y                                                     # Reserve cores for me until there are the number I asked for
#$ -pe openmp ${core_range}                                 # Use openmp for multiprocessor use and give me core_range cores

LD_LIBRARY_PATH="${ld_library_path}$${}{LD_LIBRARY_PATH}"   # Make sure worker's LD_LIBRARY_PATH contains ld_library_path


# HPC clusters frequently use a module system to provide system wide access to 
# certain programs.  The following makes sure that the tools needed are loaded
# for **MY** cluster. You will need alter this to make sure your cluster is set up
# based on its system.

module load bowtie2/2.0.2
module load tophat/2.0.6
module load cufflinks/2.0.2
module load samtools/0.1.18


# basic staging stuff
DATAHOME="${datahome}"
MYSCRATCH="/scratch/$${}{USER}"


mkdir -p $MYSCRATCH
cd $MYSCRATCH


# Remind me what will be done
echo ''
echo "${cmd_str}"
echo ''

# Run my job
${cmd_str}


# Pack up results and send it home to log-in node
tar -zcvf ${call_id}.tar.gz ${out_dir}
cp ${call_id}.tar.gz $${}{DATAHOME}/

# Back into the shadows
cd $HOME
rm -rf $MYSCRATCH

The configuration file

The configuration file is a YAML-based document that is where we will store all of the complexity of the options, input and output files of the typical tophat/cufflinks workflow. This way we have though about what we want to do with our RNA-seq data from start to finish before we actually start the analysis. Also, this config file acts as a check on our poor memory. If you get strange results you don’t have to worry about whether you entered the samples backwards since you can go back to this config file and see exactly what files and settings were used.

Note

If you are running blacktie in analyze mode, you will have many more files created that document every step of the process where the output files are actually placed as well as central log files.

Here is a dummy example of a config file:

Note

A copy of this file can be found here: blacktie/examples/blacktie_config_example.yaml

  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
# The document starts after the '---'

# By the way: everything after a '#' on a line
# will be ignored by the program and acts as a
# comment or note to explain things.

---
# run_options is a dictionary that contains variables that will be needed for
# many or all stages of the run
run_options:
    base_dir: /path/to/project/base_dir
    run_id: False            #  name your run: if false; uses current date/time for uniqe run_id everytime
    bowtie_indexes_dir: /path/to/bowtie2_indexes 
    email_info:
        sender: from_me@gmail.com           
        to: to_you@email.com
        li: /path/to/file/containing/base64_encoded/login_info      # base64_encoded pswrd for from_me@email.com
    custom_smtp: 
        host: smtp.gmail.com   # or what ever your email smtp server is
        port: 587              # or which ever port your smtp server uses



# `tophat_options`:
# -----------------
# This is a dictionary that contains variables needed for all the tophat runs.
# The names of the key:value combinations are taken directly from the tophat
# option names but have the leading '-' removed.

# -o becomes o; --library-type becomes library-type

# **This is true for the cufflinks, cuffmerge, cuffdiff option dictionaries.** 

# `from_conditions`:
# ------------------
# This is a special value that tells blacktie that you don't want to name a single
# value for this option but would rather set the value individually for each of
# your samples/conditions.  If you set the `o` value here: 

#    **all of your different sample results would
#      be written to the same output directory and
#      each would overwrite the next!**
# Hence: from_conditions

# However if you made all of your libraries the same way, things like `r` and
# `mate-std-dev` can be set here to avoid writing the same values over and over
# and perhaps making a mistake or two.

# `positional_args`:
# ------------------
# This is a dictionary inside of the `tophat_options` dictionary.
# It is where you put the arguments to tophat that do not have 'flags' to make
# their identity explicit like `-o path/to/output_dir` or `--library-type fr-unstranded`

# For tophat, these values are 
#     [1] the bowtie index name
#     [2] the fastq files containing the left_reads
#     [3] the fastq files containing the right_reads

# They will be different for cufflinks, cuffmerge, cuffdiff so consult the
# respective help text or manuals, but you should be fine if you just use what
# I have set up in this file already.

tophat_options:
    o: from_conditions
    library-type: fr-unstranded
    p: 6
    r: 125
    mate-std-dev: 25
    G: from_conditions
    no-coverage-search: True
    positional_args:
        bowtie2_index: from_conditions
        left_reads: from_conditions
        right_reads: from_conditions

cufflinks_options:
    o: from_conditions
    p: 7
    GTF-guide: from_conditions  # If you want to use annotation as *TRUTH* set this to False and set 'GTF' to 'from_conditions'
    GTF: False                  # if an option set to false, it will be ommited from the command string 
    3-overhang-tolerance: 5000
    frag-bias-correct: from_conditions 
    multi-read-correct: True
    upper-quartile-norm: True
    positional_args:
        accepted_hits: from_conditions

cuffmerge_options:
    o: from_conditions # output directory
    ref-gtf: from_conditions
    p: 6
    ref-sequence: from_conditions
    positional_args:
        assembly_list: from_conditions # file with path to cufflinks gtf files to be merged

cuffdiff_options:
    o: from_conditions
    labels: from_conditions
    p: 6
    time-series: True
    upper-quartile-norm: True
    frag-bias-correct: from_conditions
    multi-read-correct: True
    positional_args:
        transcripts_gtf: from_conditions
        sample_bams: from_conditions


cummerbund_options:
    cuffdiff-dir: from_conditions
    gtf-path: from_conditions
    out: from_conditions
    file-type: pdf


# options for --mode qsub_script
# If you are not using --mode qsub_script, then set all to 'None'
qsub_options:
  queues: 'queue1,queue3,queue5'
  datahome: '/path/to/baseDirectory/on/cluster/'
  core_range: 40-64 # how many cpus do you want
  ld_library_path: ''  # leave this blank unless you know what it is and need it
  template: /path/to/your/altered/version/of/qsub.template


# `condition_queue`:
# ------------------
# This is a list of info related to each sample/condition contained in your RNA-sequence
# experiment(s)

# `name`: the name of this condition program. Usually something like a time-point
#         ID or treatment type. Should be as short as possible while still being a useful label. 

# `experiment_id`: this is how you group different experiments to be included in a
#             single cuffmerge/cuffdiff program call.  All conditions in a time
#             series should share the same `experiment_id` and be placed in
#             `condition_queue` in the order that you want them to be sent to
#             cuffdiff.

# `replicate_id`: this is how you group data for biological replicates of a single
#             experimental condition experiments to be included in a cuffdiff program
#             call.  Each replicate of a condition should have a unique `experiment_id`.

# `left_reads`: a list of the paths to fastq files containing left reads for
#               each condition. 

# `right_reads`: list of fastqs containing the right mates for the fastqs in
#                `left_reads`.
#                 **NOTE** right mate file must be in same order as provided to `left_reads`

condition_queue:
    -
        name: exp1_control
        experiment_id: 0
        replicate_id: 0
        left_reads:
            - /path/to/exp1_control/techRep1.left_reads.fastq
            - /path/to/exp1_control/techRep2.left_reads.fastq
        right_reads:
            - /path/to/exp1_control/techRep1.right_reads.fastq
            - /path/to/exp1_control/techRep2.right_reads.fastq
        genome_seq: /path/to/species/genome.fa
        gtf_annotation: /path/to/species/annotation.gtf
        bowtie2_index: species.bowtie2_index.basename

    -
        name: exp1_control
        experiment_id: 0
        replicate_id: 1
        left_reads:
            - /path/to/exp1_control/techRep1.left_reads.fastq
            - /path/to/exp1_control/techRep2.left_reads.fastq
        right_reads:
            - /path/to/exp1_control/techRep1.right_reads.fastq
            - /path/to/exp1_control/techRep2.right_reads.fastq
        genome_seq: /path/to/species/genome.fa
        gtf_annotation: /path/to/species/annotation.gtf
        bowtie2_index: species.bowtie2_index.basename
        
    -
        name: exp1_treatment
        experiment_id: 0
        replicate_id: 0
        left_reads:
            - /path/to/exp1_treatment/techRep1.left_reads.fastq
            - /path/to/exp1_treatment/techRep2.left_reads.fastq
        right_reads:
            - /path/to/exp1_treatment/techRep1.right_reads.fastq
            - /path/to/exp1_treatment/techRep2.right_reads.fastq
        genome_seq: /path/to/species/genome.fa
        gtf_annotation: /path/to/species/annotation.gtf
        bowtie2_index: species.bowtie2_index.basename

    -
        name: exp2_control
        experiment_id: 1
        replicate_id: 0
        left_reads:
            - /path/to/exp2_control/techRep1.left_reads.fastq
            - /path/to/exp2_control/techRep2.left_reads.fastq
        right_reads:
            - /path/to/exp2_control/techRep1.right_reads.fastq
            - /path/to/exp2_control/techRep2.right_reads.fastq
        genome_seq: /path/to/species/genome.fa
        gtf_annotation: /path/to/species/annotation.gtf
        bowtie2_index: species.bowtie2_index.basename

    -
        name: exp2_treatment
        experiment_id: 1
        replicate_id: 0
        left_reads:
            - /path/to/exp2_treatment/techRep1.left_reads.fastq
            - /path/to/exp2_treatment/techRep2.left_reads.fastq
        right_reads:
            - /path/to/exp2_treatment/techRep1.right_reads.fastq
            - /path/to/exp2_treatment/techRep2.right_reads.fastq
        genome_seq: /path/to/species/genome.fa
        gtf_annotation: /path/to/species/annotation.gtf
        bowtie2_index: species.bowtie2_index.basename


...

Todo

Add the slots for custom email server options.

Using e-mail notifications

Changed in version v0.2.0rc1: any smtp server should now be usable if you code the host and port into the yaml config file. Any email can be used as the recipient.

New in version v0.2.0rc1: added --no-email option.

Warning

gmail’s 2-step authentication will NOT work. Sorry. I will look into how to deal with that eventually.

You will need to provide your password in order to use the email notifications but it is not a good idea to store human readable passwords lying around your system. So the file that is used to store your password must contain a version of your password that has been encoded in base64. This will scramble your password beyond most people’s ability to read it as a password as long as you don’t name it something silly like password_file.txt.

The help text for blacktie-encode is:

$ blacktie-encode -h

usage: blacktie-encode [-h] input_file

This script takes a path to a file where you have placed your password for the
email you want blacktie to use as the "sender" in its notification emails. It
will replace the file with one containing your password once it has encoded it
out of human readable plain-text into seemingly meaningless text. **THIS IS
NOT FOOLPROOF:** If someone knows exactly what to look for they might figure
it out. ALWAYS use good password practices and never use the same password for
multiple important accounts!

positional arguments:
    input_file  Path to a file where you have placed your password for the email
        you want blacktie to use as the "sender" in its notification
        emails.

optional arguments:
    -h, --help  show this help message and exit

Tutorial

A more detailed tutorial is under development, so watch this space!

Project Versions

Table Of Contents

Previous topic

Installation

Next topic

Blacktie Auto-Generated Code Documentation

This Page

PK'cB==blacktie-latest/install.html Installation — Blacktie 0.2.1.2 documentation

Installation

Requirements

The following python modules must be installed for blacktie to function properly:

Mako>=0.7.3
PyYAML>=3.10

The following modules will provide useful but optional functionality:

pprocess>=0.5
rpy2

Installing the latest version from the git repository

Note

Git is a very useful tool to have installed and to know how to use. Learn more here and try it out here.

Clone the repo:

$ git clone git://github.com/xguse/blacktie.git

Install with any unmet requirements using pip:

$ [sudo] pip install -r blacktie/requirements.txt blacktie

Install using standard setup.py script:

$ cd blacktie
$ [sudo] python setup.py install

Use pip to obtain the package from PyPI

$ [sudo] pip install blacktie Mako PyYAML pprocess

Installing without using git or pip for the download

After installing the requirements:

$ wget https://github.com/xguse/blacktie/archive/master.zip
$ unzip master.zip
$ cd blacktie-master
$ [sudo] python setup.py install

Test to see whether the install worked

To test whether your installation was successful, open a new terminal session and type the following command.

$ blacktie

You should see the help text for blacktie and it should look something like this:

usage: blacktie [-h] [--version]
                [--prog {tophat,cufflinks,cuffmerge,cuffdiff,cummerbund,all}]
                [--hide-logs] [--no-email]
                [--mode {analyze,dry_run,qsub_script}]
                config_file

This script reads options from a yaml formatted file and organizes the
execution of tophat/cufflinks runs for multiple condition sets.

positional arguments:
config_file           Path to a yaml formatted config file containing setup
                        options for the runs.

optional arguments:
-h, --help            show this help message and exit
--version             Print version number.
--prog {tophat,cufflinks,cuffmerge,cuffdiff,cummerbund,all}
                        Which program do you want to run? (default: tophat)
--hide-logs           Make your log directories hidden to keep a tidy
                        'looking' base directory. (default: False)
--no-email            Don't send email notifications. (default: False)
--mode {analyze,dry_run,qsub_script}
                        1) 'analyze': run the analysis pipeline. 2) 'dry_run':
                        walk through all steps that would be run and print out
                        the command lines; however, do not send the commands
                        to the system to be run. 3) 'qsub_script': generate
                        bash scripts suitable to be sent to a compute
                        cluster's SGE through the qsub command. (default:
                        analyze)

If this worked, great!

PK'cBI'' blacktie-latest/py-modindex.html Python Module Index — Blacktie 0.2.1.2 documentation

Python Module Index

b
 
b
blacktie
    blacktie.utils.calls
    blacktie.utils.errors
    blacktie.utils.externals
    blacktie.utils.misc

Project Versions

This Page

PKDaBkuFpp(blacktie-latest/_static/down-pressed.pngPNG  IHDRasRGBbKGDC pHYs B(xtIME -vF#IDAT8!OAJ, ++@I vbÿ@W7F HN#48646TMvv޼7Dsax1U q;< E-f)j%po4xF78G>)- EYm4%7YTk-Qa"NWAo-yeq,) Ypt\hqmszG]Nar߶s^l vh\2%0EeRvIENDB`PKDaB4!blacktie-latest/_static/jquery.js/*! * jQuery JavaScript Library v1.4.2 * http://jquery.com/ * * Copyright 2010, John Resig * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * Includes Sizzle.js * http://sizzlejs.com/ * Copyright 2010, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * * Date: Sat Feb 13 22:33:48 2010 -0500 */ (function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& (d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== "find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
a"; var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, "_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== "="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); (function(){var g=s.createElement("div");g.innerHTML="
";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= {},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== "string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== 1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
","
"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, ""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", ""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, "border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== "string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? "&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== 1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== "json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== "number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
"; a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": "pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); PKDaBhkk blacktie-latest/_static/down.pngPNG  IHDRasRGBbKGDC pHYs B(xtIME"U{IDAT8ҡNCAJ, ++@4>/U^,~T&3M^^^PM6ٹs*RJa)eG*W<"F Fg78G>q OIp:sAj5GنyD^+yU:p_%G@D|aOs(yM,"msx:.b@D|`Vٟ۲иeKſ/G!IENDB`PKDaB' 5w )blacktie-latest/_static/comment-close.pngPNG  IHDRa OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-bKGD pHYs  tIME!,IDAT8e_Hu?}s3y˕U2MvQ֊FE.łĊbE$DDZF5b@Q":2{n.s<_ y?mwV@tR`}Z _# _=_@ w^R%6gC-έ(K>| ${}