alj alj / Mbed 2 deprecated PGSE_diffusion

Dependencies:   mbed

Committer:
alj
Date:
Mon Jan 27 14:39:30 2014 +0000
Revision:
3:797df32f2344
Parent:
2:24f3bc487c01
Child:
4:d0f9015a90bf
Pulses programmer; PULSE GRADIENT SPIN ECHO diffusion sequence(or diff_se) to measure diffusion coefficient value in NMR experiment.;

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 2:24f3bc487c01 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 2:24f3bc487c01 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 2:24f3bc487c01 33 This program comes as is with its flaws and bugs.
alj 2:24f3bc487c01 34 NO WARRANTY IS PROVIDED.
alj 2:24f3bc487c01 35 This program is distributed in the hope that it will be useful,
alj 2:24f3bc487c01 36 but WITHOUT ANY WARRANTY; without even the implied warranty of
alj 2:24f3bc487c01 37 FITNESS FOR A PARTICULAR PURPOSE
alj 3:797df32f2344 38 This software is distributed on an "AS IS" BASIS,
alj 3:797df32f2344 39 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
alj 2:24f3bc487c01 40 *************************************************************************************
alj 0:8fc9e66cbabb 41 UNLESS OTHERWISE SPECIFIED THE PARAMETERS OF THE PULSE SEQUENCE ARE SET :
alj 0:8fc9e66cbabb 42 D1 : relaxation delay ( ms to s)
alj 0:8fc9e66cbabb 43 DELTA : Diffusion time (ms to s)
alj 0:8fc9e66cbabb 44 sdelta : Gradient duration
alj 0:8fc9e66cbabb 45 D21 : delay of recovery
alj 0:8fc9e66cbabb 46 DE : fixed delay before acqusisition (not use)
alj 0:8fc9e66cbabb 47 DW : Dwell time period for sampled t2 acquisition time domain
alj 0:8fc9e66cbabb 48 D0 : incremenatble delay ( from 1us to s)(t1 time domain dimension for 2D experiment)
alj 0:8fc9e66cbabb 49 NS : Number of scan
alj 0:8fc9e66cbabb 50 NE : Number of experiment
alj 0:8fc9e66cbabb 51 VD : Variable delay using a file list
alj 0:8fc9e66cbabb 52 PW : Pulse length (us)
alj 0:8fc9e66cbabb 53 P90 : 90° transmitter or decoupler pulse length
alj 0:8fc9e66cbabb 54 P180 : 180° transmitter or decoupler pulse length
alj 0:8fc9e66cbabb 55 P3 P4 : 90°, 180°, X-nucleus pulses length
alj 0:8fc9e66cbabb 56 DO : Decoupler gated off or on
alj 0:8fc9e66cbabb 57 HD : HomoDecoupling in time sharing during acqusition
alj 0:8fc9e66cbabb 58 HG : HomoGating decoupling with receiver gated OFF
alj 0:8fc9e66cbabb 59 BB : Broadband modulation gate
alj 0:8fc9e66cbabb 60 CW : Continuous wave
alj 0:8fc9e66cbabb 61 FID : Free Induction Decay acquisition (data acquisition for time AQ
alj 0:8fc9e66cbabb 62 AQ : Acquisition time (physical t2 acquisition time domain dimension)
alj 0:8fc9e66cbabb 63 PHn : Phase for pulse number n (ie : PH1 for pulse P1)
alj 0:8fc9e66cbabb 64 PH0 : Receiver phase
alj 0:8fc9e66cbabb 65 *************************************************************************************
alj 2:24f3bc487c01 66
alj 0:8fc9e66cbabb 67 */
alj 0:8fc9e66cbabb 68
alj 0:8fc9e66cbabb 69 #include "mbed.h"
alj 0:8fc9e66cbabb 70
alj 0:8fc9e66cbabb 71 #define D1 0.1 /* Relaxation delay in second */
alj 0:8fc9e66cbabb 72 #define Fs 48000 /* Sample frequency in Hz */
alj 0:8fc9e66cbabb 73 #define DW 1 /* DW time period in us NOT USE */
alj 0:8fc9e66cbabb 74 #define NS 1.0 /* 8 accumulations */
alj 0:8fc9e66cbabb 75 #define DELTA 0.006 /* diffusion dealy in s */
alj 0:8fc9e66cbabb 76 #define NE 1.0 /* 8 accumulations */
alj 0:8fc9e66cbabb 77 #define sdelta 0.003 /* gradient duration */
alj 0:8fc9e66cbabb 78 #define D21 0.001 /* recovery time */
alj 0:8fc9e66cbabb 79 #define AQ 0.04 /* acquisition time in seconde */
alj 0:8fc9e66cbabb 80 #define P90 0.00005 /* hard 90° 1H */
alj 1:9c47e011f1bf 81 //#define IncGsdelta 0.0 /* gradient width increment */
alj 1:9c47e011f1bf 82 //#define stepG 0.0
alj 0:8fc9e66cbabb 83
alj 0:8fc9e66cbabb 84
alj 0:8fc9e66cbabb 85 DigitalOut Relaxation(LED1); /* Delay on pin 26 ??? and flash LED1 during relaxation delay */
alj 0:8fc9e66cbabb 86 BusOut Acqu(p26, LED2) ; /* Start acquisition */
alj 0:8fc9e66cbabb 87 DigitalOut p1(p25); // HARD PULSE
alj 0:8fc9e66cbabb 88 DigitalOut p2(p25); /* Only for reason of clarity P2 =2*P1 */
alj 0:8fc9e66cbabb 89 BusOut PH1PH2(p24, p23) ; // transmitter and receiver phases are the same
alj 0:8fc9e66cbabb 90 DigitalOut Gsdelta(p22) ; // Gradient Z
alj 0:8fc9e66cbabb 91
alj 0:8fc9e66cbabb 92 int main()
alj 0:8fc9e66cbabb 93 {
alj 0:8fc9e66cbabb 94
alj 0:8fc9e66cbabb 95 // while (1) {
alj 0:8fc9e66cbabb 96 p1 =0 ;
alj 0:8fc9e66cbabb 97 Relaxation = 0 ;
alj 0:8fc9e66cbabb 98 Acqu=0x00;
alj 0:8fc9e66cbabb 99 PH1PH2=0x00; //0 init
alj 0:8fc9e66cbabb 100
alj 0:8fc9e66cbabb 101 for (float i = 0.0f ; i < NS ; i += 1.0f) {
alj 2:24f3bc487c01 102
alj 0:8fc9e66cbabb 103 Relaxation = 1; /* LED1 light*/
alj 0:8fc9e66cbabb 104 wait(D1); // relaxation
alj 0:8fc9e66cbabb 105 Relaxation = 0; // turn off the led
alj 0:8fc9e66cbabb 106
alj 0:8fc9e66cbabb 107 p1=1;
alj 0:8fc9e66cbabb 108 wait(P90); // 90°
alj 0:8fc9e66cbabb 109 p1=0;
alj 2:24f3bc487c01 110
alj 0:8fc9e66cbabb 111 Gsdelta = 1;
alj 0:8fc9e66cbabb 112 wait(sdelta); //gradient Z;
alj 0:8fc9e66cbabb 113 Gsdelta = 0;
alj 2:24f3bc487c01 114
alj 2:24f3bc487c01 115 wait(DELTA - sdelta); // diffusion time
alj 0:8fc9e66cbabb 116
alj 0:8fc9e66cbabb 117 p2=1;
alj 0:8fc9e66cbabb 118 wait(2*P90); //180°
alj 0:8fc9e66cbabb 119 p2=0;
alj 2:24f3bc487c01 120
alj 0:8fc9e66cbabb 121 Gsdelta = 1;
alj 0:8fc9e66cbabb 122 wait(sdelta); //gradient Z;
alj 0:8fc9e66cbabb 123 Gsdelta = 0;
alj 2:24f3bc487c01 124
alj 2:24f3bc487c01 125
alj 0:8fc9e66cbabb 126 wait(D21) ; //recovery time
alj 0:8fc9e66cbabb 127
alj 0:8fc9e66cbabb 128 Acqu=0x11; // Acquire FID (we can write 3 in decimal)
alj 0:8fc9e66cbabb 129 wait(AQ);
alj 0:8fc9e66cbabb 130 Acqu=0x00;
alj 0:8fc9e66cbabb 131
alj 0:8fc9e66cbabb 132 PH1PH2=PH1PH2+1; //Phase cycling
alj 2:24f3bc487c01 133
alj 0:8fc9e66cbabb 134 //IncGsdelta += stepG ;
alj 0:8fc9e66cbabb 135
alj 0:8fc9e66cbabb 136 }
alj 2:24f3bc487c01 137
alj 2:24f3bc487c01 138 }
alj 0:8fc9e66cbabb 139 //}
alj 0:8fc9e66cbabb 140
alj 0:8fc9e66cbabb 141 /* INCREMENTATION DE LA DUREE D'ECLAIREMENT DE LED1 AVEC PwmOut
alj 0:8fc9e66cbabb 142 PwmOut led(LED1);
alj 0:8fc9e66cbabb 143
alj 0:8fc9e66cbabb 144 int main() {
alj 0:8fc9e66cbabb 145 while(1) {
alj 0:8fc9e66cbabb 146 for(float p = 0.0f; p < 1.0f; p += 0.1f) {
alj 0:8fc9e66cbabb 147 led = p;
alj 0:8fc9e66cbabb 148 wait(0.1);
alj 0:8fc9e66cbabb 149 }
alj 0:8fc9e66cbabb 150 }
alj 0:8fc9e66cbabb 151 } */
alj 0:8fc9e66cbabb 152
alj 0:8fc9e66cbabb 153 /* Digital I/O
alj 0:8fc9e66cbabb 154
alj 0:8fc9e66cbabb 155 DigitalOut - Configure and control a digital output pin.
alj 0:8fc9e66cbabb 156 DigitalIn - Configure and control a digital input pin.
alj 0:8fc9e66cbabb 157 DigitalInOut - Bi-directional digital pins
alj 0:8fc9e66cbabb 158
alj 0:8fc9e66cbabb 159 BusIn - Flexible way to read multiple DigitalIn pins as one value
alj 0:8fc9e66cbabb 160 BusOut - Flexible way to write multiple DigitalIn pins as one value
alj 0:8fc9e66cbabb 161 BusInOut - Flexible way to read/write multiple DigitalIn pins as one value
alj 0:8fc9e66cbabb 162
alj 0:8fc9e66cbabb 163 PortIn - Fast way to read multiple DigitalIn pins as one value
alj 0:8fc9e66cbabb 164 PortOut - Fast way to write multiple DigitalIn pins as one value
alj 0:8fc9e66cbabb 165 PortInOut - Fast way to read/write multiple DigitalIn pins as one value
alj 0:8fc9e66cbabb 166
alj 0:8fc9e66cbabb 167 PwmOut - Pulse-width modulated output */
alj 0:8fc9e66cbabb 168
alj 0:8fc9e66cbabb 169 /* Features
alj 0:8fc9e66cbabb 170
alj 0:8fc9e66cbabb 171 NXP LPC1768 MCU
alj 0:8fc9e66cbabb 172 High performance ARM® Cortex™-M3 Core
alj 0:8fc9e66cbabb 173 96MHz, 32KB RAM, 512KB FLASH
alj 0:8fc9e66cbabb 174 Ethernet, USB Host/Device, 2xSPI, 2xI2C, 3xUART, CAN, 6xPWM, 6xADC, GPIO
alj 0:8fc9e66cbabb 175 Prototyping form-factor
alj 0:8fc9e66cbabb 176 40-pin 0.1" pitch DIP package, 54x26mm
alj 0:8fc9e66cbabb 177 5V USB or 4.5-9V supply
alj 0:8fc9e66cbabb 178 Built-in USB drag 'n' drop FLASH programmer
alj 0:8fc9e66cbabb 179 mbed.org Developer Website
alj 0:8fc9e66cbabb 180 Lightweight Online Compiler
alj 0:8fc9e66cbabb 181 High level C/C++ SDK
alj 0:8fc9e66cbabb 182 Cookbook of published libraries and projects
alj 0:8fc9e66cbabb 183 */