This error was detected while a MEX-file was running. If the MEX-file is not an official MathWorks function, please examine its source code for errors. Please consult the External Interfaces Guide for information on debugging MEX-files.

106 views (last 30 days)
Here is the code I am running... I don't know anything about MatLAB so any explenation you have... pretend your explaining it to your mom. please help!!!
% Memory Efficient Principal Component Analysis of Large Mass Spectrometry
% Imaging Datasets
%
% Alan M. Race, Andrew D. Palmer, Rory T. Steven, Iain B. Styles, Josephine
% Bunch
% This relies on mex files and so a compiler must be installed prior to
% running this code and the following command must be run:
% mex -setup
% 'PAPER STEP:' indicates a named section that is described in the article
% 'CHANGE:' indicates lines that need to be changed based on personal setup
% Using imzMLConverter to parse and access imzML files. Please ensure that
% the the latest version is used
% Available from http://www.imzMLConverter.co.uk
% Add imzMLConverter JAR file to the class path so that we can use the
% methods implemented in it
% CHANGE: Make sure the path to imzMLConverter is correct
javaclasspath([pwd filesep 'imzMLConverter' filesep 'imzMLConverter.jar']);
% Parse the imzML file to load in header detail (such as the location of
% each spectrum)
% CHANGE: Change to the imzML file of choice
filename = [pwd filesep 'LEMS of Mild TBI_No blk.imzML'];
imzML = imzMLConverter.ImzMLHandler.parseimzML(filename);
nColumns = imzML.getWidth();
nRows = imzML.getHeight();
% PAPER STEP: Determine peak list
disp('Determining peak list...');
% If data is stored as m/z-count pairs then we need to replace
% zeros. This can be done in a number of ways, but this method assumes that
% the first spectrum in the image is well populated and that the smallest
% distance (on the time axis) between two values is the resolution of the
% detector. This, along with the m/z range used, allows us to calculate the
% m/z axis.
% CHANGE: This is designed for TOF data and will need to be altered to a
% suitable method for other mass analysers. The simplest method would be to
% use binning. If the data is stored in the imzML 'Continuous' format then
% the replacing of zeros can be removed
minMZ = 50;
maxMZ = 1250;
mzs = imzML.getSpectrum(1, 1).getmzArray();
counts = imzML.getSpectrum(1, 1).getIntensityArray();
[mzsFull, countsFull, detectorBinSize] = TOF(mzs, counts, minMZ, maxMZ);
% Generate 'basepeak spectrum' as described in
% Imaging Mass Spectrometry Data Reduction: Automated Feature Identification and Extraction
% McDonnell et al. 2010
% Described in supplimentary information
basepeakSpectrum = 0;
time = 0;
for y = 1:nRows
for x = 1:nColumns
% PAPER STEP: Read in spectrum
% Get the m/z list and the counts from the .ibd file
mzs = imzML.getSpectrum(x, y).getmzArray();
counts = imzML.getSpectrum(x, y).getIntensityArray();
% If we aren't dealing with a square image then no point
% pre-processing
if(isempty(counts))
continue;
end
% PAPER STEP: Pre-process spectrum
% CHANGE: Change if not analysing TOF data
[mzs, counts] = TOF(mzs, counts, minMZ, maxMZ, detectorBinSize);
% Smooth the spectrum
% CHANGE: If a different smoothing method or window size is
% required
[mzs, counts] = savitzkyGolay(mzs, counts, 25, 2);
basepeakSpectrum = max(basepeakSpectrum, counts);
end
end
% Smooth the basepeak spectrum
% CHANGE: If a different smoothing method or window size is required
[mzs, basepeakSpectrum] = savitzkyGolay(mzs, basepeakSpectrum, 25, 2);
% Get the peak list by peak picking
[mzList, countList, indicesList] = gradientPeakDetection(mzs, basepeakSpectrum);
disp('Creating summarisation matrices...');
nSpectra = 0;
L = zeros([length(mzList),1]);
Q = zeros(length(mzList)*(length(mzList)+1)/2, 1);
for y = 1:nRows
for x = 1:nColumns
% PAPER STEP: Read in spectrum
% Get the m/z list and the counts from the .ibd file
mzs = imzML.getSpectrum(x, y).getmzArray();
counts = imzML.getSpectrum(x, y).getIntensityArray();
% If we aren't dealing with a square image then no point
% pre-processing
if(isempty(counts))
continue;
end
% PAPER STEP: Pre-process spectrum
% CHANGE: Change if not analysing TOF data
[mzs, counts] = TOF(mzs, counts, minMZ, maxMZ, detectorBinSize);
% Smooth the spectrum
% CHANGE: If a different smoothing method or window size is
% required
[mzs, counts] = savitzkyGolay(mzs, counts, 25, 2);
% PAPER STEP: Update summarisation matrices
L = L + counts(indicesList);
% Attempt to update Q using the mex file update
try
Q = updateQ(Q, counts(indicesList));
catch exception
% Failed to call updateQ so compile all functions if a compiler
% is installed on the system
% Compiliing is different on Linux and Windows
if(isunix)
mex -largeArrayDims updateQ.c
mex -largeArrayDims calculateE.c
mex -largeArrayDims symmeig.c -lmwlapack
elseif(ispc)
ext = mexext;
arch = ext(end-1:end);
compiler = mex.getCompilerConfigurations().Manufacturer;
if(strcmp(compiler, 'LCC'))
folder = 'lcc';
elseif(strcmp(compiler, 'GNU'))
folder = 'GNU';
else
error('No compiler selected?');
end
lapacklib = fullfile(matlabroot, 'extern', 'lib', 'win64', 'mingw64', 'libmwlapack.lib');
mex('-largeArrayDims', 'symmeig.c', lapacklib)
mex('-largeArrayDims', 'updateQ.c')
mex('-largeArrayDims', 'calculateE.c')
end
% Update Q now the compilation has succeeded
Q = updateQ(Q, counts(indicesList));
end
nSpectra = nSpectra + 1;
end
end
% PAPER STEP: Calculate Σ
Q = calculateE(Q, L, nSpectra);
disp('Eigendecomposition of covariance matrix...');
% PAPER STEP: Eigendecomposition of covariance matrix
[lambda, coeff] = symmeig(Q, length(countList));
% Eigenvalues are returned in descending order, so to be compatibile with
% common assumptions, rearrange the eigenvalues and eigenvectors
lambda = lambda(end:-1:1);
coeff = coeff(:, end:-1:1);
explained = (cumsum(lambda) ./ sum(lambda)) * 100;
% CHANGE: variance to retain as a percentage
varianceToRetain = 99;
numPCs = sum(explained <= varianceToRetain);
disp('Calculating scores...');
% PAPER STEP: Calculate scores
scores = zeros(nRows, nColumns, numPCs);
for y = 1:nRows
for x = 1:nColumns
% PAPER STEP: Read in spectrum
% Get the m/z list and the counts from the .ibd file
mzs = imzML.getSpectrum(x, y).getmzArray();
counts = imzML.getSpectrum(x, y).getIntensityArray();
% If we aren't dealing with a square image then no point
% pre-processing
if(isempty(counts))
continue;
end
% PAPER STEP: Pre-process spectrum
% CHANGE: Change if not analysing TOF data
[mzs, counts] = TOF(mzs, counts, minMZ, maxMZ, detectorBinSize);
% Smooth the spectrum
% CHANGE: If a different smoothing method or window size is
% required
[mzs, counts] = savitzkyGolay(mzs, counts, 25, 2);
for p = 1:numPCs
scores(y, x, p) = counts(indicesList)' * coeff(:, p);
end
end
end
But every time I run, the program crashes with a "fatal expection"
--------------------------------------------------------------------------------
Access violation detected at Fri Mar 27 01:21:16 2020 -0400
--------------------------------------------------------------------------------
Configuration:
Crash Decoding : Disabled - No sandbox or build area path
Crash Mode : continue (default)
Default Encoding : windows-1252
Deployed : false
Graphics Driver : Unknown hardware
Graphics card 1 : NVIDIA ( 0x10de ) NVIDIA NVS 310 Version 10.18.13.6191 (2016-2-8)
Java Version : Java 1.8.0_152-b16 with Oracle Corporation Java HotSpot(TM) 64-Bit Server VM mixed mode
MATLAB Architecture : win64
MATLAB Entitlement ID : 1182280
MATLAB Root : C:\Program Files\MATLAB\R2018b
MATLAB Version : 9.5.0.1298439 (R2018b) Update 7
OpenGL : hardware
Operating System : Microsoft Windows 10 Enterprise
Process ID : 1624
Processor ID : x86 Family 6 Model 79 Stepping 1, GenuineIntel
Session Key : dbffb72d-6666-4282-9923-e0cea04f9764
Window System : Version 10.0 (Build 17763)
Fault Count: 1
Abnormal termination
Register State (from fault):
RAX = 00000002208d8820 RBX = ffffffffffffffff
RCX = ffffffffffffffff RDX = 0000000000000001
RSP = 00000000043f8cf0 RBP = 00000000043f8d10
RSI = 0000000000000baa RDI = 0000000000000000
R8 = 0000000000000000 R9 = 0000000000000000
R10 = 00000002208d8820 R11 = 0000000000000001
R12 = 0000000000000baa R13 = 0000000220c93250
R14 = 0000000000000002 R15 = 00000000043f8e90
RIP = 000000000b54152e EFL = 00010202
CS = 0033 FS = 0053 GS = 002b
Stack Trace (from fault):
[ 0] 0x000000000b54152e C:\Program Files\MATLAB\memoryEfficientPCA\updateQ.mexw64+00005422 mexFunction+00000142
[ 1] 0x00000000fc635474 bin\win64\libmex.dll+00349300 MexRetrieveVersion+00003348
[ 2] 0x00000000fc63566c bin\win64\libmex.dll+00349804 MexRetrieveVersion+00003852
[ 3] 0x00000000fc6357d4 bin\win64\libmex.dll+00350164 MexRetrieveVersion+00004212
[ 4] 0x00000000fc618fe9 bin\win64\libmex.dll+00233449 mexUnlock_800+00025273
[ 5] 0x000000001748e007 bin\win64\pgo\m_dispatcher.dll+00057351 Mfh_file::dispatch_fh_impl+00001111
[ 6] 0x000000001748da9e bin\win64\pgo\m_dispatcher.dll+00055966 Mfh_file::dispatch_fh+00000062
[ 7] 0x00000000182b2272 bin\win64\pgo\m_lxe.dll+00729714 mwboost::archive::detail::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>+00156298
[ 8] 0x000000001834d4dc bin\win64\pgo\m_lxe.dll+01365212 mwboost::archive::detail::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>+00791796
[ 9] 0x000000001834e0bc bin\win64\pgo\m_lxe.dll+01368252 mwboost::archive::detail::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>+00794836
[ 10] 0x000000001834f432 bin\win64\pgo\m_lxe.dll+01373234 mwboost::archive::detail::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>+00799818
[ 11] 0x0000000018350098 bin\win64\pgo\m_lxe.dll+01376408 mwboost::archive::detail::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>+00802992
[ 12] 0x000000001834f57f bin\win64\pgo\m_lxe.dll+01373567 mwboost::archive::detail::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>+00800151
[ 13] 0x000000001834f67e bin\win64\pgo\m_lxe.dll+01373822 mwboost::archive::detail::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>+00800406
[ 14] 0x00000000182783dd bin\win64\pgo\m_lxe.dll+00492509
[ 15] 0x00000000182b6be5 bin\win64\pgo\m_lxe.dll+00748517 mwboost::archive::detail::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>+00175101
[ 16] 0x00000000182b620c bin\win64\pgo\m_lxe.dll+00745996 mwboost::archive::detail::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>+00172580
[ 17] 0x00000000182b40f9 bin\win64\pgo\m_lxe.dll+00737529 mwboost::archive::detail::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>+00164113
[ 18] 0x00000000182b4a6b bin\win64\pgo\m_lxe.dll+00739947 mwboost::archive::detail::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>+00166531
[ 19] 0x00000000182b43c9 bin\win64\pgo\m_lxe.dll+00738249 mwboost::archive::detail::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>+00164833
[ 20] 0x000000001748e007 bin\win64\pgo\m_dispatcher.dll+00057351 Mfh_file::dispatch_fh_impl+00001111
[ 21] 0x000000001748da9e bin\win64\pgo\m_dispatcher.dll+00055966 Mfh_file::dispatch_fh+00000062
[ 22] 0x000000001827380d bin\win64\pgo\m_lxe.dll+00473101
[ 23] 0x00000000183fc356 bin\win64\pgo\m_lxe.dll+02081622 MathWorks::lxe::ShutdownLxeEngine+00021874
[ 24] 0x000000001834d4dc bin\win64\pgo\m_lxe.dll+01365212 mwboost::archive::detail::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>+00791796
[ 25] 0x000000001834e0bc bin\win64\pgo\m_lxe.dll+01368252 mwboost::archive::detail::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>+00794836
[ 26] 0x000000001834f432 bin\win64\pgo\m_lxe.dll+01373234 mwboost::archive::detail::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>+00799818
[ 27] 0x0000000018350098 bin\win64\pgo\m_lxe.dll+01376408 mwboost::archive::detail::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>+00802992
[ 28] 0x000000001834f57f bin\win64\pgo\m_lxe.dll+01373567 mwboost::archive::detail::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>+00800151
[ 29] 0x000000001834f67e bin\win64\pgo\m_lxe.dll+01373822 mwboost::archive::detail::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>+00800406
[ 30] 0x00000000182783dd bin\win64\pgo\m_lxe.dll+00492509
[ 31] 0x00000000182b6be5 bin\win64\pgo\m_lxe.dll+00748517 mwboost::archive::detail::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>+00175101
[ 32] 0x00000000182b620c bin\win64\pgo\m_lxe.dll+00745996 mwboost::archive::detail::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>+00172580
[ 33] 0x00000000182afc29 bin\win64\pgo\m_lxe.dll+00719913 mwboost::archive::detail::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>+00146497
[ 34] 0x00000000182af34e bin\win64\pgo\m_lxe.dll+00717646 mwboost::archive::detail::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>+00144230
[ 35] 0x00000000182af456 bin\win64\pgo\m_lxe.dll+00717910 mwboost::archive::detail::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>+00144494
[ 36] 0x000000001828cc38 bin\win64\pgo\m_lxe.dll+00576568 mwboost::archive::detail::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>+00003152
[ 37] 0x000000001828cbe6 bin\win64\pgo\m_lxe.dll+00576486 mwboost::archive::detail::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>+00003070
[ 38] 0x000000001828fe8d bin\win64\pgo\m_lxe.dll+00589453 mwboost::archive::detail::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>::oserializer<mwboost::archive::polymorphic_oarchive,foundation::msg_svc::eventmgr::BaseEvent>+00016037
[ 39] 0x00000000176e69e7 bin\win64\pgo\m_interpreter.dll+00354791 inEvalCmdWithLocalReturn+00000063
[ 40] 0x00000000fb610388 bin\win64\libmwbridge.dll+00131976 mnParser+00001304
[ 41] 0x0000000017283618 bin\win64\mcr.dll+00341528 mcr::runtime::setInterpreterThreadSingletonToCurrent+00020808
[ 42] 0x000000001728414d bin\win64\mcr.dll+00344397 mcr::runtime::setInterpreterThreadSingletonToCurrent+00023677
[ 43] 0x000000001724b1ba bin\win64\mcr.dll+00111034 mcrOptions::set_use_license_manager+00075498
[ 44] 0x0000000017266e74 bin\win64\mcr.dll+00224884 mcrOptions::set_use_license_manager+00189348
[ 45] 0x00000000fd02cfee bin\win64\iqm.dll+00643054 iqm::PackagedTaskPlugin::execute+00000894
[ 46] 0x00000000fd02ce63 bin\win64\iqm.dll+00642659 iqm::PackagedTaskPlugin::execute+00000499
[ 47] 0x00000000fcffcc07 bin\win64\iqm.dll+00445447 iqm::Iqm::setupIqmFcnPtrs+00076215
[ 48] 0x00000000fcffcc59 bin\win64\iqm.dll+00445529 iqm::Iqm::setupIqmFcnPtrs+00076297
[ 49] 0x00000000fcffca16 bin\win64\iqm.dll+00444950 iqm::Iqm::setupIqmFcnPtrs+00075718
[ 50] 0x00000000fcfd9748 bin\win64\iqm.dll+00300872 iqm::Iqm::deliver+00005880
[ 51] 0x00000000fcfd8eef bin\win64\iqm.dll+00298735 iqm::Iqm::deliver+00003743
[ 52] 0x00000000fcfdac0d bin\win64\iqm.dll+00306189 iqm::Iqm::deliver+00011197
[ 53] 0x0000000100203765 bin\win64\libmwservices.dll+02176869 services::system_events::PpeDispatchHook::dispatchOne+00036213
[ 54] 0x0000000100212a53 bin\win64\libmwservices.dll+02239059 sysq::addProcessPendingEventsUnitTestHook+00006035
[ 55] 0x0000000100214300 bin\win64\libmwservices.dll+02245376 sysq::getCondition+00004208
[ 56] 0x000000010021595d bin\win64\libmwservices.dll+02251101 svWS_ProcessPendingEvents+00000221
[ 57] 0x0000000017287724 bin\win64\mcr.dll+00358180 mcr::runtime::setInterpreterThreadSingletonToCurrent+00037460
[ 58] 0x0000000017287f16 bin\win64\mcr.dll+00360214 mcr::runtime::setInterpreterThreadSingletonToCurrent+00039494
[ 59] 0x000000001727cabf bin\win64\mcr.dll+00314047 mcr_process_events+00001007
[ 60] 0x000000001718d040 bin\win64\MVMLocal.dll+00380992 mvm_server::inproc::LocalFactory::terminate+00177312
[ 61] 0x00000000fa9d9480 bin\win64\mvm.dll+01741952 mvm::detail::SessionImpl::initWithOptions+00000592
[ 62] 0x00000000fa9da170 bin\win64\mvm.dll+01745264 mvm::detail::SessionImpl::runMain+00000128
[ 63] 0x00000000fa9da395 bin\win64\mvm.dll+01745813 mvm::detail::SessionImpl::runMatlabDesktop+00000261
[ 64] 0x0000000140007036 bin\win64\MATLAB.exe+00028726 mwboost::serialization::singleton_module::unlock+00000966
[ 65] 0x0000000140007f13 bin\win64\MATLAB.exe+00032531 mwboost::serialization::singleton_module::unlock+00004771
[ 66] 0x00007ffc36977974 C:\WINDOWS\System32\KERNEL32.DLL+00096628 BaseThreadInitThunk+00000020
[ 67] 0x00007ffc3947a261 C:\WINDOWS\SYSTEM32\ntdll.dll+00434785 RtlUserThreadStart+00000033
This error was detected while a MEX-file was running. If the MEX-file
is not an official MathWorks function, please examine its source code
for errors. Please consult the External Interfaces Guide for information
on debugging MEX-files.

Answers (1)

Sai Sri Pathuri
Sai Sri Pathuri on 6 May 2020

Categories

Find more on Image Processing Toolbox in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!