in reply to detached thread not working??

Ok here is the code for the main script. It is accessed by by another script that passes in a form variable that has its name starting with 'view'. A folder name is also passed in where the files to be read are located.

I had shortened the file, so if there's useless variables please ignore :-)

#!c:/perl/bin/perl.exe -w use lib 'C:\Program Files\Apache Group\Apache2\cgi-bin\MyModules'; use strict "vars"; use CGI; use BlastQueries; # self created package for handling creation of blas +t db use ParseBlastResults; use CreateBlastDB; use CGI::Carp qw( fatalsToBrowser); use Data::Dumper; use threads; use ParseBlastResults; use blastNResults; BEGIN{ my $queryPath = "C:\\BlastQueries\\"; #path where all query files + should be placed by user my $dbFilePath = "C:\\BlastDBs\\"; my $tempQueryFile = $queryPath."_webQuery.txt"; #temporaily hold t +he query from webpage my $blastall= "C:\\Genomes\\bin\\blastall.exe"; my $blastM0File = "blastNResultsM0.ffn"; my $blastM6File = "blastNResultsM6.ffn"; my $resultsFilePath = "C:\\Program Files\\Apache Group\\Apache2\\h +tdocs\\results.html"; my $resultsFile = "/results.html"; my %options; my $resultantfile; my $cgi = CGI->new; my @params = $cgi->param; # print $cgi->header; my $folder = ''; my ($view, $wait, $runBlast, $running) = 0; my $iteration = 1; $iteration = $cgi->param('iteration'); $iteration ++ if ($iteration == 1); foreach (@params){ if($_ =~/^view/){ $folder = $cgi->param($_) if $cgi->param($_); $runBlast = 0; $running = 0; $view = 1; $wait = 0; last; }elsif($_ eq 'wait'){ $runBlast = 0; $running = 0; $wait = 1; last; } } if($wait){ #still waiting for html file to be done # print $cgi->start_html(-title=>"Nucleotide Blast Results" +, # -script=>{-language=>'JAVASCRIPT', -src=>'/Javasc +ripts/blastNResultsPre.js'}, # -style=>{-src=>'/StyleSheets/style.css'}); # print $cgi->start_form( -name=>'checkBlast', -action=>"/c +gi-bin/BlastQuery/blastNResultsPre.cgi"),"\n"; # print $cgi->hidden(-name=>'wait', -value=>1); my $display = BlastQueries::checkHTMLFile($resultsFilePath); # print "display 2 : $display <br>"; if($display){ # print $cgi->start_html(-title=>"Nucleotide Blast Results" +, # -script=>{-language=>'JAVASCRIPT', -src=>'/Javasc +ripts/blastNResultsPre.js'}, # -style=>{-src=>'/StyleSheets/style.css'}); print $cgi->redirect( -URL => $resultsFile); # print "FINISHED!<BR>"; }else{ #finished and now can see file print $cgi->header; print $cgi->start_html(-title=>"Nucleotide Blast Results", -script=>{-language=>'JAVASCRIPT', -src=>'/Javascr +ipts/blastNResultsPre.js'}, -style=>{-src=>'/StyleSheets/style.css'}); print $cgi->start_form( -name=>'checkBlast', -action=>"/cg +i-bin/BlastQuery/blastNResultsPre.cgi"),"\n"; print $cgi->hidden(-name=>'wait', -value=>1); # $iteration ++; print $cgi->hidden(-name=>'iteration', -value=>"$iteration +"); print "Still creating display file. Please wait.<br>"; print "This page has been refreshed $iteration times<br /> +"; print $cgi->end_form(); } print $cgi->end_form() }elsif($view){ $queryPath = $queryPath.$folder.'\\'; # blastNResults::generateHTMLFile($resultsFilePath, $blastM0Fil +e, $blastM6File, $queryPath); my $thr = threads->new(\&blastNResults::generateHTMLFile, $res +ultsFilePath, $blastM0File,$blastM6File, $queryPath); sleep(4); $thr->detach; print $cgi->header; print $cgi->start_html(-title=>"Nucleotide Blast Results", -script=>{-language=>'JAVASCRIPT', -src=>'/Javascripts +/blastNResultsPre.js'}, -style=>{-src=>'/StyleSheets/style.css'}); #this is t +he window title print $cgi->h1("Nucleotide Blast Results: \n"); print $cgi->start_form( -name=>'checkBlast', -action=>"/cgi-bi +n/BlastQuery/blastNResultsPre.cgi"),"\n"; print $cgi->hidden(-name=>'wait', -value=>1); print $cgi->hidden(-name=>'iteration', -value=>'1'); print "Creating display file. Please wait.<br>"; print $cgi->end_form(); # my $thr = threads->new(\&blastNResults::generateHTMLFile, $re +sultsFilePath, $blastM0File,$blastM6File, $queryPath); # $thr->detach; } }


and here is the module code for the actual reading and writing of the html file

