Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
mitkUSDiPhASCustomControls.cpp
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
14 #include <cmath>
15 
17  : mitk::USDiPhASDeviceCustomControls(device), m_IsActive(false), m_device(device), currentBeamformingAlgorithm((int)Beamforming::PlaneWaveCompound)
18 {
19 }
20 
22 {
23 }
24 
26 {
27  m_IsActive = isActive;
28 }
29 
31 {
32  return m_IsActive;
33 }
34 
35 void mitk::USDiPhASCustomControls::passGUIOut(std::function<void(QString)> callback)
36 {
37  mitk::USDiPhASImageSource* imageSource = dynamic_cast<mitk::USDiPhASImageSource*>(m_device->GetUSImageSource().GetPointer());
38  callback("initializing");
39  imageSource->SetGUIOutput(callback);
40 }
41 
42 // OnSet methods
43 
45 {
46  mitk::USDiPhASImageSource* imageSource = dynamic_cast<mitk::USDiPhASImageSource*>(m_device->GetUSImageSource().GetPointer());
47  imageSource->ModifyEnergyCompensation(compensate);
48 }
49 
51 {
52  mitk::USDiPhASImageSource* imageSource = dynamic_cast<mitk::USDiPhASImageSource*>(m_device->GetUSImageSource().GetPointer());
53  imageSource->ModifyUseBModeFilter(isSet);
54 }
55 
57 {
58  mitk::USDiPhASImageSource* imageSource = dynamic_cast<mitk::USDiPhASImageSource*>(m_device->GetUSImageSource().GetPointer());
59  imageSource->SetRecordingStatus(record);
60 }
61 
63 {
64  mitk::USDiPhASImageSource* imageSource = dynamic_cast<mitk::USDiPhASImageSource*>(m_device->GetUSImageSource().GetPointer());
65  imageSource->SetVerticalSpacing(mm);
66 }
67 
69 {
70  mitk::USDiPhASImageSource* imageSource = dynamic_cast<mitk::USDiPhASImageSource*>(m_device->GetUSImageSource().GetPointer());
71  imageSource->ModifyScatteringCoefficient(coeff);
72 }
73 
75 {
76  mitk::USDiPhASImageSource* imageSource = dynamic_cast<mitk::USDiPhASImageSource*>(m_device->GetUSImageSource().GetPointer());
77  imageSource->ModifyCompensateForScattering(compensate);
78 }
79 
81 {
82  mitk::USDiPhASImageSource* imageSource = dynamic_cast<mitk::USDiPhASImageSource*>(m_device->GetUSImageSource().GetPointer());
83  imageSource->SetSavingSettings(settings);
84 }
85 
86 //Transmit
88 {
89  m_device->GetScanMode().transmitPhaseLengthSeconds = us/1000000;
91 }
92 
94 {
95  m_device->SetBursts(round(((120 / MHz) - 2) / 2));
97  // b = (c/f - 2) * 1/2, where c is the internal clock, f the wanted frequency, b the burst count
98 }
99 
101 {
102  m_device->GetScanMode().transmitEventsCount = events;
104 }
105 
107 {
108  m_device->GetScanMode().voltageV = voltage;
110 }
111 
113 {
114  m_device->SetInterleaved(interleaved);
116 }
117 
118 //Receive
120 {
121  auto& scanMode = m_device->GetScanMode();
122  float time = 2 * (0.001 * (mm)) / scanMode.averageSpeedOfSound;
123  float timeInMicroSeconds = floor(time *1e6); // this is necessary because sub-microsecond accuracy causes undefined behaviour
124  m_device->GetScanMode().receivePhaseLengthSeconds = timeInMicroSeconds*1e-6;
126 }
127 
129 {
130  m_device->GetScanMode().averagingCount = count;
132 }
133 
135 {
136  auto& scanMode = m_device->GetScanMode();
137  char range = scanMode.tgcdB[7] - min;
138  for (int tgc = 0; tgc < 7; ++tgc)
139  scanMode.tgcdB[tgc] = round(tgc*range / 7 + min);
140 
142 }
143 
145 {
146  auto& scanMode = m_device->GetScanMode();
147  char range = max - scanMode.tgcdB[0];
148  for (int tgc = 1; tgc < 8; ++tgc)
149  scanMode.tgcdB[tgc] = round(tgc*range / 7 + scanMode.tgcdB[0]);
150 
152 }
153 
155 {
156  auto& scanMode = m_device->GetScanMode();
157  auto imageSource = dynamic_cast<mitk::USDiPhASImageSource*>(m_device->GetUSImageSource().GetPointer());
158  switch (type) {
159  case DataType::Image_uChar : {
160  scanMode.transferBeamformedData = false;
161  scanMode.transferImageData = true;
163  imageSource->ModifyDataType(DataType::Image_uChar);
164  break;
165  }
166  case DataType::Beamformed_Short : {
167  scanMode.transferBeamformedData = true;
168  scanMode.transferImageData = false;
170  imageSource->ModifyDataType(DataType::Beamformed_Short);
171  break;
172  }
173 
174  default:
175  MITK_INFO << "Unknown Data Type requested";
176  break;
177  }
178 }
179 // 0= image; 1= beamformed
180 
181 //Beamforming
183 {
184  m_device->GetScanMode().reconstructedLinePitchMmOrAngleDegree = mm;
186 }
187 
189 {
190  m_device->GetScanMode().reconstructionSamplesPerLine = samples;
192 }
193 
195 {
196  m_device->GetScanMode().reconstructionLines = lines;
198 }
199 
201 {
202  m_device->GetScanMode().averageSpeedOfSound = mps;
203  m_device->SetInterleaved(m_device->IsInterleaved()); //update transmit parameters
205 }
206 
207 //Bandpass
209 {
210  m_device->GetScanMode().bandpassApply = bandpass;
212 }
213 
215 {
216  m_device->GetScanMode().bandpassFrequencyLowHz = MHz*1000*1000;
218 }
219 
221 {
222  m_device->GetScanMode().bandpassFrequencyHighHz = MHz*1000*1000;
224 }
virtual void OnSetAveragingCount(int count) override
virtual void OnSetExcitationFrequency(double MHz) override
virtual void OnSetSpeedOfSound(int mps) override
virtual void OnSetScatteringCoefficient(float coeff) override
virtual void OnSetSavingSettings(SavingSettings settings) override
#define MITK_INFO
Definition: mitkLogMacros.h:18
virtual void OnSetTransmitPhaseLength(double us) override
Implementation of mitk::USImageSource for DiPhAS API devices. The method mitk::USImageSource::GetNext...
void SetGUIOutput(std::function< void(QString)> out)
virtual void OnSetMode(bool interleaved) override
virtual void OnSetTransmitEvents(int events) override
virtual void OnSetLowCut(double MHz) override
virtual void OnSetTGCMin(int min) override
DataCollection - Class to facilitate loading/accessing structured data.
Custom controls for mitk::USDiPhASDevice.
USDiPhASCustomControls(USDiPhASDevice *device)
void ModifyEnergyCompensation(bool compensate)
virtual void OnSetUseBModeFilter(bool isSet) override
virtual void SetIsActive(bool isActive) override
virtual void OnSetRecord(bool record) override
virtual void OnSetCompensateEnergy(bool compensate) override
virtual void OnSetDataType(DataType type) override
void SetInterleaved(bool interleaved)
void ModifyCompensateForScattering(bool useIt)
void SetSavingSettings(SavingSettings settings)
static T max(T x, T y)
Definition: svm.cpp:56
void SetBursts(int bursts)
virtual void OnSetHighCut(double MHz) override
static T min(T x, T y)
Definition: svm.cpp:53
virtual void OnSetReconstructedLines(int lines) override
virtual void OnSetVerticalSpacing(float mm) override
virtual void OnSetVoltage(int voltage) override
virtual void OnSetTGCMax(int max) override
USImageSource::Pointer GetUSImageSource()
virtual void OnSetReconstructedSamples(int samples) override
ScanModeNative & GetScanMode()
virtual void OnSetPitch(double mm) override
virtual void OnSetScanDepth(double mm) override
virtual void passGUIOut(std::function< void(QString)> callback) override
virtual void OnSetBandpassEnabled(bool bandpass) override
virtual void OnSetCompensateScattering(bool compensate) override