WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

DataMatrix - nur auf einen Teil zugreifen?

 

Montrealite

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.11.2010, 21:41     Titel: DataMatrix - nur auf einen Teil zugreifen?
  Antworten mit Zitat      
Hallo allerseits,

ich habe ein grosses Matlab-Problem. Ich bin noch voellige Novizin auf diesem Gebiet und hoffnungslos ueberfordert. Ich habe einen Versuch, in dem mehrere Stimuli dargeboten werden. Alle Stimuli sind random dot patterns. Das erste ist das sog. "sample", bei dem sich die Richtung, in die die Punkte sich bewegen, gemerkt werden soll. Der zweite Stimulus ist der sogenannte "test". Hier sieht man inkohaerente Bewegung, bis auf 4 kurze Impulse von Kohaeranz. Es soll von den Probanden gezaehlt werden, wie viele dieser kurzen Impulse mit der "sample"-Richtung uebereinstimmen (0, 1 oder 2). Auf der gegenueberliegenden Seite vom Fixationspunkt werden zwei RDPs uebereinander dargeboten ('pulse'-Stimuli). In beiden bewegen sich die Punkte inkohaerent, bis in z.b. dem oberen eine kurze kohaerente Bewegung zu erkennen ist. Die Probanden sollen angeben, ob diese Kohaerenz im oberen oder unteren Stimulus war.
Das ist der grobe Versuchsaufbar. Fuer das Design wird eine Daten-Matrix erstellt, die z.B. die Beziehung zwischen 'sample' und 'pulse'-Stimulus bestimmt (Abweichung von 0,45,90,135 oder 180 Grad). Da die einzelnen Trials relativ lang sind (ca. 10 Sekunden) und man ja eine gewisse Anzahl an trials pro Bedingung braucht, um eine fundierte Aussage ueber die Daten treffen zu koennen (in diesem Fall haben wir 60 Trials pro Bedingung, also 300 insgesamt), waere der Versuch insgesamt zu lang, um ihn in einem Rutsch durchzufuehren. Die Idee war nun, das auf 3x100 Trials aufzuteilen. Mein Problem ist nun, dass ich keine Ahnung habe, wie ich dem Script sagen soll, dass es auf die gleiche Datenmatrix fuer einen Probanden zugreifen soll, aber nur eine bestmmte Anzahl von trials (z.B. 101-200) aufrufen soll. Ich fuege mal sowohl das sog. Meta-Script als auch das der Datn-Matrix an und hoffe sehr, dass jemand verstanden hat, was ich will und mir helfen kann!

Viele Gruesse,
Theda


Code:
%Metascript
WMFA_Instructions
clear all

fn_name = '/Users/Theda/Grading_WMFBA/Grading_WMFBA_DataMatrixFile';

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
load([fn_name '.mat']);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Section to be included in order to send trigger to eye tracker computer:

% global DIO
% global daqID
% global portABits
% fp_initilizeDAQ;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%% USER INPUT %%%%%%%%%%%%%%%%%
'If training, input subject number > 55'

%Computer tells me the largest subject number that has been tested:

% AutomaticAssignmentOfSubjectNumber=input('To automatically assign the next subject number available, press 1. To manualy assign subject number, press 0:   ');
%
%
% if AutomaticAssignmentOfSubjectNumber==1
%
% foundlastsubject=0;
% for s=1:54
%
% if G_WMFBADataMatrix(s,1,5)>0
%  
% else
%    
%     if foundlastsubject==0
%     NextSubjectNumberAvailable=s
%    
%     end
%    
%     foundlastsubject=1;
% end
%
%
% end
%
%
% subject=NextSubjectNumberAvailable
%
%
% elseif AutomaticAssignmentOfSubjectNumber==0
%    
%    
%    
% subject=input('Subject number = ');
%
% end

subject=input('Subject number = ');

if subject>55
   TrainingOrNot=1;
    else
   TrainingOrNot=0;
end

 

PulseCoherenceForThisSubject=input('Pulse coherence for this subject = ');


if subject < 1 || subject > 60
    error('subject number invalid - stop');
end
if any(~isnan(G_WMFBADataMatrix(subject,:,16))) && subject ~= 55
      warning('are you SURE you have not testest this subject on this task already? Break if unsure (apple + dot)!');
    tmp = input('to CONTINUE & OVERWRITE Press 5, to break anything else: ');
    if tmp ~= 5
        error('abort, subj has been used before')
    end
end


% CHRONO_session = 3; % dual task!
%
% WMFA_Instructions(CHRONO_session)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% iniitiate some variables:
CorrectMatches=0;
InCorrectMatches=0;
CorrectPulseDirection=0;
InCorrectPulseDirection=0;
DataMatrixSize=size(G_WMFBADataMatrix);
TotalNumberOfTrials=DataMatrixSize(2);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Experiment parameters
%(Screen refresh rate in Julio psychophysics computer = 75)
ScreenRefreshRate=75;

