/********************************************************************
 *                                                                  *
 *   CONFIG: Makes the configuration of the beginning.              *
 *                                                                  *    
 *   (c) 2004 by Bernd Vollmer, CDS, Observatoire de Strasbourg     *
 *                                                                  *
 ********************************************************************/
#include "code.h"


void config(void)
{	
	FILE *datei_ptr;
	real a1,a2,a3,a4,a5,a6,a10,a11,a12;
	real b1,b2,b3,b4,b5,b6,r,v;
	long zulong1,zulong2,zulong3;
	real aaa,aab,help1,rsc,vsc,x,y,thetahelp;
	int aa1,aa2,aa3,aa4,aa5,aa6,a7,a8,a9,ac,i;
	bodyptr p,pq;
	char cc[20],dd[30],ee[20];
	vector rrr,sss,cmr,cmv;
       
	b6=0;
	sprintf(dd,"catalogues/%s",dateiname);
	datei_ptr=fopen(dd,"r");
	
	fscanf(datei_ptr,"%i %f %f \n",&aa1,&b1,&b2);
	zaehler=aa1;
	printf("%i, %10.8e %10.8e \n",aa1,b1,b2);
	ac=0;
	p=bodytab+nbody;
	if (pole == 0) {
	  for (i=0;i<zaehler;i++){
	    fscanf(datei_ptr,"%f %f %f %f %f %f %d %d %d %f %f %f %s %s \n",&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8,&a9,&a10,&a11,&a12,&cc,&ee);
	    a1=a1*15;
	    if (fabs(a3) <= 2.52e5+3.*maxstr) { 
	      if (a1 >= minborder && a1 < maxborder ) {
		Frequency(p)=b1;
		Resolution(p)=resol*60.;
		Type(p)=BODY;
		Mass(p)=1.0;
		Pos(p)[0]=a1;
		Pos(p)[1]=a3;
		Raerror(p)=a2;
		Decerror(p)=a4;
		Flux(p)=a5;
		Fluxerror(p)=a6;
		Wflag(p)=a7;
		Cflag(p)=a8;
		Eflag(p)=a9;
		Majaxis(p)=a10*b2*60.;
		Minaxis(p)=a11*b2*60.;
		PA(p)=a12;
		sprintf(Name(p),"%s %s",cc,ee);
		b6=MAX(b6,Majaxis(p));
		Nparents(p)=Nbrothers(p)=Nsons(p)=0;
		p++;
		ac++;
	      }
	      else if (minborder < 0.) {
		if (a1 > 1.296e6+minborder) {
		  Frequency(p)=b1;
		  Resolution(p)=resol*60.;
		  Type(p)=BODY;
		  Mass(p)=1.0;
		  Pos(p)[0]=a1;
		  Pos(p)[1]=a3;
		  Raerror(p)=a2;
		  Decerror(p)=a4;
		  Flux(p)=a5;
		  Fluxerror(p)=a6;
		  Wflag(p)=a7;
		  Cflag(p)=a8;
		  Eflag(p)=a9;
		  Majaxis(p)=a10*b2*60.;
		  Minaxis(p)=a11*b2*60.;
		  PA(p)=a12;
		  sprintf(Name(p),"%s %s",cc,ee);
		  b6=MAX(b6,Majaxis(p));
		  Nparents(p)=Nbrothers(p)=Nsons(p)=0;
		  p++;
		  ac++;
		}
	      }
	      else if (maxborder > 1.296e6) {
		if (a1 < maxborder-1.296e6) {
		  Frequency(p)=b1;
		  Resolution(p)=resol*60.;
		  Type(p)=BODY;
		  Mass(p)=1.0;
		  Pos(p)[0]=a1;
		  Pos(p)[1]=a3;
		  Raerror(p)=a2;
		  Decerror(p)=a4;
		  Flux(p)=a5;
		  Fluxerror(p)=a6;
		  Wflag(p)=a7;
		  Cflag(p)=a8;
		  Eflag(p)=a9;
		  Majaxis(p)=a10*b2*60.;
		  Minaxis(p)=a11*b2*60.;
		  PA(p)=a12;
		  sprintf(Name(p),"%s %s",cc,ee);
		  b6=MAX(b6,Majaxis(p));
		  Nparents(p)=Nbrothers(p)=Nsons(p)=0;
		  p++;
		  ac++;
		}
	      }
	    }
	  }	
	} else if (pole == 1) {
	  for (i=0;i<zaehler;i++){
	    fscanf(datei_ptr,"%f %f %f %f %f %f %d %d %d %f %f %f %s %s \n",&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8,&a9,&a10,&a11,&a12,&cc,&ee);
	    a1=a1*15;
	    if (a3 < -2.52e5+3.*maxstr) { 
	      Frequency(p)=b1;
	      Resolution(p)=resol*60.;
	      Type(p)=BODY;
	      Mass(p)=1.0;
	      Pos(p)[0]=a1;
	      Pos(p)[1]=a3;
	      Raerror(p)=a2;
	      Decerror(p)=a4;
	      Flux(p)=a5;
	      Fluxerror(p)=a6;
	      Wflag(p)=a7;
	      Cflag(p)=a8;
	      Eflag(p)=a9;
	      Majaxis(p)=a10*b2*60.;
	      Minaxis(p)=a11*b2*60.;
	      PA(p)=a12;
	      sprintf(Name(p),"%s %s",cc,ee);
	      b6=MAX(b6,Majaxis(p));
	      Nparents(p)=Nbrothers(p)=Nsons(p)=0;
	      p++;
	      ac++;
	    }
	  }
	} else if (pole == 2) {
	  for (i=0;i<zaehler;i++){
	    fscanf(datei_ptr,"%f %f %f %f %f %f %d %d %d %f %f %f %s %s \n",&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8,&a9,&a10,&a11,&a12,&cc,&ee);
	    a1=a1*15;
	    if (a3 > 2.52e5-3.*maxstr) { 
	      Frequency(p)=b1;
	      Resolution(p)=resol*60.;
	      Type(p)=BODY;
	      Mass(p)=1.0;
	      Pos(p)[0]=a1;
	      Pos(p)[1]=a3;
	      Raerror(p)=a2;
	      Decerror(p)=a4;
	      Flux(p)=a5;
	      Fluxerror(p)=a6;
	      Wflag(p)=a7;
	      Cflag(p)=a8;
	      Eflag(p)=a9;
	      Majaxis(p)=a10*b2*60.;
	      Minaxis(p)=a11*b2*60.;
	      PA(p)=a12;
	      sprintf(Name(p),"%s %s",cc,ee);
	      b6=MAX(b6,Majaxis(p));
	      Nparents(p)=Nbrothers(p)=Nsons(p)=0;
	      p++;
	      ac++;
	    }
	  }
	}
	fclose(datei_ptr);
	printf("largest extent = %5.3e arcsec \n",b6);
	thetahelp=MAX(b6,b2*60.);
	theta=MAX(theta,thetahelp);
        printf("theta= %5.3e arcsec \n",theta);

	nbody+=ac;
	printf("file read...\n");
	
}	




