praat_DataModeler_init.cpp 55 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308
  1. /* praat_DataModeler_init.cpp
  2. *
  3. * Copyright (C) 2014-2017 David Weenink
  4. *
  5. * This code is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation; either version 2 of the License, or (at
  8. * your option) any later version.
  9. *
  10. * This code is distributed in the hope that it will be useful, but
  11. * WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  13. * General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License
  16. * along with this work. If not, see <http://www.gnu.org/licenses/>.
  17. */
  18. #include "praatP.h"
  19. #include "DataModeler.h"
  20. #include "Formant_extensions.h"
  21. #include "OptimalCeilingTierEditor.h"
  22. #include "Pitch.h"
  23. #include "Table_extensions.h"
  24. #include <math.h>
  25. #undef iam
  26. #define iam iam_LOOP
  27. /* DataModeler */
  28. FORM (NEW1_DataModeler_createSimple, U"Create simple DataModeler", nullptr) {
  29. WORD (name, U"Name", U"dm")
  30. REAL (xmin, U"left X range", U"0.0")
  31. REAL (xmax, U"right X range", U"1.0")
  32. NATURAL (numberOfDataPoints, U"Number of data points", U"20")
  33. SENTENCE (parameter_string, U"Parameters", U"0.0 1.0 1.0")
  34. POSITIVE (standardDeviation, U"Gaussian noise stdev", U"0.2")
  35. OPTIONMENU (functionType, U"Basis functions", 2)
  36. OPTION (U"Polynomial")
  37. OPTION (U"Legendre")
  38. OK
  39. DO
  40. CREATE_ONE
  41. autoDataModeler result = DataModeler_createSimple (xmin, xmax, numberOfDataPoints, parameter_string, standardDeviation, functionType - 1);
  42. CREATE_ONE_END (name)
  43. }
  44. FORM (GRAPHICS_DataModeler_speckle, U"DataModeler: Speckle", nullptr) {
  45. REAL (xmin, U"left X range", U"0.0")
  46. REAL (xmax, U"right X range", U"0.0")
  47. REAL (ymin, U"left Y range", U"0.0")
  48. REAL (ymax, U"right Y range", U"0.0")
  49. BOOLEAN (errorBars, U"Draw error bars", 1)
  50. REAL (barWidth_mm, U"Bar width (mm)", U"1.0")
  51. REAL (xOffset_mm, U"Horizontal offset (mm)", U"0.0")
  52. BOOLEAN (garnish, U"Garnish", true)
  53. OK
  54. DO
  55. integer order = 6;
  56. GRAPHICS_EACH (DataModeler)
  57. DataModeler_speckle (me, GRAPHICS, xmin, xmax,ymin, ymax, 0, order + 1, errorBars, barWidth_mm, xOffset_mm, garnish);
  58. GRAPHICS_EACH_END
  59. }
  60. FORM (GRAPHICS_DataModeler_drawEstimatedTrack, U"DataModeler: Draw estimated track", nullptr) {
  61. REAL (xmin, U"left X range", U"0.0")
  62. REAL (xmax, U"right X range", U"0.0")
  63. REAL (ymin, U"left Y range", U"0.0")
  64. REAL (ymax, U"right Y range", U"0.0")
  65. INTEGER (order, U"Order of polynomials for estimation", U"3")
  66. REAL (xOffset, U"Horizontal offset (mm)", U"0.0")
  67. BOOLEAN (garnish, U"Garnish", true)
  68. OK
  69. DO
  70. Melder_require (order >= 0, U"The order should be at least zero.");
  71. GRAPHICS_EACH (DataModeler)
  72. DataModeler_drawTrack (me, GRAPHICS, xmin, xmax, ymin, ymax, 1, order + 1, xOffset, garnish);
  73. GRAPHICS_EACH_END
  74. }
  75. DIRECT (INTEGER_DataModeler_getNumberOfParameters) {
  76. INTEGER_ONE (DataModeler)
  77. integer result = my numberOfParameters;
  78. INTEGER_ONE_END (U" (= number of parameters)")
  79. }
  80. DIRECT (INTEGER_DataModeler_getNumberOfFixedParameters) {
  81. INTEGER_ONE (DataModeler)
  82. integer result = DataModeler_getNumberOfFixedParameters (me);
  83. INTEGER_ONE_END (U"(= number of parameters)")
  84. }
  85. FORM (REAL_DataModeler_getParameterValue, U"DataModeler: Get parameter value", nullptr) {
  86. NATURAL (parameterNumber, U"Parameter number", U"1")
  87. OK
  88. DO
  89. NUMBER_ONE (DataModeler)
  90. double result = DataModeler_getParameterValue (me, parameterNumber);
  91. NUMBER_ONE_END (U" (= parameter[", parameterNumber, U"])")
  92. }
  93. FORM (INFO_DataModeler_getParameterStatus, U"DataModeler: Get parameter status", nullptr) {
  94. NATURAL (parameterNumber, U"Parameter number", U"1")
  95. OK
  96. DO
  97. STRING_ONE (DataModeler)
  98. int status = DataModeler_getParameterStatus (me, parameterNumber);
  99. conststring32 result = ( status == DataModeler_PARAMETER_FREE ? U"Free" :
  100. status == DataModeler_PARAMETER_FIXED ? U"Fixed" : U"Undefined" );
  101. STRING_ONE_END
  102. }
  103. FORM (REAL_DataModeler_getParameterStandardDeviation, U"DataModeler: Get parameter standard deviation", nullptr) {
  104. NATURAL (parameterNumber, U"Parameter number", U"1")
  105. OK
  106. DO
  107. NUMBER_ONE (DataModeler)
  108. double result = DataModeler_getParameterStandardDeviation (me, parameterNumber);
  109. NUMBER_ONE_END (U" (= parameter[", parameterNumber, U"])")
  110. }
  111. FORM (REAL_DataModeler_getVarianceOfParameters, U"DataModeler: Get variance of parameters", nullptr) {
  112. INTEGER (fromParameter, U"left Parameter range", U"0")
  113. INTEGER (toParameter, U"right Parameter range", U"0")
  114. OK
  115. DO
  116. integer nofp;
  117. NUMBER_ONE (DataModeler)
  118. double result = DataModeler_getVarianceOfParameters (me, fromParameter, toParameter, &nofp);
  119. NUMBER_ONE_END (U" (for ", nofp, U" free parameters)")
  120. }
  121. DIRECT (INTEGER_DataModeler_getNumberOfDataPoints) {
  122. INTEGER_ONE (DataModeler)
  123. integer result = my numberOfDataPoints;
  124. INTEGER_ONE_END (U" (= number of data points)")
  125. }
  126. DIRECT (INTEGER_DataModeler_getNumberOfInvalidDataPoints) {
  127. INTEGER_ONE (DataModeler)
  128. integer result = DataModeler_getNumberOfInvalidDataPoints (me);
  129. INTEGER_ONE_END (U" (= number of invalid data points)")
  130. }
  131. FORM (REAL_DataModeler_getModelValueAtX, U"DataModeler: Get model value at x", nullptr) {
  132. REAL (x, U"X", U"0.1")
  133. OK
  134. DO
  135. NUMBER_ONE (DataModeler)
  136. double result = DataModeler_getModelValueAtX (me, x);
  137. NUMBER_ONE_END (U"")
  138. }
  139. DIRECT (REAL_DataModeler_getResidualSumOfSquares) {
  140. NUMBER_ONE (DataModeler)
  141. integer n;
  142. double result = DataModeler_getResidualSumOfSquares (me, &n);
  143. NUMBER_ONE_END (U" (for ", n, U" datapoints)")
  144. }
  145. DIRECT (REAL_DataModeler_getDataStandardDeviation) {
  146. NUMBER_ONE (DataModeler)
  147. double result = DataModeler_estimateSigmaY (me);
  148. NUMBER_ONE_END (U"")
  149. }
  150. FORM (REAL_DataModeler_getDataPointXValue, U"DataModeler: Get data point x value", nullptr) {
  151. NATURAL (index, U"Index", U"1")
  152. OK
  153. DO
  154. NUMBER_ONE (DataModeler)
  155. double result = DataModeler_getDataPointXValue (me, index);
  156. NUMBER_ONE_END (U" (= value at point ", index, U")")
  157. }
  158. FORM (REAL_DataModeler_getDataPointYValue, U"DataModeler: Get data point y value", nullptr) {
  159. NATURAL (index, U"Index", U"1")
  160. OK
  161. DO
  162. NUMBER_ONE (DataModeler)
  163. double result = DataModeler_getDataPointYValue (me, index);
  164. NUMBER_ONE_END (U" (= value at point ", index, U")")
  165. }
  166. FORM (REAL_DataModeler_getDataPointYSigma, U"DataModeler: Get data point y sigma", nullptr) {
  167. NATURAL (index, U"Index", U"1")
  168. OK
  169. DO
  170. NUMBER_ONE (DataModeler)
  171. double result = DataModeler_getDataPointYSigma (me, index);
  172. NUMBER_ONE_END (U" (= sigma at point ", index, U")")
  173. }
  174. FORM (INFO_DataModeler_getDataPointStatus, U"DataModeler: Get data point status", nullptr) {
  175. NATURAL (index, U"Index", U"1")
  176. OK
  177. DO
  178. STRING_ONE (DataModeler)
  179. int status = DataModeler_getDataPointStatus (me, index);
  180. conststring32 result = ( status == DataModeler_DATA_INVALID ? U"Invalid" : U"Valid" );
  181. STRING_ONE_END
  182. }
  183. DIRECT (REAL_DataModeler_getCoefficientOfDetermination) {
  184. NUMBER_ONE (DataModeler)
  185. double result = DataModeler_getCoefficientOfDetermination (me, nullptr, nullptr);
  186. NUMBER_ONE_END (U" (= R^2)");
  187. }
  188. FORM (INFO_DataModeler_reportChiSquared, U"DataModeler: Report chi squared", nullptr) {
  189. OPTIONMENUx (weighDataType, U"Weigh data", 2, 0)
  190. OPTION (U"Equally")
  191. OPTION (U"Sigma")
  192. OPTION (U"Relative")
  193. OPTION (U"Sqrt sigma")
  194. OK
  195. DO
  196. INFO_ONE (DataModeler)
  197. MelderInfo_open();
  198. DataModeler_reportChiSquared (me, weighDataType);
  199. MelderInfo_close();
  200. INFO_ONE_END
  201. }
  202. DIRECT (REAL_DataModeler_getDegreesOfFreedom) {
  203. NUMBER_ONE (DataModeler)
  204. double result = DataModeler_getDegreesOfFreedom (me);
  205. NUMBER_ONE_END (U" (= degrees of freedom)")
  206. }
  207. FORM (MODIFY_DataModeler_setDataWeighing, U"DataModeler: Set data weighing", nullptr) {
  208. OPTIONMENUx (weighDataType, U"Weigh data", 1, 0)
  209. OPTION (U"Equally")
  210. OPTION (U"Sigma")
  211. OPTION (U"Relative")
  212. OPTION (U"Sqrt sigma")
  213. OK
  214. DO
  215. MODIFY_EACH (DataModeler)
  216. DataModeler_setDataWeighing (me, weighDataType);
  217. MODIFY_EACH_END
  218. }
  219. FORM (MODIFY_DataModeler_setTolerance, U"DataModeler: Set tolerance", nullptr) {
  220. REAL (tolerance, U"Tolerance", U"1e-5")
  221. OK
  222. DO
  223. MODIFY_EACH (DataModeler)
  224. DataModeler_setTolerance (me, tolerance);
  225. MODIFY_EACH_END
  226. }
  227. FORM (MODIFY_DataModeler_setParameterValue, U"DataModeler: Set parameter value", nullptr) {
  228. NATURAL (parameterNumber, U"Parameter number", U"1")
  229. REAL (value, U"Value", U"0.0")
  230. OPTIONMENU (parameterStatus, U"Status", 1)
  231. OPTION (U"Free")
  232. OPTION (U"Fixed")
  233. OK
  234. DO
  235. MODIFY_EACH (DataModeler)
  236. DataModeler_setParameterValue (me, parameterNumber, value, parameterStatus - 1);
  237. MODIFY_EACH_END
  238. }
  239. FORM (MODIFY_DataModeler_setParameterFree, U"DataModeler: Set parameter free", nullptr) {
  240. INTEGER (fromParameter, U"left Parameter range", U"0")
  241. INTEGER (toParameter, U"right Parameter range", U"0")
  242. OK
  243. DO
  244. MODIFY_EACH (DataModeler)
  245. DataModeler_setParametersFree (me, fromParameter, toParameter);
  246. MODIFY_EACH_END
  247. }
  248. FORM (MODIFY_DataModeler_setParameterValuesToZero, U"DataModeler: Set parameter values to zero", nullptr) {
  249. REAL (numberOfSigmas, U"Number of sigmas", U"1.0")
  250. OK
  251. DO
  252. MODIFY_EACH (DataModeler)
  253. DataModeler_setParameterValuesToZero (me, numberOfSigmas);
  254. MODIFY_EACH_END
  255. }
  256. FORM (MODIFY_DataModeler_setDataPointStatus, U"DataModeler: Set data point status", nullptr) {
  257. NATURAL (index, U"Index", U"1")
  258. OPTIONMENU (dataStatus, U"Status", 1)
  259. OPTION (U"Valid")
  260. OPTION (U"Invalid")
  261. OK
  262. DO
  263. int status = dataStatus == 2 ? DataModeler_DATA_INVALID : DataModeler_DATA_VALID;
  264. MODIFY_EACH (DataModeler)
  265. DataModeler_setDataPointStatus (me, index, status);
  266. MODIFY_EACH_END
  267. }
  268. FORM (MODIFY_DataModeler_setDataPointXValue, U"DataModeler: Set data point x value", nullptr) {
  269. NATURAL (index, U"Index", U"1")
  270. REAL (x, U"X", U"0.0")
  271. OK
  272. DO
  273. MODIFY_EACH (DataModeler)
  274. DataModeler_setDataPointXValue (me, index, x);
  275. MODIFY_EACH_END
  276. }
  277. FORM (MODIFY_DataModeler_setDataPointYValue, U"DataModeler: Set data point y value", nullptr) {
  278. NATURAL (index, U"Index", U"1")
  279. REAL (y, U"Y", U"0.0")
  280. OK
  281. DO
  282. MODIFY_EACH (DataModeler)
  283. DataModeler_setDataPointYValue (me, index, y);
  284. MODIFY_EACH_END
  285. }
  286. FORM (MODIFY_DataModeler_setDataPointValues, U"DataModeler: Set data point values", nullptr) {
  287. NATURAL (index, U"Index", U"1")
  288. REAL (x, U"X", U"0.0")
  289. REAL (y, U"Y", U"0.0")
  290. OK
  291. DO
  292. MODIFY_EACH (DataModeler)
  293. DataModeler_setDataPointValues (me, index, x, y);
  294. MODIFY_EACH_END
  295. }
  296. FORM (MODIFY_DataModeler_setDataPointYSigma, U"DataModeler: Set data point y sigma", nullptr) {
  297. NATURAL (index, U"Index", U"1")
  298. REAL (sigma, U"Sigma", U"10.0")
  299. OK
  300. DO
  301. MODIFY_EACH (DataModeler)
  302. DataModeler_setDataPointYSigma (me, index, sigma);
  303. MODIFY_EACH_END
  304. }
  305. DIRECT (MODIFY_DataModeler_fitModel) {
  306. MODIFY_EACH (DataModeler)
  307. DataModeler_fit (me);
  308. MODIFY_EACH_END
  309. }
  310. DIRECT (NEW_DataModeler_to_Covariance_parameters) {
  311. CONVERT_EACH (DataModeler)
  312. autoCovariance result = DataModeler_to_Covariance_parameters (me);
  313. CONVERT_EACH_END (my name.get())
  314. }
  315. FORM (NEW_DataModeler_to_Table_zscores, U"DataModeler: To Table (z-scores)", nullptr) {
  316. BOOLEAN (useSigmaY, U"Use sigmas on y-values", 1)
  317. OK
  318. DO
  319. CONVERT_EACH (DataModeler)
  320. autoTable result = DataModeler_to_Table_zscores (me, useSigmaY);
  321. CONVERT_EACH_END (my name.get(), U"_z");
  322. }
  323. FORM (NEW_Formant_to_FormantModeler, U"Formant: To FormantModeler", nullptr) {
  324. //double tmin, double tmax, integer numberOfFormants, integer numberOfParametersPerTrack
  325. REAL (fromTime, U"left Start time", U"0.0")
  326. REAL (toTime, U"right End time", U"0.1")
  327. NATURAL (numberOfFormants, U"Number of formants", U"3")
  328. INTEGER (order, U"Order of polynomials", U"3")
  329. OPTIONMENUx (weighDataType, U"Weigh data", 2, 0)
  330. OPTION (U"Equally")
  331. OPTION (U"Bandwidth")
  332. OPTION (U"Bandwidth / frequency")
  333. OPTION (U"Sqrt bandwidth")
  334. OK
  335. DO
  336. Melder_require (order >= 0, U"The order should be at least zero.");
  337. CONVERT_EACH (Formant)
  338. autoFormantModeler result = Formant_to_FormantModeler (me, fromTime, toTime, numberOfFormants, order + 1, weighDataType);
  339. CONVERT_EACH_END (my name.get(), U"_o", order);
  340. }
  341. FORM (NEW1_Formants_extractSmoothestPart, U"Formants: Extract smoothest part", U"Formants: Extract smoothest part") {
  342. REAL (fromTime, U"left Time range (s)", U"0.0")
  343. REAL (toTime, U"right Time range (s)", U"0.0")
  344. NATURAL (numberOfFormantTracks, U"Number of formant tracks", U"4")
  345. INTEGER (order, U"Order of polynomials", U"3")
  346. LABEL (U"Use bandwidths to model the formant tracks:")
  347. OPTIONMENUx (weighDataType, U"Weigh data", 2, 0)
  348. OPTION (U"Equally")
  349. OPTION (U"Bandwidth")
  350. OPTION (U"Bandwidth / frequency")
  351. OPTION (U"Sqrt bandwidth")
  352. LABEL (U"Zero parameter values whose range include zero:")
  353. REAL (numberOfSigmas, U"Number of sigmas", U"1.0")
  354. REAL (power, U"Parameter variance power", U"1.5")
  355. OK
  356. DO
  357. OrderedOf<structFormant> formants;
  358. LOOP {
  359. iam (Formant);
  360. formants. addItem_ref (me);
  361. }
  362. integer index = Formants_getSmoothestInInterval (& formants, fromTime, toTime, numberOfFormantTracks, order + 1, weighDataType, 0, numberOfSigmas, power, 1.0, 1.0, 1.0, 1.0, 1.0);
  363. // next code is necessary to get the Formant at postion index selected and to get its name
  364. integer iselected = 0;
  365. Formant him = nullptr;
  366. LOOP {
  367. iselected ++;
  368. if (iselected == index) {
  369. him = static_cast<Formant> (OBJECT);
  370. }
  371. }
  372. Melder_assert (him);
  373. autoFormant result = Formant_extractPart (him, fromTime, toTime);
  374. praat_new (result.move(), his name.get(), U"_part");
  375. END }
  376. FORM (NEW1_Formants_extractSmoothestPart_constrained, U"Formants: Extract smoothest part (constrained)", U"Formants: Extract smoothest part (constrained)...") {
  377. REAL (fromTime, U"left Time range (s)", U"0.0")
  378. REAL (toTime, U"right Time range (s)", U"0.0")
  379. NATURAL (numberOfFormantTracks, U"Number of formant tracks", U"4")
  380. INTEGER (order, U"Order of polynomials", U"3")
  381. LABEL (U"Use bandwidths to model the formant tracks:")
  382. OPTIONMENUx (weighDataType, U"Weigh data", 2, 0)
  383. OPTION (U"Equally")
  384. OPTION (U"Bandwidth")
  385. OPTION (U"Bandwidth / frequency")
  386. OPTION (U"Sqrt bandwidth")
  387. LABEL (U"Zero parameter values whose range include zero:")
  388. REAL (numberOfSigmas, U"Number of sigmas", U"1.0")
  389. REAL (power, U"Parameter variance power", U"1.5")
  390. LABEL (U"The constraints on the formants:")
  391. REAL (minimumF1, U"Minimum F1 (Hz)", U"100.0")
  392. REAL (maximumF1, U"Maximum F1 (Hz)", U"1200.0")
  393. REAL (minimumF2, U"Minimum F2 (Hz)", U"0.0")
  394. POSITIVE (maximumF2, U"Maximum F2 (Hz)", U"5000.0")
  395. POSITIVE (minimumF3, U"Minimum F3 (Hz)", U"1500.0")
  396. OK
  397. DO
  398. OrderedOf<structFormant> formants;
  399. LOOP {
  400. iam (Formant);
  401. formants. addItem_ref (me);
  402. }
  403. integer index = Formants_getSmoothestInInterval (& formants, fromTime, toTime, numberOfFormantTracks, order + 1, weighDataType, 1, numberOfSigmas, power, minimumF1, maximumF1, minimumF2, maximumF2, minimumF3);
  404. // next code is necessary to get the Formant at postion index selected and to get its name
  405. integer iselected = 0;
  406. Formant him = nullptr;
  407. LOOP {
  408. iselected ++;
  409. if (iselected == index) {
  410. him = static_cast<Formant> (OBJECT);
  411. }
  412. }
  413. Melder_assert (him);
  414. autoFormant result = Formant_extractPart (him, fromTime, toTime);
  415. praat_new (result.move(), his name.get(), U"_part");
  416. END }
  417. /********************** FormantModeler ******************************/
  418. FORM (GRAPHICS_FormantModeler_drawEstimatedTracks, U"FormantModeler: Draw estimated tracks", nullptr) {
  419. REAL (fromTime, U"left Time range (s)", U"0.0")
  420. REAL (toTime, U"right Time range (s)", U"0.0")
  421. REAL (maximumFrequency, U"Maximum frequency (Hz)", U"5500.0")
  422. NATURAL (fromFormant, U"left Formant range", U"1")
  423. NATURAL (toFormant, U"right Formant range", U"3")
  424. INTEGER (order, U"Order of polynomials for estimation", U"3")
  425. REAL (xOffset_mm, U"Horizontal offset (mm)", U"0.0")
  426. BOOLEAN (garnish, U"Garnish", true)
  427. OK
  428. DO
  429. Melder_require (order >= 0, U"The order should be at least zero.");
  430. GRAPHICS_EACH (FormantModeler)
  431. FormantModeler_drawTracks (me, GRAPHICS, fromTime, toTime, maximumFrequency, fromFormant, toFormant, 1, order + 1, xOffset_mm, garnish);
  432. GRAPHICS_EACH_END
  433. }
  434. FORM (GRAPHICS_FormantModeler_drawTracks, U"FormantModeler: Draw tracks", nullptr) {
  435. REAL (fromTime, U"left Time range (s)", U"0.0")
  436. REAL (toTime, U"right Time range (s)", U"0.0")
  437. REAL (maximumFrequency, U"Maximum frequency (Hz)", U"5500.0")
  438. NATURAL (fromFormant, U"left Formant range", U"1")
  439. NATURAL (toFormant, U"right Formant range", U"3")
  440. REAL (xOffset_mm, U"Horizontal offset (mm)", U"0.0")
  441. BOOLEAN (garnish, U"Garnish", true)
  442. OK
  443. DO
  444. integer order = 6;
  445. GRAPHICS_EACH (FormantModeler)
  446. FormantModeler_drawTracks (me, GRAPHICS, fromTime, toTime, maximumFrequency, fromFormant, toFormant, 0, order + 1, xOffset_mm, garnish);
  447. GRAPHICS_EACH_END
  448. }
  449. FORM (GRAPHICS_FormantModeler_speckle, U"FormantModeler: Speckle", nullptr) {
  450. REAL (fromTime, U"left Time range (s)", U"0.0")
  451. REAL (toTime, U"right Time range (s)", U"0.0")
  452. REAL (maximumFrequency, U"Maximum frequency (Hz)", U"5500.0")
  453. NATURAL (fromFormant, U"left Formant range", U"1")
  454. NATURAL (toFormant, U"right Formant range", U"3")
  455. BOOLEAN (errorBars, U"Draw error bars", true)
  456. REAL (barWidth_mm, U"Bar width (mm)", U"1.0")
  457. REAL (xOffset_mm, U"Horizontal offset (mm)", U"0.0")
  458. BOOLEAN (garnish, U"Garnish", true)
  459. OK
  460. DO
  461. integer order = 6;
  462. GRAPHICS_EACH (FormantModeler)
  463. FormantModeler_speckle (me, GRAPHICS, fromTime, toTime, maximumFrequency, fromFormant, toFormant, 0, order + 1, errorBars, barWidth_mm, xOffset_mm, garnish);
  464. GRAPHICS_EACH_END
  465. }
  466. FORM (GRAPHICS_FormantModeler_drawOutliersMarked, U"FormantModeler: Draw outliers marked", nullptr) {
  467. REAL (fromTime, U"left Time range (s)", U"0.0")
  468. REAL (toTime, U"right Time range (s)", U"0.0")
  469. REAL (maximumFrequency, U"Maximum frequency (Hz)", U"5500.0")
  470. NATURAL (fromFormant, U"left Formant range", U"1")
  471. NATURAL (toFormant, U"right Formant range", U"3")
  472. POSITIVE (numberOfSigmas, U"Number of sigmas", U"3.0")
  473. OPTIONMENUx (weighDataType, U"Weigh data", 2, 0)
  474. OPTION (U"Equally")
  475. OPTION (U"Bandwidth")
  476. OPTION (U"Bandwidth / frequency")
  477. OPTION (U"Sqrt bandwidth")
  478. WORD (mark_string, U"Mark", U"o")
  479. NATURAL (fontSize, U"Mark font size", U"12")
  480. REAL (xOffset_mm, U"Horizontal offset (mm)", U"0.0")
  481. BOOLEAN (garnish, U"Garnish", false)
  482. OK
  483. DO
  484. GRAPHICS_EACH (FormantModeler)
  485. FormantModeler_drawOutliersMarked (me, GRAPHICS, fromTime, toTime, maximumFrequency, fromFormant, toFormant, numberOfSigmas, weighDataType, mark_string, fontSize, xOffset_mm, garnish);
  486. GRAPHICS_EACH_END
  487. }
  488. FORM (GRAPHICS_FormantModeler_drawVariancesOfShiftedTracks, U"FormantModeler: Draw variances of shifted tracks", nullptr) {
  489. REAL (fromTime, U"left Time range (s)", U"0.0")
  490. REAL (toTime, U"right Time range (s)", U"0.0")
  491. REAL (fromVariance, U"left Variance range", U"0.0")
  492. REAL (toVariance, U"right Variance range", U"0.0")
  493. OPTIONMENU (shiftTracks, U"Shift tracks", 1)
  494. OPTION (U"No")
  495. OPTION (U"Up")
  496. OPTION (U"Down")
  497. NATURAL (fromFormant, U"left Formant range", U"1")
  498. NATURAL (toFormant, U"right Formant range", U"4")
  499. BOOLEAN (garnish, U"Garnish", true)
  500. OK
  501. DO
  502. GRAPHICS_EACH (FormantModeler)
  503. FormantModeler_drawVariancesOfShiftedTracks (me, GRAPHICS, fromTime, toTime, fromVariance, toVariance, shiftTracks, fromFormant, toFormant, garnish);
  504. GRAPHICS_EACH_END
  505. }
  506. FORM (GRAPHICS_FormantModeler_drawCumulativeChisqScores, U"FormantModeler: Draw cumulative chi scores", nullptr) {
  507. REAL (fromTime, U"left Time range (s)", U"0.0")
  508. REAL (toTime, U"right Time range (s)", U"0.0")
  509. REAL (fromChisq, U"left Chisq range", U"0.0")
  510. REAL (toChisq, U"right Chisq range", U"0.0")
  511. OPTIONMENUx (weighDataType, U"Weigh data", 2, 0)
  512. OPTION (U"Equally")
  513. OPTION (U"Bandwidth")
  514. OPTION (U"Bandwidth / frequency")
  515. OPTION (U"Sqrt bandwidth")
  516. BOOLEAN (garnish, U"Garnish", true)
  517. OK
  518. DO
  519. GRAPHICS_EACH (FormantModeler)
  520. FormantModeler_drawCumulativeChiScores (me, GRAPHICS, fromTime, toTime, fromChisq, toChisq, weighDataType, garnish);
  521. GRAPHICS_EACH_END
  522. }
  523. FORM (GRAPHICS_FormantModeler_normalProbabilityPlot, U"FormantModeler: Normal probability plot", nullptr) {
  524. NATURAL (formantNumber, U"Formant number", U"1")
  525. OPTIONMENUx (weighDataType, U"Weigh data", 2, 0)
  526. OPTION (U"Equally")
  527. OPTION (U"Bandwidth")
  528. OPTION (U"Bandwidth / frequency")
  529. OPTION (U"Sqrt bandwidth")
  530. NATURAL (numberOfQuantiles, U"Number of quantiles", U"100")
  531. REAL (numberOfSigmas, U"Number of sigmas", U"0.0")
  532. NATURAL (fontSize, U"Label size", U"12")
  533. WORD (label, U"Label", U"+")
  534. BOOLEAN (garnish, U"Garnish", true);
  535. OK
  536. DO
  537. GRAPHICS_EACH (FormantModeler)
  538. FormantModeler_normalProbabilityPlot (me, GRAPHICS, formantNumber, weighDataType, numberOfQuantiles, numberOfSigmas, fontSize, label, garnish);
  539. GRAPHICS_EACH_END
  540. }
  541. FORM (GRAPHICS_FormantModeler_drawBasisFunction, U"FormantModeler: Draw basis function", nullptr) {
  542. REAL (fromTime, U"left Time range (s)", U"0.0")
  543. REAL (toTime, U"right Time range (s)", U"0.0")
  544. REAL (ymin, U"left Amplitude range (Hz)", U"0.0")
  545. REAL (ymax, U"right Amplitude range (Hz)", U"5500.0")
  546. //integer iterm, bool scaled, integer numberOfPoints, int garnish
  547. NATURAL (formantNumber, U"Formant number", U"1")
  548. NATURAL (basisFunctionIndex, U"Basis function", U"2")
  549. BOOLEAN (scale, U"Scale function with parameter value", false)
  550. NATURAL (numberOfPoints, U"Number of points", U"200")
  551. BOOLEAN (garnish, U"Garnish", true)
  552. OK
  553. DO
  554. GRAPHICS_EACH (FormantModeler)
  555. FormantModeler_drawBasisFunction (me, GRAPHICS, fromTime, toTime, ymin, ymax, formantNumber, basisFunctionIndex, scale, numberOfPoints, garnish);
  556. GRAPHICS_EACH_END
  557. }
  558. FORM (REAL_FormantModeler_getModelValueAtTime, U"", nullptr) {
  559. NATURAL (formantNumber, U"Formant number", U"1")
  560. REAL (time, U"Time (s)", U"0.1")
  561. OK
  562. DO
  563. NUMBER_ONE (FormantModeler)
  564. double result = FormantModeler_getModelValueAtTime (me, formantNumber, time);
  565. NUMBER_ONE_END (U"Hertz")
  566. }
  567. FORM (REAL_FormantModeler_getDataPointValue, U"FormantModeler: Get data point value", nullptr) {
  568. NATURAL (formantNumber, U"Formant number", U"1")
  569. NATURAL (index, U"Index", U"1")
  570. OK
  571. DO
  572. NUMBER_ONE (FormantModeler)
  573. double result = FormantModeler_getDataPointValue (me, formantNumber, index);
  574. NUMBER_ONE_END (U" (= value of point ", index, U" in track F", formantNumber, U")")
  575. }
  576. FORM (REAL_FormantModeler_getDataPointSigma, U"FormantModeler: Get data point sigma", nullptr) {
  577. NATURAL (formantNumber, U"Formant number", U"1")
  578. NATURAL (index, U"Index", U"1")
  579. OK
  580. DO
  581. NUMBER_ONE (FormantModeler)
  582. double result = FormantModeler_getDataPointSigma (me, formantNumber, index);
  583. NUMBER_ONE_END (U" (= sigma of point ", index, U" in track F", formantNumber, U")")
  584. }
  585. FORM (INFO_FormantModeler_getDataPointStatus, U"FormantModeler: Get data point status", nullptr) {
  586. NATURAL (formantNumber, U"Formant number", U"1")
  587. NATURAL (index, U"Index", U"1")
  588. OK
  589. DO
  590. INTEGER_ONE (FormantModeler)
  591. int status = FormantModeler_getDataPointStatus (me, formantNumber, index);
  592. conststring32 result = ( status == DataModeler_DATA_INVALID ? U"Invalid" : U"Valid" );
  593. INTEGER_ONE_END (U"")
  594. }
  595. DIRECT (INTEGER_FormantModeler_getNumberOfTracks) {
  596. INTEGER_ONE (FormantModeler)
  597. integer result = FormantModeler_getNumberOfTracks (me);
  598. INTEGER_ONE_END (U" (= number of formants)")
  599. }
  600. FORM (INTEGER_FormantModeler_getNumberOfParameters, U"FormantModeler: Get number of parameters", nullptr) {
  601. NATURAL (formantNumber, U"Formant number", U"1")
  602. OK
  603. DO
  604. INTEGER_ONE (FormantModeler)
  605. integer result = FormantModeler_getNumberOfParameters (me, formantNumber);
  606. INTEGER_ONE_END (U" (= number of parameters for F", formantNumber, U")")
  607. }
  608. FORM (INTEGER_FormantModeler_getNumberOfFixedParameters, U"FormantModeler: Get number of fixed parameters", nullptr) {
  609. NATURAL (formantNumber, U"Formant number", U"1")
  610. OK
  611. DO
  612. INTEGER_ONE (FormantModeler)
  613. integer result = FormantModeler_getNumberOfFixedParameters (me, formantNumber);
  614. INTEGER_ONE_END (U" (= number of fixed parameters for F", formantNumber, U")")
  615. }
  616. DIRECT (INTEGER_FormantModeler_getNumberOfDataPoints) {
  617. INTEGER_ONE (FormantModeler)
  618. integer result = FormantModeler_getNumberOfDataPoints (me);
  619. INTEGER_ONE_END (U"")
  620. }
  621. FORM (INTEGER_FormantModeler_getNumberOfInvalidDataPoints, U"FormantModeler: Get number of invalid data points", nullptr) {
  622. NATURAL (formantNumber, U"Formant number", U"1")
  623. OK
  624. DO
  625. INTEGER_ONE (FormantModeler)
  626. integer result = FormantModeler_getNumberOfInvalidDataPoints (me, formantNumber);
  627. INTEGER_ONE_END (U" (= number of invalid data points for F", formantNumber, U")")
  628. }
  629. FORM (REAL_FormantModeler_getParameterValue, U"FormantModeler: Get parameter value", nullptr) {
  630. NATURAL (formantNumber, U"Formant number", U"1")
  631. NATURAL (parameterNumber, U"Parameter number", U"1")
  632. OK
  633. DO
  634. NUMBER_ONE (FormantModeler)
  635. double result = FormantModeler_getParameterValue (me, formantNumber, parameterNumber);
  636. NUMBER_ONE_END (U" (= parameter ", parameterNumber, U" for F", formantNumber, U")")
  637. }
  638. FORM (INFO_FormantModeler_getParameterStatus, U"FormantModeler: Get parameter status", nullptr) {
  639. NATURAL (formantNumber, U"Formant number", U"1")
  640. NATURAL (parameterNumber, U"Parameter number", U"1")
  641. OK
  642. DO
  643. STRING_ONE (FormantModeler)
  644. int status = FormantModeler_getParameterStatus (me, formantNumber, parameterNumber);
  645. conststring32 result = Melder_cat (
  646. status == DataModeler_PARAMETER_FREE ? U"Free" : status == DataModeler_PARAMETER_FIXED ? U"Fixed" : U"Undefined",
  647. U" (= status of parameter ", parameterNumber, U" for F", formantNumber, U")"
  648. );
  649. STRING_ONE_END
  650. }
  651. FORM (REAL_FormantModeler_getParameterStandardDeviation, U"FormantModeler: Get parameter standard deviatio", nullptr) {
  652. NATURAL (formantNumber, U"Formant number", U"1")
  653. NATURAL (parameterNumber, U"Parameter number", U"1")
  654. OK
  655. DO
  656. NUMBER_ONE (FormantModeler)
  657. double result = FormantModeler_getParameterStandardDeviation (me, formantNumber, parameterNumber);
  658. NUMBER_ONE_END (U" (= standard deviation of parameter ", parameterNumber, U" for F", formantNumber, U")")
  659. }
  660. FORM (REAL_FormantModeler_getVarianceOfParameters, U"FormantModeler: Get variance of parameters", nullptr) {
  661. INTEGER (fromFormant, U"left Formant range", U"0")
  662. INTEGER (toFormant, U"right Formant range", U"0")
  663. INTEGER (fromParameter, U"left Parameter range", U"0")
  664. INTEGER (toParameter, U"right Parameter range", U"0")
  665. OK
  666. DO
  667. integer numberOfFreeParameters;
  668. NUMBER_ONE (FormantModeler)
  669. double result = FormantModeler_getVarianceOfParameters (me, fromFormant, toFormant, fromParameter, toParameter, & numberOfFreeParameters);
  670. NUMBER_ONE_END (U" (for ", numberOfFreeParameters, U" free parameters.)")
  671. }
  672. FORM (REAL_FormantModeler_getCoefficientOfDetermination, U"FormantModeler: Get coefficient of determination", nullptr) {
  673. INTEGER (fromFormant, U"left Formant range", U"0")
  674. INTEGER (toFormant, U"right Formant range", U"0")
  675. OK
  676. DO
  677. NUMBER_ONE (FormantModeler)
  678. double result = FormantModeler_getCoefficientOfDetermination (me, fromFormant, toFormant);
  679. NUMBER_ONE_END (U" (= R^2)");
  680. }
  681. FORM (REAL_FormantModeler_getResidualSumOfSquares, U"FormantModeler: Get residual sum of squares", U"FormantModeler: Get residual sum of squares...") {
  682. NATURAL (formantNumber, U"Formant number", U"1")
  683. OK
  684. DO
  685. NUMBER_ONE (FormantModeler)
  686. double result = FormantModeler_getResidualSumOfSquares (me, formantNumber, nullptr);
  687. NUMBER_ONE_END (U" Hz^2, (= residual sum of squares of F", formantNumber, U")")
  688. }
  689. FORM (REAL_FormantModeler_getFormantStandardDeviation, U"FormantModeler: Get formant standard deviation", nullptr) {
  690. NATURAL (formantNumber, U"Formant number", U"1")
  691. OK
  692. DO
  693. NUMBER_ONE (FormantModeler)
  694. double result = FormantModeler_getStandardDeviation (me, formantNumber);
  695. NUMBER_ONE_END (U" Hz (= standard deviation of F", formantNumber, U")")
  696. }
  697. FORM (INFO_FormantModeler_reportChiSquared, U"FormantModeler: Report chi squared", nullptr) {
  698. OPTIONMENUx (weighDataType, U"Weigh data", 2, 0)
  699. OPTION (U"Equally")
  700. OPTION (U"Bandwidth")
  701. OPTION (U"Bandwidth / frequency")
  702. OPTION (U"Sqrt bandwidth")
  703. OK
  704. DO
  705. INFO_ONE (FormantModeler)
  706. MelderInfo_open();
  707. FormantModeler_reportChiSquared (me, weighDataType);
  708. MelderInfo_close();
  709. INFO_ONE_END
  710. }
  711. FORM (REAL_FormantModeler_getDegreesOfFreedom, U"FormantModeler: Get degrees of freedom", nullptr) {
  712. NATURAL (formantNumber, U"Formant number", U"1")
  713. OK
  714. DO
  715. NUMBER_ONE (FormantModeler)
  716. double result = FormantModeler_getDegreesOfFreedom (me, formantNumber);
  717. NUMBER_ONE_END (U" (= degrees of freedom of F", formantNumber, U")")
  718. }
  719. FORM (REAL_FormantModeler_getSmoothnessValue, U"FormantModeler: Get smoothness value", nullptr) {
  720. INTEGER (fromFormant, U"left Formant range", U"0")
  721. INTEGER (toFormant, U"right Formant range", U"0")
  722. INTEGER (order, U"Order of polynomials", U"3")
  723. REAL (power, U"Parameter variance power", U"1.5")
  724. OK
  725. DO
  726. NUMBER_ONE (FormantModeler)
  727. double result = FormantModeler_getSmoothnessValue (me, fromFormant, toFormant, order, power);
  728. NUMBER_ONE_END (U" (= smoothness)")
  729. }
  730. FORM (REAL_FormantModeler_getAverageDistanceBetweenTracks, U"FormantModeler: Get average distance between tracks", nullptr) {
  731. NATURAL (track1, U"Track 1", U"2")
  732. NATURAL (track2, U"Track 2", U"3")
  733. OPTIONMENU (typeOfData, U"Type of data", 1)
  734. OPTION (U"Data points")
  735. OPTION (U"Modeled")
  736. OK
  737. DO
  738. NUMBER_ONE (FormantModeler)
  739. double result = FormantModeler_getAverageDistanceBetweenTracks (me, track1, track2, typeOfData - 1);
  740. NUMBER_ONE_END (U" (= average |F", track1, U" - F", track2, U"|)")
  741. }
  742. FORM (REAL_FormantModeler_getFormantsConstraintsFactor, U"FormantModeler: Get formants constraints factor", nullptr) {
  743. REAL (minimumF1, U"Minimum F1 (Hz)", U"100.0")
  744. REAL (maximumF1, U"Maximum F1 (Hz)", U"1200.0")
  745. REAL (minimumF2, U"Minimum F2 (Hz)", U"0.0")
  746. POSITIVE (maximumF2, U"Maximum F2 (Hz)", U"5000.0")
  747. POSITIVE (minimumF3, U"Minimum F3 (Hz)", U"1500.0")
  748. OK
  749. DO
  750. NUMBER_ONE (FormantModeler)
  751. double result = FormantModeler_getFormantsConstraintsFactor (me, minimumF1, maximumF1, minimumF2, maximumF2, minimumF3);
  752. NUMBER_ONE_END (U" (= formants constraints factor)");
  753. }
  754. FORM (MODIFY_FormantModeler_setDataWeighing, U"FormantModeler: Set data weighing", nullptr) {
  755. INTEGER (fromFormant, U"left Formant range", U"0")
  756. INTEGER (toFormant, U"right Formant range", U"0")
  757. OPTIONMENUx (weighDataType, U"Weigh data", 2, 0)
  758. OPTION (U"Equally")
  759. OPTION (U"Bandwidth")
  760. OPTION (U"Bandwidth / frequency")
  761. OPTION (U"Sqrt bandwidth")
  762. OK
  763. DO
  764. MODIFY_EACH (FormantModeler)
  765. FormantModeler_setDataWeighing (me, fromFormant, toFormant, weighDataType);
  766. MODIFY_EACH_END
  767. }
  768. FORM (MODIFY_FormantModeler_setTolerance, U"FormantModeler: Set tolerance", nullptr) {
  769. REAL (tolerance, U"Tolerance", U"1e-5")
  770. OK
  771. DO
  772. MODIFY_EACH (FormantModeler)
  773. FormantModeler_setTolerance (me, tolerance);
  774. MODIFY_EACH_END
  775. }
  776. FORM (MODIFY_FormantModeler_setParameterValueFixed, U"FormantModeler: Set parameter value fixed", nullptr) {
  777. NATURAL (formantNumber, U"Formant number", U"1")
  778. NATURAL (parameterNumber, U"Parameter number", U"1")
  779. REAL (parameterValue, U"Value", U"0.0")
  780. OK
  781. DO
  782. MODIFY_EACH (FormantModeler)
  783. FormantModeler_setParameterValueFixed (me, formantNumber, parameterNumber, parameterValue);
  784. MODIFY_EACH_END
  785. }
  786. FORM (MODIFY_FormantModeler_setParameterFree, U"FormantModeler: Set parameter free", nullptr) {
  787. INTEGER (fromFormant, U"left Formant range", U"0")
  788. INTEGER (toFormant, U"right Formant range", U"0")
  789. INTEGER (fromParameter, U"left Parameter range", U"0")
  790. INTEGER (toParameter, U"right Parameter range", U"0")
  791. OK
  792. DO
  793. MODIFY_EACH (FormantModeler)
  794. FormantModeler_setParametersFree (me, fromFormant, toFormant, fromParameter, toParameter);
  795. MODIFY_EACH_END
  796. }
  797. FORM (MODIFY_FormantModeler_setParameterValuesToZero, U"FormantModeler: Set parameter values to zero", nullptr) {
  798. INTEGER (fromFormant, U"left Formant range", U"0")
  799. INTEGER (toFormant, U"right Formant range", U"0")
  800. REAL (numberOfSigmas, U"Number of sigmas", U"1.0")
  801. OK
  802. DO
  803. MODIFY_EACH (FormantModeler)
  804. FormantModeler_setParameterValuesToZero (me, fromFormant, toFormant, numberOfSigmas);
  805. MODIFY_EACH_END
  806. }
  807. FORM (MODIFY_FormantModeler_setDataPointValue, U"FormantModeler: Set data point value", nullptr) {
  808. NATURAL (formantNumber, U"Formant index", U"1")
  809. NATURAL (dataNumber, U"Data index", U"1")
  810. REAL (value, U"Value", U"1.0")
  811. OK
  812. DO
  813. MODIFY_EACH (FormantModeler)
  814. FormantModeler_setDataPointValue (me, formantNumber, dataNumber, value);
  815. MODIFY_EACH_END
  816. }
  817. FORM (MODIFY_FormantModeler_setDataPointSigma, U"FormantModeler: Set data point sigma", nullptr) {
  818. NATURAL (formantNumber, U"Formant index", U"1")
  819. NATURAL (dataNumber, U"Data index", U"1")
  820. REAL (sigma, U"Sigma", U"10.0")
  821. OK
  822. DO
  823. MODIFY_EACH (FormantModeler)
  824. FormantModeler_setDataPointSigma (me, formantNumber, dataNumber, sigma);
  825. MODIFY_EACH_END
  826. }
  827. FORM (MODIFY_FormantModeler_setDataPointStatus, U"FormantModeler: Set data point status", nullptr) {
  828. NATURAL (formantNumber, U"Formant index", U"1")
  829. NATURAL (dataNumber, U"Data index", U"1")
  830. OPTIONMENU (dataStatus, U"Status", 1)
  831. OPTION (U"Valid")
  832. OPTION (U"Invalid")
  833. OK
  834. DO
  835. int status = dataStatus == 2 ? DataModeler_DATA_INVALID : DataModeler_DATA_VALID;
  836. MODIFY_EACH (FormantModeler)
  837. FormantModeler_setDataPointStatus (me, formantNumber, dataNumber, status);
  838. MODIFY_EACH_END
  839. }
  840. DIRECT (MODIFY_FormantModeler_fitModel) {
  841. MODIFY_EACH (FormantModeler)
  842. FormantModeler_fit (me);
  843. MODIFY_EACH_END
  844. }
  845. FORM (NEW_FormantModeler_to_Covariance_parameters, U"", nullptr) {
  846. NATURAL (formantNumber, U"Formant number", U"1")
  847. OK
  848. DO
  849. CONVERT_EACH (FormantModeler)
  850. autoCovariance result = FormantModeler_to_Covariance_parameters (me, formantNumber);
  851. CONVERT_EACH_END (my name.get(), U"_", formantNumber);
  852. }
  853. FORM (NEW_FormantModeler_extractDataModeler, U"FormantModeler: Extract DataModeler", nullptr) {
  854. NATURAL (formantNumber, U"Formant number", U"1")
  855. OK
  856. DO
  857. CONVERT_EACH (FormantModeler)
  858. autoDataModeler result = FormantModeler_extractDataModeler (me, formantNumber);
  859. CONVERT_EACH_END (my name.get(), U"_", formantNumber)
  860. }
  861. FORM (NEW_FormantModeler_to_Table_zscores, U"", nullptr) {
  862. BOOLEAN (useBandwidth, U"Bandwidths as standard deviation", true)
  863. OK
  864. DO
  865. CONVERT_EACH (FormantModeler)
  866. autoTable result = FormantModeler_to_Table_zscores (me, useBandwidth);
  867. CONVERT_EACH_END (my name.get(), U"_z")
  868. }
  869. FORM (NEW_FormantModeler_to_FormantModeler_processOutliers, U"", nullptr) {
  870. POSITIVE (numberOfSigmas, U"Number of sigmas", U"3.0")
  871. BOOLEAN (useBandwidth, U"Bandwidths as standard deviation", true)
  872. OK
  873. DO
  874. CONVERT_EACH (FormantModeler)
  875. autoFormantModeler result = FormantModeler_processOutliers (me, numberOfSigmas, useBandwidth);
  876. CONVERT_EACH_END (my name.get(), U"_outliers");
  877. }
  878. DIRECT (WINDOW_OptimalCeilingTier_edit) {
  879. if (theCurrentPraatApplication -> batch) Melder_throw (U"Cannot view or edit an OptimalCeilingTier from batch.");
  880. FIND_TWO_WITH_IOBJECT (OptimalCeilingTier, Sound) // Sound may be null
  881. autoOptimalCeilingTierEditor editor = OptimalCeilingTierEditor_create (ID_AND_FULL_NAME, me, you, true);
  882. praat_installEditor (editor.get(), IOBJECT);
  883. editor.releaseToUser();
  884. END
  885. }
  886. /*************************** PitchModeler *************************************/
  887. FORM (NEW_Pitch_to_PitchModeler, U"Pitch: To PitchModeler", nullptr) {
  888. REAL (fromTime, U"left Start time (s)", U"0.0")
  889. REAL (toTime, U"right End time (s)", U"0.1")
  890. INTEGER (order, U"Order of polynomials", U"2")
  891. OK
  892. DO
  893. CONVERT_EACH (Pitch)
  894. autoPitchModeler result = Pitch_to_PitchModeler (me, fromTime, toTime, order + 1);
  895. CONVERT_EACH_END (my name.get())
  896. }
  897. FORM (GRAPHICS_PitchModeler_draw, U"PitchModeler: Draw", nullptr) {
  898. REAL (fromTime, U"left Time range (s)", U"0.0")
  899. REAL (toTime, U"right Time range (s)", U"0.0")
  900. REAL (fromFrequency, U"left Frequency range (Hz)", U"0.0")
  901. REAL (toFrequency, U"right Frequency range (Hz)", U"500.0")
  902. INTEGER (order, U"Order of polynomial for estimation", U"2")
  903. BOOLEAN (garnish, U"Garnish", true)
  904. OK
  905. DO
  906. GRAPHICS_EACH (PitchModeler)
  907. PitchModeler_draw (me, GRAPHICS, fromTime, toTime, fromFrequency, toFrequency, order + 1, garnish);
  908. GRAPHICS_EACH_END
  909. }
  910. FORM (REAL_Sound_getOptimalFormantCeiling, U"Sound: Get optimal formant ceiling", nullptr) {
  911. REAL (fromTime, U"left Time range (s)", U"0.1")
  912. REAL (toTime, U"right Time range (s)", U"0.15")
  913. POSITIVE (windowLength, U"Window length (s)", U"0.015")
  914. POSITIVE (timeStep, U"Time step (s)", U"0.0025")
  915. POSITIVE (fromFrequency, U"left Maximum frequency range (Hz)", U"4500.0")
  916. POSITIVE (toFrequency, U"right Maximum frequency range (Hz)", U"6500.0")
  917. NATURAL (numberOfFrequencySteps, U"Number of frequency steps", U"11")
  918. POSITIVE (preEmphasisFrequency, U"Pre-emphasis from (Hz)", U"50.0")
  919. NATURAL (numberOfFormantTracks, U"Number of formant tracks in model", U"4")
  920. INTEGER (order, U"Order of polynomials", U"3")
  921. OPTIONMENUx (weighDataType, U"Weigh data", 2, 0)
  922. OPTION (U"Equally")
  923. OPTION (U"Bandwidth")
  924. OPTION (U"Bandwidth / frequency")
  925. OPTION (U"Sqrt bandwidth")
  926. LABEL (U"Make parameters that include zero in their confidence region zero")
  927. REAL (numberOfSigmas, U"Number of sigmas", U"1.0")
  928. REAL (power, U"Parameter variance power", U"1.5")
  929. OK
  930. DO
  931. NUMBER_ONE (Sound)
  932. double result = Sound_getOptimalFormantCeiling (me, fromTime, toTime, windowLength, timeStep, fromFrequency, toFrequency, numberOfFrequencySteps, preEmphasisFrequency, numberOfFormantTracks, order + 1, weighDataType, numberOfSigmas, power);
  933. NUMBER_ONE_END (U" Hz");
  934. }
  935. FORM (NEW_Sound_to_Formant_interval, U"Sound: To Formant (interval)", nullptr) {
  936. REAL (fromTime, U"left Time range (s)", U"0.1")
  937. REAL (toTime, U"right Time range (s)", U"0.15")
  938. POSITIVE (windowLength, U"Window length (s)", U"0.015")
  939. POSITIVE (timeStep, U"Time step (s)", U"0.0025")
  940. POSITIVE (fromFrequency, U"left Maximum frequency range (Hz)", U"4500.0")
  941. POSITIVE (toFrequency, U"right Maximum frequency range (Hz)", U"6500.0")
  942. NATURAL (numberOfFrequencySteps, U"Number of frequency steps", U"11")
  943. POSITIVE (preEmphasisFrequency, U"Pre-emphasis from (Hz)", U"50.0")
  944. NATURAL (numberOfFormantTracks, U"Number of formant tracks in model", U"4")
  945. INTEGER (order, U"Order of polynomials", U"3")
  946. OPTIONMENUx (weighDataType, U"Weigh data", 2, 0)
  947. OPTION (U"Equally")
  948. OPTION (U"Bandwidth")
  949. OPTION (U"Bandwidth / frequency")
  950. OPTION (U"Sqrt bandwidth")
  951. LABEL (U"Make parameters that include zero in their confidence region zero")
  952. REAL (numberOfSigmas, U"Number of sigmas", U"1.0")
  953. REAL (power, U"Parameter variance power", U"1.5")
  954. OK
  955. DO
  956. CONVERT_EACH (Sound)
  957. double ceiling;
  958. autoFormant result = Sound_to_Formant_interval (me, fromTime, toTime, windowLength, timeStep, fromFrequency, toFrequency, numberOfFrequencySteps, preEmphasisFrequency, numberOfFormantTracks, order + 1, weighDataType, numberOfSigmas, power, 0, 1, 1, 1, 1, 1, &ceiling);
  959. CONVERT_EACH_END (my name.get(), U"_", Melder_fixed (ceiling, 0))
  960. }
  961. FORM (NEW_Sound_to_Formant_interval_constrained, U"Sound: To Formant (interval, constrained)", nullptr) {
  962. REAL (fromTime, U"left Time range (s)", U"0.1")
  963. REAL (toTime, U"right Time range (s)", U"0.15")
  964. POSITIVE (windowLength, U"Window length (s)", U"0.015")
  965. POSITIVE (timeStep, U"Time step (s)", U"0.0025")
  966. POSITIVE (fromFrequency, U"left Maximum frequency range (Hz)", U"4500.0")
  967. POSITIVE (toFrequency, U"right Maximum frequency range (Hz)", U"6500.0")
  968. NATURAL (numberOfFrequencySteps, U"Number of frequency steps", U"11")
  969. POSITIVE (preEmphasisFrequency, U"Pre-emphasis from (Hz)", U"50.0")
  970. NATURAL (numberOfFormantTracks, U"Number of formant tracks in model", U"4")
  971. INTEGER (order, U"Order of polynomials", U"3")
  972. OPTIONMENUx (weighDataType, U"Weigh data", 2, 0)
  973. OPTION (U"Equally")
  974. OPTION (U"Bandwidth")
  975. OPTION (U"Bandwidth / frequency")
  976. OPTION (U"Sqrt bandwidth")
  977. LABEL (U"Make parameters that include zero in their confidence region zero")
  978. REAL (numberOfSigmas, U"Number of sigmas", U"1.0")
  979. REAL (power, U"Parameter variance power", U"1.5")
  980. LABEL (U"Formant frequency constraints")
  981. REAL (minimumF1, U"Minimum F1 (Hz)", U"100.0")
  982. REAL (maximumF1, U"Maximum F1 (Hz)", U"1200.0")
  983. REAL (minimumF2, U"Minimum F2 (Hz)", U"0.0")
  984. POSITIVE (maximumF2, U"Maximum F2 (Hz)", U"5000.0")
  985. POSITIVE (minimumF3, U"Minimum F3 (Hz)", U"1000.0")
  986. OK
  987. DO
  988. CONVERT_EACH (Sound)
  989. double ceiling;
  990. autoFormant result = Sound_to_Formant_interval (me, fromTime, toTime, windowLength, timeStep, fromFrequency, toFrequency, numberOfFrequencySteps, preEmphasisFrequency, numberOfFormantTracks, order + 1, weighDataType, numberOfSigmas, power, 1, minimumF1, maximumF1, minimumF2, maximumF2, minimumF3, & ceiling);
  991. CONVERT_EACH_END (my name.get(), U"_", Melder_fixed (ceiling, 0));
  992. }
  993. FORM (NEW_Sound_to_Formant_interval_constrained_robust, U"Sound: To Formant (interval, constrained, robust)", nullptr) {
  994. REAL (fromTime, U"left Time range (s)", U"0.1")
  995. REAL (toTime, U"right Time range (s)", U"0.15")
  996. POSITIVE (windowLength, U"Window length (s)", U"0.015")
  997. POSITIVE (timeStep, U"Time step (s)", U"0.0025")
  998. POSITIVE (fromFrequency, U"left Maximum frequency range (Hz)", U"4500.0")
  999. POSITIVE (toFrequency, U"right Maximum frequency range (Hz)", U"6500.0")
  1000. NATURAL (numberOfFrequencySteps, U"Number of frequency steps", U"11")
  1001. POSITIVE (preEmphasisFrequency, U"Pre-emphasis from (Hz)", U"50.0")
  1002. NATURAL (numberOfFormantTracks, U"Number of formant tracks in model", U"4")
  1003. INTEGER (order, U"Order of polynomials", U"3")
  1004. OPTIONMENUx (weighDataType, U"Weigh data", 2, 0)
  1005. OPTION (U"Equally")
  1006. OPTION (U"Bandwidth")
  1007. OPTION (U"Bandwidth / frequency")
  1008. OPTION (U"Sqrt bandwidth")
  1009. LABEL (U"Make parameters that include zero in their confidence region zero")
  1010. REAL (numberOfSigmas, U"Number of sigmas", U"1.0")
  1011. REAL (power, U"Parameter variance power", U"1.5")
  1012. LABEL (U"Formant frequency constraints")
  1013. REAL (minimumF1, U"Minimum F1 (Hz)", U"100.0")
  1014. REAL (maximumF1, U"Maximum F1 (Hz)", U"1200.0")
  1015. REAL (minimumF2, U"Minimum F2 (Hz)", U"0.0")
  1016. POSITIVE (maximumF2, U"Maximum F2 (Hz)", U"5000.0")
  1017. POSITIVE (minimumF3, U"Minimum F3 (Hz)", U"1000.0")
  1018. OK
  1019. DO
  1020. CONVERT_EACH (Sound)
  1021. double ceiling;
  1022. autoFormant result = Sound_to_Formant_interval_robust (me, fromTime, toTime, windowLength, timeStep, fromFrequency, fromFrequency, numberOfFrequencySteps, preEmphasisFrequency, numberOfFormantTracks, order + 1, weighDataType, numberOfSigmas, power, 1, minimumF1, maximumF1, minimumF2, minimumF2, minimumF3, &ceiling);
  1023. CONVERT_EACH_END (my name.get(), U"_", Melder_fixed (ceiling, 0))
  1024. }
  1025. FORM (NEW_Sound_to_OptimalCeilingTier, U"", nullptr) {
  1026. POSITIVE (windowLength, U"Window length (s)", U"0.015")
  1027. POSITIVE (timeStep, U"Time step (s)", U"0.0025")
  1028. POSITIVE (fromFrequency, U"left Maximum frequency range (Hz)", U"4500.0")
  1029. POSITIVE (toFrequency, U"right Maximum frequency range (Hz)", U"6500.0")
  1030. NATURAL (numberOfFrequencySteps, U"Number of frequency steps", U"11")
  1031. POSITIVE (preEmphasisFrequency, U"Pre-emphasis from (Hz)", U"50.0")
  1032. REAL (smoothingWindow_s, U"Formant smoothing window (s)", U"0.05")
  1033. NATURAL (numberOfFormantTracks, U"Number of formant tracks in model", U"4")
  1034. INTEGER (order, U"Order of polynomials", U"2")
  1035. OPTIONMENUx (weighDataType, U"Weigh data", 2, 0)
  1036. OPTION (U"Equally")
  1037. OPTION (U"Bandwidth")
  1038. OPTION (U"Bandwidth / frequency")
  1039. OPTION (U"Sqrt bandwidth")
  1040. LABEL (U"Make parameters that include zero in their confidence region zero")
  1041. REAL (numberOfSigmas, U"Number of sigmas", U"1.0")
  1042. REAL (power, U"Parameter variance power", U"1.5")
  1043. OK
  1044. DO
  1045. CONVERT_EACH (Sound)
  1046. autoOptimalCeilingTier result = Sound_to_OptimalCeilingTier (me, windowLength, timeStep, fromFrequency, toFrequency, numberOfFrequencySteps, preEmphasisFrequency, smoothingWindow_s, numberOfFormantTracks, order + 1, weighDataType, numberOfSigmas, power);
  1047. CONVERT_EACH_END (my name.get());
  1048. }
  1049. FORM (NEW_Table_to_DataModeler, U"", nullptr) {
  1050. REAL (xmin, U"left X range", U"0.0")
  1051. REAL (xmax, U"right X range", U"0.0 (= auto)")
  1052. WORD (columnWithX_string, U"Column with X data", U"")
  1053. WORD (columnWithY_string, U"Column with Y data", U"")
  1054. WORD (columnEithSigma_string, U"Column with sigmas", U"")
  1055. OPTIONMENU (functionType, U"Model functions", 1)
  1056. OPTION (U"Legendre polynomials")
  1057. INTEGER (maximumOrder, U"Maximum order", U"3")
  1058. OK
  1059. DO
  1060. CONVERT_EACH (Table)
  1061. integer xcolumn = Table_getColumnIndexFromColumnLabel (me, columnWithX_string);
  1062. integer ycolumn = Table_getColumnIndexFromColumnLabel (me, columnWithY_string);
  1063. integer scolumn = Table_findColumnIndexFromColumnLabel (me, columnEithSigma_string);
  1064. autoDataModeler result = Table_to_DataModeler (me, xmin, xmax, xcolumn, ycolumn, scolumn, maximumOrder + 1, functionType);
  1065. CONVERT_EACH_END (my name.get())
  1066. }
  1067. void praat_DataModeler_init ();
  1068. void praat_DataModeler_init () {
  1069. Thing_recognizeClassesByName (classDataModeler, classFormantModeler, classOptimalCeilingTier, classOptimalCeilingTierEditor, classPitchModeler, nullptr);
  1070. praat_addMenuCommand (U"Objects", U"New", U"Create simple DataModeler...", U"Create ISpline...", praat_HIDDEN + praat_DEPTH_1, NEW1_DataModeler_createSimple);
  1071. praat_addAction1 (classDataModeler, 0, U"Speckle...", 0, 0, GRAPHICS_DataModeler_speckle);
  1072. praat_addAction1 (classDataModeler, 0, U"Draw estimated track...", 0, 0, GRAPHICS_DataModeler_drawEstimatedTrack);
  1073. praat_addAction1 (classDataModeler, 1, U"Query -", 0, 0, 0);
  1074. praat_addAction1 (classDataModeler, 0, U"Get number of parameters", 0, 1, INTEGER_DataModeler_getNumberOfParameters);
  1075. praat_addAction1 (classDataModeler, 0, U"Get number of fixed parameters", 0, 1, INTEGER_DataModeler_getNumberOfFixedParameters);
  1076. praat_addAction1 (classDataModeler, 0, U"Get parameter value...", 0, 1, REAL_DataModeler_getParameterValue);
  1077. praat_addAction1 (classDataModeler, 0, U"Get parameter status...", 0, 1, INFO_DataModeler_getParameterStatus);
  1078. praat_addAction1 (classDataModeler, 0, U"Get parameter standard deviation...", 0, 1, REAL_DataModeler_getParameterStandardDeviation);
  1079. praat_addAction1 (classDataModeler, 0, U"Get variance of parameters...", 0, 1, REAL_DataModeler_getVarianceOfParameters);
  1080. praat_addAction1 (classDataModeler, 1, U"-- get data points info --", 0, 1, 0);
  1081. praat_addAction1 (classDataModeler, 0, U"Get model value at x...", 0, 1, REAL_DataModeler_getModelValueAtX);
  1082. praat_addAction1 (classDataModeler, 0, U"Get number of data points", 0, 1, INTEGER_DataModeler_getNumberOfDataPoints);
  1083. praat_addAction1 (classDataModeler, 0, U"Get number of invalid data points", 0, 1, INTEGER_DataModeler_getNumberOfInvalidDataPoints);
  1084. praat_addAction1 (classDataModeler, 0, U"Get data point y value...", 0, 1, REAL_DataModeler_getDataPointYValue);
  1085. praat_addAction1 (classDataModeler, 0, U"Get data point x value...", 0, 1, REAL_DataModeler_getDataPointXValue);
  1086. praat_addAction1 (classDataModeler, 0, U"Get data point y sigma...", 0, 1, REAL_DataModeler_getDataPointYSigma);
  1087. praat_addAction1 (classDataModeler, 0, U"Get data point status...", 0, 1, INFO_DataModeler_getDataPointStatus);
  1088. praat_addAction1 (classDataModeler, 1, U"-- get statistics info --", 0, 1, 0);
  1089. praat_addAction1 (classDataModeler, 0, U"Get residual sum of squares", 0, 1, REAL_DataModeler_getResidualSumOfSquares);
  1090. praat_addAction1 (classDataModeler, 0, U"Get data standard deviation", 0, 1, REAL_DataModeler_getDataStandardDeviation);
  1091. praat_addAction1 (classDataModeler, 0, U"Get coefficient of determination", 0, 1, REAL_DataModeler_getCoefficientOfDetermination);
  1092. praat_addAction1 (classDataModeler, 0, U"Report chi squared...", 0, 1, INFO_DataModeler_reportChiSquared);
  1093. praat_addAction1 (classDataModeler, 0, U"Get degrees of freedom", 0, 1, REAL_DataModeler_getDegreesOfFreedom);
  1094. praat_addAction1 (classDataModeler, 1, U"Modify -", 0, 0, 0);
  1095. praat_addAction1 (classDataModeler, 0, U"Set data weighing...", 0, 1, MODIFY_DataModeler_setDataWeighing);
  1096. praat_addAction1 (classDataModeler, 0, U"Set tolerance...", 0, 1, MODIFY_DataModeler_setTolerance);
  1097. praat_addAction1 (classDataModeler, 1, U"-- set parameter values --", 0, 1, 0);
  1098. praat_addAction1 (classDataModeler, 0, U"Set parameter value...", 0, 1, MODIFY_DataModeler_setParameterValue);
  1099. praat_addAction1 (classDataModeler, 0, U"Set parameter free...", 0, 1, MODIFY_DataModeler_setParameterFree);
  1100. praat_addAction1 (classDataModeler, 0, U"Set parameter values to zero...", 0, 1, MODIFY_DataModeler_setParameterValuesToZero);
  1101. praat_addAction1 (classDataModeler, 1, U"-- set data values --", 0, 1, 0);
  1102. praat_addAction1 (classDataModeler, 0, U"Set data point y value...", 0, 1, MODIFY_DataModeler_setDataPointYValue);
  1103. praat_addAction1 (classDataModeler, 0, U"Set data point x value...", 0, 1, MODIFY_DataModeler_setDataPointXValue);
  1104. praat_addAction1 (classDataModeler, 0, U"Set data point y sigma...", 0, 1, MODIFY_DataModeler_setDataPointYSigma);
  1105. praat_addAction1 (classDataModeler, 0, U"Set data point status...", 0, 1, MODIFY_DataModeler_setDataPointStatus);
  1106. praat_addAction1 (classDataModeler, 0, U"Fit model", 0, 0, MODIFY_DataModeler_fitModel);
  1107. praat_addAction1 (classDataModeler, 0, U"To Covariance (parameters)", 0, 0, NEW_DataModeler_to_Covariance_parameters);
  1108. praat_addAction1 (classDataModeler, 0, U"To Table (z-scores)...", 0, 0, NEW_DataModeler_to_Table_zscores);
  1109. praat_addAction1 (classFormant, 0, U"To FormantModeler...", U"To LPC...", praat_HIDDEN, NEW_Formant_to_FormantModeler);
  1110. praat_addAction1 (classFormant, 0, U"Extract smoothest part...", 0, praat_HIDDEN, NEW1_Formants_extractSmoothestPart);
  1111. praat_addAction1 (classFormant, 0, U"Extract smoothest part (constrained)...", 0, praat_HIDDEN, NEW1_Formants_extractSmoothestPart_constrained);
  1112. praat_addAction1 (classFormantModeler, 0, U"Draw -", 0, 0, 0);
  1113. praat_addAction1 (classFormantModeler, 0, U"Speckle...", 0, 1, GRAPHICS_FormantModeler_speckle);
  1114. praat_addAction1 (classFormantModeler, 0, U"Draw tracks...", 0, 1, GRAPHICS_FormantModeler_drawTracks);
  1115. praat_addAction1 (classFormantModeler, 0, U"Draw estimated tracks...", 0, 1, GRAPHICS_FormantModeler_drawEstimatedTracks);
  1116. praat_addAction1 (classFormantModeler, 0, U"Draw variances of shifted tracks...", 0, 1, GRAPHICS_FormantModeler_drawVariancesOfShiftedTracks);
  1117. praat_addAction1 (classFormantModeler, 0, U"Draw outliers marked...", 0, 1, GRAPHICS_FormantModeler_drawOutliersMarked);
  1118. praat_addAction1 (classFormantModeler, 0, U"Draw cumulative chisq scores...", 0, 1, GRAPHICS_FormantModeler_drawCumulativeChisqScores);
  1119. praat_addAction1 (classFormantModeler, 0, U"Normal probability plot...", 0, 1, GRAPHICS_FormantModeler_normalProbabilityPlot);
  1120. praat_addAction1 (classFormantModeler, 0, U"Draw basis function...", 0, 1, GRAPHICS_FormantModeler_drawBasisFunction);
  1121. praat_addAction1 (classFormantModeler, 1, U"Query -", 0, 0, 0);
  1122. praat_addAction1 (classFormantModeler, 0, U"Get number of tracks", 0, 1, INTEGER_FormantModeler_getNumberOfTracks);
  1123. praat_addAction1 (classFormantModeler, 1, U"-- get parameter info --", 0, 1, 0);
  1124. praat_addAction1 (classFormantModeler, 0, U"Get number of parameters...", 0, 1, INTEGER_FormantModeler_getNumberOfParameters);
  1125. praat_addAction1 (classFormantModeler, 0, U"Get number of fixed parameters...", 0, 1, INTEGER_FormantModeler_getNumberOfFixedParameters);
  1126. praat_addAction1 (classFormantModeler, 0, U"Get parameter value...", 0, 1, REAL_FormantModeler_getParameterValue);
  1127. praat_addAction1 (classFormantModeler, 0, U"Get parameter status...", 0, 1, INFO_FormantModeler_getParameterStatus);
  1128. praat_addAction1 (classFormantModeler, 0, U"Get parameter standard deviation...", 0, 1, REAL_FormantModeler_getParameterStandardDeviation);
  1129. praat_addAction1 (classFormantModeler, 0, U"Get variance of parameters...", 0, 1, REAL_FormantModeler_getVarianceOfParameters);
  1130. praat_addAction1 (classFormantModeler, 1, U"-- get data points info --", 0, 1, 0);
  1131. praat_addAction1 (classFormantModeler, 0, U"Get number of data points", 0, 1, INTEGER_FormantModeler_getNumberOfDataPoints);
  1132. praat_addAction1 (classFormantModeler, 0, U"Get number of invalid data points...", 0, praat_DEPTH_1 + praat_HIDDEN, INTEGER_FormantModeler_getNumberOfInvalidDataPoints);
  1133. praat_addAction1 (classFormantModeler, 0, U"Get model value at time...", 0, 1, REAL_FormantModeler_getModelValueAtTime);
  1134. praat_addAction1 (classFormantModeler, 0, U"Get data point value...", 0, 1, REAL_FormantModeler_getDataPointValue);
  1135. praat_addAction1 (classFormantModeler, 0, U"Get data point sigma...", 0, 1, REAL_FormantModeler_getDataPointSigma);
  1136. praat_addAction1 (classFormantModeler, 0, U"Get data point status...", 0, 1, INFO_FormantModeler_getDataPointStatus);
  1137. praat_addAction1 (classFormantModeler, 1, U"-- get statistics info --", 0, 1, 0);
  1138. praat_addAction1 (classFormantModeler, 0, U"Get residual sum of squares...", 0, 1, REAL_FormantModeler_getResidualSumOfSquares);
  1139. praat_addAction1 (classFormantModeler, 0, U"Get formant standard deviation...", 0, 1, REAL_FormantModeler_getFormantStandardDeviation);
  1140. praat_addAction1 (classFormantModeler, 0, U"Get coefficient of determination...", 0, 1, REAL_FormantModeler_getCoefficientOfDetermination);
  1141. praat_addAction1 (classFormantModeler, 0, U"Report chi squared...", 0, 1, INFO_FormantModeler_reportChiSquared);
  1142. praat_addAction1 (classFormantModeler, 0, U"Get degrees of freedom...", 0, 1, REAL_FormantModeler_getDegreesOfFreedom);
  1143. praat_addAction1 (classFormantModeler, 0, U"Get smoothness value...", 0, 1, REAL_FormantModeler_getSmoothnessValue);
  1144. praat_addAction1 (classFormantModeler, 0, U"Get average distance between tracks...", 0, 1, REAL_FormantModeler_getAverageDistanceBetweenTracks);
  1145. praat_addAction1 (classFormantModeler, 0, U"Get formants constraints factor...", 0, 1, REAL_FormantModeler_getFormantsConstraintsFactor);
  1146. praat_addAction1 (classFormantModeler, 1, U"Modify -", 0, 0, 0);
  1147. praat_addAction1 (classFormantModeler, 0, U"Set data weighing...", 0, 1, MODIFY_FormantModeler_setDataWeighing);
  1148. praat_addAction1 (classFormantModeler, 0, U"Set tolerance...", 0, 1, MODIFY_FormantModeler_setTolerance);
  1149. praat_addAction1 (classFormantModeler, 1, U"-- set parameter values --", 0, 1, 0);
  1150. praat_addAction1 (classFormantModeler, 0, U"Set parameter value fixed...", 0, 1, MODIFY_FormantModeler_setParameterValueFixed);
  1151. praat_addAction1 (classFormantModeler, 0, U"Set parameter free...", 0, 1, MODIFY_FormantModeler_setParameterFree);
  1152. praat_addAction1 (classFormantModeler, 0, U"Set parameter values to zero...", 0, 1, MODIFY_FormantModeler_setParameterValuesToZero);
  1153. praat_addAction1 (classFormantModeler, 1, U"-- set data points --", 0, 1, 0);
  1154. praat_addAction1 (classFormantModeler, 0, U"Set data point value...", 0, 1, MODIFY_FormantModeler_setDataPointValue);
  1155. praat_addAction1 (classFormantModeler, 0, U"Set data point sigma...", 0, 1, MODIFY_FormantModeler_setDataPointSigma);
  1156. praat_addAction1 (classFormantModeler, 0, U"Set data point status...", 0, 1, MODIFY_FormantModeler_setDataPointStatus);
  1157. praat_addAction1 (classFormantModeler, 0, U"Fit model", 0, 0, MODIFY_FormantModeler_fitModel);
  1158. praat_addAction1 (classFormantModeler, 0, U"To Covariance (parameters)...", 0, 0, NEW_FormantModeler_to_Covariance_parameters);
  1159. praat_addAction1 (classFormantModeler, 0, U"To Table (z-scores)...", 0, 0, NEW_FormantModeler_to_Table_zscores);
  1160. praat_addAction1 (classFormantModeler, 0, U"To FormantModeler (process outliers)...", 0, 0, NEW_FormantModeler_to_FormantModeler_processOutliers);
  1161. praat_addAction1 (classFormantModeler, 0, U"Extract DataModeler...", 0, 0, NEW_FormantModeler_extractDataModeler);
  1162. praat_addAction1 (classOptimalCeilingTier, 1, U"View & Edit", 0, praat_ATTRACTIVE | praat_NO_API, WINDOW_OptimalCeilingTier_edit);
  1163. praat_addAction1 (classPitch, 0, U"To PitchModeler...", U"To PointProcess", praat_HIDDEN, NEW_Pitch_to_PitchModeler);
  1164. praat_addAction1 (classPitchModeler, 0, U"Draw...", 0, 0, GRAPHICS_PitchModeler_draw);
  1165. praat_addAction1 (classSound, 0, U"Get optimal formant ceiling...", U"Get intensity (dB)", praat_DEPTH_1 | praat_HIDDEN, REAL_Sound_getOptimalFormantCeiling);
  1166. praat_addAction1 (classSound, 0, U"To Formant (interval)...", U"To Formant (robust)...", praat_DEPTH_2 | praat_HIDDEN, NEW_Sound_to_Formant_interval);
  1167. praat_addAction1 (classSound, 0, U"To Formant (interval, constrained)...", U"To Formant (interval)...",
  1168. praat_DEPTH_2 | praat_HIDDEN, NEW_Sound_to_Formant_interval_constrained);
  1169. praat_addAction1 (classSound, 0, U"To OptimalCeilingTier...", U"To Formant (interval, constrained)...", praat_DEPTH_2 | praat_HIDDEN, NEW_Sound_to_OptimalCeilingTier);
  1170. praat_addAction1 (classSound, 0, U"To Formant (interval, constrained, robust)...", U"To Formant (interval, constrained)...",
  1171. praat_DEPTH_2 | praat_HIDDEN, NEW_Sound_to_Formant_interval_constrained_robust);
  1172. praat_addAction1 (classTable, 0, U"To DataModeler...", U"To logistic regression...", praat_DEPTH_1 + praat_HIDDEN, NEW_Table_to_DataModeler);
  1173. }
  1174. /* End of file praat_DataModeler_init.cpp 1566*/