FramesPerMillisecs=ScreenRefreshRate/1000;
%Generate and Open Screen Window:
%gfi = Screen('GetFlipInterval',wPtr);
flipSpd = 1;
screenNum = 1;
res = [1280 1024];
clrdepth = 32;
[wPtr, rect] = Screen('OpenWindow',screenNum,0,[0 0 res(1) res(2)],clrdepth);
black = BlackIndex(wPtr);
white = WhiteIndex(wPtr);
Screen('FillRect',wPtr,black);
Screen(wPtr,'Flip');
HideCursor;
vbl=Screen('Flip', wPtr);
XscreenCenter=res(1)/2;
YscreenCenter=res(2)/2;

% Screen('TextSize', wPtr , 40);
% Screen('DrawText', wPtr, '1. Remember sample direction and ', XscreenCenter-400, YscreenCenter-180, [255 255 255]);    
% Screen('DrawText', wPtr, '   count number of times the test', XscreenCenter-400, YscreenCenter-120, [255 255 255]);    
% Screen('DrawText', wPtr, '   direction matches it ', XscreenCenter-400, YscreenCenter-60, [255 255 255]);    
% Screen('DrawText', wPtr, '2. Determine pulse direction ', XscreenCenter-400, YscreenCenter-0, [255 255 255]);    
% Screen('DrawText', wPtr, 'solve BOTH tasks equally!', XscreenCenter-400, YscreenCenter+120, [255 255 255]);    
%
% vbl=Screen(wPtr, 'Flip');


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
for trialNumber=1:TotalNumberOfTrials
   


vbl=Screen(wPtr, 'Flip');
   
     
if TrainingOrNot==1

          clear RDP2xyCoord_i
      clear RDP2xyCoord_c
   
PulseCoherenceForThisTrial=input('Pulse coherence for this trial = ');

end
   

    trial= find(G_WMFBADataMatrix(subject,:,2)==trialNumber);

    G_WMFBADataMatrix(subject,trial,15)=PulseCoherenceForThisSubject;

    % DISPLAY ALL THE PARAMETERS OF THE CURRENT TRIAL:
    fprintf(['\n cuurenttrial, PulseSide, pulse, sample, pulsePeriod, howmanymatches \n']);
    [ trialNumber G_WMFBADataMatrix(subject,trial,14), G_WMFBADataMatrix(subject,trial,4), G_WMFBADataMatrix(subject,trial,9), G_WMFBADataMatrix(subject,trial,8), G_WMFBADataMatrix(subject,trial,6)]

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %RDP Parameters Script:
    Grading_WMFBA_RDPparametersScript
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %RDP Construction Script:
    Grading_WMFBA_RDPconstructionScript
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %RDP presentation Script
    Grading_WMFBA_RDPpresentationScript

   
    save([fn_name '.mat'],'G_WMFBADataMatrix')
end

FlushEvents

Screen('DrawText', wPtr, 'Session finished', XscreenCenter-200, YscreenCenter, [255 255 255]);
vbl=Screen(wPtr, 'Flip');
pause(2)

sca;
 


Code:
%Daten-Matrix-Construction

clear all

'You are about to produce a new data matrix, which may overwrite existing data.'
'To overwrite, input 123. To cancel, input any other number.'


Proceed=input('Proceed?');

if Proceed~=123
                error('ABORTED. Data matrix was not overwritten')
    end
   

conditions = 5;
TrialsPerCondition = 60;

totalNumberOfTrials=conditions*TrialsPerCondition;

fn_name = '/Users/Theda/Grading_WMFBA/Grading_WMFBA_DataMatrixFile';

columns=21;  % see instructions file for details on columns

subjects=60;

ConditionMatrix(:,1)=  [1 2 3 4 5];     % condition
ConditionMatrix(:,5)=  [0 45 90 135 180];   % sample (relative to pulse as in column 4)
G_WMFBADataMatrix=nan(subjects,totalNumberOfTrials,columns);

pulseDirToSampleArray=cat(5,0*ones(1,TrialsPerCondition),45*ones(1,TrialsPerCondition),90*ones(1,TrialsPerCondition),135*ones(1,TrialsPerCondition),180*ones(1,TrialsPerCondition));


