alj alj / Mbed 2 deprecated PGSE_diffusion

Dependencies:   mbed

Committer:
alj
Date:
Mon Jan 27 14:03:37 2014 +0000
Revision:
1:9c47e011f1bf
Parent:
0:8fc9e66cbabb
Child:
2:24f3bc487c01
Basic version of pulsed gradient spin echo for NMR

Who changed what in which revision?

UserRevisionLine numberNew contents of line
alj 0:8fc9e66cbabb 1 /* *************************************************************************************
alj 0:8fc9e66cbabb 2 PGSE_diffusion Basic standard sequence, VERSION 1, October 24th 2012
alj 0:8fc9e66cbabb 3 PULSE GRADIENT SPIN ECHO diffusion sequence(or diff_se) to measure diffusion coefficient value.
alj 0:8fc9e66cbabb 4 ref : E.O. Stejskal and J.E. tanner, J. Chem. Phys. 42, 288 (1965)
alj 0:8fc9e66cbabb 5 THE PGSE SEQUENCE IS
alj 0:8fc9e66cbabb 6 1H ---> 90° - DELTA/2 - 180 - DELTA/2 - FID
alj 0:8fc9e66cbabb 7 Gz ---> -- - Gz(sdelta)- DELTA - Gz(sdelta)
alj 0:8fc9e66cbabb 8 *************************************************************************************
alj 0:8fc9e66cbabb 9 Gradient strength (or duration) must be increase to measure the diffusion coefficient (2D DOSY spectroscopy)
alj 0:8fc9e66cbabb 10 The maximum diffusion time (DELAT) is limited by T2 in PGSE.
alj 0:8fc9e66cbabb 11 For T1 = T2 the PGSE sequence is usualy the easiest et preferred sequence.
alj 0:8fc9e66cbabb 12 For T1 >> Té the PGSTE (PULSE GRADIENT with STIMULATED ECHO) is better, as during most of the diffusion
alj 0:8fc9e66cbabb 13 time the magetization evolve prinipaly under T1 relaxtion (magnetization is like stored on Z axis in conventionnal NMR). With PGSTE the maximum
alj 0:8fc9e66cbabb 14 diffusion time (DELTA) is limited by T1.
alj 0:8fc9e66cbabb 15 IN THIS VERSION THE GRADIENT PULSE DURATION IS USED
alj 0:8fc9e66cbabb 16 *************************************************************************************
alj 0:8fc9e66cbabb 17
alj 0:8fc9e66cbabb 18 DESIGN FOR NXPLPC1768 ARM CORTEX M3 MCU BOARD:
alj 0:8fc9e66cbabb 19 INPUT : NONE (reset on board)
alj 0:8fc9e66cbabb 20 OUTPUT : ACQU ---> P26 AND LED1
alj 0:8fc9e66cbabb 21 : PULSES P1 & P2 ---> P25
alj 0:8fc9e66cbabb 22 : Emmitter ---> P24, P23
alj 1:9c47e011f1bf 23 : Transmitter ---> P24, P23
alj 1:9c47e011f1bf 24 : gradient Z ---> P21
alj 0:8fc9e66cbabb 25 ***** IN THIS VERSION RECEIVER AND TRANSMITTER HAVE THE SAME PHASE CYCLE *****
alj 0:8fc9e66cbabb 26 *************************************************************************************
alj 0:8fc9e66cbabb 27 Alain LOUIS-JOSEPH
alj 0:8fc9e66cbabb 28 CNRS
alj 0:8fc9e66cbabb 29 Laboratoire de Physique de la Matière Condensée PMC
alj 0:8fc9e66cbabb 30 Ecole Polytechnique
alj 0:8fc9e66cbabb 31 91128 Palaiseau CEDEX France
alj 0:8fc9e66cbabb 32 *************************************************************************************
alj 0:8fc9e66cbabb 33 UNLESS OTHERWISE SPECIFIED THE PARAMETERS OF THE PULSE SEQUENCE ARE SET :
alj 0:8fc9e66cbabb 34 D1 : relaxation delay ( ms to s)
alj 0:8fc9e66cbabb 35 DELTA : Diffusion time (ms to s)
alj 0:8fc9e66cbabb 36 sdelta : Gradient duration
alj 0:8fc9e66cbabb 37 D21 : delay of recovery
alj 0:8fc9e66cbabb 38 DE : fixed delay before acqusisition (not use)
alj 0:8fc9e66cbabb 39 DW : Dwell time period for sampled t2 acquisition time domain
alj 0:8fc9e66cbabb 40 D0 : incremenatble delay ( from 1us to s)(t1 time domain dimension for 2D experiment)
alj 0:8fc9e66cbabb 41 NS : Number of scan
alj 0:8fc9e66cbabb 42 NE : Number of experiment
alj 0:8fc9e66cbabb 43 VD : Variable delay using a file list
alj 0:8fc9e66cbabb 44 PW : Pulse length (us)
alj 0:8fc9e66cbabb 45 P90 : 90° transmitter or decoupler pulse length
alj 0:8fc9e66cbabb 46 P180 : 180° transmitter or decoupler pulse length
alj 0:8fc9e66cbabb 47 P3 P4 : 90°, 180°, X-nucleus pulses length
alj 0:8fc9e66cbabb 48 DO : Decoupler gated off or on
alj 0:8fc9e66cbabb 49 HD : HomoDecoupling in time sharing during acqusition
alj 0:8fc9e66cbabb 50 HG : HomoGating decoupling with receiver gated OFF
alj 0:8fc9e66cbabb 51 BB : Broadband modulation gate
alj 0:8fc9e66cbabb 52 CW : Continuous wave
alj 0:8fc9e66cbabb 53 FID : Free Induction Decay acquisition (data acquisition for time AQ
alj 0:8fc9e66cbabb 54 AQ : Acquisition time (physical t2 acquisition time domain dimension)
alj 0:8fc9e66cbabb 55 PHn : Phase for pulse number n (ie : PH1 for pulse P1)
alj 0:8fc9e66cbabb 56 PH0 : Receiver phase
alj 0:8fc9e66cbabb 57 *************************************************************************************
alj 0:8fc9e66cbabb 58
alj 0:8fc9e66cbabb 59 */
alj 0:8fc9e66cbabb 60
alj 0:8fc9e66cbabb 61 #include "mbed.h"
alj 0:8fc9e66cbabb 62
alj 0:8fc9e66cbabb 63 #define D1 0.1 /* Relaxation delay in second */
alj 0:8fc9e66cbabb 64 #define Fs 48000 /* Sample frequency in Hz */
alj 0:8fc9e66cbabb 65 #define DW 1 /* DW time period in us NOT USE */
alj 0:8fc9e66cbabb 66 #define NS 1.0 /* 8 accumulations */
alj 0:8fc9e66cbabb 67 #define DELTA 0.006 /* diffusion dealy in s */
alj 0:8fc9e66cbabb 68 #define NE 1.0 /* 8 accumulations */
alj 0:8fc9e66cbabb 69 #define sdelta 0.003 /* gradient duration */
alj 0:8fc9e66cbabb 70 #define D21 0.001 /* recovery time */
alj 0:8fc9e66cbabb 71 #define AQ 0.04 /* acquisition time in seconde */
alj 0:8fc9e66cbabb 72 #define P90 0.00005 /* hard 90° 1H */
alj 1:9c47e011f1bf 73 //#define IncGsdelta 0.0 /* gradient width increment */
alj 1:9c47e011f1bf 74 //#define stepG 0.0
alj 0:8fc9e66cbabb 75
alj 0:8fc9e66cbabb 76
alj 0:8fc9e66cbabb 77 DigitalOut Relaxation(LED1); /* Delay on pin 26 ??? and flash LED1 during relaxation delay */
alj 0:8fc9e66cbabb 78 BusOut Acqu(p26, LED2) ; /* Start acquisition */
alj 0:8fc9e66cbabb 79 DigitalOut p1(p25); // HARD PULSE
alj 0:8fc9e66cbabb 80 DigitalOut p2(p25); /* Only for reason of clarity P2 =2*P1 */
alj 0:8fc9e66cbabb 81 BusOut PH1PH2(p24, p23) ; // transmitter and receiver phases are the same
alj 0:8fc9e66cbabb 82 DigitalOut Gsdelta(p22) ; // Gradient Z
alj 0:8fc9e66cbabb 83
alj 0:8fc9e66cbabb 84 int main()
alj 0:8fc9e66cbabb 85 {
alj 0:8fc9e66cbabb 86
alj 0:8fc9e66cbabb 87 // while (1) {
alj 0:8fc9e66cbabb 88 p1 =0 ;
alj 0:8fc9e66cbabb 89 Relaxation = 0 ;
alj 0:8fc9e66cbabb 90 Acqu=0x00;
alj 0:8fc9e66cbabb 91 PH1PH2=0x00; //0 init
alj 0:8fc9e66cbabb 92
alj 0:8fc9e66cbabb 93 for (float i = 0.0f ; i < NS ; i += 1.0f) {
alj 0:8fc9e66cbabb 94
alj 0:8fc9e66cbabb 95 Relaxation = 1; /* LED1 light*/
alj 0:8fc9e66cbabb 96 wait(D1); // relaxation
alj 0:8fc9e66cbabb 97 Relaxation = 0; // turn off the led
alj 0:8fc9e66cbabb 98
alj 0:8fc9e66cbabb 99 p1=1;
alj 0:8fc9e66cbabb 100 wait(P90); // 90°
alj 0:8fc9e66cbabb 101 p1=0;
alj 0:8fc9e66cbabb 102
alj 0:8fc9e66cbabb 103 Gsdelta = 1;
alj 0:8fc9e66cbabb 104 wait(sdelta); //gradient Z;
alj 0:8fc9e66cbabb 105 Gsdelta = 0;
alj 0:8fc9e66cbabb 106
alj 0:8fc9e66cbabb 107 wait(DELTA - sdelta); // diffusion time
alj 0:8fc9e66cbabb 108
alj 0:8fc9e66cbabb 109 p2=1;
alj 0:8fc9e66cbabb 110 wait(2*P90); //180°
alj 0:8fc9e66cbabb 111 p2=0;
alj 0:8fc9e66cbabb 112
alj 0:8fc9e66cbabb 113 Gsdelta = 1;
alj 0:8fc9e66cbabb 114 wait(sdelta); //gradient Z;
alj 0:8fc9e66cbabb 115 Gsdelta = 0;
alj 0:8fc9e66cbabb 116
alj 0:8fc9e66cbabb 117
alj 0:8fc9e66cbabb 118 wait(D21) ; //recovery time
alj 0:8fc9e66cbabb 119
alj 0:8fc9e66cbabb 120 Acqu=0x11; // Acquire FID (we can write 3 in decimal)
alj 0:8fc9e66cbabb 121 wait(AQ);
alj 0:8fc9e66cbabb 122 Acqu=0x00;
alj 0:8fc9e66cbabb 123
alj 0:8fc9e66cbabb 124 PH1PH2=PH1PH2+1; //Phase cycling
alj 0:8fc9e66cbabb 125
alj 0:8fc9e66cbabb 126 //IncGsdelta += stepG ;
alj 0:8fc9e66cbabb 127
alj 0:8fc9e66cbabb 128 }
alj 0:8fc9e66cbabb 129
alj 0:8fc9e66cbabb 130 }
alj 0:8fc9e66cbabb 131 //}
alj 0:8fc9e66cbabb 132
alj 0:8fc9e66cbabb 133 /* INCREMENTATION DE LA DUREE D'ECLAIREMENT DE LED1 AVEC PwmOut
alj 0:8fc9e66cbabb 134 PwmOut led(LED1);
alj 0:8fc9e66cbabb 135
alj 0:8fc9e66cbabb 136 int main() {
alj 0:8fc9e66cbabb 137 while(1) {
alj 0:8fc9e66cbabb 138 for(float p = 0.0f; p < 1.0f; p += 0.1f) {
alj 0:8fc9e66cbabb 139 led = p;
alj 0:8fc9e66cbabb 140 wait(0.1);
alj 0:8fc9e66cbabb 141 }
alj 0:8fc9e66cbabb 142 }
alj 0:8fc9e66cbabb 143 } */
alj 0:8fc9e66cbabb 144
alj 0:8fc9e66cbabb 145 /* Digital I/O
alj 0:8fc9e66cbabb 146
alj 0:8fc9e66cbabb 147 DigitalOut - Configure and control a digital output pin.
alj 0:8fc9e66cbabb 148 DigitalIn - Configure and control a digital input pin.
alj 0:8fc9e66cbabb 149 DigitalInOut - Bi-directional digital pins
alj 0:8fc9e66cbabb 150
alj 0:8fc9e66cbabb 151 BusIn - Flexible way to read multiple DigitalIn pins as one value
alj 0:8fc9e66cbabb 152 BusOut - Flexible way to write multiple DigitalIn pins as one value
alj 0:8fc9e66cbabb 153 BusInOut - Flexible way to read/write multiple DigitalIn pins as one value
alj 0:8fc9e66cbabb 154
alj 0:8fc9e66cbabb 155 PortIn - Fast way to read multiple DigitalIn pins as one value
alj 0:8fc9e66cbabb 156 PortOut - Fast way to write multiple DigitalIn pins as one value
alj 0:8fc9e66cbabb 157 PortInOut - Fast way to read/write multiple DigitalIn pins as one value
alj 0:8fc9e66cbabb 158
alj 0:8fc9e66cbabb 159 PwmOut - Pulse-width modulated output */
alj 0:8fc9e66cbabb 160
alj 0:8fc9e66cbabb 161 /* Features
alj 0:8fc9e66cbabb 162
alj 0:8fc9e66cbabb 163 NXP LPC1768 MCU
alj 0:8fc9e66cbabb 164 High performance ARM® Cortex™-M3 Core
alj 0:8fc9e66cbabb 165 96MHz, 32KB RAM, 512KB FLASH
alj 0:8fc9e66cbabb 166 Ethernet, USB Host/Device, 2xSPI, 2xI2C, 3xUART, CAN, 6xPWM, 6xADC, GPIO
alj 0:8fc9e66cbabb 167 Prototyping form-factor
alj 0:8fc9e66cbabb 168 40-pin 0.1" pitch DIP package, 54x26mm
alj 0:8fc9e66cbabb 169 5V USB or 4.5-9V supply
alj 0:8fc9e66cbabb 170 Built-in USB drag 'n' drop FLASH programmer
alj 0:8fc9e66cbabb 171 mbed.org Developer Website
alj 0:8fc9e66cbabb 172 Lightweight Online Compiler
alj 0:8fc9e66cbabb 173 High level C/C++ SDK
alj 0:8fc9e66cbabb 174 Cookbook of published libraries and projects
alj 0:8fc9e66cbabb 175 */