-------------------------------------------------------------------------------
--                                                                           --
--                          Experiment Source Code                           --
--              Delta NMR Experiment & Machine Control Interface             --
--                                                                           --
--                     Copyright (c) 2000 JEOL Ltd                           --
--                            All Rights Reserved                            --
--                                                                           --
-------------------------------------------------------------------------------
-- HELP.eng: spin echo
-- Category: solids, spin echo, solids relaxation
-- Ref: Phys. Chem. Chem. Phys. 2025, 27, 20745-20753
--By Rongchun Zhang
header
	filename        => "CT-RNTQ_2D";
	sample_id       => "";
	comment         => "CT-RNTQ_2D";
    process   		=  "1d_solid.list";
	include "header_solid";
end header;

instrument
	include "instrument_solid";
end instrument;

acquisition
	x_domain		=>	"Proton";
	x_offset		=>	5[ppm];
	x_sweep			=>	100[kHz];
	x_points		=>	1024;
	scans			=>	12;
	x_prescans		=>	0;
	mod_return		=>	1;

    y_domain         =  x_domain;
    y_offset         =  x_offset * 3;
    y_sweep          => x_sweep;
    y_dwell          =? 1/y_sweep;
    y_points         => 24;

    include "acquisition_solid";
    include "acquisition_2d";
end acquisition;

pulse
	collect COMPLEX,OBS COMPLEX;
	initial_wait		=	10.0[ms];

Pulse_Setup	=? "-----------Setup hard pulses-----------";

	obs_width_90		=>	x90,										help "90deg pulse width";
	obs_width_180  => obs_width_90*2;
    obs_amp_pulse		=>	100[%], 0[%]->100[%]:0.01[%],				help "ampliper";
     	irr_domain	=	x_domain;
	irr_offset	=	x_offset;

RN_Setup	=? "-----------Setup RN pulses-----------";
	spinning_freq		=> 100 [kHz];
	number_large_N		=>	12;
	number_n		=>	2;
	number_nu		=>	5;
	number_RN		=>	1;
	obs_amp_RN		=>	0[%];
	obs_phs_RN_p		=	180*number_nu/number_large_N;
	obs_phs_RN_m		=	-obs_phs_RN_p;
	obs_width_RN		=	(number_n/spinning_freq)/number_large_N;
	supercycle			=>	"S0Sinv", ("S0","S0S180","S0Sinv","S0Sinv_180");
	recoupling			=?	if supercycle = "S0" then number_RN*number_n/spinning_freq
					else	if supercycle = "S0S180" then 2*number_RN*number_n/spinning_freq
					else	if supercycle = "S0Sinv" then 2*number_RN*number_n/spinning_freq
					else	if supercycle = "S0Sinv_180" then 4*number_RN*number_n/spinning_freq
					else 0[us];

	z_filter		=>	100[us],0[ns]	->	50[ms]	:	20[ns],		help "total echo time";
     number_rotor_period  => 1, 1->1000:1;
 t1_max	  => number_rotor_period/spinning_freq, help"it has to be smaller than y_acq_time in 2D experiment";

MISC_Setup	=? "-----------Setup Miscellaneous-----------";

	relaxation_delay	=>	5.0[s],								help "inter-pulse delay";
	repetition_time		=?	relaxation_delay + x_acq_time,				help "relaxation_delay+x_acq_time";

	obs_atn				=>	xatn,										help "attenuator for x pulse";

	obs_phs_exc		=	{  0..300:60, 30..330:60}.ystep(60%2);
     phase_180           =     {6(0),6(30),6(60),6(90),6(120),6(150),6(180),6(210),6(240),6(270),6(300),6(330)};

	obs_phs_rec		=	{  0};

	obs_phs_restore	=	{72(0),72(90),72(180),72(270)}.ystep(180%2);
	obs_phs_acq		={6(3(0,180),3(180,0)),6(3(90,270),3(270,90)),6(3(180,0),3(0,180)), 6(3(270,90),3(90,270))};

	include "pulse_solid";
	module_config		=	"solid_sample";

begin
	initial_wait;
     relaxation_delay;

	loop number_RN times
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_exc),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_exc),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
when supercycle = "S0S180" do
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_exc+180),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_exc+180),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
end when;
when supercycle = "S0Sinv" do
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_exc),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_exc),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
end when;
when supercycle = "S0Sinv_180" do
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_exc),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_exc),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_exc+180),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_exc+180),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_exc+180),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_exc+180),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
end when;
	end loop;

	loop number_RN times
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_exc+120),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_exc+120),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
when supercycle = "S0S180" do
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_exc+300),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_exc+300),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
end when;
when supercycle = "S0Sinv" do
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_exc-120),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_exc-120),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
end when;
when supercycle = "S0Sinv_180" do
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_exc-120),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_exc-120),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_exc+300),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_exc+300),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_exc+ 60),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_exc+ 60),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
end when;
	end loop;

	loop number_RN times
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_exc+240),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_exc+240),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
when supercycle = "S0S180" do
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_exc+ 60),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_exc+ 60),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
end when;
when supercycle = "S0Sinv" do
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_exc-240),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_exc-240),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
end when;
when supercycle = "S0Sinv_180" do
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_exc-240),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_exc-240),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_exc+180),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_exc+180),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_exc- 60),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_exc- 60),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
end when;
	end loop;

     	(t1_max-obs_width_180)/2 ystep    1/(2*y_sweep);
	obs_width_180, (obs.gate, obs.phs.phase_180, obs.amp.obs_amp_pulse, obs.atn.obs_atn);
     	(t1_max-obs_width_180)/2 ystep    -1/(2*y_sweep);

	loop number_RN times
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_rec),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_rec),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
when supercycle = "S0S180" do
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_rec+180),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_rec+180),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
end when;
when supercycle = "S0Sinv" do
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_rec),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_rec),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
end when;
when supercycle = "S0Sinv_180" do
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_rec),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_rec),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_rec+180),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_rec+180),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_rec+180),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_rec+180),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
end when;
	end loop;

	loop number_RN times
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_rec+120),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_rec+120),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
when supercycle = "S0S180" do
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_rec+300),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_rec+300),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
end when;
when supercycle = "S0Sinv" do
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_rec-120),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_rec-120),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
end when;
when supercycle = "S0Sinv_180" do
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_rec-120),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_rec-120),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_rec+300),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_rec+300),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_rec+ 60),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_rec+ 60),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
end when;
	end loop;

	loop number_RN times
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_rec+240),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_rec+240),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
when supercycle = "S0S180" do
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_rec+ 60),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_rec+ 60),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
end when;
when supercycle = "S0Sinv" do
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_rec-240),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_rec-240),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
end when;
when supercycle = "S0Sinv_180" do
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_rec-240),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_rec-240),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_rec+ 60),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_rec+ 60),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
	loop number_large_N/2 times
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_m+obs_phs_rec- 60),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	obs_width_RN,	(obs.gate,	obs.phs.(obs_phs_RN_p+obs_phs_rec- 60),	obs.amp.obs_amp_RN,	obs.atn.obs_atn);
	end loop;
end when;
	end loop;

	z_filter;

	obs_width_90,		(obs.gate,	obs.phs.obs_phs_restore,		obs.amp.obs_amp_pulse,	obs.atn.obs_atn);
	acq( dead_time, delay, obs_phs_acq );
end pulse;