for subject=1:subjects

    %Subject  1
    G_WMFBADataMatrix(subject,:,1)=subject*ones(1,totalNumberOfTrials);

    %Trial order 2
    G_WMFBADataMatrix(subject,:,2)=randperm(totalNumberOfTrials);

   
   
   
   
    for trial=1:totalNumberOfTrials

        %pulseDirToSample  3
                 pulseDirToSample=pulseDirToSampleArray(trial);

   
        G_WMFBADataMatrix(subject,trial,3)=pulseDirToSample;
       
           % Sample direction 9  
           
            SampleDirection=fix(rand(1,1)*359.999);
       
        G_WMFBADataMatrix(subject,trial,9)= SampleDirection;

       
       
         %pulse direction: 4    
       
         pulseDir=SampleDirection+pulseDirToSample;
       
       
         if pulseDir<0
           
            pulseDir=pulseDir+360;
           
          elseif pulseDir>360
             
                pulseDir=pulseDir-360;
         end
 
     
         G_WMFBADataMatrix(subject,trial,4) = pulseDir;

     

        %Number of Matches (between 1-3)  6
        NumberOfMatches = fix((rand(1,1)-.000001)*3);
        G_WMFBADataMatrix(subject,trial,6) = NumberOfMatches;
       
       
        matchingPeriods=randperm(4);
       
        for i=1:4
           
            if matchingPeriods(i)<=NumberOfMatches
       
        matchingPeriods(i)=1;
       
            else  
        matchingPeriods(i)=0;
       
            end
           
        end
               
               
        %Number of Matches Response (left blank)  7
       
       

        % Pulse Period  8
       
        pulsePeriod= fix((rand(1,1)-.000001)*3)+6;
       
        G_WMFBADataMatrix(subject,trial,8) = pulsePeriod;
       

       
        while sum(matchingPeriods(1:pulsePeriod-5))==2
           
   pulsePeriod= fix((rand(1,1)-.000001)*3)+6;
       
        G_WMFBADataMatrix(subject,trial,8) = pulsePeriod;
           
        end

       


        %Test directions 10-13
        for i = 1:4
           
            if matchingPeriods(i)==1
           
            G_WMFBADataMatrix(subject,trial,i+9) = SampleDirection;
           
            elseif matchingPeriods(i)==0
               
                testDirToSample=45*(fix(rand(1)*7)+1);
               
                testDir=SampleDirection+testDirToSample;
               
                if testDir>360
             
                testDir=testDir-360;
                end
              G_WMFBADataMatrix(subject,trial,i+9)=  testDir;
               
               
            end
        end
       
        %Pulse side  14
        G_WMFBADataMatrix(subject,trial,14)=round(rand(1,1))*2-1;

       
             %Correct pulse location  17
        G_WMFBADataMatrix(subject,trial,17)=round(rand(1,1))*2-1;

        clear SampleDirection TestDirectionOrder NumberOfMatches SampleDirection pulseDir condition
    end  % TRIAL

end  % subj


save([fn_name '.mat'],'G_WMFBADataMatrix')

fprintf(['new DataMatrixFile: ' fn_name ' written\n'])

 


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 04.11.2010, 01:27     Titel: Re: DataMatrix - nur auf einen Teil zugreifen?
  Antworten mit Zitat      
Hallo Montrealite,

Das Lesen der Nachricht ist auf meinem alten Laptop mit 1024 Pixel-breitem Monitor praktsch nicht möglich. Es wäre hilfreich, wenn Du den Code auf 80 Spalten Breite begrenzen würdest.

Zitat:
Alle Stimuli sind random dot patterns. Das erste ist das sog. "sample", bei dem sich die Richtung, in die die Punkte sich bewegen, gemerkt werden soll. Der zweite Stimulus ist der sogenannte "test". Hier sieht man inkohaerente Bewegung, bis auf 4 kurze Impulse von Kohaeranz...

Das verstehe ich nicht. Was ist ein "random dot pattern"?? Was ist "kohärente Bewegung"? Was bewegt sich? Was ist ein "Trial"? Was bedeutet "(0, 1, 2)"?
Ist diese Ansammlung von Fachausdrücken überhaupt wichtig, um Dein Matlab-Problem zu beschreiben?

Zitat:
... Das ist der grobe Versuchsaufbar.

Ich hoffe, dass Du diese Beschreibung des Versuchsaufbaus nicht so in eine Veröffentlichung schreibst. Ich zumindest keine Ahnung, wie der Versuch ablaufen soll.

Aber kommen wir zu Deinem Problem:
Zitat:
Mein Problem ist nun, dass ich keine Ahnung habe, wie ich dem Script sagen soll, dass es auf die gleiche Datenmatrix fuer einen Probanden zugreifen soll, aber nur eine bestmmte Anzahl von trials (z.B. 101-200) aufrufen soll. Ich fuege mal sowohl das sog. Meta-Script als auch das der Datn-Matrix an und hoffe sehr, dass jemand verstanden hat, was ich will und mir helfen kann!

Verblüffend. Du sprichts von "dem Script", postest dann aber zwei. Welches von beiden meinst Du?
Ich finde den Code ausgesprochen schwer lesbar. Wechselnde Einrückungen, Leerzeilen und viele Kommentare, die mit dem eigentlichen Problem nichts zu tun haben.

Kurz: Ich habe sowohl aus Deiner Beschreibung als auch aus Deinem Code nur einen sehr vagen Eindruck gewonnen, was Du versuchst zu tun und welches Problem Du haben könntest.

Kannst Du die Frage auf, sagen wir mal, 8 Zeilen eindampfen und den Code auf den relevanten Teil reduzieren? Ob das nun "random dot pattern" in "kohärenter Bewegung sind oder nicht, ist dabei bestimmt unwichtig.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.