+ (setq role (nth 2 (car rolenode)))
+ (setq context (nth 2 (car contextnode)))
+ (setq demand (nth 2 (car demandnode)))
+ ;; (with-current-buffer "Statistics Output"
+ ;; (insert (format "role: %s; context: %s; demand: %s\n" role context demand)))
+ ))
+
+ (dolist (turn transcription)
+ (let* ((interventionnode (xml-get-children turn
+ (intern personid))))
+
+ (dolist (intervention interventionnode)
+ (let* ((l2node (xml-get-children intervention 'l2))
+ (l1node (xml-get-children intervention 'l1)))
+
+ (dolist (l2turn l2node)
+ (let* ((l2 (nth 2 l2turn))
+ (attrs (nth 1 l2turn))
+ (clausesl2nodeinc (cdr (assq 'clauses attrs)))
+ (errorsl2inc (cdr (assq 'errors attrs)))
+ (function (cdr (assq 'function attrs))))
+
+ (when (string-equal function "initiating")
+ (setq initiating (+ initiating 1)))
+ (when (string-equal function "responding")
+ (setq responding (+ responding 1)))
+ (when (string-equal function "control")
+ (setq control (+ control 1)))
+ (when (string-equal function "expressive")
+ (setq expressive (+ expressive 1)))
+ (when (string-equal function "interpersonal")
+ (setq interpersonal (+ interpersonal 1)))
+ (when attrs
+ (setq clausesl2 (+ clausesl2 (string-to-number
+ clausesl2nodeinc)))
+ (setq errorsl2 (+ errorsl2 (string-to-number
+ errorsl2inc))))
+ (when l2
+ ;; (add-to-list 'interventionsl2 l2)
+ (cl-pushnew l2 interventionsl2 :test #'equal)
+ (setq asunitsl2 (1+ asunitsl2)))))
+ (dolist (l1turn l1node)
+ (let*((l1 (nth 2 l1turn))
+ (clausesl1node (nth 1 l1turn))
+ (clausesl1nodeinc (cdr (car clausesl1node))))
+
+ (when (not (equal clausesl1node nil))
+ (setq clausesl1 (+ clausesl1 (string-to-number
+ clausesl1nodeinc))))
+ (when l1
+ ;; (add-to-list 'interventionsl1 l1)
+ (cl-pushnew l1 interventionsl1 :test #'equal)
+ (setq asunitsl1 (1+ asunitsl1)))))))))))))
+ (reverse interventionsl2)
+ ;; (write-region (format "%s" interventionsl2) nil (format "transcribe-output-%s-%s-l2.txt" episodenumber personid))
+ ;; Write raw interventions to file will be supported by a different function
+ (reverse interventionsl1)
+ ;; (write-region (format "%s" interventionsl1) nil (format "transcribe-output-%s-%s-l1.txt" episodenumber personid))
+ ;; (print interventionsl2) ;uncomment to display all the interventions on screen
+ (let((asunitspersecondl2 (/ asunitsl2 (string-to-number duration)))
+ (clausesperasunitl2 (/ clausesl2 asunitsl2))
+ (errorsperasunitl2 (/ errorsl2 asunitsl2))
+ (asunitspersecondl1 (/ asunitsl1 (string-to-number duration)))
+ ;; (clausesperasunitl1 (/ clausesl1 asunitsl1))
+ (initiatingperasunitl2 (/ initiating asunitsl2))
+ (respondingperasunitl2 (/ responding asunitsl2))
+ (controlperasunitl2 (/ control asunitsl2))
+ (expressiveperasunitl2 (/ expressive asunitsl2))
+ (interpersonalperasunitl2 (/ interpersonal asunitsl2)))
+
+ ;; (princ clausesmessage)
+ (princ (format "episode: %s, duration: %s, person: %s\n" episodenumber duration personid))
+ (with-current-buffer "Statistics Output"
+ (insert (format "%s,%s,%s,0,0,%s,%s,%s,%s,%s,QUAN-L2,segmented,aux,level,subject,yearofclil,month\n" personid episodenumber duration role context demand asunitspersecondl2 asunitspersecondl1)))
+ (princ (format "L2(Asunits/second): %s, L2(clauses/Asunit): %s, L2(errors/Asunit):%s, L1(Asunits/second): %s\n"
+ asunitspersecondl2 clausesperasunitl2 errorsperasunitl2 asunitspersecondl1))
+ (princ (format "Functions/unit: Initiating: %s, Responding: %s, Control: %s, Expressive: %s, Interpersonal: %s" initiatingperasunitl2 respondingperasunitl2 controlperasunitl2 expressiveperasunitl2 interpersonalperasunitl2)))))
+
+(defun transcribe-analyze-all ()
+ "Analyze all file and output to `Statistics Output' buffer. The buffer will
+ lost all previous data. The data in the buffer can be saved to a file and be
+ passed to R for statistical analysis."