------------------------------------------------------------------------------- -- -- -- Automation Script File -- -- Delta NMR Processing and Control Interface -- -- -- -- Copyright (c) 2009-2021 JEOL Ltd., All rights reserved -- -- -- ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- -- IMPORTANT NOTES ------------------------------------------------------------------------------- -- Remember that when assigning to the x_sweep parameter from another data file -- (such as a scout scan) that we should obtain the 'x_sweep_clipped' parameter -- value which will give the corrected x_sweep value that we expect. This is -- because digital filtering modifies the x_sweep value prior to acquisition. ------------------------------------------------------------------------------- AUTOMATION VERSION 2; #sort methods FALSE #define collection_mode = "Acq Time" PURPOSE "A collection of common Methods for basic experimentation."; INCLUDE "Utilities" TO DOMAIN util; NUMBER Gain_Range IS INTEGER FROM -8 TO 102 STEP 2 WITH NO UNIT; ENUM AUTO_SHIM_MODE IS ( "AUTSHIM OFF", "Z1 Z2", "Z1 Z3", "Z2 Z4", "Z1 Z4" ); ENUM DOMS IS NAMESPACE CAPITALIZE KEYS "gamma" IGNORE ("nodraw"); ENUM dp_acq IS ("Acq Time", "Data Points"); ENUM MultiplicityEdit IS ("up_down", "off", "CH_only"); NUMBER Peak_Range IS INTEGER FROM 1 TO 10 WITH NO UNIT; ENUM WET_SOLVENTS IS NAMESPACE "solvent_reference.\"undeuterated names\""; ------------------------------------------------------------------------------- CONCEAL METHOD GET_WET_OFFSET( OUT found : BOOLEAN; OUT location : NUMBER; IN wet_solv : TEXT = "" ) IS PERCIVAL <<< function TRANSLATE_SOLVENT( solv : STRING ) return STRING is function GET_VALUE( path : STRING ) return WILDCARD is internal( "namespace_get_value" ); var tmp_solv : STRING, solv_lst : SET := get_value( "solvent_reference.translation" ); return solv when type solv_lst /= [SET]; tmp_solv := solv_lst(solv); if tmp_solv = NULL and then size( solv ) = 16 then solv := upper( solv ); for i : NUMERIC is 1 to size( solv_lst ) loop if size( solv_lst(i,1) ) >= 16 and then solv = upper( nth( solv_lst(i,1), 1, 16 ) ) then tmp_solv := solv_lst(i,2); exit; end if; end loop; end if; if type tmp_solv /= [STRING] then return wet_solv; else return tmp_solv; end if; end TRANSLATE_SOLVENT; function GET_WET_OFS( solv : STRING ) return SET is function GET_VALUE( path : STRING ) return WILDCARD is internal( "namespace_get_value" ); var wet_lst : SET := get_value( "solvent_reference.""1h"".""" & solv & """.peaks" ), ofs : SET := {}, loc : WILDCARD; for i : NUMERIC is 1 to size( wet_lst ) loop ofs := ofs & {wet_lst(i, 1)}; end loop; loc := sort( ofs )(1); return {loc /= NULL, loc}; end GET_WET_OFS; >>>; VAR tr_solv : TEXT; VAR ret : LIST; SET tr_solv = call translate_solvent( wet_solv ); SET ret = call get_wet_ofs( tr_solv ); SET found = ret(1); SET location = ret(2); END METHOD GET_WET_OFFSET; ------------------------------------------------------------------------------- MACRO proton_acq_conditions IS VAR x_points : NUMBER = 32768; EXPOSE PASSIVE VAR x_offset : NUMBER = 5[ppm], HELP "Center of spectrum"; EXPOSE VAR x_sweep : NUMBER = 15[ppm], HELP "Sweep width"; EXPOSE VAR collection_mode : dp_acq = $(collection_mode), HELP "Select either data points or acquisition time"; EXPOSE VAR points_or_acq_time : NUMBER = 2[s], DEPENDS ON collection_mode EVALUATE ((collection_mode = "Data Points") ? 32768 : 2[s]), HELP "Adjust default data points or acquisition time"; EXPOSE PASSIVE VAR x_angle : NUMBER = 45[deg], HELP "Tip angle"; EXPOSE VAR relaxation_delay : NUMBER = 5[s], HELP "Pre-pulse delay for proton experiment"; END MACRO proton_acq_conditions; MACRO carbon_acq_conditions IS VAR x_points : NUMBER = 32768; EXPOSE PASSIVE VAR x_offset : NUMBER = 100[ppm], HELP "Center of spectrum"; EXPOSE VAR x_sweep : NUMBER = 250[ppm], HELP "Sweep width"; EXPOSE VAR collection_mode : dp_acq = $(collection_mode), HELP "Select either data points or acquisition time"; EXPOSE VAR points_or_acq_time : NUMBER = 1[s], DEPENDS ON collection_mode EVALUATE ((collection_mode = "Data Points") ? 32768 : 1[s]), HELP "Adjust default data points or acquisition time"; EXPOSE PASSIVE VAR x_angle : NUMBER = 30[deg], HELP "Tip angle"; EXPOSE VAR relaxation_delay : NUMBER = 2[s], HELP "Pre-pulse delay"; END MACRO carbon_acq_conditions; ------------------------------------------------------------------------------- METHOD Proton ( OUT highres_proton : DATA ) IS PURPOSE "Routine Proton single pulse experiment"; DURATION Proton + ( force_tune ? 60[s] : 0[s] ) + 120[s]; EXPOSE PASSIVE VAR comment : TEXT = "", HELP "Enter a comment string"; EXPOSE VAR force_tune : BOOLEAN = FALSE, HELP "Retune RF coil(s)"; EXPOSE PASSIVE VAR autogain : BOOLEAN = TRUE, HELP "Optimize gain value automatically"; EXPOSE PASSIVE VAR rgain : Gain_Range = 0, DEPENDS ON autogain EVALUATE (autogain ? 0 : 50) ENABLE WHEN (autogain = FALSE), HELP "Field will enable when proton_autogain is False"; EXPAND MACRO proton_acq_conditions; EXPOSE VAR scans : NUMBER = 8; VAR dual_tuned : BOOLEAN = FALSE; VAR obs_domain : TEXT = "Proton"; VAR oneh_coil : TEXT = "hf1"; IF collection_mode = "Acq Time" THEN INVOKE util.Determine_data_points( obs_domain, points_or_acq_time, x_sweep, x_points ); ELSE SET x_points = points_or_acq_time; END IF; IF autogain = TRUE AND rgain = 0 THEN SET rgain = 50; END IF; INVOKE util.Determine_coil( oneh_coil ); TUNE PROBE FORCE force_tune DUAL dual_tuned COIL oneh_coil DOMAIN obs_domain OFFSET x_offset; INVOKE util.Preamble(); CONCEAL EXPERIMENT Proton IS SAVE AS "$(SAMPLE)_Proton"; COLLECT "proton"; SET process = "proton_autophase.list"; comment = comment; auto_gain = autogain; force_dual_mode = dual_tuned; recvr_gain = rgain; x_offset = x_offset; x_sweep = x_sweep; x_points = x_points; scans = scans; x_angle = x_angle; relaxation_delay = relaxation_delay; round_points = FALSE; END EXPERIMENT; SET SAMPLE "receiver_gain" = Proton("recvr_gain"); PROCESS Proton TO highres_proton SAVE AS "$(SAMPLE)_Proton_ft"; PROCESS Proton WITH "proton_autophase_pi.list" TO highres_proton2; PRESENTATION output_pdf TEMPLATE "params_right_runtime_proton_full" WITH DATA highres_proton2 TO JOB PRINTER AND FILE "$(SAMPLE)_Proton_Presentation_$(JOB_ID).pdf"; INVOKE util.Postamble( "Proton", Proton, output_pdf ); END METHOD Proton; ------------------------------------------------------------------------------- METHOD Carbon ( OUT highres_carbon : DATA ) IS PURPOSE "Routine Carbon 1D spectrum"; DURATION Carbon + ( force_tune ? 60[s] : 0[s] ) + 120[s]; EXPOSE PASSIVE VAR comment : TEXT = "", HELP "Enter a comment string"; EXPOSE VAR force_tune : BOOLEAN = FALSE, HELP "Retune RF coil(s)"; EXPAND MACRO carbon_acq_conditions; EXPOSE VAR irr_noe : BOOLEAN = TRUE, HELP "With or without NOE"; EXPOSE PASSIVE VAR sn_ratio : NUMBER = 0, HELP "Stop acquisition when s/n ratio is achieved"; EXPOSE VAR scans : NUMBER = 1024; VAR dual_tuned : BOOLEAN = FALSE; VAR obs_domain : DOMS = "Carbon13"; VAR irr_domain : DOMS = "Proton"; VAR oneh_coil : TEXT = "hf1"; IF collection_mode = "Acq Time" THEN INVOKE util.Determine_data_points( obs_domain, points_or_acq_time, x_sweep, x_points ); ELSE SET x_points = points_or_acq_time; END IF; INVOKE util.Determine_coil( oneh_coil ); TUNE PROBE FORCE force_tune DUAL dual_tuned COIL "LF1" DOMAIN obs_domain OFFSET x_offset COIL oneh_coil DOMAIN irr_domain OFFSET 5[ppm]; INVOKE util.Preamble(); CONCEAL EXPERIMENT Carbon IS SAVE AS "$(SAMPLE)_Carbon"; COLLECT "carbon"; SET process = "carbon_autophase.list"; comment = comment; force_dual_mode = dual_tuned; x_offset = x_offset; x_sweep = x_sweep; x_points = x_points; scans = scans; x_angle = x_angle; relaxation_delay = relaxation_delay; irr_noe = irr_noe; round_points = FALSE; sn_ratio = sn_ratio; END EXPERIMENT; PROCESS Carbon TO highres_carbon SAVE AS "$(SAMPLE)_Carbon_ft"; PROCESS Carbon WITH "carbon_autophase_p.list" TO highres_carbon2; PRESENTATION output_pdf TEMPLATE "params_right_runtime_carbon_full" WITH DATA highres_carbon2 TO JOB PRINTER AND FILE "$(SAMPLE)_Carbon_Presentation_$(JOB_ID).pdf"; INVOKE util.Postamble( "Carbon", Carbon, output_pdf ); END METHOD Carbon; ------------------------------------------------------------------------------- METHOD COSY ( CONCEAL IN highres_proton : DATA ) IS PURPOSE "Proton-Proton correlation spectroscopy"; DURATION (( linear_or_nus = "Linear" ) ? 1 : sampling_density / 100) * COSY + ( force_tune ? 60[s] : 0[s] ) + 120[s]; EXPOSE PASSIVE VAR comment : TEXT = "", HELP "Enter a comment string"; EXPOSE VAR force_tune : BOOLEAN = FALSE, HELP "Retune RF coil(s)"; EXPOSE PASSIVE VAR autogain : BOOLEAN = TRUE, HELP "Optimize gain value automatically"; EXPOSE PASSIVE VAR rgain : Gain_Range = 0, DEPENDS ON autogain EVALUATE (autogain ? 0 : 50) ENABLE WHEN (autogain = FALSE), HELP "Field will enable when proton_autogain is False"; EXPOSE PASSIVE VAR perform_clip : BOOLEAN = FALSE, HELP "Optimize sweep width and carrier offset"; EXPOSE PASSIVE VAR x_offset : NUMBER = 5[ppm], HELP "Center of spectrum"; EXPOSE VAR x_sweep : NUMBER = 15[ppm], HELP "Sweep width"; EXPOSE VAR x_points : NUMBER = 1024, HELP "Data pints for X axis"; EXPOSE VAR y_points : NUMBER = 256, HELP "Data pints for Y axis"; EXPOSE VAR linear_or_nus : util.LinearNus = "Linear", HELP "Select monotonic increments (Linear) or Non Uniform Sampling"; EXPOSE VAR sampling_density : util.NusDensity = 25, DEPENDS ON linear_or_nus ENABLE WHEN (linear_or_nus = "Nus"), HELP "Non Uniform Sampling sampling density"; EXPOSE VAR scans : NUMBER = 1; VAR dual_tuned : BOOLEAN = FALSE; VAR obs_domain : TEXT = "Proton"; VAR oneh_coil : TEXT = "hf1"; SET MACHINE PARAMETER "spin_state" = "SPIN OFF"; -- Call clip() here to set x_sweep and x_offset if highres exists -- IF perform_clip THEN IF highres_proton /= NULL THEN INVOKE util.Handle_Clipping(highres_proton, x_offset, x_sweep); INFORM "x_offset set to $(x_offset)"; INFORM "x_sweep set to $(x_sweep)"; END IF; END IF; INVOKE util.Determine_coil( oneh_coil ); TUNE PROBE FORCE force_tune DUAL dual_tuned COIL oneh_coil DOMAIN obs_domain OFFSET x_offset; INVOKE util.Preamble(); IF autogain = TRUE AND rgain = 0 THEN SET rgain = 50; END IF; VAR params : util.Assoc; VAR fname_ext : TEXT = ""; INVOKE util.NUS_Params( params, linear_or_nus, sampling_density ); IF linear_or_nus = "Nus" THEN SET fname_ext = "_NUS"; END IF; CONCEAL EXPERIMENT COSY IS SAVE AS "$(SAMPLE)_COSY"; COLLECT "cosy"; SET * = params; SET process = "2d_cosy_abs.list"; comment = comment; auto_gain = autogain; force_dual_mode = dual_tuned; x_offset = x_offset; x_sweep = x_sweep; x_points = x_points; y_points = y_points; recvr_gain = rgain; scans = scans; END EXPERIMENT; SET SAMPLE "receiver_gain" = COSY("recvr_gain"); PROCESS COSY TO outputdata SAVE AS "$(SAMPLE)_COSY$(fname_ext)_ft"; IF highres_proton = NULL THEN SET highres_proton = project( outputdata ); END IF; PRESENTATION output_pdf TEMPLATE "cosy_runtime" WITH DATA outputdata AND highres_proton AND highres_proton TO JOB PRINTER AND FILE "$(SAMPLE)_COSY_Presentation_$(JOB_ID).pdf"; INVOKE util.Postamble( "COSY", COSY, output_pdf ); END METHOD COSY; ------------------------------------------------------------------------------- METHOD TOCSY ( CONCEAL IN highres_proton : DATA ) IS PURPOSE "Proton-Proton mutli-bond correlation spectroscopy"; DURATION (( linear_or_nus = "Linear" ) ? 1 : sampling_density / 100) * TOCSY + ( force_tune ? 60[s] : 0[s] ) + 120[s]; EXPOSE PASSIVE VAR comment : TEXT = "", HELP "Enter a comment string"; EXPOSE VAR force_tune : BOOLEAN = FALSE, HELP "Retune RF coil(s)"; EXPOSE PASSIVE VAR autogain : BOOLEAN = TRUE, HELP "Optimize gain value automatically"; EXPOSE PASSIVE VAR rgain : Gain_Range = 0, DEPENDS ON autogain EVALUATE (autogain ? 0 : 50) ENABLE WHEN (autogain = FALSE), HELP "Field will enable when proton_autogain is False"; EXPOSE PASSIVE VAR perform_clip : BOOLEAN = FALSE, HELP "Optimize sweep width and carrier offset"; EXPOSE PASSIVE VAR x_offset : NUMBER = 5[ppm], HELP "Center of spectrum"; EXPOSE VAR x_sweep : NUMBER = 15[ppm], HELP "Sweep width"; EXPOSE VAR x_points : NUMBER = 1024, HELP "Data pints for X axis"; EXPOSE VAR y_points : NUMBER = 256, HELP "Data pints for Y axis"; EXPOSE VAR linear_or_nus : util.LinearNus = "Linear", HELP "Select monotonic increments (Linear) or Non Uniform Sampling"; EXPOSE VAR sampling_density : util.NusDensity = 25, DEPENDS ON linear_or_nus ENABLE WHEN (linear_or_nus = "Nus"), HELP "Non Uniform Sampling sampling density"; EXPOSE VAR mix_time : NUMBER = 50[ms], HELP "mixing time of tocsy"; EXPOSE VAR scans : NUMBER = 4; VAR dual_tuned : BOOLEAN = FALSE; VAR obs_domain : TEXT = "Proton"; VAR oneh_coil : TEXT = "hf1"; SET MACHINE PARAMETER "spin_state" = "SPIN OFF"; -- Call clip() here to set x_sweep and x_offset if highres exists -- IF perform_clip THEN IF highres_proton /= NULL THEN INVOKE util.Handle_Clipping(highres_proton, x_offset, x_sweep); INFORM "x_offset set to $(x_offset)"; INFORM "x_sweep set to $(x_sweep)"; END IF; END IF; INVOKE util.Determine_coil( oneh_coil ); TUNE PROBE FORCE force_tune DUAL dual_tuned COIL oneh_coil DOMAIN obs_domain OFFSET x_offset; INVOKE util.Preamble(); IF autogain = TRUE AND rgain = 0 THEN SET rgain = 50; END IF; VAR params : util.Assoc; VAR fname_ext : TEXT = ""; INVOKE util.NUS_Params( params, linear_or_nus, sampling_density ); IF linear_or_nus = "Nus" THEN SET fname_ext = "_NUS"; END IF; CONCEAL EXPERIMENT TOCSY IS SAVE AS "$(SAMPLE)_TOCSY"; COLLECT "tocsy"; SET * = params; SET process = "2d_homo2d_phase.list"; comment = comment; auto_gain = autogain; force_dual_mode = dual_tuned; x_offset = x_offset; x_sweep = x_sweep; x_points = x_points; y_points = y_points; recvr_gain = rgain; scans = scans; mix_time = mix_time; END EXPERIMENT; SET SAMPLE "receiver_gain" = TOCSY("recvr_gain"); PROCESS TOCSY TO outputdata SAVE AS "$(SAMPLE)_TOCSY_ft"; IF highres_proton = NULL THEN SET highres_proton = project( outputdata ); END IF; PRESENTATION output_pdf TEMPLATE "cosy_runtime" WITH DATA outputdata AND highres_proton AND highres_proton TO JOB PRINTER AND FILE "$(SAMPLE)_TOCSY_Presentation_$(JOB_ID).pdf"; INVOKE util.Postamble( "TOCSY", TOCSY, output_pdf ); END METHOD TOCSY; ------------------------------------------------------------------------------- METHOD NOESY ( CONCEAL IN highres_proton : DATA ) IS PURPOSE "NOE correlation spectroscopy"; DURATION (( linear_or_nus = "Linear" ) ? 1 : sampling_density / 100) * NOESY + ( force_tune ? 60[s] : 0[s] ) + 120[s]; EXPOSE PASSIVE VAR comment : TEXT = "", HELP "Enter a comment string"; EXPOSE VAR force_tune : BOOLEAN = FALSE, HELP "Retune RF coil(s)"; EXPOSE PASSIVE VAR autogain : BOOLEAN = TRUE, HELP "Optimize gain value automatically"; EXPOSE PASSIVE VAR rgain : Gain_Range = 0, DEPENDS ON autogain EVALUATE (autogain ? 0 : 50) ENABLE WHEN (autogain = FALSE), HELP "Field will enable when proton_autogain is False"; EXPOSE PASSIVE VAR perform_clip : BOOLEAN = FALSE, HELP "Optimize sweep width and carrier offset"; EXPOSE PASSIVE VAR x_offset : NUMBER = 5[ppm], HELP "Center of spectrum"; EXPOSE VAR x_sweep : NUMBER = 15[ppm], HELP "Sweep width"; EXPOSE VAR x_points : NUMBER = 1024, HELP "Data pints for X axis"; EXPOSE VAR y_points : NUMBER = 256, HELP "Data pints for Y axis"; EXPOSE VAR linear_or_nus : util.LinearNus = "Linear", HELP "Select monotonic increments (Linear) or Non Uniform Sampling"; EXPOSE VAR sampling_density : util.NusDensity = 25, DEPENDS ON linear_or_nus ENABLE WHEN (linear_or_nus = "Nus"), HELP "Non Uniform Sampling sampling density"; EXPOSE VAR mix_time : NUMBER = 1000[ms], HELP "Mixing time for NOESY (about T1)"; EXPOSE VAR scans : NUMBER = 4; VAR dual_tuned : BOOLEAN = FALSE; VAR obs_domain : TEXT = "Proton"; VAR oneh_coil : TEXT = "hf1"; SET MACHINE PARAMETER "spin_state" = "SPIN OFF"; -- Call clip() here to set x_sweep and x_offset if highres exists -- IF perform_clip THEN IF highres_proton /= NULL THEN INVOKE util.Handle_Clipping(highres_proton, x_offset, x_sweep); INFORM "x_offset set to $(x_offset)"; INFORM "x_sweep set to $(x_sweep)"; END IF; END IF; INVOKE util.Determine_coil( oneh_coil ); TUNE PROBE FORCE force_tune DUAL dual_tuned COIL oneh_coil DOMAIN obs_domain OFFSET x_offset; INVOKE util.Preamble(); IF autogain = TRUE AND rgain = 0 THEN SET rgain = 50; END IF; VAR params : util.Assoc; VAR fname_ext : TEXT = ""; INVOKE util.NUS_Params( params, linear_or_nus, sampling_density ); IF linear_or_nus = "Nus" THEN SET fname_ext = "_NUS"; END IF; CONCEAL EXPERIMENT NOESY IS SAVE AS "$(SAMPLE)_NOESY"; COLLECT "noesy"; SET * = params; SET process = "2d_homo2d_phase.list"; comment = comment; auto_gain = autogain; force_dual_mode = dual_tuned; x_offset = x_offset; x_sweep = x_sweep; x_points = x_points; y_points = y_points; mix_time = mix_time; scans = scans; recvr_gain = rgain; END EXPERIMENT; SET SAMPLE "receiver_gain" = NOESY("recvr_gain"); PROCESS NOESY TO outputdata SAVE AS "$(SAMPLE)_NOESY_ft"; IF highres_proton = NULL THEN SET highres_proton = project( outputdata ); END IF; PRESENTATION output_pdf TEMPLATE "cosy_runtime" WITH DATA outputdata AND highres_proton AND highres_proton TO JOB PRINTER and FILE "$(SAMPLE)_NOESY_Presentation_$(JOB_ID).pdf"; INVOKE util.Postamble( "NOESY", NOESY, output_pdf ); END METHOD NOESY; ------------------------------------------------------------------------------- METHOD ROESY ( CONCEAL IN highres_proton : DATA ) IS PURPOSE "Cross-relaxation correlation spectroscopy in the rotating frame"; DURATION (( linear_or_nus = "Linear" ) ? 1 : sampling_density / 100) * ROESY + ( force_tune ? 60[s] : 0[s] ) + 120[s]; EXPOSE PASSIVE VAR comment : TEXT = "", HELP "Enter a comment string"; EXPOSE VAR force_tune : BOOLEAN = FALSE, HELP "Retune RF coil(s)"; EXPOSE PASSIVE VAR autogain : BOOLEAN = TRUE, HELP "Optimize gain value automatically"; EXPOSE PASSIVE VAR rgain : Gain_Range = 0, DEPENDS ON autogain EVALUATE (autogain ? 0 : 50) ENABLE WHEN (autogain = FALSE), HELP "Field will enable when proton_autogain is False"; EXPOSE PASSIVE VAR perform_clip : BOOLEAN = FALSE, HELP "Optimize sweep width and carrier offset"; EXPOSE PASSIVE VAR x_offset : NUMBER = 5[ppm], HELP "Center of spectrum"; EXPOSE VAR x_sweep : NUMBER = 15[ppm], HELP "Sweep width"; EXPOSE VAR x_points : NUMBER = 1024, HELP "Data pints for X axis"; EXPOSE VAR y_points : NUMBER = 256, HELP "Data pints for Y axis"; EXPOSE VAR linear_or_nus : util.LinearNus = "Linear", HELP "Select monotonic increments (Linear) or Non Uniform Sampling"; EXPOSE VAR sampling_density : util.NusDensity = 25, DEPENDS ON linear_or_nus ENABLE WHEN (linear_or_nus = "Nus"), HELP "Non Uniform Sampling sampling density"; EXPOSE VAR mix_time : NUMBER = 250[ms], HELP "Mixing time for ROESY"; EXPOSE VAR scans : NUMBER = 4; VAR dual_tuned : BOOLEAN = FALSE; VAR obs_domain : TEXT = "Proton"; VAR oneh_coil : TEXT = "hf1"; SET MACHINE PARAMETER "spin_state" = "SPIN OFF"; -- Call clip() here to set x_sweep and x_offset if highres exists -- IF perform_clip THEN IF highres_proton /= NULL THEN INVOKE util.Handle_Clipping(highres_proton, x_offset, x_sweep); INFORM "x_offset set to $(x_offset)"; INFORM "x_sweep set to $(x_sweep)"; END IF; END IF; INVOKE util.Determine_coil( oneh_coil ); TUNE PROBE FORCE force_tune DUAL dual_tuned COIL oneh_coil DOMAIN obs_domain OFFSET x_offset; INVOKE util.Preamble(); IF autogain = TRUE AND rgain = 0 THEN SET rgain = 50; END IF; VAR params : util.Assoc; VAR fname_ext : TEXT = ""; INVOKE util.NUS_Params( params, linear_or_nus, sampling_density ); IF linear_or_nus = "Nus" THEN SET fname_ext = "_NUS"; END IF; CONCEAL EXPERIMENT ROESY IS SAVE AS "$(SAMPLE)_ROESY"; COLLECT "roesy"; SET * = params; SET process = "2d_homo2d_phase.list"; comment = comment; auto_gain = autogain; force_dual_mode = dual_tuned; x_offset = x_offset; x_sweep = x_sweep; x_points = x_points; y_points = y_points; scans = scans; mix_time = mix_time; recvr_gain = rgain; END EXPERIMENT; SET SAMPLE "receiver_gain" = ROESY("recvr_gain"); PROCESS ROESY TO outputdata SAVE AS "$(SAMPLE)_ROESY_ft"; IF highres_proton = NULL THEN SET highres_proton = project( outputdata ); END IF; PRESENTATION output_pdf TEMPLATE "cosy_runtime" WITH DATA outputdata AND highres_proton AND highres_proton TO JOB PRINTER and FILE "$(SAMPLE)_ROESY_Presentation_$(JOB_ID).pdf"; INVOKE util.Postamble( "ROESY", ROESY, output_pdf ); END METHOD ROESY; ------------------------------------------------------------------------------- NUMBER DEPT_Angles IS INTEGER FROM 45 TO 135 STEP 45 WITH UNIT [deg]; METHOD DEPT ( CONCEAL IN highres_carbon : DATA ) IS PURPOSE "DEPT experiment to distinguish CH, CH2, CH3 groups"; DURATION DEPT + ( force_tune ? 60[s] : 0[s] ) + 120[s]; EXPOSE PASSIVE VAR comment : TEXT = "", HELP "Enter a comment string"; EXPOSE VAR force_tune : BOOLEAN = FALSE, HELP "Retune RF coil(s)"; EXPAND MACRO carbon_acq_conditions; EXPOSE PASSIVE VAR selection_angle : DEPT_Angles = 135[deg], HELP "DEPT selection angle"; EXPOSE VAR scans : NUMBER = 512; VAR angle_value : TEXT = [STRING](selection_angle`[]) & "deg"; VAR dual_tuned : BOOLEAN = FALSE; VAR obs_domain : DOMS = "Carbon13"; VAR irr_domain : DOMS = "Proton"; VAR oneh_coil : TEXT = "hf1"; IF collection_mode = "Acq Time" THEN INVOKE util.Determine_data_points( obs_domain, points_or_acq_time, x_sweep, x_points ); ELSE SET x_points = points_or_acq_time; END IF; INVOKE util.Determine_coil( oneh_coil ); TUNE PROBE FORCE force_tune DUAL dual_tuned COIL "LF1" DOMAIN obs_domain OFFSET x_offset COIL oneh_coil DOMAIN irr_domain OFFSET 5[ppm]; INVOKE util.Preamble(); CONCEAL EXPERIMENT DEPT IS SAVE AS "$(SAMPLE)_DEPT$(angle_value)"; COLLECT "dept_dec"; SET process = "dept_autophase_p.list"; comment = comment; force_dual_mode = dual_tuned; selection_angle = selection_angle; x_offset = x_offset; x_sweep = x_sweep; x_points = x_points; scans = scans; END EXPERIMENT; PROCESS DEPT TO outputdata SAVE AS "$(SAMPLE)_DEPT$(angle_value)_ft"; PRESENTATION output_pdf TEMPLATE "params_right_runtime_carbon_full" WITH DATA outputdata TO JOB PRINTER AND FILE "$(SAMPLE)_DEPT$(angle_value)_Presentation_$(JOB_ID).pdf"; INVOKE util.Postamble( "DEPT$(angle_value)", DEPT, output_pdf ); END METHOD DEPT; ------------------------------------------------------------------------------- METHOD "Edited DEPT" IS PURPOSE "Edited DEPT"; -- Begin Carbon section EXPOSE VAR force_tune : BOOLEAN = FALSE, HELP "Retune RF coil(s)"; EXPOSE PASSIVE VAR x_offset : NUMBER = 100[ppm], HELP "Center of spectrum"; EXPOSE VAR x_sweep : NUMBER = 250[ppm], HELP "Sweep width"; EXPOSE PASSIVE VAR save_as : TEXT = "edited dept", HELP "Basename of saved spectra"; CONST carbon_save_as : TEXT = save_as & "_CARBON"; EXPOSE VAR scans : NUMBER = 1024; VAR dual_tuned : BOOLEAN = FALSE; -- End Carbon section -- Begin DEPT45 section CONST dept_45_save_as : TEXT = save_as & "_DEPT_45"; -- End DEPT45 section -- Begin DEPT90 section CONST dept_90_save_as : TEXT = save_as & "_DEPT_90"; -- End DEPT90 section -- Begin DEPT135 section CONST dept_135_save_as : TEXT = save_as & "_DEPT_135"; -- End DEPT135 section -- Common Block EXPOSE VAR save_edited_spectra : BOOLEAN = TRUE, HELP "Save processed spectra"; CONST pdf_filename : TEXT = save_as & "_EDITED_DEPT"; -- End Common Block VAR dept_scans : NUMBER = scans / 2; VAR obs_domain : DOMS = "Carbon13"; VAR irr_domain : DOMS = "Proton"; VAR oneh_coil : TEXT = "hf1"; INVOKE util.Determine_coil( oneh_coil ); TUNE PROBE FORCE force_tune DUAL dual_tuned COIL "LF1" DOMAIN obs_domain OFFSET x_offset COIL oneh_coil DOMAIN irr_domain OFFSET 5[ppm]; INVOKE util.Preamble(); CONCEAL EXPERIMENT Carbon IS SAVE AS carbon_save_as; COLLECT "carbon"; SET process = "carbon_autophase_p.list"; force_dual_mode = dual_tuned; scans = scans; x_offset = x_offset; x_sweep = x_sweep; END EXPERIMENT; CONCEAL EXPERIMENT Dept_45 IS SAVE AS dept_45_save_as; COLLECT "dept_dec"; SET scans = dept_scans; CONSTRAIN scans MULTIPLE OF 8 INCREASE; SET selection_angle = 45[deg]; x_offset = x_offset; x_sweep = x_sweep; force_dual_mode = dual_tuned; END EXPERIMENT; CONCEAL EXPERIMENT Dept_90 IS SAVE AS dept_90_save_as; COLLECT "dept_dec"; SET scans = dept_scans; CONSTRAIN scans MULTIPLE OF 8 INCREASE; SET selection_angle = 90[deg]; x_offset = x_offset; x_sweep = x_sweep; force_dual_mode = dual_tuned; END EXPERIMENT; CONCEAL EXPERIMENT Dept_135 IS SAVE AS dept_135_save_as; COLLECT "dept_dec"; SET scans = dept_scans; CONSTRAIN scans MULTIPLE OF 8 INCREASE; SET selection_angle = 135[deg]; x_offset = x_offset; x_sweep = x_sweep; force_dual_mode = dual_tuned; END EXPERIMENT; VAR tmp_carbon : DATA; VAR tmp_45 : DATA; SET tmp_45 = dept_45 - dept_135; VAR tmp_90 : DATA; VAR tmp_135 : DATA; SET tmp_135 = dept_45 + dept_135 - sqrt(2) * dept_90; SET tmp_carbon = clip( ppm( machinephase( fft( sexp( carbon, 2[Hz], 0[s] ) ) ) ), 1.2, FALSE ); SET tmp_45 = ppm( machinephase( fft( sexp( tmp_45, 2[Hz], 0[s] ) ) ) ); SET tmp_90 = ppm( machinephase( fft( sexp( dept_90, 2[Hz], 0[s] ) ) ) ); SET tmp_135 = ppm( machinephase( fft( sexp( tmp_135, 2[Hz], 0[s] ) ) ) ); PERCIVAL <<< --Make a vector the can be linked to in PM that will allow the CHs to --have the same y min and max based on the current data files function CREATE_MAX_FILE( in45 : FILE, in90 : FILE, in135 : FILE ) return FILE is var mm : SET, max_y : NUMBER := -infinity, min_y : NUMBER := infinity, max_x : NUMBER := -infinity, min_x : NUMBER := infinity; for fl in {in45, in90, in135} loop mm := minmax( fl ); --Pick the max y value in the set of files(get the largest positive value) if mm(2) > max_y then max_y := mm(2); end if; --Pick the min y value in the set of files (get the largest negative value) if mm(1) < min_y then min_y := mm(1); end if; mm := minmax {(bounds fl){3,1}, (bounds fl){4,1}}; --Pick the max x value in the set of files if mm(2) > max_x then max_x := mm(2); end if; --Pick the min x value in the set of files if mm(1) < min_x then min_x := mm(1); end if; end loop; return vector {{max_x,max_y},{min_x,min_y}}; end CREATE_MAX_FILE; >>>; VAR max_file : DATA; SET max_file = CALL create_max_file( tmp_45, tmp_90, tmp_135 ); IF save_edited_spectra THEN PROCESS tmp_carbon WITH "null.list" to tmp_carbon_ft SAVE AS "$(save_as)_CARBON"; PROCESS tmp_90 WITH "null.list" to tmp_90_ft SAVE AS "$(save_as)_METHINES"; PROCESS tmp_45 WITH "null.list" to tmp_45_ft SAVE AS "$(save_as)_METHYLENES"; PROCESS tmp_135 WITH "null.list" to tmp_135_ft SAVE AS "$(save_as)_METHYLS"; END IF; PRESENTATION output_pdf TEMPLATE "dept" WITH DATA tmp_carbon AND tmp_90 AND tmp_45 AND tmp_135 AND max_file TO JOB PRINTER AND FILE "$(pdf_filename).pdf"; END METHOD "Edited DEPT"; ------------------------------------------------------------------------------- METHOD HMQC ( CONCEAL IN highres_carbon : DATA; CONCEAL IN highres_proton : DATA ) IS PURPOSE "Inverse detected heteronuclear long-range correlation spectroscopy"; DURATION (( linear_or_nus = "Linear" ) ? 1 : sampling_density / 100) * HMQC + ( force_tune ? 60[s] : 0[s] ) + 120[s]; EXPOSE PASSIVE VAR comment : TEXT = "", HELP "Enter a comment string"; EXPOSE VAR force_tune : BOOLEAN = TRUE, HELP "Retune RF coil(s)"; EXPOSE PASSIVE VAR autogain : BOOLEAN = FALSE, HELP "Optimize gain value automatically"; EXPOSE PASSIVE VAR rgain : Gain_Range = 50, DEPENDS ON autogain EVALUATE (autogain ? 0 : 50) ENABLE WHEN (autogain = FALSE), HELP "Field will enable when proton_autogain is False"; EXPOSE PASSIVE VAR perform_clip : BOOLEAN = FALSE, HELP "Optimize sweep width and carrier offset"; EXPOSE VAR x_offset : NUMBER = 5[ppm]; EXPOSE VAR x_sweep : NUMBER = 15[ppm]; EXPOSE VAR x_points : NUMBER = 1024; EXPOSE VAR y_offset : NUMBER = 85[ppm]; EXPOSE VAR y_sweep : NUMBER = 170[ppm]; EXPOSE VAR y_points : NUMBER = 256; EXPOSE VAR linear_or_nus : util.LinearNus = "Linear", HELP "Select monotonic increments (Linear) or Non Uniform Sampling"; EXPOSE VAR sampling_density : util.NusDensity = 25, DEPENDS ON linear_or_nus ENABLE WHEN (linear_or_nus = "Nus"), HELP "Non Uniform Sampling sampling density"; EXPOSE VAR j_constant : NUMBER = 140[Hz]; EXPOSE VAR scans : NUMBER = 4; VAR dual_tuned : BOOLEAN = FALSE; VAR obs_domain : DOMS = "Proton"; VAR irr_domain : DOMS = "Carbon13"; VAR oneh_coil : TEXT = "hf1"; SET MACHINE PARAMETER "spin_state" = "SPIN OFF"; -- Call clip() here to set x_sweep and x_offset if highres exists -- IF perform_clip THEN IF highres_proton /= NULL THEN INVOKE util.Handle_Clipping(highres_proton, x_offset, x_sweep); INFORM "x_offset set to $(x_offset)"; INFORM "x_sweep set to $(x_sweep)"; END IF; IF highres_carbon /= NULL THEN INVOKE util.Handle_Clipping(highres_carbon, y_offset, y_sweep); INFORM "y_offset set to $(y_offset)"; INFORM "y_sweep set to $(y_sweep)"; END IF; END IF; INVOKE util.Determine_coil( oneh_coil ); TUNE PROBE FORCE force_tune DUAL dual_tuned COIL "LF1" DOMAIN irr_domain OFFSET y_offset COIL oneh_coil DOMAIN obs_domain OFFSET x_offset; INVOKE util.Preamble(); IF autogain = TRUE AND rgain = 0 THEN SET rgain = 50; END IF; VAR params : util.Assoc; VAR fname_ext : TEXT = ""; INVOKE util.NUS_Params( params, linear_or_nus, sampling_density ); IF linear_or_nus = "Nus" THEN SET fname_ext = "_NUS"; END IF; CONCEAL EXPERIMENT HMQC IS SAVE AS "$(SAMPLE)_HMQC"; COLLECT "hmqc"; SET * = params; SET process = "2d_inverse_abs.list"; comment = comment; force_dual_mode = dual_tuned; auto_gain = autogain; recvr_gain = rgain; x_sweep = x_sweep; x_offset = x_offset; x_points = x_points; y_sweep = y_sweep; y_offset = y_offset; y_points = y_points; scans = scans; j_constant = j_constant; END EXPERIMENT; PROCESS HMQC TO outputdata SAVE AS "$(SAMPLE)_HMQC_ft"; IF highres_proton = NULL THEN SET highres_proton = project( outputdata,2); END IF; IF highres_carbon = NULL THEN SET highres_carbon = project( outputdata); END IF; PRESENTATION output_pdf TEMPLATE "cosy_runtime" WITH DATA outputdata AND highres_proton AND highres_carbon TO JOB PRINTER and FILE "$(SAMPLE)_HMQC_Presentation_$(JOB_ID).pdf"; INVOKE util.Postamble( "HMQC", HMQC, output_pdf ); END METHOD HMQC; ------------------------------------------------------------------------------- METHOD "HSQC" ( CONCEAL IN highres_carbon : DATA; CONCEAL IN highres_proton : DATA ) IS PURPOSE "Inverse detected heteronuclear correlation spectroscopy"; DURATION (( linear_or_nus = "Linear" ) ? 1 : sampling_density / 100) * HSQC + ( force_tune ? 60[s] : 0[s] ) + 120[s]; EXPOSE PASSIVE VAR comment : TEXT = "", HELP "Enter a comment string"; EXPOSE VAR force_tune : BOOLEAN = TRUE, HELP "Retune RF coil(s)"; EXPOSE PASSIVE VAR autogain : BOOLEAN = FALSE, HELP "Optimize gain value automatically"; EXPOSE PASSIVE VAR rgain : Gain_Range = 50, DEPENDS ON autogain EVALUATE (autogain ? 0 : 50) ENABLE WHEN (autogain = FALSE), HELP "Field will enable when proton_autogain is False"; EXPOSE PASSIVE VAR perform_clip : BOOLEAN = FALSE, HELP "Optimize sweep width and carrier offset"; EXPOSE VAR x_offset : NUMBER = 5[ppm]; EXPOSE VAR x_sweep : NUMBER = 15[ppm]; EXPOSE VAR x_points : NUMBER = 1024; EXPOSE VAR y_offset : NUMBER = 85[ppm]; EXPOSE VAR y_sweep : NUMBER = 170[ppm]; EXPOSE VAR y_points : NUMBER = 128; EXPOSE VAR linear_or_nus : util.LinearNus = "Linear", HELP "Select monotonic increments (Linear) or Non Uniform Sampling"; EXPOSE VAR sampling_density : util.NusDensity = 25, DEPENDS ON linear_or_nus ENABLE WHEN (linear_or_nus = "Nus"), HELP "Non Uniform Sampling sampling density"; EXPOSE VAR multiplicity_edit_mode : MultiplicityEdit = "up_down"; EXPOSE VAR scans : NUMBER = 2; VAR dual_tuned : BOOLEAN = FALSE; VAR obs_domain : DOMS = "Proton"; VAR irr_domain : DOMS = "Carbon13"; VAR oneh_coil : TEXT = "hf1"; SET MACHINE PARAMETER "spin_state" = "SPIN OFF"; -- Call clip() here to set x_sweep and x_offset if highres exists -- IF perform_clip THEN IF highres_proton /= NULL THEN INVOKE util.Handle_Clipping(highres_proton, x_offset, x_sweep); INFORM "x_offset set to $(x_offset)"; INFORM "x_sweep set to $(x_sweep)"; END IF; IF highres_carbon /= NULL THEN INVOKE util.Handle_Clipping(highres_carbon, y_offset, y_sweep); INFORM "y_offset set to $(y_offset)"; INFORM "y_sweep set to $(y_sweep)"; END IF; END IF; INVOKE util.Determine_coil( oneh_coil ); TUNE PROBE FORCE force_tune DUAL dual_tuned COIL "LF1" DOMAIN irr_domain OFFSET y_offset COIL oneh_coil DOMAIN obs_domain OFFSET x_offset; INVOKE util.Preamble(); IF autogain = TRUE AND rgain = 0 THEN SET rgain = 50; END IF; VAR params : util.Assoc; VAR fname_ext : TEXT = ""; INVOKE util.NUS_Params( params, linear_or_nus, sampling_density ); IF linear_or_nus = "Nus" THEN SET fname_ext = "_NUS"; END IF; CONCEAL EXPERIMENT HSQC IS SAVE AS "$(SAMPLE)_HSQC"; COLLECT "hsqc"; SET * = params; SET process = "2d_inverse_phase.list"; comment = comment; force_dual_mode = dual_tuned; auto_gain = autogain; recvr_gain = rgain; x_offset = x_offset; x_sweep = x_sweep; x_points = x_points; y_offset = y_offset; y_sweep = y_sweep; y_points = y_points; scans = scans; multiplicity_edit_mode = multiplicity_edit_mode; END EXPERIMENT; PROCESS HSQC TO outputdata SAVE AS "$(SAMPLE)_HSQC_ft"; IF highres_proton = NULL THEN SET highres_proton = project( outputdata,2); END IF; IF highres_carbon = NULL THEN SET highres_carbon = project( outputdata); END IF; PRESENTATION output_pdf TEMPLATE "cosy_runtime" WITH DATA outputdata AND highres_proton AND highres_carbon TO JOB PRINTER and FILE "$(SAMPLE)_HSQC_Presentation_$(JOB_ID).pdf"; INVOKE util.Postamble( "HSQC", HSQC, output_pdf ); END METHOD "HSQC"; ------------------------------------------------------------------------------- METHOD HMBC ( CONCEAL IN highres_carbon : DATA; CONCEAL IN highres_proton : DATA ) IS PURPOSE "Inverse detected heteronuclear long-range correlation spectroscopy"; DURATION (( linear_or_nus = "Linear" ) ? 1 : sampling_density / 100) * HMBC + ( force_tune ? 60[s] : 0[s] ) + 120[s]; EXPOSE PASSIVE VAR comment : TEXT = "", HELP "Enter a comment string"; EXPOSE VAR force_tune : BOOLEAN = FALSE, HELP "Retune RF coil(s)"; EXPOSE PASSIVE VAR autogain : BOOLEAN = FALSE, HELP "Optimize gain value automatically"; EXPOSE PASSIVE VAR rgain : Gain_Range = 50, DEPENDS ON autogain EVALUATE (autogain ? 0 : 50) ENABLE WHEN (autogain = FALSE), HELP "Field will enable when proton_autogain is False"; EXPOSE PASSIVE VAR perform_clip : BOOLEAN = FALSE, HELP "Optimize sweep width and carrier offset"; EXPOSE VAR x_offset : NUMBER = 5[ppm]; EXPOSE VAR x_sweep : NUMBER = 15[ppm]; EXPOSE VAR x_points : NUMBER = 1024; EXPOSE VAR y_offset : NUMBER = 100[ppm]; EXPOSE VAR y_sweep : NUMBER = 250[ppm]; EXPOSE VAR y_points : NUMBER = 256; EXPOSE VAR linear_or_nus : util.LinearNus = "Linear", HELP "Select monotonic increments (Linear) or Non Uniform Sampling"; EXPOSE VAR sampling_density : util.NusDensity = 25, DEPENDS ON linear_or_nus ENABLE WHEN (linear_or_nus = "Nus"), HELP "Non Uniform Sampling sampling density"; EXPOSE VAR longrange_j : NUMBER = 8[Hz]; EXPOSE VAR scans : NUMBER = 4; VAR dual_tuned : BOOLEAN = FALSE; VAR obs_domain : DOMS = "Proton"; VAR irr_domain : DOMS = "Carbon13"; VAR oneh_coil : TEXT = "hf1"; SET MACHINE PARAMETER "spin_state" = "SPIN OFF"; -- Call clip() here to set x_sweep and x_offset if highres exists -- IF perform_clip THEN IF highres_proton /= NULL THEN INVOKE util.Handle_Clipping(highres_proton, x_offset, x_sweep); INFORM "x_offset set to $(x_offset)"; INFORM "x_sweep set to $(x_sweep)"; END IF; IF highres_carbon /= NULL THEN INVOKE util.Handle_Clipping(highres_carbon, y_offset, y_sweep); INFORM "y_offset set to $(y_offset)"; INFORM "y_sweep set to $(y_sweep)"; END IF; END IF; INVOKE util.Determine_coil( oneh_coil ); TUNE PROBE FORCE force_tune DUAL dual_tuned COIL "LF1" DOMAIN irr_domain OFFSET y_offset COIL oneh_coil DOMAIN obs_domain OFFSET x_offset; INVOKE util.Preamble(); VAR params : util.Assoc; VAR fname_ext : TEXT = ""; INVOKE util.NUS_Params( params, linear_or_nus, sampling_density ); IF linear_or_nus = "Nus" THEN SET fname_ext = "_NUS"; END IF; CONCEAL EXPERIMENT HMBC IS SAVE AS "$(SAMPLE)_HMBC"; COLLECT "hmbc"; SET * = params; SET process = "2d_hmbc_abs.list"; comment = comment; auto_gain = autogain; force_dual_mode = dual_tuned; recvr_gain = rgain; x_sweep = x_sweep; x_offset = x_offset; x_points = x_points; y_sweep = y_sweep; y_offset = y_offset; y_points = y_points; scans = scans; longrange_j = longrange_j; END EXPERIMENT; PROCESS HMBC TO outputdata SAVE AS "$(SAMPLE)_HMBC_ft"; IF highres_proton = NULL THEN SET highres_proton = project( outputdata,2); END IF; IF highres_carbon = NULL THEN SET highres_carbon = project( outputdata); END IF; PRESENTATION output_pdf TEMPLATE "cosy_runtime" WITH DATA outputdata AND highres_proton AND highres_carbon TO JOB PRINTER and FILE "$(SAMPLE)_HMBC_Presentation_$(JOB_ID).pdf"; INVOKE util.Postamble( "HMBC", HMBC, output_pdf ); END METHOD HMBC; ------------------------------------------------------------------------------- METHOD Proton_VT ( OUT highres_proton : DATA ) IS PURPOSE "Routine Proton single pulse experiment with VT"; EXPOSE PASSIVE VAR comment : TEXT = "", HELP "Enter a comment string"; EXPOSE VAR force_tune : BOOLEAN = TRUE, HELP "Retune RF coil(s)"; EXPOSE PASSIVE VAR autogain : BOOLEAN = TRUE, HELP "Optimize gain value automatically"; EXPOSE PASSIVE VAR rgain : NUMBER = NULL, HELP "Observation receiver gain"; EXPOSE PASSIVE VAR VT_target_list : LIST = {30[dC], 40[dC], 50[dC], 60[dC]}, HELP "Target temperature"; EXPOSE VAR VT_delay : NUMBER = 600[s], HELP "How long to wait after temperature settles"; EXPOSE PASSIVE VAR temp : util.Temp_States = "TEMP ON", HELP "Temp state for sample"; EXPOSE PASSIVE VAR spin : util.Spin_States = "SPIN ON", HELP "Spin state for sample"; VAR lock : util.Lock_States = "AUTOLOCK"; EXPAND MACRO proton_acq_conditions; EXPOSE PASSIVE VAR grad_shim : BOOLEAN = TRUE, HELP "Force gradient shimming to be done"; EXPOSE PASSIVE VAR auto_shim : AUTO_SHIM_MODE = "Z1 Z2", HELP "Auto Shim mode"; EXPOSE PASSIVE VAR save_to_sample : BOOLEAN = TRUE, HELP "Record the specified parameters to the Sample"; EXPOSE VAR scans : NUMBER = 8; VAR prefix : TEXT = NAMESPACE "lock.solvent_prefix"; VAR temp_limit : NUMBER = NAMESPACE "$(prefix).\"$(SAMPLE.solvent)\".temp_boiling"; VAR VT_target : NUMBER; VAR loop_count : NUMBER = size( VT_target_list ); VAR i : NUMBER = 0; VAR tmp_gain : NUMBER; VAR dual_tuned : BOOLEAN = FALSE; VAR obs_domain : TEXT = "Proton"; VAR oneh_coil : TEXT = "hf1"; IF collection_mode = "Acq Time" THEN INVOKE util.Determine_data_points( obs_domain, points_or_acq_time, x_sweep, x_points ); ELSE SET x_points = points_or_acq_time; END IF; INVOKE util.Determine_coil( oneh_coil ); REPEAT loop_count TIMES DO SET i = i + 1; SET VT_target = VT_target_list(i); IF VT_target > temp_limit THEN INFORM FATAL "VT_target $(VT_target) is above boiling temperature $(temp_limit), skipping ..."; ELSE INFORM "VT_target = $(VT_target)"; INVOKE util.Set_State( VT_target, VT_delay, temp, spin, lock, save_to_sample ); TUNE PROBE FORCE force_tune DUAL dual_tuned COIL oneh_coil DOMAIN obs_domain OFFSET 5[ppm]; IF grad_shim THEN INVOKE util."Gradient Shim"(); INVOKE util.Gradient_Shim( TRUE, TRUE, FALSE, TRUE, "1D" ); END IF; IF auto_shim /= "AUTSHIM OFF" THEN SET NAMESPACE "parameter.autoshim_mode" = auto_shim; PROMOTE "parameter.autoshim_mode" TO USER; PROMOTE SHIMS TO SAMPLE; END IF; IF autogain AND i > 1 THEN SET tmp_gain = SAMPLE "receiver_gain"; IF tmp_gain /= NULL THEN SET autogain = FALSE; SET rgain = tmp_gain; END IF; END IF; CONCEAL EXPERIMENT Proton IS SAVE AS "$(SAMPLE)_Proton_$(VT_target)"; COLLECT "proton"; SET process = "proton_autophase.list"; comment = comment; auto_gain = autogain; force_dual_mode = dual_tuned; recvr_gain = rgain; x_offset = x_offset; x_sweep = x_sweep; x_points = x_points; scans = scans; END EXPERIMENT; SET SAMPLE "receiver_gain" = Proton("recvr_gain"); INVOKE util.Postamble( "Proton_$(VT_target)", Proton, NULL ); END IF; END REPEAT; END METHOD Proton_VT; ------------------------------------------------------------------------------- METHOD "Proton No-D" ( CONCEAL INOUT peaklist : LIST = {} ) IS VAR processed_scout : DATA; VAR scout_params : util.Assoc; EXPOSE VAR comment : TEXT = "", HELP "Enter a comment string"; EXPOSE VAR wet_solvent : WET_SOLVENTS = "CHLOROFORM"; EXPOSE VAR peaks : Peak_Range = 1, HELP "Maximum number of peaks is 10"; EXPOSE VAR force_tune : BOOLEAN = FALSE, HELP "Retune RF coil(s)"; EXPOSE PASSIVE VAR autogain : BOOLEAN = TRUE, HELP "Optimize gain value automatically"; EXPOSE PASSIVE VAR rgain : Gain_Range = 0, DEPENDS ON autogain EVALUATE (autogain ? 0 : 50) ENABLE WHEN (autogain = FALSE), HELP "Field will enable when proton_autogain is False"; EXPOSE VAR scans : NUMBER = 8, HELP "Number of scans to perform"; EXPOSE VAR wet_pulse_bandwidth : NUMBER = 0.2[ppm], HELP "Bandwidth of wet pulse"; INVOKE util.Preamble(); SET scout_params = {}; scout_params("auto_gain") = TRUE; scout_params("process") = "scout.list"; scout_params("scans") = 1; scout_params("sexp_width") = 20[Hz]; IF autogain = TRUE AND rgain = 0 THEN SET rgain = 50; END IF; IF peaklist = {} THEN CONCEAL SCOUT EXPERIMENT scout_data IS SAVE AS "$(SAMPLE)_scout_scan"; COLLECT "single_pulse"; SET * = scout_params; END EXPERIMENT; INVOKE util.Insert_File_Parameters( scout_data, scout_params ); SET processed_scout = PROCESS scout_data; peaklist = CALL highest_peaks( processed_scout, peaks ); END IF; INFORM "Peak positions are $(peaklist)"; CONCEAL EXPERIMENT WET1D IS SAVE AS "$(SAMPLE)_1D_WET"; COLLECT "single_pulse_wet"; SET process = "nod_wet1d.list"; comment = comment; force_tune = force_tune; auto_gain = autogain; recvr_gain = rgain; scans = scans; wet_number = peaks; wet_solvent = wet_solvent; soft_bw_input = wet_pulse_bandwidth; wet_slp = peaklist; END EXPERIMENT; SET SAMPLE "receiver_gain" = WET1D("recvr_gain"); VAR found : BOOLEAN; VAR loc : NUMBER; INVOKE GET_WET_OFFSET( found, loc, wet_solvent ); IF found THEN VAR wet_ofs : util.Assoc; SET wet_ofs = {}; wet_ofs("wet_ref_offset") = loc; INVOKE util.Insert_File_Parameters( WET1D, wet_ofs ); END IF; PROCESS WET1D WITH "nod_wet1d.list" TO outputdata SAVE AS "$(SAMPLE)_1D_WET_FT"; INVOKE util.Postamble( "1D WET", WET1D ); END METHOD "Proton No-D"; -------------------------------------------------------------------------------