]> Creatis software - clitk.git/blobdiff - segmentation/clitkExtractLymphStationsFilter.txx
add memory usage info in panel (need libstatgrab)
[clitk.git] / segmentation / clitkExtractLymphStationsFilter.txx
index 7b2fd2ff91346aa16e10e96de0844af056ff999a..ea9e2b678c01fe40d75fffc8d2b009f3ada6d550 100644 (file)
@@ -52,6 +52,10 @@ ExtractLymphStationsFilter():
   SetBackgroundValue(0);
   SetForegroundValue(1);
 
+  // Default values
+  ExtractStation_8_SetDefaultValues();
+  ExtractStation_3P_SetDefaultValues();
+
   // Station 7
   SetFuzzyThreshold(0.5);
   SetStation7Filename("station7.mhd");
@@ -59,17 +63,6 @@ ExtractLymphStationsFilter():
 //--------------------------------------------------------------------
 
 
-//--------------------------------------------------------------------
-template <class TImageType>
-template <class ArgsInfoType>
-void 
-clitk::ExtractLymphStationsFilter<TImageType>::
-SetArgsInfo(ArgsInfoType & argsinfo) {
-  DD("SetArgsInfo");
-}
-//--------------------------------------------------------------------
-
-
 //--------------------------------------------------------------------
 template <class TImageType>
 void 
@@ -78,28 +71,46 @@ GenerateOutputInformation() {
   // Get inputs
   LoadAFDB();
   m_Input = dynamic_cast<const ImageType*>(itk::ProcessObject::GetInput(0));
-  m_Support = GetAFDB()->template GetImage <MaskImageType>("mediastinum");
-  
-  //
-  typedef clitk::BooleanOperatorLabelImageFilter<MaskImageType> BFilter;
-  BFilter::Pointer merge = BFilter::New();  
+  m_Mediastinum = GetAFDB()->template GetImage <MaskImageType>("Mediastinum");
+
+  // Extract Station8
+  StartNewStep("Station 8");
+  StartSubStep(); 
+  ExtractStation_8();
+  StopSubStep();
+
+  // Extract Station3P
+  StartNewStep("Station 3P");
+  StartSubStep(); 
+  ExtractStation_3P();
+  StopSubStep();
 
-  // Extract Station7
-  ExtractStation_7();
-  m_Output = m_Station7;
+  if (0) { // temporary suppress
+    // Extract Station7
+    StartNewStep("Station 7");
+    StartSubStep();
+    ExtractStation_7();
+    StopSubStep();
 
-  // Extract Station4RL
-  ExtractStation_4RL();
+    // Extract Station4RL
+    StartNewStep("Station 4RL");
+    StartSubStep();
+    //ExtractStation_4RL();
+    StopSubStep();
+  }
 
-  writeImage<MaskImageType>(m_Station4RL, "s4rl.mhd");
+
+  //
+  //  typedef clitk::BooleanOperatorLabelImageFilter<MaskImageType> BFilter;
+  //BFilter::Pointer merge = BFilter::New();  
   // writeImage<MaskImageType>(m_Output, "ouput.mhd");
   //writeImage<MaskImageType>(m_Working_Support, "ws.mhd");
   /*merge->SetInput1(m_Station7);
-  merge->SetInput2(m_Station4RL); // support
-  merge->SetOperationType(BFilter::AndNot); CHANGE OPERATOR
-  merge->SetForegroundValue(4);
-  merge->Update();
-  m_Output = merge->GetOutput();
+    merge->SetInput2(m_Station4RL); // support
+    merge->SetOperationType(BFilter::AndNot); CHANGE OPERATOR
+    merge->SetForegroundValue(4);
+    merge->Update();
+    m_Output = merge->GetOutput();
   */
 }
 //--------------------------------------------------------------------
@@ -110,7 +121,7 @@ template <class TImageType>
 void 
 clitk::ExtractLymphStationsFilter<TImageType>::
 GenerateInputRequestedRegion() {
-  DD("GenerateInputRequestedRegion (nothing?)");
+  //DD("GenerateInputRequestedRegion (nothing?)");
 }
 //--------------------------------------------------------------------
 
@@ -123,17 +134,124 @@ GenerateData() {
   DD("GenerateData, graft output");
 
   // Final Step -> graft output (if SetNthOutput => redo)
-  this->GraftOutput(m_Output);
+  this->GraftOutput(m_ListOfStations["8"]);
 }
 //--------------------------------------------------------------------
   
 
