Class: Exner::TestManchas

Inherits:
Object
  • Object
show all
Defined in:
lib/exner/test_manchas.rb

Direct Known Subclasses

Rorschach, Zulliger

Constant Summary collapse

FRECUENCIAS =
%w{localizacion dq contenidos contenidos_1 contenidos_2 determinantes ccee fqx fqf mq sqx wqx dqx wdx pares}
ZEST_FILE =
''

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeTestManchas

Returns a new instance of TestManchas.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/exner/test_manchas.rb', line 7

def initialize
	@zf= @zsum= @pares= @populares=@tipos_contenidos= 0
	@respuestas=Hash.new
	@laminas=Hash.new
	@frecuencias=Hash.new
	@complejos=Array.new
	@extras=Array.new
	FRECUENCIAS.each {|i|
		@frecuencias[i]=Hash.new
	}
	LOC_VALIDAS.each {|i|
		@frecuencias['localizacion'][i]=0;
	}
	DQ_VALIDAS.each {|i|
		@frecuencias['dq'][i]=0;
	}
	DET_VALIDOS.each {|i|
		@frecuencias['determinantes'][i]=0;
	}
	CONT_VALIDOS.each {|i|
		@frecuencias['contenidos'][i]=0;
		@frecuencias['contenidos_1'][i]=0;
		@frecuencias['contenidos_2'][i]=0;
	}
	CCEE_VALIDOS.each {|i|
		@frecuencias['ccee'][i]=0;
	}
	FQ_VALIDAS.each {|i|
		@frecuencias['fqx'][i]=0;
		@frecuencias['fqf'][i]=0;
		@frecuencias['mq'][i]=0;
		@frecuencias['sqx'][i]=0;
		@frecuencias['wqx'][i]=0;
		@frecuencias['dqx'][i]=0;
		@frecuencias['wdx'][i]=0;
	}

end

Instance Attribute Details

#complejosObject (readonly)

Returns the value of attribute complejos.



5
6
7
# File 'lib/exner/test_manchas.rb', line 5

def complejos
  @complejos
end

#extrasObject (readonly)

Returns the value of attribute extras.



5
6
7
# File 'lib/exner/test_manchas.rb', line 5

def extras
  @extras
end

#frecuenciasObject (readonly)

Returns the value of attribute frecuencias.



5
6
7
# File 'lib/exner/test_manchas.rb', line 5

def frecuencias
  @frecuencias
end

#laminasObject (readonly)

Returns the value of attribute laminas.



5
6
7
# File 'lib/exner/test_manchas.rb', line 5

def laminas
  @laminas
end

#msummObject (readonly)

Returns the value of attribute msumm.



5
6
7
# File 'lib/exner/test_manchas.rb', line 5

def msumm
  @msumm
end

#paresObject (readonly)

Returns the value of attribute pares.



5
6
7
# File 'lib/exner/test_manchas.rb', line 5

def pares
  @pares
end

#popularesObject (readonly)

Returns the value of attribute populares.



5
6
7
# File 'lib/exner/test_manchas.rb', line 5

def populares
  @populares
end

#respuestasObject (readonly)

Returns the value of attribute respuestas.



5
6
7
# File 'lib/exner/test_manchas.rb', line 5

def respuestas
  @respuestas
end

#sencillosObject (readonly)

Returns the value of attribute sencillos.



5
6
7
# File 'lib/exner/test_manchas.rb', line 5

def sencillos
  @sencillos
end

#tipos_contenidosObject (readonly)

Returns the value of attribute tipos_contenidos.



5
6
7
# File 'lib/exner/test_manchas.rb', line 5

def tipos_contenidos
  @tipos_contenidos
end

#zfObject (readonly)

Returns the value of attribute zf.



5
6
7
# File 'lib/exner/test_manchas.rb', line 5

def zf
  @zf
end

#zsumObject (readonly)

