Skip to content

Commit

Permalink
Merge pull request #5 from chamberm/merge-anat
Browse files Browse the repository at this point in the history
Merge anat
  • Loading branch information
chamberm committed Aug 6, 2015
2 parents cefec8a + a7bf25c commit 5c30004
Show file tree
Hide file tree
Showing 4 changed files with 104 additions and 19 deletions.
44 changes: 36 additions & 8 deletions src/dataset/RTTFibers.cpp
Expand Up @@ -35,16 +35,20 @@ RTTFibers::RTTFibers()
m_FAThreshold( 0.20f ),
m_angleThreshold( 35.0f ),
m_step( 1.0f ),
m_GMstep( 15 ),
m_nbSeed ( 10.0f ),
m_nbMeshPt ( 0 ),
m_puncture( 0.2f ),
m_vinvout( 0.2f ),
m_minFiberLength( 90 ),
m_minFiberLength( 60 ),
m_maxFiberLength( 200 ),
m_alpha( 1.0f ),
m_isHARDI( false ),
m_countGMstep( 0 ),
m_stop( false ),
m_pExcludeInfo( NULL )
m_pExcludeInfo( NULL ),
m_pSeedMapInfo( NULL ),
m_pGMInfo( NULL )
{
}

Expand Down Expand Up @@ -618,7 +622,12 @@ Vector RTTFibers::advecIntegrateHARDI( Vector vin, const std::vector<float> &sti
float angleMin = 360.0f;
float angle = 0.0f;
float puncture = m_vinvout;
float fa = m_pMaskInfo->at(s_number);
float wm = m_pMaskInfo->at(s_number);
float gm = 0;
if(m_pGMInfo != NULL)
{
gm = m_pGMInfo->at(s_number);
}
vin.normalize();

for(unsigned int i=0; i < sticks.size()/3; i++)
Expand All @@ -644,8 +653,12 @@ Vector RTTFibers::advecIntegrateHARDI( Vector vin, const std::vector<float> &sti
}
}

Vector res = fa * vOut + (1.0 - fa) * ( (1.0 - puncture ) * vin + puncture * vOut);
res.normalize();
Vector res = 0.5f * wm * vOut + (0.5f * wm) * ( (1.0 - puncture ) * vin + puncture * vOut);

if(gm != 0)
{
res = (1.0 - gm) * vOut + (gm) * ( (1.0 - puncture ) * vin + puncture * vOut);
}

