1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926 |
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- "http://www.w3.org/TR/REC-html40/loose.dtd">
- <html>
- <head>
- <title>Description of classify_spectra</title>
- <meta name="keywords" content="classify_spectra">
- <meta name="description" content="CLASSIFY_SPECTRA M-file for classify_spectra.fig">
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
- <meta name="generator" content="m2html © 2005 Guillaume Flandin">
- <meta name="robots" content="index, follow">
- <link type="text/css" rel="stylesheet" href="../../m2html.css">
- <script type="text/javascript">
- if (top.frames.length == 0) { top.location = "../../index.html"; };
- </script>
- </head>
- <body>
- <a name="_top"></a>
- <!-- ../menu.html chronux_2_10 --><!-- menu.html wave_browser -->
- <h1>classify_spectra
- </h1>
- <h2><a name="_name"></a>PURPOSE <a href="#_top"><img alt="^" border="0" src="../../up.png"></a></h2>
- <div class="box"><strong>CLASSIFY_SPECTRA M-file for classify_spectra.fig</strong></div>
- <h2><a name="_synopsis"></a>SYNOPSIS <a href="#_top"><img alt="^" border="0" src="../../up.png"></a></h2>
- <div class="box"><strong>function varargout = classify_spectra(varargin) </strong></div>
- <h2><a name="_description"></a>DESCRIPTION <a href="#_top"><img alt="^" border="0" src="../../up.png"></a></h2>
- <div class="fragment"><pre class="comment"> CLASSIFY_SPECTRA M-file for classify_spectra.fig
- CLASSIFY_SPECTRA, by itself, creates a new CLASSIFY_SPECTRA or raises the existing
- singleton*.
- H = CLASSIFY_SPECTRA returns the handle to a new CLASSIFY_SPECTRA or
- the handle to
- the existing singleton*.
- CLASSIFY_SPECTRA('CALLBACK',hObject,eventData,handles,...) calls the local
- function named CALLBACK in CLASSIFY_SPECTRA.M with the given input arguments.
- CLASSIFY_SPECTRA('Property','Value',...) creates a new CLASSIFY_SPECTRA or raises the
- existing singleton*. Starting from the left, property value pairs are
- applied to the GUI before classify_spectra_OpeningFunction gets called. An
- unrecognized property name or invalid value makes property application
- stop. All inputs are passed to classify_spectra_OpeningFcn via varargin.
- *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
- instance to run (singleton)".
- See also: GUIDE, GUIDATA, GUIHANDLES</pre></div>
- <!-- crossreference -->
- <h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../../up.png"></a></h2>
- This function calls:
- <ul style="list-style-image:url(../../matlabicon.gif)">
- <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>
- This function is called by:
- <ul style="list-style-image:url(../../matlabicon.gif)">
- </ul>
- <!-- crossreference -->
- <h2><a name="_subfunctions"></a>SUBFUNCTIONS <a href="#_top"><img alt="^" border="0" src="../../up.png"></a></h2>
- <ul style="list-style-image:url(../../matlabicon.gif)">
- <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>
- <h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../../up.png"></a></h2>
- <div class="fragment"><pre>0001 <a name="_sub0" href="#_subfunctions" class="code">function varargout = classify_spectra(varargin)</a>
- 0002 <span class="comment">% CLASSIFY_SPECTRA M-file for classify_spectra.fig</span>
- 0003 <span class="comment">% CLASSIFY_SPECTRA, by itself, creates a new CLASSIFY_SPECTRA or raises the existing</span>
- 0004 <span class="comment">% singleton*.</span>
- 0005 <span class="comment">%</span>
- 0006 <span class="comment">% H = CLASSIFY_SPECTRA returns the handle to a new CLASSIFY_SPECTRA or</span>
- 0007 <span class="comment">% the handle to</span>
- 0008 <span class="comment">% the existing singleton*.</span>
- 0009 <span class="comment">%</span>
- 0010 <span class="comment">% CLASSIFY_SPECTRA('CALLBACK',hObject,eventData,handles,...) calls the local</span>
- 0011 <span class="comment">% function named CALLBACK in CLASSIFY_SPECTRA.M with the given input arguments.</span>
- 0012 <span class="comment">%</span>
- 0013 <span class="comment">% CLASSIFY_SPECTRA('Property','Value',...) creates a new CLASSIFY_SPECTRA or raises the</span>
- 0014 <span class="comment">% existing singleton*. Starting from the left, property value pairs are</span>
- 0015 <span class="comment">% applied to the GUI before classify_spectra_OpeningFunction gets called. An</span>
- 0016 <span class="comment">% unrecognized property name or invalid value makes property application</span>
- 0017 <span class="comment">% stop. All inputs are passed to classify_spectra_OpeningFcn via varargin.</span>
- 0018 <span class="comment">%</span>
- 0019 <span class="comment">% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one</span>
- 0020 <span class="comment">% instance to run (singleton)".</span>
- 0021 <span class="comment">%</span>
- 0022 <span class="comment">% See also: GUIDE, GUIDATA, GUIHANDLES</span>
- 0023
- 0024 <span class="comment">% Edit the above text to modify the response to help classify_spectra</span>
- 0025
- 0026 <span class="comment">% Last Modified by GUIDE v2.5 26-Jun-2006 23:19:22</span>
- 0027
- 0028 <span class="comment">% Begin initialization code - DO NOT EDIT</span>
- 0029 gui_Singleton = 1;
- 0030 gui_State = struct(<span class="string">'gui_Name'</span>, mfilename, <span class="keyword">...</span>
- 0031 <span class="string">'gui_Singleton'</span>, gui_Singleton, <span class="keyword">...</span>
- 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>
- 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>
- 0034 <span class="string">'gui_LayoutFcn'</span>, [] , <span class="keyword">...</span>
- 0035 <span class="string">'gui_Callback'</span>, []);
- 0036 <span class="keyword">if</span> nargin & isstr(varargin{1})
- 0037 gui_State.gui_Callback = str2func(varargin{1});
- 0038 <span class="keyword">end</span>
- 0039
- 0040 <span class="keyword">if</span> nargout
- 0041 [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
- 0042 <span class="keyword">else</span>
- 0043 gui_mainfcn(gui_State, varargin{:});
- 0044 <span class="keyword">end</span>
- 0045 <span class="comment">% End initialization code - DO NOT EDIT</span>
- 0046
- 0047 <span class="comment">% --- Executes just before classify_spectra is made visible.</span>
- 0048 <a name="_sub1" href="#_subfunctions" class="code">function classify_spectra_OpeningFcn(hObject, eventdata, handles, varargin)</a>
- 0049 <span class="comment">% This function has no output args, see OutputFcn.</span>
- 0050 <span class="comment">% hObject handle to figure</span>
- 0051 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 0052 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 0053 <span class="comment">% varargin command line arguments to classify_spectra (see VARARGIN)</span>
- 0054
- 0055 <span class="comment">% Choose default command line output for classify_spectra</span>
- 0056 handles.output = hObject;
- 0057
- 0058 <span class="comment">% Set defaults</span>
- 0059 handles.recompute = logical(1); <span class="comment">% Whether to recompute a spectra</span>
- 0060 handles.cwavfile = <span class="string">''</span>; <span class="comment">% The current wave file</span>
- 0061
- 0062 handles.directory = pwd;
- 0063
- 0064 handles.Fs = 44100; <span class="comment">% Frequency of audio sampling per second</span>
- 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>
- 0066 handles.tapers=[3 5];
- 0067 handles.pad=1;
- 0068 handles.fpass=[0 20000]; <span class="comment">% Range of frequency sampling</span>
- 0069
- 0070 handles.nsegments = 0; <span class="comment">% total number of segments</span>
- 0071 handles.NextIndex = 1; <span class="comment">% the index for segments</span>
- 0072 handles.maxseglength = 0; <span class="comment">% set in seconds</span>
- 0073
- 0074 <span class="comment">% ClassifyAxes handles</span>
- 0075
- 0076 handles.classified_height = 560 ; <span class="comment">% the height of the image in the classified axes</span>
- 0077 handles.classified_width = 450; <span class="comment">% the width of the image in the classified axes</span>
- 0078
- 0079 <span class="comment">%</span>
- 0080
- 0081 handles.plotmode = <span class="string">'spectra'</span>; <span class="comment">% The main spectra plot mode can also be</span>
- 0082 <span class="comment">% see plot modes</span>
- 0083
- 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> };
- 0085
- 0086 handles.plotmodevalue = 1;
- 0087
- 0088 <span class="comment">% set up a density measurement which will allow scaling</span>
- 0089
- 0090 classaxpos = get(handles.ClassifiedAxes,<span class="string">'Position'</span>);
- 0091 handles.classified_height_density = handles.classified_height / classaxpos(4);
- 0092 handles.classified_width_density = handles.classified_width / classaxpos(3);
- 0093
- 0094 handles.ispecheight = 100; <span class="comment">% fixed height of the iconized spectogram</span>
- 0095 handles.ismaxwidth = <a href="#_sub31" class="code" title="subfunction newwidth = SmallAxes_width(handles)">SmallAxes_width</a>(handles);
- 0096 handles.specpad = 0.02; <span class="comment">% pad in image sizes</span>
- 0097
- 0098 handles.xspacer = 5; <span class="comment">% fixed space between the images in the horizontal direction</span>
- 0099 handles.yspacer = 10; <span class="comment">% fixed space between the row of the images</span>
- 0100
- 0101 handles.xpsacer_density = handles.xspacer / classaxpos(3);
- 0102 handles.ypsacer_density = handles.yspacer / classaxpos(4);
- 0103
- 0104 handles.image_list = {}; <span class="comment">% holds an array of the specicons</span>
- 0105 handles.positions = []; <span class="comment">% holds the position of images on infinitely long canvas</span>
- 0106 handles.images_dim = []; <span class="comment">% holds the size of the images</span>
- 0107
- 0108 handles.mapindex = []; <span class="comment">% holds the position number for the segment</span>
- 0109
- 0110 handles.nimages = 0; <span class="comment">% total number of images or spectra</span>
- 0111 handles.number_rows = floor(handles.classified_height/(handles.yspacer + handles.ispecheight)); <span class="comment">% the number of rows allowed on a page</span>
- 0112
- 0113 handles.cnrows = 0; <span class="comment">% current number of rows</span>
- 0114
- 0115 handles.startpage = 1; <span class="comment">% an index for the first image on the page</span>
- 0116 handles.endpage = 1; <span class="comment">% an index for the last image on the page</span>
- 0117
- 0118 handles.startx = 1; <span class="comment">% for the classified axes holds the start position for the image</span>
- 0119 handles.endx = handles.classified_width; <span class="comment">% for the classified axes holds the end position for the image</span>
- 0120
- 0121 handles.mode = <span class="string">'browse'</span>; <span class="comment">% A string representing the current major mode which is either</span>
- 0122 <span class="comment">% 'browse','classify','class-view','class-members'</span>
- 0123
- 0124 handles.submode = <span class="string">'select'</span>; <span class="comment">%A string representing the minor mode which is either</span>
- 0125 <span class="comment">% 'select','select-class','remove-class', 'compare',</span>
- 0126 <span class="comment">% 'typify'</span>
- 0127
- 0128 handles.quickmode = logical(0); <span class="comment">% Quick mode allows quick classification with minimum</span>
- 0129 <span class="comment">% work for the user. By default this is set</span>
- 0130 <span class="comment">% off</span>
- 0131
- 0132 handles.lastsegment = 1; <span class="comment">% The last segment classified</span>
- 0133
- 0134
- 0135 handles.sortclass = <span class="string">'length'</span>; <span class="comment">% Tells how classes are to be ordered in the ClassifiedAxes</span>
- 0136 <span class="comment">% 'original' is the order the classes were created or loaded from</span>
- 0137 <span class="comment">% 'popularity' sort the classes with most popular first</span>
- 0138 <span class="comment">% 'length' sort the classes by longest</span>
- 0139 <span class="comment">% class first</span>
- 0140
- 0141 set(handles.SortPopupMenu,<span class="string">'Value'</span>,3);
- 0142
- 0143 handles.lastclass = 0;
- 0144
- 0145 handles.lowerfreq = 0; <span class="comment">% Lower frequency for zooming</span>
- 0146 handles.upperfreq = 7500; <span class="comment">% Upper frequency for zooming</span>
- 0147 handles.rezoom = logical(1);
- 0148
- 0149 handles.IconListf = {};
- 0150
- 0151 handles.baseclassname = <span class="string">'mockingbird'</span>; <span class="comment">% This string should be set by the user</span>
- 0152 <span class="comment">% used as the base class name</span>
- 0153 handles.nclasses = 0; <span class="comment">% total number of syllable classes</span>
- 0154 handles.classes = []; <span class="comment">% structure for holding class information</span>
- 0155 handles.current_class = 0; <span class="comment">% used by compare to go through classes</span>
- 0156
- 0157 handles.configschanged = logical(0); <span class="comment">% indicates whether the configs for spectra has changed</span>
- 0158
- 0159 handles.precomputed = logical(0);
- 0160
- 0161 handles.configfile = <span class="string">'class_spec.conf'</span>;
- 0162
- 0163 handles.originalsize = [0 0 170 44]; <span class="comment">% original position of the form</span>
- 0164 handles.originalaxessize = [80.5 6.375 86.167 34.438];
- 0165 handles.blank = logical(1); <span class="comment">% indicate that the ClassifiedAxes is blank</span>
- 0166 handles.prevsize = handles.originalsize;
- 0167
- 0168 handles.fixed = logical(1); <span class="comment">% Whether to use fixed scaling when resizing the form</span>
- 0169 <span class="comment">% initially set to true so not to call the repositioning algorithm when the</span>
- 0170 <span class="comment">% form is blank</span>
- 0171 handles.nfeatures = 10;
- 0172 handles.ncepestral = 10; <span class="comment">% Number of cepestral coefficients to include</span>
- 0173
- 0174 set(gcf, <span class="string">'ResizeFcn'</span>, {@<a href="#_sub93" class="code" title="subfunction ResizeFcn(h, eventdata, handles, varargin)">ResizeFcn</a>});
- 0175 <span class="comment">%classify_spectra('ResizeFcn',gcbo,[],guidata(gcbo))</span>
- 0176 <span class="comment">% Update handles structure</span>
- 0177 guidata(hObject, handles);
- 0178
- 0179 <span class="comment">% UIWAIT makes classify_spectra wait for user response (see UIRESUME)</span>
- 0180 <span class="comment">% uiwait(handles.figure1);</span>
- 0181
- 0182 <span class="comment">% --- Outputs from this function are returned to the command line.</span>
- 0183 <a name="_sub2" href="#_subfunctions" class="code">function varargout = classify_spectra_OutputFcn(hObject, eventdata, handles)</a>
- 0184 <span class="comment">% varargout cell array for returning output args (see VARARGOUT);</span>
- 0185 <span class="comment">% hObject handle to figure</span>
- 0186 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 0187 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 0188
- 0189 <span class="comment">% Get default command line output from handles structure</span>
- 0190 varargout{1} = handles.output;
- 0191
- 0192 <a name="_sub3" href="#_subfunctions" class="code">function DirectoryEditBox_Callback(hObject, eventdata, handles)</a>
- 0193 handles.directory = get(hObject,<span class="string">'String'</span>);
- 0194
- 0195 <a name="_sub4" href="#_subfunctions" class="code">function DirectoryEditBox_CreateFcn(hObject, eventdata, handles)</a>
- 0196 set(hObject,<span class="string">'string'</span>,pwd);
- 0197 guidata(gcbo,handles);
- 0198 <span class="keyword">if</span> ispc
- 0199 set(hObject,<span class="string">'BackgroundColor'</span>,<span class="string">'white'</span>);
- 0200 <span class="keyword">else</span>
- 0201 set(hObject,<span class="string">'BackgroundColor'</span>,get(0,<span class="string">'defaultUicontrolBackgroundColor'</span>));
- 0202 <span class="keyword">end</span>
- 0203
- 0204 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
- 0205 <span class="comment">% Functions for loading segments %</span>
- 0206 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
- 0207
- 0208 <a name="_sub5" href="#_subfunctions" class="code">function segments=LoadSegmentsFromDirectory(directory)</a>
- 0209 segfilelist = dir( [directory <span class="string">'\*'</span> <span class="string">'.seg.txt'</span>] );
- 0210 <span class="comment">%segfilelist;</span>
- 0211 nsegfile = length(segfilelist);
- 0212 segments = [];
- 0213 n = 1;
- 0214 <span class="keyword">while</span> n <= nsegfile
- 0215 segfilename = segfilelist(n).name;
- 0216 fid=fopen( segfilename, <span class="string">'rt'</span> );
- 0217 <span class="keyword">if</span> fid ~= -1 <span class="comment">% if there is a seg file</span>
- 0218 scanned=fscanf( fid, <span class="string">'%g %g'</span>,[2 inf] );
- 0219 fclose(fid);
- 0220 <span class="comment">%fprintf( 'File %d of %d has %d segments: %s\n', n, nsegfile, size(scanned,2),segfilename );</span>
- 0221 wavfile = segfilename(1:(length(segfilename)-8)); <span class="comment">% can this be made more general</span>
- 0222 i = 1;
- 0223 <span class="keyword">while</span> i <= size(scanned, 2) <span class="comment">% Load the start and stop of segments</span>
- 0224 segment.wavfile = wavfile;
- 0225 segment.class = <span class="string">''</span>; <span class="comment">% Loaded segments start out unclassified</span>
- 0226 segment.features = [];
- 0227 segment.start = scanned(1,i);
- 0228 segment.end = scanned(2,i);
- 0229 segment.specfilename = [segment.wavfile <span class="string">'.'</span> num2str(segment.start) <span class="string">'-'</span> num2str(segment.end) <span class="string">'.spec'</span>];
- 0230 segments = [ segments segment];
- 0231 i = i + 1;
- 0232 <span class="keyword">end</span>
- 0233 <span class="keyword">end</span>
- 0234 n = n + 1;
- 0235 <span class="keyword">end</span>
- 0236
- 0237 <a name="_sub6" href="#_subfunctions" class="code">function handles=Load_InitialSegments(hObject,handles)</a>
- 0238 <span class="comment">%handles.directory = pwd;</span>
- 0239 handles.segments = <a href="#_sub5" class="code" title="subfunction segments=LoadSegmentsFromDirectory(directory)">LoadSegmentsFromDirectory</a>(handles.directory);
- 0240 handles.nsegments = length(handles.segments);
- 0241 guidata(hObject, handles);
- 0242
- 0243 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
- 0244 <span class="comment">% Functions for handling syllable classes %</span>
- 0245 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
- 0246
- 0247 <a name="_sub7" href="#_subfunctions" class="code">function handles = cindex2imagelist(handles)</a>
- 0248 <span class="comment">% Takes a cindex and generates a a list of images</span>
- 0249 handles.image_list = {};
- 0250 <span class="comment">%load('-mat','specicons');</span>
- 0251 <span class="keyword">for</span> i = 1:length(handles.mapindex)
- 0252 handles.image_list{i} = handles.classes( handles.mapindex(i) ).iconS;
- 0253 <span class="keyword">end</span>
- 0254
- 0255 <a name="_sub8" href="#_subfunctions" class="code">function mapindex = sortindexbypop(handles)</a>
- 0256 <span class="comment">% Takes a cindex and sorts by the class popularity</span>
- 0257 nindexes = length(handles.mapindex);
- 0258 mapindex = [];
- 0259 <span class="keyword">for</span> i = 1:nindexes
- 0260 mapindex(i,1:2) = [handles.mapindex(i) handles.classes(handles.mapindex(i)).nmembers];
- 0261 <span class="keyword">end</span>
- 0262 mapindex = sortrows(mapindex, 2);
- 0263 mapindex = flipud(mapindex(:,1));
- 0264
- 0265 <a name="_sub9" href="#_subfunctions" class="code">function mapindex = sortindexbylength(handles)</a>
- 0266 <span class="comment">% Takes a cindex and sorts by the class popularity</span>
- 0267 nindexes = length(handles.mapindex);
- 0268 mapindex = [];
- 0269 <span class="keyword">for</span> i = 1:nindexes
- 0270 mapindex(i,1:2) = [handles.mapindex(i) handles.classes(handles.mapindex(i)).length];
- 0271 <span class="keyword">end</span>
- 0272 mapindex = sortrows(mapindex, 2);
- 0273 mapindex = flipud(mapindex(:,1));
- 0274
- 0275 <a name="_sub10" href="#_subfunctions" class="code">function class_string = newclassname(handles)</a>
- 0276 <span class="comment">% Generates a new name for the class string using the baseclassname</span>
- 0277 <span class="comment">% variable. Classes are numbered sequentially from the class with the largest number.</span>
- 0278
- 0279 nbaseclass = length(handles.baseclassname);
- 0280 classnum = 0;
- 0281 <span class="keyword">for</span> i = 1:handles.nclasses <span class="comment">% make sure the largest class number is gotten</span>
- 0282 classname = handles.classes(i).name;
- 0283 curr_classnum = str2num(classname(nbaseclass + 1:length(classname)));
- 0284 <span class="keyword">if</span> curr_classnum > classnum
- 0285 classnum = curr_classnum;
- 0286 <span class="keyword">end</span>
- 0287 <span class="keyword">end</span>
- 0288 class_string = strcat(handles.baseclassname,num2str(classnum + 1));
- 0289 ;
- 0290
- 0291 <a name="_sub11" href="#_subfunctions" class="code">function cindex = returnclassindex(handles,classname)</a>
- 0292 <span class="comment">% Return the index to the class</span>
- 0293 cindex = 0;
- 0294 i = 1;
- 0295 <span class="keyword">while</span> (i <= handles.nclasses) && not(strcmp(classname,handles.classes(i).name))
- 0296 i = i + 1;
- 0297 <span class="keyword">end</span>
- 0298 cindex = i;
- 0299 ;
- 0300
- 0301 <a name="_sub12" href="#_subfunctions" class="code">function handles = add_new_class(handles,segment)</a>
- 0302 <span class="comment">% Segment is the class that will be used to typify the class</span>
- 0303 handles.nclasses = length(handles.classes);
- 0304 class.name = <a href="#_sub10" class="code" title="subfunction class_string = newclassname(handles)">newclassname</a>(handles);
- 0305 class.nmembers = 1; <span class="comment">% the number of segments which are members of this class</span>
- 0306 class.specfilename = segment.specfilename; <span class="comment">% specfilename will be used as a unique identifier</span>
- 0307 class.index = handles.NextIndex;
- 0308 <span class="comment">%load('-mat',class.specfilename);</span>
- 0309 class.iconS = handles.IconList{handles.NextIndex}; <span class="comment">% this is the icon which typifies the class</span>
- 0310 class.length = segment.end - segment.start; <span class="comment">% used to hold the lengt of the length</span>
- 0311
- 0312 handles.classes = [handles.classes class];
- 0313 handles.nclasses = handles.nclasses + 1;
- 0314 <span class="comment">%guidata(gcbo,handles);</span>
- 0315 ;
- 0316
- 0317 <a name="_sub13" href="#_subfunctions" class="code">function handles=ConfigureClassSegment(handles)</a>
- 0318 <span class="comment">% Handles the gui configuration of the class information when navigating</span>
- 0319 segment = handles.segments(handles.NextIndex);
- 0320 <span class="keyword">if</span> strcmp(segment.class,<span class="string">''</span>) <span class="comment">% Unclassified segment</span>
- 0321 set(handles.ClassifyButton,<span class="string">'String'</span>,<span class="string">'Classify'</span>);
- 0322 set(handles.ClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 0323 <span class="keyword">else</span> <span class="comment">% Classified segment</span>
- 0324 set(handles.ClassifyButton,<span class="string">'String'</span>,<span class="string">'Declassify'</span>);
- 0325 set(handles.ClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 0326 <span class="keyword">end</span>
- 0327 <span class="comment">%guidata(gcbo,handles);</span>
- 0328
- 0329 <a name="_sub14" href="#_subfunctions" class="code">function handles = blankaxes(handles)</a>
- 0330 set(handles.NextRowButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 0331 set(handles.PreviousRowButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 0332 axes(handles.ClassifiedAxes);
- 0333 handles.hiclass = image(uint8(zeros(handles.classified_height,handles.classified_width)));
- 0334 set(handles.ClassifiedAxes,<span class="string">'Xtick'</span>,[]);
- 0335 set(handles.ClassifiedAxes,<span class="string">'Ytick'</span>,[]);
- 0336 handles.blank = logical(1);
- 0337
- 0338 <span class="comment">% --- Executes on button press in ClassifyButton.</span>
- 0339 <a name="_sub15" href="#_subfunctions" class="code">function ClassifyButton_Callback(hObject, eventdata, handles)</a>
- 0340 <span class="comment">% hObject handle to ClassifyButton (see GCBO)</span>
- 0341 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 0342 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 0343
- 0344 status = get(handles.ClassifyButton,<span class="string">'String'</span>);
- 0345 set(handles.TypifyClassButton,<span class="string">'Visible'</span>, <span class="string">'off'</span>);
- 0346 set(handles.RemoveClassButton, <span class="string">'Visible'</span>, <span class="string">'off'</span>);
- 0347 set(handles.NextClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 0348 <span class="comment">% set(handles.CompareToggleButton,'Visible','off');</span>
- 0349 set(handles.RenameClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 0350 handles.startx = 1; <span class="comment">% if you have been scrolling reset to defaults</span>
- 0351 handles.endx = handles.classified_width;
- 0352 set(handles.SliderClassified,<span class="string">'Value'</span>,0);
- 0353
- 0354 <span class="keyword">if</span> strcmp(status,<span class="string">'Classify'</span>)
- 0355 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles,<span class="string">''</span>);
- 0356 set(handles.ModePopupMenu,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 0357 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 0358 set(handles.PreviousSpectraButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 0359 set(handles.ClassifyButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 0360 set(handles.CompareToggleButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 0361 set(handles.QuickModeButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 0362 set(handles.AutoClassifyButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 0363 set(handles.NewClassButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
- 0364 <span class="keyword">if</span> handles.nclasses > 0 <span class="comment">% Make sure there is at least one class</span>
- 0365 <span class="keyword">if</span> strcmp(handles.mode,<span class="string">'comparison'</span>) <span class="comment">% if you are in comparison mode</span>
- 0366 set(handles.NewClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 0367 handles.segments(handles.NextIndex).class = handles.classes(handles.lastclass).name;
- 0368 set(handles.ModePopupMenu,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 0369 set(handles.ClassifyButton,<span class="string">'String'</span>,<span class="string">'Declassify'</span>);
- 0370 set(handles.ClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 0371 set(handles.CompareToggleButton,<span class="string">'value'</span>,0);
- 0372 set(handles.CompareToggleButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 0373 handles = <a href="#_sub58" class="code" title="subfunction handles = configureclassview(handles,submode)">configureclassview</a>(handles,<span class="string">'select-class'</span>);
- 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>]);
- 0375 set(handles.RemoveClassButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 0376 set(handles.RemoveClassButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
- 0377 set(handles.QuickModeButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 0378 set(handles.AutoClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 0379 <a href="#_sub54" class="code" title="subfunction setnavigationbuttons(handles)">setnavigationbuttons</a>(handles);
- 0380 <span class="keyword">else</span> <span class="comment">% regular mode</span>
- 0381 set(handles.SortText,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
- 0382 set(handles.SortPopupMenu,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
- 0383 handles = <a href="#_sub58" class="code" title="subfunction handles = configureclassview(handles,submode)">configureclassview</a>(handles,<span class="string">'select-class'</span>);
- 0384 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles, [<span class="string">'Select a class'</span>]);
- 0385 <span class="keyword">end</span>
- 0386 <span class="keyword">else</span> <span class="comment">% draw a blank image</span>
- 0387 handles = <a href="#_sub14" class="code" title="subfunction handles = blankaxes(handles)">blankaxes</a>(handles);
- 0388 handles.mode = <span class="string">'class-view'</span>;
- 0389 handles.submode = <span class="string">'select-class'</span>;
- 0390 set(handles.hiclass,<span class="string">'ButtonDownFcn'</span>,{@<a href="#_sub56" class="code" title="subfunction DummyClassifyAxesClickCallBack(src,eventdata,handles)">DummyClassifyAxesClickCallBack</a>,handles});
- 0391 <span class="keyword">end</span>
- 0392 <span class="comment">% configure the remaining gui</span>
- 0393 handles = <a href="#_sub59" class="code" title="subfunction handles = SetModePopupMenu(handles,viewstring)">SetModePopupMenu</a>(handles,<span class="string">'class view'</span>);
- 0394 <span class="keyword">elseif</span> strcmp(status,<span class="string">'Declassify'</span>)
- 0395 cindex = <a href="#_sub11" class="code" title="subfunction cindex = returnclassindex(handles,classname)">returnclassindex</a>(handles,handles.segments(handles.NextIndex).class);
- 0396 <span class="keyword">if</span> handles.classes(cindex).nmembers == 1 <span class="comment">% Only one member left of that class</span>
- 0397 <span class="keyword">if</span> length(handles.classes) == 1 <span class="comment">% Only one class remaining</span>
- 0398 axes(handles.ClassifiedAxes);
- 0399 handles.classes = [];
- 0400 handles.nclasses = 0;
- 0401 handles = <a href="#_sub14" class="code" title="subfunction handles = blankaxes(handles)">blankaxes</a>(handles);
- 0402 <span class="keyword">else</span> <span class="comment">% remove the class</span>
- 0403 handles.classes = [handles.classes(1:cindex-1) handles.classes(cindex + 1:length(handles.classes))];
- 0404 handles.nclasses = handles.nclasses - 1;
- 0405 <span class="keyword">end</span>
- 0406 <span class="keyword">else</span>
- 0407 <span class="keyword">if</span> strcmp(handles.classes(cindex).specfilename,handles.segments(handles.NextIndex).specfilename)
- 0408 i = 1; <span class="comment">%Test if the class you are removing the type class</span>
- 0409 segs = [ handles.segments(1:(handles.NextIndex - 1)) handles.segments((handles.NextIndex + 1) : handles.nclasses)];
- 0410 <span class="keyword">while</span> (i <= length(segs)) && strcmp(segs(i).class,handles.classes(cindex).name)
- 0411 i = i + 1;
- 0412 <span class="keyword">end</span>
- 0413 handles.classes(cindex).specfilename = handles.segments(i).specfilename;
- 0414 handles.classes(cindex).length = handles.segments(i).end - handles.segments(i).start;
- 0415 handles.iconS = handles.IconList{i};
- 0416 <span class="keyword">end</span>
- 0417 handles.classes(cindex).nmembers = handles.classes(cindex).nmembers - 1;
- 0418 <span class="keyword">end</span>
- 0419 handles.segments(handles.NextIndex).class = <span class="string">''</span>; <span class="comment">% Remove class information</span>
- 0420 <span class="keyword">if</span> handles.nclasses >= 1 <span class="comment">% Redraw axes</span>
- 0421 <span class="keyword">if</span> strcmp(handles.mode,<span class="string">'class-view'</span>)
- 0422 handles = <a href="#_sub58" class="code" title="subfunction handles = configureclassview(handles,submode)">configureclassview</a>(handles,<span class="string">'select'</span>);
- 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>]);
- 0424 <span class="keyword">elseif</span> strcmp(handles.mode,<span class="string">'class-members'</span>)
- 0425 handles = <a href="#_sub63" class="code" title="subfunction handles = configureclassmembers(handles,classname)">configureclassmembers</a>(handles,handles.classes(cindex).name);
- 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)]);
- 0427 <span class="keyword">elseif</span> strcmp(handles.mode,<span class="string">'browse'</span>)
- 0428 ; <span class="comment">% do nothing</span>
- 0429 <span class="keyword">end</span>
- 0430 <span class="keyword">end</span>
- 0431 set(handles.ClassifyButton,<span class="string">'String'</span>,<span class="string">'Classify'</span>);
- 0432
- 0433 <a href="#_sub54" class="code" title="subfunction setnavigationbuttons(handles)">setnavigationbuttons</a>(handles);
- 0434 <span class="keyword">end</span>
- 0435 guidata(gcbo,handles);
- 0436
- 0437
- 0438 <span class="comment">% --- Executes on button press in NewClassButton.</span>
- 0439 <a name="_sub16" href="#_subfunctions" class="code">function NewClassButton_Callback(hObject, eventdata, handles)</a>
- 0440 <span class="comment">% hObject handle to NewClassButton (see GCBO)</span>
- 0441 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 0442 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 0443
- 0444 handles.startx = 1; <span class="comment">% if you have been scrolling reset to defaults</span>
- 0445 handles.endx = handles.classified_width;
- 0446 set(handles.SliderClassified,<span class="string">'Value'</span>,0);
- 0447
- 0448 handles = <a href="#_sub12" class="code" title="subfunction handles = add_new_class(handles,segment)">add_new_class</a>(handles,handles.segments(handles.NextIndex));
- 0449 handles.segments(handles.NextIndex).class = handles.classes(handles.nclasses).name;
- 0450
- 0451 set(handles.SortText,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 0452 set(handles.SortPopupMenu,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 0453 set(handles.ClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 0454 set(handles.ClassifyButton,<span class="string">'String'</span>,<span class="string">'Declassify'</span>);
- 0455 set(handles.NewClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 0456 set(handles.ModePopupMenu,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 0457 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 0458 set(handles.CompareToggleButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 0459 set(handles.QuickModeButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 0460 set(handles.AutoClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 0461 set(handles.PreviousSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 0462 handles = <a href="#_sub58" class="code" title="subfunction handles = configureclassview(handles,submode)">configureclassview</a>(handles,<span class="string">'xxx'</span>);
- 0463 <a href="#_sub54" class="code" title="subfunction setnavigationbuttons(handles)">setnavigationbuttons</a>(handles);
- 0464 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles,<span class="string">''</span>);
- 0465 handles = <a href="#_sub59" class="code" title="subfunction handles = SetModePopupMenu(handles,viewstring)">SetModePopupMenu</a>(handles,<span class="string">'class view'</span>);
- 0466 guidata(gcbo,handles);
- 0467 ;
- 0468
- 0469 <span class="comment">% --- Executes on button press in RemoveClassButton.</span>
- 0470 <a name="_sub17" href="#_subfunctions" class="code">function RemoveClassButton_Callback(hObject, eventdata, handles)</a>
- 0471 <span class="comment">% hObject handle to RemoveClassButton (see GCBO)</span>
- 0472 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 0473 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 0474
- 0475 <span class="comment">%set(handles.TypifyClassButton,'Enable','on');</span>
- 0476 set(handles.RemoveClassButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 0477 handles.mode = <span class="string">'class-view'</span>;
- 0478 handles.submode = <span class="string">'remove-class'</span>;
- 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>);
- 0480 guidata(gcbo,handles);
- 0481
- 0482
- 0483 <span class="comment">% --- Executes on button press in TypifyClassButton.</span>
- 0484 <a name="_sub18" href="#_subfunctions" class="code">function TypifyClassButton_Callback(hObject, eventdata, handles)</a>
- 0485 <span class="comment">% hObject handle to TypifyClassButton (see GCBO)</span>
- 0486 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 0487 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 0488
- 0489 set(handles.TypifyClassButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 0490 <span class="comment">%set(handles.RemoveClassButton,'Enable','on');</span>
- 0491 handles.mode = <span class="string">'class-members'</span>;
- 0492 handles.submode = <span class="string">'typify'</span>;
- 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>);
- 0494 guidata(gcbo,handles);
- 0495
- 0496 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
- 0497 <span class="comment">% Functions for computing the spectra %</span>
- 0498 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
- 0499
- 0500 <a name="_sub19" href="#_subfunctions" class="code">function segment=precompute_spectra(handles, segment) </a>
- 0501 <span class="comment">% This function will do the precomputing of the spectragram</span>
- 0502 spec_ipad = round(handles.specpad * handles.Fs);
- 0503 spec_istart = round(segment.start * handles.Fs);
- 0504 spec_iend = round(segment.end * handles.Fs);
- 0505
- 0506 <span class="comment">% This is to catch an over and under run errors in the wav file because of the padding</span>
- 0507 <span class="keyword">try</span>
- 0508 [data] = wavread(segment.wavfile, [spec_istart - spec_ipad, spec_iend + spec_ipad]);
- 0509 <span class="keyword">catch</span>
- 0510 errmsg = lasterr;
- 0511 <span class="keyword">if</span> strfind(errmsg, <span class="string">'Sample limits out of range'</span>)
- 0512 <span class="keyword">if</span> (segment.start - handles.specpad) < 0 <span class="comment">% Make sure the starting point is not negative</span>
- 0513 [data] = wavread(segment.wavfile, [1 spec_iend + spec_ipad]);
- 0514 <span class="keyword">else</span> <span class="comment">% over run of the buffer</span>
- 0515 [data] = wavread(segment.wavfile);
- 0516 [data] = data((spec_istart - spec_ipad):length(data));
- 0517 <span class="keyword">end</span>
- 0518 <span class="keyword">end</span>
- 0519 <span class="keyword">end</span>
- 0520
- 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>
- 0522
- 0523 wavlength = length(data);
- 0524 Ssize = size(Sfull);
- 0525
- 0526 Slength = Ssize(2);
- 0527 RatioWS = Slength / (wavlength / handles.Fs); <span class="comment">% this allows us to index by time through spec file</span>
- 0528
- 0529 Sstart = round(RatioWS * segment.start);
- 0530 Send = round(RatioWS * segment.end);
- 0531 Spad = round(RatioWS * handles.specpad);
- 0532
- 0533 Spre = Sfull(:,1:Spad);
- 0534 S = Sfull(:,Spad+1:Spad + Send-Sstart);
- 0535 Spost = Sfull(:,Spad + (Send-Sstart)+1:Slength);
- 0536 t=[segment.start, segment.end];
- 0537
- 0538 iconS = <a href="#_sub32" class="code" title="subfunction iconS = iconify_spec(S,height)">iconify_spec</a>(S,handles.ispecheight);
- 0539
- 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>);
- 0541
- 0542 fprintf(<span class="string">'Saving %s file\n'</span>,segment.specfilename);
- 0543
- 0544 <a name="_sub20" href="#_subfunctions" class="code">function handles = precompute_AllSpectra(handles)</a>
- 0545 <span class="comment">% This function precomputes all the spectra in a directory</span>
- 0546 hw = waitbar(0,<span class="string">'Precomputing spectra. . .'</span>);
- 0547 <span class="keyword">if</span> handles.nsegments >= 1
- 0548 <span class="keyword">for</span> i = 1:handles.nsegments
- 0549 <a href="#_sub19" class="code" title="subfunction segment=precompute_spectra(handles, segment)">precompute_spectra</a>(handles,handles.segments(i));
- 0550 waitbar(i/handles.nsegments);
- 0551 <span class="keyword">end</span>
- 0552 <span class="keyword">end</span>
- 0553 <a href="../../chronux_2_10/fly_track/videoIO/videoIO_2006a/@videoReader/close.html" class="code" title="function vr = close(vr)">close</a>(hw);
- 0554 handles.IconList = <a href="#_sub37" class="code" title="subfunction IconList=get_SpecIcons(handles)">get_SpecIcons</a>(handles);
- 0555 ;
- 0556 <a name="_sub21" href="#_subfunctions" class="code">function [S t f]=compute_spectra(data,tapers,Fs,fpass,movingwin)</a>
- 0557 data = data / std(data); <span class="comment">% normalize the variance of the spectra</span>
- 0558 params.tapers=tapers; params.Fs=Fs; params.fpass=fpass;
- 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 );
- 0560 S = log(S)';
- 0561
- 0562
- 0563 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
- 0564 <span class="comment">% Functions for plotting the spectragram %</span>
- 0565 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
- 0566
- 0567 <a name="_sub22" href="#_subfunctions" class="code">function handles=get_and_plot(handles, segment)</a>
- 0568 load(<span class="string">'-mat'</span>,segment.specfilename);
- 0569 axes(handles.ToClassifyAxes);
- 0570 <span class="comment">% RatioWS</span>
- 0571
- 0572 cmap = jet(256);
- 0573
- 0574 <span class="keyword">if</span> strcmp(handles.plotmode,<span class="string">'spectra'</span>)
- 0575 SFull = cat(2,Spre,S,Spost);
- 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>)
- 0577 wav_ipad = round(handles.specpad * handles.Fs);
- 0578 wav_istart = round(segment.start * handles.Fs);
- 0579 wav_iend = round(segment.end * handles.Fs);
- 0580
- 0581 <span class="comment">% This is to catch an over and under run errors in the wav file because of the padding</span>
- 0582 <span class="keyword">try</span>
- 0583 [data] = wavread(segment.wavfile, [wav_istart - wav_ipad, wav_iend + wav_ipad]);
- 0584 <span class="keyword">catch</span>
- 0585 errmsg = lasterr;
- 0586 <span class="keyword">if</span> strfind(errmsg, <span class="string">'Sample limits out of range'</span>)
- 0587 <span class="keyword">if</span> (segment.start - handles.specpad) < 0 <span class="comment">% Make sure the starting point is not negative</span>
- 0588 [data] = wavread(segment.wavfile, [1 wav_iend + wav_ipad]);
- 0589 <span class="keyword">else</span> <span class="comment">% over run of the buffer</span>
- 0590 [data] = wavread(segment.wavfile);
- 0591 [data] = data((wav_istart - wav_ipad):length(data));
- 0592 <span class="keyword">end</span>
- 0593 <span class="keyword">end</span>
- 0594 <span class="keyword">end</span>
- 0595
- 0596 data = data / std(data);
- 0597
- 0598 params.Fs=handles.Fs;
- 0599 params.tapers = handles.tapers;
- 0600 params.fpass=handles.fpass;
- 0601 params.pad = 1;
- 0602
- 0603 <span class="keyword">if</span> strcmp(handles.plotmode,<span class="string">'spectra_dt'</span>)
- 0604 cmap = gray(256);
- 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';
- 0606 <span class="keyword">elseif</span> strcmp(handles.plotmode,<span class="string">'spectra_df'</span>)
- 0607 cmap = gray(256);
- 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';
- 0609 <span class="keyword">end</span>
- 0610 <span class="keyword">end</span>
- 0611
- 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>)
- 0613
- 0614 cmap(1,:) = [1, 1, 1];
- 0615 colormap(cmap);
- 0616
- 0617 SFmin = min(min(SFull));
- 0618 SFmax = max(max(SFull));
- 0619 SFull = uint8(1 + round(255 * (SFull-SFmin) / (SFmax-SFmin)));
- 0620
- 0621 hi = image(tfull + segment.start - handles.specpad,f,SFull);
- 0622 set(hi,<span class="string">'ButtonDownFcn'</span>,{@<a href="#_sub23" class="code" title="subfunction PlotModeCallBack(src,eventdata)">PlotModeCallBack</a>});
- 0623
- 0624 axis xy;
- 0625
- 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);
- 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);
- 0628
- 0629 <span class="keyword">else</span>
- 0630
- 0631 <span class="comment">% xlim([tfull(1) tfull(length(tfull))] + segment.start - handles.specpad);</span>
- 0632
- 0633 hp = plot(segment.start - handles.specpad + [0:length(data)-1] / handles.Fs, data);
- 0634 set(handles.ToClassifyAxes,<span class="string">'YLim'</span>,[-5 5]);
- 0635 set(hp,<span class="string">'ButtonDownFcn'</span>,{@<a href="#_sub23" class="code" title="subfunction PlotModeCallBack(src,eventdata)">PlotModeCallBack</a>});
- 0636 axis tight;
- 0637
- 0638 dataspan = [min(data) max(data)];
- 0639
- 0640 hline1 = line([segment.start segment.start],dataspan,<span class="string">'Color'</span>,[0 0 0],<span class="string">'LineWidth'</span>,3);
- 0641 hline2 = line([segment.end segment.end],dataspan,<span class="string">'Color'</span>,[0 0 0],<span class="string">'LineWidth'</span>,3);
- 0642
- 0643 <span class="keyword">end</span>
- 0644
- 0645 axes(handles.ToClassifySmallAxes);
- 0646 ispecFull = uint8(zeros(handles.ispecheight,handles.ismaxwidth));
- 0647
- 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);
- 0649
- 0650 <span class="keyword">if</span> length(ispecFull(1,:)) > handles.ismaxwidth
- 0651 ispecFull = ispecFull(:,1:handles.ismaxwidth);
- 0652 <span class="keyword">end</span>
- 0653
- 0654 <span class="keyword">if</span> strcmp(get(handles.ZoomButton,<span class="string">'String'</span>),<span class="string">'Zoom out'</span>)
- 0655 f = [handles.lowerfreq handles.upperfreq];
- 0656 <span class="keyword">end</span>
- 0657
- 0658 tsmall = [handles.movingwin(1),handles.ismaxwidth * handles.movingwin(2) - handles.movingwin(1)];
- 0659 <span class="comment">%</span>
- 0660 <span class="comment">% cmap = jet(256);</span>
- 0661 <span class="comment">% cmap(1,:) = [1, 1, 1];</span>
- 0662 <span class="comment">%</span>
- 0663 <span class="comment">% colormap(cmap);</span>
- 0664
- 0665 <span class="comment">% [0 (handles.ismaxwidth * (segment.end - segment.start))/length(iconS(1,:))]</span>
- 0666 ih = image(tsmall,f,flipud(ispecFull));
- 0667 axis xy;
- 0668 ;
- 0669
- 0670 <a name="_sub23" href="#_subfunctions" class="code">function PlotModeCallBack(src,eventdata)</a>
- 0671 <span class="comment">% A Function for handling clicks to the axes</span>
- 0672 handles = guidata(gcbo);
- 0673
- 0674 handles.plotmodevalue = handles.plotmodevalue + 1;
- 0675
- 0676 <span class="keyword">if</span> handles.plotmodevalue > length(handles.plotmodes)
- 0677 handles.plotmodevalue = 1;
- 0678 <span class="keyword">end</span>
- 0679
- 0680 handles.plotmode = handles.plotmodes{handles.plotmodevalue};
- 0681 handles=<a href="#_sub22" class="code" title="subfunction handles=get_and_plot(handles, segment)">get_and_plot</a>(handles, handles.segments(handles.NextIndex));
- 0682
- 0683 guidata(gcf,handles);
- 0684
- 0685 <a name="_sub24" href="#_subfunctions" class="code">function handles=ConfigureSpecPlot(handles)</a>
- 0686 <span class="comment">% Handles the gui configuration of the plotting</span>
- 0687 segment = handles.segments(handles.NextIndex);
- 0688 <span class="keyword">if</span> not(exist(segment.specfilename)) || handles.recompute
- 0689 <a href="#_sub19" class="code" title="subfunction segment=precompute_spectra(handles, segment)">precompute_spectra</a>(handles,segment);
- 0690 <span class="keyword">end</span>
- 0691
- 0692 set(handles.ToClassifyPanel,<span class="string">'Title'</span>,[<span class="string">'Segment '</span> num2str(handles.NextIndex) <span class="string">'/'</span> num2str(handles.nsegments)])
- 0693
- 0694 segmentstatus = [<span class="string">'File: "'</span> segment.wavfile <span class="string">'"; Segment length '</span> num2str(segment.end - segment.start,3)];
- 0695
- 0696 set(handles.SegmentText,<span class="string">'String'</span>,segmentstatus);
- 0697 handles = <a href="#_sub22" class="code" title="subfunction handles=get_and_plot(handles, segment)">get_and_plot</a>(handles, segment);
- 0698 guidata(gcbo,handles);
- 0699 ;
- 0700
- 0701 <a name="_sub25" href="#_subfunctions" class="code">function NextSpectraButton_Callback(hObject, eventdata, handles)</a>
- 0702 <span class="comment">% Moves the segment viewer forward one segment</span>
- 0703 handles.NextIndex = handles.NextIndex + 1;
- 0704 <span class="keyword">if</span> handles.NextIndex == handles.nsegments
- 0705 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 0706 <span class="keyword">end</span>
- 0707
- 0708 <span class="keyword">if</span> handles.NextIndex > 1
- 0709 set(handles.PreviousSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 0710 <span class="keyword">end</span>
- 0711
- 0712 handles=<a href="#_sub13" class="code" title="subfunction handles=ConfigureClassSegment(handles)">ConfigureClassSegment</a>(handles);
- 0713 handles=<a href="#_sub24" class="code" title="subfunction handles=ConfigureSpecPlot(handles)">ConfigureSpecPlot</a>(handles);
- 0714 guidata(gcbo,handles);
- 0715 ;
- 0716
- 0717 <a name="_sub26" href="#_subfunctions" class="code">function PreviousSpectraButton_Callback(hObject, eventdata, handles)</a>
- 0718 <span class="comment">% Moves the segment viewer backwards one segment</span>
- 0719 handles.NextIndex = handles.NextIndex - 1;
- 0720
- 0721 <span class="keyword">if</span> handles.NextIndex == 1
- 0722 set(handles.PreviousSpectraButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 0723 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 0724 <span class="keyword">end</span>
- 0725
- 0726 <span class="keyword">if</span> handles.NextIndex < handles.nsegments
- 0727 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 0728 <span class="keyword">end</span>
- 0729
- 0730 handles=<a href="#_sub13" class="code" title="subfunction handles=ConfigureClassSegment(handles)">ConfigureClassSegment</a>(handles);
- 0731 handles=<a href="#_sub24" class="code" title="subfunction handles=ConfigureSpecPlot(handles)">ConfigureSpecPlot</a>(handles);
- 0732
- 0733 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 0734 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 0735 guidata(gcbo,handles);
- 0736 ;
- 0737
- 0738 <a name="_sub27" href="#_subfunctions" class="code">function PrecomputeButton_Callback(hObject, eventdata, handles)</a>
- 0739 <span class="comment">% Call back for the precompute button. This acts to load the file from the directory</span>
- 0740
- 0741 handles.directory = get(handles.DirectoryEditBox,<span class="string">'String'</span>);
- 0742
- 0743 <span class="comment">% fprintf('creating syllable list\n');</span>
- 0744 <span class="comment">%handles.segments = segments;</span>
- 0745 handles.classes = [];
- 0746 set(handles.PrecomputeButton, <span class="string">'Enable'</span>, <span class="string">'off'</span> );
- 0747 handles.NextIndex = 1;
- 0748
- 0749 handles = <a href="#_sub6" class="code" title="subfunction handles=Load_InitialSegments(hObject,handles)">Load_InitialSegments</a>(hObject,handles);
- 0750 handles.recompute = logical(0);
- 0751
- 0752 <span class="keyword">if</span> handles.nsegments >= 1
- 0753 handles=<a href="#_sub13" class="code" title="subfunction handles=ConfigureClassSegment(handles)">ConfigureClassSegment</a>(handles);
- 0754
- 0755 handles = <a href="#_sub97" class="code" title="subfunction handles = load_configuration(handles,filename)">load_configuration</a>(handles,handles.configfile);
- 0756
- 0757 <span class="keyword">if</span> exist([handles.baseclassname <span class="string">'.dat'</span>]) && not(handles.configschanged)
- 0758 load(<span class="string">'-mat'</span>,<span class="string">'specicons'</span>);
- 0759 handles.IconList = IconList;
- 0760 data = <a href="#_sub68" class="code" title="subfunction data = read_syllable_database(handles)">read_syllable_database</a>(handles);
- 0761 handles = <a href="#_sub69" class="code" title="subfunction handles = merge_syllable_database(handles,data)">merge_syllable_database</a>(handles,data);
- 0762 <span class="keyword">else</span>
- 0763 handles = <a href="#_sub20" class="code" title="subfunction handles = precompute_AllSpectra(handles)">precompute_AllSpectra</a>(handles);
- 0764 <span class="keyword">end</span>
- 0765
- 0766 <span class="comment">%set(handles.ConfigureButton, 'Enable','off');</span>
- 0767 handles=<a href="#_sub24" class="code" title="subfunction handles=ConfigureSpecPlot(handles)">ConfigureSpecPlot</a>(handles);
- 0768 handles=<a href="#_sub49" class="code" title="subfunction handles = BrowseDirectory(handles)">BrowseDirectory</a>(handles);
- 0769 handles.precomputed = logical(1);
- 0770 set(handles.PlaySegmentButton, <span class="string">'Enable'</span>, <span class="string">'on'</span> );
- 0771 set(handles.NextSpectraButton, <span class="string">'Enable'</span>, <span class="string">'on'</span> );
- 0772 set(handles.ModePopupMenu,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 0773 set(handles.SaveButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 0774 set(handles.SaveItem,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 0775 set(handles.PrecomputeButton, <span class="string">'Enable'</span>, <span class="string">'off'</span> );
- 0776 set(handles.CleanDirectoryItem, <span class="string">'Enable'</span>, <span class="string">'off'</span> );
- 0777 set(handles.LoadDirectoryButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 0778 set(handles.LoadItem,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 0779 set(handles.ZoomButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 0780 set(handles.QuickModeButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 0781 set(handles.CompareToggleButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 0782 set(handles.ConfigureButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 0783 set(handles.ConfigureItem,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 0784 set(handles.AutoClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 0785
- 0786 handles.fixed = logical(0); <span class="comment">% turn off fixed scaling</span>
- 0787
- 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>
- 0789 set(handles.ClassifyButton,<span class="string">'String'</span>,<span class="string">'Declassify'</span>);
- 0790 <span class="keyword">end</span>
- 0791
- 0792 <span class="keyword">else</span>
- 0793 set(handles.PrecomputeButton, <span class="string">'Enable'</span>, <span class="string">'on'</span> );
- 0794 <span class="keyword">end</span>
- 0795 guidata(gcbo,handles);
- 0796 ;
- 0797
- 0798 <span class="comment">% --- Executes on button press in PlaySegmentButton.</span>
- 0799
- 0800 <a name="_sub28" href="#_subfunctions" class="code">function PlaySegmentButton_Callback(hObject, eventdata, handles)</a>
- 0801 <span class="comment">% Plays the current segment in the segment viewer</span>
- 0802 <span class="comment">% hObject handle to PlaySegmentButton (see GCBO)</span>
- 0803 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 0804 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 0805 segment = handles.segments(handles.NextIndex);
- 0806 data = wavread(segment.wavfile,[round(handles.Fs * segment.start),round(handles.Fs * segment.end)]);
- 0807 wavplay(data,handles.Fs,<span class="string">'async'</span>);
- 0808
- 0809
- 0810 <a name="_sub29" href="#_subfunctions" class="code">function CurrentFilenameEdit_Callback(hObject, eventdata, handles)</a>
- 0811
- 0812 <a name="_sub30" href="#_subfunctions" class="code">function CurrentFilenameEdit_CreateFcn(hObject, eventdata, handles)</a>
- 0813 <span class="keyword">if</span> ispc
- 0814 set(hObject,<span class="string">'BackgroundColor'</span>,<span class="string">'white'</span>);
- 0815 <span class="keyword">else</span>
- 0816 set(hObject,<span class="string">'BackgroundColor'</span>,get(0,<span class="string">'defaultUicontrolBackgroundColor'</span>));
- 0817 <span class="keyword">end</span>
- 0818
- 0819
- 0820 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
- 0821 <span class="comment">% Functions for viewing spectra icon %</span>
- 0822 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
- 0823
- 0824 <a name="_sub31" href="#_subfunctions" class="code">function newwidth = SmallAxes_width(handles)</a>
- 0825 position1 = get(handles.ToClassifySmallAxes,<span class="string">'Position'</span>);
- 0826 position2 = get(handles.ClassifiedAxes,<span class="string">'Position'</span>);
- 0827
- 0828 newwidth = round(position1(3) *(handles.classified_width / position2(3)));
- 0829
- 0830 <a name="_sub32" href="#_subfunctions" class="code">function iconS = iconify_spec(S,height)</a>
- 0831 <span class="comment">% Take a large spectra with high frequency bandwidth and reduce the height</span>
- 0832 <span class="comment">% by pixel averaging</span>
- 0833 Ssize = size(S);
- 0834 iconS = zeros(height,Ssize(2));
- 0835
- 0836 <span class="comment">% averaging of values to reduce size</span>
- 0837 rf = floor(Ssize(1)/height);
- 0838
- 0839 <span class="keyword">for</span> i = 1:(height-1)
- 0840 <span class="keyword">for</span> j = 1 : Ssize(2)
- 0841 iconS(i,j) = sum(S(((i-1)*rf)+1:i*rf,j))/rf;
- 0842 <span class="keyword">end</span>
- 0843 <span class="keyword">end</span>
- 0844
- 0845 <span class="keyword">for</span> j = 1 : Ssize(2) <span class="comment">% take care of the last row by also pixel averaging</span>
- 0846 iconS(height,j) = mean(S(rf*(height-1) : Ssize(1),j));
- 0847 <span class="keyword">end</span>
- 0848 iconS = flipud(iconS);
- 0849
- 0850 <span class="comment">% Rescaling of values</span>
- 0851 maxintense = max(max(iconS));
- 0852 minintense = min(min(iconS));
- 0853
- 0854 iconS=uint8(1 + round(255 * (iconS-minintense)/(maxintense-minintense)));
- 0855
- 0856 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
- 0857 <span class="comment">% Functions for loading in images %</span>
- 0858 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
- 0859
- 0860 <a name="_sub33" href="#_subfunctions" class="code">function destination = copy_into(destination,source,r,c)</a>
- 0861 <span class="comment">% This copies an image into another image</span>
- 0862 <span class="comment">% Two problems: one it can be optimized by removing the nested for loops</span>
- 0863 <span class="comment">% two there is an indexing bug which returns a one pixel larger image</span>
- 0864 sized = size(destination);
- 0865 sizes = size(source);
- 0866
- 0867 destination(r:r+sizes(1)-1,c:c+sizes(2)-1) = source(:,:);
- 0868
- 0869 <span class="comment">% for i = 1:sizes(1)</span>
- 0870 <span class="comment">% for j = 1:sizes(2)</span>
- 0871 <span class="comment">% destination(r+i,c+j) = source(i,j);</span>
- 0872 <span class="comment">% end</span>
- 0873 <span class="comment">% end</span>
- 0874 <span class="comment">% ;</span>
- 0875
- 0876 <a name="_sub34" href="#_subfunctions" class="code">function positions = position_images(height,width,images_dim,xspacer,yspacer)</a>
- 0877 <span class="comment">% This function returns a matrix consisting of two rows with the xy</span>
- 0878 <span class="comment">% position for images.</span>
- 0879 <span class="comment">% The function also assumes that the image's height is not restricted this</span>
- 0880 <span class="comment">% allows for easier scrolling</span>
- 0881 <span class="comment">% The function assumes that all images are of the same height</span>
- 0882 <span class="comment">% height in pixels of the original</span>
- 0883 <span class="comment">% width in pixels of the original</span>
- 0884 <span class="comment">% images</span>
- 0885 <span class="comment">% xspacer in pixels for the horizontal space between images</span>
- 0886 <span class="comment">% yspacer is the next height of the image</span>
- 0887 <span class="comment">% image height is the fixed height of the images</span>
- 0888
- 0889 number_images = length(images_dim(:,1));
- 0890 imageheight = images_dim(1);
- 0891
- 0892 currentx = xspacer;
- 0893 currenty = yspacer;
- 0894
- 0895 positions = zeros(number_images,2);
- 0896
- 0897 <span class="keyword">for</span> i = 1:number_images
- 0898 <span class="keyword">if</span> (currentx + images_dim(i,2) + xspacer) > width <span class="comment">% start a new row</span>
- 0899 currentx = xspacer;
- 0900 currenty = currenty + imageheight + yspacer;
- 0901 positions(i,:) = [currenty currentx];
- 0902 currentx = currentx + images_dim(i,2) + xspacer;
- 0903 <span class="keyword">else</span>
- 0904 positions(i,:) = [currenty currentx];
- 0905 currentx = currentx + images_dim(i,2) + xspacer;
- 0906 <span class="keyword">end</span>
- 0907 <span class="comment">%positions(i,:) = [currenty currentx];</span>
- 0908 <span class="keyword">end</span>
- 0909
- 0910 <span class="comment">% function image_matrix = place_images_into(image_matrix, image_list, position_list)</span>
- 0911 <span class="comment">% % Place images into a matrix</span>
- 0912 <span class="comment">% number_images = length(image_list);</span>
- 0913 <span class="comment">%</span>
- 0914 <span class="comment">% for i = 1:number_images</span>
- 0915 <span class="comment">% theimage = image_list{i};</span>
- 0916 <span class="comment">% image_matrix = copy_into(image_matrix, theimage, position_list(i,1), position_list(i,2));</span>
- 0917 <span class="comment">% end</span>
- 0918 <span class="comment">% ;</span>
- 0919
- 0920 <a name="_sub35" href="#_subfunctions" class="code">function image_dim = get_image_sizes(images)</a>
- 0921 <span class="comment">% Returns an array of image sizes</span>
- 0922 number_images = length(images);
- 0923 image_dim = zeros(number_images,2);
- 0924 <span class="keyword">for</span> i = 1:number_images
- 0925 image_dim(i,:) = size(images{i});
- 0926 <span class="keyword">end</span>
- 0927 ;
- 0928
- 0929 <a name="_sub36" href="#_subfunctions" class="code">function image_matrix = place_images_into(image_matrix, image_list, position_list)</a>
- 0930 <span class="comment">% Place images into a matrix</span>
- 0931 number_images = length(image_list);
- 0932
- 0933 <span class="keyword">for</span> i = 1:number_images
- 0934 theimage = image_list{i};
- 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));
- 0936 <span class="keyword">end</span>
- 0937 ;
- 0938
- 0939 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
- 0940 <span class="comment">% Functions for manipulating and plotting spectra icons %</span>
- 0941 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
- 0942
- 0943 <a name="_sub37" href="#_subfunctions" class="code">function IconList=get_SpecIcons(handles)</a>
- 0944 IconList = {};
- 0945 status = 0;
- 0946 <span class="keyword">for</span> i = 1:handles.nsegments
- 0947 load(<span class="string">'-mat'</span>,handles.segments(i).specfilename);
- 0948 IconList{i} = iconS;
- 0949 <span class="keyword">end</span>
- 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>
- 0951
- 0952
- 0953 <a name="_sub38" href="#_subfunctions" class="code">function handles = plot_classified_axes(handles, image_list, position_list)</a>
- 0954 <span class="comment">% Low level drawing of the classified axes</span>
- 0955 handles.blank = logical(0);
- 0956 handles.classmatrix = uint8(zeros(handles.classified_height,handles.classified_width));
- 0957 axes(handles.ClassifiedAxes);
- 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);
- 0959 set(handles.ClassifiedAxes,<span class="string">'XTick'</span>,[]);
- 0960 set(handles.ClassifiedAxes,<span class="string">'YTick'</span>,[]);
- 0961 handles.max_width = length(handles.classmatrix(1,:));
- 0962
- 0963 <span class="keyword">if</span> handles.max_width > handles.classified_width
- 0964 set(handles.SliderClassified,<span class="string">'Min'</span>,0);
- 0965 set(handles.SliderClassified,<span class="string">'Max'</span>,handles.max_width - handles.classified_width);
- 0966 set(handles.SliderClassified,<span class="string">'enable'</span>,<span class="string">'on'</span>);
- 0967 handles.endx = handles.classified_width;
- 0968 <span class="keyword">else</span>
- 0969 set(handles.SliderClassified,<span class="string">'enable'</span>,<span class="string">'off'</span>)
- 0970 handles.startx = 1;
- 0971 handles.endx = handles.classified_width;
- 0972 <span class="keyword">end</span>
- 0973
- 0974 classview = handles.classmatrix(:,handles.startx:handles.endx); <span class="comment">% will cut overhang</span>
- 0975 handles.hiclass = image(classview);
- 0976 set(handles.hiclass,<span class="string">'ButtonDownFcn'</span>,{@<a href="#_sub57" class="code" title="subfunction ClassifyAxesClickCallBack(src,eventdata)">ClassifyAxesClickCallBack</a>});
- 0977 set(handles.ClassifiedAxes,<span class="string">'XTick'</span>,[]);
- 0978 set(handles.ClassifiedAxes,<span class="string">'YTick'</span>,[]);
- 0979
- 0980 <a href="#_sub55" class="code" title="subfunction setrowbuttons(handles)">setrowbuttons</a>(handles);
- 0981
- 0982 <a name="_sub39" href="#_subfunctions" class="code">function handles = reposition_images(handles, image_list)</a>
- 0983 <span class="comment">% this is a lower level function which is called to reposition the images.</span>
- 0984 <span class="comment">% this would be called from higher level functions when images are added,</span>
- 0985 <span class="comment">% deleted, or a new list of images needs to be loaded.</span>
- 0986
- 0987 <span class="comment">% initialize the handles for the images</span>
- 0988 handles.nimages = length(image_list);
- 0989 handles.images_dim = <a href="#_sub35" class="code" title="subfunction image_dim = get_image_sizes(images)">get_image_sizes</a>(image_list);
- 0990
- 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);
- 0992 handles.cnrows = length(unique(handles.positions(:,1)));
- 0993
- 0994 <span class="comment">% Setup the first page view</span>
- 0995 handles.number_rows = floor(handles.classified_height / (handles.ispecheight + handles.yspacer));
- 0996 handles.startpage = 1;
- 0997 handles.endpage = 0;
- 0998
- 0999 <span class="keyword">for</span> i = 1 : handles.number_rows
- 1000 handles.endpage = <a href="#_sub43" class="code" title="subfunction cposition = next_row_end(positions,cposition)">next_row_end</a>(handles.positions,handles.endpage);
- 1001 <span class="keyword">end</span>
- 1002
- 1003 <span class="comment">%guidata(gcbo,handles);</span>
- 1004 ;
- 1005
- 1006 <a name="_sub40" href="#_subfunctions" class="code">function nrow = which_row(positions,index)</a>
- 1007
- 1008 nrow = 1;
- 1009 i = 2;
- 1010 <span class="keyword">while</span> i <= index
- 1011 <span class="keyword">if</span> not(positions(i,1) == positions(i-1,1))
- 1012 nrow = nrow + 1;
- 1013 <span class="keyword">end</span>
- 1014 i = i + 1;
- 1015 <span class="keyword">end</span>
- 1016
- 1017 <a name="_sub41" href="#_subfunctions" class="code">function cpositions = get_curr_position(handles)</a>
- 1018 <span class="comment">% Setups the current view of the positions</span>
- 1019 cpositions = handles.positions(handles.startpage:handles.endpage,:); <span class="comment">% get the current view</span>
- 1020 cpositions(:,1) = cpositions(:,1) - cpositions(1,1) + handles.yspacer;
- 1021 cpositions(:,2) = cpositions(:,2) - (handles.startx - 1);
- 1022 ;
- 1023
- 1024 <a name="_sub42" href="#_subfunctions" class="code">function cposition = next_row_start(positions,cposition)</a>
- 1025 <span class="comment">% Computes the position of the next row if the row based on the positions matrix</span>
- 1026 <span class="comment">% it computes the position where the row starts</span>
- 1027 npos = length(positions);
- 1028 i = cposition;
- 1029 <span class="keyword">while</span> (i <= npos) && positions(i,1) == positions(cposition,1)
- 1030 i = i + 1;
- 1031 <span class="keyword">end</span>
- 1032 <span class="keyword">if</span> i < npos <span class="comment">% make sure the row numbers match</span>
- 1033 cposition = i;
- 1034 <span class="keyword">end</span>
- 1035 ;
- 1036
- 1037 <a name="_sub43" href="#_subfunctions" class="code">function cposition = next_row_end(positions,cposition)</a>
- 1038 <span class="comment">% Computes the position of the next row if the row based on the positions matrix</span>
- 1039 <span class="comment">% it computes the last position before a new row starts</span>
- 1040 npos = length(positions(:,1));
- 1041 <span class="keyword">if</span> cposition < npos <span class="comment">% not at the last row</span>
- 1042 i = cposition + 1;
- 1043 <span class="keyword">while</span> (i < npos) && (positions(i,1) == positions(cposition+1,1))
- 1044 i = i + 1;
- 1045 <span class="keyword">end</span>
- 1046 <span class="keyword">if</span> (positions(cposition + 1) == positions(npos))
- 1047 cposition = npos; <span class="comment">% handle the condition that you are now at the last row</span>
- 1048 <span class="keyword">else</span>
- 1049 cposition = i - 1; <span class="comment">% make sure the row numbers match</span>
- 1050 <span class="keyword">end</span>
- 1051 <span class="keyword">else</span> <span class="comment">% handles the condition you are already at the last row</span>
- 1052 cposition = npos;
- 1053 <span class="keyword">end</span>
- 1054 ;
- 1055
- 1056
- 1057 <a name="_sub44" href="#_subfunctions" class="code">function handles = row_forward(handles)</a>
- 1058 <span class="comment">% Moves the row forward in the classifiedaxes/browser view</span>
- 1059 startpage = <a href="#_sub42" class="code" title="subfunction cposition = next_row_start(positions,cposition)">next_row_start</a>(handles.positions,handles.startpage);
- 1060 endpage = <a href="#_sub43" class="code" title="subfunction cposition = next_row_end(positions,cposition)">next_row_end</a>(handles.positions,handles.endpage);
- 1061
- 1062 <span class="keyword">if</span> not(endpage == handles.endpage) <span class="comment">% indicates you are not at the last page</span>
- 1063 handles.startpage = startpage;
- 1064 handles.endpage = endpage;
- 1065 <span class="keyword">end</span>
- 1066 <span class="comment">% guidata(gcbo,handles);</span>
- 1067 ;
- 1068
- 1069 <a name="_sub45" href="#_subfunctions" class="code">function cposition = previous_row_start(positions,cposition)</a>
- 1070 <span class="comment">% Computes the position of the previous row if the row based on the positions matrix</span>
- 1071 <span class="comment">% it computes the position where the row starts</span>
- 1072 npos = length(positions(:,1));
- 1073 <span class="keyword">if</span> cposition > 1
- 1074 i = cposition - 1;
- 1075 <span class="keyword">while</span> (i > 1) && (positions(i,1) == positions(cposition-1,1))
- 1076 i = i - 1;
- 1077 <span class="keyword">end</span>
- 1078 <span class="keyword">if</span> (i > 1) && (cposition ~= 2)
- 1079 cposition = i + 1;
- 1080 <span class="keyword">else</span>
- 1081 cposition = 1;
- 1082 <span class="keyword">end</span>
- 1083 <span class="keyword">else</span>
- 1084 cposition = 1; <span class="comment">% in case things get missed up and neg index</span>
- 1085 <span class="keyword">end</span>
- 1086 ;
- 1087
- 1088 <a name="_sub46" href="#_subfunctions" class="code">function cposition = previous_row_end(positions,cposition)</a>
- 1089 npos = length(positions(:,1));
- 1090
- 1091 <span class="keyword">if</span> cposition > 1
- 1092 i = cposition;
- 1093 <span class="keyword">while</span> (i > 1) && (positions(i,1) == positions(cposition,1))
- 1094 i = i - 1;
- 1095 <span class="keyword">end</span>
- 1096 <span class="keyword">if</span> i > 1;
- 1097 cposition = i;
- 1098 <span class="keyword">else</span>
- 1099 cposition = 1;
- 1100 <span class="keyword">end</span>
- 1101 <span class="keyword">else</span>
- 1102 cposition = 1;
- 1103 <span class="keyword">end</span>
- 1104 ;
- 1105
- 1106 <a name="_sub47" href="#_subfunctions" class="code">function nrows = number_of_rows(handles)</a>
- 1107 <span class="comment">% Computes the number of rows in the current view</span>
- 1108 nrows = length(unique(handles.positions(handles.startpage:handles.endpage,1)));
- 1109
- 1110 <a name="_sub48" href="#_subfunctions" class="code">function handles = row_backward(handles)</a>
- 1111 <span class="comment">% Moves the row backwards in the classifiedaxes/browser view</span>
- 1112 startpage = <a href="#_sub45" class="code" title="subfunction cposition = previous_row_start(positions,cposition)">previous_row_start</a>(handles.positions,handles.startpage);
- 1113 endpage = <a href="#_sub46" class="code" title="subfunction cposition = previous_row_end(positions,cposition)">previous_row_end</a>(handles.positions,handles.endpage);
- 1114
- 1115 <span class="keyword">if</span> <a href="#_sub47" class="code" title="subfunction nrows = number_of_rows(handles)">number_of_rows</a>(handles) < handles.number_rows <span class="comment">% indicates you are not at the last page</span>
- 1116 handles.startpage = startpage;
- 1117 handles.endpage = length(handles.positions(:,1));
- 1118 <span class="keyword">elseif</span> handles.startpage == 1;
- 1119 handles.startpage = 1;
- 1120 handles.endpage = handles.endpage;
- 1121 <span class="keyword">else</span>
- 1122 handles.startpage = startpage;
- 1123 handles.endpage = endpage;
- 1124 <span class="keyword">end</span>
- 1125 <span class="comment">% guidata(gcbo,handles);</span>
- 1126 ;
- 1127
- 1128 <a name="_sub49" href="#_subfunctions" class="code">function handles = BrowseDirectory(handles)</a>
- 1129 <span class="comment">% This function should be called only after precompute has been called</span>
- 1130 <span class="comment">% it relies on their being a specicon file in the directory</span>
- 1131 <span class="comment">%</span>
- 1132 <span class="comment">% The function takes the current segments in the directory and loads their specicons</span>
- 1133 <span class="comment">% into memory because the segments and icons are created in their order the</span>
- 1134 <span class="comment">% order matches. This will need to be worked out better for the</span>
- 1135 <span class="comment">% classification algorithms.</span>
- 1136
- 1137 <span class="comment">%load('-mat', 'specicons');</span>
- 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>]);
- 1139 handles.mapindex = [1:handles.nsegments];
- 1140 handles.image_list = handles.IconList;
- 1141 handles = <a href="#_sub39" class="code" title="subfunction handles = reposition_images(handles, image_list)">reposition_images</a>(handles, handles.image_list);
- 1142 handles.cpositions = <a href="#_sub41" class="code" title="subfunction cpositions = get_curr_position(handles)">get_curr_position</a>(handles);
- 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);
- 1144 handles.mode=<span class="string">'browse'</span>;
- 1145
- 1146 <span class="comment">%guidata(gcbo,handles);</span>
- 1147
- 1148
- 1149 <span class="comment">% --- Executes on button press in NextRowButton.</span>
- 1150 <a name="_sub50" href="#_subfunctions" class="code">function NextRowButton_Callback(hObject, eventdata, handles)</a>
- 1151 <span class="comment">% hObject handle to NextRowButton (see GCBO)</span>
- 1152 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 1153 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 1154
- 1155 <span class="keyword">if</span> handles.cnrows > 1
- 1156 handles.startx = 1; <span class="comment">% if you have been scrolling reset to defaults</span>
- 1157 handles.endx = handles.classified_width;
- 1158 set(handles.SliderClassified, <span class="string">'Value'</span>,0);
- 1159 handles = <a href="#_sub44" class="code" title="subfunction handles = row_forward(handles)">row_forward</a>(handles);
- 1160 handles.cpositions = <a href="#_sub41" class="code" title="subfunction cpositions = get_curr_position(handles)">get_curr_position</a>(handles);
- 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);
- 1162 <span class="keyword">end</span>
- 1163 guidata(gcbo,handles);
- 1164
- 1165 <span class="comment">% --- Executes on button press in PreviousRowButton.</span>
- 1166 <a name="_sub51" href="#_subfunctions" class="code">function PreviousRowButton_Callback(hObject, eventdata, handles)</a>
- 1167 <span class="comment">% hObject handle to PreviousRowButton (see GCBO)</span>
- 1168 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 1169 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 1170
- 1171 <span class="keyword">if</span> handles.cnrows > 1
- 1172 handles.startx = 1;
- 1173 handles.endx = handles.classified_width;
- 1174 set(handles.SliderClassified, <span class="string">'Value'</span>,0);
- 1175 handles = <a href="#_sub48" class="code" title="subfunction handles = row_backward(handles)">row_backward</a>(handles);
- 1176 handles.cpositions = <a href="#_sub41" class="code" title="subfunction cpositions = get_curr_position(handles)">get_curr_position</a>(handles);
- 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);
- 1178 <span class="keyword">end</span>
- 1179 guidata(gcbo,handles);
- 1180
- 1181 <span class="comment">% --- Executes on button press in LoadDirectoryButton.</span>
- 1182 <a name="_sub52" href="#_subfunctions" class="code">function LoadDirectoryButton_Callback(hObject, eventdata, handles)</a>
- 1183 <span class="comment">% hObject handle to LoadDirectoryButton (see GCBO)</span>
- 1184 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 1185 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 1186
- 1187 <span class="comment">%directoryname = uigetdir('./','Change directory');</span>
- 1188
- 1189 directoryname = uigetdir;
- 1190
- 1191 <span class="keyword">if</span> not(directoryname == 0)
- 1192 handles.directory = directoryname;
- 1193 set(handles.DirectoryEditBox, <span class="string">'String'</span>,directoryname);
- 1194 cd(handles.directory); <span class="comment">% this we will need to change</span>
- 1195 <span class="keyword">end</span>
- 1196 guidata(gcbo,handles);
- 1197 ;
- 1198
- 1199 <a name="_sub53" href="#_subfunctions" class="code">function im_index = coordinate2index(handles,xpos,ypos)</a>
- 1200 <span class="comment">% For the current images displayed tests if pointer position is in an image</span>
- 1201 <span class="comment">% returns the index for that image based on a left to right ordering on</span>
- 1202 <span class="comment">% that page</span>
- 1203 <span class="comment">% First check if the coordinate is totally out of the range</span>
- 1204 <span class="keyword">if</span> (xpos < 0) || (ypos < 0) || (ypos > handles.classified_height) || (xpos > handles.classified_width)
- 1205 im_index = 0;
- 1206 <span class="keyword">else</span>
- 1207 im_index = 0;
- 1208 npos = length(handles.cpositions(:,1));
- 1209 i = 1;
- 1210 <span class="keyword">while</span> (i <= npos) && (im_index < 1)
- 1211 <span class="keyword">if</span> (xpos >= handles.cpositions(i,2)) && (xpos <= (handles.cpositions(i,2) + handles.images_dim(handles.startpage + (i-1), 2)))
- 1212 <span class="keyword">if</span> (ypos >= handles.cpositions(i,1)) && (ypos <= (handles.cpositions(i,1) + handles.images_dim(handles.startpage + (i-1),1)))
- 1213 im_index = i;
- 1214 <span class="keyword">end</span>
- 1215 <span class="keyword">end</span>
- 1216 i = i+1;
- 1217 <span class="keyword">end</span>
- 1218 <span class="keyword">end</span>
- 1219 ;
- 1220
- 1221 <a name="_sub54" href="#_subfunctions" class="code">function setnavigationbuttons(handles)</a>
- 1222 <span class="comment">% Sets the navigation buttons based on where the pointer is</span>
- 1223
- 1224 <span class="keyword">if</span> not(handles.quickmode)
- 1225
- 1226 <span class="keyword">if</span> handles.NextIndex == handles.nsegments
- 1227 set(handles.PreviousSpectraButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 1228 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 1229 <span class="keyword">elseif</span> handles.NextIndex == handles.nsegments
- 1230 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 1231 set(handles.PreviousSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 1232 <span class="keyword">elseif</span> handles.NextIndex == 1
- 1233 set(handles.PreviousSpectraButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 1234 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 1235 <span class="keyword">elseif</span> (handles.NextIndex > 1) && (handles.NextIndex < handles.nsegments)
- 1236 set(handles.PreviousSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 1237 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 1238
- 1239 <span class="keyword">end</span>
- 1240
- 1241 <span class="keyword">end</span>
- 1242
- 1243 <a name="_sub55" href="#_subfunctions" class="code">function setrowbuttons(handles)</a>
- 1244
- 1245 <span class="keyword">if</span> handles.startpage == 1
- 1246 set(handles.PreviousRowButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 1247 <span class="keyword">elseif</span> handles.startpage > 1
- 1248 set(handles.PreviousRowButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 1249 <span class="keyword">end</span>
- 1250
- 1251 <span class="keyword">if</span> handles.endpage == length(handles.positions) <span class="comment">% You are the last row</span>
- 1252 set(handles.NextRowButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 1253 <span class="keyword">elseif</span> handles.cnrows <= handles.number_rows
- 1254 set(handles.NextRowButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 1255 <span class="keyword">elseif</span> handles.endpage < length(handles.positions)
- 1256 set(handles.NextRowButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 1257 <span class="keyword">end</span>
- 1258
- 1259 <a name="_sub56" href="#_subfunctions" class="code">function DummyClassifyAxesClickCallBack(src,eventdata,handles)</a>
- 1260 <span class="comment">% When the image is blank this allow you to select out of the class view</span>
- 1261 set(handles.ClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 1262 set(handles.NewClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 1263 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 1264 set(handles.PreviousSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 1265 set(handles.ModePopupMenu,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 1266 set(handles.AutoClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 1267 set(handles.QuickModeButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 1268 set(handles.CompareToggleButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 1269 handles.submode = <span class="string">'select'</span>;
- 1270 <a href="#_sub54" class="code" title="subfunction setnavigationbuttons(handles)">setnavigationbuttons</a>(handles);
- 1271 guidata(gcbo,handles);
- 1272
- 1273
- 1274 <a name="_sub57" href="#_subfunctions" class="code">function ClassifyAxesClickCallBack(src,eventdata)</a>
- 1275 <span class="comment">% A Function for handling clicks to the axes</span>
- 1276 handles = guidata(gcbo);
- 1277 <span class="comment">% handles.mode</span>
- 1278 <span class="comment">%handles.submode</span>
- 1279 <span class="comment">%fprintf('\n');</span>
- 1280
- 1281 pos = get(handles.ClassifiedAxes,<span class="string">'CurrentPoint'</span>);
- 1282 cposition = <a href="#_sub53" class="code" title="subfunction im_index = coordinate2index(handles,xpos,ypos)">coordinate2index</a>(handles,pos(1,1),pos(1,2));
- 1283
- 1284 <span class="keyword">if</span> handles.quickmode
- 1285 <span class="keyword">if</span> cposition == 0 <span class="comment">% Selecting in the outside takes you out of classification mode</span>
- 1286 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles,<span class="string">''</span>);
- 1287 <span class="keyword">else</span> <span class="comment">% You have selected an icon</span>
- 1288 handles.startx = 1; <span class="comment">% if you have been scrolling reset to defaults</span>
- 1289 handles.endx = handles.classified_width;
- 1290 set(handles.SliderClassified,<span class="string">'Value'</span>,0);
- 1291 class = handles.classes(handles.mapindex(cposition + (handles.startpage - 1)));
- 1292 handles.segments(handles.NextIndex).class = class.name;
- 1293 handles.classes(handles.mapindex(cposition + (handles.startpage - 1))).nmembers = handles.classes(handles.mapindex(cposition + (handles.startpage - 1))).nmembers + 1;
- 1294 handles = <a href="#_sub85" class="code" title="subfunction handles=jump_to_unclassified(handles)">jump_to_unclassified</a>(handles);
- 1295 handles = <a href="#_sub58" class="code" title="subfunction handles = configureclassview(handles,submode)">configureclassview</a>(handles,<span class="string">'select-class'</span>);
- 1296 <span class="keyword">if</span> handles.lastsegment == handles.NextIndex <span class="comment">% no more unclassified segments</span>
- 1297 handles = <a href="#_sub83" class="code" title="subfunction handles = quick_mode_exit(handles)">quick_mode_exit</a>(handles);
- 1298 set(handles.QuickModeButton,<span class="string">'Value'</span>,0);
- 1299 handles.quickmode = not(handles.quickmode);
- 1300 <span class="keyword">end</span>
- 1301 <span class="keyword">end</span>
- 1302 <span class="keyword">else</span> <span class="comment">% quick classify mode is off</span>
- 1303
- 1304
- 1305 <span class="keyword">if</span> strcmp(handles.mode,<span class="string">'browse'</span>) && (cposition > 0)
- 1306 handles.NextIndex = handles.mapindex((cposition - 1) + handles.startpage);
- 1307 handles=<a href="#_sub13" class="code" title="subfunction handles=ConfigureClassSegment(handles)">ConfigureClassSegment</a>(handles);
- 1308 handles=<a href="#_sub24" class="code" title="subfunction handles=ConfigureSpecPlot(handles)">ConfigureSpecPlot</a>(handles);
- 1309 <span class="keyword">else</span>
- 1310 <span class="comment">%fprintf('%i\n', coordinate2index(handles,pos(1,1),pos(1,2)));</span>
- 1311 <span class="comment">%fprintf('%i, %i\n\n', pos(1,1),pos(1,2));</span>
- 1312 ;
- 1313 <span class="keyword">end</span>
- 1314
- 1315 <span class="keyword">if</span> strcmp(<span class="string">'class-members'</span>,handles.mode) && strcmp(<span class="string">'select'</span>,handles.submode) && (cposition > 0)
- 1316 handles.NextIndex = handles.mapindex((cposition - 1) + handles.startpage);
- 1317 handles=<a href="#_sub13" class="code" title="subfunction handles=ConfigureClassSegment(handles)">ConfigureClassSegment</a>(handles);
- 1318 handles=<a href="#_sub24" class="code" title="subfunction handles=ConfigureSpecPlot(handles)">ConfigureSpecPlot</a>(handles);
- 1319 <span class="keyword">end</span>
- 1320
- 1321 <span class="comment">%Show all members of a specific class</span>
- 1322 <span class="keyword">if</span> strcmp(<span class="string">'class-view'</span>,handles.mode) && strcmp(<span class="string">'select'</span>,handles.submode) && (cposition > 0)
- 1323 handles.startx = 1; <span class="comment">% if you have been scrolling reset to defaults</span>
- 1324 handles.endx = handles.classified_width;
- 1325 set(handles.SliderClassified,<span class="string">'Value'</span>,0);
- 1326 <span class="comment">% set(handles.CompareToggleButton,'Visible','off');</span>
- 1327 cindex = handles.mapindex(cposition + (handles.startpage - 1));
- 1328 class = handles.classes(cindex);
- 1329 handles.lastclass = cindex;
- 1330 handles = <a href="#_sub63" class="code" title="subfunction handles = configureclassmembers(handles,classname)">configureclassmembers</a>(handles,class.name);
- 1331 handles.mode = <span class="string">'class-members'</span>;
- 1332 handles.submode = <span class="string">'select'</span>;
- 1333 handles = <a href="#_sub59" class="code" title="subfunction handles = SetModePopupMenu(handles,viewstring)">SetModePopupMenu</a>(handles,<span class="string">'class members'</span>);
- 1334 set(handles.TypifyClassButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
- 1335 set(handles.RemoveClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 1336 set(handles.NextClassButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
- 1337 set(handles.RenameClassButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
- 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]);
- 1339 <span class="keyword">end</span>
- 1340
- 1341 <span class="keyword">if</span> strcmp(<span class="string">'class-view'</span>,handles.mode) && strcmp(<span class="string">'select-class'</span>,handles.submode)
- 1342 <span class="keyword">if</span> cposition == 0 <span class="comment">% Selecting in the outside takes you out of classification mode</span>
- 1343 set(handles.ClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 1344 set(handles.NewClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 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>]);
- 1346
- 1347 <span class="keyword">else</span> <span class="comment">% You have selected an icon</span>
- 1348 handles.startx = 1; <span class="comment">% if you have been scrolling reset to defaults</span>
- 1349 handles.endx = handles.classified_width;
- 1350 set(handles.SliderClassified,<span class="string">'Value'</span>,0);
- 1351 class = handles.classes(handles.mapindex(cposition + (handles.startpage - 1)));
- 1352 handles.segments(handles.NextIndex).class = class.name;
- 1353 handles.classes(handles.mapindex(cposition + (handles.startpage - 1))).nmembers = handles.classes(handles.mapindex(cposition + (handles.startpage - 1))).nmembers + 1;
- 1354 set(handles.ClassifyButton,<span class="string">'String'</span>,<span class="string">'Declassify'</span>);
- 1355 handles = <a href="#_sub59" class="code" title="subfunction handles = SetModePopupMenu(handles,viewstring)">SetModePopupMenu</a>(handles,<span class="string">'class members'</span>);
- 1356 handles = <a href="#_sub63" class="code" title="subfunction handles = configureclassmembers(handles,classname)">configureclassmembers</a>(handles,class.name);
- 1357 handles.mode = <span class="string">'class-members'</span>;
- 1358 handles.submode = <span class="string">'select'</span>;
- 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]);
- 1360 <span class="keyword">end</span>
- 1361 set(handles.CompareToggleButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 1362 set(handles.QuickModeButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 1363 set(handles.AutoClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 1364 set(handles.ClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 1365 set(handles.NewClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 1366 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 1367 set(handles.PreviousSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 1368 set(handles.ModePopupMenu,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 1369 set(handles.SortText,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 1370 set(handles.SortPopupMenu,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 1371 handles.submode = <span class="string">'select'</span>;
- 1372 <span class="keyword">end</span>
- 1373
- 1374 <span class="keyword">if</span> strcmp(handles.mode,<span class="string">'class-members'</span>) && strcmp(handles.submode,<span class="string">'typify'</span>)
- 1375 <span class="keyword">if</span> cposition == 0
- 1376 set(handles.TypifyClassButton, <span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 1377 <span class="keyword">else</span>
- 1378 handles.startx = 1; <span class="comment">% if you have been scrolling reset to defaults</span>
- 1379 handles.endx = handles.classified_width;
- 1380 set(handles.SliderClassified,<span class="string">'Value'</span>,0);
- 1381 sindex = handles.mapindex(cposition + (handles.startpage - 1));
- 1382 cindex = <a href="#_sub11" class="code" title="subfunction cindex = returnclassindex(handles,classname)">returnclassindex</a>(handles,handles.segments(sindex).class);
- 1383 handles.classes(cindex).specfilename = handles.segments(sindex).specfilename;
- 1384 handles.classes(cindex).length = handles.segments(sindex).end - handles.segments(sindex).start;
- 1385 handles.classes(cindex).index = sindex;
- 1386 <span class="comment">%load('-mat','specicons');</span>
- 1387 handles.classes(cindex).iconS = handles.IconList{sindex};
- 1388 handles.subclass = <span class="string">'xxx'</span>;
- 1389 set(handles.TypifyClassButton, <span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 1390 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles,<span class="string">''</span>);
- 1391 <span class="keyword">end</span>
- 1392 <span class="keyword">end</span>
- 1393
- 1394 <span class="keyword">if</span> strcmp(<span class="string">'class-view'</span>, handles.mode) && strcmp(<span class="string">'compare'</span>,handles.submode)
- 1395 <span class="keyword">if</span> cposition == 0
- 1396 handles.mode = <span class="string">'class-view'</span>;
- 1397 handles.submode = <span class="string">'select'</span>;
- 1398 set(handles.CompareToggleButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 1399 set(handles.RemoveClassButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 1400 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 1401 set(handles.PreviousSpectraButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 1402 <span class="comment">%set(handles.ModePopupMenu,'Enable','on');</span>
- 1403 <span class="keyword">else</span>
- 1404 handles.mode = <span class="string">'comparison'</span>;
- 1405 <span class="keyword">if</span> strcmp(handles.segments(handles.NextIndex).class,<span class="string">''</span>)
- 1406 set(handles.ClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 1407 <span class="keyword">end</span>
- 1408 handles.startx = 1; <span class="comment">% if you have been scrolling reset to defaults</span>
- 1409 handles.endx = handles.classified_width;
- 1410 set(handles.SliderClassified,<span class="string">'Value'</span>,0);
- 1411 cindex = handles.mapindex(cposition + (handles.startpage - 1));
- 1412 handles.image_list = {};
- 1413 handles.lastclass = cindex;
- 1414 handles.image_list{2} = handles.classes(cindex).iconS;
- 1415 <span class="comment">%load('-mat','specicons');</span>
- 1416 handles.image_list{1} = handles.IconList{handles.NextIndex};
- 1417
- 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]);
- 1419
- 1420 handles = <a href="#_sub39" class="code" title="subfunction handles = reposition_images(handles, image_list)">reposition_images</a>(handles, handles.image_list);
- 1421 handles.cpositions = <a href="#_sub41" class="code" title="subfunction cpositions = get_curr_position(handles)">get_curr_position</a>(handles);
- 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);
- 1423 handles.submode = <span class="string">'xxx'</span>;
- 1424 <span class="keyword">end</span>
- 1425 <span class="keyword">end</span>
- 1426
- 1427
- 1428 <span class="keyword">if</span> strcmp(handles.mode,<span class="string">'class-view'</span>) && strcmp(handles.submode,<span class="string">'remove-class'</span>)
- 1429 <span class="keyword">if</span> cposition == 0
- 1430 handles.submode = <span class="string">'select'</span>;
- 1431 set(handles.RemoveClassButton, <span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 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>]);
- 1433 <span class="keyword">else</span>
- 1434 cindex = handles.mapindex(cposition + (handles.startpage - 1));
- 1435 classname = handles.classes(cindex).name;
- 1436
- 1437 answer = questdlg([<span class="string">'Remove class '</span> classname]);
- 1438
- 1439 <span class="keyword">if</span> strcmp(answer,<span class="string">'Yes'</span>)
- 1440 handles.startx = 1; <span class="comment">% if you have been scrolling reset to defaults</span>
- 1441 handles.endx = handles.classified_width;
- 1442 set(handles.SliderClassified,<span class="string">'Value'</span>,0);
- 1443 <span class="keyword">for</span> i = 1:handles.nsegments
- 1444 <span class="keyword">if</span> strcmp(classname,handles.segments(i).class)
- 1445 handles.segments(i).class = <span class="string">''</span>;
- 1446 <span class="keyword">end</span>
- 1447 <span class="keyword">end</span>
- 1448
- 1449 <span class="keyword">if</span> handles.nclasses > 1
- 1450 handles.classes = [handles.classes(1:(cindex-1)) handles.classes((cindex+1):handles.nclasses)];
- 1451 handles.nclasses = handles.nclasses - 1;
- 1452 handles = <a href="#_sub58" class="code" title="subfunction handles = configureclassview(handles,submode)">configureclassview</a>(handles,<span class="string">'select'</span>);
- 1453
- 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>]);
- 1455 <span class="keyword">else</span>
- 1456 handles.classes = [];
- 1457 handles.nclasses = 0;
- 1458 handles.image_list = {};
- 1459 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles,<span class="string">''</span>);
- 1460 set(handles.RemoveClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 1461 handles.submode = <span class="string">'xxx'</span>;
- 1462 handles = <a href="#_sub14" class="code" title="subfunction handles = blankaxes(handles)">blankaxes</a>(handles);
- 1463 <span class="keyword">end</span>
- 1464
- 1465 <span class="keyword">if</span> strcmp(handles.segments(handles.NextIndex).class,<span class="string">''</span>)
- 1466 set(handles.ClassifyButton,<span class="string">'String'</span>,<span class="string">'Classify'</span>);
- 1467 <span class="keyword">end</span>
- 1468 set(handles.RemoveClassButton, <span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 1469 <span class="keyword">else</span>
- 1470 handles.submode = <span class="string">'select'</span>;
- 1471 set(handles.RemoveClassButton, <span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 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>]);
- 1473 <span class="keyword">end</span>
- 1474 <span class="keyword">end</span>
- 1475 <span class="keyword">end</span>
- 1476
- 1477 <span class="keyword">end</span>
- 1478
- 1479 <span class="keyword">if</span> not(strcmp(handles.mode,<span class="string">'comparison'</span>))
- 1480 <a href="#_sub54" class="code" title="subfunction setnavigationbuttons(handles)">setnavigationbuttons</a>(handles);
- 1481 <span class="keyword">end</span>
- 1482 <span class="comment">% handles.mode</span>
- 1483 <span class="comment">% handles.submode</span>
- 1484 guidata(gcf,handles);
- 1485
- 1486 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
- 1487 <span class="comment">% Functions for setting up the classview %</span>
- 1488 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
- 1489
- 1490 <a name="_sub58" href="#_subfunctions" class="code">function handles = configureclassview(handles,submode)</a>
- 1491 <span class="comment">% Configures the class-view for selecting classes</span>
- 1492 handles.mode = <span class="string">'class-view'</span>;
- 1493 handles.submode = submode;
- 1494 <span class="comment">% if not(handles.quickmode)</span>
- 1495 <span class="comment">% set_status(handles, ['Select a class']);</span>
- 1496 <span class="comment">% end</span>
- 1497 handles.mapindex = [1 : handles.nclasses];
- 1498
- 1499 <span class="keyword">if</span> strcmp(handles.sortclass, <span class="string">'popularity'</span>)
- 1500 handles.mapindex = <a href="#_sub8" class="code" title="subfunction mapindex = sortindexbypop(handles)">sortindexbypop</a>(handles);
- 1501 <span class="keyword">elseif</span> strcmp(handles.sortclass,<span class="string">'length'</span>);
- 1502 handles.mapindex = <a href="#_sub9" class="code" title="subfunction mapindex = sortindexbylength(handles)">sortindexbylength</a>(handles);
- 1503 <span class="keyword">else</span>
- 1504 handles.mapindex = [1 : handles.nclasses];
- 1505 <span class="keyword">end</span>
- 1506 handles = <a href="#_sub7" class="code" title="subfunction handles = cindex2imagelist(handles)">cindex2imagelist</a>(handles);
- 1507 handles = <a href="#_sub39" class="code" title="subfunction handles = reposition_images(handles, image_list)">reposition_images</a>(handles, handles.image_list);
- 1508
- 1509 <span class="keyword">if</span> (strcmp(handles.sortclass,<span class="string">'length'</span>) && strcmp(handles.submode,<span class="string">'select-class'</span>)) || (strcmp(handles.sortclass,<span class="string">'length'</span>) && strcmp(handles.submode,<span class="string">'compare'</span>))
- 1510 <span class="comment">% jump to the segment with the closest size match</span>
- 1511 i = 1;
- 1512 <span class="keyword">while</span> (i <= handles.nclasses) && (handles.classes(handles.mapindex(i)).length >= (handles.segments(handles.NextIndex).end - handles.segments(handles.NextIndex).start))
- 1513 i = i + 1;
- 1514 <span class="keyword">end</span>
- 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>
- 1516
- 1517 <span class="keyword">if</span> cnrow > handles.number_rows <span class="comment">% The closes size segment is not in view</span>
- 1518 <span class="keyword">for</span> i = 1:(cnrow - handles.number_rows) <span class="comment">% matching size row is last</span>
- 1519 handles = <a href="#_sub44" class="code" title="subfunction handles = row_forward(handles)">row_forward</a>(handles);
- 1520 <span class="keyword">end</span>
- 1521
- 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>
- 1523 nrows = floor(handles.number_rows / 2);
- 1524 <span class="keyword">for</span> i = 1:nrows
- 1525 handles = <a href="#_sub44" class="code" title="subfunction handles = row_forward(handles)">row_forward</a>(handles);
- 1526 <span class="keyword">end</span>
- 1527 <span class="keyword">end</span>
- 1528
- 1529
- 1530 <span class="keyword">end</span>
- 1531 <span class="keyword">end</span>
- 1532
- 1533 handles.cpositions = <a href="#_sub41" class="code" title="subfunction cpositions = get_curr_position(handles)">get_curr_position</a>(handles);
- 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);
- 1535 <span class="comment">%guidata(gcbo,handles);</span>
- 1536 ;
- 1537
- 1538 <a name="_sub59" href="#_subfunctions" class="code">function handles = SetModePopupMenu(handles,viewstring)</a>
- 1539 popmodes = get(handles.ModePopupMenu,<span class="string">'String'</span>);
- 1540
- 1541 find_index = 0;
- 1542 i = 1;
- 1543 <span class="keyword">while</span> (i <= length(popmodes)) && not(strcmp(popmodes(i),viewstring))
- 1544 i = i + 1;
- 1545 <span class="keyword">end</span>
- 1546
- 1547 <span class="keyword">if</span> i <= length(popmodes) <span class="comment">% Don't do anything if the string cannot be found</span>
- 1548 set(handles.ModePopupMenu,<span class="string">'Value'</span>,[i]);
- 1549 <span class="keyword">end</span>
- 1550
- 1551 <span class="comment">% --- Executes on selection change in ModePopupMenu.</span>
- 1552 <a name="_sub60" href="#_subfunctions" class="code">function ModePopupMenu_Callback(hObject, eventdata, handles)</a>
- 1553 <span class="comment">% Configure call back</span>
- 1554 <span class="comment">% hObject handle to ModePopupMenu (see GCBO)</span>
- 1555 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 1556 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 1557
- 1558 <span class="comment">% Hints: contents = get(hObject,'String') returns ModePopupMenu contents as cell array</span>
- 1559 <span class="comment">% contents{get(hObject,'Value')} returns selected item from ModePopupMenu</span>
- 1560
- 1561 handles.startx = 1; <span class="comment">% if you have been scrolling reset to defaults</span>
- 1562 handles.endx = handles.classified_width;
- 1563 set(handles.SliderClassified,<span class="string">'Value'</span>,0);
- 1564 <span class="comment">%set(handles.CompareToggleButton,'Visible','off');</span>
- 1565 set(handles.RenameClassButton, <span class="string">'Visible'</span>, <span class="string">'off'</span>);
- 1566
- 1567 nmode = get(hObject,<span class="string">'Value'</span>);
- 1568 modeview = get(hObject,<span class="string">'String'</span>);
- 1569
- 1570
- 1571 <span class="keyword">if</span> strcmp(modeview(nmode),<span class="string">'all'</span>)
- 1572 handles.mode = <span class="string">'browse'</span>;
- 1573 handles.submode = <span class="string">'select'</span>;
- 1574 handles=<a href="#_sub49" class="code" title="subfunction handles = BrowseDirectory(handles)">BrowseDirectory</a>(handles);
- 1575 set(handles.RemoveClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 1576 set(handles.TypifyClassButton, <span class="string">'Visible'</span>, <span class="string">'off'</span>);
- 1577 set(handles.NextClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 1578
- 1579 <span class="keyword">elseif</span> strcmp(modeview(nmode),<span class="string">'class view'</span>)
- 1580 set(handles.NextClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 1581 <span class="keyword">if</span> handles.nclasses >= 1
- 1582 handles = <a href="#_sub58" class="code" title="subfunction handles = configureclassview(handles,submode)">configureclassview</a>(handles,<span class="string">'select'</span>);
- 1583 handles.mode = <span class="string">'class-view'</span>;
- 1584 handles.submode = <span class="string">'select'</span>;
- 1585 set(handles.RemoveClassButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
- 1586 set(handles.RemoveClassButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 1587 set(handles.CompareToggleButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
- 1588 set(handles.CompareToggleButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 1589 set(handles.TypifyClassButton, <span class="string">'Visible'</span>, <span class="string">'off'</span>);
- 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>])
- 1591 <span class="keyword">else</span> <span class="comment">% empty axes</span>
- 1592 handles = <a href="#_sub14" class="code" title="subfunction handles = blankaxes(handles)">blankaxes</a>(handles);
- 1593 handles.mode = <span class="string">'class-view'</span>;
- 1594 handles.submode = <span class="string">'xxx'</span>;
- 1595 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles,<span class="string">''</span>);
- 1596 <span class="keyword">end</span>
- 1597 <span class="keyword">elseif</span> strcmp(modeview(nmode),<span class="string">'unclassified'</span>) || (strcmp(handles.segments(handles.NextIndex).class,<span class="string">''</span>) && strcmp(modeview(nmode),<span class="string">'class members'</span>))
- 1598 handles = <a href="#_sub63" class="code" title="subfunction handles = configureclassmembers(handles,classname)">configureclassmembers</a>(handles,<span class="string">''</span>);
- 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>]);
- 1600 handles = <a href="#_sub59" class="code" title="subfunction handles = SetModePopupMenu(handles,viewstring)">SetModePopupMenu</a>(handles,<span class="string">'unclassified'</span>);
- 1601 handles.mode = <span class="string">'browse'</span>;
- 1602 handles.submode = <span class="string">'select'</span>;
- 1603 set(handles.RemoveClassButton, <span class="string">'Visible'</span>, <span class="string">'off'</span>);
- 1604 set(handles.TypifyClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 1605 set(handles.NextClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 1606 <span class="keyword">elseif</span> strcmp(modeview(nmode),<span class="string">'class members'</span>)
- 1607 handles = <a href="#_sub63" class="code" title="subfunction handles = configureclassmembers(handles,classname)">configureclassmembers</a>(handles,handles.segments(handles.NextIndex).class);
- 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]);
- 1609 handles.mode = <span class="string">'class-members'</span>;
- 1610 handles.submode = <span class="string">'select'</span>;
- 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);
- 1612 set(handles.TypifyClassButton,<span class="string">'Visible'</span>, <span class="string">'on'</span>);
- 1613 set(handles.RemoveClassButton, <span class="string">'Visible'</span>, <span class="string">'off'</span>);
- 1614 set(handles.RenameClassButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
- 1615 set(handles.NextClassButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
- 1616 <span class="keyword">end</span>
- 1617 guidata(gcbo,handles);
- 1618
- 1619 <span class="comment">% --- Executes during object creation, after setting all properties.</span>
- 1620 <a name="_sub61" href="#_subfunctions" class="code">function ModePopupMenu_CreateFcn(hObject, eventdata, handles)</a>
- 1621 <span class="comment">% hObject handle to ModePopupMenu (see GCBO)</span>
- 1622 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 1623 <span class="comment">% handles empty - handles not created until after all CreateFcns called</span>
- 1624
- 1625 <span class="comment">% Hint: popupmenu controls usually have a white background on Windows.</span>
- 1626 <span class="comment">% See ISPC and COMPUTER.</span>
- 1627 <span class="keyword">if</span> ispc
- 1628 set(hObject,<span class="string">'BackgroundColor'</span>,<span class="string">'white'</span>);
- 1629 <span class="keyword">else</span>
- 1630 set(hObject,<span class="string">'BackgroundColor'</span>,get(0,<span class="string">'defaultUicontrolBackgroundColor'</span>));
- 1631 <span class="keyword">end</span>
- 1632
- 1633 <a name="_sub62" href="#_subfunctions" class="code">function set_status(handles, statusstring)</a>
- 1634 set(handles.SegInfoText,<span class="string">'String'</span>,statusstring);
- 1635 set(handles.SegInfoText,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
- 1636 ;
- 1637
- 1638 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
- 1639 <span class="comment">% Functions for filtering by class type %</span>
- 1640 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
- 1641
- 1642 <a name="_sub63" href="#_subfunctions" class="code">function handles = configureclassmembers(handles,classname)</a>
- 1643
- 1644 handles.mapindex = <a href="#_sub64" class="code" title="subfunction indexfilter = select_class(handles,segments,classname)">select_class</a>(handles,handles.segments,classname);
- 1645
- 1646 <span class="keyword">if</span> length(handles.mapindex) > 0
- 1647 handles.image_list = {};
- 1648 <span class="comment">%load('-mat','specicons');</span>
- 1649
- 1650 <span class="keyword">for</span> i = 1:length(handles.mapindex)
- 1651 handles.image_list(i) = handles.IconList(handles.mapindex(i));
- 1652 <span class="keyword">end</span>
- 1653 handles = <a href="#_sub39" class="code" title="subfunction handles = reposition_images(handles, image_list)">reposition_images</a>(handles, handles.image_list);
- 1654 handles.cpositions = <a href="#_sub41" class="code" title="subfunction cpositions = get_curr_position(handles)">get_curr_position</a>(handles);
- 1655 <span class="comment">%</span>
- 1656 <span class="comment">%handles.mode = 'class-members';</span>
- 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);
- 1658 <span class="comment">%handles = SetModePopupMenu(handles,'class members');</span>
- 1659 <span class="keyword">else</span>
- 1660 handles = <a href="#_sub14" class="code" title="subfunction handles = blankaxes(handles)">blankaxes</a>(handles);
- 1661 <span class="comment">%handles.mode = 'class-view';</span>
- 1662 <span class="comment">%handles.submode = 'select';</span>
- 1663 <a href="#_sub62" class="code" title="subfunction set_status(handles, statusstring)">set_status</a>(handles,<span class="string">''</span>);
- 1664 <span class="keyword">end</span>
- 1665 ;
- 1666
- 1667 <a name="_sub64" href="#_subfunctions" class="code">function indexfilter = select_class(handles,segments,classname)</a>
- 1668 <span class="comment">% Returns an index array of original addresses of segments which are members of a</span>
- 1669 <span class="comment">% specified class</span>
- 1670 indexfilter = [];
- 1671 nclassmembers = 0;
- 1672 <span class="keyword">for</span> i = 1:handles.nsegments
- 1673 <span class="keyword">if</span> strcmp(segments(i).class,classname)
- 1674 nclassmembers = nclassmembers + 1;
- 1675 indexfilter(nclassmembers) = i;
- 1676 <span class="keyword">end</span>
- 1677 <span class="keyword">end</span>
- 1678
- 1679 <a name="_sub65" href="#_subfunctions" class="code">function cindex = get_class_index(handles,classname);</a>
- 1680 cindex = 0;
- 1681 i = 1;
- 1682 <span class="keyword">while</span> (i <= handles.nclasses) && not(strcmp(handles.classes(i).name,classname))
- 1683 i = i + 1;
- 1684 <span class="keyword">end</span>
- 1685 cindex = i;
- 1686
- 1687 <a name="_sub66" href="#_subfunctions" class="code">function value = mapind(index)</a>
- 1688 <span class="comment">% Map the index value back to its original value</span>
- 1689 value = handles.mapindex(index);
- 1690
- 1691 <span class="comment">%%&& not(strcmp(segments(i).class,''));</span>
- 1692 <a name="_sub67" href="#_subfunctions" class="code">function write_syllable_database(handles)</a>
- 1693 filename = [handles.baseclassname <span class="string">'.dat'</span>];
- 1694 fid = fopen(filename,<span class="string">'wt'</span>);
- 1695
- 1696 classes = handles.classes;
- 1697
- 1698 <span class="keyword">if</span> fid > -1
- 1699 <span class="keyword">for</span> i = 1:handles.nsegments
- 1700 segment = handles.segments(i);
- 1701 wavfile = segment.wavfile;
- 1702 specfilename = segment.specfilename;
- 1703 seg = [ num2str(segment.start) <span class="string">'\t'</span> num2str(segment.end)];
- 1704 classname = [ segment.class ];
- 1705 typify = <span class="string">''</span>;
- 1706 nclasses = length(classes);
- 1707 j = 1;
- 1708 <span class="keyword">while</span> (nclasses > 0) && (j <= nclasses) && not(strcmp(segment.specfilename,classes(j).specfilename))
- 1709 j = j + 1;
- 1710 <span class="keyword">end</span>
- 1711 <span class="keyword">if</span> j <= length(classes) <span class="comment">% found a match</span>
- 1712 classes = [classes(1:j-1) classes(j+1:nclasses)]; <span class="comment">% shorten the classes</span>
- 1713 typify = <span class="string">'*'</span>; <span class="comment">% indicates that this is typological class</span>
- 1714 <span class="keyword">end</span>
- 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>]);
- 1716 <span class="keyword">end</span>
- 1717 fclose(fid);
- 1718 <span class="keyword">end</span>
- 1719 ;
- 1720
- 1721 <a name="_sub68" href="#_subfunctions" class="code">function data = read_syllable_database(handles)</a>
- 1722 filename = [handles.baseclassname <span class="string">'.dat'</span>];
- 1723 fid = fopen(filename,<span class="string">'rt'</span>);
- 1724 data = textscan(fid,<span class="string">'%s %s %n %n %s %s'</span>, <span class="string">'delimiter'</span>,<span class="string">'\t'</span>);
- 1725 data = [data(1), data(5), data(6)]; <span class="comment">% throw out extra stuff which will be useful for external analysis</span>
- 1726 fclose(fid);
- 1727 ;
- 1728
- 1729 <a name="_sub69" href="#_subfunctions" class="code">function handles = merge_syllable_database(handles,data)</a>
- 1730 <span class="comment">% Merge the syllable list with the loaded database</span>
- 1731
- 1732 <span class="comment">%load('-mat','specicons');</span>
- 1733 specfilenames = data{1};
- 1734 classnames = data{2};
- 1735 typifies = data{3};
- 1736 ndata = length(specfilenames);
- 1737 <span class="comment">%classnum = 1;</span>
- 1738 handles.classes = [];
- 1739 handles.nclasses = 0;
- 1740 <span class="keyword">for</span> i = 1:ndata
- 1741 j=1; <span class="comment">% allow for no matches and allow for</span>
- 1742 <span class="keyword">while</span> (j < handles.nsegments) && not(strcmp(specfilenames(i),handles.segments(j).specfilename))
- 1743 j = j + 1;
- 1744 <span class="keyword">end</span>
- 1745 <span class="keyword">if</span> j <= handles.nsegments
- 1746 handles.segments(j).class = classnames{i};
- 1747 <span class="keyword">if</span> strcmp(typifies(i),<span class="string">'*'</span>) <span class="comment">% this is the type class</span>
- 1748 <span class="comment">%classnum = classnum + 1;</span>
- 1749 class.specfilename = specfilenames{i};
- 1750 class.name = classnames{i};
- 1751 class.index = j;
- 1752 class.length = handles.segments(j).end - handles.segments(j).start;
- 1753 class.iconS = handles.IconList{j};
- 1754 class.nmembers = 0; <span class="comment">% will update shortly</span>
- 1755 handles.nclasses = handles.nclasses + 1;
- 1756 handles.classes = [handles.classes class];
- 1757 <span class="keyword">end</span>
- 1758 <span class="keyword">end</span>
- 1759 <span class="keyword">end</span>
- 1760
- 1761 <span class="comment">% Now that we have the classes defined update the number of members</span>
- 1762 <span class="keyword">for</span> i = 1:handles.nclasses
- 1763 <span class="keyword">for</span> j = 1 : handles.nsegments
- 1764 <span class="keyword">if</span> strcmp(handles.classes(i).name,handles.segments(j).class)
- 1765 handles.classes(i).nmembers = handles.classes(i).nmembers + 1;
- 1766 <span class="keyword">end</span>
- 1767 <span class="keyword">end</span>
- 1768 <span class="keyword">end</span>
- 1769
- 1770
- 1771 <span class="comment">% --- Executes on button press in SaveButton.</span>
- 1772 <a name="_sub70" href="#_subfunctions" class="code">function SaveButton_Callback(hObject, eventdata, handles)</a>
- 1773 <span class="comment">% hObject handle to SaveButton (see GCBO)</span>
- 1774 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 1775 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 1776
- 1777 <a href="#_sub67" class="code" title="subfunction write_syllable_database(handles)">write_syllable_database</a>(handles); <span class="comment">% save the database</span>
- 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>
- 1779
- 1780
- 1781 <span class="comment">% --- Executes on slider movement.</span>
- 1782 <a name="_sub71" href="#_subfunctions" class="code">function SliderClassified_Callback(hObject, eventdata, handles)</a>
- 1783 <span class="comment">% hObject handle to SliderClassified (see GCBO)</span>
- 1784 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 1785 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 1786
- 1787 <span class="comment">% Hints: get(hObject,'Value') returns position of slider</span>
- 1788 <span class="comment">% get(hObject,'Min') and get(hObject,'Max') to determine range of slider</span>
- 1789
- 1790 xposition = round(get(hObject,<span class="string">'Value'</span>));
- 1791 <span class="comment">%xposition</span>
- 1792 handles.startx = 1 + xposition;
- 1793 handles.endx = xposition + handles.classified_width;
- 1794 handles.cpositions = <a href="#_sub41" class="code" title="subfunction cpositions = get_curr_position(handles)">get_curr_position</a>(handles);
- 1795 classview = handles.classmatrix(:,handles.startx:handles.endx); <span class="comment">% will cut overhang</span>
- 1796 axes(handles.ClassifiedAxes);
- 1797 handles.hiclass = image(classview);
- 1798
- 1799 set(handles.hiclass,<span class="string">'ButtonDownFcn'</span>,{@<a href="#_sub57" class="code" title="subfunction ClassifyAxesClickCallBack(src,eventdata)">ClassifyAxesClickCallBack</a>});
- 1800 set(handles.ClassifiedAxes,<span class="string">'XTick'</span>,[]);
- 1801 set(handles.ClassifiedAxes,<span class="string">'YTick'</span>,[]);
- 1802
- 1803 guidata(hObject, handles);
- 1804
- 1805 <span class="comment">% --- Executes during object creation, after setting all properties.</span>
- 1806 <a name="_sub72" href="#_subfunctions" class="code">function SliderClassified_CreateFcn(hObject, eventdata, handles)</a>
- 1807 <span class="comment">% hObject handle to SliderClassified (see GCBO)</span>
- 1808 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 1809 <span class="comment">% handles empty - handles not created until after all CreateFcns called</span>
- 1810
- 1811 <span class="comment">% Hint: slider controls usually have a light gray background, change</span>
- 1812 <span class="comment">% 'usewhitebg' to 0 to use default. See ISPC and COMPUTER.</span>
- 1813 usewhitebg = 1;
- 1814 <span class="keyword">if</span> usewhitebg
- 1815 set(hObject,<span class="string">'BackgroundColor'</span>,[.9 .9 .9]);
- 1816 <span class="keyword">else</span>
- 1817 set(hObject,<span class="string">'BackgroundColor'</span>,get(0,<span class="string">'defaultUicontrolBackgroundColor'</span>));
- 1818 <span class="keyword">end</span>
- 1819
- 1820 <span class="comment">% --- Executes on selection change in SortPopupMenu.</span>
- 1821 <a name="_sub73" href="#_subfunctions" class="code">function SortPopupMenu_Callback(hObject, eventdata, handles)</a>
- 1822 <span class="comment">% hObject handle to SortPopupMenu (see GCBO) eventdata reserved - to be defined in a future version of MATLAB</span>
- 1823 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 1824
- 1825 <span class="comment">% Hints: contents = get(hObject,'String') returns SortPopupMenu contents as cell array</span>
- 1826 <span class="comment">% contents{get(hObject,'Value')} returns selected item from SortPopupMenu</span>
- 1827
- 1828 sortlist = get(hObject,<span class="string">'String'</span>);
- 1829 sortn = get(hObject,<span class="string">'Value'</span>);
- 1830 sortby = sortlist(sortn);
- 1831
- 1832 <span class="keyword">if</span> strcmp(sortby,<span class="string">'original'</span>)
- 1833 handles.sortclass = <span class="string">'original'</span>;
- 1834 <span class="keyword">elseif</span> strcmp(sortby,<span class="string">'by length'</span>)
- 1835 handles.sortclass = <span class="string">'length'</span>;
- 1836 <span class="keyword">elseif</span> strcmp(sortby,<span class="string">'by popularity'</span>)
- 1837 handles.sortclass = <span class="string">'popularity'</span>;
- 1838 <span class="keyword">end</span>
- 1839
- 1840 handles = <a href="#_sub58" class="code" title="subfunction handles = configureclassview(handles,submode)">configureclassview</a>(handles,handles.submode);
- 1841
- 1842 guidata(gcbo,handles);
- 1843
- 1844 <span class="comment">% --- Executes during object creation, after setting all properties.</span>
- 1845 <a name="_sub74" href="#_subfunctions" class="code">function SortPopupMenu_CreateFcn(hObject, eventdata, handles)</a>
- 1846 <span class="comment">% hObject handle to SortPopupMenu (see GCBO)</span>
- 1847 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 1848 <span class="comment">% handles empty - handles not created until after all CreateFcns called</span>
- 1849
- 1850 <span class="comment">% Hint: popupmenu controls usually have a white background on Windows.</span>
- 1851 <span class="comment">% See ISPC and COMPUTER.</span>
- 1852 <span class="keyword">if</span> ispc
- 1853 set(hObject,<span class="string">'BackgroundColor'</span>,<span class="string">'white'</span>);
- 1854 <span class="keyword">else</span>
- 1855 set(hObject,<span class="string">'BackgroundColor'</span>,get(0,<span class="string">'defaultUicontrolBackgroundColor'</span>));
- 1856 <span class="keyword">end</span>
- 1857
- 1858
- 1859 <a name="_sub75" href="#_subfunctions" class="code">function segments = rename_segments(segments,oldname,newname)</a>
- 1860
- 1861 nsegments = length(segments);
- 1862 <span class="keyword">for</span> i = 1 : nsegments
- 1863 <span class="keyword">if</span> strcmp(segments(i).class,oldname)
- 1864 segments(i).class = newname;
- 1865 <span class="keyword">end</span>
- 1866 <span class="keyword">end</span>
- 1867
- 1868 <a name="_sub76" href="#_subfunctions" class="code">function cln = doesclassexist(classname,classes)</a>
- 1869 <span class="comment">% tests whether the current class name already exists if does not exist</span>
- 1870 <span class="comment">% returns 1 if it does exist returns 0</span>
- 1871
- 1872 i = 1;
- 1873 nclasses = length(classes);
- 1874
- 1875 <span class="keyword">while</span> (i <= nclasses) && (strcmp(classname,classes(i).name))
- 1876 i = i + 1;
- 1877 <span class="keyword">end</span>
- 1878
- 1879 <span class="keyword">if</span> i <= nclasses
- 1880 cln = i;
- 1881 <span class="keyword">else</span>
- 1882 cln = 0;
- 1883 <span class="keyword">end</span>
- 1884
- 1885 <span class="comment">% --- Executes on button press in RenameClassButton.</span>
- 1886 <a name="_sub77" href="#_subfunctions" class="code">function RenameClassButton_Callback(hObject, eventdata, handles)</a>
- 1887 <span class="comment">% hObject handle to RenameClassButton (see GCBO)</span>
- 1888 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 1889 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 1890
- 1891 class = handles.classes(handles.lastclass);
- 1892 answer = inputdlg({<span class="string">'Class name'</span>},<span class="string">'Edit class name'</span>,1,{class.name});
- 1893
- 1894 <span class="comment">% check the answer</span>
- 1895 sizeanswer = size(answer);
- 1896
- 1897 secondanswer = <span class="string">''</span>;
- 1898
- 1899 <span class="keyword">if</span> sizeanswer(1)
- 1900 <span class="keyword">if</span> not(strcmp(class.name,answer{1}))
- 1901 classnexists = <a href="#_sub76" class="code" title="subfunction cln = doesclassexist(classname,classes)">doesclassexist</a>(answer{1},handles.classes);
- 1902 <span class="keyword">if</span> classnexists
- 1903 secondanswer = questdlg(<span class="string">'Class name already exists. Do you want to merge the two classes.'</span>)
- 1904 <span class="keyword">end</span>
- 1905 <span class="keyword">if</span> strcmp(secondanswer,<span class="string">'Yes'</span>) || strcmp(secondanswer,<span class="string">''</span>)
- 1906 segments = <a href="#_sub75" class="code" title="subfunction segments = rename_segments(segments,oldname,newname)">rename_segments</a>(handles.segments,class.name,answer{1});
- 1907 class.name = answer{1};
- 1908 cindex = handles.lastclass;
- 1909 handles.classes(cindex) = class;
- 1910 handles.segments = segments;
- 1911
- 1912 <span class="keyword">if</span> strcmp(secondanswer,<span class="string">'Yes'</span>) <span class="comment">% functionality for merging two classes</span>
- 1913 handles.classes(classnexists).nmembers = handles.classes(classnexists).nmembers + handles.classes(cindex).nmembers;
- 1914 handles.classes = [handles.classes(1:(cindex-1)) handles.classes((cindex+1):handles.nclasses)];
- 1915 handles.nclasses = handles.nclasses - 1;
- 1916 class.nmembers = handles.classes(classnexists).nmembers; <span class="comment">% this is parasitic code</span>
- 1917 <span class="keyword">end</span>
- 1918 <span class="keyword">end</span>
- 1919 handles = <a href="#_sub63" class="code" title="subfunction handles = configureclassmembers(handles,classname)">configureclassmembers</a>(handles,class.name);
- 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]);
- 1921 <span class="keyword">end</span>
- 1922 <span class="keyword">end</span>
- 1923 guidata(gcbo,handles);
- 1924
- 1925
- 1926 <a name="_sub78" href="#_subfunctions" class="code">function spectras = subsamplespectra(spectra,lowerfreq,upperfreq,freqrange)</a>
- 1927 <span class="comment">% Returns a subsampled frequency of the spectra</span>
- 1928
- 1929 freqsamples = length(spectra(:,1));
- 1930 freqratio = freqsamples / (freqrange(2) - freqrange(1));
- 1931
- 1932 lowerfreqsamp = round(lowerfreq * freqratio) + 1;
- 1933 upperfreqsamp = round(upperfreq * freqratio) + 1;
- 1934
- 1935 <span class="keyword">if</span> lowerfreqsamp < 1 <span class="comment">% make sure we are not out of range</span>
- 1936 lowerfreqsamp = 1;
- 1937 <span class="keyword">end</span>
- 1938
- 1939 <span class="keyword">if</span> upperfreq > freqsamples
- 1940 upperfeqsamp = freqsamples;
- 1941 <span class="keyword">end</span>
- 1942
- 1943 spectras = spectra(lowerfreqsamp:upperfreqsamp,:);
- 1944
- 1945 <a name="_sub79" href="#_subfunctions" class="code">function handles = generate_subsamples_icons(handles)</a>
- 1946 segments = handles.segments;
- 1947 IconListf = {};
- 1948 hw = waitbar(0,<span class="string">'Zooming spectra. . .'</span>);
- 1949 <span class="keyword">for</span> i = 1:handles.nsegments
- 1950 load(<span class="string">'-mat'</span>,segments(i).specfilename);
- 1951 Ssub = <a href="#_sub78" class="code" title="subfunction spectras = subsamplespectra(spectra,lowerfreq,upperfreq,freqrange)">subsamplespectra</a>(S,handles.lowerfreq,handles.upperfreq,handles.fpass);
- 1952 IconListf{i} = <a href="#_sub32" class="code" title="subfunction iconS = iconify_spec(S,height)">iconify_spec</a>(Ssub,handles.ispecheight);
- 1953 waitbar(i/handles.nsegments);
- 1954 <span class="keyword">end</span>
- 1955 <a href="../../chronux_2_10/fly_track/videoIO/videoIO_2006a/@videoReader/close.html" class="code" title="function vr = close(vr)">close</a>(hw);
- 1956 handles.IconListf = IconListf;
- 1957
- 1958
- 1959 <a name="_sub80" href="#_subfunctions" class="code">function handles = ZoomSpectra(handles,status)</a>
- 1960 <span class="keyword">if</span> strcmp(status,<span class="string">'Zoom in'</span>)
- 1961 <span class="keyword">if</span> (length(handles.IconListf) == 0) || (handles.rezoom)
- 1962 handles = <a href="#_sub79" class="code" title="subfunction handles = generate_subsamples_icons(handles)">generate_subsamples_icons</a>(handles);
- 1963 handles.rezoom = logical(0);
- 1964 <span class="keyword">end</span>
- 1965 handles.FullIconList = handles.IconList;
- 1966 set(handles.ZoomButton,<span class="string">'String'</span>,<span class="string">'Zoom out'</span>);
- 1967 handles.IconList = handles.IconListf;
- 1968 <span class="keyword">elseif</span> strcmp(status,<span class="string">'Zoom out'</span>);
- 1969
- 1970 <span class="keyword">if</span> handles.rezoom
- 1971 handles = <a href="#_sub79" class="code" title="subfunction handles = generate_subsamples_icons(handles)">generate_subsamples_icons</a>(handles);
- 1972 handles.rezoom = logical(0);
- 1973 set(handles.ZoomButton,<span class="string">'String'</span>,<span class="string">'Zoom out'</span>);
- 1974 handles.IconList = handles.IconListf;
- 1975 <span class="keyword">else</span>
- 1976 handles.IconList = handles.FullIconList;
- 1977 set(handles.ZoomButton,<span class="string">'String'</span>,<span class="string">'Zoom in'</span>);
- 1978 <span class="keyword">end</span>
- 1979 <span class="keyword">end</span>
- 1980
- 1981 <span class="keyword">for</span> j = 1:handles.nclasses <span class="comment">% switch over class icons</span>
- 1982 handles.classes(j).iconS = handles.IconList{handles.classes(j).index};
- 1983 <span class="keyword">end</span>
- 1984
- 1985 nimages = length(handles.mapindex);
- 1986
- 1987 <span class="comment">% this is kind of ugly</span>
- 1988 <span class="keyword">if</span> not(strcmp(handles.mode,<span class="string">'class-view'</span>)) && not(strcmp(handles.mode,<span class="string">'comparison'</span>)) <span class="comment">% update images</span>
- 1989 <span class="keyword">for</span> i = 1:nimages
- 1990 handles.image_list{i} = handles.IconList{handles.mapindex(i)};
- 1991 <span class="keyword">end</span>
- 1992 <span class="keyword">elseif</span> strcmp(handles.mode,<span class="string">'comparison'</span>)
- 1993 handles.image_list{1} = handles.IconList{handles.NextIndex};
- 1994 handles.image_list{2} = handles.IconList{handles.classes(handles.lastclass).index};
- 1995 <span class="keyword">else</span>
- 1996 <span class="keyword">for</span> i = 1:nimages
- 1997 handles.image_list{i} = handles.IconList{handles.classes(handles.mapindex(i)).index};
- 1998 <span class="keyword">end</span>
- 1999 <span class="keyword">end</span>
- 2000
- 2001 handles=<a href="#_sub22" class="code" title="subfunction handles=get_and_plot(handles, segment)">get_and_plot</a>(handles,handles.segments(handles.NextIndex));
- 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);
- 2003
- 2004
- 2005
- 2006 <span class="comment">% --- Executes on button press in ZoomButton.</span>
- 2007 <a name="_sub81" href="#_subfunctions" class="code">function ZoomButton_Callback(hObject, eventdata, handles)</a>
- 2008 <span class="comment">% hObject handle to ZoomButton (see GCBO)</span>
- 2009 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 2010 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 2011
- 2012 status = get(handles.ZoomButton,<span class="string">'String'</span>);
- 2013
- 2014 handles = <a href="#_sub80" class="code" title="subfunction handles = ZoomSpectra(handles,status)">ZoomSpectra</a>(handles,status);
- 2015
- 2016 guidata(gcbo,handles);
- 2017
- 2018 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
- 2019 <span class="comment">% Functions for computing class statistics %</span>
- 2020 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
- 2021
- 2022 <a name="_sub82" href="#_subfunctions" class="code">function [meanl sdl] = stat_lengths(handles)</a>
- 2023 lengthsarray = [];
- 2024 <span class="keyword">for</span> i = 1:length(handles.mapindex)
- 2025 lengthsarray(i) = handles.segments(i).end - handles.segments(i).start;
- 2026 <span class="keyword">end</span>
- 2027 meanl = mean(lengthsarray);
- 2028 sdl = sd(lengthsarray);
- 2029
- 2030
- 2031 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
- 2032 <span class="comment">% Functions for quick classify mode %</span>
- 2033 <span class="comment">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
- 2034
- 2035 <a name="_sub83" href="#_subfunctions" class="code">function handles = quick_mode_exit(handles)</a>
- 2036 set(handles.SkipButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 2037 set(handles.UndoButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 2038 set(handles.NewQuickButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 2039
- 2040 set(handles.ViewText,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
- 2041 set(handles.ModePopupMenu,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
- 2042 set(handles.SegInfoText,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
- 2043
- 2044 set(handles.ClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 2045 set(handles.RemoveClassButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 2046 set(handles.RemoveClassButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
- 2047 set(handles.CompareToggleButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 2048 set(handles.AutoClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 2049 set(handles.SortPopupMenu,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 2050 set(handles.ModePopupMenu,<span class="string">'Value'</span>,3);
- 2051
- 2052 handles.submode=<span class="string">'select'</span>;
- 2053
- 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>]);
- 2055
- 2056 <a href="#_sub54" class="code" title="subfunction setnavigationbuttons(handles)">setnavigationbuttons</a>(handles);
- 2057
- 2058
- 2059 <span class="comment">% --- Executes on button press in QuickModeButton.</span>
- 2060 <a name="_sub84" href="#_subfunctions" class="code">function QuickModeButton_Callback(hObject, eventdata, handles)</a>
- 2061 <span class="comment">% hObject handle to QuickModeButton (see GCBO)</span>
- 2062 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 2063 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 2064
- 2065 <span class="keyword">if</span> not(handles.quickmode) <span class="comment">% turn on quick mode</span>
- 2066
- 2067 handles.quickmode = 1;
- 2068
- 2069 <span class="comment">% Turn off top header</span>
- 2070 set(handles.ViewText,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 2071 set(handles.ModePopupMenu,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 2072 set(handles.SegInfoText,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 2073
- 2074 <span class="comment">% Make visible quick mode buttons</span>
- 2075 set(handles.SkipButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
- 2076 set(handles.SkipButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 2077 set(handles.UndoButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
- 2078 set(handles.UndoButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 2079 set(handles.NewQuickButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
- 2080 set(handles.NewQuickButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
- 2081
- 2082 set(handles.SortPopupMenu,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
- 2083
- 2084 <span class="comment">% Disable regular mode functions</span>
- 2085 set(handles.RemoveClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 2086 set(handles.NextClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 2087 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 2088 set(handles.PreviousSpectraButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 2089 set(handles.ClassifyButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 2090 set(handles.TypifyClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 2091 set(handles.RenameClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 2092 set(handles.CompareToggleButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 2093 set(handles.AutoClassifyButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 2094
- 2095 <span class="comment">% Will need to disable buttons underneath classified axes</span>
- 2096 <span class="keyword">if</span> not(strcmp(handles.segments(handles.NextIndex).class,<span class="string">''</span>))
- 2097 handles = <a href="#_sub85" class="code" title="subfunction handles=jump_to_unclassified(handles)">jump_to_unclassified</a>(handles);
- 2098 handles.lastsegment = handles.NextIndex;
- 2099 <span class="keyword">end</span>
- 2100
- 2101 <span class="keyword">if</span> handles.nclasses >= 1
- 2102 handles = <a href="#_sub58" class="code" title="subfunction handles = configureclassview(handles,submode)">configureclassview</a>(handles,<span class="string">'select-class'</span>);
- 2103 handles.mode = <span class="string">'class-view'</span>;
- 2104 handles.submode = <span class="string">'select-class'</span>;
- 2105 <span class="keyword">else</span> <span class="comment">% empty axes</span>
- 2106 handles = <a href="#_sub14" class="code" title="subfunction handles = blankaxes(handles)">blankaxes</a>(handles);
- 2107 handles.mode = <span class="string">'class-view'</span>;
- 2108 handles.submode = <span class="string">'xxx'</span>;
- 2109 <span class="keyword">end</span>
- 2110
- 2111
- 2112 <span class="keyword">else</span>
- 2113 handles.quickmode = 0;
- 2114 handles = <a href="#_sub83" class="code" title="subfunction handles = quick_mode_exit(handles)">quick_mode_exit</a>(handles);
- 2115
- 2116 <span class="comment">% Will need to intellegently enable buttons underneath classified axes</span>
- 2117 <span class="keyword">end</span>
- 2118
- 2119 guidata(gcbo,handles);
- 2120
- 2121 <a name="_sub85" href="#_subfunctions" class="code">function handles=jump_to_unclassified(handles)</a>
- 2122 <span class="comment">% Jumps to the next unclassified segment</span>
- 2123 currindex = handles.NextIndex;
- 2124 i = currindex;
- 2125 <span class="keyword">while</span> (mod(i,handles.nsegments)+1 ~= currindex) && not(strcmp(handles.segments(mod(i,handles.nsegments) + 1).class,<span class="string">''</span>))
- 2126 i = i + 1;
- 2127 <span class="keyword">end</span>
- 2128
- 2129 <span class="keyword">if</span> not(mod(i,handles.nsegments)+1 == currindex) <span class="comment">% there are some unclassified segments</span>
- 2130 handles.NextIndex = mod(i,handles.nsegments) + 1;
- 2131 handles=<a href="#_sub13" class="code" title="subfunction handles=ConfigureClassSegment(handles)">ConfigureClassSegment</a>(handles);
- 2132 handles=<a href="#_sub24" class="code" title="subfunction handles=ConfigureSpecPlot(handles)">ConfigureSpecPlot</a>(handles);
- 2133 set(handles.ClassifyButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 2134 <span class="keyword">end</span>
- 2135 <span class="comment">%get(handles.QuickModeButton,'Value')</span>
- 2136 handles.lastsegment = currindex;
- 2137
- 2138 <span class="comment">% --- Executes on button press in SkipButton.</span>
- 2139 <a name="_sub86" href="#_subfunctions" class="code">function SkipButton_Callback(hObject, eventdata, handles)</a>
- 2140 <span class="comment">% hObject handle to SkipButton (see GCBO)</span>
- 2141 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 2142 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 2143 handles = <a href="#_sub85" class="code" title="subfunction handles=jump_to_unclassified(handles)">jump_to_unclassified</a>(handles);
- 2144
- 2145 <span class="keyword">if</span> handles.lastsegment == handles.NextIndex <span class="comment">% no more unclassified segments</span>
- 2146 handles = <a href="#_sub83" class="code" title="subfunction handles = quick_mode_exit(handles)">quick_mode_exit</a>(handles);
- 2147 set(handles.QuickModeButton,<span class="string">'Value'</span>,0);
- 2148 handles.quickmode = not(handles.quickmode);
- 2149 <span class="keyword">end</span>
- 2150
- 2151 handles = <a href="#_sub58" class="code" title="subfunction handles = configureclassview(handles,submode)">configureclassview</a>(handles,<span class="string">'select-class'</span>);
- 2152
- 2153 guidata(gcbo,handles);
- 2154 <span class="comment">% --- Executes on button press in UndoButton.</span>
- 2155 <a name="_sub87" href="#_subfunctions" class="code">function UndoButton_Callback(hObject, eventdata, handles)</a>
- 2156 <span class="comment">% hObject handle to UndoButton (see GCBO)</span>
- 2157 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 2158 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 2159
- 2160 handles.NextIndex = handles.lastsegment;
- 2161 handles=<a href="#_sub13" class="code" title="subfunction handles=ConfigureClassSegment(handles)">ConfigureClassSegment</a>(handles);
- 2162 handles=<a href="#_sub24" class="code" title="subfunction handles=ConfigureSpecPlot(handles)">ConfigureSpecPlot</a>(handles);
- 2163
- 2164 handles = <a href="#_sub83" class="code" title="subfunction handles = quick_mode_exit(handles)">quick_mode_exit</a>(handles);
- 2165
- 2166 set(handles.QuickModeButton,<span class="string">'Value'</span>,0);
- 2167 handles.quickmode = not(handles.quickmode);
- 2168
- 2169 guidata(gcbo,handles);
- 2170
- 2171 <span class="comment">% --- Executes on button press in NewQuickButton.</span>
- 2172 <a name="_sub88" href="#_subfunctions" class="code">function NewQuickButton_Callback(hObject, eventdata, handles)</a>
- 2173 <span class="comment">% hObject handle to NewQuickButton (see GCBO)</span>
- 2174 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 2175 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 2176
- 2177 handles = <a href="#_sub12" class="code" title="subfunction handles = add_new_class(handles,segment)">add_new_class</a>(handles,handles.segments(handles.NextIndex));
- 2178 handles.segments(handles.NextIndex).class = handles.classes(handles.nclasses).name;
- 2179
- 2180 set(handles.ClassifyButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 2181
- 2182 handles = <a href="#_sub85" class="code" title="subfunction handles=jump_to_unclassified(handles)">jump_to_unclassified</a>(handles);
- 2183 handles = <a href="#_sub58" class="code" title="subfunction handles = configureclassview(handles,submode)">configureclassview</a>(handles,<span class="string">'select-class'</span>);
- 2184
- 2185 <span class="keyword">if</span> handles.lastsegment == handles.NextIndex <span class="comment">% no more unclassified segments</span>
- 2186 handles = <a href="#_sub83" class="code" title="subfunction handles = quick_mode_exit(handles)">quick_mode_exit</a>(handles)
- 2187 set(handles.QuickModeButton,<span class="string">'Value'</span>,0);
- 2188 handles.quickmode = not(handles.quickmode);
- 2189 <span class="keyword">end</span>
- 2190
- 2191 guidata(gcbo,handles);
- 2192
- 2193
- 2194
- 2195 <span class="comment">% --- Executes on button press in CompareToggleButton.</span>
- 2196 <a name="_sub89" href="#_subfunctions" class="code">function CompareToggleButton_Callback(hObject, eventdata, handles)</a>
- 2197 <span class="comment">% hObject handle to CompareToggleButton (see GCBO)</span>
- 2198 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 2199 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 2200
- 2201 <span class="comment">% Hint: get(hObject,'Value') returns toggle state of CompareToggleButton</span>
- 2202
- 2203 state = get(hObject,<span class="string">'Value'</span>);
- 2204
- 2205 <span class="keyword">if</span> handles.nclasses > 0
- 2206
- 2207 <span class="keyword">if</span> state <span class="comment">% enter compare mode</span>
- 2208 handles.mode = <span class="string">'class-view'</span>;
- 2209 set(handles.RemoveClassButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 2210 set(handles.RenameClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 2211 set(handles.NextClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 2212 set(handles.ModePopupMenu,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 2213 set(handles.ClassifyButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 2214 set(handles.QuickModeButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 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>);
- 2216 set(handles.NextSpectraButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 2217 set(handles.PreviousSpectraButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 2218 set(handles.TypifyClassButton, <span class="string">'Visible'</span>, <span class="string">'off'</span>);
- 2219 set(handles.AutoClassifyButton,<span class="string">'Enable'</span>,<span class="string">'off'</span>);
- 2220
- 2221 handles = <a href="#_sub58" class="code" title="subfunction handles = configureclassview(handles,submode)">configureclassview</a>(handles,<span class="string">'compare'</span>);
- 2222 <span class="keyword">else</span>
- 2223 <span class="keyword">if</span> strcmp(handles.mode,<span class="string">'comparison'</span>) <span class="comment">% go back to the class view</span>
- 2224 set(hObject,<span class="string">'Value'</span>,1);
- 2225 handles.startx = 1; <span class="comment">% if you have been scrolling reset to defaults</span>
- 2226 handles.endx = handles.classified_width;
- 2227
- 2228 set(handles.SliderClassified, <span class="string">'Value'</span>,0);
- 2229 handles = <a href="#_sub58" class="code" title="subfunction handles = configureclassview(handles,submode)">configureclassview</a>(handles,<span class="string">'compare'</span>);
- 2230 handles.mode = <span class="string">'class-view'</span>;
- 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>);
- 2232 <span class="keyword">elseif</span> strcmp(handles.mode,<span class="string">'class-view'</span>) <span class="comment">% exit the compare mode entirely</span>
- 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>]);
- 2234 set(handles.ModePopupMenu,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 2235 set(handles.QuickModeButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 2236 <a href="#_sub54" class="code" title="subfunction setnavigationbuttons(handles)">setnavigationbuttons</a>(handles);
- 2237 <a href="#_sub59" class="code" title="subfunction handles = SetModePopupMenu(handles,viewstring)">SetModePopupMenu</a>(handles,<span class="string">'class view'</span>);
- 2238 set(handles.RemoveClassButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 2239 set(handles.RemoveClassButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
- 2240 set(handles.ClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 2241 set(handles.AutoClassifyButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 2242 handles.submode = <span class="string">'select'</span>;
- 2243 <span class="keyword">end</span>
- 2244 <span class="keyword">end</span>
- 2245
- 2246 <span class="keyword">else</span>
- 2247 set(hObject,<span class="string">'Value'</span>,0);
- 2248 <span class="keyword">end</span>
- 2249 guidata(hObject, handles);
- 2250
- 2251 <a name="_sub90" href="#_subfunctions" class="code">function handles = recompute_classifiedaxes(handles)</a>
- 2252 <span class="comment">% Recomputes the width and height based on a new size for the classified</span>
- 2253 <span class="comment">% axes</span>
- 2254
- 2255 classaxpos=get(handles.ClassifiedAxes,<span class="string">'Position'</span>);
- 2256
- 2257 set(handles.SliderClassified,<span class="string">'Value'</span>,0);
- 2258
- 2259 handles.startx = 1;
- 2260
- 2261 handles.classified_width = round(handles.classified_width_density * classaxpos(3));
- 2262 handles.classified_height = round(handles.classified_height_density * classaxpos(4));
- 2263
- 2264 oldpos = handles.startpage;
- 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>
- 2266
- 2267 cnrow = <a href="#_sub40" class="code" title="subfunction nrow = which_row(positions,index)">which_row</a>(handles.positions,oldpos);
- 2268 <span class="keyword">for</span> i = 1:(cnrow-1)
- 2269 handles = <a href="#_sub44" class="code" title="subfunction handles = row_forward(handles)">row_forward</a>(handles);
- 2270 <span class="keyword">end</span>
- 2271
- 2272 handles.cpositions = <a href="#_sub41" class="code" title="subfunction cpositions = get_curr_position(handles)">get_curr_position</a>(handles);
- 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);
- 2274
- 2275 <a name="_sub91" href="#_subfunctions" class="code">function reposy(guielement,deltay)</a>
- 2276 oldpos = get(guielement,<span class="string">'Position'</span>);
- 2277 set(guielement,<span class="string">'Position'</span>,[oldpos(1), oldpos(2) + deltay, oldpos(3), oldpos(4)]);
- 2278
- 2279 <a name="_sub92" href="#_subfunctions" class="code">function reposelementsy(handles,deltay)</a>
- 2280 <a href="#_sub91" class="code" title="subfunction reposy(guielement,deltay)">reposy</a>(handles.PrecomputeButton,deltay);
- 2281 <a href="#_sub91" class="code" title="subfunction reposy(guielement,deltay)">reposy</a>(handles.DirectoryEditBox,deltay);
- 2282 <a href="#_sub91" class="code" title="subfunction reposy(guielement,deltay)">reposy</a>(handles.LoadDirectoryButton,deltay);
- 2283 <a href="#_sub91" class="code" title="subfunction reposy(guielement,deltay)">reposy</a>(handles.SaveButton,deltay);
- 2284 <a href="#_sub91" class="code" title="subfunction reposy(guielement,deltay)">reposy</a>(handles.ConfigureButton,deltay);
- 2285 <a href="#_sub91" class="code" title="subfunction reposy(guielement,deltay)">reposy</a>(handles.ViewText,deltay);
- 2286 <a href="#_sub91" class="code" title="subfunction reposy(guielement,deltay)">reposy</a>(handles.ModePopupMenu,deltay);
- 2287 <a href="#_sub91" class="code" title="subfunction reposy(guielement,deltay)">reposy</a>(handles.SegInfoText,deltay);
- 2288 <a href="#_sub91" class="code" title="subfunction reposy(guielement,deltay)">reposy</a>(handles.ToClassifyPanel,deltay);
- 2289 <a href="#_sub91" class="code" title="subfunction reposy(guielement,deltay)">reposy</a>(handles.NewQuickButton,deltay);
- 2290 <a href="#_sub91" class="code" title="subfunction reposy(guielement,deltay)">reposy</a>(handles.UndoButton,deltay);
- 2291 <a href="#_sub91" class="code" title="subfunction reposy(guielement,deltay)">reposy</a>(handles.SkipButton,deltay);
- 2292 <a href="#_sub91" class="code" title="subfunction reposy(guielement,deltay)">reposy</a>(handles.SortText,deltay);
- 2293 <a href="#_sub91" class="code" title="subfunction reposy(guielement,deltay)">reposy</a>(handles.SortPopupMenu,deltay);
- 2294 <a href="#_sub91" class="code" title="subfunction reposy(guielement,deltay)">reposy</a>(handles.NextClassButton,deltay);
- 2295
- 2296 <a name="_sub93" href="#_subfunctions" class="code">function ResizeFcn(h, eventdata, handles, varargin)</a>
- 2297
- 2298 handles = guidata(gcbo);
- 2299
- 2300 originalsize = handles.originalsize;
- 2301 newsize = get(h,<span class="string">'Position'</span>);
- 2302 classaxpos = get(handles.ClassifiedAxes,<span class="string">'Position'</span>);
- 2303
- 2304 <span class="keyword">if</span> handles.originalsize(3) > newsize(3) <span class="comment">% if form has smaller width bounce back</span>
- 2305 newsize(3) = originalsize(3);
- 2306 classaxpos(3) = handles.originalaxessize(3);
- 2307
- 2308 sliderpos = get(handles.SliderClassified,<span class="string">'Position'</span>); <span class="comment">% Update the slider</span>
- 2309 sliderpos(3) = classaxpos(3);
- 2310 set(handles.SliderClassified,<span class="string">'Position'</span>,sliderpos);
- 2311
- 2312 <span class="keyword">else</span> <span class="comment">% form is larger</span>
- 2313 deltax = newsize(3) - handles.prevsize(3);
- 2314 classaxpos(3) = classaxpos(3) + deltax; <span class="comment">% update width of the axes</span>
- 2315
- 2316 sliderpos = get(handles.SliderClassified,<span class="string">'Position'</span>); <span class="comment">% Update the slider</span>
- 2317 sliderpos(3) = sliderpos(3) + deltax;
- 2318 set(handles.SliderClassified,<span class="string">'Position'</span>,sliderpos);
- 2319
- 2320 <span class="keyword">end</span>
- 2321
- 2322 <span class="keyword">if</span> originalsize(4) > newsize(4) <span class="comment">% if form has a smaller height bounce back</span>
- 2323 newsize(2) = newsize(2) + newsize(4) - originalsize(4);
- 2324
- 2325 deltay = originalsize(4) - handles.prevsize(4);
- 2326 newsize(4) = originalsize(4);
- 2327 classaxpos(4) = classaxpos(4) + newsize(4) - handles.prevsize(4);
- 2328 <a href="#_sub92" class="code" title="subfunction reposelementsy(handles,deltay)">reposelementsy</a>(handles,deltay);
- 2329
- 2330 <span class="keyword">else</span> <span class="comment">% form is larger we need to reposition elements</span>
- 2331 deltay = newsize(4) - handles.prevsize(4);
- 2332 <a href="#_sub92" class="code" title="subfunction reposelementsy(handles,deltay)">reposelementsy</a>(handles,deltay);
- 2333 classaxpos(4) = classaxpos(4) + newsize(4) - handles.prevsize(4);
- 2334 <span class="keyword">end</span>
- 2335
- 2336 set(h,<span class="string">'Position'</span>,newsize);
- 2337 set(handles.ClassifiedAxes,<span class="string">'Position'</span>,classaxpos);
- 2338
- 2339 <span class="keyword">if</span> handles.fixed || handles.blank <span class="comment">% allow fixed resizing</span>
- 2340 <span class="comment">% do nothing except update the density measurements</span>
- 2341 handles.classified_width_density = handles.classified_width / classaxpos(3);
- 2342 handles.classified_height_density = handles.classified_height / classaxpos(4);
- 2343 <span class="keyword">else</span> <span class="comment">% reposition images</span>
- 2344 handles = <a href="#_sub90" class="code" title="subfunction handles = recompute_classifiedaxes(handles)">recompute_classifiedaxes</a>(handles);
- 2345 <span class="keyword">end</span>
- 2346
- 2347 handles.prevsize = newsize;
- 2348
- 2349 guidata(gcbo,handles);
- 2350
- 2351 <a name="_sub94" href="#_subfunctions" class="code">function truth = truthrange(range)</a>
- 2352 truth = range(1) && range (2);
- 2353
- 2354 <span class="comment">% --- Executes on button press in ConfigureButton.</span>
- 2355 <a name="_sub95" href="#_subfunctions" class="code">function ConfigureButton_Callback(hObject, eventdata, handles)</a>
- 2356 <span class="comment">% hObject handle to ConfigureButton (see GCBO)</span>
- 2357 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 2358 <span class="comment">% handlenb vcccs structure with handles and user data (see GUIDATA)</span>
- 2359
- 2360
- 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);
- 2362 <span class="keyword">if</span> not(isempty(configs) || length(configs) == 1) <span class="comment">% if okay is pressed</span>
- 2363 lowerfreq= configs{1};
- 2364 upperfreq= configs{2};
- 2365 classified_height= configs{3};
- 2366 classified_width= configs{4};
- 2367 Fs=configs{5};
- 2368 movingwin= configs{6};
- 2369 tapers= configs{7};
- 2370 fpass = configs{8};
- 2371
- 2372 rezoom = 0;
- 2373
- 2374 <span class="keyword">if</span> not(handles.lowerfreq == lowerfreq)
- 2375 handles.lowerfreq = lowerfreq;
- 2376 rezoom = 1;
- 2377 <span class="keyword">end</span>
- 2378
- 2379 <span class="keyword">if</span> not(handles.upperfreq==upperfreq)
- 2380 handles.upperfreq=upperfreq;
- 2381 rezoom=1;
- 2382 <span class="keyword">end</span>
- 2383
- 2384 redraw = 0;
- 2385 <span class="keyword">if</span> not(handles.classified_height==classified_height)
- 2386 handles.classified_height=classified_height;
- 2387 redraw = 1;
- 2388 <span class="keyword">end</span>
- 2389
- 2390 <span class="keyword">if</span> not(handles.classified_width==classified_width)
- 2391 handles.classified_width=classified_height;
- 2392 redraw = 1;
- 2393 <span class="keyword">end</span>
- 2394
- 2395 recompute = 0; <span class="comment">% check to see if the spectra needs to be recomputed</span>
- 2396
- 2397 <span class="keyword">if</span> not(handles.Fs==Fs)
- 2398 handles.Fs = Fs;
- 2399 recompute = 1;
- 2400 <span class="keyword">end</span>
- 2401
- 2402 <span class="keyword">if</span> not(<a href="#_sub94" class="code" title="subfunction truth = truthrange(range)">truthrange</a>(handles.movingwin == movingwin))
- 2403 handles.movingwin = movingwin;
- 2404 recompute = 1;
- 2405 <span class="keyword">end</span>
- 2406
- 2407 <span class="keyword">if</span> not(<a href="#_sub94" class="code" title="subfunction truth = truthrange(range)">truthrange</a>(handles.tapers==tapers))
- 2408 handles.tapers=tapers;
- 2409 recompute = 1;
- 2410 <span class="keyword">end</span>
- 2411
- 2412 <span class="keyword">if</span> not(<a href="#_sub94" class="code" title="subfunction truth = truthrange(range)">truthrange</a>(handles.fpass==fpass))
- 2413 handles.fpass=fpass;
- 2414 recompute = 1;
- 2415 <span class="keyword">end</span>
- 2416
- 2417
- 2418 <span class="keyword">if</span> recompute <span class="comment">% The spectra need to be recomputed</span>
- 2419 status = questdlg(<span class="string">'Recompute spectra with changed parameters'</span>);
- 2420 <span class="keyword">if</span> not(isempty(status))
- 2421 <span class="keyword">if</span> strcmp(status,<span class="string">'Yes'</span>)
- 2422 handles = <a href="#_sub20" class="code" title="subfunction handles = precompute_AllSpectra(handles)">precompute_AllSpectra</a>(handles);
- 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>
- 2424
- 2425 handles=<a href="#_sub24" class="code" title="subfunction handles=ConfigureSpecPlot(handles)">ConfigureSpecPlot</a>(handles); <span class="comment">% automatically force into browse mode</span>
- 2426 set(handles.RemoveClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 2427 set(handles.TypifyClassButton, <span class="string">'Visible'</span>, <span class="string">'off'</span>);
- 2428 set(handles.NextClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 2429
- 2430 handles=<a href="#_sub49" class="code" title="subfunction handles = BrowseDirectory(handles)">BrowseDirectory</a>(handles);
- 2431 set(handles.ModePopupMenu,<span class="string">'Value'</span>,1);
- 2432
- 2433 <span class="keyword">if</span> handles.nclasses >= 1 <span class="comment">% sync changes to the classview</span>
- 2434 <span class="keyword">for</span> j = 1:handles.nclasses
- 2435 handles.classes(j).iconS = handles.IconList{handles.classes(j).index};
- 2436 <span class="keyword">end</span>
- 2437 <span class="keyword">end</span>
- 2438
- 2439 set(handles.RemoveClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>); <span class="comment">% update buttons</span>
- 2440 set(handles.TypifyClassButton, <span class="string">'Visible'</span>, <span class="string">'off'</span>);
- 2441 set(handles.NextClassButton,<span class="string">'Visible'</span>,<span class="string">'off'</span>);
- 2442
- 2443 redraw = logical(1);
- 2444 <span class="keyword">end</span>
- 2445 <span class="keyword">end</span>
- 2446 <span class="keyword">end</span>
- 2447
- 2448 <span class="keyword">if</span> rezoom
- 2449 <span class="keyword">if</span> strcmp(get(handles.ZoomButton,<span class="string">'String'</span>),<span class="string">'Zoom out'</span>)
- 2450 handles.rezoom = logical(1);
- 2451 handles = <a href="#_sub80" class="code" title="subfunction handles = ZoomSpectra(handles,status)">ZoomSpectra</a>(handles,<span class="string">'Zoom out'</span>);
- 2452 <span class="keyword">else</span>
- 2453 handles.rezoom = logical(1); <span class="comment">% Otherwise wait to user hits the rezoom button</span>
- 2454 <span class="keyword">end</span>
- 2455 <span class="keyword">end</span>
- 2456
- 2457 <span class="keyword">if</span> not(handles.configschanged) <span class="comment">% handles the case were the configurations were changed already</span>
- 2458 <span class="keyword">if</span> not(recompute)
- 2459 handles.configschanged = logical(1);
- 2460 <span class="keyword">end</span>
- 2461 <span class="keyword">end</span>
- 2462
- 2463 <span class="keyword">if</span> redraw <span class="comment">% Redraw the axes</span>
- 2464 classaxpos = get(handles.ClassifiedAxes,<span class="string">'Position'</span>);
- 2465 handles.classified_width_density = handles.classified_width / classaxpos(3);
- 2466 handles.classified_height_density = handles.classified_height / classaxpos(4);
- 2467 handles = <a href="#_sub90" class="code" title="subfunction handles = recompute_classifiedaxes(handles)">recompute_classifiedaxes</a>(handles);
- 2468 <span class="keyword">end</span>
- 2469
- 2470 handles.fixed = configs{9};
- 2471
- 2472 <span class="keyword">end</span>
- 2473 guidata(gcbo,handles);
- 2474
- 2475 <a name="_sub96" href="#_subfunctions" class="code">function status = save_configuration(handles,filename)</a>
- 2476
- 2477 Fs = handles.Fs;
- 2478 movingwin = handles.movingwin;
- 2479 tapers = handles.tapers;
- 2480 fpass = handles.fpass;
- 2481
- 2482 <span class="keyword">try</span>
- 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>);
- 2484 <span class="keyword">catch</span>
- 2485 status = 1;
- 2486 <span class="keyword">end</span>
- 2487
- 2488 <a name="_sub97" href="#_subfunctions" class="code">function handles = load_configuration(handles,filename)</a>
- 2489 <span class="keyword">try</span>
- 2490 load(<span class="string">'-mat'</span>,filename)
- 2491 <span class="keyword">if</span> handles.Fs == Fs || handles.movingwin == movingwin || handles.tapers == tapers || handles.fpass == fpass
- 2492 handles.configshavechanged = logical(1);
- 2493 <span class="keyword">end</span>
- 2494
- 2495 handles.Fs = Fs;
- 2496 handles.movingwin = movingwin;
- 2497 handles.tapers = tapers;
- 2498 handles.fpass = fpass;
- 2499 <span class="keyword">catch</span>
- 2500 handles = handles;
- 2501 <span class="keyword">end</span>
- 2502
- 2503
- 2504 <span class="comment">% --- Executes on button press in NextClassButton.</span>
- 2505 <a name="_sub98" href="#_subfunctions" class="code">function NextClassButton_Callback(hObject, eventdata, handles)</a>
- 2506 <span class="comment">% hObject handle to NextClassButton (see GCBO)</span>
- 2507 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 2508 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 2509
- 2510 handles.lastclass = handles.lastclass + 1;
- 2511
- 2512 <span class="keyword">if</span> handles.lastclass > handles.nclasses
- 2513 handles.lastclass = 1;
- 2514 <span class="keyword">end</span>
- 2515
- 2516 class = handles.classes(handles.lastclass);
- 2517 handles = <a href="#_sub63" class="code" title="subfunction handles = configureclassmembers(handles,classname)">configureclassmembers</a>(handles,class.name);
- 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]);
- 2519 handles.mode = <span class="string">'class-members'</span>;
- 2520 handles.submode = <span class="string">'select'</span>;
- 2521
- 2522 guidata(gcbo,handles);
- 2523
- 2524 <a name="_sub99" href="#_subfunctions" class="code">function handles = features_segments(handles)</a>
- 2525
- 2526 h=waitbar(0,<span class="string">'Computing Data Features. . . '</span>);
- 2527 <span class="keyword">for</span> i = 1:handles.nsegments
- 2528 startf = handles.segments(i).start;
- 2529 endf = handles.segments(i).end;
- 2530 cepestral = <a href="#_sub100" class="code" title="subfunction coefs = cepsfromspectra(specfilename,ncepestral)">cepsfromspectra</a>(handles.segments(i).specfilename,handles.ncepestral);
- 2531
- 2532 <span class="comment">% Below shows how additional data features can be included in the</span>
- 2533 <span class="comment">% exporting and classifying using the software</span>
- 2534
- 2535 <span class="comment">% The commented code shows how the wave file can be read in to</span>
- 2536 <span class="comment">% calculate additional data features</span>
- 2537
- 2538 <span class="comment">% segment = handles.segments(i);</span>
- 2539 <span class="comment">% data = wavread(segment.wavfile,round(handles.Fs * [segment.start segment.end]));</span>
- 2540
- 2541 waitbar(i/handles.nsegments);
- 2542
- 2543 handles.segments(i).features = cepestral';
- 2544
- 2545 <span class="comment">% Three additional data features can be added for example as following</span>
- 2546 <span class="comment">%</span>
- 2547 <span class="comment">% additional_features = compute_features(data,3);</span>
- 2548 <span class="comment">% handles.nfeatures = handles.nfeatures + 3;</span>
- 2549 <span class="comment">% handles.segments(i).features = [handles.segments(i).features additional_features'];</span>
- 2550 <span class="keyword">end</span>
- 2551 <a href="../../chronux_2_10/fly_track/videoIO/videoIO_2006a/@videoReader/close.html" class="code" title="function vr = close(vr)">close</a>(h);
- 2552
- 2553 <a name="_sub100" href="#_subfunctions" class="code">function coefs = cepsfromspectra(specfilename,ncepestral)</a>
- 2554 load(<span class="string">'-mat'</span>,specfilename);
- 2555 sbase = (mean(min(exp(Spre))) + mean(min(exp(Spost)))) / 2; <span class="comment">% might not be a good</span>
- 2556 <span class="comment">% baseline because of</span>
- 2557 <span class="comment">% the intensity of the</span>
- 2558 <span class="comment">% sound around the syllable that</span>
- 2559 <span class="comment">% is why I took the average</span>
- 2560 <span class="comment">% minimum value</span>
- 2561
- 2562 <span class="comment">%Sdiff = S - sbase;</span>
- 2563
- 2564 Sdiff = exp(S) - sbase; <span class="comment">% arithmetic average</span>
- 2565 spectra = log(mean(Sdiff')); <span class="comment">% average across time to generate spectra</span>
- 2566
- 2567 <span class="comment">%spectra=mean(Sdiff');</span>
- 2568
- 2569 cepstrum = real(ifft(spectra));
- 2570
- 2571 <span class="comment">% alternative methods for computing the cepstrum</span>
- 2572 <span class="comment">%real(fft(hamming(length(spectra) .* spectra )));</span>
- 2573 <span class="comment">%cepstrum = real(fft(spectra))</span>
- 2574
- 2575 coefs = cepstrum(1:ncepestral); <span class="comment">% this I understand is the</span>
- 2576 <span class="comment">% correct way</span>
- 2577
- 2578 <a name="_sub101" href="#_subfunctions" class="code">function classifymatrix = generate_classify_mat(handles)</a>
- 2579 classifymatrix = zeros(handles.nsegments,handles.nfeatures+1);
- 2580 <span class="keyword">for</span> i = 1:handles.nsegments
- 2581 seglength = handles.segments(i).end - handles.segments(i).start;
- 2582 classifymatrix(i,1:1+handles.nfeatures) = [seglength handles.segments(i).features(1:handles.nfeatures)'];
- 2583 <span class="keyword">end</span>
- 2584 ;
- 2585
- 2586 <a name="_sub102" href="#_subfunctions" class="code">function handles = generate_classes_auto(handles,classification)</a>
- 2587 nclasses = length(unique(classification));
- 2588 classesfound = zeros(nclasses,1); <span class="comment">% used to check which classes exist</span>
- 2589 handles.classes = [];
- 2590 handles.nclasses = 0;
- 2591 j = 1;
- 2592 <span class="keyword">for</span> i = 1:handles.nsegments
- 2593 <span class="keyword">if</span> classification(i) == 0 <span class="comment">% segment has not been classified</span>
- 2594 handles.segments(i).class = <span class="string">''</span>;
- 2595 <span class="keyword">else</span>
- 2596 <span class="keyword">if</span> isempty(classesfound(find(classesfound == classification(i)))) <span class="comment">% a new class is found</span>
- 2597 class.specfilename = handles.segments(i).specfilename;
- 2598 class.name = <a href="#_sub10" class="code" title="subfunction class_string = newclassname(handles)">newclassname</a>(handles);
- 2599 class.index = i;
- 2600 class.length = handles.segments(i).end - handles.segments(i).start;
- 2601 class.iconS = handles.IconList{i};
- 2602 class.nmembers = 1;
- 2603 handles.segments(i).class = class.name;
- 2604 handles.classes = [handles.classes class];
- 2605 classesfound(j) = classification(i);
- 2606 j = j + 1;
- 2607 handles.nclasses = handles.nclasses + 1;
- 2608 <span class="keyword">else</span> <span class="comment">% segment belongs to a class that already exists</span>
- 2609 classindex = find(classification(i) == classesfound);
- 2610 handles.segments(i).class = handles.classes(classindex).name;
- 2611 handles.classes(classindex).nmembers = handles.classes(classindex).nmembers + 1;
- 2612 <span class="keyword">end</span>
- 2613 <span class="keyword">end</span>
- 2614 <span class="keyword">end</span>
- 2615 ;
- 2616
- 2617 <span class="comment">% --- Executes on button press in AutoClassifyButton.</span>
- 2618 <a name="_sub103" href="#_subfunctions" class="code">function AutoClassifyButton_Callback(hObject, eventdata, handles)</a>
- 2619 <span class="comment">% hObject handle to AutoClassifyButton (see GCBO)</span>
- 2620 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 2621 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 2622
- 2623 <span class="keyword">if</span> length(handles.segments(1).features) == 0; <span class="comment">% compute cepestral coefficients if not computed before</span>
- 2624 handles = <a href="#_sub99" class="code" title="subfunction handles = features_segments(handles)">features_segments</a>(handles);
- 2625 <span class="keyword">end</span>
- 2626
- 2627 matrix2classify = <a href="#_sub101" class="code" title="subfunction classifymatrix = generate_classify_mat(handles)">generate_classify_mat</a>(handles);
- 2628
- 2629 classification = <a href="auto_classify.html" class="code" title="function varargout = auto_classify(varargin)">auto_classify</a>(matrix2classify,handles.nfeatures);
- 2630
- 2631 <span class="keyword">if</span> length(classification) > 1 <span class="comment">%&& not(classification == 0)</span>
- 2632 <span class="keyword">if</span> not(isempty(handles.classes))
- 2633 answer = questdlg(<span class="string">'A classification already exists. Do you want to replace the current classification?'</span>);
- 2634 <span class="keyword">if</span> strcmp(answer,<span class="string">'Yes'</span>)
- 2635 handles = <a href="#_sub102" class="code" title="subfunction handles = generate_classes_auto(handles,classification)">generate_classes_auto</a>(handles,classification);
- 2636 <span class="keyword">end</span>
- 2637 <span class="keyword">else</span>
- 2638 handles = <a href="#_sub102" class="code" title="subfunction handles = generate_classes_auto(handles,classification)">generate_classes_auto</a>(handles,classification);
- 2639
- 2640 <span class="keyword">end</span>
- 2641
- 2642 handles=<a href="#_sub58" class="code" title="subfunction handles = configureclassview(handles,submode)">configureclassview</a>(handles,<span class="string">'select'</span>);
- 2643 set(handles.ClassifyButton,<span class="string">'String'</span>,<span class="string">'Declassify'</span>); <span class="comment">% all classes are now classified</span>
- 2644 set(handles.RemoveClassButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
- 2645 set(handles.RemoveClassButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 2646 set(handles.CompareToggleButton,<span class="string">'Visible'</span>,<span class="string">'on'</span>);
- 2647 set(handles.CompareToggleButton,<span class="string">'Enable'</span>,<span class="string">'on'</span>);
- 2648 set(handles.TypifyClassButton, <span class="string">'Visible'</span>, <span class="string">'off'</span>);
- 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>])
- 2650 <span class="comment">%</span>
- 2651 <span class="comment">% set(handles.ModePopupMenu,'Value',3);</span>
- 2652 <span class="comment">%</span>
- 2653 <span class="comment">% ModePopupMenu_Callback(handles.ModePopupMenu,eventdata, handles);</span>
- 2654 <span class="comment">% handles.mode = 'class-view';</span>
- 2655 <span class="comment">% handles.submode = 'select';</span>
- 2656
- 2657 <span class="keyword">end</span>
- 2658 guidata(gcbo,handles);
- 2659
- 2660
- 2661 <span class="comment">% --------------------------------------------------------------------</span>
- 2662 <a name="_sub104" href="#_subfunctions" class="code">function FileMenu_Callback(hObject, eventdata, handles)</a>
- 2663 <span class="comment">% hObject handle to FileMenu (see GCBO)</span>
- 2664 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 2665 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 2666
- 2667
- 2668 <span class="comment">% --------------------------------------------------------------------</span>
- 2669 <a name="_sub105" href="#_subfunctions" class="code">function SaveItem_Callback(hObject, eventdata, handles)</a>
- 2670 <span class="comment">% hObject handle to SaveItem (see GCBO)</span>
- 2671 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 2672 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 2673
- 2674 <a href="#_sub70" class="code" title="subfunction SaveButton_Callback(hObject, eventdata, handles)">SaveButton_Callback</a>(hObject, eventdata, handles)
- 2675
- 2676 <span class="comment">% --------------------------------------------------------------------</span>
- 2677 <a name="_sub106" href="#_subfunctions" class="code">function LoadItem_Callback(hObject, eventdata, handles)</a>
- 2678 <span class="comment">% hObject handle to LoadItem (see GCBO)</span>
- 2679 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 2680 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 2681
- 2682 <a href="#_sub27" class="code" title="subfunction PrecomputeButton_Callback(hObject, eventdata, handles)">PrecomputeButton_Callback</a>(hObject, eventdata, handles)
- 2683
- 2684 <span class="comment">%guidata(gcbo,handles)</span>
- 2685
- 2686 <span class="comment">% --------------------------------------------------------------------</span>
- 2687 <a name="_sub107" href="#_subfunctions" class="code">function HelpMenu_Callback(hObject, eventdata, handles)</a>
- 2688 <span class="comment">% hObject handle to HelpMenu (see GCBO)</span>
- 2689 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 2690 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 2691
- 2692
- 2693 <span class="comment">% --------------------------------------------------------------------</span>
- 2694 <a name="_sub108" href="#_subfunctions" class="code">function HelpItem_Callback(hObject, eventdata, handles)</a>
- 2695 <span class="comment">% hObject handle to HelpItem (see GCBO)</span>
- 2696 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 2697 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 2698
- 2699 web(<span class="string">'classify_spectra_help.html'</span>);
- 2700
- 2701 <span class="comment">% --------------------------------------------------------------------</span>
- 2702 <a name="_sub109" href="#_subfunctions" class="code">function AboutItem_Callback(hObject, eventdata, handles)</a>
- 2703 <span class="comment">% hObject handle to AboutItem (see GCBO)</span>
- 2704 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 2705 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 2706
- 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>);
- 2708
- 2709
- 2710 <span class="comment">% --------------------------------------------------------------------</span>
- 2711 <a name="_sub110" href="#_subfunctions" class="code">function ConfigureItem_Callback(hObject, eventdata, handles)</a>
- 2712 <span class="comment">% hObject handle to ConfigureItem (see GCBO)</span>
- 2713 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 2714 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 2715
- 2716 <a href="#_sub95" class="code" title="subfunction ConfigureButton_Callback(hObject, eventdata, handles)">ConfigureButton_Callback</a>(hObject, eventdata, handles)
- 2717
- 2718 <a name="_sub111" href="#_subfunctions" class="code">function coefs = cepcoefs(data,p)</a>
- 2719 <span class="comment">% Computes the cepstral coefficients from the data returns p coefficients</span>
- 2720 coefs = [];
- 2721 <span class="keyword">if</span> p > 0
- 2722 y = fft(hamming(length(data)) .* data);
- 2723 coefs = aryule(ifft(log(abs(y))),p);
- 2724 <span class="keyword">end</span>
- 2725
- 2726 <a name="_sub112" href="#_subfunctions" class="code">function generate_output(handles,absolutetime,filename);</a>
- 2727
- 2728 filebasetosave = filename(1:length(filename)-4);
- 2729
- 2730 matrixoutput = cell(handles.nsegments,1);
- 2731
- 2732 <span class="keyword">for</span> i = 1:handles.nsegments
- 2733 segment = handles.segments(i);
- 2734
- 2735 <span class="keyword">if</span> absolutetime
- 2736 dstr = regexp(segment.wavfile,<span class="string">'[0-9]+\-[0-9]+\-[0-9]+'</span>,<span class="string">'match'</span>);
- 2737 dstr = dstr{1}; <span class="comment">% take first match only</span>
- 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>);
- 2739 tstr = tstr{1};
- 2740 tstr = [tstr(1:2) <span class="string">':'</span> tstr(3:4) <span class="string">':'</span> tstr(5:6)];
- 2741 segmentstart = datenum([dstr <span class="string">' '</span> tstr]) + segment.start;
- 2742 segmentstart = datevec(segmentstart);
- 2743 <span class="keyword">else</span>
- 2744 segmentstart = segment.start;
- 2745 <span class="keyword">end</span>
- 2746 matrixoutput{i} = {segment.wavfile,segment.class,segmentstart,segment.end - segment.start,segment.features};
- 2747 <span class="keyword">end</span>
- 2748
- 2749 save([filebasetosave <span class="string">'.mat'</span>],<span class="string">'-mat'</span>,<span class="string">'matrixoutput'</span>,<span class="string">'-mat'</span>);
- 2750
- 2751 delimiter = <span class="string">'\t'</span>;
- 2752 fp = fopen([filebasetosave <span class="string">'.txt'</span>],<span class="string">'wt'</span>);
- 2753
- 2754 <span class="comment">% Generate header for file</span>
- 2755
- 2756 fprintf(fp,<span class="string">'filename'</span>);fprintf(fp,delimiter);
- 2757 fprintf(fp,<span class="string">'class'</span>);fprintf(fp,delimiter);
- 2758
- 2759 <span class="keyword">if</span> absolutetime
- 2760 fprintf(fp,<span class="string">'year'</span>);fprintf(fp,delimiter);
- 2761 fprintf(fp,<span class="string">'month'</span>);fprintf(fp,delimiter);
- 2762 fprintf(fp,<span class="string">'day'</span>);fprintf(fp,delimiter);
- 2763 fprintf(fp,<span class="string">'hour'</span>);fprintf(fp,delimiter);
- 2764 fprintf(fp,<span class="string">'minute'</span>);fprintf(fp,delimiter);
- 2765 fprintf(fp,<span class="string">'second'</span>);fprintf(fp,delimiter);
- 2766 <span class="keyword">else</span>
- 2767 fprintf(fp,<span class="string">'start'</span>);fprintf(fp,delimiter);
- 2768 <span class="keyword">end</span>
- 2769
- 2770 fprintf(fp,<span class="string">'length'</span>);fprintf(fp,delimiter);
- 2771
- 2772 <span class="keyword">for</span> i = 1:handles.nfeatures
- 2773 fprintf(fp,[<span class="string">'d'</span> num2str(i)]);
- 2774 <span class="keyword">if</span> i < handles.nfeatures;
- 2775 fprintf(fp,delimiter);
- 2776 <span class="keyword">else</span>
- 2777 fprintf(fp,<span class="string">'\n'</span>);
- 2778 <span class="keyword">end</span>
- 2779 <span class="keyword">end</span>
- 2780
- 2781
- 2782 <span class="comment">% Generate main data</span>
- 2783
- 2784 <span class="keyword">for</span> i = 1:handles.nsegments
- 2785 segment = handles.segments(i);
- 2786 fprintf(fp,[<span class="string">'"'</span> segment.wavfile <span class="string">'"'</span>]);fprintf(fp,delimiter);
- 2787 fprintf(fp,[<span class="string">'"'</span> segment.class <span class="string">'"'</span>]);fprintf(fp,delimiter);
- 2788
- 2789 <span class="keyword">if</span> absolutetime
- 2790 time = matrixoutput{i}{3};
- 2791
- 2792 fprintf(fp,num2str(time(1)));fprintf(fp,delimiter);
- 2793 fprintf(fp,num2str(time(2)));fprintf(fp,delimiter);
- 2794 fprintf(fp,num2str(time(3)));fprintf(fp,delimiter);
- 2795 fprintf(fp,num2str(time(4)));fprintf(fp,delimiter);
- 2796 fprintf(fp,num2str(time(5)));fprintf(fp,delimiter);
- 2797 fprintf(fp,num2str(time(6)));
- 2798
- 2799 <span class="keyword">else</span>
- 2800 fprintf(fp,num2str(segment.start));
- 2801 <span class="keyword">end</span>
- 2802
- 2803 fprintf(fp,delimiter);
- 2804 fprintf(fp,num2str(segment.end-segment.start));fprintf(fp,delimiter);
- 2805
- 2806 <span class="keyword">for</span> j = 1:handles.nfeatures
- 2807 fprintf(fp,num2str(segment.features(j)));
- 2808 <span class="keyword">if</span> j < handles.nfeatures <span class="comment">% handle eol formatting</span>
- 2809 fprintf(fp,delimiter);
- 2810 <span class="keyword">else</span>
- 2811 <span class="keyword">if</span> i < handles.nsegments <span class="comment">% handle eof formatting</span>
- 2812 fprintf(fp,<span class="string">'\n'</span>);
- 2813 <span class="keyword">end</span>
- 2814 <span class="keyword">end</span>
- 2815 <span class="keyword">end</span>
- 2816 <span class="keyword">end</span>
- 2817 fclose(fp);
- 2818 <span class="comment">% --------------------------------------------------------------------</span>
- 2819 <a name="_sub113" href="#_subfunctions" class="code">function ExportDataItem_Callback(hObject, eventdata, handles)</a>
- 2820 <span class="comment">% hObject handle to ExportDataItem (see GCBO)</span>
- 2821 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 2822 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 2823
- 2824 filename = uiputfile(<span class="string">'*.txt'</span>,<span class="string">'File to write exported data to'</span>);
- 2825
- 2826 <span class="keyword">if</span> not(filename == 0)
- 2827 <span class="keyword">if</span> length(handles.segments(1).features) == 0
- 2828 handles = <a href="#_sub99" class="code" title="subfunction handles = features_segments(handles)">features_segments</a>(handles);
- 2829 <span class="keyword">end</span>
- 2830 <a href="#_sub112" class="code" title="subfunction generate_output(handles,absolutetime,filename);">generate_output</a>(handles,1,filename);
- 2831 <span class="keyword">end</span>
- 2832
- 2833
- 2834 <span class="comment">% --------------------------------------------------------------------</span>
- 2835 <a name="_sub114" href="#_subfunctions" class="code">function CleanDirectoryItem_Callback(hObject, eventdata, handles)</a>
- 2836 <span class="comment">% hObject handle to CleanDirectoryItem (see GCBO)</span>
- 2837 <span class="comment">% eventdata reserved - to be defined in a future version of MATLAB</span>
- 2838 <span class="comment">% handles structure with handles and user data (see GUIDATA)</span>
- 2839
- 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>);
- 2841 <span class="keyword">if</span> strcmp(answer,<span class="string">'Yes'</span>);
- 2842 specfiles = dir(<span class="string">'*.spec'</span>);
- 2843
- 2844 <span class="keyword">for</span> i = 1:length(specfiles)
- 2845 delete(specfiles(i).name);
- 2846 <span class="keyword">end</span>
- 2847
- 2848
- 2849 <span class="keyword">if</span> exist(<span class="string">'class_spec.conf'</span>)
- 2850 delete(<span class="string">'class_spec.conf'</span>);
- 2851 <span class="keyword">end</span>
- 2852
- 2853 <span class="keyword">if</span> exist([handles.baseclassname <span class="string">'.dat'</span>])
- 2854 delete([handles.baseclassname <span class="string">'.dat'</span>]);
- 2855 <span class="keyword">end</span>
- 2856
- 2857
- 2858 <span class="keyword">end</span></pre></div>
- <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> © 2005</address>
- </body>
- </html>
|