Returns the value of attribute zsum.



5
6
7
# File 'lib/exner/test_manchas.rb', line 5

def zsum
  @zsum
end

Instance Method Details

#_cObject



48
49
50
# File 'lib/exner/test_manchas.rb', line 48

def _c
	@frecuencias['contenidos']
end

#_cceeObject



51
52
53
# File 'lib/exner/test_manchas.rb', line 51

def _ccee
	@frecuencias['ccee']
end

#_dObject



45
46
47
# File 'lib/exner/test_manchas.rb', line 45

def _d
	@frecuencias['determinantes']
end

#_fObject



54
55
56
# File 'lib/exner/test_manchas.rb', line 54

def _f
	@frecuencias
end

#_lObject



57
58
59
# File 'lib/exner/test_manchas.rb', line 57

def _l
	localizaciones
end

#a_pObject



320
321
322
# File 'lib/exner/test_manchas.rb', line 320

def a_p
	activos.to_s+":"+pasivos.to_s
end

#a_porcientoObject



301
302
303
304
# File 'lib/exner/test_manchas.rb', line 301

def a_porciento
	c=@frecuencias['contenidos']
	porcentaje(c['A']+c['Ad'])
end

#activosObject



314
315
316
# File 'lib/exner/test_manchas.rb', line 314

def activos
	suma_preg('a')
end

#AdjDObject



250
251
252
# File 'lib/exner/test_manchas.rb', line 250

def AdjD
	Dscore(self.EA-self.Adjes)
end

#AdjesObject



226
227
228
229
230
# File 'lib/exner/test_manchas.rb', line 226

def Adjes
	madj=(sumdet('m')>0) ? 1:0;
	yadj=(sumdet('Y')>0) ? 1:0;
	sumdet('FM')+madj+(sumdet('T')+sumdet('V')+sumdet("C'")+ yadj)
end

#AfrObject



262
263
264
265
266
267
268
# File 'lib/exner/test_manchas.rb', line 262

def Afr
	n=Hash.new
@laminas.each {|x,l|
	n[x]=l.size
}
(n[8]+n[9]+n[10]).to_f/(n[1]+n[2]+n[3]+n[4]+n[5]+n[6]+n[7]).to_f
end

#AGObject



282
283
284
# File 'lib/exner/test_manchas.rb', line 282

def AG
	@frecuencias['ccee']['AG']
end

#aislamiento_rObject



285
286
287
288
# File 'lib/exner/test_manchas.rb', line 285

def aislamiento_r
	c=@frecuencias['contenidos']
	(2*c['Na']+2*c['Cl']+c['Bt']+c['Ls']+c['Ge']).to_f/self.R
end

#an_xyObject



433
434
435
# File 'lib/exner/test_manchas.rb', line 433

def an_xy
	@frecuencias['contenidos']['An']+@frecuencias['contenidos']['Xy']
end

#autocentracionObject

autopercepcion



424
425
426
# File 'lib/exner/test_manchas.rb', line 424

def autocentracion
	(3*sumdet('r')+@pares).to_f/self.R
end

#complj_rObject



269
270
271
# File 'lib/exner/test_manchas.rb', line 269

def complj_r
	porcentaje(@complejos.size)
end

#COPObject

interpersonal



276
277
278
# File 'lib/exner/test_manchas.rb', line 276

def COP
	@frecuencias['ccee']['COP']
end

#CPObject



272
273
274
# File 'lib/exner/test_manchas.rb', line 272

def CP
	@frecuencias['ccee']['CP']
end

#DObject



247
248
249
# File 'lib/exner/test_manchas.rb', line 247

def D
	Dscore(self.EA-es)
end

#detObject

sumatoria de color ponderado



159
160
161
# File 'lib/exner/test_manchas.rb', line 159

def det
	@frecuencias['determinantes']
end

#determinantes_simplesObject