+//--------------------------------------------------------------------
+template <class TImageType>
+bool 
+clitk::ExtractLymphStationsFilter<TImageType>::
+CheckForStation(std::string station) 
+{
+  // Compute Station name
+  std::string s = "Station"+station;
+  
+
+  // Check if station already exist in DB
+  bool found = false;
+  if (GetAFDB()->TagExist(s)) {
+    m_ListOfStations[station] = GetAFDB()->template GetImage<MaskImageType>(s);
+    found = true;
+  }
+
+  // Define the starting support 
+  if (found && GetComputeStation(station)) {
+    std::cout << "Station " << station << " already exists, but re-computation forced." << std::endl;
+  }
+  if (!found || GetComputeStation(station)) {
+    m_Working_Support = m_Mediastinum = GetAFDB()->template GetImage<MaskImageType>("Mediastinum", true);
+    return true;
+  }
+  else {
+    std::cout << "Station " << station << " found. I used it" << std::endl;
+    return false;
+  }
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+template <class TImageType>
+bool
+clitk::ExtractLymphStationsFilter<TImageType>::
+GetComputeStation(std::string station) 
+{
+  return (m_ComputeStationMap.find(station) != m_ComputeStationMap.end());
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+template <class TImageType>
+void
+clitk::ExtractLymphStationsFilter<TImageType>::
+AddComputeStation(std::string station) 
+{
+  m_ComputeStationMap[station] = true;
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+template <class TImageType>
+void 
+clitk::ExtractLymphStationsFilter<TImageType>::
+ExtractStation_8() 
+{
+  if (CheckForStation("8")) {
+    ExtractStation_8_SI_Limits();
+    ExtractStation_8_Post_Limits();
+    ExtractStation_8_Ant_Sup_Limits();
+    ExtractStation_8_Ant_Inf_Limits();
+    ExtractStation_8_LR_1_Limits();
+    ExtractStation_8_LR_2_Limits();
+    ExtractStation_8_LR_Limits();
+    ExtractStation_8_Ant_Injected_Limits();
+    ExtractStation_8_Single_CCL_Limits();
+    ExtractStation_8_Remove_Structures();
+    // Store image filenames into AFDB 
+    writeImage<MaskImageType>(m_ListOfStations["8"], "seg/Station8.mhd");
+    GetAFDB()->SetImageFilename("Station8", "seg/Station8.mhd");  
+    WriteAFDB();
+  }
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+template <class TImageType>
+void 
+clitk::ExtractLymphStationsFilter<TImageType>::
+ExtractStation_3P()
+{
+  if (CheckForStation("3P")) {
+    ExtractStation_3P_SI_Limits();
+    ExtractStation_3P_Remove_Structures();
+    ExtractStation_3P_Ant_Limits();
+    ExtractStation_3P_Post_Limits();
+    ExtractStation_3P_LR_sup_Limits();
+    ExtractStation_3P_LR_inf_Limits();
+    // Store image filenames into AFDB 
+    writeImage<MaskImageType>(m_ListOfStations["3P"], "seg/Station3P.mhd");
+    GetAFDB()->SetImageFilename("Station3P", "seg/Station3P.mhd"); 
+    WriteAFDB(); 
+  }
+}
+//--------------------------------------------------------------------
+
+
 //--------------------------------------------------------------------
 template <class TImageType>
 void 
 clitk::ExtractLymphStationsFilter<TImageType>::
 ExtractStation_7() {
-  DD("ExtractStation_7");
+  if (m_ListOfStations["7"]) {
+    DD("Station 7 support already exist -> use it");
+    m_Working_Support = m_ListOfStations["7"];
+  }
+  else m_Working_Support = m_Mediastinum;
   ExtractStation_7_SI_Limits();
   ExtractStation_7_RL_Limits();
   ExtractStation_7_Posterior_Limits();
@@ -146,19 +264,18 @@ template <class TImageType>
 void 
 clitk::ExtractLymphStationsFilter<TImageType>::
 ExtractStation_4RL() {
-  DD("ExtractStation_4RL");
-  writeImage<MaskImageType>(m_Support, "essai.mhd"); // OK
-
   /*
     WARNING ONLY 4R FIRST !!! (not same inf limits)
-   */
-    
+  */    
   ExtractStation_4RL_SI_Limits();
   ExtractStation_4RL_LR_Limits();
-
+  ExtractStation_4RL_AP_Limits();
 }
 //--------------------------------------------------------------------
 
 
+//--------------------------------------------------------------------
+
+
 
 #endif //#define CLITKBOOLEANOPERATORLABELIMAGEFILTER_TXX