#!c:/perl/bin/perl.exe -w package blastNResults; use lib 'C:\Program Files\Apache Group\Apache2\cgi-bin\MyModules'; use strict "vars"; use CGI; use BlastQueries; # self created package for handling creation of blas +t db use ParseBlastResults; use CreateBlastDB; use CGI::Carp qw( fatalsToBrowser); use Data::Dumper; sub generateHTMLFile{ my ($resultsFilePath, $blastM0File, $blastM6File, $queryPath) += @_; # print "Made it in here<Br>"; # print Dumper(@_); # my $queryPath = "C:\\BlastQueries\\"; #path where all query +files should be placed by user # my $dbFilePath = "C:\\BlastDBs\\"; # my $tempQueryFile = $queryPath."_webQuery.txt"; #temporaily h +old the query from webpage # my $blastall= "C:\\Genomes\\bin\\blastall.exe"; # my $blastM0File = "blastNResultsM0.ffn"; # my $blastM6File = "blastNResultsM6.ffn"; # my $resultsFilePath = "C:\\Program Files\\Apache Group\\Apach +e2\\htdocs\\results.html"; my %options; my $resultantfile; my $parsed; my $cgi = CGI->new; my ($maxMin, $maxMinNoZero); #hash ref open (FH, ">$resultsFilePath") or die "cant temp save file, er +ror: $!"; # print FH $cgi->header; print FH $cgi->start_html(-title=>"Nucleotide Blast Results", -script=>{-language=>'JAVASCRIPT', -src=>'/Javascripts +/blastNResults.js'}, -style=>{-src=>'/StyleSheets/style.css'}, -onLoad=>'on +Load()'); #this is the window title print FH $cgi->h1("Nucleotide Blast Results: \n"); print FH "<p class='subTitle'>Save Blast Results: </p>\n"; print FH '<small>'; print FH $cgi->start_form(-target=>'_blank', -name=>"saveResul +ts", -action=>"/cgi-bin/BlastQuery/saveFile.cgi", -onSubmit=>"r +eturn validateMultipleForm()"),"\n"; print FH 'Folder name ', $cgi->textfield(-name=>'saveFile',-s +ize=>20,-maxlength=>50), ' (saved in C:\BlastQueries\)'; print FH '<br /><br />'; print FH $cgi->hidden(-name=>'queryPath', -value=>$queryPath); print FH $cgi->hidden(-name=>'hidden', -value=>$blastM0File); print FH $cgi->hidden(-name=>'hiddenM6', -value=>$blastM6File) +; print FH $cgi->submit(-name=>'Save Results', -label=>'Save Res +ults', -class=>"btn", -onmouseover=>"this.className='btn btnhov'", -onmouseout=> +"this.className='btn'",-onclick=>"return validateSaveResultsForm()" ) +; print FH $cgi->checkbox(-name=>'saveQuery', -value=>$cgi->para +m('queryFile'), -label=>'Save a copy of the query file/web query as w +ell'); print FH $cgi->end_form(); print FH '</small>'; print FH "<p class='subTitle'>Queries: </p>\n"; # return; $parsed = new ParseBlastResults(); $resultantfile = $queryPath.$blastM0File; # print FH $resultantfile; # return; open (my $fh, "<$resultantfile") or die "cant open , error: $! +"; $parsed->readBlastNView0($fh); close $fh; $maxMin = $parsed->getMaxMinLite(0); #0 is whether to have gap +s or not my $hasZero=0; my $maxMinDB = $parsed->getMaxMinDBLite(); #$parsed->print FHBlastPView0(); # print FH Dumper($maxMinDB); my $queries = $parsed->getAllQueryInfo(); print FH '<small>'; print FH $cgi->checkbox(-name=>'selectall',-checked=>0,-value +=>'on',-label=>'Select/Deselect all queries for multiple viewing', -o +nclick=>'selectDeselect()'); print FH '<small>'; printIndividualQueryMenu($queries, $cgi, FH, $parsed, $resulta +ntfile, $blastM6File); # return; print FH '</small></small>'; print FH "<p class='subTitle'>Please select what data you wis +h to view: </p>\n"; print FH "<small>"; print FH $cgi->start_form(-target=>'_blank', -name=>"viewMulti +ple", -action=>"/cgi-bin/BlastQuery/blastNVisualizationMany.cgi" +, -onSubmit=>"return validateMultipleForm()"),"\n"; print FH $cgi->table({-class=>'multipleMenu'}), $cgi->Tr(), $cgi->td({-class=>'innerLeft'}), "\n"; print FH $cgi->hidden(-name=>'selectedQueries'); print FH $cgi->hidden(-name=>'hidden', -value=>$resultantfile) +; print FH $cgi->hidden(-name=>'hiddenM6', -value=> $queryPath.$ +blastM6File); print FH $cgi->hidden(-name=>'queryPath', -value=>$queryPath); print FH $cgi->table(), $cgi->Tr(), $cgi->td(); print FH "<span class='sub'>From the hit annotation:</span><br + />\n"; my @checked=('gene', 'location', 'length'); my $annotationTitles = $parsed->getAnnotationOrderInfo(); print FH $cgi->checkbox_group(-name=>'annotationTitles', -valu +es=>$annotationTitles, -linebreak=>'true', -default=>\@checked), "<br + />\n"; print FH $cgi->end_td(), $cgi->end_Tr(), $cgi->end_table(); print FH $cgi->end_td(), $cgi->td({-class=>'innerMiddle'}), "\ +n"; #alignment information print FH $cgi->table(), $cgi->Tr(), $cgi->td(); print FH "<span class='sub'>From the alignment:</span><br>\n"; @checked = ('alignment','score','evalue','identity','alignment + length'); my $alignmentTitles = ['alignment', 'score','evalue','identity +','alignment length']; print FH $cgi->checkbox_group(-name=>'alignmentTitles',-values +=>$alignmentTitles, -linebreak=>'true', -default=>\@checked), "<br /> +\n"; #alignment filters print FH "<span class='sub'>Filters:</span><br />\n"; print FH 'View top ', $cgi->textfield(-name=>'topXHit',-size=> +5,-maxlength=>10, -default=>1), " hits (e value filtered)<br />\n"; print FH 'No E values > ', $cgi->textfield(-name=>'limitEvalue +',-size=>5,-maxlength=>10),"<br />\n"; print FH 'No % Identity < ', $cgi->textfield(-name=>'limitIden +tity',-size=>5,-maxlength=>10),"%<br />\n"; print FH $cgi->end_td(), $cgi->end_Tr(), $cgi->end_table(); print FH $cgi->end_td(), $cgi->td({-class=>'innerRight'}), "\n +"; print FH $cgi->table(), $cgi->Tr(), $cgi->td(); print FH "<span class='sub'>From which database?</span><br />\ +n"; my $databases = $parsed->getAllDatabases(); print FH $cgi->checkbox_group(-name=>'databases',-values=>$dat +abases,-linebreak=>'true', -default=>$databases), "<br />\n"; print FH "<span class='sub'>Order Results by:</span><br />\n"; my $orderBy = ['evalue', 'sourceDB']; print FH $cgi->radio_group(-name=>'orderBy',-value=>$orderBy, + -default=>'evalue'), '<br />'; print FH '<br />'; print FH $cgi->checkbox(-name=>'showQueryData',-checked=>1,-v +alue=>'on',-label=>'Include query length in table'); print FH "<br /><br />\n"; print FH "</small>"; print FH $cgi->end_td(), $cgi->end_Tr(), $cgi->end_table(); print FH $cgi->end_td(), $cgi->end_Tr(), $cgi->end_table(); my %tempLabels =('regular'=>'Normal View', 'multiview'=>'Multi + Database View'); print FH $cgi->table(), $cgi->Tr(), $cgi->td(); print FH "<span class='sub'>"; print FH $cgi->radio_group(-name=>'viewStyle',-value=>'regular +', -default=>'regular', -labels=>\%tempLabels, -rel=>'regularview'); print FH "</span>", "&nbsp;&nbsp;&nbsp;&nbsp;","<span class='s +ub'>"; print FH $cgi->radio_group(-name=>'viewStyle',-value=>'multivi +ew', -default=>'regular', -labels=>\%tempLabels, -rel=>'multiview'); print FH "</span>"; print FH $cgi->end_td(), $cgi->end_Tr(),$cgi->Tr({-rel=>'regul +arview'}),$cgi->td({-class=>'padded'}); #----- Single parameter visualization -----# print FH "<span class='subsub'>Single Parameter Visualizations +:</span><br />\n"; print FH $cgi->table({-class=>'multipleMenu'}), $cgi->Tr(), $c +gi->td({-class=>'singleParam'}); my @visualizable = ('evalue','identity','alignment length'); my $i=0; foreach my $element (@visualizable){ print FH $cgi->end_td(),$cgi->td({-class=>'singleParam'}) +if ($i==2); print FH '<br />'; print FH $cgi->checkbox(-name=>'visualize', -value=>$eleme +nt, -label=>"Visualize $element", -rel=>"$element"); print FH "<small>"; if ($element eq 'evalue'){ print FH '<span class=\'red\'> max: ', $maxMin->{$elem +ent}->[0], ', min: ', $maxMin->{$element}->[1], '</span><br />'; print FH $cgi->hidden(-name=>$element.'Max', -value=>$ +maxMin->{$element}->[0]); print FH $cgi->hidden(-name=>$element.'Min', -value=>$ +maxMin->{$element}->[1]); }else{ print FH '<span class=\'red\'> max: ', $maxMin->{$elem +ent}->[0], ', min: ', $maxMin->{$element}->[1], '</span><br />'; print FH $cgi->hidden(-name=>$element.'Max', -value=>$ +maxMin->{$element}->[0]); print FH $cgi->hidden(-name=>$element.'Min', -value=>$ +maxMin->{$element}->[1]); } print FH $cgi->table({-class=>'visualization'}); print FH $cgi->Tr({-rel=>"$element"}), $cgi->td(); print FH 'Visual colour: ',$cgi->popup_menu(-name=>$elemen +t.'displaycolour', -values=>['red','blue','green']); if ($element eq 'evalue'){ my %labels = ('0,0,255'=>'blue','0,255,0'=>'green', '2 +55,0,0'=>'red', '255,255,0'=>'yellow','0,255,255'=>'cyan','255,0,255' +=>'magenta','255,255,255'=>'white','0,0,0'=>'black'); print FH ' Zero e value colour: ',$cgi->popup_menu(-na +me=>$element.'zero', -values=>[('0,0,255','0,255,0', '255,0,0', '255, +255,0','0,255,255','255,0,255','255,255,255','0,0,0')], -labels=>\%la +bels); } print FH '<br />'; my %temp =(auto=>'Auto range with '); print FH $cgi->radio_group(-name=>$element.'visualMethod' +,-value=>'auto',-onclick=>"enableOverwrite('".$element.'visualMethod' +."','".$element.'bin'."', 0)", -default=>'auto', -labels=>\%temp, -re +l=>'none'); print FH $cgi->textfield(-name=>$element.'bin',-size=>5,-m +axlength=>5), ' bins or '; %temp =(threshold=>'Set threshold'); print FH $cgi->radio_group(-name=>$element.'visualMethod' +,-value=>'threshold', -onclick=>"enableOverwrite('".$element.'visualM +ethod'."','".$element.'bin'."',0)", -default=>'auto', -labels=>\%temp +, -rel=>"range$element"); print FH $cgi->table({-class=>'threshold'}); print FH $cgi->Tr({-rel=>"range$element"}), $cgi->td(); print FH $cgi->table({-class=>'threshold', -id=>$element}) +; print FH $cgi->Tr(), $cgi->td(); %temp =(colour=>'Colour ', autorange=>'Auto Range with '); print FH 'Range: [', $cgi->textfield(-name=>$element.'star +t1',-size=>5,-maxlength=>10), ', ', $cgi->textfield(-name=>$element.'end1',-size=>5,-maxle +ngth=>10), ')', $cgi->radio_group(-name=>$element.'colour1',-value=>'c +olour', -default=>'colour', -labels=>\%temp, -onClick=>"enableOverwri +te2('$element"."colour1', '$element"."bin1', 1,'$element"."specifiedc +olour1')"); my %labels = ('0,0,255'=>'blue','0,255,0'=>'green', '255,0 +,0'=>'red', '255,255,0'=>'yellow','0,255,255'=>'cyan','255,0,255'=>'m +agenta','255,255,255'=>'white','0,0,0'=>'black'); print FH $cgi->popup_menu(-name=>$element.'specifiedcolour +1', -values=>[('0,0,255','0,255,0', '255,0,0', '255,255,0','0,255,255 +','255,0,255','255,255,255','0,0,0')], -labels=>\%labels); print FH ' ',$cgi->radio_group(-name=>$element.'colour1',- +value=>'autorange',-default=>'colour', -labels=>\%temp, -onClick=>"en +ableOverwrite2('$element"."colour1', '$element"."bin1', 1,'$element". +"specifiedcolour1')"), $cgi->textfield(-name=>$element.'bin1',-size=>5,-maxle +ngth=>5, -class=>'disabled'), ' bins'; print FH $cgi->end_td(), $cgi->end_Tr(); print FH $cgi->end_table(); print FH $cgi->button(-name=>'add', -value=>'Add another r +ange', -onClick=>"addRow(\"$element\", \"$element\")"); print FH $cgi->button(-name=>'remove', -value=>'Remove las +t range', -onClick=>"removeRowFromTable(\"$element\")"); print FH $cgi->checkbox(-name=>$element.'overwrite', -valu +e=>1, -label=>'Overwrite'); print FH $cgi->end_td(), $cgi->end_Tr(); print FH $cgi->end_table(); print FH $cgi->end_td(), $cgi->end_Tr(); print FH $cgi->end_table(); print FH "</small>"; $i++; } print FH $cgi->end_td(), $cgi->end_Tr(), $cgi->end_table(); print FH '<br />'; #----- Multiple parameter visualization -----# print FH "<span class='subsub'>Multiple Parameter Visualizatio +ns:</span>", $cgi->checkbox(-name=>'multiParam',-checked=>0,-value=>1,- +label=>'', -rel=>'multiple'),"<br /><br />\n"; print FH $cgi->table({-class=>'multiVisual'}), $cgi->Tr({-rel= +>'multiple'}), $cgi->td(); print FH '<small>'; print FH $cgi->table({-class=>'sets', -id=>'Multiple1'}), $cgi +->Tr(), $cgi->td({-class=>'blue'}); print FH '<span class=\'bold\'>&nbsp;&nbsp;&nbsp;&nbsp;Visuali +zation 1: </span>'; print FH 'Visual colour: ',$cgi->popup_menu(-name=>'Multiple1d +isplaycolour', -values=>['red','blue','green']); print FH $cgi->checkbox(-name=>'Multiple1overwrite', -value=>1 +, -label=>'Overwrite'); print FH $cgi->table({-class=>'ranges',-id=>'Multiple1Range1'} +), $cgi->Tr(), $cgi->td({-class=>'ranges'}); print FH '<span class="green">Range 1: </span>'; my %temp =('auto'=>'Auto range with '); print FH $cgi->radio_group(-name=>'Multiple1Range1Style',-valu +e=>'auto', -default=>'auto', -labels=>\%temp, -rel=>'none', -onClick= +>"enableOverwrite2('Multiple1Range1Style', 'Multiple1Range1bin', 0, ' +Multiple1Range1specifiedcolour')"); print FH $cgi->textfield(-name=>'Multiple1Range1bin',-size=>5, +-maxlength=>5), ' bins or '; %temp =('colour'=>'Specify colour: '); print FH $cgi->radio_group(-name=>'Multiple1Range1Style',-val +ue=>'colour', -default=>'auto', -labels=>\%temp, -onClick=>"enableOve +rwrite2('Multiple1Range1Style', 'Multiple1Range1bin', 0,'Multiple1Ran +ge1specifiedcolour')"); my %colourLabels = ('0,0,255'=>'blue','0,255,0'=>'green', '255 +,0,0'=>'red', '255,255,0'=>'yellow','0,255,255'=>'cyan','255,0,255'=> +'magenta','255,255,255'=>'white','0,0,0'=>'black'); print FH $cgi->popup_menu(-name=>'Multiple1Range1specifiedcolo +ur', -values=>[('0,0,255','0,255,0', '255,0,0', '255,255,0','0,255,25 +5','255,0,255','255,255,255','0,0,0')], -labels=>\%colourLabels, -dis +abled=>'true'); print FH $cgi->end_td(), $cgi->end_Tr(), $cgi->Tr(), $cgi->td( +); print FH $cgi->table({-class =>'parameters',-id=>'Multiple1Ran +ge1Param1'}), $cgi->Tr(), $cgi->td(); my %paramLabels = ('evalue'=>'E Value','identity'=>'Identity', + 'alignment length'=>'Alignment Length'); #my %paramAttrs = ('evalue'=>{'rel'=>'includeZero'},'identity' +=>{'rel'=>'none'}, 'gaps'=>{'rel'=>'none'}, 'alignment length'=>{'rel +'=>'none'}); print FH '<span class="brown"> Parameter:</span> ',$cgi->popup +_menu(-name=>'Multiple1Range1Param1', -values=>\@visualizable, -label +s=>\%paramLabels); print FH ' Range: [',$cgi->textfield(-name=>'Multiple1Range1Pa +ram1Start',-size=>5,-maxlength=>10), ',', $cgi->textfield(-name=>'Multiple1Range1Param1End',-size=>5 +,-maxlength=>10),')'; print FH $cgi->end_td(), $cgi->td(); print FH $cgi->checkbox(-name=>'Multiple1Range1Param1Zero', -v +alue=>1, -label=>"Include zero e values"); print FH $cgi->end_td(), $cgi->end_Tr(); print FH $cgi->end_table(); print FH '&nbsp;&nbsp;&nbsp;&nbsp;'; print FH $cgi->button(-name=>'addParam', -value=>'Add another +parameter', -onClick=>"addParamRow('Multiple1Range1Param1','Multiple1 +Range1' )", -class=>"btn2",-onmouseout=>"this.className='btn2'"); print FH $cgi->button(-name=>'removeParam', -value=>'Remove la +st parameter', -onClick=>"removeRowFromTable('Multiple1Range1Param1') +", -class=>"btn2",-onmouseout=>"this.className='btn2'"); print FH $cgi->end_td(), $cgi->end_Tr(); print FH $cgi->end_table(); print FH '&nbsp;&nbsp;&nbsp;&nbsp;'; print FH $cgi->button(-name=>'addRange', -value=>'Add another +range', -onClick=>"addRangeRow('Multiple1Range1','Multiple1' )", -class=>"btn3", -onmouseout=>"this.className='btn3'"); print FH $cgi->button(-name=>'removeRange', -value=>'Remove la +st range', -onClick=>"remove2RowsFromTable('Multiple1Range1')", -class=>"btn3", -onmouseout=>"this.className='btn3'"); print FH $cgi->end_td(), $cgi->end_Tr(); print FH '</small>'; print FH $cgi->end_table(); print FH $cgi->button(-name=>'addSet', -value=>'Add another vi +sualization', -onClick=>"addSetRow(\"Multiple1\", \"Multiple\")", -class=>"btn4", -onmouseout=>"this.className='btn4'"); print FH $cgi->button(-name=>'removeSet', -value=>'Remove last + visualization', -onClick=>"remove2RowsFromTable(\"Multiple1\")", -class=>"btn4", -onmouseout=>"this.className='btn4'"); print FH $cgi->end_td(), $cgi->td({-class=>'bottom'}); print FH '<small>'; #print FH the max and min infos foreach my $element (@visualizable){ if ($element eq 'evalue'){ print FH $element,':<span class=\'red\'> max: ', $maxM +in->{$element}->[0], ', min: ', $maxMin->{$element}->[1], '</span><br + />'; }else{ print FH $element, ':<span class=\'red\'> max: ', $max +Min->{$element}->[0], ', min: ', $maxMin->{$element}->[1], '</span><b +r />'; } } print FH '<br /><br /><br />'; print FH '</small>'; print FH $cgi->end_td(),$cgi->end_Tr(); print FH $cgi->end_table(); print FH $cgi->end_td(), $cgi->end_Tr(),$cgi->Tr({-rel=>'multi +view'}),$cgi->td({-class=>'padded'}); %tempLabels =('single'=>'Single Parameter Visualizations', 'mu +lti'=>'Multiple Parameters Visualizations'); print FH $cgi->table(), $cgi->Tr(), $cgi->td(); print FH "<span class='subsub'>"; print FH $cgi->radio_group(-name=>'paramStyle',-value=>'single +', -default=>'single', -labels=>\%tempLabels, -rel=>'singleParamStyle +'); print FH "</span>", "&nbsp;&nbsp;&nbsp;&nbsp;", "<span class=' +subsub'>"; print FH $cgi->radio_group(-name=>'paramStyle',-value=>'multi' +, -default=>'single', -labels=>\%tempLabels, -rel=>'multiParamStyle') +; print FH $cgi->end_td(),$cgi->end_Tr(), $cgi->Tr({-rel=>'singl +eParamStyle'}), $cgi->td({-class=>'padded'}); print FH "</span>"; #----- Single parameter visualization -----# print FH $cgi->table(), $cgi->Tr(), $cgi->td(); print FH '<small>'; print FH $cgi->table({-class=>'visualization'}), $cgi->Tr(), $ +cgi->td(); %paramLabels = ('evalue'=>'E Value','identity'=>'Identity', 'a +lignment length'=>'Alignment Length'); print FH '<span class="brown"> Parameter:</span> ',$cgi->popup +_menu(-name=>'visualtype', -values=>\@visualizable, -labels=>\%paramL +abels , -onchange=>"enableEvalue()"); print FH 'Visual colour: ',$cgi->popup_menu(-name=>'singledisp +laycolour', -values=>['red','blue','green']); my %labels = ('0,0,255'=>'blue','0,255,0'=>'green', '255,0,0'= +>'red', '255,255,0'=>'yellow','0,255,255'=>'cyan','255,0,255'=>'magen +ta','255,255,255'=>'white','0,0,0'=>'black'); print FH ' Zero e value colour: ',$cgi->popup_menu(-name=>'sin +glezero',-values=>[('0,0,255','0,255,0', '255,0,0', '255,255,0','0,25 +5,255','255,0,255','255,255,255','0,0,0')], -labels=>\%labels); print FH '<br />'; %temp =(auto=>'Auto range with '); print FH $cgi->radio_group(-name=>'singlevisualMethod',-value +=>'auto', -default=>'auto', -labels=>\%temp, -rel=>'none', -onclick=> +"enableOverwrite('singlevisualMethod','singlebin',0)"); print FH $cgi->textfield(-name=>'singlebin',-size=>5,-maxlengt +h=>5), ' bins or '; %temp =(threshold=>'Set threshold'); print FH $cgi->radio_group(-name=>'singlevisualMethod',-value +=>'threshold', -default=>'auto', -labels=>\%temp, -rel=>'singleRange' +, -onclick=>"enableOverwrite('singlevisualMethod','singlebin',0)"); print FH $cgi->table({-class=>'threshold'}), $cgi->Tr({-rel=>' +singleRange'}), $cgi->td(); print FH $cgi->table({-class=>'threshold', -id=>'single'}), $c +gi->Tr(), $cgi->td(); %temp =(colour=>'Colour ', autorange=>'Auto Range with '); print FH 'Range: [', $cgi->textfield(-name=>'singlestart1',-si +ze=>5,-maxlength=>10), ', ', $cgi->textfield(-name=>'singleend1',-size=>5,-maxlength=>1 +0), ')', $cgi->radio_group(-name=>'singlecolour1',-value=>'colour', + -default=>'colour', -labels=>\%temp, -onClick=>"enableOverwrite2('si +nglecolour1','singlebin1',1,'singlespecifiedcolour1' )"); %labels = ('0,0,255'=>'blue','0,255,0'=>'green', '255,0,0'=>'r +ed', '255,255,0'=>'yellow','0,255,255'=>'cyan','255,0,255'=>'magenta' +,'255,255,255'=>'white','0,0,0'=>'black'); print FH $cgi->popup_menu(-name=>'singlespecifiedcolour1', -va +lues=>[('0,0,255','0,255,0', '255,0,0', '255,255,0','0,255,255','255, +0,255','255,255,255','0,0,0')], -labels=>\%labels); print FH ' ',$cgi->radio_group(-name=>'singlecolour1',-value=> +'autorange',-default=>'colour', -labels=>\%temp, -onClick=>"enableOve +rwrite2('singlecolour1','singlebin1',1,'singlespecifiedcolour1' )"), $cgi->textfield(-name=>'singlebin1',-size=>5,-maxlength=>5 +,-disabled=>'true', -class=>'disabled'), ' bins'; print FH $cgi->end_td(), $cgi->end_Tr(), $cgi->end_table(); print FH $cgi->button(-name=>'add', -value=>'Add another range +', -onClick=>"addRow(\"single\", \"single\")"); print FH $cgi->button(-name=>'remove', -value=>'Remove last ra +nge', -onClick=>"removeRowFromTable(\"single\")"); print FH $cgi->checkbox(-name=>'singleoverwrite', -value=>1, - +label=>'Overwrite'); print FH $cgi->end_td(), $cgi->end_Tr(), $cgi->end_table(); print FH $cgi->end_td(), $cgi->end_Tr(), $cgi->end_table(); print FH '</small>'; print FH $cgi->end_td(), $cgi->td(); print FH '<small>'; #print FH the max and min infos foreach my $element (@visualizable){ if ($element eq 'evalue'){ print FH $element,':<span class=\'red\'> max: ', $maxM +inDB->{$element}->[0], ', min: ', $maxMinDB->{$element}->[1], '</span +><br />'; print FH $cgi->hidden(-name=>$element.'Max', -value=>$ +maxMinDB->{$element}->[0]); print FH $cgi->hidden(-name=>$element.'Min', -value=>$ +maxMinDB->{$element}->[1]); print FH 'Zero e value exists<br>' if $hasZero; print FH "haszero $hasZero<br>"; }else{ print FH $element, ':<span class=\'red\'> max: ', $max +MinDB->{$element}->[0], ', min: ', $maxMinDB->{$element}->[1], '</spa +n><br />'; print FH $cgi->hidden(-name=>$element.'Max', -value=>$ +maxMinDB->{$element}->[0]); print FH $cgi->hidden(-name=>$element.'Min', -value=>$ +maxMinDB->{$element}->[1]); } } print FH '</small>'; print FH $cgi->end_td(),$cgi->end_Tr(), $cgi->end_table(); #en +d single param table #ends single parameter visualization print FH $cgi->end_td(),$cgi->end_Tr(), $cgi->Tr({-rel=>'multi +ParamStyle'}), $cgi->td({-class=>'padded'}); #----- Multiple parameter visualization -----# print FH $cgi->table(), $cgi->Tr(), $cgi->td(); print FH '<small>'; print FH $cgi->table({-class=>'sets', -id=>'Multiple1'}), $cgi +->Tr(), $cgi->td({-class=>'blue'}); print FH '<span class=\'bold\'>&nbsp;&nbsp;&nbsp;&nbsp;Visuali +zation 1: </span>'; print FH 'Visual colour: ',$cgi->popup_menu(-name=>'Multiple1d +isplaycolour', -values=>['red','blue','green']); print FH $cgi->checkbox(-name=>'Multiple1overwrite', -value=>1 +, -label=>'Overwrite'); print FH $cgi->table({-class=>'ranges',-id=>'Multiple1Range1'} +), $cgi->Tr(), $cgi->td({-class=>'ranges'}); print FH '<span class="green">Range 1: </span>'; %temp =('auto'=>'Auto range with '); print FH $cgi->radio_group(-name=>'Multiple1Range1Style',-valu +e=>'auto', -default=>'auto', -labels=>\%temp, -rel=>'none', -onClick= +>"enableOverwrite2('Multiple1Range1Style','Multiple1Range1bin',0, 'Mu +ltiple1Range1specifiedcolour')"); print FH $cgi->textfield(-name=>'Multiple1Range1bin',-size=>5, +-maxlength=>5), ' bins or '; %temp =(threshold=>'Specify colour: '); print FH $cgi->radio_group(-name=>'Multiple1Range1Style',-val +ue=>'colour', -default=>'auto', -labels=>\%temp, -onClick=>"enableOve +rwrite2('Multiple1Range1Style','Multiple1Range1bin',0, 'Multiple1Rang +e1specifiedcolour')"); %colourLabels = ('0,0,255'=>'blue','0,255,0'=>'green', '255,0, +0'=>'red', '255,255,0'=>'yellow','0,255,255'=>'cyan','255,0,255'=>'ma +genta','255,255,255'=>'white','0,0,0'=>'black'); print FH $cgi->popup_menu(-name=>'Multiple1Range1specifiedcolo +ur', -values=>[('0,0,255','0,255,0', '255,0,0', '255,255,0','0,255,25 +5','255,0,255','255,255,255','0,0,0')], -labels=>\%colourLabels, -dis +abled=>'true'); print FH $cgi->end_td(), $cgi->end_Tr(), $cgi->Tr(), $cgi->td( +); print FH $cgi->table({-class =>'parameters',-id=>'Multiple1Ran +ge1Param1'}), $cgi->Tr(), $cgi->td(); %paramLabels = ('evalue'=>'E Value','identity'=>'Identity', 'a +lignment length'=>'Alignment Length'); #my %paramAttrs = ('evalue'=>{'rel'=>'includeZero'},'identity' +=>{'rel'=>'none'}, 'gap'=>{'rel'=>'none'}, 'alignment length'=>{'rel' +=>'none'}); print FH '<span class="brown"> Parameter:</span> ',$cgi->popup +_menu(-name=>'Multiple1Range1Param1', -values=>\@visualizable, -label +s=>\%paramLabels); print FH ' Range: [',$cgi->textfield(-name=>'Multiple1Range1Pa +ram1Start',-size=>5,-maxlength=>10), ',', $cgi->textfield(-name=>'Multiple1Range1Param1End',-size=>5 +,-maxlength=>10),')'; print FH $cgi->end_td(), $cgi->td(); print FH $cgi->checkbox(-name=>'Multiple1Range1Param1Zero', -v +alue=>1, -label=>"Include zero e values"); print FH $cgi->end_td(), $cgi->end_Tr(), $cgi->end_table(); #e +nd parameters table print FH '&nbsp;&nbsp;&nbsp;&nbsp;'; print FH $cgi->button(-name=>'addParam', -value=>'Add another +parameter', -onClick=>"addParamRow('Multiple1Range1Param1','Multiple1 +Range1' )", -class=>"btn2",-onmouseout=>"this.className='btn2'"); print FH $cgi->button(-name=>'removeParam', -value=>'Remove la +st parameter', -onClick=>"removeRowFromTable('Multiple1Range1Param1') +", -class=>"btn2",-onmouseout=>"this.className='btn2'"); print FH $cgi->end_td(), $cgi->end_Tr(), $cgi->end_table(); #e +nd ranges table print FH '&nbsp;&nbsp;&nbsp;&nbsp;'; print FH $cgi->button(-name=>'addRange', -value=>'Add another +range', -onClick=>"addRangeRow('Multiple1Range1','Multiple1' )", -class=>"btn3", -onmouseout=>"this.className='btn3'"); print FH $cgi->button(-name=>'removeRange', -value=>'Remove la +st range', -onClick=>"remove2RowsFromTable('Multiple1Range1')", -class=>"btn3", -onmouseout=>"this.className='btn3'"); print FH '</small>'; print FH $cgi->end_td(), $cgi->end_Tr(), $cgi->end_table();#en +d multiple table print FH $cgi->end_td(), $cgi->td({-class=>'bottom'}); print FH '<small>'; #print FH the max and min infos foreach my $element (@visualizable){ if ($element eq 'evalue'){ print FH $element,':<span class=\'red\'> max: ', $maxM +inDB->{$element}->[0], ', min: ', $maxMinDB->{$element}->[1], '</span +><br />'; print FH 'Zero e value exists<br>' if $hasZero; }else{ print FH $element, ':<span class=\'red\'> max: ', $max +MinDB->{$element}->[0], ', min: ', $maxMinDB->{$element}->[1], '</spa +n><br />'; } } print FH '<br /><br /><br />'; print FH '</small>'; print FH $cgi->end_td(),$cgi->end_Tr(), $cgi->end_table(); #en +d multiparam table print FH $cgi->end_td(), $cgi->end_Tr(),$cgi->end_table(); print FH $cgi->end_td(), $cgi->end_Tr(),$cgi->end_table(); # print FH '<br />'; print FH '<br />'; # print FH "<p class='subTitle'> </p>\n"; #form buttons print FH $cgi->button(-name=>'Cancel', -label=>'Cancel', -clas +s=>"btn", -onClick=>"parent.location='/cgi-bin/BlastQuery/blastPMain. +cgi'", -onmouseover=>"this.className='btn btnhov'", -onmouseout=> +"this.className='btn'"), '&nbsp;&nbsp;&nbsp;&nbsp;'; print FH $cgi->submit(-name=>'Perform Blast', -label=>'View Re +sults', -class=>"btn", -onmouseover=>"this.className='btn btnhov'", -onmouseout=> +"this.className='btn'", -onclick=>"return changeSubmit()"); print FH $cgi->hidden(-name=>'queryPath', -value=>$queryPath); print FH $cgi->end_form(); print FH "<p>",$cgi->hr(), $cgi->a({-href=>"/"}, "<p>Back to M +ain"); print FH "<br>\nthis is the end"; close FH; } sub querySummary{ my ($query, $FH) = @_; my $total = 0; my @dbs = keys %{ $query->[2]}; foreach my $db (@dbs){ $total += $query->[2]->{$db}; } print $FH "<br />&nbsp;&nbsp;&nbsp;&nbsp;<span class='blue'>To +tal hits: $total</span>, from databases: "; foreach my $db (@dbs){ print $FH "<span class='orange'>$db</span>($query->[2]->{$ +db}) "; } print $FH '<br />'; } sub printIndividualQueryMenu{ my ($queries, $cgi, $FH, $parsed, $resultantfile, $blastM6File +) = @_; my @qNames = keys %{$queries}; my $size = @qNames; print $FH "**query total: ",$size, "<br>"; # print FH Dumper($queries); my $i = 0; foreach my $query (@qNames){ $i++; my @dbs = keys %{ $queries->{$query}->[2]}; print $FH $cgi->table({-class=>'individual'}), "\n"; #----- summary of query -----# print $FH $cgi->Tr(), $cgi->td({-class=>'individual'}), "\ +n"; print $FH '<span class="red">'; print $FH $cgi->checkbox(-name=>'selectedQueries',-chec +ked=>0,-value=>"$query", -label=>"$query", -onClick=>"checkValue(this +)"); print $FH '</span>'; querySummary($queries->{$query}, $FH); print $FH '&nbsp;&nbsp;&nbsp;&nbsp;'; print $FH $cgi->checkbox(-name=>"$i", -checked=>0, -value= +>"", -label=>"View this query separately", -rel=>"$i"); print $FH $cgi->end_td(), $cgi->end_Tr(), "\n"; #----- form starts -----# print $FH $cgi->Tr({-rel=>"$i"}), $cgi->td({-class=>'in +dividual'}), "\n"; print $FH $cgi->start_form(-target=>'_blank', -name=>"v +iewOne", -action=>"/cgi-bin/BlastQuery/blastNVisualizationOne.cgi")," +\n"; print $FH $cgi->table({-class=>'individualMenu'}); #----- Hit annotation info -----# print $FH $cgi->Tr(), $cgi->td({-class=>'innerLeft'}), "\n +"; print $FH $cgi->table(), $cgi->Tr(), $cgi->td(); print $FH "<span class='sub'>From the hit annotation:</spa +n><br />\n"; my @checked=('gene', 'location', 'length'); my $annotationTitles = $parsed->getAnnotationOrderInfo( +); print $FH $cgi->checkbox_group(-name=>'annotationTitles +', -values=>$annotationTitles, -linebreak=>'true', -default=>\@checke +d), "<br />\n"; print $FH $cgi->end_td(), $cgi->end_Tr(), $cgi->end_table( +); print $FH $cgi->end_td(), $cgi->td({-class=>'innerMiddle'} +), "\n"; #alignment information print $FH $cgi->table(), $cgi->Tr(), $cgi->td(); print $FH "<span class='sub'>From the alignment:</span><br +>\n"; @checked = ('alignment','score', 'evalue','identity','alig +nment length'); my $alignmentTitles = ['alignment','score', 'evalue','iden +tity','alignment length']; print $FH $cgi->checkbox_group(-name=>'alignmentTitles +', -values=>$alignmentTitles, -linebreak=>'true', -default=>\@checked +), "<br>\n"; #alignment filters print $FH "<span class='sub'>Filters:</span><br />\n"; print $FH 'View top ', $cgi->textfield(-name=>'topXHit',-s +ize=>5,-maxlength=>10, -default=>10), " hits (e value filtered)<br /> +\n"; print $FH 'No E values > ', $cgi->textfield(-name=>'limitE +value',-size=>5,-maxlength=>10),"<br />\n"; print $FH 'No % Identity < ', $cgi->textfield(-name=>'limi +tIdentity',-size=>5,-maxlength=>10),"%<br />\n"; print $FH $cgi->end_td(), $cgi->end_Tr(), $cgi->end_table( +); #last column print $FH $cgi->end_td(), $cgi->td({-class=>'innerRight'}) +, "\n"; print $FH $cgi->table(), $cgi->Tr(), $cgi->td(); print $FH "<span class='sub'>From which database?</span><b +r />\n"; print $FH $cgi->checkbox_group(-name=>'databases',-values= +>\@dbs,-linebreak=>'true', -default=>\@dbs), "<br />\n"; print $FH "<span class='sub'>Order Results by:</span><br / +>\n"; my $orderBy = ['evalue', 'sourceDB']; print $FH $cgi->radio_group(-name=>'orderBy',-value=>$ord +erBy, -default=>'evalue'), '<br />'; print $FH '<br />'; print $FH $cgi->checkbox(-name=>'showQueryData',-checked= +>1,-value=>'on',-label=>'Include query length and ID in table'); print $FH "<br /><br />\n"; print $FH "</small>"; #----- submit button -----# print $FH $cgi->submit(-name=>'Perform Blast', -label=>'Vi +ew Results', -class=>"btn", -onmouseover=>"this.className='btn btnhov'", -onmouseout=> +"this.className='btn'"); print $FH $cgi->end_td(), $cgi->end_Tr(), $cgi->end_table( +); print $FH $cgi->hidden(-name=>'hidden', -default=>[$query, + $resultantfile, $blastM6File]); print $FH $cgi->end_td(), $cgi->end_Tr(), $cgi->end_table( +); print $FH $cgi->end_form(); print $FH $cgi->end_td(), $cgi->end_Tr(), "\n"; print $FH $cgi->end_table(); print $FH "<br />"; } } sub isInArray{ my ($element, $array) = @_; foreach (@$array){ return 1 if ($element eq $_); } return 0; } 1;
Thanks! Like i said, it works fine if i wait for the thread to finish first..

Replies are listed 'Best First'.
Re^2: detached thread not working??
by BrowserUk (Patriarch) on Jul 24, 2007 at 09:09 UTC
    Like i said, it works fine if i wait for the thread to finish first...

    I realise that you have an answer that you are happy with. This is purely for my own education, and to satisfy my curiosity. I hope you do not object.

    If your code works when you do not detach it, why are you detching it? That is, what shortcoming are you tryng to address by detaching it?


    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.