Contents

function MRPhysics()

Contrast Properties

In many cases, it is possible to approximate the signal intensities of various body tissues for any given pulse sequence, if properties of the tissue are known.

The crucial tissue properties are: Proton density (usually close to 1) T1, T2, T2* - (T2* is not exactly a tissue property...)

All three relaxation parameters have a field strength dependence. T2* depends also on the location of the tissue within the magnetic field.

Here we will use the known signal intensity equations for a few common imaging sequences and tissues to examine contrast behavior

Starting with tissues

We use a struct definition for convenience. A tissue is defined as

 Tissue.t1
 Tissue.t2
 Tissue.pd
 Tissue.t2star

Here are nominal values at 3 Tesla

We assume that the magnet is shimmed to within 0.25 ppm giving

T2prime = 150;    % msec
R2prime = 1/T2prime;

Grey.t1 = 1500;  % msec
Grey.t2 = 75;
Grey.pd = 0.95;
GreyR2 = 1/Grey.t2;
% The observed relaxation rate depends on both T2 and T2prime:
Grey.t2star = 1/(GreyR2 + R2prime)

White.t1 = 1400;
White.t2 = 65;
White.pd = 0.95;
WhiteR2 = 1/White.t2;
White.t2star = 1/(WhiteR2 + R2prime)

CSF.t1 = 3000;
CSF.t2 = 180;
CSF.pd = 1;
CSFR2 = 1/CSF.t2;
CSF.t2star = 1/(CSFR2 + R2prime)
Grey = 

        t1: 1500
        t2: 75
        pd: 0.9500
    t2star: 50


White = 

        t1: 1400
        t2: 65
        pd: 0.9500
    t2star: 45.3488


CSF = 

        t1: 3000
        t2: 180
        pd: 1
    t2star: 81.8182

Signal intensity and contrast vs. sequence parameters in a spin echo sequence

We can make plot of the signals as functions of sequence parameters. It is useful to have a set of starting parameters

tr = 500;
te = 20;

trmax = tr * 3;
trmin = 0;
trstep = (trmax-trmin)/499;    % Plot 500 points

temax = 150;
temin = 0;
temax = max(te*3, temax); % we plot long te values in all cases.
testep = (temax-temin)/499;    % Plot 500 points

% The SpinEcho function is defined in SpinEcho.m
GreySE_TR = SpinEcho( Grey, trmin:trstep:trmax, te );   % Signal for a range of tr's
GreySE_TE = SpinEcho( Grey, tr, temin:testep:temax );   % Signal for a range of te's
GreyColor = [0.6 0.6 0.6];  % grey

WhiteSE_TR = SpinEcho( White, trmin:trstep:trmax, te );
WhiteSE_TE = SpinEcho( White, tr, temin:testep:temax );
WhiteColor = [0 0 0];   % black

CSFSE_TR = SpinEcho( CSF, trmin:trstep:trmax, te );
CSFSE_TE = SpinEcho( CSF, tr, temin:testep:temax );
CSFColor = [0 0 1]; % blue


% Plot the tissue signals vs. tr
figure;
subplot(2,2,1);
plot( trmin:trstep:trmax, GreySE_TR, 'Color', GreyColor);
set(gcf,'Color','White');
hold;
plot( trmin:trstep:trmax, WhiteSE_TR, 'Color', WhiteColor);
plot( trmin:trstep:trmax, CSFSE_TR, 'Color', CSFColor);
set(gca,'xlim',[trmin trmax]);
xlabel( 'tr (msec)' );
YAxisLabel = sprintf('Nominal signal\nte = %d msec',te);
ylabel(YAxisLabel);
legend1 = legend('Grey','White','CSF');
legend(legend1,'boxoff');
set(legend1,'Location','SouthOutside','Orientation','Horizontal');

% Plot the grey-white contrast
subplot(2,2,3);
plot( trmin:trstep:trmax, 100 * (GreySE_TR - WhiteSE_TR), 'linewidth', 2, 'Color', 'red');
set(gca,'xlim',[trmin trmax]);
xlabel( 'tr (msec)' );
YAxisLabel = sprintf('Grey-White Contrast (%%)\nte = %d msec',te);
ylabel(YAxisLabel);