144
145
146
147
148
149
150
151
152
153
# File 'lib/exner/test_manchas.rb', line 144

def determinantes_simples
	res=@frecuencias['determinantes'].dup
	['M','FM','m'].each {|mov|
		res[mov]=res[mov+'a']+res[mov+'p']
		res.delete(mov+'a')
		res.delete(mov+'p')
	}
	res['(2)']=@pares
	res
end

#dqmasObject



417
418
419
# File 'lib/exner/test_manchas.rb', line 417

def dqmas
	@frecuencias['dq']['+']
end

#dqvObject



420
421
422
# File 'lib/exner/test_manchas.rb', line 420

def dqv
	@frecuencias['dq']['v']
end

#Dscore(d) ⇒ Object



243
244
245
246
# File 'lib/exner/test_manchas.rb', line 243

def Dscore(d)
	return 0 if d>=-2.5 and d<=2.5
	(((d.abs-3)/2.5)+1).to_i*(d<0 ? -1:+1)
end

#EAObject



211
212
213
# File 'lib/exner/test_manchas.rb', line 211

def EA
	(msum+sumcolpond).to_f
end

#each_determinanteObject



81
82
83
# File 'lib/exner/test_manchas.rb', line 81

def each_determinante
	@respuestas.each {|n,resp| resp.determinantes.each {|det| yield det }}
end

#EBObject



208
209
210
# File 'lib/exner/test_manchas.rb', line 208

def EB
	sumdet('M').to_s+":"+sumcolpond.to_s
end

#ebObject



220
221
222
# File 'lib/exner/test_manchas.rb', line 220

def eb
	eb_izq.to_s+":"+eb_der.to_s
end

#eb_derObject



217
218
219
# File 'lib/exner/test_manchas.rb', line 217

def eb_der
	(sumdet('T')+sumdet('V')+sumdet("C'")+ sumdet('Y'))
end

#eb_izqObject



214
215
216
# File 'lib/exner/test_manchas.rb', line 214

def eb_izq
	(sumdet('FM')+sumdet('m'))
end

#EBPerObject



231
232
233
234
235
236
237
238
239
240
241
242
# File 'lib/exner/test_manchas.rb', line 231

def EBPer
	if (((msum-sumcolpond).abs<=2 and self.EA<=10) or
	self.EA>10)
	if msum>sumcolpond
		msum/sumcolpond
		else
		sumcolpond/msum
		end
	else
	false
	end
end

#esObject



223
224
225
# File 'lib/exner/test_manchas.rb', line 223

def es
	eb_izq+eb_der
end

#fc_cf_cObject

FC:CF+C



256
257
258
# File 'lib/exner/test_manchas.rb', line 256

def fc_cf_c
	(det['FC']).to_s+':'+(det['CF']+det['C']).to_s
end

#FDObject



430
431
432
# File 'lib/exner/test_manchas.rb', line 430

def FD
	@frecuencias['determinantes']['FD']
end

#FdObject



279
280
281
# File 'lib/exner/test_manchas.rb', line 279

def Fd
	@frecuencias['contenidos']['Fd']
end

#fmasObject



381
382
383
# File 'lib/exner/test_manchas.rb', line 381

def fmas
	(@frecuencias['fqf']['o']+@frecuencias['fqf']['+']).to_f/ determinantes_simples['F']
end

#fr_rfObject



427
428
429
# File 'lib/exner/test_manchas.rb', line 427

def fr_rf
	sumdet('r')
end

#h_a_hd_adObject



297
298
299
300
# File 'lib/exner/test_manchas.rb', line 297

def h_a_hd_ad
	c=@frecuencias['contenidos']
	(c['H']+c['A']).to_s+':'+(c['Hd']+c['Ad']).to_s
end

#h_h_hd_hdObject



289
290
291
# File 'lib/exner/test_manchas.rb', line 289

def h_h_hd_hd
	_c['H'].to_s+':'+(_c['(H)']+_c['Hd']+_c['(Hd)']).to_s
