Example #1
0
void SetMachineParameters( void )
{
  double dval;
  DB_MSG(("-->SetMachineParameters\n"));

  
  if( ParxRelsParHasValue("ACQ_word_size") == No )
  {
    ACQ_word_size = _32_BIT;
  }
  
  dval = PVM_GradDelayTime + PVM_2dPhaseGradientTime - 0.01;
  dval = MAX_OF(PVM_DigEndDelOpt,dval);

  DEOSC = (PVM_AcquisitionTime  + dval)*1000.0;
  ACQ_scan_shift = -1;
  ParxRelsParRelations("ACQ_scan_shift",Yes);
  
  DE = DE < 6.0 ? 6.0: DE;
  
  
  PAPS = QP;
  
  ACQ_BF_enable = Yes;
  
  DB_MSG(("<--SetMachineParameters\n"));
}
Example #2
0
void initMeth()
/*:=MPE=:=======================================================*/
{


  DB_MSG(( "Entering singlepulse:initMeth()" ));

  int dimRange[2] = { 1,2 };
  int lowMat[3]   = { 32, 32, 8 };
  int upMat[3]    = { 32, 32, 8 };

  /* which version of toolboxes should be active */
  PTB_VersionRequirement( Yes,20070101,"");
  
  /*
   * initialize NOE and Decoupling parameter group
   */
  
  STB_NoeOnOffRange();
  STB_DecOnOffRange();
  
  /*
   * init decoupling module
   */
  
  STB_InitDecModule();
  
  /*
   * init noe module
   */
  
  STB_InitNoeModule();
  
  /*
   * init the local adjustments available
   */
  
  
  /*
   * initialize the nuclei dependent on NOE or Decoupling
   */
  
  
  LocalDecNoeHandling();
  
  
  /*  Initialize PVM_NAverages PVM_NRepetitions see code in parsRelations.c */
  Local_NAveragesRange();
  NrepRange();


  /* Initialisation of rf pulse parameters */

  /* 1: flip angle in the scan edidor */
  if(ParxRelsParHasValue("PVM_ExcPulseAngle") == No)
      PVM_ExcPulseAngle = 30.0;
  ParxRelsShowInEditor("PVM_ExcPulseAngle");

  if(ParxRelsParHasValue("FrequencyLock_OnOff") == No)
    FrequencyLock_OnOff = Off;


  /* 2: pulses declared in parDefinitions.h 
     in this case - ExcPulse. We initalise it to default name, 
     1ms, and the flip angle given in PVM_ExcPulseAngle*/
  if(ParxRelsParHasValue("ExcPulse") == No)
  {
     STB_InitRFPulse(&ExcPulse,
		     "gauss.exc",
		     1,
		     PVM_ExcPulseAngle);
  }
  ExcPulseRange();
  
  /* 3: the corresponding pulse enums */
  STB_InitExcPulseEnum("ExcPulseEnum");


/*KW-sliceSPEC (begin) 100714*/
  if(ParxRelsParHasValue("PVM_EchoTime") == No)
    PVM_EchoTime = 1.0;

  if(ParxRelsParHasValue("SliceSpoilerDuration") == No)
    SliceSpoilerDuration = 2;
  if(ParxRelsParHasValue("SliceSpoilerStrength") == No)
    SliceSpoilerStrength = 20;

  /* Initialisation of nucleus */  
  STB_InitNuclei(1);

  /* Initialisation of geometry parameters */
  /* A: in-plane */

  STB_InitStandardInplaneGeoPars(2,dimRange,lowMat,upMat,No);

  /* B: slice geometry */

  STB_InitSliceGeoPars(0,0,0);

  STB_InitExSliceAtoms();
/*KW-sliceSPEC (end) 100714*/

  /* initialisation of spectroscopy */


  ParxRelsHideInEditor("PVM_SpecOffsetHz,PVM_SpecOffsetppm");

  STB_InitSpectroscopy( 1, 1, 1 ,  PVM_Nucleus1 , 200.0, 1000000 );


  /* Initialize multi receiver parameters */
  
  STB_InitEncoding();

 
  /* Initialisation of modules */
  STB_InitWsModule (1);
  STB_InitSatSlicesModule();
  STB_InitFatSupModule();
  NdummyRange();

  /*kw-mod 101014 begin*/
  STB_InitTriggerModule();
  STB_InitTriggerOutModule();
  /*kw-mod 101014 end*/

  /*Gba - shim (start)*/
  if(ParxRelsParHasValue("Slice1ShimStrength_x") == No)
    Slice1ShimStrength_x = 1.0;
  if(ParxRelsParHasValue("Slice1ShimStrength_y") == No)
    Slice1ShimStrength_y = 1.0;
  if(ParxRelsParHasValue("Slice1ShimStrength_z") == No)
    Slice1ShimStrength_z = 1.0;
  if(ParxRelsParHasValue("Slice2ShimStrength_x") == No)
    Slice2ShimStrength_x = 1.0;
  if(ParxRelsParHasValue("Slice2ShimStrength_y") == No)
    Slice2ShimStrength_y = 1.0;
  if(ParxRelsParHasValue("Slice2ShimStrength_z") == No)
    Slice2ShimStrength_z = 1.0;
  /*Gba - shim (end)*/
  
  /* initialisation of DeadTime */
  DeadTimeRange();

  /* setting for Pipeline filter in case of multi channel acquisition */
  PVM_RefScanPCYN = No;
 
 
  /* Once all parameters have initial values, the backbone is called
     to assure they are consistent */
  backbone();
 

  DB_MSG(( "Exiting singlepulse:initMeth()" ));

}
Example #3
0
void SetPpgParameters( void )
{
  DB_MSG(("-->SetPpgParameters\n"));
  
  if( ParxRelsParHasValue("ACQ_trigger_enable") == No )
  {
    ACQ_trigger_enable = No;
  }
  
  if( ParxRelsParHasValue("ACQ_trigger_reference") == No )
  {
    ACQ_trigger_reference[0] = '\0';
  }
  
  if( ParxRelsParHasValue("ACQ_trigger_delay") == No )
  {
    ACQ_trigger_delay = 0;
  }
  
  ParxRelsParRelations("ACQ_trigger_reference",Yes);
  
  
  ACQ_vd_list_size=1;
  PARX_change_dims("ACQ_vd_list",1);
  ACQ_vd_list[0] = 1e-6;
  ParxRelsParRelations("ACQ_vd_list",Yes);
  
  ACQ_vp_list_size=1;
  PARX_change_dims("ACQ_vp_list",1);
  ACQ_vp_list[0] = 1e-6;
  ParxRelsParRelations("ACQ_vp_list",Yes);
    
  ATB_SetPulprog("T1rho_MSME.ppg");

   if(PVM_SelIrOnOff)
  {
    D[0] = PVM_InterGradientWaitTime / 1000.0;
    D[10] = SliceSegEndDelay/1000.0;
  }
  else
  {
    D[0]  = ((PVM_RepetitionTime - PVM_MinRepetitionTime)/NSLICES
       + PVM_InterGradientWaitTime) / 1000.0;
    D[10] = 0.00001;
  }
 
  D[1]  = ((PVM_EchoTime - minTE1)/2.0 + PVM_InterGradientWaitTime) / 1000.0;
  D[2]  = ((PVM_EchoTime - minTE2)/2.0 + 0.04) / 1000.0; /* 0.04 is duration of ADC_END_4ch */
  D[3]  = PVM_GradDelayTime / 1000.0;
  D[3]  = MAX_OF(D[3], 1e-5);  /* min d3 in case PVM_GradDelayTime==0  */
  D[4]  = PVM_RampTime / 1000.0;
  D[5]  = (SliceSpoilerDuration - 2*PVM_RampTime)/1000.0;
  D[6]  = (PVM_2dPhaseGradientTime - 2*PVM_RampTime)/1000.0;
  D[11] = (PVM_ReadDephaseTime - 2.0*PVM_RampTime) / 1000.0;
  D[8] = CFG_AmplifierEnable()/1000.0; 
 
  /* set shaped pulses     */
  sprintf(TPQQ[0].name,ExcPulse.Filename);
  sprintf(TPQQ[1].name,RefPulse.Filename);
  if(PVM_DeriveGains == Yes)  {
    TPQQ[0].power  = ExcPulse.Attenuation;
    TPQQ[1].power  = RefPulse.Attenuation;
  }
  TPQQ[0].offset = 0.0;
  TPQQ[1].offset = 0.0;
  
  ParxRelsParRelations("TPQQ",Yes);
  
  /* set duration of pulse, in this method P[0] is used          */
  P[0] = ExcPulse.Length * 1000;
  P[1] = RefPulse.Length * 1000;
  ParxRelsParRelations("P",Yes);
  
  
  DB_MSG(("<--SetPpgParameters\n"));
}
Example #4
0
void SetInfoParameters( void )
{
  int slices, i, spatDim;
  
  DB_MSG(("-->SetInfoParameters\n"));
  
  spatDim = PTB_GetSpatDim();
  if( PVM_ErrorDetected == Yes )
  {
    UT_ReportError("SetInfoParameters: In function call!");
    return;
  }
  
  ATB_SetAcqMethod();
  
  ATB_SetAcqFov( Spatial, spatDim, PVM_Fov, PVM_AntiAlias );
  if( PVM_ErrorDetected == Yes )
  {
    UT_ReportError("SetInfoParameters: In function call!");
    return;
  }
  
  ACQ_flip_angle = PVM_ExcPulseAngle;
  
  PARX_change_dims("ACQ_echo_time",PVM_NEchoImages);
  for(i=0; i<PVM_NEchoImages; i++)
    ACQ_echo_time[i] = EffectiveTE[i];
  
  PARX_change_dims("ACQ_inter_echo_time",1);
  ACQ_inter_echo_time[0] = PVM_EchoTime;
  
  PARX_change_dims("ACQ_repetition_time",1);
  ACQ_repetition_time[0] = PVM_RepetitionTime;
  
  PARX_change_dims("ACQ_recov_time",1);
  ACQ_recov_time[0] =  PVM_RepetitionTime - PVM_ExSlicePulseLength;
  
  PARX_change_dims("ACQ_inversion_time",1);
  ACQ_inversion_time[0] = PVM_InversionTime;

  strcpy(ACQ_fit_function_name,FitFunctionName);
  if( ParxRelsVisibleForEdit("ProcessingMacro") == 1)
  {
  GO_use_macro = ProcessingMacro;
  ParxRelsParRelations("GO_use_macro", Yes);
  if(ProcessingMacro == Yes)
  strcpy(GO_macro,ProcessingMacroName);
  }
  else
  {
  GO_use_macro = No;
  ParxRelsParRelations("GO_use_macro", Yes);
  }

  
  ATB_SetAcqSliceAngle( PtrType3x3 PVM_SPackArrGradOrient[0],
			PVM_NSPacks );
  
  ACQ_slice_orient = Arbitrary_Oblique;
  
  ACQ_slice_thick = PVM_SliceThick;
  
  slices = GTB_NumberOfSlices( PVM_NSPacks, PVM_SPackArrNSlices );
  if( PVM_ErrorDetected == Yes )
  {
    UT_ReportError("SetInfoParameters: In function call!");
    return;
  }
  
  PARX_change_dims("ACQ_slice_offset",slices);
  PARX_change_dims("ACQ_read_offset",slices);
  PARX_change_dims("ACQ_phase1_offset",slices);
  PARX_change_dims("ACQ_phase2_offset",slices);
  
  for(i=0;i<slices;i++)
  {
    ACQ_slice_offset[i]  = PVM_SliceOffset[i];
    ACQ_read_offset[i]   = PVM_ReadOffset[i];
    ACQ_phase1_offset[i] = PVM_Phase1Offset[i];
    ACQ_phase2_offset[i] = PVM_Phase2Offset[i];
  }
  
  ACQ_read_ext = (int)PVM_AntiAlias[0];
  
  PARX_change_dims("ACQ_slice_sepn", slices==1 ? 1 : slices-1);
  
  if( slices == 1 )
  {
    ACQ_slice_sepn[0] = 0.0;
  }
  else
  {
    for( i=1; i<slices;i++ )
    {
      ACQ_slice_sepn[i-1]=PVM_SliceOffset[i]-PVM_SliceOffset[i-1];
    }
  }
  
  ATB_SetAcqSliceSepn( PVM_SPackArrSliceDistance,
                       PVM_NSPacks );
  
  
  
  ATB_SetAcqPatientPosition();
  
  ATB_SetAcqExpType( Imaging );
  
  ACQ_n_t1_points = 1;
  
  if( ParxRelsParHasValue("ACQ_transmitter_coil") == No )
  {
    ACQ_transmitter_coil[0] = '\0';
  }
  
  if( ParxRelsParHasValue("ACQ_receiver_coil") == No )
  {
    ACQ_receiver_coil[0] = '\0';
  }
  
  if( ParxRelsParHasValue("ACQ_contrast_agent") == No )
  {
    ACQ_contrast_agent[0] = '\0';
  }
  
  if( ParxRelsParHasValue("ACQ_contrast") == No )
  {
    ACQ_contrast.volume = 0.0;
    ACQ_contrast.dose = 0.0;
    ACQ_contrast.route[0] = '\0';
    ACQ_contrast.start_time[0] = '\0';
    ACQ_contrast.stop_time[0] = '\0';
  }
  
  ParxRelsParRelations("ACQ_contrast_agent",Yes);
  
  ACQ_position_X = 0.0;
  ACQ_position_Y = 0.0;
  ACQ_position_Z = 0.0;

  PARX_change_dims("ACQ_temporal_delay",1);
  ACQ_temporal_delay[0] = 0.0;
  
  ACQ_RF_power = 0;
  
  ACQ_flipback = No;
  
  ACQ_n_echo_images = PVM_NEchoImages;
  ACQ_n_movie_frames = 1;
  
  
  DB_MSG(("<--SetInfoParameters\n"));
  
}