% Plot the tissue signals vs. te
subplot(2,2,2);
plot( temin:testep:temax, GreySE_TE, 'Color', GreyColor);
hold;
plot( temin:testep:temax, WhiteSE_TE, 'Color', WhiteColor);
plot( temin:testep:temax, CSFSE_TE, 'Color', CSFColor);
set(gca,'xlim',[temin temax]);
xlabel( 'te (msec)' );
YAxisLabel = sprintf('Nominal signal\ntr = %d msec',tr);
ylabel(YAxisLabel);

% Plot the grey-white contrast
subplot(2,2,4);
plot( temin:testep:temax, 100 * (GreySE_TE - WhiteSE_TE), 'linewidth', 2, 'Color', 'red');
set(gca,'xlim',[temin temax]);
xlabel( 'te (msec)' );
YAxisLabel = sprintf('Grey-White Contrast (%%)\ntr = %d msec',tr);
ylabel(YAxisLabel);
Current plot held
Current plot held

Signal intensities for an Inversion Recovery Sequence.

Plot the tissue signals vs. tr, te and ti The IR function is defined in IR.m

% We start with shorter tr's and te's for IR than for the other
% sequences

tr = 3000;
te = 20;
ti = 1138;
Magnitude = false;   % Magnitude images only (not phase sensitive)

trmax = tr * 3;
trmin = ti;
trstep = (trmax-trmin)/499;    % Plot 500 points

temax = 100;
temin = 0;
temax = max(te*3, temax); % we plot long te values in all cases.
testep = (temax-temin)/499;    % Plot 500 points

timin = 0;
timax = max(tr,3*ti);
tistep = (timax-timin)/499;

GreyIR_TR = IR( Grey, trmin:trstep:trmax, te, ti, Magnitude );
GreyIR_TE = IR( Grey, tr, temin:testep:temax, ti, Magnitude );
GreyIR_ti = IR( Grey, tr, te, timin:tistep:timax, Magnitude );
GreyColor = [0.6 0.6 0.6];  % grey

WhiteIR_TR = IR( White, trmin:trstep:trmax, te, ti, Magnitude );
WhiteIR_TE = IR( White, tr, temin:testep:temax, ti, Magnitude );
WhiteIR_ti = IR( White, tr, te, timin:tistep:timax, Magnitude );
WhiteColor = [0 0 0];   % black

CSFIR_TR = IR( CSF, trmin:trstep:trmax, te, ti, Magnitude );
CSFIR_TE = IR( CSF, tr, temin:testep:temax, ti, Magnitude );
CSFIR_ti = IR( CSF, tr, te, timin:tistep:timax, Magnitude );
CSFColor = [0 0 1]; % blue

% Plot the tissue signals vs. tr
figure;
subplot(2,3,1);
plot( trmin:trstep:trmax, GreyIR_TR, 'Color', GreyColor);
set(gcf,'Color','White')
hold;
plot( trmin:trstep:trmax, WhiteIR_TR, 'Color', WhiteColor);
plot( trmin:trstep:trmax, CSFIR_TR, 'Color', CSFColor);
set(gca,'xlim',[trmin trmax]);
xlabel( 'tr (msec)' );
YAxisLabel = sprintf('Nominal signal\nte=%d msec, ti=%d',te,ti);
ylabel(YAxisLabel);
legend1 = legend('Grey','White','CSF');
legend(legend1,'boxoff');
set(legend1,'Location','SouthOutside','Orientation','Horizontal');

% Plot the grey-white contrast
subplot(2,3,4);
plot( trmin:trstep:trmax, 100 * (GreyIR_TR - WhiteIR_TR), 'linewidth', 2, 'Color', 'red');
set(gca,'xlim',[trmin trmax]);
xlabel( 'tr (msec)' );
YAxisLabel = sprintf('Grey-White Contrast (%%)\nte=%d msec, ti=%d',te,ti);
ylabel(YAxisLabel);