end

#intelectualizacionObject



333
334
335
336
# File 'lib/exner/test_manchas.rb', line 333

def intelectualizacion
c=@frecuencias['contenidos']
2*@frecuencias['ccee']['AB']+(c['Art']+c['Ay'])
end

#LObject



201
202
203
204
205
206
207
# File 'lib/exner/test_manchas.rb', line 201

def L
	fp=0.0
	@respuestas.each {|n,resp|
		fp+=1 if resp.determinantes==['F']
	}
	return fp.to_f / (self.R-fp)
end

#localizacionesObject



131
132
133
134
135
136
137
138
139
140
141
142
143
# File 'lib/exner/test_manchas.rb', line 131

def localizaciones
	res=Hash.new
	locs=%w{W Wv D Dd S}
	locs.each {|i| res[i]=0}
	@respuestas.each {|n,resp|
		res['W']+=1 if resp.localizacion_pura=='W'
		res['Wv']+=1 if resp.localizacion_pura=='W' and resp.dq=='v'
		res['D']+=1 if resp.localizacion_pura=='D'
		res['Dd']+=1 if resp.localizacion_pura=='Dd'
		res['S']+=1 if resp.localizacion=~/S/
	}
	res
end

#m_menosObject



337
338
339
# File 'lib/exner/test_manchas.rb', line 337

def m_menos
	@frecuencias['mq']['-']
end

#Ma_MpObject



323
324
325
326
327
328
329
330
331
332
# File 'lib/exner/test_manchas.rb', line 323

def Ma_Mp
	a=p=0
	each_determinante {|det|
		if(det=='Ma' or det=='Mp')
			a+=1 if det=~/a/
			p+=1 if det=~/p/
		end
	}
	a.to_s+":"+p.to_s
end

#morObject



436
437
438
# File 'lib/exner/test_manchas.rb', line 436

def mor
	@frecuencias['ccee']['MOR']
end

#msinObject



367
368
369
370
371
372
373
# File 'lib/exner/test_manchas.rb', line 367

def msin
	suma=0
	@respuestas.each {|n,resp|
		suma+=1 if resp.fq=='sin' and resp.determinantes.detect {|a| a=='Ma' or a=='Mp'}
		}
	suma
end

#msumObject



155
156
157
# File 'lib/exner/test_manchas.rb', line 155

def msum
	sumdet('M')
end

#nvl2Object



358
359
360
361
362
363
364
365
366
# File 'lib/exner/test_manchas.rb', line 358

def nvl2
	suma=0
	@respuestas.each {|n,resp|
		resp.ccee.each {|ccee|
			suma+=1 if CCEE_IDEACION.has_key?(ccee) and ccee=~/2/
		}
	}
	suma
end

#obtenerZ(lamina, tipo) ⇒ Object



84
85
86
# File 'lib/exner/test_manchas.rb', line 84

def obtenerZ(lamina,tipo)
	return @laminas_z[lamina][tipo]
end

#open_file(file) ⇒ Object



75
76
77
78
79
80
# File 'lib/exner/test_manchas.rb', line 75

def open_file(file)
	raise "No se definió archivo" if file.nil?
	File.open(file,'r') {|f|
		open_stream(f)
	}
end

#open_stream(stream) ⇒ Object



65
66
67
68
69
70
71
72
73
74
# File 'lib/exner/test_manchas.rb', line 65

def open_stream(stream)
    stream.each_line {|linea|
      resp=Exner::Respuesta.new(self,linea)
      lam=resp.lamina
      @laminas[lam]=Array.new if @laminas[lam].nil?
      raise "no pueden existir dos respuestas con el mismo número" if @respuestas.has_key?(resp.respuesta)
      @respuestas[resp.respuesta]=resp
      @laminas[lam].push(resp)
    }
end

#PObject

mediacion



