classify_spectra.html 221 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2. "http://www.w3.org/TR/REC-html40/loose.dtd">
  3. <html>
  4. <head>
  5. <title>Description of classify_spectra</title>
  6. <meta name="keywords" content="classify_spectra">
  7. <meta name="description" content="CLASSIFY_SPECTRA M-file for classify_spectra.fig">
  8. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  9. <meta name="generator" content="m2html &copy; 2005 Guillaume Flandin">
  10. <meta name="robots" content="index, follow">
  11. <link type="text/css" rel="stylesheet" href="../../m2html.css">
  12. <script type="text/javascript">
  13. if (top.frames.length == 0) { top.location = "../../index.html"; };
  14. </script>
  15. </head>
  16. <body>
  17. <a name="_top"></a>
  18. <!-- ../menu.html chronux_2_10 --><!-- menu.html wave_browser -->
  19. <h1>classify_spectra
  20. </h1>
  21. <h2><a name="_name"></a>PURPOSE <a href="#_top"><img alt="^" border="0" src="../../up.png"></a></h2>
  22. <div class="box"><strong>CLASSIFY_SPECTRA M-file for classify_spectra.fig</strong></div>
  23. <h2><a name="_synopsis"></a>SYNOPSIS <a href="#_top"><img alt="^" border="0" src="../../up.png"></a></h2>
  24. <div class="box"><strong>function varargout = classify_spectra(varargin) </strong></div>
  25. <h2><a name="_description"></a>DESCRIPTION <a href="#_top"><img alt="^" border="0" src="../../up.png"></a></h2>
  26. <div class="fragment"><pre class="comment"> CLASSIFY_SPECTRA M-file for classify_spectra.fig
  27. CLASSIFY_SPECTRA, by itself, creates a new CLASSIFY_SPECTRA or raises the existing
  28. singleton*.
  29. H = CLASSIFY_SPECTRA returns the handle to a new CLASSIFY_SPECTRA or
  30. the handle to
  31. the existing singleton*.
  32. CLASSIFY_SPECTRA('CALLBACK',hObject,eventData,handles,...) calls the local
  33. function named CALLBACK in CLASSIFY_SPECTRA.M with the given input arguments.
  34. CLASSIFY_SPECTRA('Property','Value',...) creates a new CLASSIFY_SPECTRA or raises the
  35. existing singleton*. Starting from the left, property value pairs are
  36. applied to the GUI before classify_spectra_OpeningFunction gets called. An
  37. unrecognized property name or invalid value makes property application
  38. stop. All inputs are passed to classify_spectra_OpeningFcn via varargin.
  39. *See GUI Options on GUIDE's Tools menu. Choose &quot;GUI allows only one
  40. instance to run (singleton)&quot;.
  41. See also: GUIDE, GUIDATA, GUIHANDLES</pre></div>
  42. <!-- crossreference -->
  43. <h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../../up.png"></a></h2>
  44. This function calls:
  45. <ul style="list-style-image:url(../../matlabicon.gif)">
  46. <li><a href="../../chronux_2_10/fly_track/videoIO/videoIO_2006a/@videoReader/close.html" class="code" title="function vr = close(vr)">close</a> VR=CLOSE(VR)</li><li><a href="../../chronux_2_10/fly_track/videoIO/videoIO_2006a/@videoWriter/close.html" class="code" title="function vw = close(vw)">close</a> VW=CLOSE(VW)</li><li><a href="../../chronux_2_10/fly_track/videoIO/videoIO_2006b/@videoReader/close.html" class="code" title="function vr = close(vr)">close</a> VR=CLOSE(VR)</li><li><a href="../../chronux_2_10/fly_track/videoIO/videoIO_2006b/@videoWriter/close.html" class="code" title="function vw = close(vw)">close</a> VW=CLOSE(VW)</li><li><a href="../../chronux_2_10/fly_track/videoIO/videoIO_2007a/@videoReader/close.html" class="code" title="function vr = close(vr)">close</a> VR=CLOSE(VR)</li><li><a href="../../chronux_2_10/fly_track/videoIO/videoIO_2007a/@videoWriter/close.html" class="code" title="function vw = close(vw)">close</a> VW=CLOSE(VW)</li><li><a href="../../chronux_2_10/spectral_analysis/continuous/mtdspecgramc.html" class="code" title="function [dS,t,f]=mtdspecgramc(data,movingwin,phi,params)">mtdspecgramc</a> Multi-taper derivative of the time-frequency spectrum - continuous process</li><li><a href="../../chronux_2_10/spectral_analysis/continuous/mtspecgramc.html" class="code" title="function [S,t,f,Serr]=mtspecgramc(data,movingwin,params)">mtspecgramc</a> Multi-taper time-frequency spectrum - continuous process</li><li><a href="auto_classify.html" class="code" title="function varargout = auto_classify(varargin)">auto_classify</a> AUTO_CLASSIFY M-file for auto_classify.fig</li><li><a href="configure_classify.html" class="code" title="function varargout = configure_classify(varargin)">configure_classify</a> CONFIGURE_CLASSIFY M-file for configure_classify.fig</li></ul>
  47. This function is called by:
  48. <ul style="list-style-image:url(../../matlabicon.gif)">
  49. </ul>
  50. <!-- crossreference -->
  51. <h2><a name="_subfunctions"></a>SUBFUNCTIONS <a href="#_top"><img alt="^" border="0" src="../../up.png"></a></h2>
  52. <ul style="list-style-image:url(../../matlabicon.gif)">
  53. <li><a href="#_sub1" class="code">function classify_spectra_OpeningFcn(hObject, eventdata, handles, varargin)</a></li><li><a href="#_sub2" class="code">function varargout = classify_spectra_OutputFcn(hObject, eventdata, handles)</a></li><li><a href="#_sub3" class="code">function DirectoryEditBox_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub4" class="code">function DirectoryEditBox_CreateFcn(hObject, eventdata, handles)</a></li><li><a href="#_sub5" class="code">function segments=LoadSegmentsFromDirectory(directory)</a></li><li><a href="#_sub6" class="code">function handles=Load_InitialSegments(hObject,handles)</a></li><li><a href="#_sub7" class="code">function handles = cindex2imagelist(handles)</a></li><li><a href="#_sub8" class="code">function mapindex = sortindexbypop(handles)</a></li><li><a href="#_sub9" class="code">function mapindex = sortindexbylength(handles)</a></li><li><a href="#_sub10" class="code">function class_string = newclassname(handles)</a></li><li><a href="#_sub11" class="code">function cindex = returnclassindex(handles,classname)</a></li><li><a href="#_sub12" class="code">function handles = add_new_class(handles,segment)</a></li><li><a href="#_sub13" class="code">function handles=ConfigureClassSegment(handles)</a></li><li><a href="#_sub14" class="code">function handles = blankaxes(handles)</a></li><li><a href="#_sub15" class="code">function ClassifyButton_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub16" class="code">function NewClassButton_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub17" class="code">function RemoveClassButton_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub18" class="code">function TypifyClassButton_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub19" class="code">function segment=precompute_spectra(handles, segment)</a></li><li><a href="#_sub20" class="code">function handles = precompute_AllSpectra(handles)</a></li><li><a href="#_sub21" class="code">function [S t f]=compute_spectra(data,tapers,Fs,fpass,movingwin)</a></li><li><a href="#_sub22" class="code">function handles=get_and_plot(handles, segment)</a></li><li><a href="#_sub23" class="code">function PlotModeCallBack(src,eventdata)</a></li><li><a href="#_sub24" class="code">function handles=ConfigureSpecPlot(handles)</a></li><li><a href="#_sub25" class="code">function NextSpectraButton_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub26" class="code">function PreviousSpectraButton_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub27" class="code">function PrecomputeButton_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub28" class="code">function PlaySegmentButton_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub29" class="code">function CurrentFilenameEdit_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub30" class="code">function CurrentFilenameEdit_CreateFcn(hObject, eventdata, handles)</a></li><li><a href="#_sub31" class="code">function newwidth = SmallAxes_width(handles)</a></li><li><a href="#_sub32" class="code">function iconS = iconify_spec(S,height)</a></li><li><a href="#_sub33" class="code">function destination = copy_into(destination,source,r,c)</a></li><li><a href="#_sub34" class="code">function positions = position_images(height,width,images_dim,xspacer,yspacer)</a></li><li><a href="#_sub35" class="code">function image_dim = get_image_sizes(images)</a></li><li><a href="#_sub36" class="code">function image_matrix = place_images_into(image_matrix, image_list, position_list)</a></li><li><a href="#_sub37" class="code">function IconList=get_SpecIcons(handles)</a></li><li><a href="#_sub38" class="code">function handles = plot_classified_axes(handles, image_list, position_list)</a></li><li><a href="#_sub39" class="code">function handles = reposition_images(handles, image_list)</a></li><li><a href="#_sub40" class="code">function nrow = which_row(positions,index)</a></li><li><a href="#_sub41" class="code">function cpositions = get_curr_position(handles)</a></li><li><a href="#_sub42" class="code">function cposition = next_row_start(positions,cposition)</a></li><li><a href="#_sub43" class="code">function cposition = next_row_end(positions,cposition)</a></li><li><a href="#_sub44" class="code">function handles = row_forward(handles)</a></li><li><a href="#_sub45" class="code">function cposition = previous_row_start(positions,cposition)</a></li><li><a href="#_sub46" class="code">function cposition = previous_row_end(positions,cposition)</a></li><li><a href="#_sub47" class="code">function nrows = number_of_rows(handles)</a></li><li><a href="#_sub48" class="code">function handles = row_backward(handles)</a></li><li><a href="#_sub49" class="code">function handles = BrowseDirectory(handles)</a></li><li><a href="#_sub50" class="code">function NextRowButton_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub51" class="code">function PreviousRowButton_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub52" class="code">function LoadDirectoryButton_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub53" class="code">function im_index = coordinate2index(handles,xpos,ypos)</a></li><li><a href="#_sub54" class="code">function setnavigationbuttons(handles)</a></li><li><a href="#_sub55" class="code">function setrowbuttons(handles)</a></li><li><a href="#_sub56" class="code">function DummyClassifyAxesClickCallBack(src,eventdata,handles)</a></li><li><a href="#_sub57" class="code">function ClassifyAxesClickCallBack(src,eventdata)</a></li><li><a href="#_sub58" class="code">function handles = configureclassview(handles,submode)</a></li><li><a href="#_sub59" class="code">function handles = SetModePopupMenu(handles,viewstring)</a></li><li><a href="#_sub60" class="code">function ModePopupMenu_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub61" class="code">function ModePopupMenu_CreateFcn(hObject, eventdata, handles)</a></li><li><a href="#_sub62" class="code">function set_status(handles, statusstring)</a></li><li><a href="#_sub63" class="code">function handles = configureclassmembers(handles,classname)</a></li><li><a href="#_sub64" class="code">function indexfilter = select_class(handles,segments,classname)</a></li><li><a href="#_sub65" class="code">function cindex = get_class_index(handles,classname);</a></li><li><a href="#_sub66" class="code">function value = mapind(index)</a></li><li><a href="#_sub67" class="code">function write_syllable_database(handles)</a></li><li><a href="#_sub68" class="code">function data = read_syllable_database(handles)</a></li><li><a href="#_sub69" class="code">function handles = merge_syllable_database(handles,data)</a></li><li><a href="#_sub70" class="code">function SaveButton_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub71" class="code">function SliderClassified_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub72" class="code">function SliderClassified_CreateFcn(hObject, eventdata, handles)</a></li><li><a href="#_sub73" class="code">function SortPopupMenu_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub74" class="code">function SortPopupMenu_CreateFcn(hObject, eventdata, handles)</a></li><li><a href="#_sub75" class="code">function segments = rename_segments(segments,oldname,newname)</a></li><li><a href="#_sub76" class="code">function cln = doesclassexist(classname,classes)</a></li><li><a href="#_sub77" class="code">function RenameClassButton_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub78" class="code">function spectras = subsamplespectra(spectra,lowerfreq,upperfreq,freqrange)</a></li><li><a href="#_sub79" class="code">function handles = generate_subsamples_icons(handles)</a></li><li><a href="#_sub80" class="code">function handles = ZoomSpectra(handles,status)</a></li><li><a href="#_sub81" class="code">function ZoomButton_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub82" class="code">function [meanl sdl] = stat_lengths(handles)</a></li><li><a href="#_sub83" class="code">function handles = quick_mode_exit(handles)</a></li><li><a href="#_sub84" class="code">function QuickModeButton_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub85" class="code">function handles=jump_to_unclassified(handles)</a></li><li><a href="#_sub86" class="code">function SkipButton_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub87" class="code">function UndoButton_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub88" class="code">function NewQuickButton_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub89" class="code">function CompareToggleButton_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub90" class="code">function handles = recompute_classifiedaxes(handles)</a></li><li><a href="#_sub91" class="code">function reposy(guielement,deltay)</a></li><li><a href="#_sub92" class="code">function reposelementsy(handles,deltay)</a></li><li><a href="#_sub93" class="code">function ResizeFcn(h, eventdata, handles, varargin)</a></li><li><a href="#_sub94" class="code">function truth = truthrange(range)</a></li><li><a href="#_sub95" class="code">function ConfigureButton_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub96" class="code">function status = save_configuration(handles,filename)</a></li><li><a href="#_sub97" class="code">function handles = load_configuration(handles,filename)</a></li><li><a href="#_sub98" class="code">function NextClassButton_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub99" class="code">function handles = features_segments(handles)</a></li><li><a href="#_sub100" class="code">function coefs = cepsfromspectra(specfilename,ncepestral)</a></li><li><a href="#_sub101" class="code">function classifymatrix = generate_classify_mat(handles)</a></li><li><a href="#_sub102" class="code">function handles = generate_classes_auto(handles,classification)</a></li><li><a href="#_sub103" class="code">function AutoClassifyButton_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub104" class="code">function FileMenu_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub105" class="code">function SaveItem_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub106" class="code">function LoadItem_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub107" class="code">function HelpMenu_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub108" class="code">function HelpItem_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub109" class="code">function AboutItem_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub110" class="code">function ConfigureItem_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub111" class="code">function coefs = cepcoefs(data,p)</a></li><li><a href="#_sub112" class="code">function generate_output(handles,absolutetime,filename);</a></li><li><a href="#_sub113" class="code">function ExportDataItem_Callback(hObject, eventdata, handles)</a></li><li><a href="#_sub114" class="code">function CleanDirectoryItem_Callback(hObject, eventdata, handles)</a></li></ul>
  54. <h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../../up.png"></a></h2>
  55. <div class="fragment"><pre>0001 <a name="_sub0" href="#_subfunctions" class="code">function varargout = classify_spectra(varargin)</a>
  56. 0002 <span class="comment">% CLASSIFY_SPECTRA M-file for classify_spectra.fig</span>
  57. 0003 <span class="comment">% CLASSIFY_SPECTRA, by itself, creates a new CLASSIFY_SPECTRA or raises the existing</span>
  58. 0004 <span class="comment">% singleton*.</span>
  59. 0005 <span class="comment">%</span>
  60. 0006 <span class="comment">% H = CLASSIFY_SPECTRA returns the handle to a new CLASSIFY_SPECTRA or</span>
  61. 0007 <span class="comment">% the handle to</span>
  62. 0008 <span class="comment">% the existing singleton*.</span>
  63. 0009 <span class="comment">%</span>
  64. 0010 <span class="comment">% CLASSIFY_SPECTRA('CALLBACK',hObject,eventData,handles,...) calls the local</span>
  65. 0011 <span class="comment">% function named CALLBACK in CLASSIFY_SPECTRA.M with the given input arguments.</span>
  66. 0012 <span class="comment">%</span>
  67. 0013 <span class="comment">% CLASSIFY_SPECTRA('Property','Value',...) creates a new CLASSIFY_SPECTRA or raises the</span>
  68. 0014 <span class="comment">% existing singleton*. Starting from the left, property value pairs are</span>
  69. 0015 <span class="comment">% applied to the GUI before classify_spectra_OpeningFunction gets called. An</span>
  70. 0016 <span class="comment">% unrecognized property name or invalid value makes property application</span>
  71. 0017 <span class="comment">% stop. All inputs are passed to classify_spectra_OpeningFcn via varargin.</span>
  72. 0018 <span class="comment">%</span>
  73. 0019 <span class="comment">% *See GUI Options on GUIDE's Tools menu. Choose &quot;GUI allows only one</span>
  74. 0020 <span class="comment">% instance to run (singleton)&quot;.</span>
  75. 0021 <span class="comment">%</span>
  76. 0022 <span class="comment">% See also: GUIDE, GUIDATA, GUIHANDLES</span>
  77. 0023
  78. 0024 <span class="comment">% Edit the above text to modify the response to help classify_spectra</span>
  79. 0025
  80. 0026 <span class="comment">% Last Modified by GUIDE v2.5 26-Jun-2006 23:19:22</span>
  81. 0027
  82. 0028 <span class="comment">% Begin initialization code - DO NOT EDIT</span>
  83. 0029 gui_Singleton = 1;
  84. 0030 gui_State = struct(<span class="string">'gui_Name'</span>, mfilename, <span class="keyword">...</span>
  85. 0031 <span class="string">'gui_Singleton'</span>, gui_Singleton, <span class="keyword">...</span>
  86. 0032 <span class="string">'gui_OpeningFcn'</span>, @<a href="#_sub1" class="code" title="subfunction classify_spectra_OpeningFcn(hObject, eventdata, handles, varargin)">classify_spectra_OpeningFcn</a>, <span class="keyword">...</span>
  87. 0033 <span class="string">'gui_OutputFcn'</span>, @<a href="#_sub2" class="code" title="subfunction varargout = classify_spectra_OutputFcn(hObject, eventdata, handles)">classify_spectra_OutputFcn</a>, <span class="keyword">...</span>
  88. 0034 <span class="string">'gui_LayoutFcn'</span>, [] , <span class="keyword">...</span>
  89. 0035 <span class="string">'gui_Callback'</span>, []);
  90. 0036 <span class="keyword">if</span> nargin &amp; isstr(varargin{1})
  91. 0037 gui_State.gui_Callback = str2func(varargin{1});
  92. 0038 <span class="keyword">end</span>
  93. 0039
  94. 0040 <span class="keyword">if</span> nargout
  95. 0041 [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
  96. 0042 <span class="keyword">else</span>
  97. 0043 gui_mainfcn(gui_State, varargin{:});
  98. 0044 <span class="keyword">end</span>
  99. 0045 <span class="comment">% End initialization code - DO NOT EDIT</span>
  100. 0046
  101. 0047 <span class="comment">% --- Executes just before classify_spectra is made visible.</span>
  102. 0048 <a name="_sub1" href="#_subfunctions" class="code">function classify_spectra_OpeningFcn(hObject, eventdata, handles, varargin)</a>
  103. 0049 <span class="comment">% This function has no output args, see OutputFcn.</span>
  104. 0050 <span class="comment">% hObject handle to figure</span>
  105. 0051 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  106. 0052 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  107. 0053 <span class="comment">% varargin command line arguments to classify_spectra (see VARARGIN)</span>
  108. 0054
  109. 0055 <span class="comment">% Choose default command line output for classify_spectra</span>
  110. 0056 handles.output = hObject;
  111. 0057
  112. 0058 <span class="comment">% Set defaults</span>
  113. 0059 handles.recompute = logical(1); <span class="comment">% Whether to recompute a spectra</span>
  114. 0060 handles.cwavfile = <span class="string">''</span>; <span class="comment">% The current wave file</span>
  115. 0061
  116. 0062 handles.directory = pwd;
  117. 0063
  118. 0064 handles.Fs = 44100; <span class="comment">% Frequency of audio sampling per second</span>
  119. 0065 handles.movingwin=[0.01 0.002]; <span class="comment">% Size of the moving window in seconds; the first number is the window size and the second is the step size</span>
  120. 0066 handles.tapers=[3 5];
  121. 0067 handles.pad=1;
  122. 0068 handles.fpass=[0 20000]; <span class="comment">% Range of frequency sampling</span>
  123. 0069
  124. 0070 handles.nsegments = 0; <span class="comment">% total number of segments</span>
  125. 0071 handles.NextIndex = 1; <span class="comment">% the index for segments</span>
  126. 0072 handles.maxseglength = 0; <span class="comment">% set in seconds</span>
  127. 0073
  128. 0074 <span class="comment">% ClassifyAxes handles</span>
  129. 0075
  130. 0076 handles.classified_height = 560 ; <span class="comment">% the height of the image in the classified axes</span>
  131. 0077 handles.classified_width = 450; <span class="comment">% the width of the image in the classified axes</span>
  132. 0078
  133. 0079 <span class="comment">%</span>
  134. 0080
  135. 0081 handles.plotmode = <span class="string">'spectra'</span>; <span class="comment">% The main spectra plot mode can also be</span>
  136. 0082 <span class="comment">% see plot modes</span>
  137. 0083
  138. 0084 handles.plotmodes = {<span class="string">'spectra'</span> <span class="string">'waveform'</span> <span class="string">'spectra_dt'</span> <span class="string">'spectra_df'</span> };
  139. 0085
  140. 0086 handles.plotmodevalue = 1;
  141. 0087
  142. 0088 <span class="comment">% set up a density measurement which will allow scaling</span>
  143. 0089
  144. 0090 classaxpos = get(handles.ClassifiedAxes,<span class="string">'Position'</span>);
  145. 0091 handles.classified_height_density = handles.classified_height / classaxpos(4);
  146. 0092 handles.classified_width_density = handles.classified_width / classaxpos(3);
  147. 0093
  148. 0094 handles.ispecheight = 100; <span class="comment">% fixed height of the iconized spectogram</span>
  149. 0095 handles.ismaxwidth = <a href="#_sub31" class="code" title="subfunction newwidth = SmallAxes_width(handles)">SmallAxes_width</a>(handles);
  150. 0096 handles.specpad = 0.02; <span class="comment">% pad in image sizes</span>
  151. 0097
  152. 0098 handles.xspacer = 5; <span class="comment">% fixed space between the images in the horizontal direction</span>
  153. 0099 handles.yspacer = 10; <span class="comment">% fixed space between the row of the images</span>
  154. 0100
  155. 0101 handles.xpsacer_density = handles.xspacer / classaxpos(3);
  156. 0102 handles.ypsacer_density = handles.yspacer / classaxpos(4);
  157. 0103
  158. 0104 handles.image_list = {}; <span class="comment">% holds an array of the specicons</span>
  159. 0105 handles.positions = []; <span class="comment">% holds the position of images on infinitely long canvas</span>
  160. 0106 handles.images_dim = []; <span class="comment">% holds the size of the images</span>
  161. 0107
  162. 0108 handles.mapindex = []; <span class="comment">% holds the position number for the segment</span>
  163. 0109
  164. 0110 handles.nimages = 0; <span class="comment">% total number of images or spectra</span>
  165. 0111 handles.number_rows = floor(handles.classified_height/(handles.yspacer + handles.ispecheight)); <span class="comment">% the number of rows allowed on a page</span>
  166. 0112
  167. 0113 handles.cnrows = 0; <span class="comment">% current number of rows</span>
  168. 0114
  169. 0115 handles.startpage = 1; <span class="comment">% an index for the first image on the page</span>
  170. 0116 handles.endpage = 1; <span class="comment">% an index for the last image on the page</span>
  171. 0117
  172. 0118 handles.startx = 1; <span class="comment">% for the classified axes holds the start position for the image</span>
  173. 0119 handles.endx = handles.classified_width; <span class="comment">% for the classified axes holds the end position for the image</span>
  174. 0120
  175. 0121 handles.mode = <span class="string">'browse'</span>; <span class="comment">% A string representing the current major mode which is either</span>
  176. 0122 <span class="comment">% 'browse','classify','class-view','class-members'</span>
  177. 0123
  178. 0124 handles.submode = <span class="string">'select'</span>; <span class="comment">%A string representing the minor mode which is either</span>
  179. 0125 <span class="comment">% 'select','select-class','remove-class', 'compare',</span>
  180. 0126 <span class="comment">% 'typify'</span>
  181. 0127
  182. 0128 handles.quickmode = logical(0); <span class="comment">% Quick mode allows quick classification with minimum</span>
  183. 0129 <span class="comment">% work for the user. By default this is set</span>
  184. 0130 <span class="comment">% off</span>
  185. 0131
  186. 0132 handles.lastsegment = 1; <span class="comment">% The last segment classified</span>
  187. 0133
  188. 0134
  189. 0135 handles.sortclass = <span class="string">'length'</span>; <span class="comment">% Tells how classes are to be ordered in the ClassifiedAxes</span>
  190. 0136 <span class="comment">% 'original' is the order the classes were created or loaded from</span>
  191. 0137 <span class="comment">% 'popularity' sort the classes with most popular first</span>
  192. 0138 <span class="comment">% 'length' sort the classes by longest</span>
  193. 0139 <span class="comment">% class first</span>
  194. 0140
  195. 0141 set(handles.SortPopupMenu,<span class="string">'Value'</span>,3);
  196. 0142
  197. 0143 handles.lastclass = 0;
  198. 0144
  199. 0145 handles.lowerfreq = 0; <span class="comment">% Lower frequency for zooming</span>
  200. 0146 handles.upperfreq = 7500; <span class="comment">% Upper frequency for zooming</span>
  201. 0147 handles.rezoom = logical(1);
  202. 0148
  203. 0149 handles.IconListf = {};
  204. 0150
  205. 0151 handles.baseclassname = <span class="string">'mockingbird'</span>; <span class="comment">% This string should be set by the user</span>
  206. 0152 <span class="comment">% used as the base class name</span>
  207. 0153 handles.nclasses = 0; <span class="comment">% total number of syllable classes</span>
  208. 0154 handles.classes = []; <span class="comment">% structure for holding class information</span>
  209. 0155 handles.current_class = 0; <span class="comment">% used by compare to go through classes</span>
  210. 0156
  211. 0157 handles.configschanged = logical(0); <span class="comment">% indicates whether the configs for spectra has changed</span>
  212. 0158
  213. 0159 handles.precomputed = logical(0);
  214. 0160
  215. 0161 handles.configfile = <span class="string">'class_spec.conf'</span>;
  216. 0162
  217. 0163 handles.originalsize = [0 0 170 44]; <span class="comment">% original position of the form</span>
  218. 0164 handles.originalaxessize = [80.5 6.375 86.167 34.438];
  219. 0165 handles.blank = logical(1); <span class="comment">% indicate that the ClassifiedAxes is blank</span>
  220. 0166 handles.prevsize = handles.originalsize;
  221. 0167
  222. 0168 handles.fixed = logical(1); <span class="comment">% Whether to use fixed scaling when resizing the form</span>
  223. 0169 <span class="comment">% initially set to true so not to call the repositioning algorithm when the</span>
  224. 0170 <span class="comment">% form is blank</span>
  225. 0171 handles.nfeatures = 10;
  226. 0172 handles.ncepestral = 10; <span class="comment">% Number of cepestral coefficients to include</span>
  227. 0173
  228. 0174 set(gcf, <span class="string">'ResizeFcn'</span>, {@<a href="#_sub93" class="code" title="subfunction ResizeFcn(h, eventdata, handles, varargin)">ResizeFcn</a>});
  229. 0175 <span class="comment">%classify_spectra('ResizeFcn',gcbo,[],guidata(gcbo))</span>
  230. 0176 <span class="comment">% Update handles structure</span>
  231. 0177 guidata(hObject, handles);
  232. 0178
  233. 0179 <span class="comment">% UIWAIT makes classify_spectra wait for user response (see UIRESUME)</span>
  234. 0180 <span class="comment">% uiwait(handles.figure1);</span>
  235. 0181
  236. 0182 <span class="comment">% --- Outputs from this function are returned to the command line.</span>
  237. 0183 <a name="_sub2" href="#_subfunctions" class="code">function varargout = classify_spectra_OutputFcn(hObject, eventdata, handles)</a>
  238. 0184 <span class="comment">% varargout cell array for returning output args (see VARARGOUT);</span>
  239. 0185 <span class="comment">% hObject handle to figure</span>
  240. 0186 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  241. 0187 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  242. 0188
  243. 0189 <span class="comment">% Get default command line output from handles structure</span>
  244. 0190 varargout{1} = handles.output;
  245. 0191
  246. 0192 <a name="_sub3" href="#_subfunctions" class="code">function DirectoryEditBox_Callback(hObject, eventdata, handles)</a>
  247. 0193 handles.directory = get(hObject,<span class="string">'String'</span>);
  248. 0194
  249. 0195 <a name="_sub4" href="#_subfunctions" class="code">function DirectoryEditBox_CreateFcn(hObject, eventdata, handles)</a>
  250. 0196 set(hObject,<span class="string">'string'</span>,pwd);
  251. 0197 guidata(gcbo,handles);
  252. 0198 <span class="keyword">if</span> ispc
  253. 0199 set(hObject,<span class="string">'BackgroundColor'</span>,<span class="string">'white'</span>);
  254. 0200 <span class="keyword">else</span>
  255. 0201 set(hObject,<span class="string">'BackgroundColor'</span>,get(0,<span class="string">'defaultUicontrolBackgroundColor'</span>));
  256. 0202 <span class="keyword">end</span>
  257. 0203
  258. 0204 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
  259. 0205 <span class="comment">% Functions for loading segments %</span>
  260. 0206 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
  261. 0207
  262. 0208 <a name="_sub5" href="#_subfunctions" class="code">function segments=LoadSegmentsFromDirectory(directory)</a>
  263. 0209 segfilelist = dir( [directory <span class="string">'\*'</span> <span class="string">'.seg.txt'</span>] );
  264. 0210 <span class="comment">%segfilelist;</span>
  265. 0211 nsegfile = length(segfilelist);
  266. 0212 segments = [];
  267. 0213 n = 1;
  268. 0214 <span class="keyword">while</span> n &lt;= nsegfile
  269. 0215 segfilename = segfilelist(n).name;
  270. 0216 fid=fopen( segfilename, <span class="string">'rt'</span> );
  271. 0217 <span class="keyword">if</span> fid ~= -1 <span class="comment">% if there is a seg file</span>
  272. 0218 scanned=fscanf( fid, <span class="string">'%g %g'</span>,[2 inf] );
  273. 0219 fclose(fid);
  274. 0220 <span class="comment">%fprintf( 'File %d of %d has %d segments: %s\n', n, nsegfile, size(scanned,2),segfilename );</span>
  275. 0221 wavfile = segfilename(1:(length(segfilename)-8)); <span class="comment">% can this be made more general</span>
  276. 0222 i = 1;
  277. 0223 <span class="keyword">while</span> i &lt;= size(scanned, 2) <span class="comment">% Load the start and stop of segments</span>
  278. 0224 segment.wavfile = wavfile;
  279. 0225 segment.class = <span class="string">''</span>; <span class="comment">% Loaded segments start out unclassified</span>
  280. 0226 segment.features = [];
  281. 0227 segment.start = scanned(1,i);
  282. 0228 segment.end = scanned(2,i);
  283. 0229 segment.specfilename = [segment.wavfile <span class="string">'.'</span> num2str(segment.start) <span class="string">'-'</span> num2str(segment.end) <span class="string">'.spec'</span>];
  284. 0230 segments = [ segments segment];
  285. 0231 i = i + 1;
  286. 0232 <span class="keyword">end</span>
  287. 0233 <span class="keyword">end</span>
  288. 0234 n = n + 1;
  289. 0235 <span class="keyword">end</span>
  290. 0236
  291. 0237 <a name="_sub6" href="#_subfunctions" class="code">function handles=Load_InitialSegments(hObject,handles)</a>
  292. 0238 <span class="comment">%handles.directory = pwd;</span>
  293. 0239 handles.segments = <a href="#_sub5" class="code" title="subfunction segments=LoadSegmentsFromDirectory(directory)">LoadSegmentsFromDirectory</a>(handles.directory);
  294. 0240 handles.nsegments = length(handles.segments);
  295. 0241 guidata(hObject, handles);
  296. 0242
  297. 0243 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
  298. 0244 <span class="comment">% Functions for handling syllable classes %</span>
  299. 0245 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
  300. 0246
  301. 0247 <a name="_sub7" href="#_subfunctions" class="code">function handles = cindex2imagelist(handles)</a>
  302. 0248 <span class="comment">% Takes a cindex and generates a a list of images</span>
  303. 0249 handles.image_list = {};
  304. 0250 <span class="comment">%load('-mat','specicons');</span>
  305. 0251 <span class="keyword">for</span> i = 1:length(handles.mapindex)
  306. 0252 handles.image_list{i} = handles.classes( handles.mapindex(i) ).iconS;
  307. 0253 <span class="keyword">end</span>
  308. 0254
  309. 0255 <a name="_sub8" href="#_subfunctions" class="code">function mapindex = sortindexbypop(handles)</a>
  310. 0256 <span class="comment">% Takes a cindex and sorts by the class popularity</span>
  311. 0257 nindexes = length(handles.mapindex);
  312. 0258 mapindex = [];
  313. 0259 <span class="keyword">for</span> i = 1:nindexes
  314. 0260 mapindex(i,1:2) = [handles.mapindex(i) handles.classes(handles.mapindex(i)).nmembers];
  315. 0261 <span class="keyword">end</span>
  316. 0262 mapindex = sortrows(mapindex, 2);
  317. 0263 mapindex = flipud(mapindex(:,1));
  318. 0264
  319. 0265 <a name="_sub9" href="#_subfunctions" class="code">function mapindex = sortindexbylength(handles)</a>
  320. 0266 <span class="comment">% Takes a cindex and sorts by the class popularity</span>
  321. 0267 nindexes = length(handles.mapindex);
  322. 0268 mapindex = [];
  323. 0269 <span class="keyword">for</span> i = 1:nindexes
  324. 0270 mapindex(i,1:2) = [handles.mapindex(i) handles.classes(handles.mapindex(i)).length];
  325. 0271 <span class="keyword">end</span>
  326. 0272 mapindex = sortrows(mapindex, 2);
  327. 0273 mapindex = flipud(mapindex(:,1));
  328. 0274
  329. 0275 <a name="_sub10" href="#_subfunctions" class="code">function class_string = newclassname(handles)</a>
  330. 0276 <span class="comment">% Generates a new name for the class string using the baseclassname</span>
  331. 0277 <span class="comment">% variable. Classes are numbered sequentially from the class with the largest number.</span>
  332. 0278
  333. 0279 nbaseclass = length(handles.baseclassname);
  334. 0280 classnum = 0;
  335. 0281 <span class="keyword">for</span> i = 1:handles.nclasses <span class="comment">% make sure the largest class number is gotten</span>
  336. 0282 classname = handles.classes(i).name;
  337. 0283 curr_classnum = str2num(classname(nbaseclass + 1:length(classname)));
  338. 0284 <span class="keyword">if</span> curr_classnum &gt; classnum
  339. 0285 classnum = curr_classnum;
  340. 0286 <span class="keyword">end</span>
  341. 0287 <span class="keyword">end</span>
  342. 0288 class_string = strcat(handles.baseclassname,num2str(classnum + 1));
  343. 0289 ;
  344. 0290
  345. 0291 <a name="_sub11" href="#_subfunctions" class="code">function cindex = returnclassindex(handles,classname)</a>
  346. 0292 <span class="comment">% Return the index to the class</span>
  347. 0293 cindex = 0;
  348. 0294 i = 1;
  349. 0295 <span class="keyword">while</span> (i &lt;= handles.nclasses) &amp;&amp; not(strcmp(classname,handles.classes(i).name))
  350. 0296 i = i + 1;
  351. 0297 <span class="keyword">end</span>
  352. 0298 cindex = i;
  353. 0299 ;
  354. 0300
  355. 0301 <a name="_sub12" href="#_subfunctions" class="code">function handles = add_new_class(handles,segment)</a>
  356. 0302 <span class="comment">% Segment is the class that will be used to typify the class</span>
  357. 0303 handles.nclasses = length(handles.classes);
  358. 0304 class.name = <a href="#_sub10" class="code" title="subfunction class_string = newclassname(handles)">newclassname</a>(handles);
  359. 0305 class.nmembers = 1; <span class="comment">% the number of segments which are members of this class</span>
  360. 0306 class.specfilename = segment.specfilename; <span class="comment">% specfilename will be used as a unique identifier</span>
  361. 0307 class.index = handles.NextIndex;
  362. 0308 <span class="comment">%load('-mat',class.specfilename);</span>
  363. 0309 class.iconS = handles.IconList{handles.NextIndex}; <span class="comment">% this is the icon which typifies the class</span>
  364. 0310 class.length = segment.end - segment.start; <span class="comment">% used to hold the lengt of the length</span>
  365. 0311
  366. 0312 handles.classes = [handles.classes class];
  367. 0313 handles.nclasses = handles.nclasses + 1;
  368. 0314 <span class="comment">%guidata(gcbo,handles);</span>
  369. 0315 ;
  370. 0316
  371. 0317 <a name="_sub13" href="#_subfunctions" class="code">function handles=ConfigureClassSegment(handles)</a>
  372. 0318 <span class="comment">% Handles the gui configuration of the class information when navigating</span>
  373. 0319 segment = handles.segments(handles.NextIndex);
  374. 0320 <span class="keyword">if</span> strcmp(segment.class,<span class="string">''</span>) <span class="comment">% Unclassified segment</span>
  375. 0321 set(handles.ClassifyButton,<span class="string">'String'</span>,<span class="string">'Classify'</span>);
  376. 0322 set(handles.ClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  377. 0323 <span class="keyword">else</span> <span class="comment">% Classified segment</span>
  378. 0324 set(handles.ClassifyButton,<span class="string">'String'</span>,<span class="string">'Declassify'</span>);
  379. 0325 set(handles.ClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  380. 0326 <span class="keyword">end</span>
  381. 0327 <span class="comment">%guidata(gcbo,handles);</span>
  382. 0328
  383. 0329 <a name="_sub14" href="#_subfunctions" class="code">function handles = blankaxes(handles)</a>
  384. 0330 set(handles.NextRowButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  385. 0331 set(handles.PreviousRowButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  386. 0332 axes(handles.ClassifiedAxes);
  387. 0333 handles.hiclass = image(uint8(zeros(handles.classified_height,handles.classified_width)));
  388. 0334 set(handles.ClassifiedAxes,<span class="string">'Xtick'</span>,[]);
  389. 0335 set(handles.ClassifiedAxes,<span class="string">'Ytick'</span>,[]);
  390. 0336 handles.blank = logical(1);
  391. 0337
  392. 0338 <span class="comment">% --- Executes on button press in ClassifyButton.</span>
  393. 0339 <a name="_sub15" href="#_subfunctions" class="code">function ClassifyButton_Callback(hObject, eventdata, handles)</a>
  394. 0340 <span class="comment">% hObject handle to ClassifyButton (see GCBO)</span>
  395. 0341 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  396. 0342 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  397. 0343
  398. 0344 status = get(handles.ClassifyButton,<span class="string">'String'</span>);
  399. 0345 set(handles.TypifyClassButton,<span class="string">'Visible'</span>, <span class="string">'off'</span>);
  400. 0346 set(handles.RemoveClassButton, <span class="string">'Visible'</span>, <span class="string">'off'</span>);
  401. 0347 set(handles.NextClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  402. 0348 <span class="comment">% set(handles.CompareToggleButton,'Visible','off');</span>
  403. 0349 set(handles.RenameClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  404. 0350 handles.startx = 1; <span class="comment">% if you have been scrolling reset to defaults</span>
  405. 0351 handles.endx = handles.classified_width;
  406. 0352 set(handles.SliderClassified,<span class="string">'Value'</span>,0);
  407. 0353
  408. 0354 <span class="keyword">if</span> strcmp(status,<span class="string">'Classify'</span>)
  409. 0355 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles,<span class="string">''</span>);
  410. 0356 set(handles.ModePopupMenu,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  411. 0357 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  412. 0358 set(handles.PreviousSpectraButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  413. 0359 set(handles.ClassifyButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  414. 0360 set(handles.CompareToggleButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  415. 0361 set(handles.QuickModeButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  416. 0362 set(handles.AutoClassifyButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  417. 0363 set(handles.NewClassButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
  418. 0364 <span class="keyword">if</span> handles.nclasses &gt; 0 <span class="comment">% Make sure there is at least one class</span>
  419. 0365 <span class="keyword">if</span> strcmp(handles.mode,<span class="string">'comparison'</span>) <span class="comment">% if you are in comparison mode</span>
  420. 0366 set(handles.NewClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  421. 0367 handles.segments(handles.NextIndex).class = handles.classes(handles.lastclass).name;
  422. 0368 set(handles.ModePopupMenu,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  423. 0369 set(handles.ClassifyButton,<span class="string">'String'</span>,<span class="string">'Declassify'</span>);
  424. 0370 set(handles.ClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  425. 0371 set(handles.CompareToggleButton,<span class="string">'value'</span>,0);
  426. 0372 set(handles.CompareToggleButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  427. 0373 handles = <a href="#_sub58" class="code" title="subfunction handles = configureclassview(handles,submode)">configureclassview</a>(handles,<span class="string">'select-class'</span>);
  428. 0374 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles, [<span class="string">'Viewing all '</span>, num2str(handles.nclasses),<span class="string">' classes'</span>]);
  429. 0375 set(handles.RemoveClassButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  430. 0376 set(handles.RemoveClassButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
  431. 0377 set(handles.QuickModeButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  432. 0378 set(handles.AutoClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  433. 0379 <a href="#_sub54" class="code" title="subfunction setnavigationbuttons(handles)">setnavigationbuttons</a>(handles);
  434. 0380 <span class="keyword">else</span> <span class="comment">% regular mode</span>
  435. 0381 set(handles.SortText,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
  436. 0382 set(handles.SortPopupMenu,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
  437. 0383 handles = <a href="#_sub58" class="code" title="subfunction handles = configureclassview(handles,submode)">configureclassview</a>(handles,<span class="string">'select-class'</span>);
  438. 0384 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles, [<span class="string">'Select a class'</span>]);
  439. 0385 <span class="keyword">end</span>
  440. 0386 <span class="keyword">else</span> <span class="comment">% draw a blank image</span>
  441. 0387 handles = <a href="#_sub14" class="code" title="subfunction handles = blankaxes(handles)">blankaxes</a>(handles);
  442. 0388 handles.mode = <span class="string">'class-view'</span>;
  443. 0389 handles.submode = <span class="string">'select-class'</span>;
  444. 0390 set(handles.hiclass,<span class="string">'ButtonDownFcn'</span>,{@<a href="#_sub56" class="code" title="subfunction DummyClassifyAxesClickCallBack(src,eventdata,handles)">DummyClassifyAxesClickCallBack</a>,handles});
  445. 0391 <span class="keyword">end</span>
  446. 0392 <span class="comment">% configure the remaining gui</span>
  447. 0393 handles = <a href="#_sub59" class="code" title="subfunction handles = SetModePopupMenu(handles,viewstring)">SetModePopupMenu</a>(handles,<span class="string">'class view'</span>);
  448. 0394 <span class="keyword">elseif</span> strcmp(status,<span class="string">'Declassify'</span>)
  449. 0395 cindex = <a href="#_sub11" class="code" title="subfunction cindex = returnclassindex(handles,classname)">returnclassindex</a>(handles,handles.segments(handles.NextIndex).class);
  450. 0396 <span class="keyword">if</span> handles.classes(cindex).nmembers == 1 <span class="comment">% Only one member left of that class</span>
  451. 0397 <span class="keyword">if</span> length(handles.classes) == 1 <span class="comment">% Only one class remaining</span>
  452. 0398 axes(handles.ClassifiedAxes);
  453. 0399 handles.classes = [];
  454. 0400 handles.nclasses = 0;
  455. 0401 handles = <a href="#_sub14" class="code" title="subfunction handles = blankaxes(handles)">blankaxes</a>(handles);
  456. 0402 <span class="keyword">else</span> <span class="comment">% remove the class</span>
  457. 0403 handles.classes = [handles.classes(1:cindex-1) handles.classes(cindex + 1:length(handles.classes))];
  458. 0404 handles.nclasses = handles.nclasses - 1;
  459. 0405 <span class="keyword">end</span>
  460. 0406 <span class="keyword">else</span>
  461. 0407 <span class="keyword">if</span> strcmp(handles.classes(cindex).specfilename,handles.segments(handles.NextIndex).specfilename)
  462. 0408 i = 1; <span class="comment">%Test if the class you are removing the type class</span>
  463. 0409 segs = [ handles.segments(1:(handles.NextIndex - 1)) handles.segments((handles.NextIndex + 1) : handles.nclasses)];
  464. 0410 <span class="keyword">while</span> (i &lt;= length(segs)) &amp;&amp; strcmp(segs(i).class,handles.classes(cindex).name)
  465. 0411 i = i + 1;
  466. 0412 <span class="keyword">end</span>
  467. 0413 handles.classes(cindex).specfilename = handles.segments(i).specfilename;
  468. 0414 handles.classes(cindex).length = handles.segments(i).end - handles.segments(i).start;
  469. 0415 handles.iconS = handles.IconList{i};
  470. 0416 <span class="keyword">end</span>
  471. 0417 handles.classes(cindex).nmembers = handles.classes(cindex).nmembers - 1;
  472. 0418 <span class="keyword">end</span>
  473. 0419 handles.segments(handles.NextIndex).class = <span class="string">''</span>; <span class="comment">% Remove class information</span>
  474. 0420 <span class="keyword">if</span> handles.nclasses &gt;= 1 <span class="comment">% Redraw axes</span>
  475. 0421 <span class="keyword">if</span> strcmp(handles.mode,<span class="string">'class-view'</span>)
  476. 0422 handles = <a href="#_sub58" class="code" title="subfunction handles = configureclassview(handles,submode)">configureclassview</a>(handles,<span class="string">'select'</span>);
  477. 0423 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles,[<span class="string">'Viewing all '</span> num2str(handles.nclasses) <span class="string">' classes'</span>]);
  478. 0424 <span class="keyword">elseif</span> strcmp(handles.mode,<span class="string">'class-members'</span>)
  479. 0425 handles = <a href="#_sub63" class="code" title="subfunction handles = configureclassmembers(handles,classname)">configureclassmembers</a>(handles,handles.classes(cindex).name);
  480. 0426 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles,[<span class="string">'Viewing '</span> num2str(handles.classes(cindex).nmembers) <span class="string">' members of '</span> num2str(handles.classes(cindex).name)]);
  481. 0427 <span class="keyword">elseif</span> strcmp(handles.mode,<span class="string">'browse'</span>)
  482. 0428 ; <span class="comment">% do nothing</span>
  483. 0429 <span class="keyword">end</span>
  484. 0430 <span class="keyword">end</span>
  485. 0431 set(handles.ClassifyButton,<span class="string">'String'</span>,<span class="string">'Classify'</span>);
  486. 0432
  487. 0433 <a href="#_sub54" class="code" title="subfunction setnavigationbuttons(handles)">setnavigationbuttons</a>(handles);
  488. 0434 <span class="keyword">end</span>
  489. 0435 guidata(gcbo,handles);
  490. 0436
  491. 0437
  492. 0438 <span class="comment">% --- Executes on button press in NewClassButton.</span>
  493. 0439 <a name="_sub16" href="#_subfunctions" class="code">function NewClassButton_Callback(hObject, eventdata, handles)</a>
  494. 0440 <span class="comment">% hObject handle to NewClassButton (see GCBO)</span>
  495. 0441 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  496. 0442 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  497. 0443
  498. 0444 handles.startx = 1; <span class="comment">% if you have been scrolling reset to defaults</span>
  499. 0445 handles.endx = handles.classified_width;
  500. 0446 set(handles.SliderClassified,<span class="string">'Value'</span>,0);
  501. 0447
  502. 0448 handles = <a href="#_sub12" class="code" title="subfunction handles = add_new_class(handles,segment)">add_new_class</a>(handles,handles.segments(handles.NextIndex));
  503. 0449 handles.segments(handles.NextIndex).class = handles.classes(handles.nclasses).name;
  504. 0450
  505. 0451 set(handles.SortText,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  506. 0452 set(handles.SortPopupMenu,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  507. 0453 set(handles.ClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  508. 0454 set(handles.ClassifyButton,<span class="string">'String'</span>,<span class="string">'Declassify'</span>);
  509. 0455 set(handles.NewClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  510. 0456 set(handles.ModePopupMenu,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  511. 0457 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  512. 0458 set(handles.CompareToggleButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  513. 0459 set(handles.QuickModeButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  514. 0460 set(handles.AutoClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  515. 0461 set(handles.PreviousSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  516. 0462 handles = <a href="#_sub58" class="code" title="subfunction handles = configureclassview(handles,submode)">configureclassview</a>(handles,<span class="string">'xxx'</span>);
  517. 0463 <a href="#_sub54" class="code" title="subfunction setnavigationbuttons(handles)">setnavigationbuttons</a>(handles);
  518. 0464 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles,<span class="string">''</span>);
  519. 0465 handles = <a href="#_sub59" class="code" title="subfunction handles = SetModePopupMenu(handles,viewstring)">SetModePopupMenu</a>(handles,<span class="string">'class view'</span>);
  520. 0466 guidata(gcbo,handles);
  521. 0467 ;
  522. 0468
  523. 0469 <span class="comment">% --- Executes on button press in RemoveClassButton.</span>
  524. 0470 <a name="_sub17" href="#_subfunctions" class="code">function RemoveClassButton_Callback(hObject, eventdata, handles)</a>
  525. 0471 <span class="comment">% hObject handle to RemoveClassButton (see GCBO)</span>
  526. 0472 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  527. 0473 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  528. 0474
  529. 0475 <span class="comment">%set(handles.TypifyClassButton,'Enable','on');</span>
  530. 0476 set(handles.RemoveClassButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  531. 0477 handles.mode = <span class="string">'class-view'</span>;
  532. 0478 handles.submode = <span class="string">'remove-class'</span>;
  533. 0479 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles,<span class="string">'Select a class to remove'</span>);
  534. 0480 guidata(gcbo,handles);
  535. 0481
  536. 0482
  537. 0483 <span class="comment">% --- Executes on button press in TypifyClassButton.</span>
  538. 0484 <a name="_sub18" href="#_subfunctions" class="code">function TypifyClassButton_Callback(hObject, eventdata, handles)</a>
  539. 0485 <span class="comment">% hObject handle to TypifyClassButton (see GCBO)</span>
  540. 0486 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  541. 0487 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  542. 0488
  543. 0489 set(handles.TypifyClassButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  544. 0490 <span class="comment">%set(handles.RemoveClassButton,'Enable','on');</span>
  545. 0491 handles.mode = <span class="string">'class-members'</span>;
  546. 0492 handles.submode = <span class="string">'typify'</span>;
  547. 0493 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles,<span class="string">'Select an icon to change the type'</span>);
  548. 0494 guidata(gcbo,handles);
  549. 0495
  550. 0496 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
  551. 0497 <span class="comment">% Functions for computing the spectra %</span>
  552. 0498 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
  553. 0499
  554. 0500 <a name="_sub19" href="#_subfunctions" class="code">function segment=precompute_spectra(handles, segment) </a>
  555. 0501 <span class="comment">% This function will do the precomputing of the spectragram</span>
  556. 0502 spec_ipad = round(handles.specpad * handles.Fs);
  557. 0503 spec_istart = round(segment.start * handles.Fs);
  558. 0504 spec_iend = round(segment.end * handles.Fs);
  559. 0505
  560. 0506 <span class="comment">% This is to catch an over and under run errors in the wav file because of the padding</span>
  561. 0507 <span class="keyword">try</span>
  562. 0508 [data] = wavread(segment.wavfile, [spec_istart - spec_ipad, spec_iend + spec_ipad]);
  563. 0509 <span class="keyword">catch</span>
  564. 0510 errmsg = lasterr;
  565. 0511 <span class="keyword">if</span> strfind(errmsg, <span class="string">'Sample limits out of range'</span>)
  566. 0512 <span class="keyword">if</span> (segment.start - handles.specpad) &lt; 0 <span class="comment">% Make sure the starting point is not negative</span>
  567. 0513 [data] = wavread(segment.wavfile, [1 spec_iend + spec_ipad]);
  568. 0514 <span class="keyword">else</span> <span class="comment">% over run of the buffer</span>
  569. 0515 [data] = wavread(segment.wavfile);
  570. 0516 [data] = data((spec_istart - spec_ipad):length(data));
  571. 0517 <span class="keyword">end</span>
  572. 0518 <span class="keyword">end</span>
  573. 0519 <span class="keyword">end</span>
  574. 0520
  575. 0521 [Sfull tfull f] = <a href="#_sub21" class="code" title="subfunction [S t f]=compute_spectra(data,tapers,Fs,fpass,movingwin)">compute_spectra</a>(data,handles.tapers,handles.Fs,handles.fpass,handles.movingwin); <span class="comment">% precompute the portion</span>
  576. 0522
  577. 0523 wavlength = length(data);
  578. 0524 Ssize = size(Sfull);
  579. 0525
  580. 0526 Slength = Ssize(2);
  581. 0527 RatioWS = Slength / (wavlength / handles.Fs); <span class="comment">% this allows us to index by time through spec file</span>
  582. 0528
  583. 0529 Sstart = round(RatioWS * segment.start);
  584. 0530 Send = round(RatioWS * segment.end);
  585. 0531 Spad = round(RatioWS * handles.specpad);
  586. 0532
  587. 0533 Spre = Sfull(:,1:Spad);
  588. 0534 S = Sfull(:,Spad+1:Spad + Send-Sstart);
  589. 0535 Spost = Sfull(:,Spad + (Send-Sstart)+1:Slength);
  590. 0536 t=[segment.start, segment.end];
  591. 0537
  592. 0538 iconS = <a href="#_sub32" class="code" title="subfunction iconS = iconify_spec(S,height)">iconify_spec</a>(S,handles.ispecheight);
  593. 0539
  594. 0540 save(segment.specfilename,<span class="string">'S'</span>,<span class="string">'t'</span>,<span class="string">'f'</span>,<span class="string">'Spre'</span>,<span class="string">'Spost'</span>,<span class="string">'RatioWS'</span>,<span class="string">'tfull'</span>,<span class="string">'iconS'</span>,<span class="string">'-mat'</span>);
  595. 0541
  596. 0542 fprintf(<span class="string">'Saving %s file\n'</span>,segment.specfilename);
  597. 0543
  598. 0544 <a name="_sub20" href="#_subfunctions" class="code">function handles = precompute_AllSpectra(handles)</a>
  599. 0545 <span class="comment">% This function precomputes all the spectra in a directory</span>
  600. 0546 hw = waitbar(0,<span class="string">'Precomputing spectra. . .'</span>);
  601. 0547 <span class="keyword">if</span> handles.nsegments &gt;= 1
  602. 0548 <span class="keyword">for</span> i = 1:handles.nsegments
  603. 0549 <a href="#_sub19" class="code" title="subfunction segment=precompute_spectra(handles, segment)">precompute_spectra</a>(handles,handles.segments(i));
  604. 0550 waitbar(i/handles.nsegments);
  605. 0551 <span class="keyword">end</span>
  606. 0552 <span class="keyword">end</span>
  607. 0553 <a href="../../chronux_2_10/fly_track/videoIO/videoIO_2006a/@videoReader/close.html" class="code" title="function vr = close(vr)">close</a>(hw);
  608. 0554 handles.IconList = <a href="#_sub37" class="code" title="subfunction IconList=get_SpecIcons(handles)">get_SpecIcons</a>(handles);
  609. 0555 ;
  610. 0556 <a name="_sub21" href="#_subfunctions" class="code">function [S t f]=compute_spectra(data,tapers,Fs,fpass,movingwin)</a>
  611. 0557 data = data / std(data); <span class="comment">% normalize the variance of the spectra</span>
  612. 0558 params.tapers=tapers; params.Fs=Fs; params.fpass=fpass;
  613. 0559 [S t f] = <a href="../../chronux_2_10/spectral_analysis/continuous/mtspecgramc.html" class="code" title="function [S,t,f,Serr]=mtspecgramc(data,movingwin,params)">mtspecgramc</a>( diff(data), movingwin, params );
  614. 0560 S = log(S)';
  615. 0561
  616. 0562
  617. 0563 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
  618. 0564 <span class="comment">% Functions for plotting the spectragram %</span>
  619. 0565 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
  620. 0566
  621. 0567 <a name="_sub22" href="#_subfunctions" class="code">function handles=get_and_plot(handles, segment)</a>
  622. 0568 load(<span class="string">'-mat'</span>,segment.specfilename);
  623. 0569 axes(handles.ToClassifyAxes);
  624. 0570 <span class="comment">% RatioWS</span>
  625. 0571
  626. 0572 cmap = jet(256);
  627. 0573
  628. 0574 <span class="keyword">if</span> strcmp(handles.plotmode,<span class="string">'spectra'</span>)
  629. 0575 SFull = cat(2,Spre,S,Spost);
  630. 0576 <span class="keyword">elseif</span> strcmp(handles.plotmode,<span class="string">'spectra_dt'</span>) || strcmp(handles.plotmode,<span class="string">'spectra_df'</span>) || strcmp(handles.plotmode,<span class="string">'waveform'</span>)
  631. 0577 wav_ipad = round(handles.specpad * handles.Fs);
  632. 0578 wav_istart = round(segment.start * handles.Fs);
  633. 0579 wav_iend = round(segment.end * handles.Fs);
  634. 0580
  635. 0581 <span class="comment">% This is to catch an over and under run errors in the wav file because of the padding</span>
  636. 0582 <span class="keyword">try</span>
  637. 0583 [data] = wavread(segment.wavfile, [wav_istart - wav_ipad, wav_iend + wav_ipad]);
  638. 0584 <span class="keyword">catch</span>
  639. 0585 errmsg = lasterr;
  640. 0586 <span class="keyword">if</span> strfind(errmsg, <span class="string">'Sample limits out of range'</span>)
  641. 0587 <span class="keyword">if</span> (segment.start - handles.specpad) &lt; 0 <span class="comment">% Make sure the starting point is not negative</span>
  642. 0588 [data] = wavread(segment.wavfile, [1 wav_iend + wav_ipad]);
  643. 0589 <span class="keyword">else</span> <span class="comment">% over run of the buffer</span>
  644. 0590 [data] = wavread(segment.wavfile);
  645. 0591 [data] = data((wav_istart - wav_ipad):length(data));
  646. 0592 <span class="keyword">end</span>
  647. 0593 <span class="keyword">end</span>
  648. 0594 <span class="keyword">end</span>
  649. 0595
  650. 0596 data = data / std(data);
  651. 0597
  652. 0598 params.Fs=handles.Fs;
  653. 0599 params.tapers = handles.tapers;
  654. 0600 params.fpass=handles.fpass;
  655. 0601 params.pad = 1;
  656. 0602
  657. 0603 <span class="keyword">if</span> strcmp(handles.plotmode,<span class="string">'spectra_dt'</span>)
  658. 0604 cmap = gray(256);
  659. 0605 [SFull t f]= <a href="../../chronux_2_10/spectral_analysis/continuous/mtdspecgramc.html" class="code" title="function [dS,t,f]=mtdspecgramc(data,movingwin,phi,params)">mtdspecgramc</a>(diff(data),handles.movingwin,0,params); SFull=SFull';
  660. 0606 <span class="keyword">elseif</span> strcmp(handles.plotmode,<span class="string">'spectra_df'</span>)
  661. 0607 cmap = gray(256);
  662. 0608 [SFull t f]= <a href="../../chronux_2_10/spectral_analysis/continuous/mtdspecgramc.html" class="code" title="function [dS,t,f]=mtdspecgramc(data,movingwin,phi,params)">mtdspecgramc</a>(diff(data),handles.movingwin,pi/2,params); SFull=SFull';
  663. 0609 <span class="keyword">end</span>
  664. 0610 <span class="keyword">end</span>
  665. 0611
  666. 0612 <span class="keyword">if</span> strcmp(handles.plotmode,<span class="string">'spectra'</span>) || strcmp(handles.plotmode,<span class="string">'spectra_dt'</span>) || strcmp(handles.plotmode,<span class="string">'spectra_df'</span>)
  667. 0613
  668. 0614 cmap(1,:) = [1, 1, 1];
  669. 0615 colormap(cmap);
  670. 0616
  671. 0617 SFmin = min(min(SFull));
  672. 0618 SFmax = max(max(SFull));
  673. 0619 SFull = uint8(1 + round(255 * (SFull-SFmin) / (SFmax-SFmin)));
  674. 0620
  675. 0621 hi = image(tfull + segment.start - handles.specpad,f,SFull);
  676. 0622 set(hi,<span class="string">'ButtonDownFcn'</span>,{@<a href="#_sub23" class="code" title="subfunction PlotModeCallBack(src,eventdata)">PlotModeCallBack</a>});
  677. 0623
  678. 0624 axis xy;
  679. 0625
  680. 0626 hline1 = line([segment.start segment.start],[f(1) max(f)],<span class="string">'Color'</span>,[0 0 0],<span class="string">'LineWidth'</span>,3);
  681. 0627 hline2 = line([segment.end segment.end],[f(1),max(f)],<span class="string">'Color'</span>,[0 0 0],<span class="string">'LineWidth'</span>,3);
  682. 0628
  683. 0629 <span class="keyword">else</span>
  684. 0630
  685. 0631 <span class="comment">% xlim([tfull(1) tfull(length(tfull))] + segment.start - handles.specpad);</span>
  686. 0632
  687. 0633 hp = plot(segment.start - handles.specpad + [0:length(data)-1] / handles.Fs, data);
  688. 0634 set(handles.ToClassifyAxes,<span class="string">'YLim'</span>,[-5 5]);
  689. 0635 set(hp,<span class="string">'ButtonDownFcn'</span>,{@<a href="#_sub23" class="code" title="subfunction PlotModeCallBack(src,eventdata)">PlotModeCallBack</a>});
  690. 0636 axis tight;
  691. 0637
  692. 0638 dataspan = [min(data) max(data)];
  693. 0639
  694. 0640 hline1 = line([segment.start segment.start],dataspan,<span class="string">'Color'</span>,[0 0 0],<span class="string">'LineWidth'</span>,3);
  695. 0641 hline2 = line([segment.end segment.end],dataspan,<span class="string">'Color'</span>,[0 0 0],<span class="string">'LineWidth'</span>,3);
  696. 0642
  697. 0643 <span class="keyword">end</span>
  698. 0644
  699. 0645 axes(handles.ToClassifySmallAxes);
  700. 0646 ispecFull = uint8(zeros(handles.ispecheight,handles.ismaxwidth));
  701. 0647
  702. 0648 ispecFull = <a href="#_sub33" class="code" title="subfunction destination = copy_into(destination,source,r,c)">copy_into</a>(ispecFull,handles.IconList{handles.NextIndex},1,1);
  703. 0649
  704. 0650 <span class="keyword">if</span> length(ispecFull(1,:)) &gt; handles.ismaxwidth
  705. 0651 ispecFull = ispecFull(:,1:handles.ismaxwidth);
  706. 0652 <span class="keyword">end</span>
  707. 0653
  708. 0654 <span class="keyword">if</span> strcmp(get(handles.ZoomButton,<span class="string">'String'</span>),<span class="string">'Zoom out'</span>)
  709. 0655 f = [handles.lowerfreq handles.upperfreq];
  710. 0656 <span class="keyword">end</span>
  711. 0657
  712. 0658 tsmall = [handles.movingwin(1),handles.ismaxwidth * handles.movingwin(2) - handles.movingwin(1)];
  713. 0659 <span class="comment">%</span>
  714. 0660 <span class="comment">% cmap = jet(256);</span>
  715. 0661 <span class="comment">% cmap(1,:) = [1, 1, 1];</span>
  716. 0662 <span class="comment">%</span>
  717. 0663 <span class="comment">% colormap(cmap);</span>
  718. 0664
  719. 0665 <span class="comment">% [0 (handles.ismaxwidth * (segment.end - segment.start))/length(iconS(1,:))]</span>
  720. 0666 ih = image(tsmall,f,flipud(ispecFull));
  721. 0667 axis xy;
  722. 0668 ;
  723. 0669
  724. 0670 <a name="_sub23" href="#_subfunctions" class="code">function PlotModeCallBack(src,eventdata)</a>
  725. 0671 <span class="comment">% A Function for handling clicks to the axes</span>
  726. 0672 handles = guidata(gcbo);
  727. 0673
  728. 0674 handles.plotmodevalue = handles.plotmodevalue + 1;
  729. 0675
  730. 0676 <span class="keyword">if</span> handles.plotmodevalue &gt; length(handles.plotmodes)
  731. 0677 handles.plotmodevalue = 1;
  732. 0678 <span class="keyword">end</span>
  733. 0679
  734. 0680 handles.plotmode = handles.plotmodes{handles.plotmodevalue};
  735. 0681 handles=<a href="#_sub22" class="code" title="subfunction handles=get_and_plot(handles, segment)">get_and_plot</a>(handles, handles.segments(handles.NextIndex));
  736. 0682
  737. 0683 guidata(gcf,handles);
  738. 0684
  739. 0685 <a name="_sub24" href="#_subfunctions" class="code">function handles=ConfigureSpecPlot(handles)</a>
  740. 0686 <span class="comment">% Handles the gui configuration of the plotting</span>
  741. 0687 segment = handles.segments(handles.NextIndex);
  742. 0688 <span class="keyword">if</span> not(exist(segment.specfilename)) || handles.recompute
  743. 0689 <a href="#_sub19" class="code" title="subfunction segment=precompute_spectra(handles, segment)">precompute_spectra</a>(handles,segment);
  744. 0690 <span class="keyword">end</span>
  745. 0691
  746. 0692 set(handles.ToClassifyPanel,<span class="string">'Title'</span>,[<span class="string">'Segment '</span> num2str(handles.NextIndex) <span class="string">'/'</span> num2str(handles.nsegments)])
  747. 0693
  748. 0694 segmentstatus = [<span class="string">'File: &quot;'</span> segment.wavfile <span class="string">'&quot;; Segment length '</span> num2str(segment.end - segment.start,3)];
  749. 0695
  750. 0696 set(handles.SegmentText,<span class="string">'String'</span>,segmentstatus);
  751. 0697 handles = <a href="#_sub22" class="code" title="subfunction handles=get_and_plot(handles, segment)">get_and_plot</a>(handles, segment);
  752. 0698 guidata(gcbo,handles);
  753. 0699 ;
  754. 0700
  755. 0701 <a name="_sub25" href="#_subfunctions" class="code">function NextSpectraButton_Callback(hObject, eventdata, handles)</a>
  756. 0702 <span class="comment">% Moves the segment viewer forward one segment</span>
  757. 0703 handles.NextIndex = handles.NextIndex + 1;
  758. 0704 <span class="keyword">if</span> handles.NextIndex == handles.nsegments
  759. 0705 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  760. 0706 <span class="keyword">end</span>
  761. 0707
  762. 0708 <span class="keyword">if</span> handles.NextIndex &gt; 1
  763. 0709 set(handles.PreviousSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  764. 0710 <span class="keyword">end</span>
  765. 0711
  766. 0712 handles=<a href="#_sub13" class="code" title="subfunction handles=ConfigureClassSegment(handles)">ConfigureClassSegment</a>(handles);
  767. 0713 handles=<a href="#_sub24" class="code" title="subfunction handles=ConfigureSpecPlot(handles)">ConfigureSpecPlot</a>(handles);
  768. 0714 guidata(gcbo,handles);
  769. 0715 ;
  770. 0716
  771. 0717 <a name="_sub26" href="#_subfunctions" class="code">function PreviousSpectraButton_Callback(hObject, eventdata, handles)</a>
  772. 0718 <span class="comment">% Moves the segment viewer backwards one segment</span>
  773. 0719 handles.NextIndex = handles.NextIndex - 1;
  774. 0720
  775. 0721 <span class="keyword">if</span> handles.NextIndex == 1
  776. 0722 set(handles.PreviousSpectraButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  777. 0723 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  778. 0724 <span class="keyword">end</span>
  779. 0725
  780. 0726 <span class="keyword">if</span> handles.NextIndex &lt; handles.nsegments
  781. 0727 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  782. 0728 <span class="keyword">end</span>
  783. 0729
  784. 0730 handles=<a href="#_sub13" class="code" title="subfunction handles=ConfigureClassSegment(handles)">ConfigureClassSegment</a>(handles);
  785. 0731 handles=<a href="#_sub24" class="code" title="subfunction handles=ConfigureSpecPlot(handles)">ConfigureSpecPlot</a>(handles);
  786. 0732
  787. 0733 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  788. 0734 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  789. 0735 guidata(gcbo,handles);
  790. 0736 ;
  791. 0737
  792. 0738 <a name="_sub27" href="#_subfunctions" class="code">function PrecomputeButton_Callback(hObject, eventdata, handles)</a>
  793. 0739 <span class="comment">% Call back for the precompute button. This acts to load the file from the directory</span>
  794. 0740
  795. 0741 handles.directory = get(handles.DirectoryEditBox,<span class="string">'String'</span>);
  796. 0742
  797. 0743 <span class="comment">% fprintf('creating syllable list\n');</span>
  798. 0744 <span class="comment">%handles.segments = segments;</span>
  799. 0745 handles.classes = [];
  800. 0746 set(handles.PrecomputeButton, <span class="string">'Enable'</span>, <span class="string">'off'</span> );
  801. 0747 handles.NextIndex = 1;
  802. 0748
  803. 0749 handles = <a href="#_sub6" class="code" title="subfunction handles=Load_InitialSegments(hObject,handles)">Load_InitialSegments</a>(hObject,handles);
  804. 0750 handles.recompute = logical(0);
  805. 0751
  806. 0752 <span class="keyword">if</span> handles.nsegments &gt;= 1
  807. 0753 handles=<a href="#_sub13" class="code" title="subfunction handles=ConfigureClassSegment(handles)">ConfigureClassSegment</a>(handles);
  808. 0754
  809. 0755 handles = <a href="#_sub97" class="code" title="subfunction handles = load_configuration(handles,filename)">load_configuration</a>(handles,handles.configfile);
  810. 0756
  811. 0757 <span class="keyword">if</span> exist([handles.baseclassname <span class="string">'.dat'</span>]) &amp;&amp; not(handles.configschanged)
  812. 0758 load(<span class="string">'-mat'</span>,<span class="string">'specicons'</span>);
  813. 0759 handles.IconList = IconList;
  814. 0760 data = <a href="#_sub68" class="code" title="subfunction data = read_syllable_database(handles)">read_syllable_database</a>(handles);
  815. 0761 handles = <a href="#_sub69" class="code" title="subfunction handles = merge_syllable_database(handles,data)">merge_syllable_database</a>(handles,data);
  816. 0762 <span class="keyword">else</span>
  817. 0763 handles = <a href="#_sub20" class="code" title="subfunction handles = precompute_AllSpectra(handles)">precompute_AllSpectra</a>(handles);
  818. 0764 <span class="keyword">end</span>
  819. 0765
  820. 0766 <span class="comment">%set(handles.ConfigureButton, 'Enable','off');</span>
  821. 0767 handles=<a href="#_sub24" class="code" title="subfunction handles=ConfigureSpecPlot(handles)">ConfigureSpecPlot</a>(handles);
  822. 0768 handles=<a href="#_sub49" class="code" title="subfunction handles = BrowseDirectory(handles)">BrowseDirectory</a>(handles);
  823. 0769 handles.precomputed = logical(1);
  824. 0770 set(handles.PlaySegmentButton, <span class="string">'Enable'</span>, <span class="string">'on'</span> );
  825. 0771 set(handles.NextSpectraButton, <span class="string">'Enable'</span>, <span class="string">'on'</span> );
  826. 0772 set(handles.ModePopupMenu,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  827. 0773 set(handles.SaveButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  828. 0774 set(handles.SaveItem,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  829. 0775 set(handles.PrecomputeButton, <span class="string">'Enable'</span>, <span class="string">'off'</span> );
  830. 0776 set(handles.CleanDirectoryItem, <span class="string">'Enable'</span>, <span class="string">'off'</span> );
  831. 0777 set(handles.LoadDirectoryButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  832. 0778 set(handles.LoadItem,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  833. 0779 set(handles.ZoomButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  834. 0780 set(handles.QuickModeButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  835. 0781 set(handles.CompareToggleButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  836. 0782 set(handles.ConfigureButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  837. 0783 set(handles.ConfigureItem,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  838. 0784 set(handles.AutoClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  839. 0785
  840. 0786 handles.fixed = logical(0); <span class="comment">% turn off fixed scaling</span>
  841. 0787
  842. 0788 <span class="keyword">if</span> not(strcmp(handles.segments(handles.NextIndex).class,<span class="string">''</span>)) <span class="comment">% Set the classification status</span>
  843. 0789 set(handles.ClassifyButton,<span class="string">'String'</span>,<span class="string">'Declassify'</span>);
  844. 0790 <span class="keyword">end</span>
  845. 0791
  846. 0792 <span class="keyword">else</span>
  847. 0793 set(handles.PrecomputeButton, <span class="string">'Enable'</span>, <span class="string">'on'</span> );
  848. 0794 <span class="keyword">end</span>
  849. 0795 guidata(gcbo,handles);
  850. 0796 ;
  851. 0797
  852. 0798 <span class="comment">% --- Executes on button press in PlaySegmentButton.</span>
  853. 0799
  854. 0800 <a name="_sub28" href="#_subfunctions" class="code">function PlaySegmentButton_Callback(hObject, eventdata, handles)</a>
  855. 0801 <span class="comment">% Plays the current segment in the segment viewer</span>
  856. 0802 <span class="comment">% hObject handle to PlaySegmentButton (see GCBO)</span>
  857. 0803 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  858. 0804 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  859. 0805 segment = handles.segments(handles.NextIndex);
  860. 0806 data = wavread(segment.wavfile,[round(handles.Fs * segment.start),round(handles.Fs * segment.end)]);
  861. 0807 wavplay(data,handles.Fs,<span class="string">'async'</span>);
  862. 0808
  863. 0809
  864. 0810 <a name="_sub29" href="#_subfunctions" class="code">function CurrentFilenameEdit_Callback(hObject, eventdata, handles)</a>
  865. 0811
  866. 0812 <a name="_sub30" href="#_subfunctions" class="code">function CurrentFilenameEdit_CreateFcn(hObject, eventdata, handles)</a>
  867. 0813 <span class="keyword">if</span> ispc
  868. 0814 set(hObject,<span class="string">'BackgroundColor'</span>,<span class="string">'white'</span>);
  869. 0815 <span class="keyword">else</span>
  870. 0816 set(hObject,<span class="string">'BackgroundColor'</span>,get(0,<span class="string">'defaultUicontrolBackgroundColor'</span>));
  871. 0817 <span class="keyword">end</span>
  872. 0818
  873. 0819
  874. 0820 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
  875. 0821 <span class="comment">% Functions for viewing spectra icon %</span>
  876. 0822 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
  877. 0823
  878. 0824 <a name="_sub31" href="#_subfunctions" class="code">function newwidth = SmallAxes_width(handles)</a>
  879. 0825 position1 = get(handles.ToClassifySmallAxes,<span class="string">'Position'</span>);
  880. 0826 position2 = get(handles.ClassifiedAxes,<span class="string">'Position'</span>);
  881. 0827
  882. 0828 newwidth = round(position1(3) *(handles.classified_width / position2(3)));
  883. 0829
  884. 0830 <a name="_sub32" href="#_subfunctions" class="code">function iconS = iconify_spec(S,height)</a>
  885. 0831 <span class="comment">% Take a large spectra with high frequency bandwidth and reduce the height</span>
  886. 0832 <span class="comment">% by pixel averaging</span>
  887. 0833 Ssize = size(S);
  888. 0834 iconS = zeros(height,Ssize(2));
  889. 0835
  890. 0836 <span class="comment">% averaging of values to reduce size</span>
  891. 0837 rf = floor(Ssize(1)/height);
  892. 0838
  893. 0839 <span class="keyword">for</span> i = 1:(height-1)
  894. 0840 <span class="keyword">for</span> j = 1 : Ssize(2)
  895. 0841 iconS(i,j) = sum(S(((i-1)*rf)+1:i*rf,j))/rf;
  896. 0842 <span class="keyword">end</span>
  897. 0843 <span class="keyword">end</span>
  898. 0844
  899. 0845 <span class="keyword">for</span> j = 1 : Ssize(2) <span class="comment">% take care of the last row by also pixel averaging</span>
  900. 0846 iconS(height,j) = mean(S(rf*(height-1) : Ssize(1),j));
  901. 0847 <span class="keyword">end</span>
  902. 0848 iconS = flipud(iconS);
  903. 0849
  904. 0850 <span class="comment">% Rescaling of values</span>
  905. 0851 maxintense = max(max(iconS));
  906. 0852 minintense = min(min(iconS));
  907. 0853
  908. 0854 iconS=uint8(1 + round(255 * (iconS-minintense)/(maxintense-minintense)));
  909. 0855
  910. 0856 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
  911. 0857 <span class="comment">% Functions for loading in images %</span>
  912. 0858 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
  913. 0859
  914. 0860 <a name="_sub33" href="#_subfunctions" class="code">function destination = copy_into(destination,source,r,c)</a>
  915. 0861 <span class="comment">% This copies an image into another image</span>
  916. 0862 <span class="comment">% Two problems: one it can be optimized by removing the nested for loops</span>
  917. 0863 <span class="comment">% two there is an indexing bug which returns a one pixel larger image</span>
  918. 0864 sized = size(destination);
  919. 0865 sizes = size(source);
  920. 0866
  921. 0867 destination(r:r+sizes(1)-1,c:c+sizes(2)-1) = source(:,:);
  922. 0868
  923. 0869 <span class="comment">% for i = 1:sizes(1)</span>
  924. 0870 <span class="comment">% for j = 1:sizes(2)</span>
  925. 0871 <span class="comment">% destination(r+i,c+j) = source(i,j);</span>
  926. 0872 <span class="comment">% end</span>
  927. 0873 <span class="comment">% end</span>
  928. 0874 <span class="comment">% ;</span>
  929. 0875
  930. 0876 <a name="_sub34" href="#_subfunctions" class="code">function positions = position_images(height,width,images_dim,xspacer,yspacer)</a>
  931. 0877 <span class="comment">% This function returns a matrix consisting of two rows with the xy</span>
  932. 0878 <span class="comment">% position for images.</span>
  933. 0879 <span class="comment">% The function also assumes that the image's height is not restricted this</span>
  934. 0880 <span class="comment">% allows for easier scrolling</span>
  935. 0881 <span class="comment">% The function assumes that all images are of the same height</span>
  936. 0882 <span class="comment">% height in pixels of the original</span>
  937. 0883 <span class="comment">% width in pixels of the original</span>
  938. 0884 <span class="comment">% images</span>
  939. 0885 <span class="comment">% xspacer in pixels for the horizontal space between images</span>
  940. 0886 <span class="comment">% yspacer is the next height of the image</span>
  941. 0887 <span class="comment">% image height is the fixed height of the images</span>
  942. 0888
  943. 0889 number_images = length(images_dim(:,1));
  944. 0890 imageheight = images_dim(1);
  945. 0891
  946. 0892 currentx = xspacer;
  947. 0893 currenty = yspacer;
  948. 0894
  949. 0895 positions = zeros(number_images,2);
  950. 0896
  951. 0897 <span class="keyword">for</span> i = 1:number_images
  952. 0898 <span class="keyword">if</span> (currentx + images_dim(i,2) + xspacer) &gt; width <span class="comment">% start a new row</span>
  953. 0899 currentx = xspacer;
  954. 0900 currenty = currenty + imageheight + yspacer;
  955. 0901 positions(i,:) = [currenty currentx];
  956. 0902 currentx = currentx + images_dim(i,2) + xspacer;
  957. 0903 <span class="keyword">else</span>
  958. 0904 positions(i,:) = [currenty currentx];
  959. 0905 currentx = currentx + images_dim(i,2) + xspacer;
  960. 0906 <span class="keyword">end</span>
  961. 0907 <span class="comment">%positions(i,:) = [currenty currentx];</span>
  962. 0908 <span class="keyword">end</span>
  963. 0909
  964. 0910 <span class="comment">% function image_matrix = place_images_into(image_matrix, image_list, position_list)</span>
  965. 0911 <span class="comment">% % Place images into a matrix</span>
  966. 0912 <span class="comment">% number_images = length(image_list);</span>
  967. 0913 <span class="comment">%</span>
  968. 0914 <span class="comment">% for i = 1:number_images</span>
  969. 0915 <span class="comment">% theimage = image_list{i};</span>
  970. 0916 <span class="comment">% image_matrix = copy_into(image_matrix, theimage, position_list(i,1), position_list(i,2));</span>
  971. 0917 <span class="comment">% end</span>
  972. 0918 <span class="comment">% ;</span>
  973. 0919
  974. 0920 <a name="_sub35" href="#_subfunctions" class="code">function image_dim = get_image_sizes(images)</a>
  975. 0921 <span class="comment">% Returns an array of image sizes</span>
  976. 0922 number_images = length(images);
  977. 0923 image_dim = zeros(number_images,2);
  978. 0924 <span class="keyword">for</span> i = 1:number_images
  979. 0925 image_dim(i,:) = size(images{i});
  980. 0926 <span class="keyword">end</span>
  981. 0927 ;
  982. 0928
  983. 0929 <a name="_sub36" href="#_subfunctions" class="code">function image_matrix = place_images_into(image_matrix, image_list, position_list)</a>
  984. 0930 <span class="comment">% Place images into a matrix</span>
  985. 0931 number_images = length(image_list);
  986. 0932
  987. 0933 <span class="keyword">for</span> i = 1:number_images
  988. 0934 theimage = image_list{i};
  989. 0935 image_matrix = <a href="#_sub33" class="code" title="subfunction destination = copy_into(destination,source,r,c)">copy_into</a>(image_matrix, theimage, position_list(i,1), position_list(i,2));
  990. 0936 <span class="keyword">end</span>
  991. 0937 ;
  992. 0938
  993. 0939 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
  994. 0940 <span class="comment">% Functions for manipulating and plotting spectra icons %</span>
  995. 0941 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
  996. 0942
  997. 0943 <a name="_sub37" href="#_subfunctions" class="code">function IconList=get_SpecIcons(handles)</a>
  998. 0944 IconList = {};
  999. 0945 status = 0;
  1000. 0946 <span class="keyword">for</span> i = 1:handles.nsegments
  1001. 0947 load(<span class="string">'-mat'</span>,handles.segments(i).specfilename);
  1002. 0948 IconList{i} = iconS;
  1003. 0949 <span class="keyword">end</span>
  1004. 0950 save(<span class="string">'specicons'</span>,<span class="string">'IconList'</span>,<span class="string">'-mat'</span>); <span class="comment">% temp code for saving</span>
  1005. 0951
  1006. 0952
  1007. 0953 <a name="_sub38" href="#_subfunctions" class="code">function handles = plot_classified_axes(handles, image_list, position_list)</a>
  1008. 0954 <span class="comment">% Low level drawing of the classified axes</span>
  1009. 0955 handles.blank = logical(0);
  1010. 0956 handles.classmatrix = uint8(zeros(handles.classified_height,handles.classified_width));
  1011. 0957 axes(handles.ClassifiedAxes);
  1012. 0958 handles.classmatrix = <a href="#_sub36" class="code" title="subfunction image_matrix = place_images_into(image_matrix, image_list, position_list)">place_images_into</a>(handles.classmatrix,image_list,position_list);
  1013. 0959 set(handles.ClassifiedAxes,<span class="string">'XTick'</span>,[]);
  1014. 0960 set(handles.ClassifiedAxes,<span class="string">'YTick'</span>,[]);
  1015. 0961 handles.max_width = length(handles.classmatrix(1,:));
  1016. 0962
  1017. 0963 <span class="keyword">if</span> handles.max_width &gt; handles.classified_width
  1018. 0964 set(handles.SliderClassified,<span class="string">'Min'</span>,0);
  1019. 0965 set(handles.SliderClassified,<span class="string">'Max'</span>,handles.max_width - handles.classified_width);
  1020. 0966 set(handles.SliderClassified,<span class="string">'enable'</span>,<span class="string">'on'</span>);
  1021. 0967 handles.endx = handles.classified_width;
  1022. 0968 <span class="keyword">else</span>
  1023. 0969 set(handles.SliderClassified,<span class="string">'enable'</span>,<span class="string">'off'</span>)
  1024. 0970 handles.startx = 1;
  1025. 0971 handles.endx = handles.classified_width;
  1026. 0972 <span class="keyword">end</span>
  1027. 0973
  1028. 0974 classview = handles.classmatrix(:,handles.startx:handles.endx); <span class="comment">% will cut overhang</span>
  1029. 0975 handles.hiclass = image(classview);
  1030. 0976 set(handles.hiclass,<span class="string">'ButtonDownFcn'</span>,{@<a href="#_sub57" class="code" title="subfunction ClassifyAxesClickCallBack(src,eventdata)">ClassifyAxesClickCallBack</a>});
  1031. 0977 set(handles.ClassifiedAxes,<span class="string">'XTick'</span>,[]);
  1032. 0978 set(handles.ClassifiedAxes,<span class="string">'YTick'</span>,[]);
  1033. 0979
  1034. 0980 <a href="#_sub55" class="code" title="subfunction setrowbuttons(handles)">setrowbuttons</a>(handles);
  1035. 0981
  1036. 0982 <a name="_sub39" href="#_subfunctions" class="code">function handles = reposition_images(handles, image_list)</a>
  1037. 0983 <span class="comment">% this is a lower level function which is called to reposition the images.</span>
  1038. 0984 <span class="comment">% this would be called from higher level functions when images are added,</span>
  1039. 0985 <span class="comment">% deleted, or a new list of images needs to be loaded.</span>
  1040. 0986
  1041. 0987 <span class="comment">% initialize the handles for the images</span>
  1042. 0988 handles.nimages = length(image_list);
  1043. 0989 handles.images_dim = <a href="#_sub35" class="code" title="subfunction image_dim = get_image_sizes(images)">get_image_sizes</a>(image_list);
  1044. 0990
  1045. 0991 handles.positions = <a href="#_sub34" class="code" title="subfunction positions = position_images(height,width,images_dim,xspacer,yspacer)">position_images</a>(handles.classified_height,handles.classified_width,handles.images_dim,handles.xspacer,handles.yspacer);
  1046. 0992 handles.cnrows = length(unique(handles.positions(:,1)));
  1047. 0993
  1048. 0994 <span class="comment">% Setup the first page view</span>
  1049. 0995 handles.number_rows = floor(handles.classified_height / (handles.ispecheight + handles.yspacer));
  1050. 0996 handles.startpage = 1;
  1051. 0997 handles.endpage = 0;
  1052. 0998
  1053. 0999 <span class="keyword">for</span> i = 1 : handles.number_rows
  1054. 1000 handles.endpage = <a href="#_sub43" class="code" title="subfunction cposition = next_row_end(positions,cposition)">next_row_end</a>(handles.positions,handles.endpage);
  1055. 1001 <span class="keyword">end</span>
  1056. 1002
  1057. 1003 <span class="comment">%guidata(gcbo,handles);</span>
  1058. 1004 ;
  1059. 1005
  1060. 1006 <a name="_sub40" href="#_subfunctions" class="code">function nrow = which_row(positions,index)</a>
  1061. 1007
  1062. 1008 nrow = 1;
  1063. 1009 i = 2;
  1064. 1010 <span class="keyword">while</span> i &lt;= index
  1065. 1011 <span class="keyword">if</span> not(positions(i,1) == positions(i-1,1))
  1066. 1012 nrow = nrow + 1;
  1067. 1013 <span class="keyword">end</span>
  1068. 1014 i = i + 1;
  1069. 1015 <span class="keyword">end</span>
  1070. 1016
  1071. 1017 <a name="_sub41" href="#_subfunctions" class="code">function cpositions = get_curr_position(handles)</a>
  1072. 1018 <span class="comment">% Setups the current view of the positions</span>
  1073. 1019 cpositions = handles.positions(handles.startpage:handles.endpage,:); <span class="comment">% get the current view</span>
  1074. 1020 cpositions(:,1) = cpositions(:,1) - cpositions(1,1) + handles.yspacer;
  1075. 1021 cpositions(:,2) = cpositions(:,2) - (handles.startx - 1);
  1076. 1022 ;
  1077. 1023
  1078. 1024 <a name="_sub42" href="#_subfunctions" class="code">function cposition = next_row_start(positions,cposition)</a>
  1079. 1025 <span class="comment">% Computes the position of the next row if the row based on the positions matrix</span>
  1080. 1026 <span class="comment">% it computes the position where the row starts</span>
  1081. 1027 npos = length(positions);
  1082. 1028 i = cposition;
  1083. 1029 <span class="keyword">while</span> (i &lt;= npos) &amp;&amp; positions(i,1) == positions(cposition,1)
  1084. 1030 i = i + 1;
  1085. 1031 <span class="keyword">end</span>
  1086. 1032 <span class="keyword">if</span> i &lt; npos <span class="comment">% make sure the row numbers match</span>
  1087. 1033 cposition = i;
  1088. 1034 <span class="keyword">end</span>
  1089. 1035 ;
  1090. 1036
  1091. 1037 <a name="_sub43" href="#_subfunctions" class="code">function cposition = next_row_end(positions,cposition)</a>
  1092. 1038 <span class="comment">% Computes the position of the next row if the row based on the positions matrix</span>
  1093. 1039 <span class="comment">% it computes the last position before a new row starts</span>
  1094. 1040 npos = length(positions(:,1));
  1095. 1041 <span class="keyword">if</span> cposition &lt; npos <span class="comment">% not at the last row</span>
  1096. 1042 i = cposition + 1;
  1097. 1043 <span class="keyword">while</span> (i &lt; npos) &amp;&amp; (positions(i,1) == positions(cposition+1,1))
  1098. 1044 i = i + 1;
  1099. 1045 <span class="keyword">end</span>
  1100. 1046 <span class="keyword">if</span> (positions(cposition + 1) == positions(npos))
  1101. 1047 cposition = npos; <span class="comment">% handle the condition that you are now at the last row</span>
  1102. 1048 <span class="keyword">else</span>
  1103. 1049 cposition = i - 1; <span class="comment">% make sure the row numbers match</span>
  1104. 1050 <span class="keyword">end</span>
  1105. 1051 <span class="keyword">else</span> <span class="comment">% handles the condition you are already at the last row</span>
  1106. 1052 cposition = npos;
  1107. 1053 <span class="keyword">end</span>
  1108. 1054 ;
  1109. 1055
  1110. 1056
  1111. 1057 <a name="_sub44" href="#_subfunctions" class="code">function handles = row_forward(handles)</a>
  1112. 1058 <span class="comment">% Moves the row forward in the classifiedaxes/browser view</span>
  1113. 1059 startpage = <a href="#_sub42" class="code" title="subfunction cposition = next_row_start(positions,cposition)">next_row_start</a>(handles.positions,handles.startpage);
  1114. 1060 endpage = <a href="#_sub43" class="code" title="subfunction cposition = next_row_end(positions,cposition)">next_row_end</a>(handles.positions,handles.endpage);
  1115. 1061
  1116. 1062 <span class="keyword">if</span> not(endpage == handles.endpage) <span class="comment">% indicates you are not at the last page</span>
  1117. 1063 handles.startpage = startpage;
  1118. 1064 handles.endpage = endpage;
  1119. 1065 <span class="keyword">end</span>
  1120. 1066 <span class="comment">% guidata(gcbo,handles);</span>
  1121. 1067 ;
  1122. 1068
  1123. 1069 <a name="_sub45" href="#_subfunctions" class="code">function cposition = previous_row_start(positions,cposition)</a>
  1124. 1070 <span class="comment">% Computes the position of the previous row if the row based on the positions matrix</span>
  1125. 1071 <span class="comment">% it computes the position where the row starts</span>
  1126. 1072 npos = length(positions(:,1));
  1127. 1073 <span class="keyword">if</span> cposition &gt; 1
  1128. 1074 i = cposition - 1;
  1129. 1075 <span class="keyword">while</span> (i &gt; 1) &amp;&amp; (positions(i,1) == positions(cposition-1,1))
  1130. 1076 i = i - 1;
  1131. 1077 <span class="keyword">end</span>
  1132. 1078 <span class="keyword">if</span> (i &gt; 1) &amp;&amp; (cposition ~= 2)
  1133. 1079 cposition = i + 1;
  1134. 1080 <span class="keyword">else</span>
  1135. 1081 cposition = 1;
  1136. 1082 <span class="keyword">end</span>
  1137. 1083 <span class="keyword">else</span>
  1138. 1084 cposition = 1; <span class="comment">% in case things get missed up and neg index</span>
  1139. 1085 <span class="keyword">end</span>
  1140. 1086 ;
  1141. 1087
  1142. 1088 <a name="_sub46" href="#_subfunctions" class="code">function cposition = previous_row_end(positions,cposition)</a>
  1143. 1089 npos = length(positions(:,1));
  1144. 1090
  1145. 1091 <span class="keyword">if</span> cposition &gt; 1
  1146. 1092 i = cposition;
  1147. 1093 <span class="keyword">while</span> (i &gt; 1) &amp;&amp; (positions(i,1) == positions(cposition,1))
  1148. 1094 i = i - 1;
  1149. 1095 <span class="keyword">end</span>
  1150. 1096 <span class="keyword">if</span> i &gt; 1;
  1151. 1097 cposition = i;
  1152. 1098 <span class="keyword">else</span>
  1153. 1099 cposition = 1;
  1154. 1100 <span class="keyword">end</span>
  1155. 1101 <span class="keyword">else</span>
  1156. 1102 cposition = 1;
  1157. 1103 <span class="keyword">end</span>
  1158. 1104 ;
  1159. 1105
  1160. 1106 <a name="_sub47" href="#_subfunctions" class="code">function nrows = number_of_rows(handles)</a>
  1161. 1107 <span class="comment">% Computes the number of rows in the current view</span>
  1162. 1108 nrows = length(unique(handles.positions(handles.startpage:handles.endpage,1)));
  1163. 1109
  1164. 1110 <a name="_sub48" href="#_subfunctions" class="code">function handles = row_backward(handles)</a>
  1165. 1111 <span class="comment">% Moves the row backwards in the classifiedaxes/browser view</span>
  1166. 1112 startpage = <a href="#_sub45" class="code" title="subfunction cposition = previous_row_start(positions,cposition)">previous_row_start</a>(handles.positions,handles.startpage);
  1167. 1113 endpage = <a href="#_sub46" class="code" title="subfunction cposition = previous_row_end(positions,cposition)">previous_row_end</a>(handles.positions,handles.endpage);
  1168. 1114
  1169. 1115 <span class="keyword">if</span> <a href="#_sub47" class="code" title="subfunction nrows = number_of_rows(handles)">number_of_rows</a>(handles) &lt; handles.number_rows <span class="comment">% indicates you are not at the last page</span>
  1170. 1116 handles.startpage = startpage;
  1171. 1117 handles.endpage = length(handles.positions(:,1));
  1172. 1118 <span class="keyword">elseif</span> handles.startpage == 1;
  1173. 1119 handles.startpage = 1;
  1174. 1120 handles.endpage = handles.endpage;
  1175. 1121 <span class="keyword">else</span>
  1176. 1122 handles.startpage = startpage;
  1177. 1123 handles.endpage = endpage;
  1178. 1124 <span class="keyword">end</span>
  1179. 1125 <span class="comment">% guidata(gcbo,handles);</span>
  1180. 1126 ;
  1181. 1127
  1182. 1128 <a name="_sub49" href="#_subfunctions" class="code">function handles = BrowseDirectory(handles)</a>
  1183. 1129 <span class="comment">% This function should be called only after precompute has been called</span>
  1184. 1130 <span class="comment">% it relies on their being a specicon file in the directory</span>
  1185. 1131 <span class="comment">%</span>
  1186. 1132 <span class="comment">% The function takes the current segments in the directory and loads their specicons</span>
  1187. 1133 <span class="comment">% into memory because the segments and icons are created in their order the</span>
  1188. 1134 <span class="comment">% order matches. This will need to be worked out better for the</span>
  1189. 1135 <span class="comment">% classification algorithms.</span>
  1190. 1136
  1191. 1137 <span class="comment">%load('-mat', 'specicons');</span>
  1192. 1138 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles, [<span class="string">'Viewing all '</span>, num2str(handles.nsegments),<span class="string">' segments'</span>]);
  1193. 1139 handles.mapindex = [1:handles.nsegments];
  1194. 1140 handles.image_list = handles.IconList;
  1195. 1141 handles = <a href="#_sub39" class="code" title="subfunction handles = reposition_images(handles, image_list)">reposition_images</a>(handles, handles.image_list);
  1196. 1142 handles.cpositions = <a href="#_sub41" class="code" title="subfunction cpositions = get_curr_position(handles)">get_curr_position</a>(handles);
  1197. 1143 handles = <a href="#_sub38" class="code" title="subfunction handles = plot_classified_axes(handles, image_list, position_list)">plot_classified_axes</a>(handles, handles.image_list(handles.startpage:handles.endpage), handles.cpositions);
  1198. 1144 handles.mode=<span class="string">'browse'</span>;
  1199. 1145
  1200. 1146 <span class="comment">%guidata(gcbo,handles);</span>
  1201. 1147
  1202. 1148
  1203. 1149 <span class="comment">% --- Executes on button press in NextRowButton.</span>
  1204. 1150 <a name="_sub50" href="#_subfunctions" class="code">function NextRowButton_Callback(hObject, eventdata, handles)</a>
  1205. 1151 <span class="comment">% hObject handle to NextRowButton (see GCBO)</span>
  1206. 1152 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  1207. 1153 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  1208. 1154
  1209. 1155 <span class="keyword">if</span> handles.cnrows &gt; 1
  1210. 1156 handles.startx = 1; <span class="comment">% if you have been scrolling reset to defaults</span>
  1211. 1157 handles.endx = handles.classified_width;
  1212. 1158 set(handles.SliderClassified, <span class="string">'Value'</span>,0);
  1213. 1159 handles = <a href="#_sub44" class="code" title="subfunction handles = row_forward(handles)">row_forward</a>(handles);
  1214. 1160 handles.cpositions = <a href="#_sub41" class="code" title="subfunction cpositions = get_curr_position(handles)">get_curr_position</a>(handles);
  1215. 1161 handles = <a href="#_sub38" class="code" title="subfunction handles = plot_classified_axes(handles, image_list, position_list)">plot_classified_axes</a>(handles, handles.image_list(handles.startpage:handles.endpage), handles.cpositions);
  1216. 1162 <span class="keyword">end</span>
  1217. 1163 guidata(gcbo,handles);
  1218. 1164
  1219. 1165 <span class="comment">% --- Executes on button press in PreviousRowButton.</span>
  1220. 1166 <a name="_sub51" href="#_subfunctions" class="code">function PreviousRowButton_Callback(hObject, eventdata, handles)</a>
  1221. 1167 <span class="comment">% hObject handle to PreviousRowButton (see GCBO)</span>
  1222. 1168 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  1223. 1169 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  1224. 1170
  1225. 1171 <span class="keyword">if</span> handles.cnrows &gt; 1
  1226. 1172 handles.startx = 1;
  1227. 1173 handles.endx = handles.classified_width;
  1228. 1174 set(handles.SliderClassified, <span class="string">'Value'</span>,0);
  1229. 1175 handles = <a href="#_sub48" class="code" title="subfunction handles = row_backward(handles)">row_backward</a>(handles);
  1230. 1176 handles.cpositions = <a href="#_sub41" class="code" title="subfunction cpositions = get_curr_position(handles)">get_curr_position</a>(handles);
  1231. 1177 handles = <a href="#_sub38" class="code" title="subfunction handles = plot_classified_axes(handles, image_list, position_list)">plot_classified_axes</a>(handles, handles.image_list(handles.startpage:handles.endpage), handles.cpositions);
  1232. 1178 <span class="keyword">end</span>
  1233. 1179 guidata(gcbo,handles);
  1234. 1180
  1235. 1181 <span class="comment">% --- Executes on button press in LoadDirectoryButton.</span>
  1236. 1182 <a name="_sub52" href="#_subfunctions" class="code">function LoadDirectoryButton_Callback(hObject, eventdata, handles)</a>
  1237. 1183 <span class="comment">% hObject handle to LoadDirectoryButton (see GCBO)</span>
  1238. 1184 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  1239. 1185 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  1240. 1186
  1241. 1187 <span class="comment">%directoryname = uigetdir('./','Change directory');</span>
  1242. 1188
  1243. 1189 directoryname = uigetdir;
  1244. 1190
  1245. 1191 <span class="keyword">if</span> not(directoryname == 0)
  1246. 1192 handles.directory = directoryname;
  1247. 1193 set(handles.DirectoryEditBox, <span class="string">'String'</span>,directoryname);
  1248. 1194 cd(handles.directory); <span class="comment">% this we will need to change</span>
  1249. 1195 <span class="keyword">end</span>
  1250. 1196 guidata(gcbo,handles);
  1251. 1197 ;
  1252. 1198
  1253. 1199 <a name="_sub53" href="#_subfunctions" class="code">function im_index = coordinate2index(handles,xpos,ypos)</a>
  1254. 1200 <span class="comment">% For the current images displayed tests if pointer position is in an image</span>
  1255. 1201 <span class="comment">% returns the index for that image based on a left to right ordering on</span>
  1256. 1202 <span class="comment">% that page</span>
  1257. 1203 <span class="comment">% First check if the coordinate is totally out of the range</span>
  1258. 1204 <span class="keyword">if</span> (xpos &lt; 0) || (ypos &lt; 0) || (ypos &gt; handles.classified_height) || (xpos &gt; handles.classified_width)
  1259. 1205 im_index = 0;
  1260. 1206 <span class="keyword">else</span>
  1261. 1207 im_index = 0;
  1262. 1208 npos = length(handles.cpositions(:,1));
  1263. 1209 i = 1;
  1264. 1210 <span class="keyword">while</span> (i &lt;= npos) &amp;&amp; (im_index &lt; 1)
  1265. 1211 <span class="keyword">if</span> (xpos &gt;= handles.cpositions(i,2)) &amp;&amp; (xpos &lt;= (handles.cpositions(i,2) + handles.images_dim(handles.startpage + (i-1), 2)))
  1266. 1212 <span class="keyword">if</span> (ypos &gt;= handles.cpositions(i,1)) &amp;&amp; (ypos &lt;= (handles.cpositions(i,1) + handles.images_dim(handles.startpage + (i-1),1)))
  1267. 1213 im_index = i;
  1268. 1214 <span class="keyword">end</span>
  1269. 1215 <span class="keyword">end</span>
  1270. 1216 i = i+1;
  1271. 1217 <span class="keyword">end</span>
  1272. 1218 <span class="keyword">end</span>
  1273. 1219 ;
  1274. 1220
  1275. 1221 <a name="_sub54" href="#_subfunctions" class="code">function setnavigationbuttons(handles)</a>
  1276. 1222 <span class="comment">% Sets the navigation buttons based on where the pointer is</span>
  1277. 1223
  1278. 1224 <span class="keyword">if</span> not(handles.quickmode)
  1279. 1225
  1280. 1226 <span class="keyword">if</span> handles.NextIndex == handles.nsegments
  1281. 1227 set(handles.PreviousSpectraButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  1282. 1228 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  1283. 1229 <span class="keyword">elseif</span> handles.NextIndex == handles.nsegments
  1284. 1230 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  1285. 1231 set(handles.PreviousSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1286. 1232 <span class="keyword">elseif</span> handles.NextIndex == 1
  1287. 1233 set(handles.PreviousSpectraButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  1288. 1234 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1289. 1235 <span class="keyword">elseif</span> (handles.NextIndex &gt; 1) &amp;&amp; (handles.NextIndex &lt; handles.nsegments)
  1290. 1236 set(handles.PreviousSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1291. 1237 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1292. 1238
  1293. 1239 <span class="keyword">end</span>
  1294. 1240
  1295. 1241 <span class="keyword">end</span>
  1296. 1242
  1297. 1243 <a name="_sub55" href="#_subfunctions" class="code">function setrowbuttons(handles)</a>
  1298. 1244
  1299. 1245 <span class="keyword">if</span> handles.startpage == 1
  1300. 1246 set(handles.PreviousRowButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  1301. 1247 <span class="keyword">elseif</span> handles.startpage &gt; 1
  1302. 1248 set(handles.PreviousRowButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1303. 1249 <span class="keyword">end</span>
  1304. 1250
  1305. 1251 <span class="keyword">if</span> handles.endpage == length(handles.positions) <span class="comment">% You are the last row</span>
  1306. 1252 set(handles.NextRowButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  1307. 1253 <span class="keyword">elseif</span> handles.cnrows &lt;= handles.number_rows
  1308. 1254 set(handles.NextRowButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  1309. 1255 <span class="keyword">elseif</span> handles.endpage &lt; length(handles.positions)
  1310. 1256 set(handles.NextRowButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1311. 1257 <span class="keyword">end</span>
  1312. 1258
  1313. 1259 <a name="_sub56" href="#_subfunctions" class="code">function DummyClassifyAxesClickCallBack(src,eventdata,handles)</a>
  1314. 1260 <span class="comment">% When the image is blank this allow you to select out of the class view</span>
  1315. 1261 set(handles.ClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1316. 1262 set(handles.NewClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  1317. 1263 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1318. 1264 set(handles.PreviousSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1319. 1265 set(handles.ModePopupMenu,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1320. 1266 set(handles.AutoClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1321. 1267 set(handles.QuickModeButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1322. 1268 set(handles.CompareToggleButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1323. 1269 handles.submode = <span class="string">'select'</span>;
  1324. 1270 <a href="#_sub54" class="code" title="subfunction setnavigationbuttons(handles)">setnavigationbuttons</a>(handles);
  1325. 1271 guidata(gcbo,handles);
  1326. 1272
  1327. 1273
  1328. 1274 <a name="_sub57" href="#_subfunctions" class="code">function ClassifyAxesClickCallBack(src,eventdata)</a>
  1329. 1275 <span class="comment">% A Function for handling clicks to the axes</span>
  1330. 1276 handles = guidata(gcbo);
  1331. 1277 <span class="comment">% handles.mode</span>
  1332. 1278 <span class="comment">%handles.submode</span>
  1333. 1279 <span class="comment">%fprintf('\n');</span>
  1334. 1280
  1335. 1281 pos = get(handles.ClassifiedAxes,<span class="string">'CurrentPoint'</span>);
  1336. 1282 cposition = <a href="#_sub53" class="code" title="subfunction im_index = coordinate2index(handles,xpos,ypos)">coordinate2index</a>(handles,pos(1,1),pos(1,2));
  1337. 1283
  1338. 1284 <span class="keyword">if</span> handles.quickmode
  1339. 1285 <span class="keyword">if</span> cposition == 0 <span class="comment">% Selecting in the outside takes you out of classification mode</span>
  1340. 1286 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles,<span class="string">''</span>);
  1341. 1287 <span class="keyword">else</span> <span class="comment">% You have selected an icon</span>
  1342. 1288 handles.startx = 1; <span class="comment">% if you have been scrolling reset to defaults</span>
  1343. 1289 handles.endx = handles.classified_width;
  1344. 1290 set(handles.SliderClassified,<span class="string">'Value'</span>,0);
  1345. 1291 class = handles.classes(handles.mapindex(cposition + (handles.startpage - 1)));
  1346. 1292 handles.segments(handles.NextIndex).class = class.name;
  1347. 1293 handles.classes(handles.mapindex(cposition + (handles.startpage - 1))).nmembers = handles.classes(handles.mapindex(cposition + (handles.startpage - 1))).nmembers + 1;
  1348. 1294 handles = <a href="#_sub85" class="code" title="subfunction handles=jump_to_unclassified(handles)">jump_to_unclassified</a>(handles);
  1349. 1295 handles = <a href="#_sub58" class="code" title="subfunction handles = configureclassview(handles,submode)">configureclassview</a>(handles,<span class="string">'select-class'</span>);
  1350. 1296 <span class="keyword">if</span> handles.lastsegment == handles.NextIndex <span class="comment">% no more unclassified segments</span>
  1351. 1297 handles = <a href="#_sub83" class="code" title="subfunction handles = quick_mode_exit(handles)">quick_mode_exit</a>(handles);
  1352. 1298 set(handles.QuickModeButton,<span class="string">'Value'</span>,0);
  1353. 1299 handles.quickmode = not(handles.quickmode);
  1354. 1300 <span class="keyword">end</span>
  1355. 1301 <span class="keyword">end</span>
  1356. 1302 <span class="keyword">else</span> <span class="comment">% quick classify mode is off</span>
  1357. 1303
  1358. 1304
  1359. 1305 <span class="keyword">if</span> strcmp(handles.mode,<span class="string">'browse'</span>) &amp;&amp; (cposition &gt; 0)
  1360. 1306 handles.NextIndex = handles.mapindex((cposition - 1) + handles.startpage);
  1361. 1307 handles=<a href="#_sub13" class="code" title="subfunction handles=ConfigureClassSegment(handles)">ConfigureClassSegment</a>(handles);
  1362. 1308 handles=<a href="#_sub24" class="code" title="subfunction handles=ConfigureSpecPlot(handles)">ConfigureSpecPlot</a>(handles);
  1363. 1309 <span class="keyword">else</span>
  1364. 1310 <span class="comment">%fprintf('%i\n', coordinate2index(handles,pos(1,1),pos(1,2)));</span>
  1365. 1311 <span class="comment">%fprintf('%i, %i\n\n', pos(1,1),pos(1,2));</span>
  1366. 1312 ;
  1367. 1313 <span class="keyword">end</span>
  1368. 1314
  1369. 1315 <span class="keyword">if</span> strcmp(<span class="string">'class-members'</span>,handles.mode) &amp;&amp; strcmp(<span class="string">'select'</span>,handles.submode) &amp;&amp; (cposition &gt; 0)
  1370. 1316 handles.NextIndex = handles.mapindex((cposition - 1) + handles.startpage);
  1371. 1317 handles=<a href="#_sub13" class="code" title="subfunction handles=ConfigureClassSegment(handles)">ConfigureClassSegment</a>(handles);
  1372. 1318 handles=<a href="#_sub24" class="code" title="subfunction handles=ConfigureSpecPlot(handles)">ConfigureSpecPlot</a>(handles);
  1373. 1319 <span class="keyword">end</span>
  1374. 1320
  1375. 1321 <span class="comment">%Show all members of a specific class</span>
  1376. 1322 <span class="keyword">if</span> strcmp(<span class="string">'class-view'</span>,handles.mode) &amp;&amp; strcmp(<span class="string">'select'</span>,handles.submode) &amp;&amp; (cposition &gt; 0)
  1377. 1323 handles.startx = 1; <span class="comment">% if you have been scrolling reset to defaults</span>
  1378. 1324 handles.endx = handles.classified_width;
  1379. 1325 set(handles.SliderClassified,<span class="string">'Value'</span>,0);
  1380. 1326 <span class="comment">% set(handles.CompareToggleButton,'Visible','off');</span>
  1381. 1327 cindex = handles.mapindex(cposition + (handles.startpage - 1));
  1382. 1328 class = handles.classes(cindex);
  1383. 1329 handles.lastclass = cindex;
  1384. 1330 handles = <a href="#_sub63" class="code" title="subfunction handles = configureclassmembers(handles,classname)">configureclassmembers</a>(handles,class.name);
  1385. 1331 handles.mode = <span class="string">'class-members'</span>;
  1386. 1332 handles.submode = <span class="string">'select'</span>;
  1387. 1333 handles = <a href="#_sub59" class="code" title="subfunction handles = SetModePopupMenu(handles,viewstring)">SetModePopupMenu</a>(handles,<span class="string">'class members'</span>);
  1388. 1334 set(handles.TypifyClassButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
  1389. 1335 set(handles.RemoveClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  1390. 1336 set(handles.NextClassButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
  1391. 1337 set(handles.RenameClassButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
  1392. 1338 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles, [<span class="string">'Viewing '</span> num2str(length(handles.mapindex)),<span class="string">' members of '</span> class.name]);
  1393. 1339 <span class="keyword">end</span>
  1394. 1340
  1395. 1341 <span class="keyword">if</span> strcmp(<span class="string">'class-view'</span>,handles.mode) &amp;&amp; strcmp(<span class="string">'select-class'</span>,handles.submode)
  1396. 1342 <span class="keyword">if</span> cposition == 0 <span class="comment">% Selecting in the outside takes you out of classification mode</span>
  1397. 1343 set(handles.ClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1398. 1344 set(handles.NewClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  1399. 1345 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles, [<span class="string">'Viewing all '</span>, num2str(handles.nclasses),<span class="string">' classes'</span>]);
  1400. 1346
  1401. 1347 <span class="keyword">else</span> <span class="comment">% You have selected an icon</span>
  1402. 1348 handles.startx = 1; <span class="comment">% if you have been scrolling reset to defaults</span>
  1403. 1349 handles.endx = handles.classified_width;
  1404. 1350 set(handles.SliderClassified,<span class="string">'Value'</span>,0);
  1405. 1351 class = handles.classes(handles.mapindex(cposition + (handles.startpage - 1)));
  1406. 1352 handles.segments(handles.NextIndex).class = class.name;
  1407. 1353 handles.classes(handles.mapindex(cposition + (handles.startpage - 1))).nmembers = handles.classes(handles.mapindex(cposition + (handles.startpage - 1))).nmembers + 1;
  1408. 1354 set(handles.ClassifyButton,<span class="string">'String'</span>,<span class="string">'Declassify'</span>);
  1409. 1355 handles = <a href="#_sub59" class="code" title="subfunction handles = SetModePopupMenu(handles,viewstring)">SetModePopupMenu</a>(handles,<span class="string">'class members'</span>);
  1410. 1356 handles = <a href="#_sub63" class="code" title="subfunction handles = configureclassmembers(handles,classname)">configureclassmembers</a>(handles,class.name);
  1411. 1357 handles.mode = <span class="string">'class-members'</span>;
  1412. 1358 handles.submode = <span class="string">'select'</span>;
  1413. 1359 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles,[<span class="string">'Classified segment as '</span> class.name]);
  1414. 1360 <span class="keyword">end</span>
  1415. 1361 set(handles.CompareToggleButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1416. 1362 set(handles.QuickModeButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1417. 1363 set(handles.AutoClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1418. 1364 set(handles.ClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1419. 1365 set(handles.NewClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  1420. 1366 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1421. 1367 set(handles.PreviousSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1422. 1368 set(handles.ModePopupMenu,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1423. 1369 set(handles.SortText,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  1424. 1370 set(handles.SortPopupMenu,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  1425. 1371 handles.submode = <span class="string">'select'</span>;
  1426. 1372 <span class="keyword">end</span>
  1427. 1373
  1428. 1374 <span class="keyword">if</span> strcmp(handles.mode,<span class="string">'class-members'</span>) &amp;&amp; strcmp(handles.submode,<span class="string">'typify'</span>)
  1429. 1375 <span class="keyword">if</span> cposition == 0
  1430. 1376 set(handles.TypifyClassButton, <span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1431. 1377 <span class="keyword">else</span>
  1432. 1378 handles.startx = 1; <span class="comment">% if you have been scrolling reset to defaults</span>
  1433. 1379 handles.endx = handles.classified_width;
  1434. 1380 set(handles.SliderClassified,<span class="string">'Value'</span>,0);
  1435. 1381 sindex = handles.mapindex(cposition + (handles.startpage - 1));
  1436. 1382 cindex = <a href="#_sub11" class="code" title="subfunction cindex = returnclassindex(handles,classname)">returnclassindex</a>(handles,handles.segments(sindex).class);
  1437. 1383 handles.classes(cindex).specfilename = handles.segments(sindex).specfilename;
  1438. 1384 handles.classes(cindex).length = handles.segments(sindex).end - handles.segments(sindex).start;
  1439. 1385 handles.classes(cindex).index = sindex;
  1440. 1386 <span class="comment">%load('-mat','specicons');</span>
  1441. 1387 handles.classes(cindex).iconS = handles.IconList{sindex};
  1442. 1388 handles.subclass = <span class="string">'xxx'</span>;
  1443. 1389 set(handles.TypifyClassButton, <span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1444. 1390 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles,<span class="string">''</span>);
  1445. 1391 <span class="keyword">end</span>
  1446. 1392 <span class="keyword">end</span>
  1447. 1393
  1448. 1394 <span class="keyword">if</span> strcmp(<span class="string">'class-view'</span>, handles.mode) &amp;&amp; strcmp(<span class="string">'compare'</span>,handles.submode)
  1449. 1395 <span class="keyword">if</span> cposition == 0
  1450. 1396 handles.mode = <span class="string">'class-view'</span>;
  1451. 1397 handles.submode = <span class="string">'select'</span>;
  1452. 1398 set(handles.CompareToggleButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1453. 1399 set(handles.RemoveClassButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1454. 1400 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1455. 1401 set(handles.PreviousSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1456. 1402 <span class="comment">%set(handles.ModePopupMenu,'Enable','on');</span>
  1457. 1403 <span class="keyword">else</span>
  1458. 1404 handles.mode = <span class="string">'comparison'</span>;
  1459. 1405 <span class="keyword">if</span> strcmp(handles.segments(handles.NextIndex).class,<span class="string">''</span>)
  1460. 1406 set(handles.ClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1461. 1407 <span class="keyword">end</span>
  1462. 1408 handles.startx = 1; <span class="comment">% if you have been scrolling reset to defaults</span>
  1463. 1409 handles.endx = handles.classified_width;
  1464. 1410 set(handles.SliderClassified,<span class="string">'Value'</span>,0);
  1465. 1411 cindex = handles.mapindex(cposition + (handles.startpage - 1));
  1466. 1412 handles.image_list = {};
  1467. 1413 handles.lastclass = cindex;
  1468. 1414 handles.image_list{2} = handles.classes(cindex).iconS;
  1469. 1415 <span class="comment">%load('-mat','specicons');</span>
  1470. 1416 handles.image_list{1} = handles.IconList{handles.NextIndex};
  1471. 1417
  1472. 1418 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles,[<span class="string">'Comparing to '</span> handles.classes(cindex).name]);
  1473. 1419
  1474. 1420 handles = <a href="#_sub39" class="code" title="subfunction handles = reposition_images(handles, image_list)">reposition_images</a>(handles, handles.image_list);
  1475. 1421 handles.cpositions = <a href="#_sub41" class="code" title="subfunction cpositions = get_curr_position(handles)">get_curr_position</a>(handles);
  1476. 1422 handles = <a href="#_sub38" class="code" title="subfunction handles = plot_classified_axes(handles, image_list, position_list)">plot_classified_axes</a>(handles, handles.image_list(handles.startpage:handles.endpage), handles.cpositions);
  1477. 1423 handles.submode = <span class="string">'xxx'</span>;
  1478. 1424 <span class="keyword">end</span>
  1479. 1425 <span class="keyword">end</span>
  1480. 1426
  1481. 1427
  1482. 1428 <span class="keyword">if</span> strcmp(handles.mode,<span class="string">'class-view'</span>) &amp;&amp; strcmp(handles.submode,<span class="string">'remove-class'</span>)
  1483. 1429 <span class="keyword">if</span> cposition == 0
  1484. 1430 handles.submode = <span class="string">'select'</span>;
  1485. 1431 set(handles.RemoveClassButton, <span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1486. 1432 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles, [<span class="string">'Viewing all '</span>, num2str(handles.nclasses),<span class="string">' classes'</span>]);
  1487. 1433 <span class="keyword">else</span>
  1488. 1434 cindex = handles.mapindex(cposition + (handles.startpage - 1));
  1489. 1435 classname = handles.classes(cindex).name;
  1490. 1436
  1491. 1437 answer = questdlg([<span class="string">'Remove class '</span> classname]);
  1492. 1438
  1493. 1439 <span class="keyword">if</span> strcmp(answer,<span class="string">'Yes'</span>)
  1494. 1440 handles.startx = 1; <span class="comment">% if you have been scrolling reset to defaults</span>
  1495. 1441 handles.endx = handles.classified_width;
  1496. 1442 set(handles.SliderClassified,<span class="string">'Value'</span>,0);
  1497. 1443 <span class="keyword">for</span> i = 1:handles.nsegments
  1498. 1444 <span class="keyword">if</span> strcmp(classname,handles.segments(i).class)
  1499. 1445 handles.segments(i).class = <span class="string">''</span>;
  1500. 1446 <span class="keyword">end</span>
  1501. 1447 <span class="keyword">end</span>
  1502. 1448
  1503. 1449 <span class="keyword">if</span> handles.nclasses &gt; 1
  1504. 1450 handles.classes = [handles.classes(1:(cindex-1)) handles.classes((cindex+1):handles.nclasses)];
  1505. 1451 handles.nclasses = handles.nclasses - 1;
  1506. 1452 handles = <a href="#_sub58" class="code" title="subfunction handles = configureclassview(handles,submode)">configureclassview</a>(handles,<span class="string">'select'</span>);
  1507. 1453
  1508. 1454 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles, [<span class="string">'Viewing all '</span>, num2str(handles.nclasses),<span class="string">' classes'</span>]);
  1509. 1455 <span class="keyword">else</span>
  1510. 1456 handles.classes = [];
  1511. 1457 handles.nclasses = 0;
  1512. 1458 handles.image_list = {};
  1513. 1459 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles,<span class="string">''</span>);
  1514. 1460 set(handles.RemoveClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  1515. 1461 handles.submode = <span class="string">'xxx'</span>;
  1516. 1462 handles = <a href="#_sub14" class="code" title="subfunction handles = blankaxes(handles)">blankaxes</a>(handles);
  1517. 1463 <span class="keyword">end</span>
  1518. 1464
  1519. 1465 <span class="keyword">if</span> strcmp(handles.segments(handles.NextIndex).class,<span class="string">''</span>)
  1520. 1466 set(handles.ClassifyButton,<span class="string">'String'</span>,<span class="string">'Classify'</span>);
  1521. 1467 <span class="keyword">end</span>
  1522. 1468 set(handles.RemoveClassButton, <span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1523. 1469 <span class="keyword">else</span>
  1524. 1470 handles.submode = <span class="string">'select'</span>;
  1525. 1471 set(handles.RemoveClassButton, <span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1526. 1472 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles, [<span class="string">'Viewing all '</span>, num2str(handles.nclasses),<span class="string">' classes'</span>]);
  1527. 1473 <span class="keyword">end</span>
  1528. 1474 <span class="keyword">end</span>
  1529. 1475 <span class="keyword">end</span>
  1530. 1476
  1531. 1477 <span class="keyword">end</span>
  1532. 1478
  1533. 1479 <span class="keyword">if</span> not(strcmp(handles.mode,<span class="string">'comparison'</span>))
  1534. 1480 <a href="#_sub54" class="code" title="subfunction setnavigationbuttons(handles)">setnavigationbuttons</a>(handles);
  1535. 1481 <span class="keyword">end</span>
  1536. 1482 <span class="comment">% handles.mode</span>
  1537. 1483 <span class="comment">% handles.submode</span>
  1538. 1484 guidata(gcf,handles);
  1539. 1485
  1540. 1486 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
  1541. 1487 <span class="comment">% Functions for setting up the classview %</span>
  1542. 1488 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
  1543. 1489
  1544. 1490 <a name="_sub58" href="#_subfunctions" class="code">function handles = configureclassview(handles,submode)</a>
  1545. 1491 <span class="comment">% Configures the class-view for selecting classes</span>
  1546. 1492 handles.mode = <span class="string">'class-view'</span>;
  1547. 1493 handles.submode = submode;
  1548. 1494 <span class="comment">% if not(handles.quickmode)</span>
  1549. 1495 <span class="comment">% set_status(handles, ['Select a class']);</span>
  1550. 1496 <span class="comment">% end</span>
  1551. 1497 handles.mapindex = [1 : handles.nclasses];
  1552. 1498
  1553. 1499 <span class="keyword">if</span> strcmp(handles.sortclass, <span class="string">'popularity'</span>)
  1554. 1500 handles.mapindex = <a href="#_sub8" class="code" title="subfunction mapindex = sortindexbypop(handles)">sortindexbypop</a>(handles);
  1555. 1501 <span class="keyword">elseif</span> strcmp(handles.sortclass,<span class="string">'length'</span>);
  1556. 1502 handles.mapindex = <a href="#_sub9" class="code" title="subfunction mapindex = sortindexbylength(handles)">sortindexbylength</a>(handles);
  1557. 1503 <span class="keyword">else</span>
  1558. 1504 handles.mapindex = [1 : handles.nclasses];
  1559. 1505 <span class="keyword">end</span>
  1560. 1506 handles = <a href="#_sub7" class="code" title="subfunction handles = cindex2imagelist(handles)">cindex2imagelist</a>(handles);
  1561. 1507 handles = <a href="#_sub39" class="code" title="subfunction handles = reposition_images(handles, image_list)">reposition_images</a>(handles, handles.image_list);
  1562. 1508
  1563. 1509 <span class="keyword">if</span> (strcmp(handles.sortclass,<span class="string">'length'</span>) &amp;&amp; strcmp(handles.submode,<span class="string">'select-class'</span>)) || (strcmp(handles.sortclass,<span class="string">'length'</span>) &amp;&amp; strcmp(handles.submode,<span class="string">'compare'</span>))
  1564. 1510 <span class="comment">% jump to the segment with the closest size match</span>
  1565. 1511 i = 1;
  1566. 1512 <span class="keyword">while</span> (i &lt;= handles.nclasses) &amp;&amp; (handles.classes(handles.mapindex(i)).length &gt;= (handles.segments(handles.NextIndex).end - handles.segments(handles.NextIndex).start))
  1567. 1513 i = i + 1;
  1568. 1514 <span class="keyword">end</span>
  1569. 1515 cnrow = <a href="#_sub40" class="code" title="subfunction nrow = which_row(positions,index)">which_row</a>(handles.positions,i-1); <span class="comment">% get the current row</span>
  1570. 1516
  1571. 1517 <span class="keyword">if</span> cnrow &gt; handles.number_rows <span class="comment">% The closes size segment is not in view</span>
  1572. 1518 <span class="keyword">for</span> i = 1:(cnrow - handles.number_rows) <span class="comment">% matching size row is last</span>
  1573. 1519 handles = <a href="#_sub44" class="code" title="subfunction handles = row_forward(handles)">row_forward</a>(handles);
  1574. 1520 <span class="keyword">end</span>
  1575. 1521
  1576. 1522 <span class="keyword">if</span> not(handles.endpage == length(handles.positions)) <span class="comment">% if not at the last row position so that larger and smaller rows match</span>
  1577. 1523 nrows = floor(handles.number_rows / 2);
  1578. 1524 <span class="keyword">for</span> i = 1:nrows
  1579. 1525 handles = <a href="#_sub44" class="code" title="subfunction handles = row_forward(handles)">row_forward</a>(handles);
  1580. 1526 <span class="keyword">end</span>
  1581. 1527 <span class="keyword">end</span>
  1582. 1528
  1583. 1529
  1584. 1530 <span class="keyword">end</span>
  1585. 1531 <span class="keyword">end</span>
  1586. 1532
  1587. 1533 handles.cpositions = <a href="#_sub41" class="code" title="subfunction cpositions = get_curr_position(handles)">get_curr_position</a>(handles);
  1588. 1534 handles = <a href="#_sub38" class="code" title="subfunction handles = plot_classified_axes(handles, image_list, position_list)">plot_classified_axes</a>(handles, handles.image_list(handles.startpage:handles.endpage), handles.cpositions);
  1589. 1535 <span class="comment">%guidata(gcbo,handles);</span>
  1590. 1536 ;
  1591. 1537
  1592. 1538 <a name="_sub59" href="#_subfunctions" class="code">function handles = SetModePopupMenu(handles,viewstring)</a>
  1593. 1539 popmodes = get(handles.ModePopupMenu,<span class="string">'String'</span>);
  1594. 1540
  1595. 1541 find_index = 0;
  1596. 1542 i = 1;
  1597. 1543 <span class="keyword">while</span> (i &lt;= length(popmodes)) &amp;&amp; not(strcmp(popmodes(i),viewstring))
  1598. 1544 i = i + 1;
  1599. 1545 <span class="keyword">end</span>
  1600. 1546
  1601. 1547 <span class="keyword">if</span> i &lt;= length(popmodes) <span class="comment">% Don't do anything if the string cannot be found</span>
  1602. 1548 set(handles.ModePopupMenu,<span class="string">'Value'</span>,[i]);
  1603. 1549 <span class="keyword">end</span>
  1604. 1550
  1605. 1551 <span class="comment">% --- Executes on selection change in ModePopupMenu.</span>
  1606. 1552 <a name="_sub60" href="#_subfunctions" class="code">function ModePopupMenu_Callback(hObject, eventdata, handles)</a>
  1607. 1553 <span class="comment">% Configure call back</span>
  1608. 1554 <span class="comment">% hObject handle to ModePopupMenu (see GCBO)</span>
  1609. 1555 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  1610. 1556 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  1611. 1557
  1612. 1558 <span class="comment">% Hints: contents = get(hObject,'String') returns ModePopupMenu contents as cell array</span>
  1613. 1559 <span class="comment">% contents{get(hObject,'Value')} returns selected item from ModePopupMenu</span>
  1614. 1560
  1615. 1561 handles.startx = 1; <span class="comment">% if you have been scrolling reset to defaults</span>
  1616. 1562 handles.endx = handles.classified_width;
  1617. 1563 set(handles.SliderClassified,<span class="string">'Value'</span>,0);
  1618. 1564 <span class="comment">%set(handles.CompareToggleButton,'Visible','off');</span>
  1619. 1565 set(handles.RenameClassButton, <span class="string">'Visible'</span>, <span class="string">'off'</span>);
  1620. 1566
  1621. 1567 nmode = get(hObject,<span class="string">'Value'</span>);
  1622. 1568 modeview = get(hObject,<span class="string">'String'</span>);
  1623. 1569
  1624. 1570
  1625. 1571 <span class="keyword">if</span> strcmp(modeview(nmode),<span class="string">'all'</span>)
  1626. 1572 handles.mode = <span class="string">'browse'</span>;
  1627. 1573 handles.submode = <span class="string">'select'</span>;
  1628. 1574 handles=<a href="#_sub49" class="code" title="subfunction handles = BrowseDirectory(handles)">BrowseDirectory</a>(handles);
  1629. 1575 set(handles.RemoveClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  1630. 1576 set(handles.TypifyClassButton, <span class="string">'Visible'</span>, <span class="string">'off'</span>);
  1631. 1577 set(handles.NextClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  1632. 1578
  1633. 1579 <span class="keyword">elseif</span> strcmp(modeview(nmode),<span class="string">'class view'</span>)
  1634. 1580 set(handles.NextClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  1635. 1581 <span class="keyword">if</span> handles.nclasses &gt;= 1
  1636. 1582 handles = <a href="#_sub58" class="code" title="subfunction handles = configureclassview(handles,submode)">configureclassview</a>(handles,<span class="string">'select'</span>);
  1637. 1583 handles.mode = <span class="string">'class-view'</span>;
  1638. 1584 handles.submode = <span class="string">'select'</span>;
  1639. 1585 set(handles.RemoveClassButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
  1640. 1586 set(handles.RemoveClassButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1641. 1587 set(handles.CompareToggleButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
  1642. 1588 set(handles.CompareToggleButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  1643. 1589 set(handles.TypifyClassButton, <span class="string">'Visible'</span>, <span class="string">'off'</span>);
  1644. 1590 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles,[<span class="string">'Viewing all '</span> num2str(handles.nclasses) <span class="string">' classes'</span>])
  1645. 1591 <span class="keyword">else</span> <span class="comment">% empty axes</span>
  1646. 1592 handles = <a href="#_sub14" class="code" title="subfunction handles = blankaxes(handles)">blankaxes</a>(handles);
  1647. 1593 handles.mode = <span class="string">'class-view'</span>;
  1648. 1594 handles.submode = <span class="string">'xxx'</span>;
  1649. 1595 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles,<span class="string">''</span>);
  1650. 1596 <span class="keyword">end</span>
  1651. 1597 <span class="keyword">elseif</span> strcmp(modeview(nmode),<span class="string">'unclassified'</span>) || (strcmp(handles.segments(handles.NextIndex).class,<span class="string">''</span>) &amp;&amp; strcmp(modeview(nmode),<span class="string">'class members'</span>))
  1652. 1598 handles = <a href="#_sub63" class="code" title="subfunction handles = configureclassmembers(handles,classname)">configureclassmembers</a>(handles,<span class="string">''</span>);
  1653. 1599 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles,[<span class="string">'A total of '</span> num2str(length(handles.mapindex)) <span class="string">' unclassified segments '</span>]);
  1654. 1600 handles = <a href="#_sub59" class="code" title="subfunction handles = SetModePopupMenu(handles,viewstring)">SetModePopupMenu</a>(handles,<span class="string">'unclassified'</span>);
  1655. 1601 handles.mode = <span class="string">'browse'</span>;
  1656. 1602 handles.submode = <span class="string">'select'</span>;
  1657. 1603 set(handles.RemoveClassButton, <span class="string">'Visible'</span>, <span class="string">'off'</span>);
  1658. 1604 set(handles.TypifyClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  1659. 1605 set(handles.NextClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  1660. 1606 <span class="keyword">elseif</span> strcmp(modeview(nmode),<span class="string">'class members'</span>)
  1661. 1607 handles = <a href="#_sub63" class="code" title="subfunction handles = configureclassmembers(handles,classname)">configureclassmembers</a>(handles,handles.segments(handles.NextIndex).class);
  1662. 1608 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles,[<span class="string">'Viewing '</span> num2str(length(handles.mapindex)) <span class="string">' members of '</span> handles.segments(handles.NextIndex).class]);
  1663. 1609 handles.mode = <span class="string">'class-members'</span>;
  1664. 1610 handles.submode = <span class="string">'select'</span>;
  1665. 1611 handles.lastclass = <a href="#_sub65" class="code" title="subfunction cindex = get_class_index(handles,classname);">get_class_index</a>(handles,handles.segments(handles.NextIndex).class);
  1666. 1612 set(handles.TypifyClassButton,<span class="string">'Visible'</span>, <span class="string">'on'</span>);
  1667. 1613 set(handles.RemoveClassButton, <span class="string">'Visible'</span>, <span class="string">'off'</span>);
  1668. 1614 set(handles.RenameClassButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
  1669. 1615 set(handles.NextClassButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
  1670. 1616 <span class="keyword">end</span>
  1671. 1617 guidata(gcbo,handles);
  1672. 1618
  1673. 1619 <span class="comment">% --- Executes during object creation, after setting all properties.</span>
  1674. 1620 <a name="_sub61" href="#_subfunctions" class="code">function ModePopupMenu_CreateFcn(hObject, eventdata, handles)</a>
  1675. 1621 <span class="comment">% hObject handle to ModePopupMenu (see GCBO)</span>
  1676. 1622 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  1677. 1623 <span class="comment">% handles empty - handles not created until after all CreateFcns called</span>
  1678. 1624
  1679. 1625 <span class="comment">% Hint: popupmenu controls usually have a white background on Windows.</span>
  1680. 1626 <span class="comment">% See ISPC and COMPUTER.</span>
  1681. 1627 <span class="keyword">if</span> ispc
  1682. 1628 set(hObject,<span class="string">'BackgroundColor'</span>,<span class="string">'white'</span>);
  1683. 1629 <span class="keyword">else</span>
  1684. 1630 set(hObject,<span class="string">'BackgroundColor'</span>,get(0,<span class="string">'defaultUicontrolBackgroundColor'</span>));
  1685. 1631 <span class="keyword">end</span>
  1686. 1632
  1687. 1633 <a name="_sub62" href="#_subfunctions" class="code">function set_status(handles, statusstring)</a>
  1688. 1634 set(handles.SegInfoText,<span class="string">'String'</span>,statusstring);
  1689. 1635 set(handles.SegInfoText,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
  1690. 1636 ;
  1691. 1637
  1692. 1638 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
  1693. 1639 <span class="comment">% Functions for filtering by class type %</span>
  1694. 1640 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
  1695. 1641
  1696. 1642 <a name="_sub63" href="#_subfunctions" class="code">function handles = configureclassmembers(handles,classname)</a>
  1697. 1643
  1698. 1644 handles.mapindex = <a href="#_sub64" class="code" title="subfunction indexfilter = select_class(handles,segments,classname)">select_class</a>(handles,handles.segments,classname);
  1699. 1645
  1700. 1646 <span class="keyword">if</span> length(handles.mapindex) &gt; 0
  1701. 1647 handles.image_list = {};
  1702. 1648 <span class="comment">%load('-mat','specicons');</span>
  1703. 1649
  1704. 1650 <span class="keyword">for</span> i = 1:length(handles.mapindex)
  1705. 1651 handles.image_list(i) = handles.IconList(handles.mapindex(i));
  1706. 1652 <span class="keyword">end</span>
  1707. 1653 handles = <a href="#_sub39" class="code" title="subfunction handles = reposition_images(handles, image_list)">reposition_images</a>(handles, handles.image_list);
  1708. 1654 handles.cpositions = <a href="#_sub41" class="code" title="subfunction cpositions = get_curr_position(handles)">get_curr_position</a>(handles);
  1709. 1655 <span class="comment">%</span>
  1710. 1656 <span class="comment">%handles.mode = 'class-members';</span>
  1711. 1657 handles = <a href="#_sub38" class="code" title="subfunction handles = plot_classified_axes(handles, image_list, position_list)">plot_classified_axes</a>(handles, handles.image_list(handles.startpage:handles.endpage), handles.cpositions);
  1712. 1658 <span class="comment">%handles = SetModePopupMenu(handles,'class members');</span>
  1713. 1659 <span class="keyword">else</span>
  1714. 1660 handles = <a href="#_sub14" class="code" title="subfunction handles = blankaxes(handles)">blankaxes</a>(handles);
  1715. 1661 <span class="comment">%handles.mode = 'class-view';</span>
  1716. 1662 <span class="comment">%handles.submode = 'select';</span>
  1717. 1663 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles,<span class="string">''</span>);
  1718. 1664 <span class="keyword">end</span>
  1719. 1665 ;
  1720. 1666
  1721. 1667 <a name="_sub64" href="#_subfunctions" class="code">function indexfilter = select_class(handles,segments,classname)</a>
  1722. 1668 <span class="comment">% Returns an index array of original addresses of segments which are members of a</span>
  1723. 1669 <span class="comment">% specified class</span>
  1724. 1670 indexfilter = [];
  1725. 1671 nclassmembers = 0;
  1726. 1672 <span class="keyword">for</span> i = 1:handles.nsegments
  1727. 1673 <span class="keyword">if</span> strcmp(segments(i).class,classname)
  1728. 1674 nclassmembers = nclassmembers + 1;
  1729. 1675 indexfilter(nclassmembers) = i;
  1730. 1676 <span class="keyword">end</span>
  1731. 1677 <span class="keyword">end</span>
  1732. 1678
  1733. 1679 <a name="_sub65" href="#_subfunctions" class="code">function cindex = get_class_index(handles,classname);</a>
  1734. 1680 cindex = 0;
  1735. 1681 i = 1;
  1736. 1682 <span class="keyword">while</span> (i &lt;= handles.nclasses) &amp;&amp; not(strcmp(handles.classes(i).name,classname))
  1737. 1683 i = i + 1;
  1738. 1684 <span class="keyword">end</span>
  1739. 1685 cindex = i;
  1740. 1686
  1741. 1687 <a name="_sub66" href="#_subfunctions" class="code">function value = mapind(index)</a>
  1742. 1688 <span class="comment">% Map the index value back to its original value</span>
  1743. 1689 value = handles.mapindex(index);
  1744. 1690
  1745. 1691 <span class="comment">%%&amp;&amp; not(strcmp(segments(i).class,''));</span>
  1746. 1692 <a name="_sub67" href="#_subfunctions" class="code">function write_syllable_database(handles)</a>
  1747. 1693 filename = [handles.baseclassname <span class="string">'.dat'</span>];
  1748. 1694 fid = fopen(filename,<span class="string">'wt'</span>);
  1749. 1695
  1750. 1696 classes = handles.classes;
  1751. 1697
  1752. 1698 <span class="keyword">if</span> fid &gt; -1
  1753. 1699 <span class="keyword">for</span> i = 1:handles.nsegments
  1754. 1700 segment = handles.segments(i);
  1755. 1701 wavfile = segment.wavfile;
  1756. 1702 specfilename = segment.specfilename;
  1757. 1703 seg = [ num2str(segment.start) <span class="string">'\t'</span> num2str(segment.end)];
  1758. 1704 classname = [ segment.class ];
  1759. 1705 typify = <span class="string">''</span>;
  1760. 1706 nclasses = length(classes);
  1761. 1707 j = 1;
  1762. 1708 <span class="keyword">while</span> (nclasses &gt; 0) &amp;&amp; (j &lt;= nclasses) &amp;&amp; not(strcmp(segment.specfilename,classes(j).specfilename))
  1763. 1709 j = j + 1;
  1764. 1710 <span class="keyword">end</span>
  1765. 1711 <span class="keyword">if</span> j &lt;= length(classes) <span class="comment">% found a match</span>
  1766. 1712 classes = [classes(1:j-1) classes(j+1:nclasses)]; <span class="comment">% shorten the classes</span>
  1767. 1713 typify = <span class="string">'*'</span>; <span class="comment">% indicates that this is typological class</span>
  1768. 1714 <span class="keyword">end</span>
  1769. 1715 fprintf(fid,[specfilename <span class="string">'\t'</span> wavfile <span class="string">'\t'</span> seg <span class="string">'\t'</span> classname <span class="string">'\t'</span> typify <span class="string">'\n'</span>]);
  1770. 1716 <span class="keyword">end</span>
  1771. 1717 fclose(fid);
  1772. 1718 <span class="keyword">end</span>
  1773. 1719 ;
  1774. 1720
  1775. 1721 <a name="_sub68" href="#_subfunctions" class="code">function data = read_syllable_database(handles)</a>
  1776. 1722 filename = [handles.baseclassname <span class="string">'.dat'</span>];
  1777. 1723 fid = fopen(filename,<span class="string">'rt'</span>);
  1778. 1724 data = textscan(fid,<span class="string">'%s %s %n %n %s %s'</span>, <span class="string">'delimiter'</span>,<span class="string">'\t'</span>);
  1779. 1725 data = [data(1), data(5), data(6)]; <span class="comment">% throw out extra stuff which will be useful for external analysis</span>
  1780. 1726 fclose(fid);
  1781. 1727 ;
  1782. 1728
  1783. 1729 <a name="_sub69" href="#_subfunctions" class="code">function handles = merge_syllable_database(handles,data)</a>
  1784. 1730 <span class="comment">% Merge the syllable list with the loaded database</span>
  1785. 1731
  1786. 1732 <span class="comment">%load('-mat','specicons');</span>
  1787. 1733 specfilenames = data{1};
  1788. 1734 classnames = data{2};
  1789. 1735 typifies = data{3};
  1790. 1736 ndata = length(specfilenames);
  1791. 1737 <span class="comment">%classnum = 1;</span>
  1792. 1738 handles.classes = [];
  1793. 1739 handles.nclasses = 0;
  1794. 1740 <span class="keyword">for</span> i = 1:ndata
  1795. 1741 j=1; <span class="comment">% allow for no matches and allow for</span>
  1796. 1742 <span class="keyword">while</span> (j &lt; handles.nsegments) &amp;&amp; not(strcmp(specfilenames(i),handles.segments(j).specfilename))
  1797. 1743 j = j + 1;
  1798. 1744 <span class="keyword">end</span>
  1799. 1745 <span class="keyword">if</span> j &lt;= handles.nsegments
  1800. 1746 handles.segments(j).class = classnames{i};
  1801. 1747 <span class="keyword">if</span> strcmp(typifies(i),<span class="string">'*'</span>) <span class="comment">% this is the type class</span>
  1802. 1748 <span class="comment">%classnum = classnum + 1;</span>
  1803. 1749 class.specfilename = specfilenames{i};
  1804. 1750 class.name = classnames{i};
  1805. 1751 class.index = j;
  1806. 1752 class.length = handles.segments(j).end - handles.segments(j).start;
  1807. 1753 class.iconS = handles.IconList{j};
  1808. 1754 class.nmembers = 0; <span class="comment">% will update shortly</span>
  1809. 1755 handles.nclasses = handles.nclasses + 1;
  1810. 1756 handles.classes = [handles.classes class];
  1811. 1757 <span class="keyword">end</span>
  1812. 1758 <span class="keyword">end</span>
  1813. 1759 <span class="keyword">end</span>
  1814. 1760
  1815. 1761 <span class="comment">% Now that we have the classes defined update the number of members</span>
  1816. 1762 <span class="keyword">for</span> i = 1:handles.nclasses
  1817. 1763 <span class="keyword">for</span> j = 1 : handles.nsegments
  1818. 1764 <span class="keyword">if</span> strcmp(handles.classes(i).name,handles.segments(j).class)
  1819. 1765 handles.classes(i).nmembers = handles.classes(i).nmembers + 1;
  1820. 1766 <span class="keyword">end</span>
  1821. 1767 <span class="keyword">end</span>
  1822. 1768 <span class="keyword">end</span>
  1823. 1769
  1824. 1770
  1825. 1771 <span class="comment">% --- Executes on button press in SaveButton.</span>
  1826. 1772 <a name="_sub70" href="#_subfunctions" class="code">function SaveButton_Callback(hObject, eventdata, handles)</a>
  1827. 1773 <span class="comment">% hObject handle to SaveButton (see GCBO)</span>
  1828. 1774 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  1829. 1775 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  1830. 1776
  1831. 1777 <a href="#_sub67" class="code" title="subfunction write_syllable_database(handles)">write_syllable_database</a>(handles); <span class="comment">% save the database</span>
  1832. 1778 <a href="#_sub96" class="code" title="subfunction status = save_configuration(handles,filename)">save_configuration</a>(handles,handles.configfile); <span class="comment">% save the current configuration</span>
  1833. 1779
  1834. 1780
  1835. 1781 <span class="comment">% --- Executes on slider movement.</span>
  1836. 1782 <a name="_sub71" href="#_subfunctions" class="code">function SliderClassified_Callback(hObject, eventdata, handles)</a>
  1837. 1783 <span class="comment">% hObject handle to SliderClassified (see GCBO)</span>
  1838. 1784 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  1839. 1785 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  1840. 1786
  1841. 1787 <span class="comment">% Hints: get(hObject,'Value') returns position of slider</span>
  1842. 1788 <span class="comment">% get(hObject,'Min') and get(hObject,'Max') to determine range of slider</span>
  1843. 1789
  1844. 1790 xposition = round(get(hObject,<span class="string">'Value'</span>));
  1845. 1791 <span class="comment">%xposition</span>
  1846. 1792 handles.startx = 1 + xposition;
  1847. 1793 handles.endx = xposition + handles.classified_width;
  1848. 1794 handles.cpositions = <a href="#_sub41" class="code" title="subfunction cpositions = get_curr_position(handles)">get_curr_position</a>(handles);
  1849. 1795 classview = handles.classmatrix(:,handles.startx:handles.endx); <span class="comment">% will cut overhang</span>
  1850. 1796 axes(handles.ClassifiedAxes);
  1851. 1797 handles.hiclass = image(classview);
  1852. 1798
  1853. 1799 set(handles.hiclass,<span class="string">'ButtonDownFcn'</span>,{@<a href="#_sub57" class="code" title="subfunction ClassifyAxesClickCallBack(src,eventdata)">ClassifyAxesClickCallBack</a>});
  1854. 1800 set(handles.ClassifiedAxes,<span class="string">'XTick'</span>,[]);
  1855. 1801 set(handles.ClassifiedAxes,<span class="string">'YTick'</span>,[]);
  1856. 1802
  1857. 1803 guidata(hObject, handles);
  1858. 1804
  1859. 1805 <span class="comment">% --- Executes during object creation, after setting all properties.</span>
  1860. 1806 <a name="_sub72" href="#_subfunctions" class="code">function SliderClassified_CreateFcn(hObject, eventdata, handles)</a>
  1861. 1807 <span class="comment">% hObject handle to SliderClassified (see GCBO)</span>
  1862. 1808 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  1863. 1809 <span class="comment">% handles empty - handles not created until after all CreateFcns called</span>
  1864. 1810
  1865. 1811 <span class="comment">% Hint: slider controls usually have a light gray background, change</span>
  1866. 1812 <span class="comment">% 'usewhitebg' to 0 to use default. See ISPC and COMPUTER.</span>
  1867. 1813 usewhitebg = 1;
  1868. 1814 <span class="keyword">if</span> usewhitebg
  1869. 1815 set(hObject,<span class="string">'BackgroundColor'</span>,[.9 .9 .9]);
  1870. 1816 <span class="keyword">else</span>
  1871. 1817 set(hObject,<span class="string">'BackgroundColor'</span>,get(0,<span class="string">'defaultUicontrolBackgroundColor'</span>));
  1872. 1818 <span class="keyword">end</span>
  1873. 1819
  1874. 1820 <span class="comment">% --- Executes on selection change in SortPopupMenu.</span>
  1875. 1821 <a name="_sub73" href="#_subfunctions" class="code">function SortPopupMenu_Callback(hObject, eventdata, handles)</a>
  1876. 1822 <span class="comment">% hObject handle to SortPopupMenu (see GCBO) eventdata reserved - to be defined in a future version of MATLAB</span>
  1877. 1823 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  1878. 1824
  1879. 1825 <span class="comment">% Hints: contents = get(hObject,'String') returns SortPopupMenu contents as cell array</span>
  1880. 1826 <span class="comment">% contents{get(hObject,'Value')} returns selected item from SortPopupMenu</span>
  1881. 1827
  1882. 1828 sortlist = get(hObject,<span class="string">'String'</span>);
  1883. 1829 sortn = get(hObject,<span class="string">'Value'</span>);
  1884. 1830 sortby = sortlist(sortn);
  1885. 1831
  1886. 1832 <span class="keyword">if</span> strcmp(sortby,<span class="string">'original'</span>)
  1887. 1833 handles.sortclass = <span class="string">'original'</span>;
  1888. 1834 <span class="keyword">elseif</span> strcmp(sortby,<span class="string">'by length'</span>)
  1889. 1835 handles.sortclass = <span class="string">'length'</span>;
  1890. 1836 <span class="keyword">elseif</span> strcmp(sortby,<span class="string">'by popularity'</span>)
  1891. 1837 handles.sortclass = <span class="string">'popularity'</span>;
  1892. 1838 <span class="keyword">end</span>
  1893. 1839
  1894. 1840 handles = <a href="#_sub58" class="code" title="subfunction handles = configureclassview(handles,submode)">configureclassview</a>(handles,handles.submode);
  1895. 1841
  1896. 1842 guidata(gcbo,handles);
  1897. 1843
  1898. 1844 <span class="comment">% --- Executes during object creation, after setting all properties.</span>
  1899. 1845 <a name="_sub74" href="#_subfunctions" class="code">function SortPopupMenu_CreateFcn(hObject, eventdata, handles)</a>
  1900. 1846 <span class="comment">% hObject handle to SortPopupMenu (see GCBO)</span>
  1901. 1847 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  1902. 1848 <span class="comment">% handles empty - handles not created until after all CreateFcns called</span>
  1903. 1849
  1904. 1850 <span class="comment">% Hint: popupmenu controls usually have a white background on Windows.</span>
  1905. 1851 <span class="comment">% See ISPC and COMPUTER.</span>
  1906. 1852 <span class="keyword">if</span> ispc
  1907. 1853 set(hObject,<span class="string">'BackgroundColor'</span>,<span class="string">'white'</span>);
  1908. 1854 <span class="keyword">else</span>
  1909. 1855 set(hObject,<span class="string">'BackgroundColor'</span>,get(0,<span class="string">'defaultUicontrolBackgroundColor'</span>));
  1910. 1856 <span class="keyword">end</span>
  1911. 1857
  1912. 1858
  1913. 1859 <a name="_sub75" href="#_subfunctions" class="code">function segments = rename_segments(segments,oldname,newname)</a>
  1914. 1860
  1915. 1861 nsegments = length(segments);
  1916. 1862 <span class="keyword">for</span> i = 1 : nsegments
  1917. 1863 <span class="keyword">if</span> strcmp(segments(i).class,oldname)
  1918. 1864 segments(i).class = newname;
  1919. 1865 <span class="keyword">end</span>
  1920. 1866 <span class="keyword">end</span>
  1921. 1867
  1922. 1868 <a name="_sub76" href="#_subfunctions" class="code">function cln = doesclassexist(classname,classes)</a>
  1923. 1869 <span class="comment">% tests whether the current class name already exists if does not exist</span>
  1924. 1870 <span class="comment">% returns 1 if it does exist returns 0</span>
  1925. 1871
  1926. 1872 i = 1;
  1927. 1873 nclasses = length(classes);
  1928. 1874
  1929. 1875 <span class="keyword">while</span> (i &lt;= nclasses) &amp;&amp; (strcmp(classname,classes(i).name))
  1930. 1876 i = i + 1;
  1931. 1877 <span class="keyword">end</span>
  1932. 1878
  1933. 1879 <span class="keyword">if</span> i &lt;= nclasses
  1934. 1880 cln = i;
  1935. 1881 <span class="keyword">else</span>
  1936. 1882 cln = 0;
  1937. 1883 <span class="keyword">end</span>
  1938. 1884
  1939. 1885 <span class="comment">% --- Executes on button press in RenameClassButton.</span>
  1940. 1886 <a name="_sub77" href="#_subfunctions" class="code">function RenameClassButton_Callback(hObject, eventdata, handles)</a>
  1941. 1887 <span class="comment">% hObject handle to RenameClassButton (see GCBO)</span>
  1942. 1888 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  1943. 1889 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  1944. 1890
  1945. 1891 class = handles.classes(handles.lastclass);
  1946. 1892 answer = inputdlg({<span class="string">'Class name'</span>},<span class="string">'Edit class name'</span>,1,{class.name});
  1947. 1893
  1948. 1894 <span class="comment">% check the answer</span>
  1949. 1895 sizeanswer = size(answer);
  1950. 1896
  1951. 1897 secondanswer = <span class="string">''</span>;
  1952. 1898
  1953. 1899 <span class="keyword">if</span> sizeanswer(1)
  1954. 1900 <span class="keyword">if</span> not(strcmp(class.name,answer{1}))
  1955. 1901 classnexists = <a href="#_sub76" class="code" title="subfunction cln = doesclassexist(classname,classes)">doesclassexist</a>(answer{1},handles.classes);
  1956. 1902 <span class="keyword">if</span> classnexists
  1957. 1903 secondanswer = questdlg(<span class="string">'Class name already exists. Do you want to merge the two classes.'</span>)
  1958. 1904 <span class="keyword">end</span>
  1959. 1905 <span class="keyword">if</span> strcmp(secondanswer,<span class="string">'Yes'</span>) || strcmp(secondanswer,<span class="string">''</span>)
  1960. 1906 segments = <a href="#_sub75" class="code" title="subfunction segments = rename_segments(segments,oldname,newname)">rename_segments</a>(handles.segments,class.name,answer{1});
  1961. 1907 class.name = answer{1};
  1962. 1908 cindex = handles.lastclass;
  1963. 1909 handles.classes(cindex) = class;
  1964. 1910 handles.segments = segments;
  1965. 1911
  1966. 1912 <span class="keyword">if</span> strcmp(secondanswer,<span class="string">'Yes'</span>) <span class="comment">% functionality for merging two classes</span>
  1967. 1913 handles.classes(classnexists).nmembers = handles.classes(classnexists).nmembers + handles.classes(cindex).nmembers;
  1968. 1914 handles.classes = [handles.classes(1:(cindex-1)) handles.classes((cindex+1):handles.nclasses)];
  1969. 1915 handles.nclasses = handles.nclasses - 1;
  1970. 1916 class.nmembers = handles.classes(classnexists).nmembers; <span class="comment">% this is parasitic code</span>
  1971. 1917 <span class="keyword">end</span>
  1972. 1918 <span class="keyword">end</span>
  1973. 1919 handles = <a href="#_sub63" class="code" title="subfunction handles = configureclassmembers(handles,classname)">configureclassmembers</a>(handles,class.name);
  1974. 1920 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles, [<span class="string">'Viewing '</span> num2str(class.nmembers),<span class="string">' members of '</span> class.name]);
  1975. 1921 <span class="keyword">end</span>
  1976. 1922 <span class="keyword">end</span>
  1977. 1923 guidata(gcbo,handles);
  1978. 1924
  1979. 1925
  1980. 1926 <a name="_sub78" href="#_subfunctions" class="code">function spectras = subsamplespectra(spectra,lowerfreq,upperfreq,freqrange)</a>
  1981. 1927 <span class="comment">% Returns a subsampled frequency of the spectra</span>
  1982. 1928
  1983. 1929 freqsamples = length(spectra(:,1));
  1984. 1930 freqratio = freqsamples / (freqrange(2) - freqrange(1));
  1985. 1931
  1986. 1932 lowerfreqsamp = round(lowerfreq * freqratio) + 1;
  1987. 1933 upperfreqsamp = round(upperfreq * freqratio) + 1;
  1988. 1934
  1989. 1935 <span class="keyword">if</span> lowerfreqsamp &lt; 1 <span class="comment">% make sure we are not out of range</span>
  1990. 1936 lowerfreqsamp = 1;
  1991. 1937 <span class="keyword">end</span>
  1992. 1938
  1993. 1939 <span class="keyword">if</span> upperfreq &gt; freqsamples
  1994. 1940 upperfeqsamp = freqsamples;
  1995. 1941 <span class="keyword">end</span>
  1996. 1942
  1997. 1943 spectras = spectra(lowerfreqsamp:upperfreqsamp,:);
  1998. 1944
  1999. 1945 <a name="_sub79" href="#_subfunctions" class="code">function handles = generate_subsamples_icons(handles)</a>
  2000. 1946 segments = handles.segments;
  2001. 1947 IconListf = {};
  2002. 1948 hw = waitbar(0,<span class="string">'Zooming spectra. . .'</span>);
  2003. 1949 <span class="keyword">for</span> i = 1:handles.nsegments
  2004. 1950 load(<span class="string">'-mat'</span>,segments(i).specfilename);
  2005. 1951 Ssub = <a href="#_sub78" class="code" title="subfunction spectras = subsamplespectra(spectra,lowerfreq,upperfreq,freqrange)">subsamplespectra</a>(S,handles.lowerfreq,handles.upperfreq,handles.fpass);
  2006. 1952 IconListf{i} = <a href="#_sub32" class="code" title="subfunction iconS = iconify_spec(S,height)">iconify_spec</a>(Ssub,handles.ispecheight);
  2007. 1953 waitbar(i/handles.nsegments);
  2008. 1954 <span class="keyword">end</span>
  2009. 1955 <a href="../../chronux_2_10/fly_track/videoIO/videoIO_2006a/@videoReader/close.html" class="code" title="function vr = close(vr)">close</a>(hw);
  2010. 1956 handles.IconListf = IconListf;
  2011. 1957
  2012. 1958
  2013. 1959 <a name="_sub80" href="#_subfunctions" class="code">function handles = ZoomSpectra(handles,status)</a>
  2014. 1960 <span class="keyword">if</span> strcmp(status,<span class="string">'Zoom in'</span>)
  2015. 1961 <span class="keyword">if</span> (length(handles.IconListf) == 0) || (handles.rezoom)
  2016. 1962 handles = <a href="#_sub79" class="code" title="subfunction handles = generate_subsamples_icons(handles)">generate_subsamples_icons</a>(handles);
  2017. 1963 handles.rezoom = logical(0);
  2018. 1964 <span class="keyword">end</span>
  2019. 1965 handles.FullIconList = handles.IconList;
  2020. 1966 set(handles.ZoomButton,<span class="string">'String'</span>,<span class="string">'Zoom out'</span>);
  2021. 1967 handles.IconList = handles.IconListf;
  2022. 1968 <span class="keyword">elseif</span> strcmp(status,<span class="string">'Zoom out'</span>);
  2023. 1969
  2024. 1970 <span class="keyword">if</span> handles.rezoom
  2025. 1971 handles = <a href="#_sub79" class="code" title="subfunction handles = generate_subsamples_icons(handles)">generate_subsamples_icons</a>(handles);
  2026. 1972 handles.rezoom = logical(0);
  2027. 1973 set(handles.ZoomButton,<span class="string">'String'</span>,<span class="string">'Zoom out'</span>);
  2028. 1974 handles.IconList = handles.IconListf;
  2029. 1975 <span class="keyword">else</span>
  2030. 1976 handles.IconList = handles.FullIconList;
  2031. 1977 set(handles.ZoomButton,<span class="string">'String'</span>,<span class="string">'Zoom in'</span>);
  2032. 1978 <span class="keyword">end</span>
  2033. 1979 <span class="keyword">end</span>
  2034. 1980
  2035. 1981 <span class="keyword">for</span> j = 1:handles.nclasses <span class="comment">% switch over class icons</span>
  2036. 1982 handles.classes(j).iconS = handles.IconList{handles.classes(j).index};
  2037. 1983 <span class="keyword">end</span>
  2038. 1984
  2039. 1985 nimages = length(handles.mapindex);
  2040. 1986
  2041. 1987 <span class="comment">% this is kind of ugly</span>
  2042. 1988 <span class="keyword">if</span> not(strcmp(handles.mode,<span class="string">'class-view'</span>)) &amp;&amp; not(strcmp(handles.mode,<span class="string">'comparison'</span>)) <span class="comment">% update images</span>
  2043. 1989 <span class="keyword">for</span> i = 1:nimages
  2044. 1990 handles.image_list{i} = handles.IconList{handles.mapindex(i)};
  2045. 1991 <span class="keyword">end</span>
  2046. 1992 <span class="keyword">elseif</span> strcmp(handles.mode,<span class="string">'comparison'</span>)
  2047. 1993 handles.image_list{1} = handles.IconList{handles.NextIndex};
  2048. 1994 handles.image_list{2} = handles.IconList{handles.classes(handles.lastclass).index};
  2049. 1995 <span class="keyword">else</span>
  2050. 1996 <span class="keyword">for</span> i = 1:nimages
  2051. 1997 handles.image_list{i} = handles.IconList{handles.classes(handles.mapindex(i)).index};
  2052. 1998 <span class="keyword">end</span>
  2053. 1999 <span class="keyword">end</span>
  2054. 2000
  2055. 2001 handles=<a href="#_sub22" class="code" title="subfunction handles=get_and_plot(handles, segment)">get_and_plot</a>(handles,handles.segments(handles.NextIndex));
  2056. 2002 handles = <a href="#_sub38" class="code" title="subfunction handles = plot_classified_axes(handles, image_list, position_list)">plot_classified_axes</a>(handles, handles.image_list(handles.startpage:handles.endpage), handles.cpositions);
  2057. 2003
  2058. 2004
  2059. 2005
  2060. 2006 <span class="comment">% --- Executes on button press in ZoomButton.</span>
  2061. 2007 <a name="_sub81" href="#_subfunctions" class="code">function ZoomButton_Callback(hObject, eventdata, handles)</a>
  2062. 2008 <span class="comment">% hObject handle to ZoomButton (see GCBO)</span>
  2063. 2009 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  2064. 2010 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  2065. 2011
  2066. 2012 status = get(handles.ZoomButton,<span class="string">'String'</span>);
  2067. 2013
  2068. 2014 handles = <a href="#_sub80" class="code" title="subfunction handles = ZoomSpectra(handles,status)">ZoomSpectra</a>(handles,status);
  2069. 2015
  2070. 2016 guidata(gcbo,handles);
  2071. 2017
  2072. 2018 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
  2073. 2019 <span class="comment">% Functions for computing class statistics %</span>
  2074. 2020 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
  2075. 2021
  2076. 2022 <a name="_sub82" href="#_subfunctions" class="code">function [meanl sdl] = stat_lengths(handles)</a>
  2077. 2023 lengthsarray = [];
  2078. 2024 <span class="keyword">for</span> i = 1:length(handles.mapindex)
  2079. 2025 lengthsarray(i) = handles.segments(i).end - handles.segments(i).start;
  2080. 2026 <span class="keyword">end</span>
  2081. 2027 meanl = mean(lengthsarray);
  2082. 2028 sdl = sd(lengthsarray);
  2083. 2029
  2084. 2030
  2085. 2031 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
  2086. 2032 <span class="comment">% Functions for quick classify mode %</span>
  2087. 2033 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
  2088. 2034
  2089. 2035 <a name="_sub83" href="#_subfunctions" class="code">function handles = quick_mode_exit(handles)</a>
  2090. 2036 set(handles.SkipButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  2091. 2037 set(handles.UndoButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  2092. 2038 set(handles.NewQuickButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  2093. 2039
  2094. 2040 set(handles.ViewText,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
  2095. 2041 set(handles.ModePopupMenu,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
  2096. 2042 set(handles.SegInfoText,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
  2097. 2043
  2098. 2044 set(handles.ClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  2099. 2045 set(handles.RemoveClassButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  2100. 2046 set(handles.RemoveClassButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
  2101. 2047 set(handles.CompareToggleButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  2102. 2048 set(handles.AutoClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  2103. 2049 set(handles.SortPopupMenu,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  2104. 2050 set(handles.ModePopupMenu,<span class="string">'Value'</span>,3);
  2105. 2051
  2106. 2052 handles.submode=<span class="string">'select'</span>;
  2107. 2053
  2108. 2054 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles,[<span class="string">'Viewing all '</span> num2str(handles.nclasses) <span class="string">' classes'</span>]);
  2109. 2055
  2110. 2056 <a href="#_sub54" class="code" title="subfunction setnavigationbuttons(handles)">setnavigationbuttons</a>(handles);
  2111. 2057
  2112. 2058
  2113. 2059 <span class="comment">% --- Executes on button press in QuickModeButton.</span>
  2114. 2060 <a name="_sub84" href="#_subfunctions" class="code">function QuickModeButton_Callback(hObject, eventdata, handles)</a>
  2115. 2061 <span class="comment">% hObject handle to QuickModeButton (see GCBO)</span>
  2116. 2062 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  2117. 2063 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  2118. 2064
  2119. 2065 <span class="keyword">if</span> not(handles.quickmode) <span class="comment">% turn on quick mode</span>
  2120. 2066
  2121. 2067 handles.quickmode = 1;
  2122. 2068
  2123. 2069 <span class="comment">% Turn off top header</span>
  2124. 2070 set(handles.ViewText,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  2125. 2071 set(handles.ModePopupMenu,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  2126. 2072 set(handles.SegInfoText,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  2127. 2073
  2128. 2074 <span class="comment">% Make visible quick mode buttons</span>
  2129. 2075 set(handles.SkipButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
  2130. 2076 set(handles.SkipButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  2131. 2077 set(handles.UndoButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
  2132. 2078 set(handles.UndoButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  2133. 2079 set(handles.NewQuickButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
  2134. 2080 set(handles.NewQuickButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
  2135. 2081
  2136. 2082 set(handles.SortPopupMenu,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
  2137. 2083
  2138. 2084 <span class="comment">% Disable regular mode functions</span>
  2139. 2085 set(handles.RemoveClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  2140. 2086 set(handles.NextClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  2141. 2087 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  2142. 2088 set(handles.PreviousSpectraButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  2143. 2089 set(handles.ClassifyButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  2144. 2090 set(handles.TypifyClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  2145. 2091 set(handles.RenameClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  2146. 2092 set(handles.CompareToggleButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  2147. 2093 set(handles.AutoClassifyButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  2148. 2094
  2149. 2095 <span class="comment">% Will need to disable buttons underneath classified axes</span>
  2150. 2096 <span class="keyword">if</span> not(strcmp(handles.segments(handles.NextIndex).class,<span class="string">''</span>))
  2151. 2097 handles = <a href="#_sub85" class="code" title="subfunction handles=jump_to_unclassified(handles)">jump_to_unclassified</a>(handles);
  2152. 2098 handles.lastsegment = handles.NextIndex;
  2153. 2099 <span class="keyword">end</span>
  2154. 2100
  2155. 2101 <span class="keyword">if</span> handles.nclasses &gt;= 1
  2156. 2102 handles = <a href="#_sub58" class="code" title="subfunction handles = configureclassview(handles,submode)">configureclassview</a>(handles,<span class="string">'select-class'</span>);
  2157. 2103 handles.mode = <span class="string">'class-view'</span>;
  2158. 2104 handles.submode = <span class="string">'select-class'</span>;
  2159. 2105 <span class="keyword">else</span> <span class="comment">% empty axes</span>
  2160. 2106 handles = <a href="#_sub14" class="code" title="subfunction handles = blankaxes(handles)">blankaxes</a>(handles);
  2161. 2107 handles.mode = <span class="string">'class-view'</span>;
  2162. 2108 handles.submode = <span class="string">'xxx'</span>;
  2163. 2109 <span class="keyword">end</span>
  2164. 2110
  2165. 2111
  2166. 2112 <span class="keyword">else</span>
  2167. 2113 handles.quickmode = 0;
  2168. 2114 handles = <a href="#_sub83" class="code" title="subfunction handles = quick_mode_exit(handles)">quick_mode_exit</a>(handles);
  2169. 2115
  2170. 2116 <span class="comment">% Will need to intellegently enable buttons underneath classified axes</span>
  2171. 2117 <span class="keyword">end</span>
  2172. 2118
  2173. 2119 guidata(gcbo,handles);
  2174. 2120
  2175. 2121 <a name="_sub85" href="#_subfunctions" class="code">function handles=jump_to_unclassified(handles)</a>
  2176. 2122 <span class="comment">% Jumps to the next unclassified segment</span>
  2177. 2123 currindex = handles.NextIndex;
  2178. 2124 i = currindex;
  2179. 2125 <span class="keyword">while</span> (mod(i,handles.nsegments)+1 ~= currindex) &amp;&amp; not(strcmp(handles.segments(mod(i,handles.nsegments) + 1).class,<span class="string">''</span>))
  2180. 2126 i = i + 1;
  2181. 2127 <span class="keyword">end</span>
  2182. 2128
  2183. 2129 <span class="keyword">if</span> not(mod(i,handles.nsegments)+1 == currindex) <span class="comment">% there are some unclassified segments</span>
  2184. 2130 handles.NextIndex = mod(i,handles.nsegments) + 1;
  2185. 2131 handles=<a href="#_sub13" class="code" title="subfunction handles=ConfigureClassSegment(handles)">ConfigureClassSegment</a>(handles);
  2186. 2132 handles=<a href="#_sub24" class="code" title="subfunction handles=ConfigureSpecPlot(handles)">ConfigureSpecPlot</a>(handles);
  2187. 2133 set(handles.ClassifyButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  2188. 2134 <span class="keyword">end</span>
  2189. 2135 <span class="comment">%get(handles.QuickModeButton,'Value')</span>
  2190. 2136 handles.lastsegment = currindex;
  2191. 2137
  2192. 2138 <span class="comment">% --- Executes on button press in SkipButton.</span>
  2193. 2139 <a name="_sub86" href="#_subfunctions" class="code">function SkipButton_Callback(hObject, eventdata, handles)</a>
  2194. 2140 <span class="comment">% hObject handle to SkipButton (see GCBO)</span>
  2195. 2141 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  2196. 2142 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  2197. 2143 handles = <a href="#_sub85" class="code" title="subfunction handles=jump_to_unclassified(handles)">jump_to_unclassified</a>(handles);
  2198. 2144
  2199. 2145 <span class="keyword">if</span> handles.lastsegment == handles.NextIndex <span class="comment">% no more unclassified segments</span>
  2200. 2146 handles = <a href="#_sub83" class="code" title="subfunction handles = quick_mode_exit(handles)">quick_mode_exit</a>(handles);
  2201. 2147 set(handles.QuickModeButton,<span class="string">'Value'</span>,0);
  2202. 2148 handles.quickmode = not(handles.quickmode);
  2203. 2149 <span class="keyword">end</span>
  2204. 2150
  2205. 2151 handles = <a href="#_sub58" class="code" title="subfunction handles = configureclassview(handles,submode)">configureclassview</a>(handles,<span class="string">'select-class'</span>);
  2206. 2152
  2207. 2153 guidata(gcbo,handles);
  2208. 2154 <span class="comment">% --- Executes on button press in UndoButton.</span>
  2209. 2155 <a name="_sub87" href="#_subfunctions" class="code">function UndoButton_Callback(hObject, eventdata, handles)</a>
  2210. 2156 <span class="comment">% hObject handle to UndoButton (see GCBO)</span>
  2211. 2157 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  2212. 2158 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  2213. 2159
  2214. 2160 handles.NextIndex = handles.lastsegment;
  2215. 2161 handles=<a href="#_sub13" class="code" title="subfunction handles=ConfigureClassSegment(handles)">ConfigureClassSegment</a>(handles);
  2216. 2162 handles=<a href="#_sub24" class="code" title="subfunction handles=ConfigureSpecPlot(handles)">ConfigureSpecPlot</a>(handles);
  2217. 2163
  2218. 2164 handles = <a href="#_sub83" class="code" title="subfunction handles = quick_mode_exit(handles)">quick_mode_exit</a>(handles);
  2219. 2165
  2220. 2166 set(handles.QuickModeButton,<span class="string">'Value'</span>,0);
  2221. 2167 handles.quickmode = not(handles.quickmode);
  2222. 2168
  2223. 2169 guidata(gcbo,handles);
  2224. 2170
  2225. 2171 <span class="comment">% --- Executes on button press in NewQuickButton.</span>
  2226. 2172 <a name="_sub88" href="#_subfunctions" class="code">function NewQuickButton_Callback(hObject, eventdata, handles)</a>
  2227. 2173 <span class="comment">% hObject handle to NewQuickButton (see GCBO)</span>
  2228. 2174 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  2229. 2175 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  2230. 2176
  2231. 2177 handles = <a href="#_sub12" class="code" title="subfunction handles = add_new_class(handles,segment)">add_new_class</a>(handles,handles.segments(handles.NextIndex));
  2232. 2178 handles.segments(handles.NextIndex).class = handles.classes(handles.nclasses).name;
  2233. 2179
  2234. 2180 set(handles.ClassifyButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  2235. 2181
  2236. 2182 handles = <a href="#_sub85" class="code" title="subfunction handles=jump_to_unclassified(handles)">jump_to_unclassified</a>(handles);
  2237. 2183 handles = <a href="#_sub58" class="code" title="subfunction handles = configureclassview(handles,submode)">configureclassview</a>(handles,<span class="string">'select-class'</span>);
  2238. 2184
  2239. 2185 <span class="keyword">if</span> handles.lastsegment == handles.NextIndex <span class="comment">% no more unclassified segments</span>
  2240. 2186 handles = <a href="#_sub83" class="code" title="subfunction handles = quick_mode_exit(handles)">quick_mode_exit</a>(handles)
  2241. 2187 set(handles.QuickModeButton,<span class="string">'Value'</span>,0);
  2242. 2188 handles.quickmode = not(handles.quickmode);
  2243. 2189 <span class="keyword">end</span>
  2244. 2190
  2245. 2191 guidata(gcbo,handles);
  2246. 2192
  2247. 2193
  2248. 2194
  2249. 2195 <span class="comment">% --- Executes on button press in CompareToggleButton.</span>
  2250. 2196 <a name="_sub89" href="#_subfunctions" class="code">function CompareToggleButton_Callback(hObject, eventdata, handles)</a>
  2251. 2197 <span class="comment">% hObject handle to CompareToggleButton (see GCBO)</span>
  2252. 2198 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  2253. 2199 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  2254. 2200
  2255. 2201 <span class="comment">% Hint: get(hObject,'Value') returns toggle state of CompareToggleButton</span>
  2256. 2202
  2257. 2203 state = get(hObject,<span class="string">'Value'</span>);
  2258. 2204
  2259. 2205 <span class="keyword">if</span> handles.nclasses &gt; 0
  2260. 2206
  2261. 2207 <span class="keyword">if</span> state <span class="comment">% enter compare mode</span>
  2262. 2208 handles.mode = <span class="string">'class-view'</span>;
  2263. 2209 set(handles.RemoveClassButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  2264. 2210 set(handles.RenameClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  2265. 2211 set(handles.NextClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  2266. 2212 set(handles.ModePopupMenu,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  2267. 2213 set(handles.ClassifyButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  2268. 2214 set(handles.QuickModeButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  2269. 2215 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles,<span class="string">'Select a class to compare segment against'</span>);
  2270. 2216 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  2271. 2217 set(handles.PreviousSpectraButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  2272. 2218 set(handles.TypifyClassButton, <span class="string">'Visible'</span>, <span class="string">'off'</span>);
  2273. 2219 set(handles.AutoClassifyButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
  2274. 2220
  2275. 2221 handles = <a href="#_sub58" class="code" title="subfunction handles = configureclassview(handles,submode)">configureclassview</a>(handles,<span class="string">'compare'</span>);
  2276. 2222 <span class="keyword">else</span>
  2277. 2223 <span class="keyword">if</span> strcmp(handles.mode,<span class="string">'comparison'</span>) <span class="comment">% go back to the class view</span>
  2278. 2224 set(hObject,<span class="string">'Value'</span>,1);
  2279. 2225 handles.startx = 1; <span class="comment">% if you have been scrolling reset to defaults</span>
  2280. 2226 handles.endx = handles.classified_width;
  2281. 2227
  2282. 2228 set(handles.SliderClassified, <span class="string">'Value'</span>,0);
  2283. 2229 handles = <a href="#_sub58" class="code" title="subfunction handles = configureclassview(handles,submode)">configureclassview</a>(handles,<span class="string">'compare'</span>);
  2284. 2230 handles.mode = <span class="string">'class-view'</span>;
  2285. 2231 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles,<span class="string">'Select a class to compare segment against'</span>);
  2286. 2232 <span class="keyword">elseif</span> strcmp(handles.mode,<span class="string">'class-view'</span>) <span class="comment">% exit the compare mode entirely</span>
  2287. 2233 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles, [<span class="string">'Viewing all '</span>, num2str(handles.nclasses),<span class="string">' classes'</span>]);
  2288. 2234 set(handles.ModePopupMenu,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  2289. 2235 set(handles.QuickModeButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  2290. 2236 <a href="#_sub54" class="code" title="subfunction setnavigationbuttons(handles)">setnavigationbuttons</a>(handles);
  2291. 2237 <a href="#_sub59" class="code" title="subfunction handles = SetModePopupMenu(handles,viewstring)">SetModePopupMenu</a>(handles,<span class="string">'class view'</span>);
  2292. 2238 set(handles.RemoveClassButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  2293. 2239 set(handles.RemoveClassButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
  2294. 2240 set(handles.ClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  2295. 2241 set(handles.AutoClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  2296. 2242 handles.submode = <span class="string">'select'</span>;
  2297. 2243 <span class="keyword">end</span>
  2298. 2244 <span class="keyword">end</span>
  2299. 2245
  2300. 2246 <span class="keyword">else</span>
  2301. 2247 set(hObject,<span class="string">'Value'</span>,0);
  2302. 2248 <span class="keyword">end</span>
  2303. 2249 guidata(hObject, handles);
  2304. 2250
  2305. 2251 <a name="_sub90" href="#_subfunctions" class="code">function handles = recompute_classifiedaxes(handles)</a>
  2306. 2252 <span class="comment">% Recomputes the width and height based on a new size for the classified</span>
  2307. 2253 <span class="comment">% axes</span>
  2308. 2254
  2309. 2255 classaxpos=get(handles.ClassifiedAxes,<span class="string">'Position'</span>);
  2310. 2256
  2311. 2257 set(handles.SliderClassified,<span class="string">'Value'</span>,0);
  2312. 2258
  2313. 2259 handles.startx = 1;
  2314. 2260
  2315. 2261 handles.classified_width = round(handles.classified_width_density * classaxpos(3));
  2316. 2262 handles.classified_height = round(handles.classified_height_density * classaxpos(4));
  2317. 2263
  2318. 2264 oldpos = handles.startpage;
  2319. 2265 handles = <a href="#_sub39" class="code" title="subfunction handles = reposition_images(handles, image_list)">reposition_images</a>(handles, handles.image_list); <span class="comment">% try to keep rows matched</span>
  2320. 2266
  2321. 2267 cnrow = <a href="#_sub40" class="code" title="subfunction nrow = which_row(positions,index)">which_row</a>(handles.positions,oldpos);
  2322. 2268 <span class="keyword">for</span> i = 1:(cnrow-1)
  2323. 2269 handles = <a href="#_sub44" class="code" title="subfunction handles = row_forward(handles)">row_forward</a>(handles);
  2324. 2270 <span class="keyword">end</span>
  2325. 2271
  2326. 2272 handles.cpositions = <a href="#_sub41" class="code" title="subfunction cpositions = get_curr_position(handles)">get_curr_position</a>(handles);
  2327. 2273 handles = <a href="#_sub38" class="code" title="subfunction handles = plot_classified_axes(handles, image_list, position_list)">plot_classified_axes</a>(handles, handles.image_list(handles.startpage:handles.endpage), handles.cpositions);
  2328. 2274
  2329. 2275 <a name="_sub91" href="#_subfunctions" class="code">function reposy(guielement,deltay)</a>
  2330. 2276 oldpos = get(guielement,<span class="string">'Position'</span>);
  2331. 2277 set(guielement,<span class="string">'Position'</span>,[oldpos(1), oldpos(2) + deltay, oldpos(3), oldpos(4)]);
  2332. 2278
  2333. 2279 <a name="_sub92" href="#_subfunctions" class="code">function reposelementsy(handles,deltay)</a>
  2334. 2280 <a href="#_sub91" class="code" title="subfunction reposy(guielement,deltay)">reposy</a>(handles.PrecomputeButton,deltay);
  2335. 2281 <a href="#_sub91" class="code" title="subfunction reposy(guielement,deltay)">reposy</a>(handles.DirectoryEditBox,deltay);
  2336. 2282 <a href="#_sub91" class="code" title="subfunction reposy(guielement,deltay)">reposy</a>(handles.LoadDirectoryButton,deltay);
  2337. 2283 <a href="#_sub91" class="code" title="subfunction reposy(guielement,deltay)">reposy</a>(handles.SaveButton,deltay);
  2338. 2284 <a href="#_sub91" class="code" title="subfunction reposy(guielement,deltay)">reposy</a>(handles.ConfigureButton,deltay);
  2339. 2285 <a href="#_sub91" class="code" title="subfunction reposy(guielement,deltay)">reposy</a>(handles.ViewText,deltay);
  2340. 2286 <a href="#_sub91" class="code" title="subfunction reposy(guielement,deltay)">reposy</a>(handles.ModePopupMenu,deltay);
  2341. 2287 <a href="#_sub91" class="code" title="subfunction reposy(guielement,deltay)">reposy</a>(handles.SegInfoText,deltay);
  2342. 2288 <a href="#_sub91" class="code" title="subfunction reposy(guielement,deltay)">reposy</a>(handles.ToClassifyPanel,deltay);
  2343. 2289 <a href="#_sub91" class="code" title="subfunction reposy(guielement,deltay)">reposy</a>(handles.NewQuickButton,deltay);
  2344. 2290 <a href="#_sub91" class="code" title="subfunction reposy(guielement,deltay)">reposy</a>(handles.UndoButton,deltay);
  2345. 2291 <a href="#_sub91" class="code" title="subfunction reposy(guielement,deltay)">reposy</a>(handles.SkipButton,deltay);
  2346. 2292 <a href="#_sub91" class="code" title="subfunction reposy(guielement,deltay)">reposy</a>(handles.SortText,deltay);
  2347. 2293 <a href="#_sub91" class="code" title="subfunction reposy(guielement,deltay)">reposy</a>(handles.SortPopupMenu,deltay);
  2348. 2294 <a href="#_sub91" class="code" title="subfunction reposy(guielement,deltay)">reposy</a>(handles.NextClassButton,deltay);
  2349. 2295
  2350. 2296 <a name="_sub93" href="#_subfunctions" class="code">function ResizeFcn(h, eventdata, handles, varargin)</a>
  2351. 2297
  2352. 2298 handles = guidata(gcbo);
  2353. 2299
  2354. 2300 originalsize = handles.originalsize;
  2355. 2301 newsize = get(h,<span class="string">'Position'</span>);
  2356. 2302 classaxpos = get(handles.ClassifiedAxes,<span class="string">'Position'</span>);
  2357. 2303
  2358. 2304 <span class="keyword">if</span> handles.originalsize(3) &gt; newsize(3) <span class="comment">% if form has smaller width bounce back</span>
  2359. 2305 newsize(3) = originalsize(3);
  2360. 2306 classaxpos(3) = handles.originalaxessize(3);
  2361. 2307
  2362. 2308 sliderpos = get(handles.SliderClassified,<span class="string">'Position'</span>); <span class="comment">% Update the slider</span>
  2363. 2309 sliderpos(3) = classaxpos(3);
  2364. 2310 set(handles.SliderClassified,<span class="string">'Position'</span>,sliderpos);
  2365. 2311
  2366. 2312 <span class="keyword">else</span> <span class="comment">% form is larger</span>
  2367. 2313 deltax = newsize(3) - handles.prevsize(3);
  2368. 2314 classaxpos(3) = classaxpos(3) + deltax; <span class="comment">% update width of the axes</span>
  2369. 2315
  2370. 2316 sliderpos = get(handles.SliderClassified,<span class="string">'Position'</span>); <span class="comment">% Update the slider</span>
  2371. 2317 sliderpos(3) = sliderpos(3) + deltax;
  2372. 2318 set(handles.SliderClassified,<span class="string">'Position'</span>,sliderpos);
  2373. 2319
  2374. 2320 <span class="keyword">end</span>
  2375. 2321
  2376. 2322 <span class="keyword">if</span> originalsize(4) &gt; newsize(4) <span class="comment">% if form has a smaller height bounce back</span>
  2377. 2323 newsize(2) = newsize(2) + newsize(4) - originalsize(4);
  2378. 2324
  2379. 2325 deltay = originalsize(4) - handles.prevsize(4);
  2380. 2326 newsize(4) = originalsize(4);
  2381. 2327 classaxpos(4) = classaxpos(4) + newsize(4) - handles.prevsize(4);
  2382. 2328 <a href="#_sub92" class="code" title="subfunction reposelementsy(handles,deltay)">reposelementsy</a>(handles,deltay);
  2383. 2329
  2384. 2330 <span class="keyword">else</span> <span class="comment">% form is larger we need to reposition elements</span>
  2385. 2331 deltay = newsize(4) - handles.prevsize(4);
  2386. 2332 <a href="#_sub92" class="code" title="subfunction reposelementsy(handles,deltay)">reposelementsy</a>(handles,deltay);
  2387. 2333 classaxpos(4) = classaxpos(4) + newsize(4) - handles.prevsize(4);
  2388. 2334 <span class="keyword">end</span>
  2389. 2335
  2390. 2336 set(h,<span class="string">'Position'</span>,newsize);
  2391. 2337 set(handles.ClassifiedAxes,<span class="string">'Position'</span>,classaxpos);
  2392. 2338
  2393. 2339 <span class="keyword">if</span> handles.fixed || handles.blank <span class="comment">% allow fixed resizing</span>
  2394. 2340 <span class="comment">% do nothing except update the density measurements</span>
  2395. 2341 handles.classified_width_density = handles.classified_width / classaxpos(3);
  2396. 2342 handles.classified_height_density = handles.classified_height / classaxpos(4);
  2397. 2343 <span class="keyword">else</span> <span class="comment">% reposition images</span>
  2398. 2344 handles = <a href="#_sub90" class="code" title="subfunction handles = recompute_classifiedaxes(handles)">recompute_classifiedaxes</a>(handles);
  2399. 2345 <span class="keyword">end</span>
  2400. 2346
  2401. 2347 handles.prevsize = newsize;
  2402. 2348
  2403. 2349 guidata(gcbo,handles);
  2404. 2350
  2405. 2351 <a name="_sub94" href="#_subfunctions" class="code">function truth = truthrange(range)</a>
  2406. 2352 truth = range(1) &amp;&amp; range (2);
  2407. 2353
  2408. 2354 <span class="comment">% --- Executes on button press in ConfigureButton.</span>
  2409. 2355 <a name="_sub95" href="#_subfunctions" class="code">function ConfigureButton_Callback(hObject, eventdata, handles)</a>
  2410. 2356 <span class="comment">% hObject handle to ConfigureButton (see GCBO)</span>
  2411. 2357 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  2412. 2358 <span class="comment">% handlenb vcccs structure with handles and user data (see GUIDATA)</span>
  2413. 2359
  2414. 2360
  2415. 2361 configs = <a href="configure_classify.html" class="code" title="function varargout = configure_classify(varargin)">configure_classify</a>(handles.lowerfreq,handles.upperfreq,handles.classified_height,handles.classified_width,handles.Fs,handles.movingwin,handles.tapers,handles.fpass,handles.fixed);
  2416. 2362 <span class="keyword">if</span> not(isempty(configs) || length(configs) == 1) <span class="comment">% if okay is pressed</span>
  2417. 2363 lowerfreq= configs{1};
  2418. 2364 upperfreq= configs{2};
  2419. 2365 classified_height= configs{3};
  2420. 2366 classified_width= configs{4};
  2421. 2367 Fs=configs{5};
  2422. 2368 movingwin= configs{6};
  2423. 2369 tapers= configs{7};
  2424. 2370 fpass = configs{8};
  2425. 2371
  2426. 2372 rezoom = 0;
  2427. 2373
  2428. 2374 <span class="keyword">if</span> not(handles.lowerfreq == lowerfreq)
  2429. 2375 handles.lowerfreq = lowerfreq;
  2430. 2376 rezoom = 1;
  2431. 2377 <span class="keyword">end</span>
  2432. 2378
  2433. 2379 <span class="keyword">if</span> not(handles.upperfreq==upperfreq)
  2434. 2380 handles.upperfreq=upperfreq;
  2435. 2381 rezoom=1;
  2436. 2382 <span class="keyword">end</span>
  2437. 2383
  2438. 2384 redraw = 0;
  2439. 2385 <span class="keyword">if</span> not(handles.classified_height==classified_height)
  2440. 2386 handles.classified_height=classified_height;
  2441. 2387 redraw = 1;
  2442. 2388 <span class="keyword">end</span>
  2443. 2389
  2444. 2390 <span class="keyword">if</span> not(handles.classified_width==classified_width)
  2445. 2391 handles.classified_width=classified_height;
  2446. 2392 redraw = 1;
  2447. 2393 <span class="keyword">end</span>
  2448. 2394
  2449. 2395 recompute = 0; <span class="comment">% check to see if the spectra needs to be recomputed</span>
  2450. 2396
  2451. 2397 <span class="keyword">if</span> not(handles.Fs==Fs)
  2452. 2398 handles.Fs = Fs;
  2453. 2399 recompute = 1;
  2454. 2400 <span class="keyword">end</span>
  2455. 2401
  2456. 2402 <span class="keyword">if</span> not(<a href="#_sub94" class="code" title="subfunction truth = truthrange(range)">truthrange</a>(handles.movingwin == movingwin))
  2457. 2403 handles.movingwin = movingwin;
  2458. 2404 recompute = 1;
  2459. 2405 <span class="keyword">end</span>
  2460. 2406
  2461. 2407 <span class="keyword">if</span> not(<a href="#_sub94" class="code" title="subfunction truth = truthrange(range)">truthrange</a>(handles.tapers==tapers))
  2462. 2408 handles.tapers=tapers;
  2463. 2409 recompute = 1;
  2464. 2410 <span class="keyword">end</span>
  2465. 2411
  2466. 2412 <span class="keyword">if</span> not(<a href="#_sub94" class="code" title="subfunction truth = truthrange(range)">truthrange</a>(handles.fpass==fpass))
  2467. 2413 handles.fpass=fpass;
  2468. 2414 recompute = 1;
  2469. 2415 <span class="keyword">end</span>
  2470. 2416
  2471. 2417
  2472. 2418 <span class="keyword">if</span> recompute <span class="comment">% The spectra need to be recomputed</span>
  2473. 2419 status = questdlg(<span class="string">'Recompute spectra with changed parameters'</span>);
  2474. 2420 <span class="keyword">if</span> not(isempty(status))
  2475. 2421 <span class="keyword">if</span> strcmp(status,<span class="string">'Yes'</span>)
  2476. 2422 handles = <a href="#_sub20" class="code" title="subfunction handles = precompute_AllSpectra(handles)">precompute_AllSpectra</a>(handles);
  2477. 2423 <a href="#_sub96" class="code" title="subfunction status = save_configuration(handles,filename)">save_configuration</a>(handles,handles.configfile); <span class="comment">% Save configuration no matter what</span>
  2478. 2424
  2479. 2425 handles=<a href="#_sub24" class="code" title="subfunction handles=ConfigureSpecPlot(handles)">ConfigureSpecPlot</a>(handles); <span class="comment">% automatically force into browse mode</span>
  2480. 2426 set(handles.RemoveClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  2481. 2427 set(handles.TypifyClassButton, <span class="string">'Visible'</span>, <span class="string">'off'</span>);
  2482. 2428 set(handles.NextClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  2483. 2429
  2484. 2430 handles=<a href="#_sub49" class="code" title="subfunction handles = BrowseDirectory(handles)">BrowseDirectory</a>(handles);
  2485. 2431 set(handles.ModePopupMenu,<span class="string">'Value'</span>,1);
  2486. 2432
  2487. 2433 <span class="keyword">if</span> handles.nclasses &gt;= 1 <span class="comment">% sync changes to the classview</span>
  2488. 2434 <span class="keyword">for</span> j = 1:handles.nclasses
  2489. 2435 handles.classes(j).iconS = handles.IconList{handles.classes(j).index};
  2490. 2436 <span class="keyword">end</span>
  2491. 2437 <span class="keyword">end</span>
  2492. 2438
  2493. 2439 set(handles.RemoveClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>); <span class="comment">% update buttons</span>
  2494. 2440 set(handles.TypifyClassButton, <span class="string">'Visible'</span>, <span class="string">'off'</span>);
  2495. 2441 set(handles.NextClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
  2496. 2442
  2497. 2443 redraw = logical(1);
  2498. 2444 <span class="keyword">end</span>
  2499. 2445 <span class="keyword">end</span>
  2500. 2446 <span class="keyword">end</span>
  2501. 2447
  2502. 2448 <span class="keyword">if</span> rezoom
  2503. 2449 <span class="keyword">if</span> strcmp(get(handles.ZoomButton,<span class="string">'String'</span>),<span class="string">'Zoom out'</span>)
  2504. 2450 handles.rezoom = logical(1);
  2505. 2451 handles = <a href="#_sub80" class="code" title="subfunction handles = ZoomSpectra(handles,status)">ZoomSpectra</a>(handles,<span class="string">'Zoom out'</span>);
  2506. 2452 <span class="keyword">else</span>
  2507. 2453 handles.rezoom = logical(1); <span class="comment">% Otherwise wait to user hits the rezoom button</span>
  2508. 2454 <span class="keyword">end</span>
  2509. 2455 <span class="keyword">end</span>
  2510. 2456
  2511. 2457 <span class="keyword">if</span> not(handles.configschanged) <span class="comment">% handles the case were the configurations were changed already</span>
  2512. 2458 <span class="keyword">if</span> not(recompute)
  2513. 2459 handles.configschanged = logical(1);
  2514. 2460 <span class="keyword">end</span>
  2515. 2461 <span class="keyword">end</span>
  2516. 2462
  2517. 2463 <span class="keyword">if</span> redraw <span class="comment">% Redraw the axes</span>
  2518. 2464 classaxpos = get(handles.ClassifiedAxes,<span class="string">'Position'</span>);
  2519. 2465 handles.classified_width_density = handles.classified_width / classaxpos(3);
  2520. 2466 handles.classified_height_density = handles.classified_height / classaxpos(4);
  2521. 2467 handles = <a href="#_sub90" class="code" title="subfunction handles = recompute_classifiedaxes(handles)">recompute_classifiedaxes</a>(handles);
  2522. 2468 <span class="keyword">end</span>
  2523. 2469
  2524. 2470 handles.fixed = configs{9};
  2525. 2471
  2526. 2472 <span class="keyword">end</span>
  2527. 2473 guidata(gcbo,handles);
  2528. 2474
  2529. 2475 <a name="_sub96" href="#_subfunctions" class="code">function status = save_configuration(handles,filename)</a>
  2530. 2476
  2531. 2477 Fs = handles.Fs;
  2532. 2478 movingwin = handles.movingwin;
  2533. 2479 tapers = handles.tapers;
  2534. 2480 fpass = handles.fpass;
  2535. 2481
  2536. 2482 <span class="keyword">try</span>
  2537. 2483 save(filename,<span class="string">'Fs'</span>,<span class="string">'movingwin'</span>,<span class="string">'tapers'</span>,<span class="string">'fpass'</span>,<span class="string">'-mat'</span>);
  2538. 2484 <span class="keyword">catch</span>
  2539. 2485 status = 1;
  2540. 2486 <span class="keyword">end</span>
  2541. 2487
  2542. 2488 <a name="_sub97" href="#_subfunctions" class="code">function handles = load_configuration(handles,filename)</a>
  2543. 2489 <span class="keyword">try</span>
  2544. 2490 load(<span class="string">'-mat'</span>,filename)
  2545. 2491 <span class="keyword">if</span> handles.Fs == Fs || handles.movingwin == movingwin || handles.tapers == tapers || handles.fpass == fpass
  2546. 2492 handles.configshavechanged = logical(1);
  2547. 2493 <span class="keyword">end</span>
  2548. 2494
  2549. 2495 handles.Fs = Fs;
  2550. 2496 handles.movingwin = movingwin;
  2551. 2497 handles.tapers = tapers;
  2552. 2498 handles.fpass = fpass;
  2553. 2499 <span class="keyword">catch</span>
  2554. 2500 handles = handles;
  2555. 2501 <span class="keyword">end</span>
  2556. 2502
  2557. 2503
  2558. 2504 <span class="comment">% --- Executes on button press in NextClassButton.</span>
  2559. 2505 <a name="_sub98" href="#_subfunctions" class="code">function NextClassButton_Callback(hObject, eventdata, handles)</a>
  2560. 2506 <span class="comment">% hObject handle to NextClassButton (see GCBO)</span>
  2561. 2507 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  2562. 2508 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  2563. 2509
  2564. 2510 handles.lastclass = handles.lastclass + 1;
  2565. 2511
  2566. 2512 <span class="keyword">if</span> handles.lastclass &gt; handles.nclasses
  2567. 2513 handles.lastclass = 1;
  2568. 2514 <span class="keyword">end</span>
  2569. 2515
  2570. 2516 class = handles.classes(handles.lastclass);
  2571. 2517 handles = <a href="#_sub63" class="code" title="subfunction handles = configureclassmembers(handles,classname)">configureclassmembers</a>(handles,class.name);
  2572. 2518 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles,[<span class="string">'Viewing '</span> num2str(length(handles.mapindex)) <span class="string">' members of '</span> class.name]);
  2573. 2519 handles.mode = <span class="string">'class-members'</span>;
  2574. 2520 handles.submode = <span class="string">'select'</span>;
  2575. 2521
  2576. 2522 guidata(gcbo,handles);
  2577. 2523
  2578. 2524 <a name="_sub99" href="#_subfunctions" class="code">function handles = features_segments(handles)</a>
  2579. 2525
  2580. 2526 h=waitbar(0,<span class="string">'Computing Data Features. . . '</span>);
  2581. 2527 <span class="keyword">for</span> i = 1:handles.nsegments
  2582. 2528 startf = handles.segments(i).start;
  2583. 2529 endf = handles.segments(i).end;
  2584. 2530 cepestral = <a href="#_sub100" class="code" title="subfunction coefs = cepsfromspectra(specfilename,ncepestral)">cepsfromspectra</a>(handles.segments(i).specfilename,handles.ncepestral);
  2585. 2531
  2586. 2532 <span class="comment">% Below shows how additional data features can be included in the</span>
  2587. 2533 <span class="comment">% exporting and classifying using the software</span>
  2588. 2534
  2589. 2535 <span class="comment">% The commented code shows how the wave file can be read in to</span>
  2590. 2536 <span class="comment">% calculate additional data features</span>
  2591. 2537
  2592. 2538 <span class="comment">% segment = handles.segments(i);</span>
  2593. 2539 <span class="comment">% data = wavread(segment.wavfile,round(handles.Fs * [segment.start segment.end]));</span>
  2594. 2540
  2595. 2541 waitbar(i/handles.nsegments);
  2596. 2542
  2597. 2543 handles.segments(i).features = cepestral';
  2598. 2544
  2599. 2545 <span class="comment">% Three additional data features can be added for example as following</span>
  2600. 2546 <span class="comment">%</span>
  2601. 2547 <span class="comment">% additional_features = compute_features(data,3);</span>
  2602. 2548 <span class="comment">% handles.nfeatures = handles.nfeatures + 3;</span>
  2603. 2549 <span class="comment">% handles.segments(i).features = [handles.segments(i).features additional_features'];</span>
  2604. 2550 <span class="keyword">end</span>
  2605. 2551 <a href="../../chronux_2_10/fly_track/videoIO/videoIO_2006a/@videoReader/close.html" class="code" title="function vr = close(vr)">close</a>(h);
  2606. 2552
  2607. 2553 <a name="_sub100" href="#_subfunctions" class="code">function coefs = cepsfromspectra(specfilename,ncepestral)</a>
  2608. 2554 load(<span class="string">'-mat'</span>,specfilename);
  2609. 2555 sbase = (mean(min(exp(Spre))) + mean(min(exp(Spost)))) / 2; <span class="comment">% might not be a good</span>
  2610. 2556 <span class="comment">% baseline because of</span>
  2611. 2557 <span class="comment">% the intensity of the</span>
  2612. 2558 <span class="comment">% sound around the syllable that</span>
  2613. 2559 <span class="comment">% is why I took the average</span>
  2614. 2560 <span class="comment">% minimum value</span>
  2615. 2561
  2616. 2562 <span class="comment">%Sdiff = S - sbase;</span>
  2617. 2563
  2618. 2564 Sdiff = exp(S) - sbase; <span class="comment">% arithmetic average</span>
  2619. 2565 spectra = log(mean(Sdiff')); <span class="comment">% average across time to generate spectra</span>
  2620. 2566
  2621. 2567 <span class="comment">%spectra=mean(Sdiff');</span>
  2622. 2568
  2623. 2569 cepstrum = real(ifft(spectra));
  2624. 2570
  2625. 2571 <span class="comment">% alternative methods for computing the cepstrum</span>
  2626. 2572 <span class="comment">%real(fft(hamming(length(spectra) .* spectra )));</span>
  2627. 2573 <span class="comment">%cepstrum = real(fft(spectra))</span>
  2628. 2574
  2629. 2575 coefs = cepstrum(1:ncepestral); <span class="comment">% this I understand is the</span>
  2630. 2576 <span class="comment">% correct way</span>
  2631. 2577
  2632. 2578 <a name="_sub101" href="#_subfunctions" class="code">function classifymatrix = generate_classify_mat(handles)</a>
  2633. 2579 classifymatrix = zeros(handles.nsegments,handles.nfeatures+1);
  2634. 2580 <span class="keyword">for</span> i = 1:handles.nsegments
  2635. 2581 seglength = handles.segments(i).end - handles.segments(i).start;
  2636. 2582 classifymatrix(i,1:1+handles.nfeatures) = [seglength handles.segments(i).features(1:handles.nfeatures)'];
  2637. 2583 <span class="keyword">end</span>
  2638. 2584 ;
  2639. 2585
  2640. 2586 <a name="_sub102" href="#_subfunctions" class="code">function handles = generate_classes_auto(handles,classification)</a>
  2641. 2587 nclasses = length(unique(classification));
  2642. 2588 classesfound = zeros(nclasses,1); <span class="comment">% used to check which classes exist</span>
  2643. 2589 handles.classes = [];
  2644. 2590 handles.nclasses = 0;
  2645. 2591 j = 1;
  2646. 2592 <span class="keyword">for</span> i = 1:handles.nsegments
  2647. 2593 <span class="keyword">if</span> classification(i) == 0 <span class="comment">% segment has not been classified</span>
  2648. 2594 handles.segments(i).class = <span class="string">''</span>;
  2649. 2595 <span class="keyword">else</span>
  2650. 2596 <span class="keyword">if</span> isempty(classesfound(find(classesfound == classification(i)))) <span class="comment">% a new class is found</span>
  2651. 2597 class.specfilename = handles.segments(i).specfilename;
  2652. 2598 class.name = <a href="#_sub10" class="code" title="subfunction class_string = newclassname(handles)">newclassname</a>(handles);
  2653. 2599 class.index = i;
  2654. 2600 class.length = handles.segments(i).end - handles.segments(i).start;
  2655. 2601 class.iconS = handles.IconList{i};
  2656. 2602 class.nmembers = 1;
  2657. 2603 handles.segments(i).class = class.name;
  2658. 2604 handles.classes = [handles.classes class];
  2659. 2605 classesfound(j) = classification(i);
  2660. 2606 j = j + 1;
  2661. 2607 handles.nclasses = handles.nclasses + 1;
  2662. 2608 <span class="keyword">else</span> <span class="comment">% segment belongs to a class that already exists</span>
  2663. 2609 classindex = find(classification(i) == classesfound);
  2664. 2610 handles.segments(i).class = handles.classes(classindex).name;
  2665. 2611 handles.classes(classindex).nmembers = handles.classes(classindex).nmembers + 1;
  2666. 2612 <span class="keyword">end</span>
  2667. 2613 <span class="keyword">end</span>
  2668. 2614 <span class="keyword">end</span>
  2669. 2615 ;
  2670. 2616
  2671. 2617 <span class="comment">% --- Executes on button press in AutoClassifyButton.</span>
  2672. 2618 <a name="_sub103" href="#_subfunctions" class="code">function AutoClassifyButton_Callback(hObject, eventdata, handles)</a>
  2673. 2619 <span class="comment">% hObject handle to AutoClassifyButton (see GCBO)</span>
  2674. 2620 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  2675. 2621 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  2676. 2622
  2677. 2623 <span class="keyword">if</span> length(handles.segments(1).features) == 0; <span class="comment">% compute cepestral coefficients if not computed before</span>
  2678. 2624 handles = <a href="#_sub99" class="code" title="subfunction handles = features_segments(handles)">features_segments</a>(handles);
  2679. 2625 <span class="keyword">end</span>
  2680. 2626
  2681. 2627 matrix2classify = <a href="#_sub101" class="code" title="subfunction classifymatrix = generate_classify_mat(handles)">generate_classify_mat</a>(handles);
  2682. 2628
  2683. 2629 classification = <a href="auto_classify.html" class="code" title="function varargout = auto_classify(varargin)">auto_classify</a>(matrix2classify,handles.nfeatures);
  2684. 2630
  2685. 2631 <span class="keyword">if</span> length(classification) &gt; 1 <span class="comment">%&amp;&amp; not(classification == 0)</span>
  2686. 2632 <span class="keyword">if</span> not(isempty(handles.classes))
  2687. 2633 answer = questdlg(<span class="string">'A classification already exists. Do you want to replace the current classification?'</span>);
  2688. 2634 <span class="keyword">if</span> strcmp(answer,<span class="string">'Yes'</span>)
  2689. 2635 handles = <a href="#_sub102" class="code" title="subfunction handles = generate_classes_auto(handles,classification)">generate_classes_auto</a>(handles,classification);
  2690. 2636 <span class="keyword">end</span>
  2691. 2637 <span class="keyword">else</span>
  2692. 2638 handles = <a href="#_sub102" class="code" title="subfunction handles = generate_classes_auto(handles,classification)">generate_classes_auto</a>(handles,classification);
  2693. 2639
  2694. 2640 <span class="keyword">end</span>
  2695. 2641
  2696. 2642 handles=<a href="#_sub58" class="code" title="subfunction handles = configureclassview(handles,submode)">configureclassview</a>(handles,<span class="string">'select'</span>);
  2697. 2643 set(handles.ClassifyButton,<span class="string">'String'</span>,<span class="string">'Declassify'</span>); <span class="comment">% all classes are now classified</span>
  2698. 2644 set(handles.RemoveClassButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
  2699. 2645 set(handles.RemoveClassButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  2700. 2646 set(handles.CompareToggleButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
  2701. 2647 set(handles.CompareToggleButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
  2702. 2648 set(handles.TypifyClassButton, <span class="string">'Visible'</span>, <span class="string">'off'</span>);
  2703. 2649 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles,[<span class="string">'Viewing all '</span> num2str(handles.nclasses) <span class="string">' classes'</span>])
  2704. 2650 <span class="comment">%</span>
  2705. 2651 <span class="comment">% set(handles.ModePopupMenu,'Value',3);</span>
  2706. 2652 <span class="comment">%</span>
  2707. 2653 <span class="comment">% ModePopupMenu_Callback(handles.ModePopupMenu,eventdata, handles);</span>
  2708. 2654 <span class="comment">% handles.mode = 'class-view';</span>
  2709. 2655 <span class="comment">% handles.submode = 'select';</span>
  2710. 2656
  2711. 2657 <span class="keyword">end</span>
  2712. 2658 guidata(gcbo,handles);
  2713. 2659
  2714. 2660
  2715. 2661 <span class="comment">% --------------------------------------------------------------------</span>
  2716. 2662 <a name="_sub104" href="#_subfunctions" class="code">function FileMenu_Callback(hObject, eventdata, handles)</a>
  2717. 2663 <span class="comment">% hObject handle to FileMenu (see GCBO)</span>
  2718. 2664 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  2719. 2665 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  2720. 2666
  2721. 2667
  2722. 2668 <span class="comment">% --------------------------------------------------------------------</span>
  2723. 2669 <a name="_sub105" href="#_subfunctions" class="code">function SaveItem_Callback(hObject, eventdata, handles)</a>
  2724. 2670 <span class="comment">% hObject handle to SaveItem (see GCBO)</span>
  2725. 2671 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  2726. 2672 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  2727. 2673
  2728. 2674 <a href="#_sub70" class="code" title="subfunction SaveButton_Callback(hObject, eventdata, handles)">SaveButton_Callback</a>(hObject, eventdata, handles)
  2729. 2675
  2730. 2676 <span class="comment">% --------------------------------------------------------------------</span>
  2731. 2677 <a name="_sub106" href="#_subfunctions" class="code">function LoadItem_Callback(hObject, eventdata, handles)</a>
  2732. 2678 <span class="comment">% hObject handle to LoadItem (see GCBO)</span>
  2733. 2679 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  2734. 2680 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  2735. 2681
  2736. 2682 <a href="#_sub27" class="code" title="subfunction PrecomputeButton_Callback(hObject, eventdata, handles)">PrecomputeButton_Callback</a>(hObject, eventdata, handles)
  2737. 2683
  2738. 2684 <span class="comment">%guidata(gcbo,handles)</span>
  2739. 2685
  2740. 2686 <span class="comment">% --------------------------------------------------------------------</span>
  2741. 2687 <a name="_sub107" href="#_subfunctions" class="code">function HelpMenu_Callback(hObject, eventdata, handles)</a>
  2742. 2688 <span class="comment">% hObject handle to HelpMenu (see GCBO)</span>
  2743. 2689 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  2744. 2690 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  2745. 2691
  2746. 2692
  2747. 2693 <span class="comment">% --------------------------------------------------------------------</span>
  2748. 2694 <a name="_sub108" href="#_subfunctions" class="code">function HelpItem_Callback(hObject, eventdata, handles)</a>
  2749. 2695 <span class="comment">% hObject handle to HelpItem (see GCBO)</span>
  2750. 2696 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  2751. 2697 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  2752. 2698
  2753. 2699 web(<span class="string">'classify_spectra_help.html'</span>);
  2754. 2700
  2755. 2701 <span class="comment">% --------------------------------------------------------------------</span>
  2756. 2702 <a name="_sub109" href="#_subfunctions" class="code">function AboutItem_Callback(hObject, eventdata, handles)</a>
  2757. 2703 <span class="comment">% hObject handle to AboutItem (see GCBO)</span>
  2758. 2704 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  2759. 2705 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  2760. 2706
  2761. 2707 msgbox(<span class="string">'Classify_spectra (version 0.2) is being developed by the Mitra Lab at the Cold Spring Harbor Laboratory.'</span>,<span class="string">'About classify_spectra'</span>);
  2762. 2708
  2763. 2709
  2764. 2710 <span class="comment">% --------------------------------------------------------------------</span>
  2765. 2711 <a name="_sub110" href="#_subfunctions" class="code">function ConfigureItem_Callback(hObject, eventdata, handles)</a>
  2766. 2712 <span class="comment">% hObject handle to ConfigureItem (see GCBO)</span>
  2767. 2713 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  2768. 2714 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  2769. 2715
  2770. 2716 <a href="#_sub95" class="code" title="subfunction ConfigureButton_Callback(hObject, eventdata, handles)">ConfigureButton_Callback</a>(hObject, eventdata, handles)
  2771. 2717
  2772. 2718 <a name="_sub111" href="#_subfunctions" class="code">function coefs = cepcoefs(data,p)</a>
  2773. 2719 <span class="comment">% Computes the cepstral coefficients from the data returns p coefficients</span>
  2774. 2720 coefs = [];
  2775. 2721 <span class="keyword">if</span> p &gt; 0
  2776. 2722 y = fft(hamming(length(data)) .* data);
  2777. 2723 coefs = aryule(ifft(log(abs(y))),p);
  2778. 2724 <span class="keyword">end</span>
  2779. 2725
  2780. 2726 <a name="_sub112" href="#_subfunctions" class="code">function generate_output(handles,absolutetime,filename);</a>
  2781. 2727
  2782. 2728 filebasetosave = filename(1:length(filename)-4);
  2783. 2729
  2784. 2730 matrixoutput = cell(handles.nsegments,1);
  2785. 2731
  2786. 2732 <span class="keyword">for</span> i = 1:handles.nsegments
  2787. 2733 segment = handles.segments(i);
  2788. 2734
  2789. 2735 <span class="keyword">if</span> absolutetime
  2790. 2736 dstr = regexp(segment.wavfile,<span class="string">'[0-9]+\-[0-9]+\-[0-9]+'</span>,<span class="string">'match'</span>);
  2791. 2737 dstr = dstr{1}; <span class="comment">% take first match only</span>
  2792. 2738 tstr = regexp(segment.wavfile,<span class="string">'[0-9][0-9][0-9][0-9][0-9][0-9]'</span>,<span class="string">'match'</span>);
  2793. 2739 tstr = tstr{1};
  2794. 2740 tstr = [tstr(1:2) <span class="string">':'</span> tstr(3:4) <span class="string">':'</span> tstr(5:6)];
  2795. 2741 segmentstart = datenum([dstr <span class="string">' '</span> tstr]) + segment.start;
  2796. 2742 segmentstart = datevec(segmentstart);
  2797. 2743 <span class="keyword">else</span>
  2798. 2744 segmentstart = segment.start;
  2799. 2745 <span class="keyword">end</span>
  2800. 2746 matrixoutput{i} = {segment.wavfile,segment.class,segmentstart,segment.end - segment.start,segment.features};
  2801. 2747 <span class="keyword">end</span>
  2802. 2748
  2803. 2749 save([filebasetosave <span class="string">'.mat'</span>],<span class="string">'-mat'</span>,<span class="string">'matrixoutput'</span>,<span class="string">'-mat'</span>);
  2804. 2750
  2805. 2751 delimiter = <span class="string">'\t'</span>;
  2806. 2752 fp = fopen([filebasetosave <span class="string">'.txt'</span>],<span class="string">'wt'</span>);
  2807. 2753
  2808. 2754 <span class="comment">% Generate header for file</span>
  2809. 2755
  2810. 2756 fprintf(fp,<span class="string">'filename'</span>);fprintf(fp,delimiter);
  2811. 2757 fprintf(fp,<span class="string">'class'</span>);fprintf(fp,delimiter);
  2812. 2758
  2813. 2759 <span class="keyword">if</span> absolutetime
  2814. 2760 fprintf(fp,<span class="string">'year'</span>);fprintf(fp,delimiter);
  2815. 2761 fprintf(fp,<span class="string">'month'</span>);fprintf(fp,delimiter);
  2816. 2762 fprintf(fp,<span class="string">'day'</span>);fprintf(fp,delimiter);
  2817. 2763 fprintf(fp,<span class="string">'hour'</span>);fprintf(fp,delimiter);
  2818. 2764 fprintf(fp,<span class="string">'minute'</span>);fprintf(fp,delimiter);
  2819. 2765 fprintf(fp,<span class="string">'second'</span>);fprintf(fp,delimiter);
  2820. 2766 <span class="keyword">else</span>
  2821. 2767 fprintf(fp,<span class="string">'start'</span>);fprintf(fp,delimiter);
  2822. 2768 <span class="keyword">end</span>
  2823. 2769
  2824. 2770 fprintf(fp,<span class="string">'length'</span>);fprintf(fp,delimiter);
  2825. 2771
  2826. 2772 <span class="keyword">for</span> i = 1:handles.nfeatures
  2827. 2773 fprintf(fp,[<span class="string">'d'</span> num2str(i)]);
  2828. 2774 <span class="keyword">if</span> i &lt; handles.nfeatures;
  2829. 2775 fprintf(fp,delimiter);
  2830. 2776 <span class="keyword">else</span>
  2831. 2777 fprintf(fp,<span class="string">'\n'</span>);
  2832. 2778 <span class="keyword">end</span>
  2833. 2779 <span class="keyword">end</span>
  2834. 2780
  2835. 2781
  2836. 2782 <span class="comment">% Generate main data</span>
  2837. 2783
  2838. 2784 <span class="keyword">for</span> i = 1:handles.nsegments
  2839. 2785 segment = handles.segments(i);
  2840. 2786 fprintf(fp,[<span class="string">'&quot;'</span> segment.wavfile <span class="string">'&quot;'</span>]);fprintf(fp,delimiter);
  2841. 2787 fprintf(fp,[<span class="string">'&quot;'</span> segment.class <span class="string">'&quot;'</span>]);fprintf(fp,delimiter);
  2842. 2788
  2843. 2789 <span class="keyword">if</span> absolutetime
  2844. 2790 time = matrixoutput{i}{3};
  2845. 2791
  2846. 2792 fprintf(fp,num2str(time(1)));fprintf(fp,delimiter);
  2847. 2793 fprintf(fp,num2str(time(2)));fprintf(fp,delimiter);
  2848. 2794 fprintf(fp,num2str(time(3)));fprintf(fp,delimiter);
  2849. 2795 fprintf(fp,num2str(time(4)));fprintf(fp,delimiter);
  2850. 2796 fprintf(fp,num2str(time(5)));fprintf(fp,delimiter);
  2851. 2797 fprintf(fp,num2str(time(6)));
  2852. 2798
  2853. 2799 <span class="keyword">else</span>
  2854. 2800 fprintf(fp,num2str(segment.start));
  2855. 2801 <span class="keyword">end</span>
  2856. 2802
  2857. 2803 fprintf(fp,delimiter);
  2858. 2804 fprintf(fp,num2str(segment.end-segment.start));fprintf(fp,delimiter);
  2859. 2805
  2860. 2806 <span class="keyword">for</span> j = 1:handles.nfeatures
  2861. 2807 fprintf(fp,num2str(segment.features(j)));
  2862. 2808 <span class="keyword">if</span> j &lt; handles.nfeatures <span class="comment">% handle eol formatting</span>
  2863. 2809 fprintf(fp,delimiter);
  2864. 2810 <span class="keyword">else</span>
  2865. 2811 <span class="keyword">if</span> i &lt; handles.nsegments <span class="comment">% handle eof formatting</span>
  2866. 2812 fprintf(fp,<span class="string">'\n'</span>);
  2867. 2813 <span class="keyword">end</span>
  2868. 2814 <span class="keyword">end</span>
  2869. 2815 <span class="keyword">end</span>
  2870. 2816 <span class="keyword">end</span>
  2871. 2817 fclose(fp);
  2872. 2818 <span class="comment">% --------------------------------------------------------------------</span>
  2873. 2819 <a name="_sub113" href="#_subfunctions" class="code">function ExportDataItem_Callback(hObject, eventdata, handles)</a>
  2874. 2820 <span class="comment">% hObject handle to ExportDataItem (see GCBO)</span>
  2875. 2821 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  2876. 2822 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  2877. 2823
  2878. 2824 filename = uiputfile(<span class="string">'*.txt'</span>,<span class="string">'File to write exported data to'</span>);
  2879. 2825
  2880. 2826 <span class="keyword">if</span> not(filename == 0)
  2881. 2827 <span class="keyword">if</span> length(handles.segments(1).features) == 0
  2882. 2828 handles = <a href="#_sub99" class="code" title="subfunction handles = features_segments(handles)">features_segments</a>(handles);
  2883. 2829 <span class="keyword">end</span>
  2884. 2830 <a href="#_sub112" class="code" title="subfunction generate_output(handles,absolutetime,filename);">generate_output</a>(handles,1,filename);
  2885. 2831 <span class="keyword">end</span>
  2886. 2832
  2887. 2833
  2888. 2834 <span class="comment">% --------------------------------------------------------------------</span>
  2889. 2835 <a name="_sub114" href="#_subfunctions" class="code">function CleanDirectoryItem_Callback(hObject, eventdata, handles)</a>
  2890. 2836 <span class="comment">% hObject handle to CleanDirectoryItem (see GCBO)</span>
  2891. 2837 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
  2892. 2838 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
  2893. 2839
  2894. 2840 answer = questdlg(<span class="string">'Clean the current directory. This will remove all files generated by classify_spectra including the file which includes the classification'</span>);
  2895. 2841 <span class="keyword">if</span> strcmp(answer,<span class="string">'Yes'</span>);
  2896. 2842 specfiles = dir(<span class="string">'*.spec'</span>);
  2897. 2843
  2898. 2844 <span class="keyword">for</span> i = 1:length(specfiles)
  2899. 2845 delete(specfiles(i).name);
  2900. 2846 <span class="keyword">end</span>
  2901. 2847
  2902. 2848
  2903. 2849 <span class="keyword">if</span> exist(<span class="string">'class_spec.conf'</span>)
  2904. 2850 delete(<span class="string">'class_spec.conf'</span>);
  2905. 2851 <span class="keyword">end</span>
  2906. 2852
  2907. 2853 <span class="keyword">if</span> exist([handles.baseclassname <span class="string">'.dat'</span>])
  2908. 2854 delete([handles.baseclassname <span class="string">'.dat'</span>]);
  2909. 2855 <span class="keyword">end</span>
  2910. 2856
  2911. 2857
  2912. 2858 <span class="keyword">end</span></pre></div>
  2913. <hr><address>Generated on Fri 12-Aug-2011 11:36:15 by <strong><a href="http://www.artefact.tk/software/matlab/m2html/" target="_parent">m2html</a></strong> &copy; 2005</address>
  2914. </body>
  2915. </html>