finished data overview
This commit is contained in:
parent
6e0098a273
commit
f2ee764f78
@ -54,6 +54,8 @@ cell;species;size/cm;weight/g;celltype;structure;quality;eodf/Hz;nspikesbase;dur
|
||||
2011-05-09-ac;Apteronotus leptorhynchus;14;5.1;P-unit;Nerve;good;651;8717;43.5205;200.352;0.356288;0.898526;1;-0.292144;0.0330479;0.000573658;0;0;1;0.05;gwn300Hz10s0.3.dat;300;10;20;196.908;0.388944;56.1839;31.7092;15.2219;250;2243.03;62.5;0.189958;760;246.094;1.40617;18623.2;1.68493;26208.7;100;191.406;1.34796;26113.4;1.14722;12981.8
|
||||
2011-05-09-ad;Apteronotus leptorhynchus;14;5.1;P-unit;Nerve;fair;652;284;1.895;150.921;0.405586;0.937424;1;-0.452188;0.185827;0;0;0;0;0.025;gwn300Hz10s0.3.dat;300;10;18;136.667;0.543337;94.4466;65.4348;35.514;62.5;7754.78;62.5;0.568056;684;171.875;1.2615;57214.4;1.61038;104614;100;167.969;1.23137;65339.3;1.11747;36554.4
|
||||
2011-05-09-ad;Apteronotus leptorhynchus;14;5.1;P-unit;Nerve;fair;652;284;1.895;150.921;0.405586;0.937424;1;-0.452188;0.185827;0;0;0;1;0.05;gwn300Hz10s0.3.dat;300;10;22;143.989;0.715416;133.971;98.8531;59.8686;42.9688;5104.07;35.1562;0.667093;836;101.562;1.0411;3507.66;1.77169;38702.4;100;171.875;1.28011;20880.7;1.24452;18749.2
|
||||
2011-06-09-aa;Apteronotus leptorhynchus;14;29.1;P-unit;ELL;fair;895;13474;48.6916;276.734;0.753887;0.729525;1;-0.625913;0.0270078;0.443405;0.562236;0.0027933;0;0.025;gwn300Hz10s0.3.dat;300;10;20;264.867;0.793139;84.9788;48.5737;18.7644;109.375;7560.26;35.1562;0.195563;760;246.094;1.34811;38691.5;1.12185;16275.2;100;250;1.18622;47798.7;0.948119;-16661.1
|
||||
2011-06-09-aa;Apteronotus leptorhynchus;14;29.1;P-unit;ELL;fair;895;13474;48.6916;276.734;0.753887;0.729525;1;-0.625913;0.0270078;0.443405;0.562236;0.0027933;1;0.05;gwn300Hz10s0.3.dat;300;10;17;256.17;0.822416;123.468;75.0721;32.4169;109.375;5830.27;35.1562;0.400585;646;273.438;1.14148;5458.53;1.04858;2040.57;100;273.438;1.37656;25485.3;1.08586;7366.38
|
||||
2011-09-21-ag;Apteronotus leptorhynchus;12;3.7;P-unit;Nerve;good;820;7871;39.6317;198.616;0.656076;0.804212;1;-0.523876;0.0346371;0.280305;0.405972;0.00304878;0;0.025;gwn300Hz10s0.3.dat;300;10;32;205.899;0.809146;148.75;103.912;55.8889;85.9375;11126.3;27.3438;0.625053;1216;160.156;1.22908;61088.9;2.27593;183750;100;167.969;1.16806;61789.7;1.19911;71311.3
|
||||
2011-09-21-ag;Apteronotus leptorhynchus;12;3.7;P-unit;Nerve;good;820;7871;39.6317;198.616;0.656076;0.804212;1;-0.523876;0.0346371;0.280305;0.405972;0.00304878;1;0.05;gwn300Hz10s0.3.dat;300;10;21;218.936;0.979172;208.051;152.699;90.9066;42.9688;7354.12;27.3438;0.765185;798;171.875;1.18795;18584.9;2.22361;64640.5;100;171.875;1.20545;22145.5;1.47301;41724.8
|
||||
2011-09-21-ag;Apteronotus leptorhynchus;12;3.7;P-unit;Nerve;good;820;7871;39.6317;198.616;0.656076;0.804212;1;-0.523876;0.0346371;0.280305;0.405972;0.00304878;2;0.1;gwn300Hz10s0.3.dat;300;10;21;232.293;1.15178;241.867;185.66;120.766;42.9688;4332.07;27.3438;0.799893;798;152.344;1.08885;2472.21;2.03615;15417.9;100;152.344;1.20105;6339.73;1.59797;14172.3
|
||||
@ -163,6 +165,11 @@ cell;species;size/cm;weight/g;celltype;structure;quality;eodf/Hz;nspikesbase;dur
|
||||
2014-01-16-ak;Apteronotus leptorhynchus;16.5;11.4;P-unit;Nerve;good;803;4833;32.8965;146.026;0.388509;0.831993;1;-0.597945;0.0464992;0.000206954;0;0;6;0.025;gwn300Hz50s0.3.dat;300;2;109;150.127;0.501016;84.5377;59.426;31.2727;85.9375;7533;7.8125;0.630868;763;128.906;1.43404;192674;3.48745;454049;100;148.438;1.36388;174396;1.82993;296458
|
||||
2014-01-16-ak;Apteronotus leptorhynchus;16.5;11.4;P-unit;Nerve;good;803;4833;32.8965;146.026;0.388509;0.831993;1;-0.597945;0.0464992;0.000206954;0;0;7;0.025;gwn300Hz50s0.3.dat;300;10;19;152.846;0.537061;81.0585;56.2449;30.4843;66.4062;6240.78;31.25;0.423078;722;97.6562;1.15027;27937.3;1.76619;92772.5;100;97.6562;1.08942;24205.5;1.08805;23866
|
||||
2014-01-16-ak;Apteronotus leptorhynchus;16.5;11.4;P-unit;Nerve;good;803;4833;32.8965;146.026;0.388509;0.831993;1;-0.597945;0.0464992;0.000206954;0;0;9;0.1;gwn300Hz50s0.3.dat;300;10;21;171.098;0.883342;161.665;124.731;81.6404;42.9688;3044.61;31.25;0.733596;798;97.6562;1.25881;5562.16;2.68272;16969.3;100;97.6562;1.4731;10809.1;1.81886;15152.2
|
||||
2017-07-18-ai-invivo-1;Apteronotus leptorhynchus;20;22.2;P-unit;Brain;fair;818;2861;36.5828;78.2019;0.219804;0.773615;1;-0.41238;0.0581656;0;0;0;1;0.05;gwn300Hz50s0.3.dat;300;5;11;78.7121;0.229273;40.1621;23.3562;10.258;109.375;1115.66;7.8125;0.106593;198;78.125;1.95326;32481.4;1.88599;31266;100;74.2188;2.18499;47720.4;1.8792;41167.4
|
||||
2017-07-18-ai-invivo-1;Apteronotus leptorhynchus;20;22.2;P-unit;Brain;fair;818;2861;36.5828;78.2019;0.219804;0.773615;1;-0.41238;0.0581656;0;0;0;2;0.05;gwn300Hz50s0.3.dat;300;5;11;77.7462;0.23126;41.0699;24.2334;10.4088;74.2188;865.595;19.5312;0.110018;198;74.2188;2.49523;44799;2.20323;40828.2;100;74.2188;2.74471;79599.1;2.56253;76355.6
|
||||
2017-07-18-aj-invivo-1;Apteronotus leptorhynchus;20;22.2;P-unit;Brain;good;819;7759;32.8963;235.86;0.511048;0.878734;1;-0.543585;0.0357745;0.188451;0.35834;0.0030525;0;0.05;gwn300Hz50s0.3.dat;300;5;11;236.383;0.613059;117.494;74.0283;38.8355;105.469;5049.65;74.2188;0.539207;198;265.625;1.74037;44236.8;1.59641;38848.9;100;265.625;1.63188;45139.2;1.35823;30746.6
|
||||
2017-07-18-aj-invivo-1;Apteronotus leptorhynchus;20;22.2;P-unit;Brain;good;819;7759;32.8963;235.86;0.511048;0.878734;1;-0.543585;0.0357745;0.188451;0.35834;0.0030525;2;0.05;gwn300Hz50s0.3.dat;300;5;11;195.417;0.510959;98.5897;61.8963;32.8746;101.562;3616.45;74.2188;0.527782;198;234.375;1.47955;30665.7;1.48993;31111.3;100;226.562;1.39227;31925.5;1.39603;32144.8
|
||||
2017-08-11-ac-invivo-1;Apteronotus leptorhynchus;21;28;P-unit;Brain;good;825.008;3520;23.1886;151.846;0.595287;0.796437;1;-0.761438;0.0537663;0.120205;0.361466;0.00303027;1;0.05;gwn300Hz50s0.3.dat;300;30;9;161.853;0.771081;144.085;100.247;51.8778;62.5;5251.75;35.1562;0.624437;1044;121.094;1.30406;17424.8;2.96927;49563.5;100;113.281;1.21317;17045.8;1.5764;35470.6
|
||||
2018-01-17-al;Apteronotus leptorhynchus;17.7;11.2;P-unit;Nerve;good;623;216;2.192;99.1812;0.438175;0.849832;1;-0.772001;0.207688;0.00465116;0;0;0;0.1;gwn300Hz10s0.3.dat;300;10;9;108.379;0.641427;106.892;79.2617;48.9961;42.9688;2009.31;27.3438;0.686444;342;82.0312;1.4171;6968.37;1.94005;11471.6;100;62.5;1.40851;7675.6;1.51149;8955.72
|
||||
2018-01-17-al;Apteronotus leptorhynchus;17.7;11.2;P-unit;Nerve;good;623;216;2.192;99.1812;0.438175;0.849832;1;-0.772001;0.207688;0.00465116;0;0;1;0.2;gwn300Hz10s0.3.dat;300;10;13;122.017;0.834812;142.706;107.964;70.3411;42.9688;1338.7;27.3438;0.743495;494;54.6875;1.30733;1990.68;2.4074;4950.52;100;54.6875;1.37534;2115.26;1.57162;2819.09
|
||||
2018-05-08-ac-invivo-1;Apteronotus leptorhynchus;15;11.6;P-unit;Nerve;good;655.007;2821;28.3956;99.3248;0.542125;0.807556;1;-0.455803;0.0581188;0.173759;0.173759;0.00229005;2;0.1;gwn300Hz50s0.3.dat;300;30;1;97.047;0.500584;144.277;87.9959;44.773;74.2188;1686.54;35.1562;0.575777;116;93.75;1.33043;4244.55;1.36008;4524.56;100;113.281;1.32736;4381.27;1.31167;4221.19
|
||||
@ -273,6 +280,7 @@ cell;species;size/cm;weight/g;celltype;structure;quality;eodf/Hz;nspikesbase;dur
|
||||
2018-09-11-ac;Apteronotus leptorhynchus;15;6.3;P-unit;Nerve;fair;853;9672;20.6031;469.444;0.362399;0.910264;1;-0.195644;0.0317853;0.339675;0;0;0;0.1;gwn300Hz10s0.3.dat;300;10;5;429.939;0.711532;221.853;140.947;77.7643;160.156;3840.58;62.5;0.724463;190;472.656;1.35906;7212.35;1.03028;802.239;100;507.812;1.22669;7248.95;1.30398;9144.24
|
||||
2018-09-11-ac;Apteronotus leptorhynchus;15;6.3;P-unit;Nerve;fair;853;9672;20.6031;469.444;0.362399;0.910264;1;-0.195644;0.0317853;0.339675;0;0;1;0.05;gwn300Hz10s0.3.dat;300;10;5;437.592;0.598379;182.422;108.442;55.2673;187.5;6781.8;39.0625;0.676537;190;496.094;1.30047;29131.6;1.25644;25733.9;100;496.094;1.28865;34556.1;1.30514;36068.5
|
||||
2018-11-14-am-invivo-1;Apteronotus leptorhynchus;17;12;P-unit;Nerve;good;656;6872;43.8272;156.885;1.23574;0.826627;1;-0.347898;0.0383464;0.668025;0.706156;0.00381098;0;0.1;gwn300Hz50s0.3.dat;300;2;17;173.399;1.37363;176.117;153.047;108.257;42.9688;4744.85;7.8125;0.647836;119;109.375;1.6796;17158.7;3.34867;29743.2;100;109.375;1.71234;18721.7;3.29195;31332.9
|
||||
2019-06-28-ae;Apteronotus leptorhynchus;19.5;13.3;P-unit;Brain;fair;772;10203;21.3806;477.299;0.533461;0.92693;1;-0.410122;0.0309234;0.628308;0.628308;0.00194301;0;0.1;gwn300Hz10s0.3.dat;300;9.99995;4;453.548;0.821653;253.968;180.163;107.09;62.5;4576.51;62.5;0.827763;152;449.219;2.58589;34339.8;2.18027;30311.3;100;449.219;3.11362;49951;2.72419;46572.6
|
||||
2020-10-20-ad-invivo-1;Apteronotus leptorhynchus;18.5;13;P-unit;Nerve;good;750;11028;33.4404;329.774;0.718599;0.875273;1;-0.327633;0.0293275;0.487984;0.692936;0.00333333;0;0.2;gwn300Hz10s0.3.dat;300;4.99998;10;225.564;0.8844;200.877;144.965;94.3593;35.1562;1625.41;62.5;0.680734;180;320.312;1.5039;3060.48;1.27973;1996.6;100;281.25;1.26366;1870.14;1.10909;881.567
|
||||
2020-10-20-ad-invivo-1;Apteronotus leptorhynchus;18.5;13;P-unit;Nerve;good;750;11028;33.4404;329.774;0.718599;0.875273;1;-0.327633;0.0293275;0.487984;0.692936;0.00333333;1;0.1;gwn300Hz10s0.3.dat;300;4.99998;10;311.418;0.983937;246.282;182.803;115.02;70.3125;4543.84;62.5;0.81405;180;292.969;1.36124;9344.45;1.18762;5562.72;100;281.25;1.27848;7705.18;1.08503;2771.99
|
||||
2020-10-20-ad-invivo-1;Apteronotus leptorhynchus;18.5;13;P-unit;Nerve;good;750;11028;33.4404;329.774;0.718599;0.875273;1;-0.327633;0.0293275;0.487984;0.692936;0.00333333;2;0.05;gwn300Hz10s0.3.dat;300;4.99998;10;327.939;0.963415;242.706;176.148;102.179;62.5;9465.03;74.2188;0.796408;180;292.969;1.34773;32187.9;1.07587;8797.52;100;281.25;1.22086;22779.9;0.980054;-2562.82
|
||||
@ -340,6 +348,9 @@ cell;species;size/cm;weight/g;celltype;structure;quality;eodf/Hz;nspikesbase;dur
|
||||
2021-11-08-ab-invivo-1;Apteronotus leptorhynchus;13;7.4;P-unit;Nerve;fair;569;13601;67.1191;202.647;0.766746;0.871713;1;-0.538159;0.0267509;0.524412;0.524412;0.0026362;7;0.01;gwn300Hz10s0.3.dat;300;2.99998;128;211.433;0.748173;27.567;18.4996;9.48383;74.2188;5665.97;74.2188;0.0186418;1280;183.594;1.26816;135528;1.11496;66085.6;100;171.875;1.55169;755746;1.1887;337437
|
||||
2021-11-08-ab-invivo-1;Apteronotus leptorhynchus;13;7.4;P-unit;Nerve;fair;569;13601;67.1191;202.647;0.766746;0.871713;1;-0.538159;0.0267509;0.524412;0.524412;0.0026362;9;0.01;gwn300Hz10s0.3.dat;300;2.99998;128;205.487;0.713511;26.3069;17.1856;8.79308;93.75;5505.25;74.2188;0.0179161;1280;175.781;1.53858;265363;1.34903;196134;100;167.969;1.44784;695760;1.21226;393853
|
||||
2021-11-08-ab-invivo-1;Apteronotus leptorhynchus;13;7.4;P-unit;Nerve;fair;569;13601;67.1191;202.647;0.766746;0.871713;1;-0.538159;0.0267509;0.524412;0.524412;0.0026362;10;0.1;gwn300Hz10s0.3.dat;300;2.99998;128;184.544;0.738135;114.253;78.2308;36.396;70.3125;2759.54;74.2188;0.429559;1280;183.594;1.83928;16302.4;2.72269;22604.8;100;160.156;1.36423;10306.1;1.48905;12678
|
||||
2021-12-17-ad-invivo-1;Apteronotus leptorhynchus;13;7.4;P-unit;Brain;awesome;515;21329;105.577;202.03;0.784883;0.892102;1;-0.630756;0.0205372;0.589366;0.589366;0.00291262;4;0.1;gwn300Hz10s0.3.dat;300;2.99998;128;208.035;0.849265;106.233;84.9637;49.4727;70.3125;2713.98;15.625;0.613851;1280;152.344;1.30333;3026.06;1.72795;5477.53;100;152.344;1.2192;3425.18;0.997097;-55.466
|
||||
2021-12-17-ad-invivo-1;Apteronotus leptorhynchus;13;7.4;P-unit;Brain;awesome;515;21329;105.577;202.03;0.784883;0.892102;1;-0.630756;0.0205372;0.589366;0.589366;0.00291262;7;0.01;gwn300Hz10s0.3.dat;300;2.99998;128;199.636;0.795489;23.7668;17.2737;9.68446;82.0312;5367.22;7.8125;0.0200051;1280;152.344;1.29197;122565;1.16064;75066.2;100;179.688;1.28896;412697;1.07346;125973
|
||||
2021-12-17-ad-invivo-1;Apteronotus leptorhynchus;13;7.4;P-unit;Brain;awesome;515;21329;105.577;202.03;0.784883;0.892102;1;-0.630756;0.0205372;0.589366;0.589366;0.00291262;9;0.1;gwn300Hz10s0.3.dat;300;2.99998;128;208.632;0.852708;108.014;86.1085;49.9415;70.3125;2692.54;15.625;0.590848;1280;152.344;1.29325;3134.46;1.71048;5741.72;100;160.156;1.34654;5846.13;1.16633;3239.57
|
||||
2022-01-05-aa-invivo-1;Apteronotus leptorhynchus;15.7;17;P-unit;Nerve;good;558;1272;12.4685;102.103;0.197405;0.782115;1;-0.285104;0.0889127;0.000786782;0;0;0;0.2;InputArr_400hz_30s.dat;400;30;4;105.361;0.777905;102.089;82.7035;63.4736;19.5312;1239.37;19.5312;0.6499;464;54.6875;1.83966;2119.66;2.20867;2541.42;100;54.6875;1.54132;1784.5;1.23771;975.842
|
||||
2022-01-05-ab-invivo-1;Apteronotus leptorhynchus;15.7;17;P-unit;Nerve;good;547;2803;24.508;114.486;0.727618;0.841286;1;-0.792328;0.0601174;0.383655;0.440757;0.00457038;0;0.2;InputArr_400hz_30s.dat;400;30;5;120.517;0.916766;135.742;105.305;65.2115;46.875;1465.99;19.5312;0.636699;580;70.3125;1.41944;2488.12;4.01395;6322.44;100;70.3125;1.47935;3549.8;2.35257;6298.54
|
||||
2022-01-05-ab-invivo-1;Apteronotus leptorhynchus;15.7;17;P-unit;Nerve;good;547;2803;24.508;114.486;0.727618;0.841286;1;-0.792328;0.0601174;0.383655;0.440757;0.00457038;1;0.2;InputArr_400hz_30s.dat;400;30;5;108.342;1.08766;126.749;104.683;69.9059;35.1562;1617.31;19.5312;0.55982;580;78.125;1.2457;1248.01;3.39563;4463.96;100;74.2188;1.41027;2714.48;2.28488;5247.11
|
||||
|
|
206
dataoverview.py
206
dataoverview.py
@ -92,7 +92,7 @@ def plot_corr(ax, data, xcol, ycol, zcol, zmin, zmax, xpdfmax, cmap, color,
|
||||
cb.outline.set_linewidth(0)
|
||||
# pdf x-axis:
|
||||
kde = gaussian_kde(xdata, 0.02*xmax/np.std(xdata, ddof=1))
|
||||
xx = np.linspace(0, ax.get_xlim()[1], 400)
|
||||
xx = np.linspace(ax.get_xlim()[0], ax.get_xlim()[1], 400)
|
||||
pdf = kde(xx)
|
||||
xax = ax.inset_axes([0, 1.05, 1, 0.2])
|
||||
xax.show_spines('')
|
||||
@ -102,7 +102,7 @@ def plot_corr(ax, data, xcol, ycol, zcol, zmin, zmax, xpdfmax, cmap, color,
|
||||
xax.set_ylim(0, xpdfmax)
|
||||
# pdf y-axis:
|
||||
kde = gaussian_kde(ydata, 0.02*ymax/np.std(ydata, ddof=1))
|
||||
xx = np.linspace(0, ax.get_ylim()[1], 400)
|
||||
xx = np.linspace(ax.get_ylim()[0], ax.get_ylim()[1], 400)
|
||||
pdf = kde(xx)
|
||||
yax = ax.inset_axes([1.05, 0, 0.2, 1])
|
||||
yax.show_spines('')
|
||||
@ -124,10 +124,106 @@ def plot_corr(ax, data, xcol, ycol, zcol, zmin, zmax, xpdfmax, cmap, color,
|
||||
if 'cvbase' in xcol:
|
||||
ax.text(1, 0.64, f'$n={data.rows()}$', ha='right',
|
||||
transform=ax.transAxes, fontsize='small')
|
||||
print(f' correlation {xcol:<8s} - {ycol}: r={r:5.2f}, p={p:.2g}')
|
||||
print(f' correlation {xcol:<8s} - {ycol}: r={r:5.2f}, p={p:.2e}')
|
||||
return cax
|
||||
|
||||
|
||||
def plot_corr_contrast(ax, data, xcol, ycol, xpdfmax, color,
|
||||
si_thresh, example=[], split_example=[], examples=[]):
|
||||
xdata = data[xcol]
|
||||
ydata = data[ycol]
|
||||
ax.axhline(si_thresh, color='k', ls=':', lw=0.5)
|
||||
xmax = ax.get_xlim()[1]
|
||||
ymax = ax.get_ylim()[1]
|
||||
mask = (xdata < xmax) & (ydata < ymax)
|
||||
if 'stimindex' in data:
|
||||
for cell, run in example + split_example + examples:
|
||||
mask &= ~((data['cell'] == cell) & (data['stimindex'] == run))
|
||||
else: # simulations
|
||||
for cell, alpha in example + split_example + examples:
|
||||
mask &= ~((data['cell'] == cell) & (data['contrast'] == alpha))
|
||||
contrasts = [[r'1\,\%', 0, 0.015, s.psC1],
|
||||
[r'3\,\%', 0.015, 0.035, s.psC3],
|
||||
[r'5\,\%', 0.035, 0.07, s.psC5],
|
||||
[r'10\,\%', 0.07, 0.15, s.psC10],
|
||||
[r'20\,\%', 0.15, 0.25, s.psC20]]
|
||||
for l, c0, c1, sc in contrasts:
|
||||
cmask = (data['contrast'] > c0) & (data['contrast'] < c1)
|
||||
label = f'{l} ({np.sum(cmask)})'
|
||||
cmask = cmask & mask
|
||||
#if np.sum(cmask) > 0:
|
||||
# ax.plot(xdata[cmask], ydata[cmask], label=l, clip_on=False,
|
||||
# alpha=0.6, zorder=np.random.randint(0, 50), **sc)
|
||||
for i in np.where(cmask)[0]:
|
||||
ax.plot(xdata[i], ydata[i], label=label, clip_on=False,
|
||||
alpha=0.7, zorder=np.random.randint(0, 50), **sc)
|
||||
label = None
|
||||
elw = 0.3
|
||||
for l, c0, c1, sc in contrasts:
|
||||
cmask = (data['contrast'] >= c0) & (data['contrast'] < c1)
|
||||
if 'stimindex' in data:
|
||||
for cell, run in example:
|
||||
mask = cmask & (data['cell'] == cell) & (data['stimindex'] == run)
|
||||
ax.plot(xdata[mask], ydata[mask], zorder=50, ms=4, marker='^',
|
||||
color=sc['color'], mew=elw, mec='black', clip_on=False)
|
||||
for cell, run in split_example:
|
||||
mask = cmask & (data['cell'] == cell) & (data['stimindex'] == run)
|
||||
ax.plot(xdata[mask], ydata[mask], zorder=51, ms=4, marker='s',
|
||||
color=sc['color'], mew=elw, mec='black', clip_on=False)
|
||||
for cell, run in examples:
|
||||
mask = cmask & (data['cell'] == cell) & (data['stimindex'] == run)
|
||||
ax.plot(xdata[mask], ydata[mask], zorder=52, ms=4, marker='o',
|
||||
color=sc['color'], mew=elw, mec='black', clip_on=False)
|
||||
else: # simulations
|
||||
for cell, alpha in example:
|
||||
mask = cmask & (data['cell'] == cell) & (data['contrast'] == alpha)
|
||||
ax.plot(xdata[mask], ydata[mask], zorder=50, ms=4, marker='^',
|
||||
color=sc['color'], mew=elw, mec='black', clip_on=False)
|
||||
for cell, alpha in split_example:
|
||||
mask = cmask & (data['cell'] == cell) & (data['contrast'] == alpha)
|
||||
ax.plot(xdata[mask], ydata[mask], zorder=51, ms=4, marker='s',
|
||||
color=sc['color'], mew=elw, mec='black', clip_on=False)
|
||||
for cell, alpha in examples:
|
||||
mask = cmask & (data['cell'] == cell) & (data['contrast'] == alpha)
|
||||
ax.plot(xdata[mask], ydata[mask], zorder=52, ms=4, marker='o',
|
||||
color=sc['color'], mew=elw, mec='black', clip_on=False)
|
||||
# pdf x-axis:
|
||||
kde = gaussian_kde(xdata, 0.02*xmax/np.std(xdata, ddof=1))
|
||||
xx = np.linspace(ax.get_xlim()[0], ax.get_xlim()[1], 400)
|
||||
pdf = kde(xx)
|
||||
xax = ax.inset_axes([0, 1.05, 1, 0.2])
|
||||
xax.show_spines('')
|
||||
xax.fill_between(xx, pdf, facecolor=color, edgecolor='none')
|
||||
#xax.plot(xx, np.zeros(len(xx)), clip_on=False, color=color, lw=0.5)
|
||||
xax.set_ylim(bottom=0)
|
||||
xax.set_ylim(0, xpdfmax)
|
||||
# pdf y-axis:
|
||||
kde = gaussian_kde(ydata, 0.02*ymax/np.std(ydata, ddof=1))
|
||||
xx = np.linspace(ax.get_ylim()[0], ax.get_ylim()[1], 400)
|
||||
pdf = kde(xx)
|
||||
yax = ax.inset_axes([1.05, 0, 0.17, 1])
|
||||
yax.show_spines('')
|
||||
yax.fill_betweenx(xx, pdf, facecolor=color, edgecolor='none')
|
||||
#yax.plot(np.zeros(len(xx)), xx, clip_on=False, color=color, lw=0.5)
|
||||
yax.set_xlim(left=0)
|
||||
# threshold:
|
||||
if 'cvbase' in xcol:
|
||||
ax.text(xmax, 0.4*ymax, f'{100*np.sum(ydata > si_thresh)/len(data):.0f}\\%',
|
||||
ha='right', va='bottom', fontsize='small')
|
||||
ax.text(xmax, 0.3, f'{100*np.sum(ydata < si_thresh)/len(data):.0f}\\%',
|
||||
ha='right', va='center', fontsize='small')
|
||||
# statistics:
|
||||
r, p = pearsonr(xdata, ydata)
|
||||
ax.text(1, 0.9, f'$R={r:.2f}$', ha='right',
|
||||
transform=ax.transAxes, fontsize='small')
|
||||
ax.text(1, 0.77, f'{significance_str(p)}', ha='right',
|
||||
transform=ax.transAxes, fontsize='small')
|
||||
if 'cvbase' in xcol:
|
||||
ax.text(1, 0.64, f'$n={data.rows()}$', ha='right',
|
||||
transform=ax.transAxes, fontsize='small')
|
||||
print(f' correlation {xcol:<8s} - {ycol}: r={r:5.2f}, p={p:.2e}')
|
||||
|
||||
|
||||
def si_stats(title, data, sicol, si_thresh, nsegscol):
|
||||
print(title)
|
||||
sidata = data[sicol]
|
||||
@ -176,7 +272,7 @@ def si_stats(title, data, sicol, si_thresh, nsegscol):
|
||||
if xcol not in data or ycol not in data:
|
||||
continue
|
||||
r, p = pearsonr(data[xcol], data[ycol])
|
||||
print(f' correlation {xcol:<11s} - {ycol:<11s}: r={r:5.2f}, p={p:.5f}')
|
||||
print(f' correlation {xcol:<11s} - {ycol:<11s}: r={r:5.2f}, p={p:.2e}')
|
||||
|
||||
|
||||
def plot_cvbase_si_punit(ax, data, ycol, si_thresh, color):
|
||||
@ -187,9 +283,11 @@ def plot_cvbase_si_punit(ax, data, ycol, si_thresh, color):
|
||||
ax.set_ylim(0, 6.5)
|
||||
ax.set_yticks_delta(2)
|
||||
examples = punit_examples if 'stimindex' in data else model_examples
|
||||
cax = plot_corr(ax, data, 'cvbase', ycol, 'respmod2', 0, 250, 3,
|
||||
'coolwarm', color, si_thresh, *examples)
|
||||
cax.set_ylabel('Response mod.', 'Hz')
|
||||
#cax = plot_corr(ax, data, 'cvbase', ycol, 'respmod2', 0, 250, 3,
|
||||
# 'coolwarm', color, si_thresh, *examples)
|
||||
#cax.set_ylabel('Response mod.', 'Hz')
|
||||
plot_corr_contrast(ax, data, 'cvbase', ycol, 3, color,
|
||||
si_thresh, *examples)
|
||||
|
||||
|
||||
def plot_cvstim_si_punit(ax, data, ycol, si_thresh, color):
|
||||
@ -203,15 +301,17 @@ def plot_cvstim_si_punit(ax, data, ycol, si_thresh, color):
|
||||
#cax = plot_corr(ax, data, 'cvstim', ycol, 'respmod2', 0, 250, 2,
|
||||
# 'coolwarm', color, si_thresh, *examples)
|
||||
#cax.set_ylabel('Response mod.', 'Hz')
|
||||
cax = plot_corr(ax, data, 'cvstim', ycol, 'cvbase', 0, 1.5, 2,
|
||||
'coolwarm', color, si_thresh, *examples)
|
||||
cax.set_ylabel('CV$_{\\rm base}$')
|
||||
#cax = plot_corr(ax, data, 'cvstim', ycol, 'cvbase', 0, 1.5, 2,
|
||||
# 'coolwarm', color, si_thresh, *examples)
|
||||
#cax.set_ylabel('CV$_{\\rm base}$')
|
||||
#cax = plot_corr(ax, data, 'cvstim', ycol, 'ratebase', 50, 450, 2,
|
||||
# 'coolwarm', color, si_thresh, *examples)
|
||||
#cax.set_ylabel('$r$', 'Hz')
|
||||
#cax = plot_corr(ax, data, 'cvstim', ycol, 'serialcorr1', -0.6, 0, 2,
|
||||
# 'coolwarm', color, si_thresh, *examples)
|
||||
#cax.set_ylabel('$\\rho_1$')
|
||||
plot_corr_contrast(ax, data, 'cvstim', ycol, 2, color,
|
||||
si_thresh, *examples)
|
||||
|
||||
|
||||
def plot_rmod_si_punit(ax, data, ycol, si_thresh, color):
|
||||
@ -222,9 +322,11 @@ def plot_rmod_si_punit(ax, data, ycol, si_thresh, color):
|
||||
ax.set_ylim(0, 6.5)
|
||||
ax.set_yticks_delta(2)
|
||||
examples = punit_examples if 'stimindex' in data else model_examples
|
||||
cax = plot_corr(ax, data, 'respmod2', ycol, 'cvbase', 0, 1.5, 0.016,
|
||||
'coolwarm', color, si_thresh, *examples)
|
||||
cax.set_ylabel('CV$_{\\rm base}$')
|
||||
#cax = plot_corr(ax, data, 'respmod2', ycol, 'cvbase', 0, 1.5, 0.016,
|
||||
# 'coolwarm', color, si_thresh, *examples)
|
||||
#cax.set_ylabel('CV$_{\\rm base}$')
|
||||
plot_corr_contrast(ax, data, 'respmod2', ycol, 0.016, color,
|
||||
si_thresh, *examples)
|
||||
|
||||
|
||||
def plot_rate_si_punit(ax, data, ycol, si_thresh, color):
|
||||
@ -235,9 +337,13 @@ def plot_rate_si_punit(ax, data, ycol, si_thresh, color):
|
||||
ax.set_ylim(0, 6.5)
|
||||
ax.set_yticks_delta(2)
|
||||
examples = punit_examples if 'stimindex' in data else model_examples
|
||||
cax = plot_corr(ax, data, 'ratebase', ycol, 'cvbase', 0, 1.5, 0.016,
|
||||
'coolwarm', color, si_thresh, *examples)
|
||||
cax.set_ylabel('CV$_{\\rm base}$')
|
||||
#cax = plot_corr(ax, data, 'ratebase', ycol, 'cvbase', 0, 1.5, 0.016,
|
||||
# 'coolwarm', color, si_thresh, *examples)
|
||||
#cax.set_ylabel('CV$_{\\rm base}$')
|
||||
plot_corr_contrast(ax, data, 'ratebase', ycol, 0.016, color,
|
||||
si_thresh, *examples)
|
||||
ax.legend(title='contrast', loc='upper right', bbox_to_anchor=(1.9, 1),
|
||||
markerfirst=False, handletextpad=0.5)
|
||||
|
||||
|
||||
def plot_cvbase_si_ampul(ax, data, ycol, si_thresh, color):
|
||||
@ -247,9 +353,11 @@ def plot_cvbase_si_ampul(ax, data, ycol, si_thresh, color):
|
||||
ax.set_ylabel('SI($r$)')
|
||||
ax.set_ylim(0, 10)
|
||||
ax.set_yticks_delta(2)
|
||||
cax = plot_corr(ax, data, 'cvbase', ycol, 'respmod2', 0, 80, 20,
|
||||
'coolwarm', color, si_thresh, *ampul_examples)
|
||||
cax.set_ylabel('Response mod.', 'Hz')
|
||||
#cax = plot_corr(ax, data, 'cvbase', ycol, 'respmod2', 0, 80, 20,
|
||||
# 'coolwarm', color, si_thresh, *ampul_examples)
|
||||
#cax.set_ylabel('Response mod.', 'Hz')
|
||||
plot_corr_contrast(ax, data, 'cvbase', ycol, 20, color,
|
||||
si_thresh, *ampul_examples)
|
||||
|
||||
|
||||
def plot_cvstim_si_ampul(ax, data, ycol, si_thresh, color):
|
||||
@ -262,14 +370,16 @@ def plot_cvstim_si_ampul(ax, data, ycol, si_thresh, color):
|
||||
#cax = plot_corr(ax, data, 'cvstim', ycol, 'respmod2', 0, 80, 6,
|
||||
# 'coolwarm', color, si_thresh, *ampul_examples)
|
||||
#cax.set_ylabel('Response mod.', 'Hz')
|
||||
cax = plot_corr(ax, data, 'cvstim', ycol, 'cvbase', 0, 0.2, 6,
|
||||
'coolwarm', color, si_thresh, *ampul_examples)
|
||||
cax.set_ylabel('CV$_{\\rm base}$')
|
||||
cax.set_yticks_delta(0.1)
|
||||
#cax = plot_corr(ax, data, 'cvstim', ycol, 'cvbase', 0, 0.2, 6,
|
||||
# 'coolwarm', color, si_thresh, *ampul_examples)
|
||||
#cax.set_ylabel('CV$_{\\rm base}$')
|
||||
#cax.set_yticks_delta(0.1)
|
||||
#cax = plot_corr(ax, data, 'cvstim', ycol, 'ratebase', 90, 180, 6,
|
||||
# 'coolwarm', color, si_thresh, *ampul_examples)
|
||||
#cax.set_ylabel('$r$', 'Hz')
|
||||
#cax.set_yticks_delta(30)
|
||||
plot_corr_contrast(ax, data, 'cvstim', ycol, 6, color,
|
||||
si_thresh, *ampul_examples)
|
||||
|
||||
|
||||
def plot_rmod_si_ampul(ax, data, ycol, si_thresh, color):
|
||||
@ -279,10 +389,12 @@ def plot_rmod_si_ampul(ax, data, ycol, si_thresh, color):
|
||||
ax.set_ylabel('SI($r$)')
|
||||
ax.set_ylim(0, 10)
|
||||
ax.set_yticks_delta(2)
|
||||
cax = plot_corr(ax, data, 'respmod2', ycol, 'cvbase', 0, 0.2, 0.06,
|
||||
'coolwarm', color, si_thresh, *ampul_examples)
|
||||
cax.set_ylabel('CV$_{\\rm base}$')
|
||||
cax.set_yticks_delta(0.1)
|
||||
#cax = plot_corr(ax, data, 'respmod2', ycol, 'cvbase', 0, 0.2, 0.06,
|
||||
# 'coolwarm', color, si_thresh, *ampul_examples)
|
||||
#cax.set_ylabel('CV$_{\\rm base}$')
|
||||
#cax.set_yticks_delta(0.1)
|
||||
plot_corr_contrast(ax, data, 'respmod2', ycol, 0.06, color,
|
||||
si_thresh, *ampul_examples)
|
||||
|
||||
|
||||
def plot_rate_si_ampul(ax, data, ycol, si_thresh, color):
|
||||
@ -292,10 +404,14 @@ def plot_rate_si_ampul(ax, data, ycol, si_thresh, color):
|
||||
ax.set_ylabel('SI($r$)')
|
||||
ax.set_ylim(0, 10)
|
||||
ax.set_yticks_delta(2)
|
||||
cax = plot_corr(ax, data, 'ratebase', ycol, 'cvbase', 0, 0.2, 0.06,
|
||||
'coolwarm', color, si_thresh, *ampul_examples)
|
||||
cax.set_ylabel('CV$_{\\rm base}$')
|
||||
cax.set_yticks_delta(0.1)
|
||||
#cax = plot_corr(ax, data, 'ratebase', ycol, 'cvbase', 0, 0.2, 0.06,
|
||||
# 'coolwarm', color, si_thresh, *ampul_examples)
|
||||
#cax.set_ylabel('CV$_{\\rm base}$')
|
||||
#cax.set_yticks_delta(0.1)
|
||||
plot_corr_contrast(ax, data, 'ratebase', ycol, 0.06, color,
|
||||
si_thresh, *ampul_examples)
|
||||
ax.legend(title='contrast', loc='upper right', bbox_to_anchor=(1.95, 1),
|
||||
markerfirst=False, handletextpad=0.5)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
@ -327,6 +443,14 @@ if __name__ == '__main__':
|
||||
print(f' CV model: min={np.min(cvmodel):4.2f} max={np.max(cvmodel):4.2f} median={np.median(cvmodel):4.2f}')
|
||||
print(f' CV data: min={np.min(cvdata):4.2f} max={np.max(cvdata):.2f} median={np.median(cvdata):4.2f}')
|
||||
print()
|
||||
ratemodel = punit_model['ratebase']
|
||||
ratedata = punit_data['ratebase']
|
||||
u, p = mannwhitneyu(ratemodel, ratedata)
|
||||
print('Baseline rate differs between P-unit models and data:')
|
||||
print(f' U={u:g}, p={p:.2g}')
|
||||
print(f' baseline rate model: min={np.min(ratemodel):3.0f}Hz max={np.max(ratemodel):3.0f}Hz median={np.median(ratemodel):3.0f}Hz')
|
||||
print(f' baseline rate data: min={np.min(ratedata):3.0f}Hz max={np.max(ratedata):3.0f}Hz median={np.median(ratedata):3.0f}Hz')
|
||||
print()
|
||||
rmmodel = punit_model['respmod2']
|
||||
rmdata = punit_data['respmod2']
|
||||
u, p = mannwhitneyu(rmmodel, rmdata)
|
||||
@ -343,12 +467,28 @@ if __name__ == '__main__':
|
||||
print(f' SI model: min={np.min(simodel):4.1f} max={np.max(simodel):4.1f} median={np.median(simodel):4.1f}')
|
||||
print(f' SI data: min={np.min(sidata):4.1f} max={np.max(sidata):4.1f} median={np.median(sidata):4.1f}')
|
||||
print()
|
||||
sipunit = punit_data['sinorm' + si]
|
||||
siampul = ampul_data['sinorm' + si]
|
||||
u, p = mannwhitneyu(sipunit, siampul)
|
||||
print('SI differs between P-units and Ampullaries:')
|
||||
print(f' U={u:g}, p={p:.2g}')
|
||||
print(f' SI P-units: min={np.min(sipunit):4.1f} max={np.max(sipunit):4.1f} median={np.median(sipunit):4.1f}')
|
||||
print(f' SI Ampullary: min={np.min(siampul):4.1f} max={np.max(siampul):4.1f} median={np.median(siampul):4.1f}')
|
||||
print()
|
||||
cvpunit = punit_data['cvbase']
|
||||
cvampul = ampul_data['cvbase']
|
||||
u, p = mannwhitneyu(cvpunit, cvampul)
|
||||
print('CV differs between P-units and Ampullaries:')
|
||||
print(f' U={u:g}, p={p:.2g}')
|
||||
print(f' CV P-units: min={np.min(cvpunit):4.2f} max={np.max(cvpunit):4.2f} median={np.median(cvpunit):4.2f}')
|
||||
print(f' CV Ampullary: min={np.min(cvampul):4.2f} max={np.max(cvampul):.2f} median={np.median(cvampul):4.2f}')
|
||||
print()
|
||||
|
||||
s = plot_style()
|
||||
fig, axs = plt.subplots(3, 3, cmsize=(s.plot_width, 0.75*s.plot_width),
|
||||
height_ratios=[1, 0, 1, 0.3, 1])
|
||||
fig.subplots_adjust(leftm=6.5, rightm=13.5, topm=4.5, bottomm=4,
|
||||
wspace=1.1, hspace=0.6)
|
||||
fig.subplots_adjust(leftm=6.5, rightm=18, topm=4.5, bottomm=4,
|
||||
wspace=0.6, hspace=0.6)
|
||||
|
||||
si_stats('P-unit model:', punit_model, 'dsinorm100', si_thresh,
|
||||
'nsegs100')
|
||||
|
@ -540,12 +540,10 @@ Estimating second-order susceptibilities reliably requires large numbers (millio
|
||||
|
||||
The second-order susceptibility matrices that are based on only 100 segments look flat and noisy, lacking the triangular structure (\subfigref{fig:modelsusceptlown}{B}). The anti-diagonal ridge, however, where the sum of the stimulus frequencies matches the neuron's baseline firing rate, seems to be present whenever the converged estimate shows a clear triangular structure (compare \subfigref{fig:modelsusceptlown}{B} and \subfigref{fig:modelsusceptlown}{A}). The SI($r$) characterizes the height of the ridge in the second-oder susceptibility plane at the neuron's baseline firing rate $r$. Comparing SI($r$) values based on 100 FFT segements to the ones based on one or ten million segments for all 39 model cells (\subfigrefb{fig:modelsusceptlown}{C}) supports this impression. They correlate quite well at contrasts of 1\,\% and 3\,\% ($r=0.9$, $p\ll 0.001$). At a contrast of 10\,\% this correlation is weaker ($r=0.38$, $p<0.05$), because there are only three cells left with SI($r$) values greater than 1.2. Despite the good correlations, care has to be taken to set a threshold on the SI($r$) values for deciding whether a triangular structure would emerge for a much higher number of segments. Because at low number of segments the estimates are noisier, there could be false positives for a too low threshold. Setting the threshold to 1.8 avoids false positives for the price of a few false negatives.
|
||||
|
||||
Overall, observing SI($r$) values greater than about 1.8, even for a number of FFT segments as low as one hundred, seems to be a reliable indication for a triangular structure in the second-order susceptibility at the corresponding stimulus contrast. Small stimulus contrasts of 1\,\% are less informative, because of their bad signal-to-noise ratio. \notejb{Explain what we can read off from n=100} Intermediate stimulus contrasts around 3\,\% seem to be optimal, because there, most cells still have a triangular structure in their susceptibility and the signal-to-noise ratio is better. At RAM stimulus contrasts of 10\,\% or higher the signal-to-noise ratio is even better, but only few cells remain with weak triangularly shaped susceptibilities that might be missed as a false positives.
|
||||
Overall, observing SI($r$) values greater than about 1.8, even for a number of FFT segments as low as one hundred, seems to be a reliable indication for a triangular structure in the second-order susceptibility at the corresponding stimulus contrast. Small stimulus contrasts of 1\,\% are less informative, because of their bad signal-to-noise ratio. Intermediate stimulus contrasts around 3\,\% seem to be optimal, because there, most cells still have a triangular structure in their susceptibility and the signal-to-noise ratio is better. At RAM stimulus contrasts of 10\,\% or higher the signal-to-noise ratio is even better, but only few cells remain with weak triangularly shaped susceptibilities that might be missed as a false positives.
|
||||
|
||||
\begin{figure*}[tp]
|
||||
\includegraphics[width=\columnwidth]{dataoverview}
|
||||
\notejb{use color code for contrasts}
|
||||
\notejb{add inset wih distribution of contrasts}
|
||||
\caption{\label{fig:dataoverview} Nonlinear responses in P-units and
|
||||
ampullary afferents. The second-order susceptibility is condensed
|
||||
into the susceptibility index, SI($r$) \eqnref{eq:nli_equation},
|
||||
@ -553,65 +551,56 @@ Overall, observing SI($r$) values greater than about 1.8, even for a number of F
|
||||
stimulus frequencies add up to the cell's baseline firing rate $r$
|
||||
(see \subfigrefb{fig:punit}{G}). In both the models and the
|
||||
experimental data, the SI($r$) was estimated based on 100 FFT
|
||||
segments \notejb{dt and nfft}. The SI($r$) is plotted against the
|
||||
cells' CV of its baseline interspike intervals (left column), the
|
||||
response modulation (standard deviation of firing rate evoked
|
||||
by the band-limited white-noise stimulus) --- a measure of
|
||||
effective stimulus strength (center column), and the CV of the
|
||||
interspike intervals during stimulation with the white-noise
|
||||
stimulus (right column). Pearson's correlation coefficient $R$ and
|
||||
the number of data points $n$ are indicated; all correlations are
|
||||
significant at a level below $p=0.0006$. Kernel-density estimates
|
||||
of the distributions of the displayed quantities are plotted on
|
||||
top and right. Data points are color coded by CV$_{\text{base}}$
|
||||
or response modulation as indicated by the color bars. The
|
||||
horizontal dashed line marks a threshold for SI($r$) values at 1.8
|
||||
and the percentages to the right denote the fractions above and
|
||||
below this threshold. \figitem{A} The SI($r$) of all 39 model
|
||||
P-units (table~\ref{modelparams}) measured at contrasts of 1, 3,
|
||||
and 10\,\% of RAM stimuli with a cutoff frequency of 300\,Hz. The
|
||||
segments. The SI($r$) is plotted against the cells' CV of its
|
||||
baseline interspike intervals (left column), the response
|
||||
modulation (standard deviation of firing rate evoked by the
|
||||
band-limited white-noise stimulus) --- a measure of effective
|
||||
stimulus strength (center column), and the cell's baseline firing
|
||||
rate (right column). Pearson's correlation coefficient $R$, the
|
||||
corresponding significance level $p$ and the number of samples $n$
|
||||
are indicated. Kernel-density estimates of the distributions of
|
||||
the displayed quantities are plotted on top and right. Data points
|
||||
are color coded by stimulus contrasts, which are listed together
|
||||
with the corresponding number of samples in the legend to the
|
||||
right. The horizontal dashed line marks a threshold for SI($r$)
|
||||
values at 1.8 and the percentages to the right denote the
|
||||
fractions of samples above and below this threshold. \figitem{A}
|
||||
The SI($r$) of all 39 model P-units (table~\ref{modelparams})
|
||||
measured with RAM stimuli with a cutoff frequency of 300\,Hz. The
|
||||
black square marks the cell from \subfigrefb{fig:noisesplit}{C},
|
||||
the circles the four cells shown in
|
||||
\subfigref{fig:modelsusceptcontrasts}{A--D}, and the triangle the
|
||||
cell from \subfigref{fig:modelsusceptlown}{A--B}.
|
||||
\figitem{B}
|
||||
Electrophysiological data from 159 P-units. Each cell contributes
|
||||
on average with 2 (min. 1, max. 6) RAM stimulus presentations to
|
||||
the $n=329$ data points. The RAMs with cutoff frequency of 300\,Hz
|
||||
were presented at contrasts ranging from 2.5\,\% to 20\,\%
|
||||
(average 8\,\%). The two black triangles mark the responses of the
|
||||
example P-unit from \subfigrefb{fig:punit}{E,F}, the circles the
|
||||
other four examples from \subfigrefb{fig:punit}{H}, and the
|
||||
triangle the unit from \subfigrefb{fig:noisesplit}{A}.
|
||||
\figitem{C} Recordings from 30 ampullary afferents, each
|
||||
contributing on average 3 (min. 1, max. 7) RAM stimulus
|
||||
presentations to $n=89$ data points. Stimuli had a cutoff
|
||||
frequency of 150\,Hz and their contrasts ranged from 2.5\,\% to
|
||||
20\,\% (average 7\,\%). The two black triangles mark the
|
||||
responses of the example ampullary afferent from
|
||||
cell from \subfigref{fig:modelsusceptlown}{A--B}. \figitem{B}
|
||||
Electrophysiological data from 172 P-units. Each cell contributes
|
||||
on average with 2 (min. 1, max. 10) RAM stimulus presentations to
|
||||
the $n=376$ data points. The RAMs had cutoff frequencies of
|
||||
300\,Hz (352 samples) and 400\,Hz (24 samples). The two black
|
||||
triangles mark the responses of the example P-unit from
|
||||
\subfigrefb{fig:punit}{E,F}, the circles the other four examples
|
||||
from \subfigrefb{fig:punit}{H}, and the triangle the unit from
|
||||
\subfigrefb{fig:noisesplit}{A}. \figitem{C} Recordings from 30
|
||||
ampullary afferents, each contributing on average 3 (min. 1,
|
||||
max. 7) RAM stimulus presentations to $n=89$ data points. Stimuli
|
||||
had a cutoff frequency of 150\,Hz. The two black triangles mark
|
||||
the responses of the example ampullary afferent from
|
||||
\subfigrefb{fig:ampullary}{E,F}, and the circles the other four
|
||||
examples from \subfigrefb{fig:ampullary}{H}.}
|
||||
\end{figure*}
|
||||
|
||||
\subsection{Low CVs and weak stimuli are associated with distinct nonlinearity in recorded electroreceptive neurons}
|
||||
Now we are prepared to evaluate our pool of 39 P-unit model cells, 166 P-units, and 30 ampullary afferents recorded in 76 specimen of \textit{Apteronotus leptorhynchus}. For comparison across cells we condensed the structure of the second-order susceptibilities into SI($r$) values, \eqnref{eq:nli_equation}.
|
||||
\subsection{Low CVs and weak responses predict weakly nonlinear responses}
|
||||
Now we are prepared to evaluate our pool of 39 P-unit model cells, 172 P-units, and 30 ampullary afferents recorded in 80 specimen of \textit{Apteronotus leptorhynchus}. For comparison across cells we condensed the structure of the second-order susceptibilities into SI($r$) values, \eqnref{eq:nli_equation}. In order to make the data comparable, both model and experimental SI($r$) estimates, \eqnref{eq:nli_equation}, are based on 100 FFT segments.
|
||||
|
||||
In the P-unit models, each model cell contributed with three RAM stimulus presentations with contrasts of 1, 3, and 10\,\%, resulting in $n=117$ data points. 19 (16\,\%) had SI($r$) values larger than 1.8, indicating the expected ridges at the baseline firing rate in their second-order susceptiility . The lower the cell's baseline CV, i.e. the less intrinsic noise, the higher the SI($r$) (\figrefb{fig:dataoverview}\,\panel[i]{A}). Also, the lower the response modulation, i.e. the weaker the effective stimulus, the higher the S($r$) (\figrefb{fig:dataoverview}\,\panel[ii]{A}). Cells with high SI($r$) values are the ones with baseline firing rate below 200\,Hz (\figrefb{fig:dataoverview}\,\panel[iii]{A}). In comparison to the experimentally measured P-unit recordings, the model cells are skewed to lower baseline CVs (Mann-Whitney $U=12924$, $p=1.3\times 10^{-7}$), because the models are not able to reproduce bursting, which we observe in many P-units and which leads to high CVs. Also the response modulation of the models is skewed to lower values (Mann-Whitney $U=12846$, $p=9.1\times 10^{-8}$), because in the measured cells, response modulation is positively correlated with baseline CV \notejb{(XXX)}, i.e. bursting cells are more sensitive. \notejb{check baseline firing rate differences.}
|
||||
In the P-unit models, each model cell contributed with three RAM stimulus presentations with contrasts of 1, 3, and 10\,\%, resulting in $n=117$ data points. 19 (16\,\%) had SI($r$) values larger than 1.8, indicating the expected ridges at the baseline firing rate in their second-order susceptiility. The lower the cell's baseline CV, i.e. the less intrinsic noise, the higher the SI($r$) (\figrefb{fig:dataoverview}\,\panel[i]{A}).
|
||||
|
||||
The effective stimulus strength also plays a role in predicting the SI($r$) values. We quantify the effect of stimulus strength on a cell's response by the response modulation --- the standard deviation of a cell's firing rate in response to a RAM stimulus. The lower the response modulation, i.e. the weaker the effective stimulus, the higher the S($r$) (\figrefb{fig:dataoverview}\,\panel[ii]{A}). Although there is a tendency of low stimulus contrasts to evoke lower response modulations, response modulations evoked by each of the three contrasts overlap substantially, emphasizing the strong heterogeneity of the P-units' sensitivity \citep{Grewe2017}. Cells with high SI($r$) values are the ones with baseline firing rate below 200\,Hz (\figrefb{fig:dataoverview}\,\panel[iii]{A}).
|
||||
|
||||
\notejb{We need to know which contrasts}
|
||||
In comparison to the experimentally measured P-unit recordings, the model cells are skewed to lower baseline CVs (Mann-Whitney $U=13986$, $p=3\times 10^{-9}$), because the models are not able to reproduce bursting, which we observe in many P-units and which leads to high CVs. Also the response modulation of the models is skewed to lower values (Mann-Whitney $U=15312$, $p=7\times 10^{-7}$), because in the measured cells, response modulation is positively correlated with baseline CV (Pearson $R=0.45$, $p=1\times 10^{-19}$), i.e. bursting cells are more sensitive. Median baseline firing rate in the models is by 53\,Hz smaller than in the experimental data (Mann-Whitney $U=17034$, $p=0.0002$).
|
||||
|
||||
In the experimentally measured P-units, each of the $172$ units contributes on average with two RAM stimulus presentations, presented at contrasts ranging from 1 to 20\,\% to the 376 samples. Despite the mentioned differences between the P-unit models and the measured data, the SI($r$) values do not differ between models and data (median of 1.3, Mann-Whitney $U=19702$, $p=0.09$) and also 16\,\% of the samples from all presented stimulus contrasts exceed the threshold of 1.8. The SI($r$) values of the P-unit population correlate weakly with the CV of the baseline ISIs that range from 0.18 to 1.35 (median 0.49). Cells with lower baseline CVs tend to have more pronounced ridges in their second-order susceptibilites than those with higher baseline CVs (\figrefb{fig:dataoverview}\,\panel[i]{B}).
|
||||
|
||||
Three P-units stand out with \nli{} values exceeding two, but additional \notejb{XXX} cells have \nli{} values greater than 1.8. Based on our insights from the P-unit models these would have the expected triangular structure in their susceptibilities when estimated with a sufficiently high number of segments. However, we can only speculate how many of the cells with lower \nli{} values are false negatives. \notejb{because also many have been measured at too strong contrasts}.
|
||||
The \nli{} values of the P-unit population correlate weakly with the CV of the baseline ISIs. Cells with lower baseline CVs tend to have more pronounced peaks in their projections than those that have high baseline CVs (\subfigrefb{fig:dataoverview}{A}). This negative correlation is more pronounced against the CV measured during stimulation (\subfigrefb{fig:dataoverview}{C}).
|
||||
|
||||
The effective stimulus strength also plays an important role. We quantify the effect of stimulus strength on a cell's response by the response modulation --- the standard deviation of a cell's firing rate in response to a RAM stimulus. P-units are heterogeneous in their sensitivity, their response modulations to the same stimulus contrast vary a lot \citep{Grewe2017}. Cells with weak responses to a stimulus, be it an insensitive cell or a weak stimulus, have higher \nli{} values and thus a more pronounced ridge in the second-order susceptibility at \fsumb{} in comparison to strongly responding cells that basically have flat second-order susceptibilities (\subfigrefb{fig:dataoverview}{E}). How pronounced nonlinear response components are in P-units thus depends on the baseline CV (a proxy for the internal noise level), and both the CV and response strength during stimulation (effective output noise).
|
||||
%(Pearson's $r=-0.35$, $p<0.001$)221 P-units and 47 (Pearson's $r=-0.16$, $p<0.01$)
|
||||
%In a P-unit population where each cell is represented not by several contrasts but by the lowest recorded contrast, \nli{} significantly correlates with the CV during baseline ($r=-0.17$, $p=0.01$), the response modulation ($r=-0.35$, $p<0.001$) and \fbase{} ($r=-0.32$, $p<0.001$).%, $\n{}=221$*, $\n{}=221$******, $\n{}=221$
|
||||
|
||||
The population of ampullary cells is generally more homogeneous, with lower baseline CVs than P-units. Accordingly, \nli{} values of ampullary cells are indeed much higher than in P-units by about a factor of ten. \notejb{XXX (percent)} ampullary cells with values greater than 1.8 would have a triangular structure in their second-order susceptibilities. Ampullary cells also show a negative correlation with baseline CV. Again, sensitive cells with strong response modulations are at the bottom of the distribution and have \nli{} values close to one (\subfigrefb{fig:dataoverview}{B, D}). The weaker the response modulation, because of less sensitive cells or weaker stimulus amplitudes, the stronger the nonlinear component of a cell's response (\subfigrefb{fig:dataoverview}{F}).
|
||||
%(Pearson's $r=-0.35$, $p < 0.01$) (Pearson's $r=-0.59$, $p < 0.0001$)
|
||||
Samples with weak responses to a stimulus, be it an insensitive P-unit or a weak stimulus, have higher SI($r$) values and thus a more pronounced ridge in the second-order susceptibility in comparison to strongly responding cells, most of them having flat second-order susceptibilities (\figrefb{fig:dataoverview}\,\panel[ii]{B}). P-units with low or high baseline firing rates can have large SI($r$) (\figrefb{fig:dataoverview}\,\panel[iii]{B}). How pronounced nonlinear response components are in P-units thus depends on the baseline CV (a proxy for the internal noise level), and the response strength during stimulation (effective output noise).
|
||||
|
||||
The population of ampullary cells is generally more homogeneous, with lower baseline CVs than P-units (Mann-Whitney $U=33464$, $p=9\times 10^{-49}$). Accordingly, SI($r$) values of ampullary cells (median 2.3) are indeed higher than in P-units (median 1.3, Mann-Whitney $U=6450$, $p=2\times 10^{-19}$). 52 samples (58\,\%) with SI($r$) values greater than 1.8 would have a triangular structure in their second-order susceptibilities. Ampullary cells also show a negative correlation with baseline CV, despite their narrow distribution of CVs ranging from 0.03 to 0.15 (median 0.09) (\figrefb{fig:dataoverview}\,\panel[i]{C}). Again, sensitive cells with stronger response modulations are at the bottom of the SI($r$) distribution with values close to one (\figrefb{fig:dataoverview}\,\panel[ii]{C}). As in P-units, baseline firing rate does not predict SI($r$) values (\figrefb{fig:dataoverview}\,\panel[iii]{C}).
|
||||
|
||||
\begin{figure*}[t]
|
||||
\includegraphics[width=\columnwidth]{model_full.pdf}
|
||||
|
16
plotstyle.py
16
plotstyle.py
@ -8,10 +8,8 @@ from plottools.colors import lighter, darker
|
||||
|
||||
|
||||
def significance_str(p):
|
||||
if p > 0.05:
|
||||
if p > 0.01:
|
||||
return f'$p={p:.2f}$'
|
||||
elif p > 0.01:
|
||||
return '$p<0.05$'
|
||||
elif p > 0.001:
|
||||
return '$p<0.01$'
|
||||
elif p > 0.0001:
|
||||
@ -129,9 +127,15 @@ def plot_style():
|
||||
pt.make_line_styles(ns, 'ls', 'Median', '', palette['black'], '-', lwthick)
|
||||
pt.make_line_styles(ns, 'ls', 'Max', '', palette['black'], '-', lwmid)
|
||||
|
||||
ns.lsStim = dict(color='gray', lw=ns.lwmid)
|
||||
ns.lsRaster = dict(color='black', lw=ns.lwthin)
|
||||
ns.lsPower = dict(color='gray', lw=ns.lwmid)
|
||||
ns.psC1 = dict(color=palette['red'], marker='o', linestyle='none', markersize=3, mec='none', mew=0)
|
||||
ns.psC3 = dict(color=palette['orange'], marker='o', linestyle='none', markersize=3, mec='none', mew=0)
|
||||
ns.psC5 = dict(color=palette['yellow'], marker='o', linestyle='none', markersize=3, mec='none', mew=0)
|
||||
ns.psC10 = dict(color=palette['lightgreen'], marker='o', linestyle='none', markersize=3, mec='none', mew=0)
|
||||
ns.psC20 = dict(color=palette['blue'], marker='o', linestyle='none', markersize=3, mec='none', mew=0)
|
||||
|
||||
ns.lsStim = dict(color=palette['gray'], lw=ns.lwmid)
|
||||
ns.lsRaster = dict(color=palette['black'], lw=ns.lwthin)
|
||||
ns.lsPower = dict(color=palette['gray'], lw=ns.lwmid)
|
||||
ns.lsF0 = dict(color='blue', lw=ns.lwthick)
|
||||
ns.lsF01 = dict(color='green', lw=ns.lwthick)
|
||||
ns.lsF02 = dict(color='purple', lw=ns.lwthick)
|
||||
|
Loading…
Reference in New Issue
Block a user