예제 #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"));
}
예제 #2
0
void SetRecoParam( void )
{

  int dim,i,complexDataCorr;

  DB_MSG(("-->SetRecoParam\n"));

  /* set baselevel reconstruction parameter */
  /* default initialization of reco based on acqp pars allready set */
  
  ATB_InitDefaultReco();

  /* configure information available during setup mode */

  GS_info_dig_filling     = Yes;
  ParxRelsParRelations("GS_info_dig_filling",Yes); 
  GS_info_normalized_area = Of_raw_data;
  ParxRelsParRelations("GS_info_normalized_area",Yes); 

  /* set reco rotate according to phase offsets     */

  dim = (int) PARX_get_dim("ACQ_size",1);
    
  for (i=0; i<dim; i++)
  {
    if (i==0)
      complexDataCorr = 2;
    else
      complexDataCorr = 1;
    RECO_size[i] = (int)(ACQ_size[i] / complexDataCorr) ;
  }


 DB_MSG(("<--SetRecoParam\n"));
}
예제 #3
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()" ));

}
예제 #4
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"));
}
예제 #5
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"));
  
}
예제 #6
0
void SetGradientParameters( void )
{
  int spatDim, dim;

  DB_MSG(("-->SetGradientParameters\n"));
  
  
  ATB_SetAcqPhaseFactor( 1 );
  if( PVM_ErrorDetected == Yes )
  {
    UT_ReportError("SetGradientParameters: In function call!");
    return;
  }
  

 spatDim = PTB_GetSpatDim();
  
  dim = PARX_get_dim("ACQ_phase_encoding_mode", 1 );
  PARX_change_dims("ACQ_phase_encoding_mode", spatDim );
  PARX_change_dims("ACQ_phase_enc_start", spatDim );
  switch(spatDim)
  {
    case 3:
      ACQ_phase_encoding_mode[2] = User_Defined_Encoding;
      ACQ_phase_enc_start[2] = -1; /* set, but no used */
      ACQ_spatial_size_2 = PVM_EncMatrix[2];
      ParxRelsCopyPar("ACQ_spatial_phase_2","PVM_EncValues2");
      /* no break */
    case 2:
      ACQ_phase_encoding_mode[1] = User_Defined_Encoding;;
      ACQ_phase_enc_start[1] = -1.0; /* set, but no used */
      ACQ_spatial_size_1 = PVM_EncMatrix[1];
      ParxRelsCopyPar("ACQ_spatial_phase_1","PVM_EncValues1");
      /* no break */
    default:
      ACQ_phase_encoding_mode[0] = Read;
      ACQ_phase_enc_start[0] = -1;
  }

  
  ATB_SetAcqGradMatrix( PVM_NSPacks, PVM_SPackArrNSlices,
			PtrType3x3 PVM_SPackArrGradOrient[0],
			PVM_ObjOrderList );
  
  if( PVM_ErrorDetected == Yes )
  {
    UT_ReportError("SetGradientParameters: In function call!");
    return;
  }
  
  
  ACQ_scaling_read  = 1.0;
  ACQ_scaling_phase = 1.0;
  ACQ_scaling_slice = 1.0;
  
  ACQ_rare_factor = 1;
  
  ACQ_grad_str_X = 0.0;
  ACQ_grad_str_Y = 0.0;
  ACQ_grad_str_Z = 0.0;
  
  strcpy(GRDPROG, "");
  
  ATB_SetAcqTrims( 10,
                   PVM_ExSliceGradient,	          /* t0 */
                   -PVM_ExSliceRephaseGradient,   /* t1 */
                   PVM_ExSliceGradient,           /* t2 */
                   SliceSpoilerStrength,          /* t3 */
                   PVM_ReadDephaseGradient,       /* t4 */
                   PVM_ReadGradient,              /* t5 */
                   PVM_2dPhaseGradient,           /* t6 */
                   -PVM_3dPhaseGradient,          /* t7 */
                   -PVM_2dPhaseGradient,          /* t8 */
                   PVM_3dPhaseGradient            /* t9 */
                 );
 
  if( PVM_ErrorDetected == Yes )
  {
    UT_ReportError("SetGradientParameters: In function call!");
    return;
  }
  
  DB_MSG(("<--SetGradientParameters\n"));

}
예제 #7
0
void SetFrequencyParameters( void )
{
  int nslices;

  DB_MSG(("-->SetFrequencyParameters\n"));


  ATB_SetNuc1(PVM_Nucleus1);
   
  sprintf(NUC2,"off");
  sprintf(NUC3,"off");
  sprintf(NUC4,"off");
  sprintf(NUC5,"off");
  sprintf(NUC6,"off");
  sprintf(NUC7,"off");
  sprintf(NUC8,"off");
  
  ATB_SetNucleus(PVM_Nucleus1);
  
  
  if( PVM_ErrorDetected == Yes )
  {
    UT_ReportError("SetFrequencyParameters: In function call!");
    return;
  }
  

  /* setting of SW_h, DIGMOD, DSPFIRM and AQ_mod */

  ATB_SetDigPars();
  
  ACQ_O1_mode = BF_plus_Offset_list;
  ParxRelsParRelations("ACQ_O1_mode",Yes);
  
  ACQ_O2_mode = BF_plus_Offset_list;
  ParxRelsParRelations("ACQ_O2_mode",Yes);
  
  ACQ_O3_mode = BF_plus_Offset_list;
  ParxRelsParRelations("ACQ_O3_mode",Yes);
  
  O1 = 0.0;
  O2 = 0.0;
  O3 = 0.0;
  O4 = 0.0;
  O5 = 0.0;
  O6 = 0.0;
  O7 = 0.0;
  O8 = 0.0;
  
  nslices = GTB_NumberOfSlices( PVM_NSPacks, PVM_SPackArrNSlices );
  if( PVM_ErrorDetected == Yes )
  {
    UT_ReportError("SetFrequencyParameters: In function call!");
    return;
  }
  
  ATB_SetAcqO1List( nslices,
                    PVM_ObjOrderList,
                    PVM_SliceOffsetHz );
  if( PVM_ErrorDetected == Yes )
  {
    UT_ReportError("SetFrequencyParameters: In function call!");
    return;
  }
  
  ATB_SetAcqO1BList( nslices,
                     PVM_ObjOrderList,
                     PVM_ReadOffsetHz);
  
  
  ATB_SetRouting();
  
  if( PVM_ErrorDetected == Yes )
  {
    UT_ReportError("SetFrequencyParameters: In function call!");
    return;
  }
  
  
  
  DB_MSG(("<--SetFrequencyParameters\n"));
}
예제 #8
0
void SetBaseLevelParam( void )
{

  DB_MSG(("-->SetBaseLevelParam\n"));

  SetBasicParameters();
  
  
  if( PVM_ErrorDetected == Yes )
  {
    UT_ReportError("SetBaseLevelParam: Error in function call!");
    return;
  }
  
  SetFrequencyParameters();
  
  if( PVM_ErrorDetected == Yes )
  {
    UT_ReportError("SetBaseLevelParam: In function call!");
    return;
  }
  
  SetPpgParameters();

  if( PVM_ErrorDetected == Yes )
  {
    UT_ReportError("SetBaseLevelParam: In function call!");
    return;
  }
  
  SetGradientParameters();
  
  if( PVM_ErrorDetected == Yes )
  {
    UT_ReportError("SetBaseLevelParam: In function call!");
    return;
  }
  
  SetInfoParameters();
  
  if( PVM_ErrorDetected == Yes )
  {
    UT_ReportError("SetBaseLevelParam: In function call!");
    return;
  }
  
  
  SetMachineParameters();
  
  if( PVM_ErrorDetected == Yes )
  {
    UT_ReportError("SetBaseLevelParam: In function call!");
    return;
  }

  /* ------------------------------------------------------------------------
     Sets parameters needed for multi-receiver acq. Overrides some previously
     set parameters such as NUCn Must be called at the end of
     SetBaseLevel.
     ----------------------------------------------------------------------- */
  if(Yes==ATB_SetMultiRec())
  {
    ATB_SetPulprog("T1rho_MSME.4ch");
  }

  
  /* setting baselevel parameters used by modules */

  ATB_SetFatSupBaselevel();
  ATB_SetMagTransBaseLevel();
  ATB_SetSatSlicesBaseLevel();
  ATB_SetFlowSaturationBaseLevel();
  ATB_SetTriggerBaseLevel();
  ATB_SetEvolutionBaseLevel();
  {
  int nSlices;

  nSlices = GTB_NumberOfSlices( PVM_NSPacks, PVM_SPackArrNSlices );
  ATB_SetSelIrBaseLevel(nSlices);
  }

  DB_MSG(("<--SetBaseLevelParam\n"));
  

}
예제 #9
0
void SetBasicParameters( void )
{
  int spatDim, specDim;
  int nSlices;
  int echo;

  DB_MSG(("-->SetBasicParameters\n"));
    
  /* ACQ_dim */

  spatDim = PTB_GetSpatDim();
  if( PVM_ErrorDetected == Yes )
  {
    UT_ReportError("SetBasicParameters: In function call!");
    return;
  }
  
  specDim = PTB_GetSpecDim();
  if( PVM_ErrorDetected == Yes )
  {
    UT_ReportError("SetBasicParameters: In function call!");
    return;
    }
  
  ACQ_dim = spatDim + specDim;
  ParxRelsParRelations("ACQ_dim",Yes);
  
  /* ACQ_dim_desc */
  
  ATB_SetAcqDimDesc( specDim, spatDim, NULL );
  if( PVM_ErrorDetected == Yes )
  {
    UT_ReportError("SetBasicParameters: In function call!");
    return;
  }
  
  /* ACQ_size */
  /* With the Encoding group, this call
     ATB_SetAcqSize( Spatial, spatDim, PVM_Matrix, PVM_AntiAlias, No );
     is replaced by: */

  ATB_SetAcqSize( Spatial, spatDim, PVM_EncMatrix, NULL, No );
  if( PVM_ErrorDetected == Yes )
  {
    UT_ReportError("SetBasicParameters: In function call!");
    return;
  }
  
  /* NSLICES */
  
  nSlices = GTB_NumberOfSlices( PVM_NSPacks, PVM_SPackArrNSlices );
  if( PVM_ErrorDetected == Yes )
  {
    UT_ReportError("SetBasicParameters: In function call!");
    return;
  }
  
  ATB_SetNSlices( nSlices );
  if( PVM_ErrorDetected == Yes )
  {
    UT_ReportError("SetBasicParameters: In function call!");
    return;
  }
  
  /* NR */
  
  ATB_SetNR( PVM_NRepetitions );
  if( PVM_ErrorDetected == Yes )
  {
    UT_ReportError("SetBasicParameters: In function call!");
    return;
  }
  
  /* NI */
  
  ATB_SetNI( nSlices * PVM_NEchoImages );
  if( PVM_ErrorDetected == Yes )
  {
    UT_ReportError("SetBasicParameters: In function call!");
    return;
  }
  
  
  /* AVERAGING */


  switch(PVM_MotionSupOnOff)
  {
  default:
  case Off:
    ATB_SetNA( PVM_NAverages );
    if( PVM_ErrorDetected == Yes )
    {
      UT_ReportError("SetBasicParameters: In function call!");
      return;
    }
    ATB_SetNAE( 1 );
    if( PVM_ErrorDetected == Yes )
    {
      UT_ReportError("SetBasicParameters: In function call!");
      return;
    }
    break;
  case On:
    ATB_SetNAE( PVM_NAverages );
    if( PVM_ErrorDetected == Yes )
    {
      UT_ReportError("SetBasicParameters: In function call!");
      return;
    }
    ATB_SetNA( 1 );
    if( PVM_ErrorDetected == Yes )
    {
      UT_ReportError("SetBasicParameters: In function call!");
      return;
    }
    break;
  }
 
  
  
  /* ACQ_ns */
  
  ACQ_ns_list_size = PVM_NEchoImages;
  ParxRelsParRelations("ACQ_ns_list_size",Yes);

  for(echo=0; echo<PVM_NEchoImages; echo++)
  {
    ACQ_ns_list[echo] = nEchoesPerEchoImage[echo];
  }
  
  NS = ACQ_ns = ACQ_ns_list[0];
  
  
  
  /* NECHOES */
  
  NECHOES = NEchoes;
  
  
  /* ACQ_obj_order */
  
  PARX_change_dims("ACQ_obj_order",NI);
  
  ATB_SetAcqObjOrder( nSlices, PVM_ObjOrderList, PVM_NEchoImages, 1 );
  if( PVM_ErrorDetected == Yes )
  {
    UT_ReportError("SetBasicParameters: In function call!");
    return;
  }
  
  
  /* DS */
  
  DS = NDummyScans;
  ACQ_DS_enabled = Yes;
  
  
  ATB_DisableAcqUserFilter();
  if( PVM_ErrorDetected == Yes )
  {
    UT_ReportError("SetBasicParameters: In function call!");
    return;
  }

  ATB_SetAcqScanSize( One_scan );
  if( PVM_ErrorDetected == Yes )
  {
    UT_ReportError("SetBasicParameters: In function call!");
    return;
  }
  
  
  DB_MSG(("<--SetBasicParameters\n"));
}
예제 #10
0
void SetRecoParam( void )