% Plot the tissue signals vs. te
subplot(2,3,2);
plot( temin:testep:temax, GreyIR_TE, 'Color', GreyColor);
hold;
plot( temin:testep:temax, WhiteIR_TE, 'Color', WhiteColor);
plot( temin:testep:temax, CSFIR_TE, 'Color', CSFColor);
set(gca,'xlim',[temin temax]);
xlabel( 'te (msec)' );
YAxisLabel = sprintf('Nominal signal\ntr=%d msec, ti=%d',tr,ti);
ylabel(YAxisLabel);

% Plot the grey-white contrast
subplot(2,3,5);
plot( temin:testep:temax, 100 * (GreyIR_TE - WhiteIR_TE), 'linewidth', 2, 'Color', 'red');
set(gca,'xlim',[temin temax]);
xlabel( 'te (msec)' );
YAxisLabel = sprintf('Grey-White Contrast (%%)\ntr=%d msec, ti=%d',tr,ti);
ylabel(YAxisLabel);

% Plot the tissue signals vs. ti
subplot(2,3,3);
plot( timin:tistep:timax, GreyIR_ti, 'Color', GreyColor);
hold;
plot( timin:tistep:timax, WhiteIR_ti, 'Color', WhiteColor);
plot( timin:tistep:timax, CSFIR_ti, 'Color', CSFColor);
set(gca,'xlim',[timin timax]);
xlabel( 'ti (msec)' );
YAxisLabel = sprintf('Nominal signal\nte=%d msec, tr = %d msec',te,tr);
ylabel(YAxisLabel);

% Plot the grey-white contrast
subplot(2,3,6);
plot( timin:tistep:timax, 100 * (GreyIR_ti - WhiteIR_ti), 'linewidth', 2, 'Color', 'red');
set(gca,'xlim',[timin timax]);
xlabel( 'ti (msec)' );
YAxisLabel = sprintf('Grey-White Contrast (%%)\nte=%d msec, tr = %d msec',te,tr);
ylabel(YAxisLabel);
Current plot held
Current plot held
Current plot held

Signal intensities for a FLASH Sequence

Plot the tissue signals vs. tr, te and flip angle The FLASH function is defined in FLASH.m

% We start with shorter tr's and te's for FLASH than for the other
% sequences

tr = 100;
te = 5;
flip = 10;

trmax = tr * 3;
trmin = 0;
trstep = (trmax-trmin)/499;    % Plot 500 points

temax = 100;
temin = 0;
temax = max(te*3, temax); % we plot long te values in all cases.
testep = (temax-temin)/499;    % Plot 500 points

flipmin = 0;
flipmax = 90;   % degrees
flipstep = (flipmax-flipmin)/499;

GreyFL_TR = FLASH( Grey, trmin:trstep:trmax, te, flip );
GreyFL_TE = FLASH( Grey, tr, temin:testep:temax, flip );
GreyFL_flip = FLASH( Grey, tr,te, flipmin:flipstep:flipmax );
GreyColor = [0.6 0.6 0.6];  % grey

WhiteFL_TR = FLASH( White, trmin:trstep:trmax, te, flip );
WhiteFL_TE = FLASH( White, tr, temin:testep:temax, flip );
WhiteFL_flip = FLASH( White, tr, temin:testep:temax, flipmin:flipstep:flipmax );
WhiteColor = [0 0 0];   % black

CSFFL_TR = FLASH( CSF, trmin:trstep:trmax, te, flip );
CSFFL_TE = FLASH( CSF, tr, temin:testep:temax, flip );
CSFFL_flip = FLASH( CSF, tr, te, flipmin:flipstep:flipmax );
CSFColor = [0 0 1]; % blue

% Plot the tissue signals vs. tr
figure;
subplot(2,3,1);
plot( trmin:trstep:trmax, GreyFL_TR, 'Color', GreyColor);
set(gcf,'Color','White')
hold;
plot( trmin:trstep:trmax, WhiteFL_TR, 'Color', WhiteColor);
plot( trmin:trstep:trmax, CSFFL_TR, 'Color', CSFColor);
set(gca,'xlim',[trmin trmax]);
xlabel( 'tr (msec)' );
YAxisLabel = sprintf('Nominal signal\nte=%d msec, flip=%d',te,flip);
ylabel(YAxisLabel);
legend1 = legend('Grey','White','CSF');
legend(legend1,'boxoff');
set(legend1,'Location','SouthOutside','Orientation','Horizontal');