375
376
377
# File 'lib/exner/test_manchas.rb', line 375

def P
	@populares
end

#p_h_hd_p_a_adObject



292
293
294
295
296
# File 'lib/exner/test_manchas.rb', line 292

def p_h_hd_p_a_ad
	c=@frecuencias['contenidos']
	(c['(H)']+c['(Hd)']).to_s+':'+(c['(A)']+c['(Ad)']).to_s

end

#pasivosObject



317
318
319
# File 'lib/exner/test_manchas.rb', line 317

def pasivos
	suma_preg('p')
end

#porcentaje(valor) ⇒ Object



305
306
307
# File 'lib/exner/test_manchas.rb', line 305

def porcentaje(valor)
	return valor.to_f/self.R
end

#procesarObject



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/exner/test_manchas.rb', line 87

def procesar
	@respuestas.each do |n,resp|
		@zf+=1 if resp.z >0
		@zsum+=resp.z
		@pares+=1 if resp.par
		@populares+=1 if resp.popular
		raise "No existe localizacion para la respuesta "+n.to_s if resp.localizacion.nil?
		@frecuencias['localizacion'][resp.localizacion]+=1
		@frecuencias['dq'][resp.dq]+=1
		@frecuencias['fqx'][resp.fq]+=1
		@frecuencias['fqf'][resp.fq]+=1 if resp.determinantes==['F']
		@frecuencias['mq'][resp.fq]+=1 if resp.tiene_movimiento_humano?
		@frecuencias['sqx'][resp.fq]+=1 if resp.localizacion=~/S/
		@frecuencias['wqx'][resp.fq]+=1 if resp.localizacion_pura=='W'
		@frecuencias['dqx'][resp.fq]+=1 if resp.localizacion_pura=='D'
		@frecuencias['wdx'][resp.fq]+=1 if resp.localizacion_pura=='W' or resp.localizacion_pura=='D'
		@complejos.push(resp) if resp.determinantes.size>1
		resp.determinantes.each {|d|
			@frecuencias['determinantes'][d]+=1
		}
		cp=true
		resp.contenidos.each {|d|
			@frecuencias['contenidos'][d]+=1
			@tipos_contenidos+=1 if @frecuencias['contenidos'][d]==1
			if cp
				@frecuencias['contenidos_1'][d]+=1
				cp=false
			else
				@frecuencias['contenidos_2'][d]+=1
			end

		}
		resp.ccee.each {|d|
			@frecuencias['ccee'][d]+=1
		}
	end
	procesar_extras
end

#procesar_extrasObject



125
126
127
128
129
130
# File 'lib/exner/test_manchas.rb', line 125

def procesar_extras
  Dir[Exner.dir_root+'/exner/'+self.class.to_s.gsub('Exner::','').downcase+'_plugins/*.rb'].each {|file|
    require file
  }

end

#RObject

Controles



198
199
200
# File 'lib/exner/test_manchas.rb', line 198

def R
	@respuestas.size
end

#resumen_del_enfoqueObject



187
188
189
190
191
192
193
194
195
196
# File 'lib/exner/test_manchas.rb', line 187

def resumen_del_enfoque
	res=Hash.new
	@laminas.each {|ln,resps|
		resps.sort.each {|resp|
			res[ln]=Array.new if res[ln].nil?
			res[ln].push(resp.localizacion_pura)
		}
	}
	res.sort
end

#smenosObject



387
388
389
390
# File 'lib/exner/test_manchas.rb', line 387

def smenos
	@frecuencias['sqx']['-'].to_f/@frecuencias['fqx']['-']

end

#suma_preg(p) ⇒ Object

Ideación



309
310
311
312
313
# File 'lib/exner/test_manchas.rb', line 309

