27 #include <QtCore/QDataStream>
50 sincos(2.0*M_PI*r, &s, &c);
51 a =
k_*
k_ + 2.0*
k_*c + 1.0;
53 d =
k_*(1.0 -
k_)*r*(1.0 - c)/f/(1.0 +
k_)/a;
68 dR_ = u*getX() + v*getY();
69 sincos(2.0*M_PI*dR_, &dS_, &dC_);
87 return "SgVlbiSourceInfo";
118 aprioriReference_(src.getAprioriReference()),
119 aprioriComments_(src.getAprioriComments()),
149 long double sdn1=0.0, cdn1=0.0, sdn2=0.0, cdn2=0.0;
150 long double cdra=0.0;
153 return sqrt((ra_1-ra_2)*(ra_1-ra_2)*cos(dn_1)*cos(dn_1) + (dn_1-dn_2)*(dn_1-dn_2));
156 sincosl(dn_1, &sdn1, &cdn1);
157 sincosl(dn_2, &sdn2, &cdn2);
158 cdra = cosl(ra_1 - ra_2);
159 return acosl(sdn1*sdn2 + cdn1*cdn2*cdra);
172 nHour = (int)(dTmp/3600.0/1000.0);
173 nMin = (int)((dTmp - 3600.0*1000.0*nHour)/60.0/1000.0);
174 dSec = (dTmp - 3600.0*1000.0*nHour - 60.0*1000.0*nMin)/1000.0;
176 str.sprintf(
"%02d %02d %011.8f", nHour, nMin, dSec);
189 char cSign=mandatorySign?
'+':
' ';
197 nDeg = (int)(dTmp/3600/1000.0);
198 nMin = (int)((dTmp - 3600.0*1000.0*nDeg)/60.0/1000.0);
199 dSec = (dTmp - 3600.0*1000.0*nDeg - 60.0*1000.0*nMin)/1000.0;
201 str.sprintf(
"%c%02d %02d %011.8f", cSign, nDeg, nMin, dSec);
211 QString prefix =
"Src " +
getKey().leftJustified(8,
' ') +
": ";
216 for (
int i=0; i<
sModel_.size(); i++)
240 for (
int i=0; i<
sModel_.size(); i++)
271 if (s.status() == QDataStream::Ok)
274 for (
int i=0; i<
sModel_.size(); i++)
281 return s.status() == QDataStream::Ok;
291 if (s.status() == QDataStream::Ok)
297 for (
int i=0; i<n; i++)
299 s >> k >> b >> x >> y
304 return s.status()==QDataStream::Ok;
317 double s1, s2, s3, s4, s5;
318 double ss1, ss2, ss3;
320 s1 = s2 = s3 = s4 = s5 = ss1 = ss2 = ss3 = 0.0;
322 for (
int i=0; i<n; i++)
332 for (
int i=0; i<n-1; i++)
333 for (
int j=i+1; j<n; j++)
335 double sPhi_ij, cPhi_ij;
337 sincos(2.0*M_PI*(
sModel_.at(i).getR() -
sModel_.at(j).getR()), &sPhi_ij, &cPhi_ij);
348 dT1 = -1.0/(2.0*M_PI*f)*(s1 + ss1);
349 dT2 = -1.0/f*(s2 + s3 + ss2);
350 dQ = 1.0 + s4 + 2.0*(s5 + ss3);
361 double f,
double u,
double v)
367 double s1, s2, s3, s4, s5;
368 double ss1, ss2, ss3;
370 s1 = s2 = s3 = s4 = s5 = ss1 = ss2 = ss3 = 0.0;
371 for (
int i=0; i<n; i++)
381 for (
int i=0; i<n-1; i++)
382 for (
int j=i+1; j<n; j++)
384 double sPhi_ij, cPhi_ij;
385 sincos(2.0*M_PI*(
sModel_.at(i).getR() -
sModel_.at(j).getR()), &sPhi_ij, &cPhi_ij);
393 dT1 = -1.0/(2.0*M_PI*f)*(s1 + ss1);
394 dT2 = -1.0/f*(s2 + s3 + ss2);
395 dQ = 1.0 + s4 + 2.0*(s5 + ss3);
397 for (
int l=0; l<n; l++)
399 double dCl=
sModel_.at(l).getC();
400 double dSl=
sModel_.at(l).getS();
401 double dRl=
sModel_.at(l).getR();
402 double dKl=
sModel_.at(l).getK();
403 double dBl=
sModel_.at(l).getB();
404 double t1L, t1R, t2L, t2R, t3L, t3R, t4L, t4R, t5L, t5R, t6L, t6R;
405 t1L = t1R = t2L = t2R = t3L = t3R = t4L = t4R = t5L = t5R = t6L = t6R = 0.0;
407 double sPhi_il, cPhi_il;
408 double sPhi_li, cPhi_li;
411 for (
int i=0; i<l; i++)
413 sincos(2.0*M_PI*(
sModel_.at(i).getR() -
sModel_.at(l).getR()), &sPhi_il, &cPhi_il);
417 t1L =
sModel_.at(i).getK()*sPhi_il;
420 t4L =
sModel_.at(i).getK()*cPhi_il;
425 for (
int i=l+1; i<n; i++)
427 sincos(2.0*M_PI*(
sModel_.at(i).getR() -
sModel_.at(l).getR()), &sPhi_il, &cPhi_il);
431 t1R =
sModel_.at(i).getK()*sPhi_li;
434 t4R =
sModel_.at(i).getK()*cPhi_li;
438 double dTau1_dBl, dTau1_dKl, dTau2_dKl, dQ_dKl, dTau1_dRl, dTau2_dRl, dQ_dRl;
440 dTau1_dBl = -dKl/(2.0*M_PI*f)*(dSl - t1L + t1R);
442 dTau1_dKl = -1.0/(2.0*M_PI*f)*(dBl*dSl + t2L + t2R);
443 dTau2_dKl = -1.0/f*(dRl*(dCl + 2.0*dKl) + t3L + t3R);
444 dQ_dKl = 2.0*(dKl + dCl + t4L + t4R);
446 dTau1_dRl = -dKl/f*(dBl*dCl - t5L + t5R);
447 dTau2_dRl = -dKl/f*(dCl + dKl - 2.0*M_PI*dRl*dSl + t4L + t4R + 2.0*M_PI*(t6L - t6R));
448 dQ_dRl = -4.0*M_PI*dKl*(dSl - t1L + t1R);
453 d = (dTau1_dKl + dTau2_dKl)/dQ - (dT1 + dT2)*dQ_dKl/dQ/dQ;
455 parameters.append(
sModel_[l].pK());
461 parameters.append(
sModel_[l].pB());
466 d = (dTau1_dRl + dTau2_dRl)/dQ - (dT1 + dT2)*dQ_dRl/dQ/dQ;
469 parameters.append(
sModel_[l].pX());
470 parameters.append(
sModel_[l].pY());
524 if (!(bitArray & (1<<0)))
528 if (bitArray & (1<<2|1<<3))
538 for (
int i=0; i<n; i++)
540 if (
sModel_.at(i).getEstimateRatio())
542 if (
sModel_.at(i).getEstimateSpIdx())
544 if (
sModel_.at(i).getEstimatePosition())
#define RAD2MAS
radians to ms:
bool isAttr(uint a) const
bool loadIntermediateResults(QDataStream &)
const QString & getKey() const
bool saveIntermediateResults(QDataStream &) const
bool getEstimateRatio() const
void prepareModel(double u, double v)
bool getEstimatePosition() const
bool getEstimateSpIdx() const
double tauS(double f, double u, double v) const
SgVlbiSourceInfo(int idx=-1, const QString &key="Unknown", const QString &aka="Unknown too")
double tauS(double f, double u, double v)
static QString dn2String(double dn, bool mandatorySign=false)
void applyStatusBits(short bitArray)
static const QString className()
int procdScanNum_
total number of scans for the source;
double RA_
number of processed scans for the source;
bool isSsModelEstimating_
int calcNumOfEstimatedSsmParameters() const
bool loadIntermediateResults(QDataStream &)
void processPartials4SrcStructModel(QList< SgParameter * > ¶meters, double f, double u, double v)
QString aprioriReference_
QList< StructModelMp > sModel_
static QString ra2String(double ra)
bool saveIntermediateResults(QDataStream &) const
static double arcLength(double ra_1, double dn_1, double ra_2, double dn_2)
short calculateStatusBits()
@ Attr_NOT_VALID
omit the source;
@ Attr_ESTIMATE_COO
estimate source position;