diff --git a/pipelines/X-Band.json b/pipelines/X-Band.json index a568f9f32..31525fce2 100644 --- a/pipelines/X-Band.json +++ b/pipelines/X-Band.json @@ -97,8 +97,11 @@ } }, "products": { + "fengyun_satid": { + "scid_hint": "56" + }, "fengyun_mersill": { - "correct_bowtie": "1" + "correct_bowtie": "0" }, "fengyun_mwhs2": {} } diff --git a/src-core/module.cpp b/src-core/module.cpp index ba0ca778c..c28bc9491 100644 --- a/src-core/module.cpp +++ b/src-core/module.cpp @@ -88,11 +88,8 @@ SATDUMP_DLL std::map>>>>>> fy-3e #include "modules/aqua/module_aqua_db_decoder.h" #include "modules/aqua/instruments/airs/module_aqua_airs.h" @@ -200,11 +197,8 @@ void registerModules() REGISTER_MODULE(fengyun::mwri::FengyunMWRIDecoderModule); REGISTER_MODULE(fengyun::mwts::FengyunMWTSDecoderModule); REGISTER_MODULE(fengyun::mwhs2::FengyunMWHS2DecoderModule); -<<<<<<< HEAD REGISTER_MODULE(fengyun::satid::FengYunSatIDModule); -======= REGISTER_MODULE(fengyun::mersill::FengyunMERSILLDecoderModule); ->>>>>>> fy-3e // Aqua REGISTER_MODULE(aqua::AquaDBDecoderModule); diff --git a/src-core/modules/fengyun/fengyun3.h b/src-core/modules/fengyun/fengyun3.h index bf99c4017..98d00a2ca 100644 --- a/src-core/modules/fengyun/fengyun3.h +++ b/src-core/modules/fengyun/fengyun3.h @@ -4,11 +4,13 @@ #define FY3_B_SCID 50 #define FY3_C_SCID 51 #define FY3_D_SCID 52 +#define FY3_E_SCID 56 #define FY3_A_NORAD 32958 #define FY3_B_NORAD 37214 #define FY3_C_NORAD 39260 #define FY3_D_NORAD 43010 +#define FY3_E_NORAD 49008 #define FY3_ORBIT_HEIGHT 842 diff --git a/src-core/modules/fengyun/instruments/mersill/mersi_1000m_reader.cpp b/src-core/modules/fengyun/instruments/mersill/mersi_1000m_reader.cpp index 1f1f6be35..9fd24a539 100644 --- a/src-core/modules/fengyun/instruments/mersill/mersi_1000m_reader.cpp +++ b/src-core/modules/fengyun/instruments/mersill/mersi_1000m_reader.cpp @@ -6,7 +6,7 @@ namespace fengyun { MERSI1000Reader::MERSI1000Reader() { - imageBuffer.create(20000 * 2048); + imageBuffer.create(20000 * 1536); mersiLineBuffer = new unsigned short[40960]; frames = 0; } @@ -19,10 +19,10 @@ namespace fengyun void MERSI1000Reader::pushFrame(std::vector &data) { - int pos = 63; // MERSI-2 Data position, found through a bit viewer + int pos = 96 + 54; // MERSI-LL Data position, found through a bit viewer // Convert into 12-bits values - for (int i = 0; i < 2048; i += 2) + for (int i = 0; i < 1536; i += 2) { byteBufShift[0] = data[pos + 0] << 3 | data[pos + 1] >> 5; byteBufShift[1] = data[pos + 1] << 3 | data[pos + 2] >> 5; @@ -34,23 +34,23 @@ namespace fengyun } // Load into our image buffer - for (int i = 0; i < 2048; i++) + for (int i = 0; i < 1536; i++) { uint16_t pixel = mersiLineBuffer[i]; - imageBuffer[frames * 2048 + (2048 - i)] = pixel * 15; + imageBuffer[frames * 1536 + (1535 - i)] = pixel * 15; } // Frame counter frames++; // Make sure we have enough room - if (frames * 2048 >= (int)imageBuffer.size()) - imageBuffer.resize((frames + 1000) * 2048); + if (frames * 1536 >= (int)imageBuffer.size()) + imageBuffer.resize((frames + 1000) * 1536); } cimg_library::CImg MERSI1000Reader::getImage() { - return cimg_library::CImg(&imageBuffer[0], 2048, frames); + return cimg_library::CImg(&imageBuffer[0], 1536, frames); } } // namespace mersi1 } // namespace fengyun \ No newline at end of file diff --git a/src-core/modules/fengyun/instruments/mersill/mersi_250m_reader.cpp b/src-core/modules/fengyun/instruments/mersill/mersi_250m_reader.cpp index 12b6201fd..050f9e061 100644 --- a/src-core/modules/fengyun/instruments/mersill/mersi_250m_reader.cpp +++ b/src-core/modules/fengyun/instruments/mersill/mersi_250m_reader.cpp @@ -6,7 +6,7 @@ namespace fengyun { MERSI250Reader::MERSI250Reader() { - imageBuffer.create(20000 * 8192); + imageBuffer.create(20000 * 6144); mersiLineBuffer = new unsigned short[40960]; frames = 0; } @@ -19,10 +19,10 @@ namespace fengyun void MERSI250Reader::pushFrame(std::vector &data) { - int pos = 63; // MERSI-2 Data position, found through a bit viewer + int pos = 96 + 54; // MERSI-LL Data position, found through a bit viewer // Convert into 12-bits values - for (int i = 0; i < 8192; i += 2) + for (int i = 0; i < 6144; i += 2) { byteBufShift[0] = data[pos + 0] << 3 | data[pos + 1] >> 5; byteBufShift[1] = data[pos + 1] << 3 | data[pos + 2] >> 5; @@ -34,23 +34,23 @@ namespace fengyun } // Load into our image buffer - for (int i = 0; i < 8192; i++) + for (int i = 0; i < 6144; i++) { uint16_t pixel = mersiLineBuffer[i]; - imageBuffer[frames * 8192 + (8191 - i)] = pixel * 15; + imageBuffer[frames * 6144 + (6143 - i)] = pixel * 15; } // Frame counter frames++; // Make sure we have enough room - if (frames * 8192 >= (int)imageBuffer.size()) - imageBuffer.resize((frames + 10000) * 8192); + if (frames * 6144 >= (int)imageBuffer.size()) + imageBuffer.resize((frames + 10000) * 6144); } cimg_library::CImg MERSI250Reader::getImage() { - return cimg_library::CImg(&imageBuffer[0], 8192, frames); + return cimg_library::CImg(&imageBuffer[0], 6144, frames); } } // namespace mersi1 } // namespace fengyun \ No newline at end of file diff --git a/src-core/modules/fengyun/instruments/mersill/mersi_correlator.cpp b/src-core/modules/fengyun/instruments/mersill/mersi_correlator.cpp index abfb2c207..d8259b701 100644 --- a/src-core/modules/fengyun/instruments/mersill/mersi_correlator.cpp +++ b/src-core/modules/fengyun/instruments/mersill/mersi_correlator.cpp @@ -10,7 +10,7 @@ namespace fengyun m1000Frames = 0; complete = 0; - for (int i = 0; i < 130; i++) + for (int i = 0; i < 240; i++) scanBuffer[i] = std::vector(99120 / 8); } @@ -24,6 +24,17 @@ namespace fengyun image5 = reader5.getImage(); image6 = reader6.getImage(); image7 = reader7.getImage(); + image8 = reader8.getImage(); + image9 = reader9.getImage(); + image10 = reader10.getImage(); + image11 = reader11.getImage(); + image12 = reader12.getImage(); + image13 = reader13.getImage(); + image14 = reader14.getImage(); + image15 = reader15.getImage(); + image16 = reader16.getImage(); + image17 = reader17.getImage(); + image18 = reader18.getImage(); // They all need to be flipped horizontally image1.mirror('y'); @@ -33,13 +44,24 @@ namespace fengyun image5.mirror('y'); image6.mirror('y'); image7.mirror('y'); + image8.mirror('y'); + image9.mirror('y'); + image10.mirror('y'); + image11.mirror('y'); + image12.mirror('y'); + image13.mirror('y'); + image14.mirror('y'); + image15.mirror('y'); + image16.mirror('y'); + image17.mirror('y'); + image18.mirror('y'); } void MERSICorrelator::processScan() { complete++; - for (int i = 0; i < 130; i++) + for (int i = 0; i < 240; i++) { int marker = i; // Silly, but cleans things up std::vector &frameVec = scanBuffer[i]; @@ -61,6 +83,28 @@ namespace fengyun reader6.pushFrame(frameVec); else if (marker >= 10 * 4 && marker < 10 * 5) reader7.pushFrame(frameVec); + else if (marker >= 10 * 5 && marker < 10 * 6) + reader8.pushFrame(frameVec); + else if (marker >= 10 * 6 && marker < 10 * 7) + reader9.pushFrame(frameVec); + else if (marker >= 10 * 7 && marker < 10 * 8) + reader10.pushFrame(frameVec); + else if (marker >= 10 * 8 && marker < 10 * 9) + reader11.pushFrame(frameVec); + else if (marker >= 10 * 9 && marker < 10 * 10) + reader12.pushFrame(frameVec); + else if (marker >= 10 * 10 && marker < 10 * 11) + reader13.pushFrame(frameVec); + else if (marker >= 10 * 11 && marker < 10 * 12) + reader14.pushFrame(frameVec); + else if (marker >= 10 * 12 && marker < 10 * 13) + reader15.pushFrame(frameVec); + else if (marker >= 10 * 13 && marker < 10 * 14) + reader16.pushFrame(frameVec); + else if (marker >= 10 * 14 && marker < 10 * 15) + reader17.pushFrame(frameVec); + else if (marker >= 10 * 15 && marker < 10 * 16) + reader18.pushFrame(frameVec); } else if (marker < 80) { @@ -74,7 +118,7 @@ namespace fengyun } } - for (int i = 0; i < 130; i++) + for (int i = 0; i < 240; i++) scanBuffer[i] = std::vector(99120 / 8); } @@ -84,7 +128,7 @@ namespace fengyun if (marker == 0) processScan(); - if (marker < 130) + if (marker < 240) scanBuffer[marker] = data; } } // namespace mersi2 diff --git a/src-core/modules/fengyun/instruments/mersill/mersi_correlator.h b/src-core/modules/fengyun/instruments/mersill/mersi_correlator.h index 8da08ffd4..9d6a43446 100644 --- a/src-core/modules/fengyun/instruments/mersill/mersi_correlator.h +++ b/src-core/modules/fengyun/instruments/mersill/mersi_correlator.h @@ -13,10 +13,12 @@ namespace fengyun class MERSICorrelator { private: - std::vector scanBuffer[130]; + std::vector scanBuffer[240]; void processScan(); MERSI250Reader reader1, reader2; - MERSI1000Reader reader3, reader4, reader5, reader6, reader7; + MERSI1000Reader reader3, reader4, reader5, reader6, reader7, + reader8, reader9, reader10, reader11, reader12, reader13, + reader14, reader15, reader16, reader17, reader18; public: int complete; @@ -35,6 +37,17 @@ namespace fengyun cimg_library::CImg image5; cimg_library::CImg image6; cimg_library::CImg image7; + cimg_library::CImg image8; + cimg_library::CImg image9; + cimg_library::CImg image10; + cimg_library::CImg image11; + cimg_library::CImg image12; + cimg_library::CImg image13; + cimg_library::CImg image14; + cimg_library::CImg image15; + cimg_library::CImg image16; + cimg_library::CImg image17; + cimg_library::CImg image18; }; } // namespace mersi2 } // namespace fengyun \ No newline at end of file diff --git a/src-core/modules/fengyun/instruments/mersill/module_fengyun_mersill.cpp b/src-core/modules/fengyun/instruments/mersill/module_fengyun_mersill.cpp index b58dd5636..ec50c8d90 100644 --- a/src-core/modules/fengyun/instruments/mersill/module_fengyun_mersill.cpp +++ b/src-core/modules/fengyun/instruments/mersill/module_fengyun_mersill.cpp @@ -134,6 +134,39 @@ namespace fengyun logger->info("Channel 7..."); WRITE_IMAGE((bowtie ? image::bowtie::correctGenericBowTie(mersiCorrelator->image7, 1, scanHeight_1000, alpha, beta) : mersiCorrelator->image7), directory + "/MERSILL-7.png"); + + logger->info("Channel 8..."); + WRITE_IMAGE((bowtie ? image::bowtie::correctGenericBowTie(mersiCorrelator->image8, 1, scanHeight_1000, alpha, beta) : mersiCorrelator->image8), directory + "/MERSILL-8.png"); + + logger->info("Channel 9..."); + WRITE_IMAGE((bowtie ? image::bowtie::correctGenericBowTie(mersiCorrelator->image9, 1, scanHeight_1000, alpha, beta) : mersiCorrelator->image9), directory + "/MERSILL-9.png"); + + logger->info("Channel 10..."); + WRITE_IMAGE((bowtie ? image::bowtie::correctGenericBowTie(mersiCorrelator->image10, 1, scanHeight_1000, alpha, beta) : mersiCorrelator->image10), directory + "/MERSILL-10.png"); + + logger->info("Channel 11..."); + WRITE_IMAGE((bowtie ? image::bowtie::correctGenericBowTie(mersiCorrelator->image11, 1, scanHeight_1000, alpha, beta) : mersiCorrelator->image11), directory + "/MERSILL-11.png"); + + logger->info("Channel 12..."); + WRITE_IMAGE((bowtie ? image::bowtie::correctGenericBowTie(mersiCorrelator->image12, 1, scanHeight_1000, alpha, beta) : mersiCorrelator->image12), directory + "/MERSILL-12.png"); + + logger->info("Channel 13..."); + WRITE_IMAGE((bowtie ? image::bowtie::correctGenericBowTie(mersiCorrelator->image13, 1, scanHeight_1000, alpha, beta) : mersiCorrelator->image13), directory + "/MERSILL-13.png"); + + logger->info("Channel 14..."); + WRITE_IMAGE((bowtie ? image::bowtie::correctGenericBowTie(mersiCorrelator->image14, 1, scanHeight_1000, alpha, beta) : mersiCorrelator->image14), directory + "/MERSILL-14.png"); + + logger->info("Channel 15..."); + WRITE_IMAGE((bowtie ? image::bowtie::correctGenericBowTie(mersiCorrelator->image15, 1, scanHeight_1000, alpha, beta) : mersiCorrelator->image15), directory + "/MERSILL-15.png"); + + logger->info("Channel 16..."); + WRITE_IMAGE((bowtie ? image::bowtie::correctGenericBowTie(mersiCorrelator->image16, 1, scanHeight_1000, alpha, beta) : mersiCorrelator->image16), directory + "/MERSILL-16.png"); + + logger->info("Channel 17..."); + WRITE_IMAGE((bowtie ? image::bowtie::correctGenericBowTie(mersiCorrelator->image17, 1, scanHeight_1000, alpha, beta) : mersiCorrelator->image17), directory + "/MERSILL-17.png"); + + logger->info("Channel 18..."); + WRITE_IMAGE((bowtie ? image::bowtie::correctGenericBowTie(mersiCorrelator->image18, 1, scanHeight_1000, alpha, beta) : mersiCorrelator->image18), directory + "/MERSILL-18.png"); } void FengyunMERSILLDecoderModule::drawUI(bool window) diff --git a/src-core/modules/fengyun/module_fengyun_satid.cpp b/src-core/modules/fengyun/module_fengyun_satid.cpp index a1e896cb8..8ba017006 100644 --- a/src-core/modules/fengyun/module_fengyun_satid.cpp +++ b/src-core/modules/fengyun/module_fengyun_satid.cpp @@ -48,7 +48,8 @@ namespace fengyun if (vcdu.spacecraft_id == FY3_A_SCID || vcdu.spacecraft_id == FY3_B_SCID || vcdu.spacecraft_id == FY3_C_SCID || - vcdu.spacecraft_id == FY3_D_SCID) + vcdu.spacecraft_id == FY3_D_SCID || + vcdu.spacecraft_id == FY3_E_SCID) scids.push_back(vcdu.spacecraft_id); progress = data_in.tellg(); @@ -89,6 +90,8 @@ namespace fengyun sat_name = "FengYun-3C"; else if (scid == FY3_D_SCID) sat_name = "FengYun-3D"; + else if (scid == FY3_E_SCID) + sat_name = "FengYun-3E"; int norad = 0; @@ -100,6 +103,8 @@ namespace fengyun norad = FY3_C_NORAD; else if (scid == FY3_D_SCID) norad = FY3_D_NORAD; + else if (scid == FY3_E_SCID) + norad = FY3_E_NORAD; logger->info("This is satellite is " + sat_name + ", NORAD " + std::to_string(norad));