% Plot the grey-white contrast
subplot(2,3,4);
plot( trmin:trstep:trmax, 100 * (GreyFL_TR - WhiteFL_TR), 'linewidth', 2, 'Color', 'red');
set(gca,'xlim',[trmin trmax]);
xlabel( 'tr (msec)' );
YAxisLabel = sprintf('Grey-White Contrast (%%)\nte=%d msec, flip=%d',te,flip);
ylabel(YAxisLabel);

% Plot the tissue signals vs. te
subplot(2,3,2);
plot( temin:testep:temax, GreyFL_TE, 'Color', GreyColor);
hold;
plot( temin:testep:temax, WhiteFL_TE, 'Color', WhiteColor);
plot( temin:testep:temax, CSFFL_TE, 'Color', CSFColor);
set(gca,'xlim',[temin temax]);
xlabel( 'te (msec)' );
YAxisLabel = sprintf('Nominal signal\ntr=%d msec, flip=%d',tr,flip);
ylabel(YAxisLabel);

% Plot the grey-white contrast
subplot(2,3,5);
plot( temin:testep:temax, 100 * (GreyFL_TE - WhiteFL_TE), 'linewidth', 2, 'Color', 'red');
set(gca,'xlim',[temin temax]);
xlabel( 'te (msec)' );
YAxisLabel = sprintf('Grey-White Contrast (%%)\ntr=%d msec, flip=%d',tr,flip);
ylabel(YAxisLabel);

% Plot the tissue signals vs. flip
subplot(2,3,3);
plot( flipmin:flipstep:flipmax, GreyFL_flip, 'Color', GreyColor);
hold;
plot( flipmin:flipstep:flipmax, WhiteFL_flip, 'Color', WhiteColor);
plot( flipmin:flipstep:flipmax, CSFFL_flip, 'Color', CSFColor);
set(gca,'xlim',[flipmin flipmax]);
xlabel( 'flip (degrees)' );
YAxisLabel = sprintf('Nominal signal\nte=%d msec, tr = %d msec',tr,flip);
ylabel(YAxisLabel);

% Plot the grey-white contrast
subplot(2,3,6);
plot( flipmin:flipstep:flipmax, 100 * (GreyFL_flip - WhiteFL_flip), 'linewidth', 2, 'Color', 'red');
set(gca,'xlim',[flipmin flipmax]);
xlabel( 'flip (degrees)' );
YAxisLabel = sprintf('Grey-White Contrast (%%)\nte=%d msec, tr = %d msec',te,tr);
ylabel(YAxisLabel);
Current plot held
Current plot held
Current plot held

Flip angle, TR, T1

clear;
figure;
T2prime = 150;    % msec
R2prime = 1/T2prime;
Grey.t1 = 1500;  % msec
Grey.t2 = 75;
Grey.pd = 0.95;
GreyR2 = 1/Grey.t2;
% The observed relaxation rate depends on both T2 and T2prime:
Grey.t2star = 1/(GreyR2 + R2prime);

flip = [90,45,30,10,5];
expon = -3:0.05:1;
TR_T1 = 10.^expon;
te = 4;

for angle = 1:5
    MySignal(angle,:) = FLASH( Grey, TR_T1*1000, te, flip(angle) );
end

for p = 1:2
    subplot(1,2,p);
    plot(TR_T1,MySignal(1,:), 'linewidth',2);
    set(gcf, 'color','white');
    hold all;
    for s = 2:length(flip)
        plot(TR_T1,MySignal(s,:), 'linewidth',2);
    end
    legend( num2str(flip(:)),'Location','NorthWest' );
    xlabel('TR / t1');
    ylabel('Signal Intensity');
    set(gca,'xlim',[min(TR_T1), max(TR_T1)]);
end

set(gca,'xscale','log');