return res;
}
Expand Down Expand Up @@ -1016,10 +1029,23 @@ bool RTTFibers::checkExclude( unsigned int sticksNumber)
bool RTTFibers::withinMapThreshold(unsigned int sticksNumber)
{
bool isOk = false;

if(m_pMaskInfo->at(sticksNumber) > m_FAThreshold && checkExclude(sticksNumber))
float gmVal = 0;
if(m_pGMInfo != NULL)
{
gmVal = m_pGMInfo->at(sticksNumber);
if(gmVal > 0)
{
m_countGMstep++;
}
else
{
m_countGMstep = 0;
}
}

if((m_pMaskInfo->at(sticksNumber) > m_FAThreshold || gmVal > m_FAThreshold) && checkExclude(sticksNumber) && m_countGMstep < m_GMstep)
{
isOk = true;
isOk = true;
}

return isOk;
Expand Down Expand Up @@ -1061,6 +1087,8 @@ void RTTFibers::performHARDIRTT(Vector seed, int bwdfwd, vector<Vector>& points,
sticksNumber = currVoxelz * columns * rows + currVoxely *columns + currVoxelx;
std::vector<float> sticks;

m_countGMstep = 0;

if( sticksNumber < m_pMaximasInfo->getMainDirData()->size() && m_pMaximasInfo->getMainDirData()->at(sticksNumber)[0] != 0 && withinMapThreshold(sticksNumber) && !m_stop)
{
bool initWithDir = RTTrackingHelper::getInstance()->isInitSeed();
Expand Down
5 changes: 5 additions & 0 deletions src/dataset/RTTFibers.h
Expand Up @@ -47,6 +47,7 @@ class RTTFibers
void setPuncture( float puncture ) { m_puncture = puncture; }
void setVinVout( float vinvout ) { m_vinvout = vinvout; }
void setStep( float step ) { m_step = step; }
void setGMStep( float step ) { m_GMstep = step; }
void setIsHardi( bool method ) { m_isHARDI = method; }
void setNbSeed ( float nbSeed ) { m_nbSeed = nbSeed; }
void setMinFiberLength( float minLength ) { m_minFiberLength = minLength; }
Expand All @@ -55,6 +56,7 @@ class RTTFibers
void setHARDIInfo( Maximas* info ) { m_pMaximasInfo = info; }
void setShellInfo( DatasetInfo* info ) { m_pShellInfo = info; }
void setMaskInfo( Anatomy* info ) { m_pMaskInfo = info; }
void setGMInfo( Anatomy* info ) { m_pGMInfo = info; }
void setInitSeed( Vector init ) { m_initVec = init; }

void setOpacity( float alpha ) { m_alpha = alpha; }
Expand Down Expand Up @@ -96,19 +98,22 @@ class RTTFibers
float m_FAThreshold;
float m_angleThreshold;
float m_step;
int m_GMstep;
float m_nbSeed;
float m_nbMeshPt;
float m_puncture;
float m_vinvout;
float m_minFiberLength;
float m_maxFiberLength;
bool m_isHARDI;
float m_countGMstep;
Tensors *m_pTensorsInfo;
Maximas *m_pMaximasInfo;
DatasetInfo *m_pShellInfo;
Anatomy *m_pMaskInfo;
Anatomy *m_pExcludeInfo;
Anatomy *m_pSeedMapInfo;
Anatomy *m_pGMInfo;
Vector m_initVec;

float m_alpha;
Expand Down
65 changes: 54 additions & 11 deletions src/gui/TrackingWindow.cpp
Expand Up @@ -107,6 +107,8 @@ TrackingWindow::TrackingWindow( wxWindow *pParent, MainFrame *pMf, wxWindowID id

TrackingWindow::TrackingWindow( wxWindow *pParent, MainFrame *pMf, wxWindowID id, const wxPoint &pos, const wxSize &size, int hardi)
: wxScrolledWindow( pParent, id, pos, size, wxBORDER_NONE, _T("HARDI RTT Canvas") ),
m_isGMSelected( false ),
m_isWMSelected( false ),
m_pMainFrame( pMf )
{
SetBackgroundColour( *wxLIGHT_GREY );
Expand Down Expand Up @@ -154,14 +156,28 @@ TrackingWindow::TrackingWindow( wxWindow *pParent, MainFrame *pMf, wxWindowID id
pBoxRow3->Add( m_pToggleSeedMap, 0, wxALIGN_CENTER | wxALL, 1);
m_pTrackingSizer->Add( pBoxRow3, 0, wxFIXED_MINSIZE | wxALL, 2 );

m_pBtnSelectMap = new wxButton( this, wxID_ANY,wxT("Mask not selected"), wxPoint(30,90), wxSize(230, -1) );
m_pBtnSelectMap = new wxButton( this, wxID_ANY,wxT("Mask (e.g. WM, FA, etc) not selected"), wxPoint(30,90), wxSize(230, -1) );
Connect( m_pBtnSelectMap->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(TrackingWindow::OnSelectMask) );
m_pBtnSelectMap->SetBackgroundColour(wxColour( 255, 147, 147 ));

wxBoxSizer *pBoxRow4 = new wxBoxSizer( wxHORIZONTAL );
pBoxRow4->Add( m_pBtnSelectMap, 0, wxALIGN_CENTER | wxALL, 1 );
m_pTrackingSizer->Add( pBoxRow4, 0, wxFIXED_MINSIZE | wxALL, 2 );

m_pBtnSelectGM = new wxButton( this, wxID_ANY,wxT("GM mask not selected"), wxPoint(30,90), wxSize(230, -1) );
Connect( m_pBtnSelectGM->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(TrackingWindow::OnSelectGM) );

wxBoxSizer *pBoxRowGM = new wxBoxSizer( wxHORIZONTAL );
pBoxRowGM->Add( m_pBtnSelectGM, 0, wxALIGN_CENTER | wxALL, 1 );
m_pTrackingSizer->Add( pBoxRowGM, 0, wxFIXED_MINSIZE | wxALL, 2 );

m_pBtnSelectExclusion = new wxButton( this, wxID_ANY,wxT("Exclusion map (CSF) not selected"), wxDefaultPosition, wxSize(230, -1) );
Connect( m_pBtnSelectExclusion->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(TrackingWindow::OnSelectExclusion) );

wxBoxSizer *pBoxRowEx = new wxBoxSizer( wxHORIZONTAL );
pBoxRowEx->Add( m_pBtnSelectExclusion, 0, wxALIGN_CENTER | wxALL, 1 );
m_pTrackingSizer->Add( pBoxRowEx, 0, wxFIXED_MINSIZE | wxALL, 2 );


wxBoxSizer *pBoxFlips = new wxBoxSizer( wxHORIZONTAL );
pBoxFlips->Add(new wxStaticText( this, wxID_ANY, wxT( "Initialize" ), wxDefaultPosition, wxSize(70, -1), wxALIGN_CENTER ), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL | wxALL, 1 );
Expand All @@ -177,15 +193,8 @@ TrackingWindow::TrackingWindow( wxWindow *pParent, MainFrame *pMf, wxWindowID id
pBoxFlips->Add( m_pToggleTrackZ, 0, wxALIGN_LEFT | wxALL, 1);
m_pTrackingSizer->Add( pBoxFlips,0, wxFIXED_MINSIZE | wxEXPAND, 0 );

m_pBtnSelectExclusion = new wxButton( this, wxID_ANY,wxT("Exclusion map not selected"), wxDefaultPosition, wxSize(230, -1) );
Connect( m_pBtnSelectExclusion->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(TrackingWindow::OnSelectExclusion) );

wxBoxSizer *pBoxRowEx = new wxBoxSizer( wxHORIZONTAL );
pBoxRowEx->Add( m_pBtnSelectExclusion, 0, wxALIGN_CENTER | wxALL, 1 );
m_pTrackingSizer->Add( pBoxRowEx, 0, wxFIXED_MINSIZE | wxALL, 2 );

m_pTextFA = new wxStaticText( this, wxID_ANY, wxT("Min Mask"), wxPoint(0,120), wxSize(70, -1), wxALIGN_CENTER );
m_pSliderFA = new MySlider( this, wxID_ANY, 0, 1, 50, wxPoint(60,120), wxSize(100, -1), wxSL_HORIZONTAL | wxSL_AUTOTICKS );
m_pSliderFA = new MySlider( this, wxID_ANY, 0, 1, 100, wxPoint(60,120), wxSize(100, -1), wxSL_HORIZONTAL | wxSL_AUTOTICKS );
m_pSliderFA->SetValue( 20 );
Connect( m_pSliderFA->GetId(), wxEVT_COMMAND_SLIDER_UPDATED, wxCommandEventHandler(TrackingWindow::OnSliderFAMoved) );
m_pTxtFABox = new wxTextCtrl( this, wxID_ANY, wxT("0.20"), wxPoint(190,120), wxSize(55, -1), wxTE_CENTRE | wxTE_READONLY );
Expand Down Expand Up @@ -235,11 +244,23 @@ TrackingWindow::TrackingWindow( wxWindow *pParent, MainFrame *pMf, wxWindowID id
pBoxRow8->Add( m_pTxtPunctureBox, 0, wxALIGN_LEFT | wxALL, 1);
m_pTrackingSizer->Add( pBoxRow8, 0, wxFIXED_MINSIZE | wxEXPAND, 0 );

m_pTextGMStep = new wxStaticText( this, wxID_ANY, wxT("GM steps"), wxPoint(0,180), wxSize(70, -1), wxALIGN_CENTER );
m_pSliderGMStep = new MySlider( this, wxID_ANY, 0, 0, 300, wxPoint(60,180), wxSize(100, -1), wxSL_HORIZONTAL | wxSL_AUTOTICKS );
m_pSliderGMStep->SetValue( 15 );
Connect( m_pSliderGMStep->GetId(), wxEVT_COMMAND_SLIDER_UPDATED, wxCommandEventHandler(TrackingWindow::OnSliderGMStepMoved) );
m_pTxtGMStepBox = new wxTextCtrl( this, wxID_ANY, wxT("15"), wxPoint(190,180), wxSize(55, -1), wxTE_CENTRE | wxTE_READONLY );

wxBoxSizer *pBoxRowGMstep = new wxBoxSizer( wxHORIZONTAL );
pBoxRowGMstep->Add( m_pTextGMStep, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL | wxALL, 1 );
pBoxRowGMstep->Add( m_pSliderGMStep, 0, wxALIGN_LEFT | wxEXPAND | wxALL, 1);
pBoxRowGMstep->Add( m_pTxtGMStepBox, 0, wxALIGN_LEFT | wxALL, 1);
m_pTrackingSizer->Add( pBoxRowGMstep, 0, wxFIXED_MINSIZE | wxEXPAND, 0 );

m_pTextMinLength = new wxStaticText( this, wxID_ANY, wxT("Min length"), wxPoint(0,240), wxSize(70, -1), wxALIGN_CENTER );
m_pSliderMinLength = new MySlider( this, wxID_ANY, 0, 0, 400, wxPoint(60,240), wxSize(100, -1), wxSL_HORIZONTAL | wxSL_AUTOTICKS );
m_pSliderMinLength->SetValue( 90 );
m_pSliderMinLength->SetValue( 60 );
Connect( m_pSliderMinLength->GetId(), wxEVT_COMMAND_SLIDER_UPDATED, wxCommandEventHandler(TrackingWindow::OnSliderMinLengthMoved) );
m_pTxtMinLengthBox = new wxTextCtrl( this, wxID_ANY, wxT("90 mm"), wxPoint(190,240), wxSize(55, -1), wxTE_CENTRE | wxTE_READONLY );
m_pTxtMinLengthBox = new wxTextCtrl( this, wxID_ANY, wxT("60 mm"), wxPoint(190,240), wxSize(55, -1), wxTE_CENTRE | wxTE_READONLY );

wxBoxSizer *pBoxRow9 = new wxBoxSizer( wxHORIZONTAL );
pBoxRow9->Add( m_pTextMinLength, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL | wxALL, 1 );
Expand Down Expand Up @@ -407,6 +428,14 @@ void TrackingWindow::OnSliderStepMoved( wxCommandEvent& WXUNUSED(event) )
RTTrackingHelper::getInstance()->setRTTDirty( true );
}

void TrackingWindow::OnSliderGMStepMoved( wxCommandEvent& WXUNUSED(event) )
{
int sliderValue = m_pSliderGMStep->GetValue();
m_pTxtGMStepBox->SetValue(wxString::Format( wxT( "%i"), sliderValue) );
m_pMainFrame->m_pMainGL->m_pRealTimeFibers->setGMStep( sliderValue );
RTTrackingHelper::getInstance()->setRTTDirty( true );
}

void TrackingWindow::OnSliderPunctureMoved( wxCommandEvent& WXUNUSED(event) )
{
float sliderValue = m_pSliderPuncture->GetValue() / 100.0f;
Expand Down Expand Up @@ -658,6 +687,20 @@ void TrackingWindow::OnInitZ( wxCommandEvent& event )
RTTrackingHelper::getInstance()->setRTTDirty( true );
}

void TrackingWindow::OnSelectGM( wxCommandEvent& WXUNUSED(event) )
{
//Select map for threshold seeding
long item = m_pMainFrame->getCurrentListIndex();
Anatomy* pMap = (Anatomy*)DatasetManager::getInstance()->getDataset (MyApp::frame->m_pListCtrl->GetItem( item ));

if( pMap != NULL && pMap->getBands() == 1 )
{
m_pBtnSelectGM->SetLabel( pMap->getName() );
m_pMainFrame->m_pMainGL->m_pRealTimeFibers->setGMInfo( (Anatomy *)DatasetManager::getInstance()->getDataset( m_pMainFrame->m_pListCtrl->GetItem( item ) ) );
m_isGMSelected = true;
}
}

void TrackingWindow::OnSelectExclusion( wxCommandEvent& WXUNUSED(event) )
{
//Select map for threshold seeding
Expand Down
9 changes: 9 additions & 0 deletions src/gui/TrackingWindow.h
Expand Up @@ -40,12 +40,14 @@ class TrackingWindow: public wxScrolledWindow
void OnClearBox ( wxTreeEvent& event );
void OnSliderFAMoved ( wxCommandEvent& event );
void OnSliderAngleMoved ( wxCommandEvent& event );
void OnSliderGMStepMoved ( wxCommandEvent& event );
void OnSliderStepMoved ( wxCommandEvent& event );
void OnSelectFileDTI ( wxCommandEvent& event );
void OnSelectFileHARDI ( wxCommandEvent& event );
void OnRandomSeeding ( wxCommandEvent& event );
void OnShellSeeding ( wxCommandEvent& event );
void OnSelectMask ( wxCommandEvent& event );
void OnSelectGM ( wxCommandEvent& event );
void OnInitX ( wxCommandEvent& event );
void OnInitY ( wxCommandEvent& event );
void OnInitZ ( wxCommandEvent& event );
Expand Down Expand Up @@ -85,12 +87,16 @@ class TrackingWindow: public wxScrolledWindow
wxSlider *m_pSliderPuncture;
wxStaticText *m_pTextPuncture;
wxTextCtrl *m_pTxtPunctureBox;
wxSlider *m_pSliderGMStep;
wxStaticText *m_pTextGMStep;
wxTextCtrl *m_pTxtGMStepBox;
wxButton *m_pBtnSelectFile;
wxButton *m_pBtnSelectShell;
wxToggleButton *m_pToggleShell;
wxButton *m_pBtnSelectSeed;
wxToggleButton *m_pToggleSeedMap;
wxButton *m_pBtnSelectMap;
wxButton *m_pBtnSelectGM;
wxToggleButton *m_pToggleTrackX;
wxToggleButton *m_pToggleTrackY;
wxToggleButton *m_pToggleTrackZ;
Expand All @@ -115,6 +121,9 @@ class TrackingWindow: public wxScrolledWindow
wxBitmapButton *m_pBtnStop;
wxImage m_bmpPause;
wxImage m_bmpPlay;

bool m_isGMSelected;
bool m_isWMSelected;



Expand Down

0 comments on commit 5c30004

Please sign in to comment.