/*
 * OUTPUT: Output in File "output.dat".
 */
 
extern real em1,em2; 
extern int totalnum1, totalnum2, totalnum3, totalnum4, totalnum5, nnbody, jj;

void output(void)
{	 
	FILE *datei_ptr;
	bodyptr p,pq,pr;
	int i, j, iii, jjj, qwe, strc, help1;
	char Datei[13],aaa[1000],bbb[1000],ccc[1000],ddd[4];
	real help,pos1,pos2,radiff,decdiff,fluxdiff,helpp;
	vector p1, p2;
	catalogueptr rr, ss;

	sprintf(Datei,"Datei%i.dat",jj);	  
	jjj=0;
	for (p=bodytab;p<bodytab+nbody;p++) Done(p)=FALSE;
	for (p=bodytab;p<bodytab+nbody;p++) {
	  qwe=0;
	  if (pole == 0 && Pos(p)[0] >= em1 && Pos(p)[0] < em2 && fabs(Pos(p)[1]) < 2.52e5) qwe=1;
	  if (pole == 1 && Pos(p)[1] <= -2.52e5) qwe=1;
	  if (pole == 2 && Pos(p)[1] >= 2.52e5) qwe=1;
	  if (qwe == 1) {
	    iii=Nparents(p)+Nbrothers(p)+Nsons(p);
	    if (iii > 0) {
	      jjj++;
	      totalnum1++;
	      if (Specindx(p) != 0.0) totalnum2++;
	      sprintf(aaa,Name(p));
	      if (Done(p) == FALSE) totalnum3++;
	      Done(p)=TRUE;
	      if (Nparents(p) > 0) for (i=0;i<Nparents(p);i++) sprintf(aaa,"%s  %s%",aaa,Name(Parents(p)[i]));
	      sprintf(bbb,"%f %i",Specindx(p),Resolved(p));
	      if (Nbrothers(p) > 0) for (i=0;i<Nbrothers(p);i++) {
		sprintf(bbb,"%s  %s%",bbb,Name(Brothers(p)[i]));
		Done(Brothers(p)[i])=TRUE;
	      }
	      sprintf(ccc,"               ");
	      if (Nsons(p) > 0) for (i=0;i<Nsons(p);i++) sprintf(ccc,"%s  %s%",ccc,Name(Sons(p)[i]));
	      datei_ptr=fopen(Datei,"a");
	      fprintf(datei_ptr,"%s \n",aaa);
	      fprintf(datei_ptr,"%s \n",bbb);
	      fprintf(datei_ptr,"%s \n",ccc);
	      fclose(datei_ptr);
	    }
	  }
	}
	printf("file %s written \n",Datei);
	printf("number of output sources: %i \n",jjj);
	nnbody+=nbody;
	
	
	for (p=bodytab;p<bodytab+nbody;p++) Done(p)=FALSE;
	sprintf(Datei,"Spektren%i.dat",1);
	datei_ptr=fopen(Datei,"a");
	for (p=bodytab;p<bodytab+nbody;p++){
	  qwe=0;
	  if (pole == 0 && Pos(p)[0] >= em1 && Pos(p)[0] < em2 && fabs(Pos(p)[1]) < 2.52e5) qwe=1;
	  if (pole == 1 && Pos(p)[1] <= -2.52e5) qwe=1;
	  if (pole == 2 && Pos(p)[1] >= 2.52e5) qwe=1;
	  if (qwe == 1) {
	    iii=Nparents(p)+Nbrothers(p)+Nsons(p);
	    if (iii > 0) {  
	      if (Specindx(p) != 0.0 && Done(p) == FALSE) {
		j=1;
		fprintf(datei_ptr,"%s \n",Name(p));
		fprintf(datei_ptr,"%i  %10.8e %10.8e \n",Nbrothers(p)+1,Absz(p),Specindx(p));
		fprintf(datei_ptr,"%10.8e  %10.8e  %10.8e  \n",Frequency(p),Flux(p),Fluxerror(p));
		totalnum4++;
		if (Specindx(p) > -0.5) totalnum5++;
		Done(p)=TRUE;
		for (i=0;i<Nbrothers(p);i++) {
		  Done(Brothers(p)[i])=TRUE;
		  pq=(bodyptr) Brothers(p)[i];
		  fprintf(datei_ptr,"%10.8e   %10.8e   %10.8e  \n",Frequency(pq),Flux(pq),Fluxerror(pq));
		}
	      }
	    }
	  }
	}
	fclose(datei_ptr);
	
	sprintf(Datei,"Spektren%i.dat",2);
	datei_ptr=fopen(Datei,"a");
	for (p=bodytab;p<bodytab+nbody;p++){
	  if (Specindx(p) != 0.0) {
	    qwe=0;
	    if (pole == 0 && Pos(p)[0] >= em1 && Pos(p)[0] < em2 && fabs(Pos(p)[1]) < 2.52e5) qwe=1;
	    if (pole == 1 && Pos(p)[1] <= -2.52e5) qwe=1;
	    if (pole == 2 && Pos(p)[1] >= 2.52e5) qwe=1;
	    if (qwe == 1) {
	      help1=0;
	      for (i=0;i<Nbrothers(p);i++) {
		sprintf(ddd,"%s","NVSS");
		strc=strncmp(Name(Brothers(p)[i]),ddd,4);
		if (strc == 0) help1=i;
	      }
	      radiff=decdiff=fluxdiff=0.;
	      if (help1 > 0) {
		SETV(p1,Pos(p));
		SETV(p2,Pos(Brothers(p)[help1]));
		p1[1]=p2[1];
		DISTV1(radiff,p1,p2);
		if (p1[0]-p2[0] != 0.0) radiff*=(p1[0]-p2[0])/fabs(p1[0]-p2[0]);
		SETV(p1,Pos(p));
		p1[0]=p2[0];
		DISTV1(decdiff,p1,p2);
		if (p1[1]-p2[1] != 0.0) decdiff*=(p1[1]-p2[1])/fabs(p1[1]-p2[1]);
		helpp=Absz(p)+Specindx(p)*log10(Frequency(p));
		fluxdiff=Flux(p)-pow(10.,helpp);
	      }
	      fprintf(datei_ptr,"%s \n",Name(p));
	      fprintf(datei_ptr,"%i  %10.8e %10.8e \n",Nbrothers(p)+1,Absz(p),Specindx(p));
	      fprintf(datei_ptr,"%10.8e  %10.8e  %10.8e  %10.8e  %10.8e \n",Frequency(p),Flux(p),Fluxerror(p),Pos(p)[0],Pos(p)[1]);
	      fprintf(datei_ptr,"%10.8e  %10.8e  %10.8e \n",fluxdiff,radiff,decdiff);
	      for (i=0;i<Nbrothers(p);i++) {
		pq=(bodyptr) Brothers(p)[i];
		fprintf(datei_ptr,"%s\n",Name(pq));
		fprintf(datei_ptr,"%10.8e   %10.8e   %10.8e  %10.8e  %10.8e \n",Frequency(pq),Flux(pq),Fluxerror(pq),Pos(pq)[0],Pos(pq)[1]);
	      }
	    }
	  }
	}
	fclose(datei_ptr);	
}	