def suma_preg(p)
	suma=0
	each_determinante {|det| suma+=1 if det=~/#{p}/ }
	suma
end

#SumBr6Object



340
341
342
343
344
345
346
347
348
# File 'lib/exner/test_manchas.rb', line 340

def SumBr6
	suma=0
	@respuestas.each {|n,resp|
		resp.ccee.each {|ccee|
			suma+=1 if CCEE_IDEACION.has_key?(ccee)
		}
	}
	suma
end

#sumc_wsumcObject



259
260
261
# File 'lib/exner/test_manchas.rb', line 259

def sumc_wsumc
	(sumdet("C'")).to_s+":"+(det['FC']*0.5+det['CF']+det['C']*1.5).to_s
end

#sumcolpondObject



162
163
164
# File 'lib/exner/test_manchas.rb', line 162

def sumcolpond
_d['C']*1.5+_d['CF']+_d['FC']*0.5
end

#sumdet(tipo) ⇒ Object

sumatoria de items de un determinado tipo



167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
# File 'lib/exner/test_manchas.rb', line 167

def sumdet(tipo)
	suma=0
	each_determinante {|det|
			if tipo=='M'
				suma+=1 if det=='Ma' or det=='Mp'
			elsif tipo=='FD'
				suma+=1 if det=='FD'
			elsif tipo=='C'
				suma+=1 if det=='C' or det=='FC' or det=='CF'
			elsif tipo=='Cn'
				suma+=1 if det=='Cn'
			elsif tipo=='F'
				suma+1 if det=='F'
			else
				det=det.gsub(/[ap]/,'')
				suma+=1 if det=~/#{tipo}/
			end
	}
	suma
end

#SumPon6Object



349
350
351
352
353
354
355
356
357
# File 'lib/exner/test_manchas.rb', line 349

def SumPon6
	suma=0
	@respuestas.each {|n,resp|
		resp.ccee.each {|ccee|
			suma+=CCEE_IDEACION[ccee] if CCEE_IDEACION.has_key?(ccee)
		}
	}
	suma
end

#w_d_ddObject



409
410
411
412
# File 'lib/exner/test_manchas.rb', line 409

def w_d_dd
	l=localizaciones
	sprintf("%d:%d:%d",l['W'],l['D'],l['Dd'])
end

#w_mObject



413
414
415
416
# File 'lib/exner/test_manchas.rb', line 413

def w_m
	l=localizaciones
	sprintf("%d:%d",l['W'],determinantes_simples['M'])
end

#wdaObject



397
398
399
400
401
# File 'lib/exner/test_manchas.rb', line 397

def wda
	wdx=@frecuencias['wdx']
	loc=localizaciones
	(wdx['+']+wdx['o']+wdx['u']).to_f/(loc['W']+loc['D'])
end

#xaObject



394
395
396
# File 'lib/exner/test_manchas.rb', line 394

def xa
	(@frecuencias['fqx']['o']+@frecuencias['fqx']['+']+ @frecuencias['fqx']['u']).to_f/self.R
end

#xmasObject



378
379
380
# File 'lib/exner/test_manchas.rb', line 378

def xmas
	(@frecuencias['fqx']['o']+@frecuencias['fqx']['+']).to_f/self.R
end

#xmenosObject



384
385
386
# File 'lib/exner/test_manchas.rb', line 384

def xmenos
	@frecuencias['fqx']['-'].to_f/self.R
end

#xuObject



391
392
393
# File 'lib/exner/test_manchas.rb', line 391

def xu
	@frecuencias['fqx']['u'].to_f/self.R
end

#ZdObject



406
407
408
# File 'lib/exner/test_manchas.rb', line 406

def Zd
	@zsum-zest
end

#zestObject



61
62
63
64
# File 'lib/exner/test_manchas.rb', line 61

def zest
	aEst=Exner::open_zest(self.ZEST_FILE)
	aEst[@zf]
end

#ZfObject

Procesamiento



403
404
405
# File 'lib/exner/test_manchas.rb', line 403

def Zf
	@zf
end