File indexing completed on 2024-05-19 14:58:11
0001 /* 0002 SPDX-FileCopyrightText: 2023 Joseph McGee <joseph.mcgee@sbcglobal.net> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include <stdio.h> 0008 #include <string.h> 0009 #include <QLoggingCategory> 0010 #include <QDialog> 0011 #include <QDir> 0012 #include <QFile> 0013 #include <QtNetwork/QNetworkAccessManager> 0014 #include <QtNetwork/QNetworkRequest> 0015 #include <QtNetwork/QNetworkReply> 0016 #include <QStandardPaths> 0017 #include <QUrl> 0018 #include <QTimer> 0019 #include <QIODevice> 0020 #include <QDirIterator> 0021 #include <QXmlStreamWriter> 0022 #include <QXmlStreamReader> 0023 #include "fileutilitycameradata.h" 0024 #include "imagingcameradata.h" 0025 #include "cameragainreadnoise.h" 0026 #include "exposurecalculatordialog.h" 0027 #include <ekos_capture_debug.h> 0028 #include <sstream> 0029 #include <kspaths.h> 0030 0031 /* 0032 * Direct access to files on KDE/kstars git repository: 0033 */ 0034 QString const OptimalExposure::FileUtilityCameraData::cameraDataRemoteRepositoryList 0035 = "https://api.github.com/repos/KDE/kstars/git/trees/master:kstars%2Fdata%2Fcameradata"; 0036 0037 QString const OptimalExposure::FileUtilityCameraData::cameraDataRemoteRepository 0038 = "https://raw.githubusercontent.com/KDE/kstars/master/kstars/data/cameradata/"; 0039 0040 QString const OptimalExposure::FileUtilityCameraData::cameraApplicationDataRepository 0041 = KSPaths::locate(QStandardPaths::AppDataLocation, QString("cameradata/"), QStandardPaths::LocateDirectory); 0042 0043 QString const OptimalExposure::FileUtilityCameraData::cameraLocalDataRepository 0044 = QDir(KSPaths::writableLocation(QStandardPaths::AppLocalDataLocation)).filePath("kstars/cameradata/"); 0045 0046 QStringList OptimalExposure::FileUtilityCameraData::getAvailableCameraFilesList() 0047 { 0048 QStringList cameraDataFiles; 0049 QStringList dirs; 0050 0051 0052 dirs << KSPaths::locateAll(QStandardPaths::GenericDataLocation, 0053 QString::fromLatin1("kstars/cameradata"), 0054 QStandardPaths::LocateDirectory); 0055 0056 Q_FOREACH (const QString &dir, dirs) 0057 { 0058 QDirIterator it(dir, QStringList() << QLatin1String("*.xml")); 0059 0060 while (it.hasNext()) 0061 { 0062 cameraDataFiles.append(it.next()); 0063 } 0064 } 0065 0066 return(cameraDataFiles); 0067 } 0068 0069 0070 QString OptimalExposure::FileUtilityCameraData::cameraIdToCameraDataFileName(QString cameraId) 0071 { 0072 0073 // Replace spaces with "_" in the file name 0074 QString aCameraDataFile = cameraId.replace(" ", "_"); 0075 0076 if(!aCameraDataFile.endsWith(".xml")) 0077 { 0078 aCameraDataFile += ".xml"; 0079 } 0080 0081 return(aCameraDataFile); 0082 } 0083 0084 QString OptimalExposure::FileUtilityCameraData::cameraDataFileNameToCameraId(QString cameraDataFileName) 0085 { 0086 QFileInfo cameraDataFileInfo(cameraDataFileName); 0087 0088 // QString aCameraId = cameraDataFileName; 0089 0090 QString aCameraId = cameraDataFileInfo.baseName(); 0091 0092 if(aCameraId.endsWith(".xml")) 0093 aCameraId.truncate(aCameraId.length() - 4); 0094 0095 aCameraId = aCameraId.replace("_", " "); 0096 return(aCameraId); 0097 } 0098 0099 0100 void OptimalExposure::FileUtilityCameraData::downloadRepositoryCameraDataFileList( 0101 QDialog *aDialog) 0102 0103 { 0104 0105 qCInfo(KSTARS_EKOS_CAPTURE) << "cameraDataRemoteRepositoryList: " << 0106 OptimalExposure::FileUtilityCameraData::cameraDataRemoteRepositoryList; 0107 qCInfo(KSTARS_EKOS_CAPTURE) << "cameraDataRemoteRepository: " << 0108 OptimalExposure::FileUtilityCameraData::cameraDataRemoteRepository; 0109 // qCInfo(KSTARS_EKOS_CAPTURE) << "cameraApplicationDataRepository: " << OptimalExposure::FileUtilityCameraData::cameraApplicationDataRepository; 0110 qCInfo(KSTARS_EKOS_CAPTURE) << "cameraLocalDataRepository: " << 0111 OptimalExposure::FileUtilityCameraData::cameraLocalDataRepository; 0112 0113 // Using git tree to access camera file list, this approach requires parsing the tree 0114 // string collect the xml (camera data) file names. 0115 0116 FileUtilityCameraDataDialog *activeDialog = static_cast<FileUtilityCameraDataDialog *> (aDialog); 0117 activeDialog->setANetworkAccessManager(new QNetworkAccessManager(activeDialog)); 0118 0119 QString aCameraDataRemoteFolderURL = OptimalExposure::FileUtilityCameraData::cameraDataRemoteRepositoryList; 0120 qCInfo(KSTARS_EKOS_CAPTURE) << "Attempting access of camera data file repository " << aCameraDataRemoteFolderURL; 0121 0122 QNetworkRequest activeRequest = QNetworkRequest(QUrl(aCameraDataRemoteFolderURL)); 0123 activeDialog->setRequest(&activeRequest); 0124 activeDialog->setReply(activeDialog->getANetworkAccessManager()->get(activeRequest)); 0125 0126 QNetworkReply *activeReply = activeDialog->getReply(); 0127 QTimer::singleShot(60000, activeReply, [activeReply] //Time-out is 60 seconds 0128 { 0129 activeReply->abort(); 0130 activeReply->deleteLater(); 0131 qCCritical(KSTARS_EKOS_CAPTURE) << "CameraDataFile Download Timed out."; 0132 }); 0133 0134 QVector<QString> *availableCameraDataFiles = new QVector<QString>(); 0135 0136 activeDialog->connect(activeReply, &QNetworkReply::finished, 0137 activeDialog, 0138 [availableCameraDataFiles, activeReply, activeDialog] 0139 { 0140 // qCInfo(KSTARS_EKOS_CAPTURE) << "The Camera Data File List download is finished"; 0141 activeReply->deleteLater(); 0142 if (activeReply->error() != QNetworkReply::NoError) 0143 { 0144 qCCritical(KSTARS_EKOS_CAPTURE) << "An error occurred in the Camera Data File List download"; 0145 return; 0146 } 0147 0148 // Parse out the filenames from the tree 0149 std::string responseDataStr = activeReply->readAll().toStdString(); 0150 0151 // qCInfo(KSTARS_EKOS_CAPTURE) << "Camera Data File Github Tree:\n" << QString::fromStdString(responseDataStr); 0152 0153 std::string startdelimiter = "["; 0154 std::string stopdelimiter = "]"; 0155 std::string treeStr = responseDataStr.substr(responseDataStr.find(startdelimiter) + 1, responseDataStr.find(stopdelimiter) - responseDataStr.find(startdelimiter)); 0156 0157 std::vector <std::string> tokens; 0158 std::stringstream responseDataStream(treeStr); 0159 0160 std::string intermediate; 0161 0162 while(getline(responseDataStream, intermediate, ',')) 0163 { 0164 tokens.push_back(intermediate); 0165 } 0166 0167 // Find the camera file name 0168 for(int i = 0; i < tokens.size(); i++) 0169 { 0170 if(tokens[i].find("path") != std::string::npos) 0171 { 0172 0173 std::string aCameraDataFileStr = tokens[i].substr(9, tokens[i].length() - 14); 0174 // std::cout << aCameraDataFileStr << '\n'; 0175 0176 QString aCameraDataFile = QString::fromStdString(aCameraDataFileStr); 0177 0178 availableCameraDataFiles->append(aCameraDataFile); 0179 0180 } 0181 } 0182 activeDialog->setAvailableCameraDataFiles(*availableCameraDataFiles); 0183 activeDialog->refreshCameraList(); 0184 }); 0185 0186 activeDialog->connect(activeReply, &QNetworkReply::downloadProgress, 0187 activeDialog, 0188 [availableCameraDataFiles, activeReply, activeDialog] 0189 { 0190 qCInfo(KSTARS_EKOS_CAPTURE) << "The Camera Data File List download is in progress"; 0191 }); 0192 activeDialog->connect(activeReply, &QNetworkReply::errorOccurred, 0193 activeDialog, 0194 [availableCameraDataFiles, activeReply, activeDialog] 0195 { 0196 qCCritical(KSTARS_EKOS_CAPTURE) << "The Camera Data File List download had an error"; 0197 }); 0198 activeDialog->connect(activeReply, &QNetworkReply::destroyed, 0199 activeDialog, 0200 [availableCameraDataFiles, activeReply, activeDialog] 0201 { 0202 qCInfo(KSTARS_EKOS_CAPTURE) << "The Camera Data File List connection was destroyed"; 0203 }); 0204 0205 qCInfo(KSTARS_EKOS_CAPTURE) << "The Camera Data File List length is " << availableCameraDataFiles->length(); 0206 0207 0208 } 0209 0210 void OptimalExposure::FileUtilityCameraData::downloadCameraDataFile( 0211 QString cameraId, 0212 QDialog *aDialog) 0213 { 0214 0215 FileUtilityCameraDataDialog *activeDialog = static_cast<FileUtilityCameraDataDialog *> (aDialog); 0216 0217 activeDialog->setANetworkAccessManager(new QNetworkAccessManager(activeDialog)); 0218 0219 QDir filePath = OptimalExposure::FileUtilityCameraData::cameraLocalDataRepository; 0220 filePath.mkpath("."); 0221 0222 QString cameraDataFileName = cameraIdToCameraDataFileName(cameraId); 0223 0224 // File in remote repository 0225 QString aCameraDataDownloadURL = OptimalExposure::FileUtilityCameraData::cameraDataRemoteRepository 0226 + cameraDataFileName; 0227 0228 // File for local storage 0229 QString aCameraDataLocalFileName = OptimalExposure::FileUtilityCameraData::cameraLocalDataRepository 0230 + cameraDataFileName; 0231 0232 //QString aCameraDataLocalFileName = KSPaths::locate(QStandardPaths::AppLocalDataLocation, 0233 // QString("cameradata/%1").arg(cameraDataFileName)); 0234 0235 0236 0237 qCInfo(KSTARS_EKOS_CAPTURE) << "Attempting Download Camera Data from " 0238 << aCameraDataDownloadURL << "\n\tto " << aCameraDataLocalFileName; 0239 0240 QNetworkRequest activeRequest = QNetworkRequest(QUrl(aCameraDataDownloadURL)); 0241 activeDialog->setRequest(&activeRequest); 0242 0243 activeDialog->setReply(activeDialog->getANetworkAccessManager()->get(activeRequest)); 0244 QNetworkReply *activeReply = activeDialog->getReply(); 0245 QTimer::singleShot(60000, activeReply, [activeReply] //Time-out is 60 seconds 0246 { 0247 activeReply->abort(); 0248 activeReply->deleteLater(); 0249 qCCritical(KSTARS_EKOS_CAPTURE) << Q_FUNC_INFO << "CameraDataFile Download Timed out."; 0250 }); 0251 activeDialog->connect(activeReply, &QNetworkReply::finished, 0252 activeDialog, 0253 [aCameraDataLocalFileName, activeReply, activeDialog] 0254 { 0255 activeReply->deleteLater(); 0256 if (activeReply->error() != QNetworkReply::NoError) 0257 { 0258 qCCritical(KSTARS_EKOS_CAPTURE) 0259 << "An error occurred in the Camera Data File download of " 0260 << aCameraDataLocalFileName; 0261 return; 0262 } 0263 QFile aCameraDataFile(aCameraDataLocalFileName); 0264 if(aCameraDataFile.open(QIODevice::ReadWrite | QIODevice::Truncate)) 0265 { 0266 QByteArray responseData = activeReply->readAll(); 0267 if (aCameraDataFile.write(responseData)) 0268 { 0269 aCameraDataFile.close(); 0270 qCInfo(KSTARS_EKOS_CAPTURE) << "The Camera Data File download of " 0271 << aCameraDataLocalFileName << " is finished"; 0272 activeDialog->decrementDownloadFileCounter(); 0273 } 0274 else 0275 { 0276 qCCritical(KSTARS_EKOS_CAPTURE) << "The Camera Data File download of " 0277 << aCameraDataLocalFileName << " was not completed"; 0278 } 0279 } 0280 }); 0281 activeDialog->connect(activeReply, &QNetworkReply::downloadProgress, 0282 activeDialog, 0283 [aCameraDataLocalFileName, activeReply, activeDialog] 0284 { 0285 qCInfo(KSTARS_EKOS_CAPTURE) << "The Camera Data File download of " 0286 << aCameraDataLocalFileName << " is in progress"; 0287 }); 0288 activeDialog->connect(activeReply, &QNetworkReply::errorOccurred, 0289 activeDialog, 0290 [aCameraDataLocalFileName, activeReply, activeDialog] 0291 { 0292 qCInfo(KSTARS_EKOS_CAPTURE) << "The Camera Data File download of " 0293 << aCameraDataLocalFileName << " had an error"; 0294 }); 0295 activeDialog->connect(activeReply, &QNetworkReply::destroyed, 0296 activeDialog, 0297 [aCameraDataLocalFileName, activeReply, activeDialog] 0298 { 0299 qCInfo(KSTARS_EKOS_CAPTURE) << "The Camera Data File connection for " << aCameraDataLocalFileName << " was destroyed"; 0300 }); 0301 0302 } 0303 0304 0305 int OptimalExposure::FileUtilityCameraData::readCameraDataFile(QString aCameraDataFile, 0306 OptimalExposure::ImagingCameraData *anImagingCameraData) 0307 { 0308 // QString aCameraDataFile = OptimalExposure::FileUtilityCameraData::cameraApplicationDataRepository + 0309 // cameraIdToCameraDataFileName(cameraId); 0310 0311 // qCInfo(KSTARS_EKOS_CAPTURE) << "Opening... " + aCameraDataFile; 0312 0313 QFile file(aCameraDataFile); 0314 if(file.open(QIODevice::ReadOnly | QIODevice::Text)) 0315 { 0316 // qCInfo(KSTARS_EKOS_CAPTURE) << "Reading... " + aCameraDataFile; 0317 QXmlStreamReader xmlReader(&file); 0318 0319 if (xmlReader.readNextStartElement()) 0320 { 0321 // qCInfo(KSTARS_EKOS_CAPTURE) << "xmlReader start element name: " << xmlReader.name(); 0322 if (xmlReader.name() == "ExposureCalculatorCameraData") 0323 { 0324 // qCInfo(KSTARS_EKOS_CAPTURE) << "Found aCamera Element..."; 0325 0326 QVector<OptimalExposure::CameraGainReadMode> *aCameraGainReadModeVector 0327 = new QVector<OptimalExposure::CameraGainReadMode>(); 0328 0329 while(xmlReader.readNextStartElement()) 0330 { 0331 // qCInfo(KSTARS_EKOS_CAPTURE) << "xmlReader start element name: " << xmlReader.name(); 0332 if (xmlReader.name() == "CameraDataClassVersion") 0333 { 0334 int aDataClassVersion = xmlReader.readElementText().toInt(); 0335 anImagingCameraData->setDataClassVersion(aDataClassVersion); 0336 } 0337 0338 if (xmlReader.name() == "CameraId") 0339 { 0340 // qCInfo(KSTARS_EKOS_CAPTURE) << "Found aCameraId Element..."; 0341 QString aCameraIdString = xmlReader.readElementText(); 0342 // qCInfo(KSTARS_EKOS_CAPTURE) << "Read element text..." + aCameraIdString; 0343 anImagingCameraData->setCameraId(aCameraIdString); 0344 } 0345 0346 if (xmlReader.name() == "SensorType") 0347 { 0348 // qCInfo(KSTARS_EKOS_CAPTURE) << "Found SensorType Element..."; 0349 QString aSensorType = xmlReader.readElementText(); 0350 // qCInfo(KSTARS_EKOS_CAPTURE) << "Read element text..." + aSensorType; 0351 if(aSensorType == "COLOR") 0352 anImagingCameraData->setSensorType(OptimalExposure::SENSORTYPE_COLOR); 0353 0354 if(aSensorType == "MONOCHROME") 0355 anImagingCameraData->setSensorType(OptimalExposure::SENSORTYPE_MONOCHROME); 0356 } 0357 0358 if (xmlReader.name() == "GainSelectionType") 0359 { 0360 // qCInfo(KSTARS_EKOS_CAPTURE) << "Found GainSelectionType Element..."; 0361 QString aGainSelectionType = xmlReader.readElementText(); 0362 // qCInfo(KSTARS_EKOS_CAPTURE) << "Read element text..." + aGainSelectionType; 0363 if(aGainSelectionType == "NORMAL") 0364 anImagingCameraData->setGainSelectionType(OptimalExposure::GAIN_SELECTION_TYPE_NORMAL); 0365 if(aGainSelectionType == "ISO_DISCRETE") 0366 anImagingCameraData->setGainSelectionType(OptimalExposure::GAIN_SELECTION_TYPE_ISO_DISCRETE); 0367 if(aGainSelectionType == "FIXED") 0368 anImagingCameraData->setGainSelectionType(OptimalExposure::GAIN_SELECTION_TYPE_FIXED); 0369 } 0370 0371 0372 // GainSelection collection // For GAIN_SELECTION_TYPE_NORMAL the collection represents min and max, 0373 // for GAIN_SELECTION_TYPE_ISO_DISCRETE, the collection is the discrete list of of gain/iso values. 0374 // Note that the data available for GainReadNoiseValue may not match a camera discrete gain/iso values, 0375 // so this collection resolves that. 0376 0377 if (xmlReader.name() == "CameraGainSelections") 0378 { 0379 QVector<int> *aGainSelectionVector = new QVector<int>(); 0380 0381 int aGainSelection = 0; 0382 while(xmlReader.readNext() && !(xmlReader.name() == "CameraGainSelections" && xmlReader.isEndElement())) 0383 { 0384 // qCInfo(KSTARS_EKOS_CAPTURE) << "xmlReader.name() = " << xmlReader.name(); 0385 if (xmlReader.name() == "GainSelection") 0386 { 0387 // qCInfo(KSTARS_EKOS_CAPTURE) << "xmlReader.name() = " << xmlReader.name(); 0388 QString aGainSelectionString = xmlReader.readElementText(); 0389 aGainSelection = aGainSelectionString.toInt(); 0390 // qCInfo(KSTARS_EKOS_CAPTURE) << "a Found GainSelection text: " << aGainSelection; 0391 0392 // qCInfo(KSTARS_EKOS_CAPTURE) << "Adding GainSelection to Vector " << QString::number(aGainSelection); 0393 0394 aGainSelectionVector->push_back(aGainSelection); 0395 } 0396 } 0397 anImagingCameraData->setGainSelectionRange(*aGainSelectionVector); 0398 } 0399 0400 if (xmlReader.name() == "CameraGainReadMode") 0401 { 0402 OptimalExposure::CameraGainReadMode *aCameraGainReadMode = new OptimalExposure::CameraGainReadMode(); 0403 0404 while(xmlReader.readNext() && !(xmlReader.name() == "CameraGainReadMode" && xmlReader.isEndElement())) 0405 { 0406 // qCInfo(KSTARS_EKOS_CAPTURE) << "xmlReader.name() = " << xmlReader.name(); 0407 if (xmlReader.name() == "GainReadModeNumber") 0408 { 0409 QString aGainReadModeNumberString = xmlReader.readElementText(); 0410 aCameraGainReadMode->setCameraGainReadModeNumber(aGainReadModeNumberString.toInt()); 0411 } 0412 if (xmlReader.name() == "GainReadModeName") 0413 { 0414 aCameraGainReadMode->setCameraGainReadModeName(xmlReader.readElementText()); 0415 } 0416 0417 // CameraGainReadNoise collection 0418 if (xmlReader.name() == "CameraGainReadNoise") 0419 { 0420 // qCInfo(KSTARS_EKOS_CAPTURE) << "Found CameraGainReadNoise Element..."; 0421 // QString aCameraGainReadNoise = xmlReader.readElementText(); 0422 // // qCInfo(KSTARS_EKOS_CAPTURE) << "Read element ..." + aCameraGainReadNoise; 0423 0424 QVector<OptimalExposure::CameraGainReadNoise> *aCameraGainReadNoiseVector 0425 = new QVector<OptimalExposure::CameraGainReadNoise>(); 0426 0427 0428 // Iterate for Gain Read-Noise data 0429 int aGain = 0; 0430 double aReadNoise = 0.0; 0431 while(xmlReader.readNext() && !(xmlReader.name() == "CameraGainReadNoise" && xmlReader.isEndElement()) ) 0432 { 0433 // qCInfo(KSTARS_EKOS_CAPTURE) << "xmlReader.name() = " << xmlReader.name(); 0434 0435 if (xmlReader.isEndElement()) 0436 // qCInfo(KSTARS_EKOS_CAPTURE) << "At end of = " << xmlReader.name(); 0437 0438 0439 if (xmlReader.name() == "GainReadNoiseValue") 0440 { 0441 // qCInfo(KSTARS_EKOS_CAPTURE) << "Found GainReadNoiseValue Element..."; 0442 } 0443 0444 if (xmlReader.name() == "Gain") 0445 { 0446 // qCInfo(KSTARS_EKOS_CAPTURE) << "Found Gain Element..."; 0447 QString aGainString = xmlReader.readElementText(); 0448 aGain = aGainString.toInt(); 0449 // qCInfo(KSTARS_EKOS_CAPTURE) << "a Found Gain text: " << aGain; 0450 } 0451 0452 if (xmlReader.name() == "ReadNoise") 0453 { 0454 // qCInfo(KSTARS_EKOS_CAPTURE) << "Found ReadNoise Element..."; 0455 QString aReadNoiseString = xmlReader.readElementText(); 0456 aReadNoise = aReadNoiseString.toDouble(); 0457 // qCInfo(KSTARS_EKOS_CAPTURE) << "a Found ReadNoise text: " << aReadNoise; 0458 0459 // Add this to a vector 0460 // qCInfo(KSTARS_EKOS_CAPTURE) << "Adding Gain Read-Noise to Vector " << QString::number(aGain) << " " << QString::number(aReadNoise) ; 0461 aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(aGain, aReadNoise))); 0462 } 0463 } 0464 aCameraGainReadMode->setCameraGainReadNoiseVector(*aCameraGainReadNoiseVector); 0465 aCameraGainReadModeVector->push_back(*aCameraGainReadMode); 0466 } 0467 anImagingCameraData->setCameraGainReadModeVector(*aCameraGainReadModeVector); 0468 } 0469 // qCInfo(KSTARS_EKOS_CAPTURE) << "Finished reading mode "; 0470 } 0471 0472 } 0473 // qCInfo(KSTARS_EKOS_CAPTURE) << "Read xml data for " + anImagingCameraData->getCameraId(); 0474 0475 } 0476 else 0477 { 0478 qCCritical(KSTARS_EKOS_CAPTURE) << "Read Failed"; 0479 xmlReader.raiseError(QObject::tr("Incorrect file")); 0480 } 0481 } 0482 else 0483 { 0484 qCCritical(KSTARS_EKOS_CAPTURE) << "Read Initial Element Failed,"; 0485 } 0486 } 0487 else 0488 { 0489 qCCritical(KSTARS_EKOS_CAPTURE) 0490 << "Cannot open file for reading " << file.errorString(); 0491 } 0492 0493 file.close(); 0494 return 0; 0495 } 0496 0497 int OptimalExposure::FileUtilityCameraData::writeCameraDataFile(OptimalExposure::ImagingCameraData *anImagingCameraData) 0498 { 0499 0500 if(QDir().mkpath(cameraLocalDataRepository)) 0501 { 0502 // Replace spaces with "_" in the file name 0503 QString aCameraDataFile = cameraLocalDataRepository + cameraIdToCameraDataFileName(anImagingCameraData->getCameraId()); 0504 0505 QFile file(aCameraDataFile); 0506 if(file.open(QIODevice::ReadWrite | QIODevice::Truncate | QIODevice::Text)) 0507 { 0508 0509 QXmlStreamWriter xmlWriter(&file); 0510 xmlWriter.setAutoFormatting(true); 0511 xmlWriter.writeStartDocument(); 0512 0513 xmlWriter.writeStartElement("ExposureCalculatorCameraData"); 0514 0515 xmlWriter.writeTextElement("CameraDataClassVersion", QString::number(anImagingCameraData->getDataClassVersion())); 0516 0517 xmlWriter.writeTextElement("CameraId", anImagingCameraData->getCameraId() ); 0518 0519 switch(anImagingCameraData->getSensorType()) 0520 { 0521 case OptimalExposure::SENSORTYPE_MONOCHROME: 0522 xmlWriter.writeTextElement("SensorType", QString("MONOCHROME")); 0523 break; 0524 case OptimalExposure::SENSORTYPE_COLOR: 0525 xmlWriter.writeTextElement("SensorType", QString("COLOR")); 0526 break; 0527 } 0528 0529 switch(anImagingCameraData->getGainSelectionType()) 0530 { 0531 case OptimalExposure::GAIN_SELECTION_TYPE_NORMAL: 0532 xmlWriter.writeTextElement("GainSelectionType", QString("NORMAL")); 0533 break; 0534 case OptimalExposure::GAIN_SELECTION_TYPE_ISO_DISCRETE: 0535 xmlWriter.writeTextElement("GainSelectionType", QString("ISO_DISCRETE")); 0536 break; 0537 case OptimalExposure::GAIN_SELECTION_TYPE_FIXED: 0538 xmlWriter.writeTextElement("GainSelectionType", QString("FIXED")); 0539 break; 0540 } 0541 0542 xmlWriter.writeStartElement("CameraGainSelections"); 0543 QVector<int> aGainSelectionRange = anImagingCameraData->getGainSelectionRange(); 0544 for(int gs = 0; gs < aGainSelectionRange.count(); gs++) 0545 { 0546 // xmlWriter.writeStartElement("GainSelection"); 0547 xmlWriter.writeTextElement("GainSelection", QString::number(anImagingCameraData->getGainSelectionRange()[gs])); 0548 // xmlWriter.writeEndElement(); 0549 } 0550 xmlWriter.writeEndElement(); 0551 0552 // Iterate through values of anImagingCameraData->CameraGainReadModeVector 0553 0554 xmlWriter.writeStartElement("CameraGainReadMode"); 0555 QVector<OptimalExposure::CameraGainReadMode> aCameraGainReadModeVector = 0556 anImagingCameraData->getCameraGainReadModeVector(); 0557 for(QVector<OptimalExposure::CameraGainReadMode>::iterator readMode = aCameraGainReadModeVector.begin(); 0558 readMode != aCameraGainReadModeVector.end(); ++readMode) 0559 { 0560 xmlWriter.writeTextElement("GainReadModeNumber", QString::number(readMode->getCameraGainReadModeNumber())); 0561 xmlWriter.writeTextElement("GainReadModeName", readMode->getCameraGainReadModeName()); 0562 // xmlWriter.writeStartElement("GainReadModeNumber"); 0563 // xmlWriter.writeEndElement(); 0564 // xmlWriter.writeStartElement("GainReadModeName"); 0565 // xmlWriter.writeEndElement(); 0566 // Iterate through values of readMode->CameraGainReadNoiseVector 0567 xmlWriter.writeStartElement("CameraGainReadNoise"); 0568 QVector<OptimalExposure::CameraGainReadNoise> aCameraGainReadNoiseVector = 0569 readMode->getCameraGainReadNoiseVector(); 0570 0571 for(QVector<OptimalExposure::CameraGainReadNoise>::iterator readNoisePair = aCameraGainReadNoiseVector.begin(); 0572 readNoisePair != aCameraGainReadNoiseVector.end(); ++readNoisePair) 0573 { 0574 xmlWriter.writeStartElement("GainReadNoiseValue"); 0575 xmlWriter.writeTextElement("Gain", QString::number(readNoisePair->getGain())); 0576 xmlWriter.writeTextElement("ReadNoise", QString::number(readNoisePair->getReadNoise())); 0577 xmlWriter.writeEndElement(); 0578 } 0579 xmlWriter.writeEndElement(); 0580 0581 } 0582 xmlWriter.writeEndElement(); 0583 xmlWriter.writeEndElement(); 0584 xmlWriter.writeEndDocument(); 0585 file.close(); 0586 0587 } 0588 else 0589 { 0590 qCCritical(KSTARS_EKOS_CAPTURE) 0591 << "Cannot open camera data file for writing " << file.errorString(); 0592 } 0593 } 0594 return 0; 0595 0596 0597 } 0598 0599 0600 // Make example camera data files 0601 //void OptimalExposure::FileUtilityCameraData::buildCameraDataFile() 0602 //{ 0603 // /* 0604 // * camera naming should try match the Camera device name (cameraId) present in KStars. 0605 // * A cameraId in KStars appears to consist of a device label (or driver id) and the camera model. 0606 // * 0607 // * For example: 0608 // * a "ZWO ASI-071 MC Pro" 0609 // * 0610 // * The usb id is "ZWO ASI071MC Pro", but KStars uses a driver prefix ("ZWO CCD") in the cameraId. 0611 // * cameraId = "ZWO CCD ASI071MC Pro"; 0612 // * 0613 // * The file utility code will replace spaces with underscore on writes, and vice-versa on reads. 0614 // * So the xml file would be "ZWO_CCD_ASI071MC_Pro.xml" 0615 // * 0616 // * But for many of these examples the kstars cameraId was not available (I do not own all these cameras). 0617 // * So guesses were made for the cameraId of most of these cameras. 0618 // * 0619 // * 0620 // * 0621 // * Manufacturers: 0622 // cat indidrivers.xml | grep -i driver | grep -i ccd 0623 // <driver name="CCD Simulator">indi_simulator_ccd</driver> 0624 // <driver name="V4L2 CCD">indi_v4l2_ccd</driver> 0625 // <driver name="Apogee CCD">indi_apogee_ccd</driver> 0626 // <driver name="ZWO CCD">indi_asi_ccd</driver> 0627 // <driver name="ZWO Camera">indi_asi_single_ccd</driver> 0628 // <driver name="Atik">indi_atik_ccd</driver> 0629 // <driver name="Cam90 CCD">indi_cam90_ccd</driver> 0630 // <driver name="DSI">indi_dsi_ccd</driver> 0631 // <driver name="FireFly MV">indi_ffmv_ccd</driver> 0632 // <driver name="Starfish CCD">indi_fishcamp_ccd</driver> 0633 // <driver name="FLI Kepler">indi_kepler_ccd</driver> 0634 // <driver name="FLI CCD">indi_fli_ccd</driver> 0635 // <driver name="Canon DSLR">indi_canon_ccd</driver> 0636 // <driver name="Nikon DSLR">indi_nikon_ccd</driver> 0637 // <driver name="Pentax DSLR">indi_pentax_ccd</driver> 0638 // <driver name="Sony DSLR">indi_sony_ccd</driver> 0639 // <driver name="Fuji DSLR">indi_fuji_ccd</driver> 0640 // <driver name="GPhoto CCD">indi_gphoto_ccd</driver> 0641 // <driver name="iNova PLX">indi_inovaplx_ccd</driver> 0642 // <driver name="MI CCD">indi_mi_ccd_usb</driver> 0643 // <driver name="MI CCD">indi_mi_ccd_eth</driver> 0644 // <driver name="Nightscape CCD">indi_nightscape_ccd</driver> 0645 // <driver name="Orion SSG3">indi_orion_ssg3_ccd</driver> 0646 // <driver name="PlayerOne CCD">indi_playerone_ccd</driver> 0647 // <driver name="QHY CCD">indi_qhy_ccd</driver> 0648 // <driver name="QSI CCD">indi_qsi_ccd</driver> 0649 // <driver name="SBIG CCD">indi_sbig_ccd</driver> 0650 // <driver name="SBIG CCD">indi_sbig_ccd</driver> 0651 // <driver name="SVBONY CCD">indi_svbony_ccd</driver> 0652 // <driver name="SX CCD">indi_sx_ccd</driver> 0653 // <driver name="Toupcam">indi_toupcam_ccd</driver> 0654 // <driver name="Altair">indi_altair_ccd</driver> 0655 // <driver name="Bressercam">indi_bressercam_ccd</driver> 0656 // <driver name="Mallincam">indi_mallincam_ccd</driver> 0657 // <driver name="Nncam">indi_nncam_ccd</driver> 0658 // <driver name="Ogmacam">indi_ogmacam_ccd</driver> 0659 // <driver name="OmegonPro">indi_omegonprocam_ccd</driver> 0660 // <driver name="StartshootG">indi_starshootg_ccd</driver> 0661 // <driver name="Tscam">indi_tscam_ccd</driver> 0662 // <driver name="Nncam">indi_nncam_ccd</driver> 0663 // <driver name="INDI Webcam">indi_webcam_ccd</driver> 0664 0665 // grep -iR "device label" | grep -i " CCD" 0666 // indidrivers.xml: <device label="DMK CCD" manufacturer="DMK"> 0667 // indidrivers.xml: <device label="V4L2 CCD" manufacturer="Web Cameras"> 0668 // indidrivers.xml: <device label="Apogee CCD" manufacturer="Andor"> 0669 // indidrivers.xml: <device label="ZWO CCD" mdpd="true" manufacturer="ZWO"> 0670 // indidrivers.xml: <device label="Atik CCD" mdpd="true" manufacturer="Atik"> 0671 // indidrivers.xml: <device label="Cam90 CCD" mdpd="true"> 0672 // indidrivers.xml: <device label="Starfish CCD"> 0673 // indidrivers.xml: <device label="FLI CCD" manufacturer="Finger Lakes Instruments"> 0674 // indidrivers.xml: <device label="GPhoto CCD" manufacturer="DSLRs"> 0675 // indidrivers.xml: <device label="MI CCD (USB)" manufacturer="Moravian Instruments"> 0676 // indidrivers.xml: <device label="MI CCD (ETH)" manufacturer="Moravian Instruments"> 0677 // indidrivers.xml: <device label="Nightscape 8300 CCD" mdpd="true" manufacturer="Celestron"> 0678 // indidrivers.xml: <device label="PlayerOne CCD" mdpd="true" manufacturer="PlayerOne"> 0679 // indidrivers.xml: <device label="QHY CCD" mdpd="true" manufacturer="QHY"> 0680 // indidrivers.xml: <device label="QSI CCD" manufacturer="QSI"> 0681 // indidrivers.xml: <device label="SBIG CCD" manufacturer="Diffraction Limited"> 0682 // indidrivers.xml: <device label="SVBONY CCD" mdpd="true" manufacturer="SVBONY"> 0683 // indidrivers.xml: <device label="SX CCD" mdpd="true" manufacturer="Starlight XPress"> 0684 0685 // */ 0686 0687 // // Define and re-use for each camera instance 0688 // QString cameraId; 0689 // int readModeNumber = 0; 0690 // QString readModeName; 0691 // QVector<OptimalExposure::CameraGainReadNoise> *aCameraGainReadNoiseVector; 0692 // QVector<OptimalExposure::CameraGainReadMode> *aCameraGainReadModeVector; 0693 0694 // QVector<int> *gainSelection; 0695 // OptimalExposure::ImagingCameraData *anImagingCameraData; 0696 0697 // // This QHY camera has selectable read modes, with distinct read-noise data. 0698 // // The indi driver may provide a "Read Mode" selectoin on the indi panel. 0699 // // The xml data files are revised to handle multiple read-modes for a camera 0700 // // in a single file. 0701 0702 // // #0 Photographic, #1 High Gain, #2 Extended Full Well and #3 Extended Full Well 2CMSIT. 0703 0704 // // Research: Is the same read-noise is used in both Mono and Color versions? 0705 0706 // cameraId = "QHY CCD 268M"; 0707 // aCameraGainReadModeVector = new QVector<OptimalExposure::CameraGainReadMode>(); 0708 0709 // aCameraGainReadNoiseVector = new QVector<OptimalExposure::CameraGainReadNoise>(); 0710 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(0, 7.25))); 0711 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(5, 7.1))); 0712 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(10, 6.78))); 0713 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(15, 6.74))); 0714 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(20, 6.74))); 0715 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(25, 2.8))); 0716 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(30, 2.63))); 0717 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(35, 2.7))); 0718 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(40, 2.57))); 0719 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(45, 2.55))); 0720 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(50, 2.52))); 0721 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(55, 2.35))); 0722 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(60, 2.07))); 0723 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(65, 2.05))); 0724 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(70, 2.04))); 0725 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(75, 2.06))); 0726 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(80, 2.03))); 0727 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(85, 2.01))); 0728 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(90, 2))); 0729 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(95, 1.99))); 0730 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(100, 2))); 0731 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(105, 1.97))); 0732 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(110, 1.96))); 0733 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(115, 1.95))); 0734 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(120, 1.94))); 0735 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(125, 1.93))); 0736 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(130, 1.92))); 0737 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(135, 1.89))); 0738 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(140, 1.9))); 0739 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(145, 1.89))); 0740 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(150, 1.85))); 0741 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(155, 1.82))); 0742 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(160, 1.81))); 0743 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(165, 1.8))); 0744 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(170, 1.79))); 0745 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(175, 1.75))); 0746 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(180, 1.74))); 0747 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(185, 1.7))); 0748 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(190, 1.68))); 0749 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(195, 1.67))); 0750 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(200, 1.62))); 0751 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(205, 1.59))); 0752 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(210, 1.56))); 0753 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(215, 1.53))); 0754 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(220, 1.48))); 0755 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(225, 1.44))); 0756 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(230, 1.41))); 0757 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(235, 1.36))); 0758 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(240, 1.32))); 0759 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(245, 1.26))); 0760 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(250, 1.17))); 0761 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(255, 1.12))); 0762 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(260, 1.03))); 0763 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(265, 0.92))); 0764 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(270, 0.79))); 0765 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(275, 0.62))); 0766 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(280, 0.6))); 0767 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(285, 0.7))); 0768 0769 // readModeNumber = 0; 0770 // readModeName = "Photographic"; 0771 0772 // aCameraGainReadModeVector->push_back(*(new OptimalExposure::CameraGainReadMode(readModeNumber, readModeName, 0773 // *aCameraGainReadNoiseVector))); 0774 0775 // aCameraGainReadNoiseVector = new QVector<OptimalExposure::CameraGainReadNoise>(); 0776 0777 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(5, 3.6))); 0778 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(10, 3.58))); 0779 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(15, 3.64))); 0780 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(20, 3.63))); 0781 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(25, 3.63))); 0782 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(30, 3.58))); 0783 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(35, 3.49))); 0784 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(40, 3.39))); 0785 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(45, 3.43))); 0786 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(50, 3.53))); 0787 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(55, 3.43))); 0788 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(60, 1.69))); 0789 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(65, 1.69))); 0790 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(70, 1.67))); 0791 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(75, 1.67))); 0792 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(80, 1.63))); 0793 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(85, 1.6))); 0794 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(90, 1.57))); 0795 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(95, 1.53))); 0796 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(100, 1.25))); 0797 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(105, 1.22))); 0798 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(110, 1.22))); 0799 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(115, 1.21))); 0800 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(120, 1.2))); 0801 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(125, 1.2))); 0802 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(130, 1.19))); 0803 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(135, 1.18))); 0804 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(140, 1.17))); 0805 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(145, 1.15))); 0806 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(150, 1.14))); 0807 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(155, 1.14))); 0808 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(160, 1.13))); 0809 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(165, 1.12))); 0810 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(170, 1.11))); 0811 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(175, 1.09))); 0812 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(180, 1.09))); 0813 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(185, 1.08))); 0814 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(190, 1.06))); 0815 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(195, 1.06))); 0816 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(200, 1.03))); 0817 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(205, 1.01))); 0818 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(210, 0.98))); 0819 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(215, 0.99))); 0820 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(220, 0.96))); 0821 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(225, 0.97))); 0822 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(230, 0.92))); 0823 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(235, 0.93))); 0824 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(240, 0.87))); 0825 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(245, 0.87))); 0826 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(250, 0.8))); 0827 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(255, 0.79))); 0828 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(260, 0.8))); 0829 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(265, 0.7))); 0830 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(270, 0.71))); 0831 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(275, 0.7))); 0832 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(280, 0.69))); 0833 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(285, 0.69))); 0834 0835 // readModeNumber = 1; 0836 // readModeName = "High Gain"; 0837 0838 // aCameraGainReadModeVector->push_back(*(new OptimalExposure::CameraGainReadMode(readModeNumber, readModeName, 0839 // *aCameraGainReadNoiseVector))); 0840 0841 // aCameraGainReadNoiseVector = new QVector<OptimalExposure::CameraGainReadNoise>(); 0842 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(0, 7.56))); 0843 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(5, 7.48))); 0844 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(10, 7.41))); 0845 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(15, 7.34))); 0846 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(20, 7.22))); 0847 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(25, 7.15))); 0848 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(30, 7.01))); 0849 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(35, 6.83))); 0850 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(40, 6.69))); 0851 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(45, 6.6))); 0852 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(50, 6.64))); 0853 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(55, 6.72))); 0854 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(60, 6.86))); 0855 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(65, 6.93))); 0856 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(70, 6.73))); 0857 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(75, 6.44))); 0858 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(80, 6.55))); 0859 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(85, 6.06))); 0860 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(90, 6.16))); 0861 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(95, 5.75))); 0862 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(100, 5.36))); 0863 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(105, 5.34))); 0864 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(110, 5.34))); 0865 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(115, 5.35))); 0866 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(120, 5.34))); 0867 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(125, 5.3))); 0868 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(130, 5.22))); 0869 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(135, 5.18))); 0870 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(140, 5.09))); 0871 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(145, 5.04))); 0872 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(150, 4.96))); 0873 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(155, 4.9))); 0874 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(160, 4.85))); 0875 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(165, 4.77))); 0876 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(170, 4.71))); 0877 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(175, 4.62))); 0878 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(180, 4.57))); 0879 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(185, 4.46))); 0880 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(190, 4.4))); 0881 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(195, 4.32))); 0882 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(200, 4.2))); 0883 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(205, 4.1))); 0884 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(210, 4.02))); 0885 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(215, 3.95))); 0886 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(220, 3.79))); 0887 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(225, 3.71))); 0888 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(230, 3.58))); 0889 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(235, 3.53))); 0890 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(240, 3.41))); 0891 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(245, 3.26))); 0892 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(250, 3.14))); 0893 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(255, 3.04))); 0894 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(260, 2.87))); 0895 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(265, 2.8))); 0896 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(270, 2.62))); 0897 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(275, 2.5))); 0898 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(280, 2.34))); 0899 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(285, 2.18))); 0900 0901 // readModeNumber = 2; 0902 // readModeName = "Extended Full Well"; 0903 0904 // aCameraGainReadModeVector->push_back(*(new OptimalExposure::CameraGainReadMode(readModeNumber, readModeName, 0905 // *aCameraGainReadNoiseVector))); 0906 0907 // aCameraGainReadNoiseVector = new QVector<OptimalExposure::CameraGainReadNoise>(); 0908 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(0, 5.89))); 0909 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(5, 5.82))); 0910 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(10, 5.82))); 0911 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(15, 5.73))); 0912 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(20, 5.66))); 0913 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(25, 5.58))); 0914 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(30, 5.44))); 0915 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(35, 5.39))); 0916 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(40, 5.26))); 0917 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(45, 5.17))); 0918 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(50, 5.17))); 0919 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(55, 5.25))); 0920 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(60, 5.34))); 0921 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(65, 5.43))); 0922 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(70, 5.33))); 0923 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(75, 5.08))); 0924 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(80, 5.05))); 0925 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(85, 4.81))); 0926 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(90, 4.85))); 0927 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(95, 4.55))); 0928 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(100, 4.26))); 0929 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(105, 4.25))); 0930 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(110, 4.23))); 0931 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(115, 4.26))); 0932 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(120, 4.26))); 0933 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(125, 4.23))); 0934 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(130, 4.18))); 0935 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(135, 4.15))); 0936 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(140, 4.08))); 0937 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(145, 4.09))); 0938 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(150, 4.05))); 0939 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(155, 4.01))); 0940 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(160, 3.98))); 0941 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(165, 3.96))); 0942 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(170, 3.91))); 0943 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(175, 3.87))); 0944 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(180, 3.83))); 0945 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(185, 3.8))); 0946 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(190, 3.76))); 0947 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(195, 3.68))); 0948 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(200, 3.64))); 0949 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(205, 3.57))); 0950 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(210, 3.51))); 0951 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(215, 3.44))); 0952 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(220, 3.39))); 0953 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(225, 3.33))); 0954 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(230, 3.25))); 0955 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(235, 3.2))); 0956 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(240, 3.13))); 0957 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(245, 3.03))); 0958 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(250, 2.99))); 0959 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(255, 2.87))); 0960 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(260, 2.77))); 0961 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(265, 2.72))); 0962 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(270, 2.58))); 0963 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(275, 2.5))); 0964 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(280, 2.37))); 0965 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(285, 2.22))); 0966 0967 // readModeNumber = 3; 0968 // readModeName = "Extended Full Well 2CMSIT"; 0969 // aCameraGainReadModeVector->push_back(*(new OptimalExposure::CameraGainReadMode(readModeNumber, readModeName, 0970 // *aCameraGainReadNoiseVector))); 0971 0972 // gainSelection = new QVector<int>( { 0, 285 } ); 0973 // anImagingCameraData = new OptimalExposure::ImagingCameraData(cameraId, OptimalExposure::SENSORTYPE_MONOCHROME, 0974 // OptimalExposure::GAIN_SELECTION_TYPE_NORMAL, *gainSelection, *aCameraGainReadModeVector); 0975 // anImagingCameraData->setDataClassVersion(1); 0976 // OptimalExposure::FileUtilityCameraData::writeCameraDataFile(anImagingCameraData); 0977 0978 // cameraId = "ZWO CCD ASI071MC Pro"; 0979 // aCameraGainReadNoiseVector = new QVector<OptimalExposure::CameraGainReadNoise>(); 0980 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(0, 3.28))); 0981 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(50, 2.78))); 0982 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(100, 2.58))); 0983 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(150, 2.39))); 0984 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(200, 2.29))); 0985 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(250, 2.27))); 0986 0987 // readModeNumber = 0; 0988 // readModeName = "Standard"; 0989 // aCameraGainReadModeVector = new QVector<OptimalExposure::CameraGainReadMode>(); 0990 // aCameraGainReadModeVector->push_back(*(new OptimalExposure::CameraGainReadMode(readModeNumber, readModeName, 0991 // *aCameraGainReadNoiseVector))); 0992 0993 // gainSelection = new QVector<int>( { 0, 250 } ); 0994 // anImagingCameraData = new OptimalExposure::ImagingCameraData(cameraId, OptimalExposure::SENSORTYPE_COLOR, 0995 // OptimalExposure::GAIN_SELECTION_TYPE_NORMAL, *gainSelection, *aCameraGainReadModeVector); 0996 0997 // anImagingCameraData->setDataClassVersion(1); 0998 // OptimalExposure::FileUtilityCameraData::writeCameraDataFile(anImagingCameraData); 0999 1000 1001 1002 1003 // // usb id is "ZWO ASI178MC" 1004 // cameraId = "ZWO CCD ASI178MC"; 1005 // aCameraGainReadNoiseVector = new QVector<OptimalExposure::CameraGainReadNoise>(); 1006 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(0, 2.23))); 1007 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(50, 1.92))); 1008 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(100, 1.74))); 1009 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(150, 1.58))); 1010 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(200, 1.45))); 1011 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(250, 1.39))); 1012 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(300, 1.38))); 1013 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(400, 1.35))); 1014 1015 // readModeNumber = 0; 1016 // readModeName = "Standard"; 1017 // aCameraGainReadModeVector = new QVector<OptimalExposure::CameraGainReadMode>(); 1018 // aCameraGainReadModeVector->push_back(*(new OptimalExposure::CameraGainReadMode(readModeNumber, readModeName, 1019 // *aCameraGainReadNoiseVector))); 1020 1021 1022 // gainSelection = new QVector<int>( { 0, 400 } ); 1023 // anImagingCameraData = new OptimalExposure::ImagingCameraData(cameraId, OptimalExposure::SENSORTYPE_COLOR, 1024 // OptimalExposure::GAIN_SELECTION_TYPE_NORMAL, *gainSelection, *aCameraGainReadModeVector); 1025 1026 // anImagingCameraData->setDataClassVersion(1); 1027 // OptimalExposure::FileUtilityCameraData::writeCameraDataFile(anImagingCameraData); 1028 1029 1030 // cameraId = "ZWO CCD ASI6200MM"; 1031 // aCameraGainReadNoiseVector = new QVector<OptimalExposure::CameraGainReadNoise>(); 1032 1033 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(0, 3.6))); 1034 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(50, 3.5))); 1035 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(99, 3.38))); 1036 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(100, 1.55))); // pronounced step 1037 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(150, 1.5))); 1038 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(200, 1.45))); 1039 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(250, 1.42))); 1040 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(300, 1.40))); 1041 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(350, 1.41))); 1042 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(400, 1.32))); 1043 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(450, 1.39))); 1044 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(470, 1.25))); 1045 1046 // readModeNumber = 0; 1047 // readModeName = "Standard"; 1048 // aCameraGainReadModeVector = new QVector<OptimalExposure::CameraGainReadMode>(); 1049 // aCameraGainReadModeVector->push_back(*(new OptimalExposure::CameraGainReadMode(readModeNumber, readModeName, 1050 // *aCameraGainReadNoiseVector))); 1051 1052 // gainSelection = new QVector<int>( { 0, 470 } ); 1053 1054 // // qCInfo(KSTARS_EKOS_CAPTURE) << "aCameraGainReadNoiseVector size: " << aCameraGainReadNoiseVector->size(); 1055 // anImagingCameraData = new OptimalExposure::ImagingCameraData(cameraId, OptimalExposure::SENSORTYPE_MONOCHROME, 1056 // OptimalExposure::GAIN_SELECTION_TYPE_NORMAL, *gainSelection, *aCameraGainReadModeVector); 1057 // anImagingCameraData->setDataClassVersion(1); 1058 // OptimalExposure::FileUtilityCameraData::writeCameraDataFile(anImagingCameraData); 1059 1060 // cameraId = "ZWO CCD ASI1600MM"; 1061 // aCameraGainReadNoiseVector = new QVector<OptimalExposure::CameraGainReadNoise>(); 1062 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(0, 3.62))); 1063 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(50, 2.5))); 1064 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(100, 1.85))); 1065 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(150, 1.72))); 1066 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(200, 1.40))); 1067 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(250, 1.32))); 1068 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(300, 1.30))); 1069 1070 // readModeNumber = 0; 1071 // readModeName = "Standard"; 1072 // aCameraGainReadModeVector = new QVector<OptimalExposure::CameraGainReadMode>(); 1073 // aCameraGainReadModeVector->push_back(*(new OptimalExposure::CameraGainReadMode(readModeNumber, readModeName, 1074 // *aCameraGainReadNoiseVector))); 1075 1076 1077 // gainSelection = new QVector<int>( { 0, 300 } ); 1078 // anImagingCameraData = new OptimalExposure::ImagingCameraData(cameraId, OptimalExposure::SENSORTYPE_MONOCHROME, 1079 // OptimalExposure::GAIN_SELECTION_TYPE_NORMAL, *gainSelection, *aCameraGainReadModeVector); 1080 // anImagingCameraData->setDataClassVersion(1); 1081 // OptimalExposure::FileUtilityCameraData::writeCameraDataFile(anImagingCameraData); 1082 1083 1084 // cameraId = "ZWO CCD ASI224MC"; 1085 // aCameraGainReadNoiseVector = new QVector<OptimalExposure::CameraGainReadNoise>(); 1086 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(0, 3.09))); 1087 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(20, 2.71))); 1088 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(59, 2.26))); 1089 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(60, 1.6))); // pronounced step 1090 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(70, 1.54))); 1091 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(100, 1.34))); 1092 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(150, 1.14))); 1093 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(250, 0.93))); 1094 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(300, 0.86))); 1095 1096 // readModeNumber = 0; 1097 // readModeName = "Standard"; 1098 // aCameraGainReadModeVector = new QVector<OptimalExposure::CameraGainReadMode>(); 1099 // aCameraGainReadModeVector->push_back(*(new OptimalExposure::CameraGainReadMode(readModeNumber, readModeName, 1100 // *aCameraGainReadNoiseVector))); 1101 1102 1103 // gainSelection = new QVector<int>( { 0, 300 } ); 1104 // anImagingCameraData = new OptimalExposure::ImagingCameraData(cameraId, OptimalExposure::SENSORTYPE_COLOR, 1105 // OptimalExposure::GAIN_SELECTION_TYPE_NORMAL, *gainSelection, *aCameraGainReadModeVector); 1106 // anImagingCameraData->setDataClassVersion(1); 1107 // OptimalExposure::FileUtilityCameraData::writeCameraDataFile(anImagingCameraData); 1108 1109 // cameraId = "ZWO CCD ASI120MC"; // formerly "ZWOASI-120MC" but now assuming a standard naming convention from ZWO 1110 // aCameraGainReadNoiseVector = new QVector<OptimalExposure::CameraGainReadNoise>(); 1111 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(0, 6.35))); 1112 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(10, 6.41))); 1113 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(15, 6.5))); 1114 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(16, 4.63))); // pronounced step 1115 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(20, 4.67))); // a rise after the step down 1116 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(31, 4.7))); // another step 1117 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(32, 3.87))); 1118 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(47, 3.95))); // rise after the step down 1119 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(48, 3.7))); 1120 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(63, 3.68))); // another step 1121 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(64, 3.54))); 1122 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(75, 3.66))); // rise after a step down 1123 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(87, 3.62))); 1124 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(100, 3.62))); 1125 1126 // readModeNumber = 0; 1127 // readModeName = "Standard"; 1128 1129 // aCameraGainReadModeVector = new QVector<OptimalExposure::CameraGainReadMode>(); 1130 // aCameraGainReadModeVector->push_back(*(new OptimalExposure::CameraGainReadMode(readModeNumber, readModeName, 1131 // *aCameraGainReadNoiseVector))); 1132 1133 1134 // gainSelection = new QVector<int>( { 0, 100 } ); 1135 // anImagingCameraData = new OptimalExposure::ImagingCameraData(cameraId, OptimalExposure::SENSORTYPE_COLOR, 1136 // OptimalExposure::GAIN_SELECTION_TYPE_NORMAL, *gainSelection, *aCameraGainReadModeVector); 1137 // anImagingCameraData->setDataClassVersion(1); 1138 // OptimalExposure::FileUtilityCameraData::writeCameraDataFile(anImagingCameraData); 1139 1140 // cameraId = "ZWO CCD ASI183MC Pro"; // (The same read-noise is used in both Mono and Color) 1141 // aCameraGainReadNoiseVector = new QVector<OptimalExposure::CameraGainReadNoise>(); 1142 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(0, 3.00))); 1143 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(50, 2.6))); 1144 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(100, 2.22))); 1145 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(150, 2.02))); 1146 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(200, 1.84))); 1147 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(250, 1.75))); 1148 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(270, 1.68))); 1149 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(300, 1.58))); 1150 1151 // readModeNumber = 0; 1152 // readModeName = "Standard"; 1153 1154 // aCameraGainReadModeVector = new QVector<OptimalExposure::CameraGainReadMode>(); 1155 // aCameraGainReadModeVector->push_back(*(new OptimalExposure::CameraGainReadMode(readModeNumber, readModeName, 1156 // *aCameraGainReadNoiseVector))); 1157 1158 1159 // gainSelection = new QVector<int>( { 0, 300 } ); 1160 // anImagingCameraData = new OptimalExposure::ImagingCameraData(cameraId, OptimalExposure::SENSORTYPE_COLOR, 1161 // OptimalExposure::GAIN_SELECTION_TYPE_NORMAL, *gainSelection, *aCameraGainReadModeVector); 1162 // anImagingCameraData->setDataClassVersion(1); 1163 // OptimalExposure::FileUtilityCameraData::writeCameraDataFile(anImagingCameraData); 1164 1165 // cameraId = "ZWO CCD ASI183MM Pro"; // The same read-noise is used in both Mono and Color 1166 // aCameraGainReadNoiseVector = new QVector<OptimalExposure::CameraGainReadNoise>(); 1167 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(0, 3.00))); 1168 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(50, 2.6))); 1169 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(100, 2.22))); 1170 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(150, 2.02))); 1171 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(200, 1.84))); 1172 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(250, 1.75))); 1173 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(270, 1.68))); 1174 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(300, 1.58))); 1175 1176 // readModeNumber = 0; 1177 // readModeName = "Standard"; 1178 1179 // aCameraGainReadModeVector = new QVector<OptimalExposure::CameraGainReadMode>(); 1180 // aCameraGainReadModeVector->push_back(*(new OptimalExposure::CameraGainReadMode(readModeNumber, readModeName, 1181 // *aCameraGainReadNoiseVector))); 1182 1183 1184 // gainSelection = new QVector<int>( { 0, 300 } ); 1185 // anImagingCameraData = new OptimalExposure::ImagingCameraData(cameraId, OptimalExposure::SENSORTYPE_MONOCHROME, 1186 // OptimalExposure::GAIN_SELECTION_TYPE_NORMAL, *gainSelection, *aCameraGainReadModeVector); 1187 // anImagingCameraData->setDataClassVersion(1); 1188 // OptimalExposure::FileUtilityCameraData::writeCameraDataFile(anImagingCameraData); 1189 1190 1191 1192 // cameraId = "ZWO CCD ASI2600MM Pro"; // formerly "ZWOASI-2600MM" but now assuming a standard naming convention from ZWO 1193 // aCameraGainReadNoiseVector = new QVector<OptimalExposure::CameraGainReadNoise>(); 1194 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(0, 3.28))); 1195 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(50, 3.06))); 1196 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(99, 2.88))); 1197 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(100, 1.46))); 1198 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(150, 1.42))); 1199 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(200, 1.42))); 1200 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(250, 1.35))); 1201 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(300, 1.35))); 1202 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(350, 1.25))); 1203 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(400, 1.17))); 1204 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(450, 1.11))); 1205 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(460, 1.03))); 1206 1207 // readModeNumber = 0; 1208 // readModeName = "Standard"; 1209 // aCameraGainReadModeVector = new QVector<OptimalExposure::CameraGainReadMode>(); 1210 // aCameraGainReadModeVector->push_back(*(new OptimalExposure::CameraGainReadMode(readModeNumber, readModeName, 1211 // *aCameraGainReadNoiseVector))); 1212 1213 1214 // gainSelection = new QVector<int>( { 0, 460 } ); 1215 // anImagingCameraData = new OptimalExposure::ImagingCameraData(cameraId, OptimalExposure::SENSORTYPE_MONOCHROME, 1216 // OptimalExposure::GAIN_SELECTION_TYPE_NORMAL, *gainSelection, *aCameraGainReadModeVector); 1217 // anImagingCameraData->setDataClassVersion(1); 1218 // OptimalExposure::FileUtilityCameraData::writeCameraDataFile(anImagingCameraData); 1219 1220 1221 1222 // cameraId = "ZWO CCD ASI290MM Mini"; // 1223 // aCameraGainReadNoiseVector = new QVector<OptimalExposure::CameraGainReadNoise>(); 1224 1225 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(0, 3.23))); 1226 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(50, 2.66))); 1227 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(59, 2.62))); 1228 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(60, 1.66))); 1229 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(100, 1.45))); 1230 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(150, 1.29))); 1231 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(200, 1.13))); 1232 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(250, 1.11))); 1233 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(300, 1.01))); 1234 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(350, 0.96))); 1235 1236 // readModeNumber = 0; 1237 // readModeName = "Standard"; 1238 // aCameraGainReadModeVector = new QVector<OptimalExposure::CameraGainReadMode>(); 1239 // aCameraGainReadModeVector->push_back(*(new OptimalExposure::CameraGainReadMode(readModeNumber, readModeName, 1240 // *aCameraGainReadNoiseVector))); 1241 1242 1243 // gainSelection = new QVector<int>( { 0, 350 } ); 1244 // anImagingCameraData = new OptimalExposure::ImagingCameraData(cameraId, OptimalExposure::SENSORTYPE_MONOCHROME, 1245 // OptimalExposure::GAIN_SELECTION_TYPE_NORMAL, *gainSelection, *aCameraGainReadModeVector); 1246 // anImagingCameraData->setDataClassVersion(1); 1247 // OptimalExposure::FileUtilityCameraData::writeCameraDataFile(anImagingCameraData); 1248 1249 1250 1251 1252 1253 1254 1255 1256 // cameraId = "QHY CCD 533M"; // Assuming the QHY cameraId appear similar to ZWO 1257 // aCameraGainReadNoiseVector = new QVector<OptimalExposure::CameraGainReadNoise>(); 1258 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(0, 3.34))); 1259 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(5, 3.3))); 1260 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(10, 3.32))); 1261 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(15, 3.4))); 1262 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(20, 3.3))); 1263 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(25, 3.22))); 1264 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(30, 3.19))); 1265 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(35, 3.09))); 1266 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(40, 3.18))); 1267 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(45, 3.12))); 1268 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(50, 3.05))); 1269 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(55, 2.93))); 1270 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(60, 1.66))); // pronounced step 1271 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(65, 1.6))); 1272 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(70, 1.56))); 1273 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(75, 1.54))); 1274 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(80, 1.51))); 1275 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(85, 1.45))); 1276 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(90, 1.4))); 1277 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(95, 1.34))); 1278 1279 // readModeNumber = 0; 1280 // readModeName = "Standard"; 1281 1282 // aCameraGainReadModeVector = new QVector<OptimalExposure::CameraGainReadMode>(); 1283 // aCameraGainReadModeVector->push_back(*(new OptimalExposure::CameraGainReadMode(readModeNumber, readModeName, 1284 // *aCameraGainReadNoiseVector))); 1285 1286 1287 // gainSelection = new QVector<int>( { 0, 95 } ); 1288 // anImagingCameraData = new OptimalExposure::ImagingCameraData(cameraId, OptimalExposure::SENSORTYPE_MONOCHROME, 1289 // OptimalExposure::GAIN_SELECTION_TYPE_NORMAL, *gainSelection, *aCameraGainReadModeVector); 1290 // anImagingCameraData->setDataClassVersion(1); 1291 // OptimalExposure::FileUtilityCameraData::writeCameraDataFile(anImagingCameraData); 1292 1293 1294 1295 // cameraId = "MI CCD C3"; // Not sure how Moravian cameras appear on USB or KStars, need research. 1296 // aCameraGainReadNoiseVector = new QVector<OptimalExposure::CameraGainReadNoise>(); 1297 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(0, 3.51))); 1298 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(2749, 3.15))); 1299 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(2750, 1.46))); 1300 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(4030, 1.39))); 1301 1302 // readModeNumber = 0; 1303 // readModeName = "Standard"; 1304 1305 // aCameraGainReadModeVector = new QVector<OptimalExposure::CameraGainReadMode>(); 1306 // aCameraGainReadModeVector->push_back(*(new OptimalExposure::CameraGainReadMode(readModeNumber, readModeName, 1307 // *aCameraGainReadNoiseVector))); 1308 1309 // gainSelection = new QVector<int>( { 0, 4030 } ); 1310 // anImagingCameraData = new OptimalExposure::ImagingCameraData(cameraId, OptimalExposure::SENSORTYPE_MONOCHROME, 1311 // OptimalExposure::GAIN_SELECTION_TYPE_NORMAL, *gainSelection, *aCameraGainReadModeVector); 1312 // anImagingCameraData->setDataClassVersion(1); 1313 // OptimalExposure::FileUtilityCameraData::writeCameraDataFile(anImagingCameraData); 1314 1315 1316 // // DSLR Read-noise for ISO values data found at: https://www.photonstophotos.net/Charts/RN_e.htm 1317 1318 // // For a Nikon D5000 usb id reads "Nikon Corp. D5000", Kstars shows "Nikon DSLR DSC D5000 (PTP mode)" 1319 // cameraId = "Nikon DSLR DSC D5000 (PTP mode)"; 1320 // aCameraGainReadNoiseVector = new QVector<OptimalExposure::CameraGainReadNoise>(); 1321 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(100, 7.727))); // log2 value 2.95 1322 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(126, 7.674))); // log2 value 2.94 1323 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(159, 7.727))); // log2 value 2.95 1324 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(200, 6.320))); // log2 value 2.36) 1325 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(251, 5.134))); // log2 value 2.36) 1326 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(318, 5.169))); // log2 value 2.37 1327 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(400, 4.532))); // log2 value 2.18 1328 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(503, 4.79))); // log2 value 2.26 1329 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(636, 5.169))); // log2 value 2.37 1330 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(800, 4.925))); // log2 value 2.3 1331 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(1006, 4.891))); // log2 value 2.29 1332 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(1273, 4.724))); // log2 value 2.24 1333 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(1600, 4.5))); // log2 value 2.17 1334 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(2011, 4.028))); // log2 value 2.01 1335 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(2546, 3.34))); // log2 value 1.74 1336 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(3200, 2.969))); // log2 value 1.57 1337 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(4022, 2.828))); // log2 value 1.5 1338 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(5091, 2.789))); // log2 value 1.48 1339 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(6400, 2.732))); // log2 value 1.45 1340 1341 // readModeNumber = 0; 1342 // readModeName = "Standard"; 1343 // aCameraGainReadModeVector = new QVector<OptimalExposure::CameraGainReadMode>(); 1344 // aCameraGainReadModeVector->push_back(*(new OptimalExposure::CameraGainReadMode(readModeNumber, readModeName, 1345 // *aCameraGainReadNoiseVector))); 1346 1347 1348 // // Unfortunately this data from www.photonstophotos.net does not align precisely with the discrete values for the ISO in the camera. 1349 // // So, the proof of concept code, which needs a list of iso values will use an array from the file. 1350 // // The following array would likely come from Ekos with getActiveChip()->getISOList() ? 1351 1352 // gainSelection = new QVector<int>( { 100, 125, 160, 250, 320, 400, 500, 640, 800, 1000, 1250, 1600, 2000, 2500, 3200, 4000, 5000, 6400 } ); 1353 // anImagingCameraData = new OptimalExposure::ImagingCameraData(cameraId, OptimalExposure::SENSORTYPE_COLOR, 1354 // OptimalExposure::GAIN_SELECTION_TYPE_ISO_DISCRETE, *gainSelection, *aCameraGainReadModeVector); 1355 // anImagingCameraData->setDataClassVersion(1); 1356 // OptimalExposure::FileUtilityCameraData::writeCameraDataFile(anImagingCameraData); 1357 1358 1359 // // Driver id is "Canon DSLR" 1360 // cameraId = "Canon DSLR EOS Ra"; // Not sure how Canon cameras appear on USB, or KStars need research. 1361 1362 // aCameraGainReadNoiseVector = new QVector<OptimalExposure::CameraGainReadNoise>(); 1363 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(100, 9.063))); // log2 value 3.18 1364 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(126, 10.2))); 1365 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(159, 5.58))); 1366 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(200, 4.96))); 1367 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(251, 5.46))); 1368 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(318, 3.14))); 1369 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(400, 3.18))); 1370 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(503, 3.34))); 1371 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(636, 2.41))); 1372 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(800, 2.41))); 1373 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(1006, 2.48))); 1374 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(1273, 1.92))); 1375 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(1600, 1.91))); 1376 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(2011, 1.91))); 1377 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(2546, 1.65))); 1378 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(3200, 1.67))); 1379 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(4022, 1.68))); 1380 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(5091, 1.4))); 1381 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(6400, 1.38))); 1382 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(8045, 1.36))); 1383 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(10183, 1.38))); 1384 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(12800, 1.38))); 1385 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(16090, 1.38))); 1386 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(20366, 1.34))); 1387 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(25600, 1.33))); 1388 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(32180, 1.35))); 1389 // aCameraGainReadNoiseVector->push_back(*(new OptimalExposure::CameraGainReadNoise(40731, 1.34))); 1390 1391 1392 // readModeNumber = 0; 1393 // readModeName = "Standard"; 1394 1395 // aCameraGainReadModeVector = new QVector<OptimalExposure::CameraGainReadMode>(); 1396 // aCameraGainReadModeVector->push_back(*(new OptimalExposure::CameraGainReadMode(readModeNumber, readModeName, 1397 // *aCameraGainReadNoiseVector))); 1398 1399 // gainSelection = new QVector<int>( { 100, 125, 160, 200, 250, 320, 400, 500, 640, 800, 1000, 1250, 1600, 2000, 2500, 3200, 4000, 5000, 6400, 8000, 10200, 12800, 16000, 20400, 25600, 32000, 40000 } ); 1400 1401 // anImagingCameraData = new OptimalExposure::ImagingCameraData(cameraId, OptimalExposure::SENSORTYPE_COLOR, 1402 // OptimalExposure::GAIN_SELECTION_TYPE_ISO_DISCRETE, *gainSelection, *aCameraGainReadModeVector); 1403 // anImagingCameraData->setDataClassVersion(1); 1404 // OptimalExposure::FileUtilityCameraData::writeCameraDataFile(anImagingCameraData); 1405 1406 1407 1408 //} 1409