References DinverDCGui::ViewerParam::autocorr(), DinverDCGui::ViewerParam::dispersion(), Ellipticity, DinverDCGui::ViewerParam::ellipticity(), QGpCoreTools::endl(), SciFigs::GraphicSheet::exportFile(), DinverDCGui::ViewerParam::groundProfile(), help(), DinverDCGui::DCModelViewer::initGraphs(), DinverDCGui::DCModelViewer::loadModels(), mode, DinverDCGui::ViewerParam::refractionVp(), DinverDCGui::ViewerParam::refractionVs(), SAFE_UNINITIALIZED, DinverDCGui::DCModelViewer::selectModels(), DinverDCGui::DCModelViewer::setFrequencyAxis(), DinverDCGui::DCModelViewer::setMode(), QGpCoreWave::Mode::setPolarisation(), QGpCoreWave::Mode::setSlowness(), DinverDCGui::DCModelViewer::setTarget(), DinverDCGui::DCModelViewer::sheet(), QGpCoreTools::tr(), w, and QGpCoreTools::XMLHeader::xml_restoreFile().
{
Application a(argc, argv, help);
SciFigsGlobal s;
enum PlotType {Profile, Dispersion, Ellipticity, Autocorr, RefraVp, RefraVs};
PlotType plotType=Profile;
bool skipDialog=false;
int nGraphs=1;
double maxMisfit=1.0;
QString exportFile;
QString exportFormat="PAGE";
int dpi=0;
QString targetFile;
Mode mode;
int i, j=1;
for(i=1; i<argc; i++) {
QByteArray arg=argv[i];
if(arg[0]=='-') {
if(arg=="-profile") {
plotType=Profile;
} else if(arg=="-dispersion") {
plotType=Dispersion;
} else if(arg=="-ellipticity") {
plotType=Ellipticity;
} else if(arg=="-autocorr") {
plotType=Autocorr;
} else if(arg=="-refraVp") {
plotType=RefraVp;
} else if(arg=="-refraVs") {
plotType=RefraVs;
} else if(arg=="-m") {
CoreApplication::checkOptionArg(i, argc, argv);
maxMisfit=atof(argv[i]);
skipDialog=true;
} else if(arg=="-n") {
CoreApplication::checkOptionArg(i, argc, argv);
nGraphs=atoi(argv[i]);
skipDialog=true;
} else if(arg=="-s") {
CoreApplication::checkOptionArg(i, argc, argv);
mode.setSlowness(argv[i] );
skipDialog=true;
} else if(arg=="-p") {
CoreApplication::checkOptionArg(i, argc, argv);
mode.setPolarisation(argv[i] );
skipDialog=true;
} else if(arg=="-target") {
Application::checkOptionArg(i, argc, argv);
targetFile=argv[i];
} else if(arg=="-export" || arg=="-e") {
Application::checkOptionArg(i, argc, argv);
exportFile=argv[i];
} else if(arg=="-format" || arg=="-f") {
Application::checkOptionArg(i, argc, argv);
exportFormat=argv[i];
} else if(arg=="-dpi") {
Application::checkOptionArg(i, argc, argv);
dpi=atoi(argv[i]);
if(dpi>1200) dpi=1200;
else if(dpi<0) dpi=0;
} else {
App::stream() << tr("gpviewdcreport: bad option %1, see --help").arg(argv[i]) << endl;
return 2;
}
} else {
argv[j++]=argv[i];
}
}
if(j < argc) {
argv[j]=0;
argc=j;
}
QStringList reportList;
i=1;
while(i<argc) {
reportList.append(argv[i]);
i++;
}
if(reportList.isEmpty()) {
reportList=Message::getOpenFileNames(tr("View report files"),
tr("Report file (*.report)"));
if(reportList.isEmpty()) {
App::stream() << tr("gpviewdcreport: no report files provided") << endl;
return 2;
}
}
DCModelViewer * w;
SAFE_UNINITIALIZED(w,0);
if(skipDialog) {
switch(plotType) {
case Profile:
w=new GroundModelViewer;
break;
case Dispersion:
w=new DispersionViewer;
w->setMode(mode);
break;
case Ellipticity:
w=new EllipticityViewer;
break;
case Autocorr:
w=new AutocorrViewer;
w->setMode(mode);
w->setFrequencyAxis(true);
break;
case RefraVp:
w=new RefractionVpViewer;
break;
case RefraVs:
w=new RefractionVsViewer;
break;
};
w->initGraphs(nGraphs);
for(QStringList::iterator it=reportList.begin();it!=reportList.end();++it) {
w->selectModels(*it, maxMisfit);
QFileInfo fi(*it);
w->setWindowTitle(w->windowTitle()+" "+fi.completeBaseName());
}
w->loadModels();
} else {
ViewerParam * d=new ViewerParam();
switch(plotType) {
case Profile:
w=d->groundProfile(reportList);
break;
case Dispersion:
w=d->dispersion(reportList);
break;
case Ellipticity:
w=d->ellipticity(reportList);
break;
case Autocorr:
w=d->autocorr(reportList);
break;
case RefraVp:
w=d->refractionVp(reportList);
break;
case RefraVs:
w=d->refractionVs(reportList);
break;
};
delete d;
}
if(!w) return 2;
if(!targetFile.isEmpty()) {
TargetList * tl=new TargetList;
XMLVirtualPlugin plugin(tl, "DispersionCurve");
XMLDinverHeader hdr(&plugin);
if(hdr.xml_restoreFile(targetFile)!=XMLClass::NoError) {
delete w;
delete tl;
return 2;
}
w->setTarget(tl);
}
if( !exportFile.isEmpty()) {
w->sheet()->exportFile(exportFile, exportFormat, dpi);
delete w;
return 0;
} else if(skipDialog) {
w->show();
}
int appReturn=a.exec();
return appReturn;
}