12 #ifndef mitkForest_cpp 13 #define mitkForest_cpp 24 #include <vtkSmartPointer.h> 34 int main(
int argc,
char* argv[])
36 MITK_INFO <<
"Starting MITK_Forest Mini-App";
45 for (
int i = 0; i < argc; ++i )
50 if (argv[i][0] ==
'+')
60 catch (
const std::exception &e )
68 std::string input = argv[i];
70 ss << input << std::endl;
80 int currentRun = allConfig.
IntValue(
"General",
"Run",0);
82 std::string forestPath = allConfig.
Value(
"General",
"Forest Path");
83 std::string trainingCollectionPath = allConfig.
Value(
"General",
"Patient Collection");
84 std::string testCollectionPath = allConfig.
Value(
"General",
"Patient Test Collection", trainingCollectionPath);
89 std::vector<std::string> trainPatients = allConfig.
Vector(
"Training Group",currentRun);
90 std::vector<std::string> testPatients = allConfig.
Vector(
"Test Group",currentRun);
91 std::vector<std::string> modalities = allConfig.
Vector(
"Modalities", 0);
92 std::vector<std::string> outputFilter = allConfig.
Vector(
"Output Filter", 0);
93 std::string trainMask = allConfig.
Value(
"Data",
"Training Mask");
94 std::string completeTrainMask = allConfig.
Value(
"Data",
"Complete Training Mask");
95 std::string testMask = allConfig.
Value(
"Data",
"Test Mask");
96 std::string resultMask = allConfig.
Value(
"Data",
"Result Mask");
97 std::string resultProb = allConfig.
Value(
"Data",
"Result Propability");
98 std::string outputFolder = allConfig.
Value(
"General",
"Output Folder");
100 std::string writeDataFilePath = allConfig.
Value(
"Forest",
"File to write data to");
105 int testSingleDataset = allConfig.
IntValue(
"Data",
"Test Single Dataset",0);
106 std::string singleDatasetName = allConfig.
Value(
"Data",
"Single Dataset Name",
"none");
107 std::vector<std::string> forestVector = allConfig.
Vector(
"Forests", 0);
112 std::string statisticFilePath = allConfig.
Value(
"Evaluation",
"Statistic output file");
113 std::string statisticShortFilePath = allConfig.
Value(
"Evaluation",
"Statistic short output file");
114 std::string statisticShortFileLabel = allConfig.
Value(
"Evaluation",
"Index for short file");
115 std::string statisticGoldStandard = allConfig.
Value(
"Evaluation",
"Gold Standard Name",
"GTV");
117 std::vector<std::string> labelGroupA = allConfig.
Vector(
"LabelsA",0);
118 std::vector<std::string> labelGroupB = allConfig.
Vector(
"LabelsB",0);
121 std::ofstream timingFile;
122 timingFile.open((statisticFilePath +
".timing").c_str(), std::ios::app);
123 timingFile << statisticShortFileLabel <<
";";
124 std::time_t lastTimePoint;
125 time(&lastTimePoint);
130 std::vector<std::string> usedModalities;
131 for (std::size_t i = 0; i < modalities.size(); ++i)
133 usedModalities.push_back(modalities[i]);
135 usedModalities.push_back(trainMask);
136 usedModalities.push_back(completeTrainMask);
137 usedModalities.push_back(testMask);
138 usedModalities.push_back(statisticGoldStandard);
145 if (testSingleDataset > 0)
147 testPatients.clear();
148 testPatients.push_back(singleDatasetName);
156 double seconds = std::difftime(now, lastTimePoint);
157 timingFile << seconds <<
";";
158 time(&lastTimePoint);
165 for (std::size_t i = 0; i < forestVector.size(); ++i)
167 forest = mitk::IOUtil::Load<mitk::VigraRandomForestClassifier>(forestVector[i]);
170 seconds = std::difftime(now, lastTimePoint);
171 MITK_INFO <<
"Duration for Training: " << seconds;
172 timingFile << seconds <<
";";
173 time(&lastTimePoint);
176 auto testDataNewY = forest->Predict(testDataX);
177 auto testDataNewProb = forest->GetPointWiseProbabilities();
179 auto maxClassValue = testDataNewProb.cols();
180 std::vector<std::string> names;
181 for (
int j = 0; j < maxClassValue; ++j)
183 std::string name = resultProb + std::to_string(j);
184 names.push_back(name);
192 seconds = std::difftime(now, lastTimePoint);
193 timingFile << seconds <<
";";
194 time(&lastTimePoint);
201 outputFolder +
"/result_collection.xml",
208 std::ofstream statisticFile;
209 statisticFile.open(statisticFilePath.c_str(), std::ios::app);
210 std::ofstream sstatisticFile;
211 sstatisticFile.open(statisticShortFilePath.c_str(), std::ios::app);
224 stat.
Print(statisticFile, sstatisticFile,
true, statisticShortFileLabel +
"_"+std::to_string(i));
225 statisticFile.close();
228 seconds = std::difftime(now, lastTimePoint);
229 timingFile << seconds << std::endl;
230 time(&lastTimePoint);
234 catch (std::string s)
DataCollection::Pointer LoadCollection(const std::string &xmlFileName)
Build up a mitk::DataCollection from a XML resource.
void ClearDataElementIds()
void SetDataItemNames(std::vector< std::string > itemNames)
void Print(std::ostream &out, std::ostream &sout=std::cout, bool withHeader=false, std::string label="None")
void SetTestName(std::string name)
void SetTestValueToIndexMapper(const ValueToIndexMapper *mapper)
int main(int argc, char *argv[])
void SetGroundTruthValueToIndexMapper(const ValueToIndexMapper *mapper)
int IntValue(const std::string §ion, const std::string &entry) const
void SetMaskName(std::string name)
void SetGoldName(std::string name)
static void MatrixToDC3d(const Eigen::MatrixXd &matrix, mitk::DataCollection::Pointer dc, const std::vector< std::string > &names, std::string mask)
void SetCollection(DataCollection::Pointer collection)
void SetClassCount(vcl_size_t count)
static bool ExportCollectionToFolder(DataCollection *dataCollection, std::string xmlFile, std::vector< std::string > filter)
ExportCollectionToFolder.
static Eigen::MatrixXd DC3dDToMatrixXd(mitk::DataCollection::Pointer dc, std::string names, std::string mask)
void ReadStream(std::istream &stream)
void AddDataElementIds(std::vector< std::string > dataElemetIds)
std::vector< std::string > Vector(std::string const §ion, unsigned int index) const
static const char * replace[]
This is a dictionary to replace long names of classes, modules, etc. to shorter versions in the conso...
void ReadFile(std::string const &filePath)
std::string Value(std::string const §ion, std::string const &entry) const