{

  int dim,i,size,ftSize[3];

  DB_MSG(("-->SetRecoParam\n"));

  /* set baselevel reconstruction parameter */
  /* default initialization of reco based on acqp pars allready set */
  
  ATB_InitDefaultReco();

  for(i=0; i<PTB_GetSpatDim(); i++)
    ftSize[i] = (int)(PVM_Matrix[i]*PVM_AntiAlias[i]);

  if(PVM_EncUseMultiRec == Yes || PVM_EncPftAccel1 > 1.0)
  {
    int k=0;

   /* select method specific reconstruction method */
   RECO_mode = USER_MODE;
   ParxRelsParRelations("RECO_mode",Yes);
   ATB_InitUserModeReco(ACQ_dim, PVM_EncMatrix, ftSize, 
		     PVM_EncSteps1, PVM_EncSteps2,
		     PVM_EncNReceivers, PVM_EncPpiAccel1, PVM_EncPpiRefLines1,
		     NI, ACQ_obj_order, ACQ_phase_factor, PVM_EchoPosition);
   
   /* set scaling values for phased array coils */
   for(k=0; k<PVM_EncNReceivers;k++)
     RecoScaleChan[k] = PVM_EncChanScaling[k]; 
  }
  
  dim = PTB_GetSpatDim();

 /* set reco sizes and ft_mode (dim 2&3) */
  /* (dim 1 is kept as it was set by ATB_InitDefaultReco) */
  for(i=0; i<dim; i++)
  {
    size = (int)(PVM_Matrix[i]*PVM_AntiAlias[i]);
    RECO_ft_mode[i] = (size == PowerOfTwo(size)) ?  COMPLEX_FFT:COMPLEX_FT;
    RECO_ft_size[i] = size;
    RECO_size[i] = PVM_Matrix[i];
  }
  
  ParxRelsParRelations("RECO_ft_mode",Yes);
  ParxRelsParRelations("RECO_ft_size",Yes);
  ParxRelsParRelations("RECO_size",Yes);
  
  /* set reco rotate according to phase offsets     */
  ATB_SetRecoRotate(PVM_EffPhase1Offset,
                    PVM_Fov[1]*PVM_AntiAlias[1],
                    NSLICES,    
                    PVM_NEchoImages,
                    1) ;         /* phase1 direction*/
  
  if(dim==3)
  {
    ATB_SetRecoRotate(PVM_EffPhase2Offset,      
		      PVM_Fov[2]*PVM_AntiAlias[2],
		      NSLICES,    
		      PVM_NEchoImages,           
		      2) ;         /* phase2 direction*/
  }
  
  
  /* set reco offset */
  
  ATB_SetRecoOffset(RECO_ft_size,
		    PVM_AntiAlias,
		    NI,  
		    dim);
  for(i=0;i<dim;i++)
    RECO_fov[i]= PVM_FovCm[i];
  
  ParxRelsParRelations("RECO_fov",Yes);
  
  ATB_SetRecoTransposition(PtrType3x3 ACQ_grad_matrix[0],
			   PVM_NSPacks,
			   NSLICES,
			   ACQ_ns_list_size,
			   ACQ_obj_order) ;

  DB_MSG(("<--SetRecoParam\n"));
  
}