int NoiseAdjustGadget::process_config(ACE_Message_Block* mb) { if ( !workingDirectory.value().empty() ) { noise_dependency_folder_ = workingDirectory.value(); } else { #ifdef _WIN32 noise_dependency_folder_ = std::string("c:\\temp\\gadgetron\\"); #else noise_dependency_folder_ = std::string("/tmp/gadgetron/"); #endif // _WIN32 } GDEBUG("Folder to store noise dependencies is %s\n", noise_dependency_folder_.c_str()); if ( !noise_dependency_prefix.value().empty() ) noise_dependency_prefix_ = noise_dependency_prefix.value(); perform_noise_adjust_ = perform_noise_adjust.value(); GDEBUG("NoiseAdjustGadget::perform_noise_adjust_ is %d\n", perform_noise_adjust_); pass_nonconformant_data_ = pass_nonconformant_data.value(); GDEBUG("NoiseAdjustGadget::pass_nonconformant_data_ is %d\n", pass_nonconformant_data_); noise_dwell_time_us_preset_ = noise_dwell_time_us_preset.value(); ISMRMRD::deserialize(mb->rd_ptr(),current_ismrmrd_header_); if ( current_ismrmrd_header_.acquisitionSystemInformation ) { receiver_noise_bandwidth_ = (float)(current_ismrmrd_header_.acquisitionSystemInformation->relativeReceiverNoiseBandwidth ? *current_ismrmrd_header_.acquisitionSystemInformation->relativeReceiverNoiseBandwidth : 0.793f); GDEBUG("receiver_noise_bandwidth_ is %f\n", receiver_noise_bandwidth_); } // find the measurementID of this scan if ( current_ismrmrd_header_.measurementInformation ) { if ( current_ismrmrd_header_.measurementInformation->measurementID ) { measurement_id_ = *current_ismrmrd_header_.measurementInformation->measurementID; GDEBUG("Measurement ID is %s\n", measurement_id_.c_str()); } // find the noise depencies if any if ( current_ismrmrd_header_.measurementInformation->measurementDependency.size() > 0 ) { measurement_id_of_noise_dependency_.clear(); std::vector<ISMRMRD::MeasurementDependency>::const_iterator iter = current_ismrmrd_header_.measurementInformation->measurementDependency.begin(); for ( ; iter!= current_ismrmrd_header_.measurementInformation->measurementDependency.end(); iter++ ) { std::string dependencyType = iter->dependencyType; std::string dependencyID = iter->measurementID; GDEBUG("Found dependency measurement : %s with ID %s\n", dependencyType.c_str(), dependencyID.c_str()); if ( dependencyType=="Noise" || dependencyType=="noise" ) { measurement_id_of_noise_dependency_ = dependencyID; } } if ( !measurement_id_of_noise_dependency_.empty() ) { GDEBUG("Measurement ID of noise dependency is %s\n", measurement_id_of_noise_dependency_.c_str()); full_name_stored_noise_dependency_ = this->generateNoiseDependencyFilename(generateMeasurementIdOfNoiseDependency(measurement_id_of_noise_dependency_)); GDEBUG("Stored noise dependency is %s\n", full_name_stored_noise_dependency_.c_str()); // try to load the precomputed noise prewhitener if ( !this->loadNoiseCovariance() ) { GDEBUG("Stored noise dependency is NOT found : %s\n", full_name_stored_noise_dependency_.c_str()); noiseCovarianceLoaded_ = false; noise_dwell_time_us_ = -1; noise_covariance_matrixf_.clear(); } else { GDEBUG("Stored noise dependency is found : %s\n", full_name_stored_noise_dependency_.c_str()); GDEBUG("Stored noise dwell time in us is %f\n", noise_dwell_time_us_); GDEBUG("Stored noise channel number is %d\n", noise_covariance_matrixf_.get_size(0)); if (noise_ismrmrd_header_.acquisitionSystemInformation) { if (noise_ismrmrd_header_.acquisitionSystemInformation->coilLabel.size() != current_ismrmrd_header_.acquisitionSystemInformation->coilLabel.size()) { GDEBUG("Length of coil label arrays do not match"); return GADGET_FAIL; } bool labels_match = true; for (size_t l = 0; l < noise_ismrmrd_header_.acquisitionSystemInformation->coilLabel.size(); l++) { if (noise_ismrmrd_header_.acquisitionSystemInformation->coilLabel[l].coilNumber != current_ismrmrd_header_.acquisitionSystemInformation->coilLabel[l].coilNumber) { labels_match = false; break; } if (noise_ismrmrd_header_.acquisitionSystemInformation->coilLabel[l].coilName != current_ismrmrd_header_.acquisitionSystemInformation->coilLabel[l].coilName) { labels_match = false; break; } } if (!labels_match) { GDEBUG("Noise and measurement coil labels don't match\n"); return GADGET_FAIL; } } else if (current_ismrmrd_header_.acquisitionSystemInformation) { GDEBUG("Noise ismrmrd header does not have acquisition system information but current header does\n"); return GADGET_FAIL; } noiseCovarianceLoaded_ = true; number_of_noise_samples_ = 1; //When we load the matrix, it is already scaled. } } } } //Let's figure out if some channels are "scale_only" std::string uncomb_str = scale_only_channels_by_name.value(); std::vector<std::string> uncomb; if (uncomb_str.size()) { GDEBUG("SCALE ONLY: %s\n", uncomb_str.c_str()); boost::split(uncomb, uncomb_str, boost::is_any_of(",")); for (unsigned int i = 0; i < uncomb.size(); i++) { std::string ch = boost::algorithm::trim_copy(uncomb[i]); if (current_ismrmrd_header_.acquisitionSystemInformation) { for (size_t i = 0; i < current_ismrmrd_header_.acquisitionSystemInformation->coilLabel.size(); i++) { if (ch == current_ismrmrd_header_.acquisitionSystemInformation->coilLabel[i].coilName) { scale_only_channels_.push_back(i);//This assumes that the channels are sorted in the header break; } } } } } #ifdef USE_OMP omp_set_num_threads(1); #endif // USE_OMP return GADGET_OK; }
int NoiseCovariancePlottingGadget::process_config(ACE_Message_Block* mb) { if (!workingDirectory.value().empty()) { noise_dependency_folder_ = workingDirectory.value(); } else { #ifdef _WIN32 noise_dependency_folder_ = std::string("c:\\temp\\gadgetron\\"); #else noise_dependency_folder_ = std::string("/tmp/gadgetron/"); #endif // _WIN32 } GDEBUG("Folder to store noise dependencies is %s\n", noise_dependency_folder_.c_str()); if (!noise_dependency_prefix.value().empty()) noise_dependency_prefix_ = noise_dependency_prefix.value(); ISMRMRD::deserialize(mb->rd_ptr(), current_ismrmrd_header_); // find the measurementID of this scan if (current_ismrmrd_header_.measurementInformation) { if (current_ismrmrd_header_.measurementInformation->measurementID) { measurement_id_ = *current_ismrmrd_header_.measurementInformation->measurementID; GDEBUG("Measurement ID is %s\n", measurement_id_.c_str()); } // find the noise depencies if any if (current_ismrmrd_header_.measurementInformation->measurementDependency.size() > 0) { measurement_id_of_noise_dependency_.clear(); std::vector<ISMRMRD::MeasurementDependency>::const_iterator iter = current_ismrmrd_header_.measurementInformation->measurementDependency.begin(); for (; iter != current_ismrmrd_header_.measurementInformation->measurementDependency.end(); iter++) { std::string dependencyType = iter->dependencyType; std::string dependencyID = iter->measurementID; GDEBUG("Found dependency measurement : %s with ID %s\n", dependencyType.c_str(), dependencyID.c_str()); if (dependencyType == "Noise" || dependencyType == "noise") { measurement_id_of_noise_dependency_ = dependencyID; } } if (!measurement_id_of_noise_dependency_.empty()) { GDEBUG("Measurement ID of noise dependency is %s\n", measurement_id_of_noise_dependency_.c_str()); full_name_stored_noise_dependency_ = this->generateNoiseDependencyFilename(generateMeasurementIdOfNoiseDependency(measurement_id_of_noise_dependency_)); GDEBUG("Stored noise dependency is %s\n", full_name_stored_noise_dependency_.c_str()); } } else { full_name_stored_noise_dependency_ = this->generateNoiseDependencyFilename(measurement_id_); GDEBUG("Stored noise dependency is %s\n", full_name_stored_noise_dependency_.c_str()); } } return GADGET_OK; }