Allink
v0.1
|
00001 #include "../../include/Matematica.h" 00002 #include "../../include/VarDatFile.h" 00003 00004 #include <iostream> 00005 using namespace std; 00006 00007 int main(int argc,char **argv){ 00008 FILE *SEGNALE; 00009 char Uscita[256]; 00010 char Comando[50]; 00011 char Executex[60]; 00012 char Executey[60]; 00013 double *Dis = new double; 00014 int CoordX = 0; 00015 int NBin = 200; 00016 int NMax=0; 00017 int NVar =0; 00018 int CoordY = 1; 00019 int CoordY1 = 1; 00020 int CoordX1 = 1; 00021 int NMedia=10; 00022 int LogLog = 0; 00023 int IfNorm = 0; 00024 int IfBorder = 0; 00025 int NSample = 10; 00026 double *Intervalli; 00027 double *dInter; 00028 //vector <double> st; 00029 double *sp; 00030 double *sw; 00031 double Border[4] = {0.,0.,0.,0.}; 00032 double Param = 1.; 00033 VarDatFile *v1; 00034 Matematica *m1 = new Matematica(); 00035 MOMENTI Mom; 00036 sprintf(Uscita,"Risposta.dat"); 00037 // for(int i=0;i<argc;i++){ 00038 int NFile = 0; 00039 int *ArgFile = (int *)calloc(argc,sizeof(int)); 00040 int IfUser = 1; 00041 int NElMin = 0; 00042 int NElMax = 0; 00043 for(int i=1;i<argc;i++){ 00044 if(!strcmp(*(argv+i),"--col")){ 00045 if(i<argc-1){ 00046 i+=1; 00047 } 00048 } 00049 else if(!strcmp(*(argv+i),"--exec")){ 00050 if(i<argc-1){ 00051 sprintf(Executex,"%s",*(argv+i+1)); 00052 sprintf(Executey,"%s",*(argv+i+2)); 00053 i+=2; 00054 sprintf(Comando,"exec"); 00055 IfUser = 0; 00056 } 00057 } 00058 else if(!strncmp(*(argv+i),"--Border",8)){ 00059 if(argc < i){printf("How many values?\n");return 0;} 00060 sscanf(argv[i+1],"%lf",Border); 00061 sscanf(argv[i+2],"%lf",Border+1); 00062 IfBorder=1; 00063 i+=2; 00064 } 00065 else if(!strncmp(*(argv+i),"-l",2)){ 00066 if(argc < i){printf("Whic log scale?\n");return 0;} 00067 char LogScale[12]; 00068 sscanf(argv[i+1],"%s",LogScale); 00069 LogLog = 0; 00070 if(!strcmp(LogScale,"logx")) 00071 DIS_ADD_TYPE(LogLog,DIS_LOGX); 00072 else if(!strcmp(LogScale,"logy")) 00073 DIS_ADD_TYPE(LogLog,DIS_LOGY); 00074 else if(!strcmp(LogScale,"loglog")) 00075 DIS_ADD_TYPE(LogLog,DIS_LOGLOG); 00076 else{ 00077 printf("Log scale not recognized\n"); 00078 } 00079 i+=1; 00080 } 00081 else if(!strncmp(*(argv+i),"--NElMin",8)){ 00082 if(argc < i){printf("How many values?\n");return 0;} 00083 sscanf(argv[i+1],"%d",&NElMin); 00084 i+=1; 00085 } 00086 else if(!strncmp(*(argv+i),"--NElMax",8)){ 00087 if(argc < i){printf("How many values?\n");return 0;} 00088 sscanf(argv[i+1],"%d",&NElMax); 00089 i+=1; 00090 } 00091 else if(!strncmp(*(argv+i),"-m",2)){ 00092 if(argc < i){printf("which interval for the running average?\n");return 0;} 00093 sscanf(argv[i+1],"%d",&NMedia); 00094 i+=1; 00095 } 00096 else if(!strncmp(*(argv+i),"--norm",6)){ 00097 IfNorm = 1; 00098 } 00099 else if(!strncmp(*(argv+i),"--NSample",8)){ 00100 if(argc < i){printf("How many samples?\n");return 0;} 00101 sscanf(argv[i+1],"%d",&NSample); 00102 i+=1; 00103 } 00104 else if(!strncmp(*(argv+i),"-o",2)){ 00105 if(argc < i){printf("which output file?\n");return 0;} 00106 sscanf(argv[i+1],"%s",Uscita); 00107 i+=1; 00108 } 00109 else if(!strncmp(*(argv+i),"-p",2)){ 00110 if(argc < i){printf("what parameter?\n");return 0;} 00111 sscanf(argv[i+1],"%lf",&Param); 00112 i+=1; 00113 } 00114 else if(!strncmp(*(argv+i),"-v",2)){ 00115 if(argc < i){printf("How many values?\n");return 0;} 00116 sscanf(argv[i+1],"%d",&NBin); 00117 i+=1; 00118 } 00119 else if(!strncmp(*(argv+i),"-x",2)){ 00120 i+=1; 00121 } 00122 else if(!strncmp(*(argv+i),"-y",2)){ 00123 i+=1; 00124 } 00125 else if(!strncmp(*(argv+i),"--",2)){ 00126 sprintf(Comando,"%s",argv[i]+2); 00127 IfUser = 0; 00128 } 00129 else if(strncmp(*(argv+i),"-",1)){ 00130 ArgFile[NFile] = i; 00131 NFile++; 00132 } 00133 } 00134 if(NFile == 0){ 00135 printf("File arguments are missing\n"); 00136 //return 0; 00137 } 00138 v1 = new VarDatFile(argv,ArgFile,NFile,NBin); 00139 for(int i=1;i<argc;i++){ 00140 if(!strncmp(*(argv+i),"-a",2)){ 00141 v1->ImpSequence(); 00142 } 00143 if(!strncmp(*(argv+i),"--col",5)){ 00144 if(argc < i){printf("Which column?\n");return 0;} 00145 sscanf(argv[i+1],"%d",&CoordY); 00146 v1->Punta(CoordY); 00147 i+=1; 00148 } 00149 else if(!strncmp(*(argv+i),"-l",2)){ 00150 if(argc < i){printf("Which coord for the log scale?\n");return 0;} 00151 char LogScale[12]; 00152 sscanf(argv[i+1],"%s",LogScale); 00153 LogLog = 0; 00154 if(!strcmp(LogScale,"logx")) 00155 DIS_ADD_TYPE(LogLog,DIS_LOGX); 00156 else if(!strcmp(LogScale,"logy")) 00157 DIS_ADD_TYPE(LogLog,DIS_LOGY); 00158 else if(!strcmp(LogScale,"loglog")) 00159 DIS_ADD_TYPE(LogLog,DIS_LOGLOG); 00160 else{ 00161 printf("Log scale not recognized\n"); 00162 } 00163 i+=1; 00164 } 00165 else if(!strncmp(*(argv+i),"-y1",3)){ 00166 if(argc < i){printf("Which column?\n");return 0;} 00167 sscanf(argv[i+1],"%d",&CoordY1); 00168 i+=1; 00169 } 00170 else if(!strncmp(*(argv+i),"-x1",3)){ 00171 if(argc < i){printf("Which column?\n");return 0;} 00172 sscanf(argv[i+1],"%d",&CoordX1); 00173 i+=1; 00174 } 00175 else if(!strncmp(*(argv+i),"-x",2)){ 00176 if(argc < i){printf("which x coord?\n");return 0;} 00177 sscanf(argv[i+1],"%d",&CoordX); 00178 v1->ImpCoordX(CoordX); 00179 i+=1; 00180 } 00181 else if(!strncmp(*(argv+i),"-y",2)){ 00182 if(argc < i){printf("Which column?\n");return 0;} 00183 sscanf(argv[i+1],"%d",&CoordY); 00184 v1->ImpCoordY(CoordY); 00185 i+=1; 00186 } 00187 } 00188 NMax = v1->pNMax(); 00189 if(NElMax == 0 || NElMax > NMax) NElMax = NMax; 00190 if(NElMin > NMax || NElMin < 0) NElMin = 0; 00191 NVar = v1->pNVar(); 00192 sp = new double; 00193 sw = new double[NMax]; 00194 Intervalli = new double[NBin]; 00195 dInter = new double[NBin]; 00196 printf("Loaded a file of %d points %d cols from %d files: %s ... to write on %s\n",NMax,NVar,NFile,argv[ArgFile[0]],Uscita); 00197 //goto vet; 00198 v1->pMinMaxGlob(NElMin,NElMax); 00199 while(strcmp(Comando,"q") ){ 00200 if(IfUser){ 00201 printf("Matematica> "); 00202 scanf("%s",Comando); 00203 } 00204 else if(!strcmp(Comando,"agg")){ 00205 char NomeFile[120]; 00206 printf("Nome file :"); 00207 scanf("%s",NomeFile); 00208 v1->Aggiungi(NomeFile); 00209 if(!IfUser) return 0; 00210 } 00211 else if(!strcmp(Comando,"create")){ 00212 FILE *Ciccia = fopen(Uscita,"w"); 00213 if(Ciccia == NULL){printf("%s could not be created\n",Uscita);exit(0);} 00214 int NPassi = 100; 00215 double InvNPassi = 1./(double)NPassi; 00216 double Freq1 = 32.; 00217 double Freq2 = 4.; 00218 for(int px=0;px<NPassi;px++){ 00219 double x = px*InvNPassi*DUE_PI; 00220 fprintf(Ciccia,"%lf %lf\n",x,sin(x*Freq1)); 00221 } 00222 } 00223 else if(!strcmp(Comando,"create2d")){ 00224 FILE *Ciccia = fopen(Uscita,"w"); 00225 int NPassi = 100; 00226 double InvNPassi = 1./(double)NPassi; 00227 double Freq1 = 32.; 00228 double Freq2 = 4.; 00229 int IfOctave = 1; 00230 if(!IfOctave){ 00231 for(int px=0;px<NPassi;px++){ 00232 for(int py=0;py<NPassi;py++){ 00233 double x = px*InvNPassi*DUE_PI; 00234 double y = py*InvNPassi*DUE_PI; 00235 fprintf(Ciccia,"%lf %lf %lf\n",x,y,sin(x*y*Freq1)); 00236 } 00237 } 00238 } 00239 else{ 00240 fprintf(Ciccia,"# Created by ElPoly\n"); 00241 fprintf(Ciccia,"# name: tz\n"); 00242 fprintf(Ciccia,"# type: matrix\n"); 00243 fprintf(Ciccia,"# rows: %d\n",NPassi); 00244 fprintf(Ciccia,"# columns: %d\n",NPassi); 00245 for(int px=0;px<NPassi;px++){ 00246 for(int py=0;py<NPassi;py++){ 00247 double x = px*InvNPassi*DUE_PI; 00248 double y = py*InvNPassi*DUE_PI; 00249 fprintf(Ciccia,"%lf ",sin(x*y*Freq2)); 00250 } 00251 fprintf(Ciccia,"\n"); 00252 } 00253 } 00254 fclose(Ciccia); 00255 if(!IfUser) return 0; 00256 } 00257 else if(!strcmp(Comando,"dis")){ 00258 Mom = v1->DistrGaussSegnale(NElMin,NElMax,IfNorm); 00259 FILE *USCITA; 00260 if((USCITA = fopen(Uscita,"w"))==0){ 00261 printf("Non s'apre %s\n Permessi?\n",Uscita); 00262 } 00263 fprintf(USCITA,"# %lf %lf %lf\n",Mom.Uno,Mom.Due,Mom.Tre); 00264 for(int i=0;i<NBin;i++){ 00265 double x = Mom.Delta*i+Mom.Min; 00266 fprintf(USCITA,"%lf %g\n",x,v1->pInter(i)); 00267 } 00268 fclose(USCITA); 00269 printf("Media %lf Scarto %lf N %d\n",Mom.Uno,Mom.Due,Mom.Num); 00270 if(!IfUser) return 0; 00271 } 00272 else if(!strcmp(Comando,"disErr")){ 00273 Mom = v1->DistrSignErr(NElMin,NElMax,Border,IfNorm); 00274 FILE *USCITA; 00275 if((USCITA = fopen(Uscita,"w"))==0){ 00276 printf("Non s'apre %s\n Permessi?\n",Uscita); 00277 } 00278 fprintf(USCITA,"# %lf %lf %lf\n",Mom.Uno,Mom.Due,Mom.Tre); 00279 for(int i=0;i<NBin;i++){ 00280 double x = Mom.Delta*i+Mom.Min; 00281 fprintf(USCITA,"%lf %g %g\n",x,v1->pInter(i),v1->pError(i)); 00282 } 00283 fclose(USCITA); 00284 printf("Media %lf Scarto %lf N %d\n",Mom.Uno,Mom.Due,Mom.Num); 00285 if(!IfUser) return 0; 00286 } 00287 else if(!strcmp(Comando,"disB")){ 00288 Mom = v1->DistrSegnale(NElMin,NElMax,Border,IfNorm); 00289 FILE *USCITA; 00290 if((USCITA = fopen(Uscita,"w"))==0){ 00291 printf("Non s'apre %s\n Permessi?\n","Distribuzione.dat"); 00292 } 00293 fprintf(USCITA,"# %lf %lf %lf\n",Mom.Uno,Mom.Due,Mom.Tre); 00294 for(int i=0;i<NBin;i++){ 00295 double x = Mom.Delta*i+Mom.Min; 00296 fprintf(USCITA,"%lf %g\n",x,v1->pInter(i)); 00297 } 00298 fclose(USCITA); 00299 printf("Media %lf Scarto %lf N %d\n",Mom.Uno,Mom.Due,Mom.Num); 00300 if(!IfUser) return 0; 00301 } 00302 else if(!strcmp(Comando,"disLog")){ 00303 Mom = v1->DistrLogSegnale(NElMin,NElMax,IfNorm); 00304 FILE *USCITA; 00305 if((USCITA = fopen(Uscita,"w"))==0){ 00306 printf("Non s'apre %s\n Permessi?\n","Distribuzione.dat"); 00307 } 00308 fprintf(USCITA,"# %lf %lf %lf\n",Mom.Uno,Mom.Due,Mom.Tre); 00309 for(int i=0;i<NBin;i++){ 00310 double x = Mom.Delta*i+Mom.Min; 00311 fprintf(USCITA,"%lf %g\n",x,v1->pInter(i)); 00312 } 00313 fclose(USCITA); 00314 printf("Media %lf Scarto %lf N %d\n",Mom.Uno,Mom.Due,Mom.Num); 00315 if(!IfUser) return 0; 00316 } 00317 else if(!strcmp(Comando,"disExp")){ 00318 Mom = v1->DistrExpSegnale(NElMin,NElMax,IfNorm); 00319 FILE *USCITA; 00320 if((USCITA = fopen(Uscita,"w"))==0){ 00321 printf("Non s'apre %s\n Permessi?\n","Distribuzione.dat"); 00322 } 00323 fprintf(USCITA,"# %lf %lf %lf\n",Mom.Uno,Mom.Due,Mom.Tre); 00324 for(int i=0;i<NBin;i++){ 00325 double x = Mom.Delta*i+Mom.Min; 00326 fprintf(USCITA,"%lf %g\n",x,v1->pInter(i)); 00327 } 00328 fclose(USCITA); 00329 printf("Media %lf Scarto %lf N %d\n",Mom.Uno,Mom.Due,Mom.Num); 00330 if(!IfUser) return 0; 00331 } 00332 else if(!strcmp(Comando,"disSample")){ 00333 double xBound[2] = {Border[0],Border[1]}; 00334 double **Distr; 00335 Distr = new double*[NSample]; 00336 for(int s=0;s<NSample;s++){ 00337 Distr[s] = new double[NBin]; 00338 } 00339 v1->DistrSignSample(NElMin,NElMax,Distr,NSample,IfNorm,xBound); 00340 FILE *USCITA; 00341 if((USCITA = fopen(Uscita,"w"))==0){ 00342 printf("Non s'apre %s\n Permessi?\n","Distribuzione.dat"); 00343 } 00344 fprintf(USCITA,"# distribution per sample\n"); 00345 for(int b=0;b<NBin;b++){ 00346 double x = b/(double)NBin*(xBound[1]-xBound[0]) + xBound[0]; 00347 fprintf(USCITA,"%lf ",x); 00348 for(int s=0;s<NSample;s++){ 00349 fprintf(USCITA,"%lf ",Distr[s][b]); 00350 } 00351 fprintf(USCITA,"\n"); 00352 } 00353 fclose(USCITA); 00354 if(!IfUser) return 0; 00355 } 00356 else if(!strcmp(Comando,"DrawEq")){ 00357 FILE *FWrite = fopen(Uscita,"w"); 00358 if(!IfBorder){ 00359 Border[0] = v1->pxMinGlob(NElMin,NElMax); 00360 Border[1] = v1->pxMaxGlob(NElMin,NElMax); 00361 } 00362 double Dx = (Border[1]-Border[0])/(double)NBin; 00363 for(int i=0;i<NBin;i++){ 00364 double x = i*Dx+Border[0]; 00365 fprintf(FWrite,"%lf %lf\n",x,v1->fProva(x)); 00366 } 00367 fclose(FWrite); 00368 if(!IfUser) return 0; 00369 } 00370 else if(!strcmp(Comando,"coord")){ 00371 printf("Number of coordinate: "); 00372 int NCoord = 0; 00373 scanf("%d",&NCoord); 00374 if(NCoord >= 0 && NCoord<NVar) 00375 v1->Punta(NCoord); 00376 if(!IfUser) return 0; 00377 } 00378 else if(!strcmp(Comando,"MatchCoord")){ 00379 double *st = (double *)calloc(NMax,sizeof(double)); 00380 double tInit = v1->Val(CoordX1,0); 00381 int mOld = 0; 00382 for(int n=NElMin,m=0;n<NElMax;n++){ 00383 mOld = m-1; 00384 do { 00385 double t = tInit + v1->Val(CoordX,m); 00386 //printf("%d %d %lf <= %lf < %lf -> %lf\n",n,m,v1->Val(CoordX1,n),t,v1->Val(CoordX1,n+1),st[n]); 00387 if(v1->Val(CoordX1,n) <= t && t < v1->Val(CoordX1,n+1)) 00388 break; 00389 m++; 00390 if(m >= NMax){ 00391 m = mOld; 00392 break; 00393 } 00394 } while(1==1); 00395 st[n] = v1->Val(CoordY,m); 00396 //printf("%d %d %lf <= %lf < %lf -> %lf\n",n,m,v1->Val(CoordX1,n),v1->Val(CoordX,m)+tInit,v1->Val(CoordX1,n+1),st[n]); 00397 m++; 00398 } 00399 FILE *USCITA; 00400 if((USCITA = fopen(Uscita,"w"))==0) 00401 printf("Non s'apre %s\n Permessi?\n",Uscita); 00402 for(int i=NElMin;i<NElMax;i++){ 00403 fprintf(USCITA,"%lf %.5g %.5g\n",st[i],v1->Val(CoordY1,i),v1->Val(CoordY1+1,i)); 00404 } 00405 fclose(USCITA); 00406 free(st); 00407 if(!IfUser) return 0; 00408 } 00409 else if(!strcmp(Comando,"norm")){ 00410 FILE *USCITA; 00411 if((USCITA = fopen(Uscita,"w"))==0) 00412 printf("Non s'apre %s\n Permessi?\n",Uscita); 00413 v1->NormalizzaSegnale(NElMin,NElMax); 00414 for(int i=NElMin;i<NElMax;i++){ 00415 fprintf(USCITA,"%lf %.5g\n",v1->Abscissa(CoordY,i),v1->Val(CoordY,i)); 00416 } 00417 fclose(USCITA); 00418 if(!IfUser) return 0; 00419 } 00420 else if(!strcmp(Comando,"sin")){ 00421 FILE *USCITA; 00422 if((USCITA = fopen(Uscita,"w"))==0){ 00423 printf("Non s'apre %s\n Permessi?\n",Uscita); 00424 } 00425 for(int i=0;i<100;i++){ 00426 double x = i*DUE_PI*.01; 00427 fprintf(USCITA,"%g\n",sin(x)); 00428 } 00429 fclose(USCITA); 00430 if(!IfUser) return 0; 00431 } 00432 else if(!strcmp(Comando,"sum")){ 00433 double Sum = 0.; 00434 for(int i=NElMin;i<NElMax;i++){ 00435 Sum += v1->Val(CoordY,i); 00436 } 00437 printf("Sum: %lf\n",Sum); 00438 if(!IfUser) return 0; 00439 } 00440 else if(!strcmp(Comando,"SpD")){ 00441 printf("Calcolo lo spettro \n"); 00442 m1->Spettro(sp,sw,NMax); 00443 FILE *USCITA; 00444 if((USCITA = fopen(Uscita,"w"))==0){ 00445 printf("Non s'apre %s\n Permessi?\n",Uscita); 00446 return 0; 00447 } 00448 for(int i=0;i<NMax/2;i++){ 00449 fprintf(USCITA,"%g\n",sw[i]); 00450 } 00451 fclose(USCITA); 00452 if(!IfUser) return 0; 00453 } 00454 else if(!strcmp(Comando,"sort")){ 00455 v1->Punta(0); 00456 v1->Sort(); 00457 v1->ScriviTutto(Uscita,0,NElMin,NElMax); 00458 if(!IfUser) return 0; 00459 } 00460 else if(!strcmp(Comando,"Cas")){ 00461 printf("Proviamo il generatore di numeri casuali \n"); 00462 FILE *USCITA; 00463 if((USCITA = fopen(Uscita,"w"))==0){ 00464 printf("Non s'apre %s\n Permessi?\n",Uscita); 00465 } 00466 for(int i=0;i<10000;i++){ 00467 fprintf(USCITA,"%lf\n",m1->Casuale()); 00468 } 00469 fclose(USCITA); 00470 if(!IfUser) return 0; 00471 } 00472 else if(!strcmp(Comando,"Func")){ 00473 FILE *USCITA; 00474 printf("Proviamo una funzione \n"); 00475 if((USCITA = fopen(Uscita,"w"))==0){ 00476 printf("Non s'apre %s\n Permessi?\n",Uscita); 00477 } 00478 for(double x=0.,Dx=.001,Max=5.;x<Max;x+=Dx){ 00479 printf("%lf\n",x/Max); 00480 fprintf(USCITA,"%lf %g %g %g\n",x,m1->QuasiBessel(x,0),m1->QuasiBessel(x,1),m1->Bessel(x,0)); 00481 //fprintf(USCITA,"%lf %g %g %g\n",x,m1->Neumann(x,0),m1->Neumann(x,1),m1->Neumann(x,-1)); 00482 x += Dx; 00483 } 00484 fclose(USCITA); 00485 if(!IfUser) return 0; 00486 } 00487 else if(!strcmp(Comando,"SpeLine")){ 00488 int NBin = NElMax-NElMin; 00489 double InvNVar = .5/(double)(NVar); 00490 double InvNBin = 1./(double)(NMax); 00491 double *Spe = (double *)calloc(NBin,sizeof(double)); 00492 v1->SpeLine(NElMin,NElMax,NBin,Spe); 00493 FILE *FWrite = fopen("StalkLineSpectrum.dat","w"); 00494 fprintf(FWrite,"# q=2\\pi n/N <h(q)^2>\n"); 00495 char FName[120]; 00496 for(int n=0;n<NBin;n++){ 00497 fprintf(FWrite,"%lf %g \n",DUE_PI*InvNBin*n,Spe[n]*InvNVar*InvNBin); 00498 } 00499 fclose(FWrite); 00500 free(Spe); 00501 if(!IfUser) return 0; 00502 } 00503 else if(!strcmp(Comando,"spe") ){ 00504 FILE *USCITA; 00505 m1->Spettro(v1->sp,sw,NMax); 00506 if((USCITA = fopen(Uscita,"w"))==0){ 00507 printf("Non s'apre %s\n Permessi?\n",Uscita); 00508 } 00509 for(int i=0;i<NMax;i++){ 00510 fprintf(USCITA,"%g\n",sw[i]); 00511 } 00512 fclose(USCITA); 00513 break; 00514 if(!IfUser) return 0; 00515 } 00516 else if(!strcmp(Comando,"RadTens") ){ 00517 if(NFile != 4){ 00518 printf("I need the three components of the radial pressure\n"); 00519 if(!IfUser) return 0; 00520 } 00521 FILE *RadTens = fopen(Uscita,"w"); 00522 double Vol1 = 0.; 00523 double Vol2 = 0.; 00524 for(int n=0;n<NMax-1;n++){ 00525 Vol1 = DUE_PI*SQR(v1->Abscissa(CoordY,n+1)); 00526 double Prr = sqrt( SQR(v1->Val(1,n)) + SQR(v1->Val(6,n))); 00527 double Pzz = v1->Val(11,n); 00528 double PTrace = v1->Val(1,n)+v1->Val(5,n)+v1->Val(11,n); 00529 double Ptt = .5*(PTrace - Prr); 00530 double SurfTens = (Prr - .5*(Ptt+Pzz))/(Vol1-Vol2); 00531 fprintf(RadTens,"%lf %lf\n",v1->Abscissa(CoordY,n),SurfTens); 00532 Vol2 = Vol1; 00533 } 00534 fclose(RadTens); 00535 if(!IfUser) return 0; 00536 } 00537 else if(!strcmp(Comando,"perm") ){ 00538 int NMax = 16; 00539 PERMUTE *Perm = (PERMUTE *)calloc(NMax,sizeof(PERMUTE)); 00540 m1->PermuteRandomAll(Perm,NMax); 00541 if(!IfUser) return 0; 00542 } 00543 else if(!strcmp(Comando,"solve") ){ 00544 Matrice *A = new Matrice(4,4); 00545 // Matrice Pasquale(4); 00546 // Matrice Romualdo(4); 00547 // Matrice Adalgiso(4); 00548 // Matrice Goffredo(4); 00549 // Pasquale.RandomFill(1.); 00550 // Romualdo.RandomFill(1.); 00551 // //Pasquale = Romualdo; 00552 // Adalgiso.Mult(Pasquale,Romualdo); 00553 // Adalgiso.Print(); 00554 // exit(0); 00555 A->Set(0,0,1.);A->Set(0,1,6.);A->Set(0,2,5.);A->Set(0,3,8.); 00556 A->Set(1,0,5.);A->Set(1,1,2.);A->Set(1,2,5.);A->Set(1,3,5.); 00557 A->Set(2,0,6.);A->Set(2,1,3.);A->Set(2,2,7.);A->Set(2,3,1.); 00558 A->Set(3,0,8.);A->Set(3,1,7.);A->Set(3,2,2.);A->Set(3,3,6.); 00559 00560 // A->Set(0,0,1.);A->Set(0,1,0.);A->Set(0,2,0.);A->Set(0,3,1.); 00561 // A->Set(1,0,0.);A->Set(1,1,1.);A->Set(1,2,0.);A->Set(1,3,0.); 00562 // A->Set(2,0,0.);A->Set(2,1,0.);A->Set(2,2,1.);A->Set(2,3,0.); 00563 // A->Set(3,0,2.);A->Set(3,1,0.);A->Set(3,2,0.);A->Set(3,3,1.); 00564 // A->RandomFill(20.); 00565 A->Print(); 00566 double *Known = (double *)calloc(4,sizeof(double)); 00567 Known[0] = 1.; Known[1] = 4.; Known[2] = 3.; Known[3] = 2.; 00568 double *UnKnown = (double *)calloc(4,sizeof(double)); 00569 A->Solve(Known,UnKnown); 00570 for(int i=0;i<4;i++){ 00571 printf("%lf %lf\n",Known[i],UnKnown[i]); 00572 } 00573 if(!IfUser) return 0; 00574 } 00575 else if(!strcmp(Comando,"zeri") ){ 00576 double a=0.,b=0.; 00577 int rad; 00578 // printf("Minimo valore: "); 00579 // scanf("%lf",&a); 00580 // printf("Massimo valore: "); 00581 // scanf("%lf",&b); 00582 //%% 2.5 00583 //%% 2.0 00584 //%% 1.5 23.376860 3817.700000 00585 //%% 1.0 21.643605 3817.700000 00586 int NRadici = 4; 00587 double *Radici; 00588 m1->Ypsilon = 23.37; 00589 m1->PreFact = 3817.7;; 00590 m1->Func = &Matematica::ContactAngle; 00591 Radici = (double *)malloc(NRadici*sizeof(double)); 00592 rad = m1->Zeri(0.,DUE_PI/2.,Radici,NRadici); 00593 if(!IfUser) return 0; 00594 } 00595 else if(!strcmp(Comando,"fal") ){ 00596 double a=0.,b=0.; 00597 RADICE Zero; 00598 // printf("Minimo valore: "); 00599 // scanf("%lf",&a); 00600 // printf("Massimo valore: "); 00601 // scanf("%lf",&b); 00602 Zero = m1->RegulaFalsi(.1,3.); 00603 printf("Lo Zero e in x %lf\n",Zero.Zero); 00604 if(!IfUser) return 0; 00605 } 00606 else if(!strcmp(Comando,"new") ){ 00607 double a=0.; 00608 RADICE Zero; 00609 printf("Punto iniziale: "); 00610 scanf("%lf",&a); 00611 Zero = m1->Newton(a); 00612 printf("Lo Zero e in x %lf\n",Zero.Zero); 00613 if(!IfUser) return 0; 00614 } 00615 else if(!strcmp(Comando,"fun") ){ 00616 FILE *USCITA; 00617 USCITA = fopen("Funzione.dat","w"); 00618 double A = 0.; 00619 double B = DUE_PI; 00620 int NPunti = 10000; 00621 double Delta = (B-A)/(double)NPunti; 00622 m1->Ypsilon = 3.814; 00623 m1->PreFact = 0.169370; 00624 m1->Func = &Matematica::ContactAngle; 00625 for(int i=0;i<NPunti;i++){ 00626 fprintf(USCITA,"%g %g\n",Delta*(double)i,m1->Evalx(Delta*(double)i)); 00627 } 00628 fclose(USCITA); 00629 if(!IfUser) return 0; 00630 } 00631 else if(!strcmp(Comando,"FitLin") ){ 00632 FILE *USCITA = fopen(Uscita,"w"); 00633 RETTA r1 = v1->InterRettSegnale(CoordY,NElMin,NElMax,LogLog); 00634 printf("y = (%lf +- %lf)x + (%lf +- %lf)\n",r1.m,r1.ErrM,r1.q,r1.ErrQ); 00635 fprintf(USCITA,"#y = (%lf +- %lf)x + (%lf +- %lf)\n",r1.m,r1.ErrM,r1.q,r1.ErrQ); 00636 if(!LogLog){ 00637 for(int i=0;i<NMax;i++){ 00638 fprintf(USCITA,"%lf %lf %lf\n",v1->Abscissa(CoordY,i),v1->Val(CoordY,i),v1->Abscissa(CoordY,i)*r1.m+r1.q); 00639 } 00640 } 00641 else{ 00642 for(int i=0;i<NMax;i++){ 00643 if(v1->Abscissa(CoordY,i) <= 0.) continue; 00644 if(v1->Val(CoordY,i) <= 0.) continue; 00645 fprintf(USCITA,"%lf %lf %lf\n",log10(v1->Abscissa(CoordY,i)),log10(v1->Val(CoordY,i)),log10(v1->Abscissa(CoordY,i))*r1.m+r1.q); 00646 } 00647 } 00648 fclose(USCITA); 00649 if(!IfUser) return 0; 00650 } 00651 else if(!strcmp(Comando,"FitPara") ){ 00652 FILE *USCITA = fopen(Uscita,"w"); 00653 PARABOLA p1 = v1->ParabolaSegnale(CoordY,NElMin,NElMax,LogLog); 00654 printf("%.2g + %.2g x + %.2g x^2\n",p1.a0,p1.a1,p1.a2); 00655 printf("Minimum %.2g \n",p1.Minimo); 00656 fprintf(USCITA,"#%.2g + %.2g x + %.2g x^2\n",p1.a0,p1.a1,p1.a2); 00657 fprintf(USCITA,"#Minimum %.2g \n",p1.Minimo); 00658 for(int i=0;i<NMax;i++){ 00659 fprintf(USCITA,"%lf %lf %lf\n",v1->Abscissa(CoordY,i),v1->Val(CoordY,i),v1->Abscissa(CoordY,i)*p1.a1+v1->Abscissa(CoordY,i)*v1->Abscissa(CoordY,i)*p1.a2+p1.a0); 00660 } 00661 fclose(USCITA); 00662 if(!IfUser) return 0; 00663 } 00664 else if(!strcmp(Comando,"FitExp") ){ 00665 FILE *USCITA = fopen(Uscita,"w"); 00666 RETTA r1 = v1->InterExpSegnale(CoordY,NElMin,NElMax,LogLog); 00667 printf("y=(%.3g+-%.3g)exp(x/(%.3g+-%.3g))\n",log10(r1.q),log10(r1.ErrQ),1./r1.m,r1.ErrM/SQR(r1.m)); 00668 printf("decay t_d = %.4g +- %.4g\n",1./r1.m,r1.ErrM/SQR(r1.m)); 00669 fprintf(USCITA,"#y=(%.3g+-%.3g)exp(x/(%.3g+-%.3g))\n",log10(r1.q),log10(r1.ErrQ),1./r1.m,r1.ErrM/SQR(r1.m)); 00670 fprintf(USCITA,"#decay t_d = %.4g +- %.4g\n",1./r1.m,r1.ErrM/SQR(r1.m)); 00671 for(int i=0;i<NMax;i++){ 00672 fprintf(USCITA,"%lf %lf %lf\n",v1->Abscissa(CoordY,i),v1->Val(CoordY,i),exp(r1.q+r1.m*v1->Abscissa(CoordY,i))); 00673 } 00674 fclose(USCITA); 00675 if(!IfUser) return 0; 00676 } 00677 else if(!strcmp(Comando,"Prob2Nrg") ){ 00678 FILE *File2Write = fopen(Uscita,"w"); 00679 if(File2Write == NULL){ 00680 printf("Could not open %s\n",Uscita); 00681 return 1; 00682 } 00683 MOMENTI Mom = v1->DistrSegnale(NElMin,NElMax,IfNorm); 00684 v1->NormalizzaInter(); 00685 for(int v=0;v<NBin;v++){ 00686 double x = Mom.Min + v*Mom.Delta; 00687 if(v1->pInter(v) > 0.) 00688 fprintf(File2Write,"%lf %lf\n",x,-log(v1->pInter(v))); 00689 } 00690 fclose(File2Write); 00691 if(!IfUser) return 0; 00692 } 00693 else if(!strcmp(Comando,"min") ){ 00694 double Min = v1->Val(CoordY,0); 00695 int nMin = 0; 00696 for(int n=0;n<NMax;n++){ 00697 if(Min > v1->Val(CoordY,n)){ 00698 Min = v1->Val(CoordY,n); 00699 nMin = n; 00700 } 00701 } 00702 printf("%lf %lf\n",v1->Val(CoordX,nMin),v1->Val(CoordY,nMin)); 00703 if(!IfUser) return 0; 00704 } 00705 else if(!strcmp(Comando,"mm") ){ 00706 printf("Number of points per sample: %d\n",NMedia); 00707 int NSample = v1->MediaMobSegnale(NMedia); 00708 double Deltax = 1.;//(v1->pxMax()-v1->pxMin())/(double)NSample; 00709 FILE *USCITA; 00710 if((USCITA = fopen(Uscita,"w"))==0) 00711 printf("Non s'apre %s\n Permessi?\n",Uscita); 00712 for(int i=0;i<NSample;i++){ 00713 fprintf(USCITA,"%lf %lf %lf\n",v1->Abscissa(CoordY,i*NMedia)+Deltax,v1->pPunti(i),v1->pPuntiErr(i)); 00714 } 00715 fclose(USCITA); 00716 if(!IfUser) return 0; 00717 } 00718 else if(!strcmp(Comando,"WeightHisto") ){ 00719 v1->WeightHistoSign(NFile); 00720 // FILE *USCITA; 00721 // if((USCITA = fopen(Uscita,"w"))==0) 00722 // printf("Non s'apre %s\n Permessi?\n",Uscita); 00723 // for(int i=0;i<NSample;i++){ 00724 // fprintf(USCITA,"%lf %lf %lf\n",v1->Abscissa(CoordY,i*NMedia)+Deltax,v1->pPunti(i),v1->pPuntiErr(i)); 00725 // } 00726 // fclose(USCITA); 00727 if(!IfUser) return 0; 00728 } 00729 else if(!strcmp(Comando,"int")){ 00730 double Int = v1->IntSegnale(); 00731 FILE *USCITA; 00732 if((USCITA = fopen(Uscita,"w"))==0) 00733 printf("Non s'apre %s\n Permessi?\n",Uscita); 00734 printf("%d %d %d\n",NElMin,NElMax,v1->pNMax()); 00735 for(int i=NElMin;i<NElMax;i++){ 00736 fprintf(USCITA,"%lf %lf\n",v1->Abscissa(CoordY,i),v1->pPunti(i)); 00737 } 00738 printf("%lf\n",Int); 00739 if(!IfUser) return 0; 00740 } 00741 else if(!strcmp(Comando,"mom")){ 00742 for(int v=0;v<NVar;v++){ 00743 v1->Punta(v); 00744 Mom = v1->DistrGaussSegnale(NElMin,NElMax,IfNorm); 00745 printf("%d) %lf pm %lf\n",v,Mom.Uno,Mom.Due); 00746 } 00747 if(!IfUser) return 0; 00748 } 00749 else if(!strcmp(Comando,"exec")){ 00750 if(IfUser){ 00751 printf("Inserire la formula per x: "); 00752 scanf("%s",Executex); 00753 printf("Inserire la formula per y: "); 00754 scanf("%s",Executey); 00755 } 00756 FILE *Ciccia = fopen(Uscita,"w"); 00757 for(int i=NElMin;i<NElMax;i++){ 00758 for(int v=0;v<NVar;v++){ 00759 double Val = v1->Val(v,i); 00760 if(v==CoordX) 00761 Val = v1->ExecFormula(v1->Val(CoordX,i),v1->Val(CoordY,i),Executex); 00762 else if(v==CoordY) 00763 Val = v1->ExecFormula(v1->Val(CoordX,i),v1->Val(CoordY,i),Executey); 00764 fprintf(Ciccia,"%.5g ",Val); 00765 } 00766 fprintf(Ciccia,"\n"); 00767 } 00768 fclose(Ciccia); 00769 if(!IfUser) return 0; 00770 } 00771 else if(!strcmp(Comando,"widom")){ 00772 FILE *Widom = fopen(Uscita,"w"); 00773 for(int i=NElMin;i<NElMax;i++){ 00774 if(v1->Val(3,i)*v1->Val(1,i) > 0.){ 00775 double Arg = v1->Val(3,i)/(v1->Val(1,i)); 00776 double ChemPot = v1->Val(0,i) + log(Arg); 00777 fprintf(Widom,"%lf %lf\n",v1->Val(0,i),ChemPot); 00778 } 00779 } 00780 fclose(Widom); 00781 if(!IfUser) return 0; 00782 } 00783 else if(!strcmp(Comando,"DecayTime")){ 00784 double *st = new double[NVar]; 00785 double *sw = new double[NVar]; 00786 FILE *DecayTime = fopen(Uscita,"w"); 00787 for(int f=0;f<NVar;f++){ 00788 for(int i=NElMin;i<NElMax;i++){ 00789 st[f] = v1->Val(0,i)*v1->Val(f,i); 00790 } 00791 st[f] /= (double)v1->pNMax(); 00792 } 00793 m1->Spettro(st,sw,NVar); 00794 for(int f=0;f<NVar;f++){ 00795 fprintf(DecayTime,"%d %g %g\n",f,sw[f],st[f]); 00796 } 00797 fclose(DecayTime); 00798 if(!IfUser) return 0; 00799 } 00800 else if(!strcmp(Comando,"reverse") ){ 00801 v1->Reverse(); 00802 v1->ScriviTutto(Uscita,0,NElMin,NElMax); 00803 if(!IfUser) return 0; 00804 } 00805 else if(!strcmp(Comando,"DoubleDist") ){ 00806 v1->DoubleDistFluct(); 00807 v1->ScriviPunti(Uscita); 00808 if(!IfUser) return 0; 00809 } 00810 else if(!strcmp(Comando,"smooth") ){ 00811 v1->Smooth(Param,CoordY,NElMin,NElMax); 00812 v1->Smooth(Param,CoordY,NElMin,NElMax); 00813 v1->Smooth(Param,CoordY,NElMin,NElMax); 00814 v1->ScriviPunti(Uscita); 00815 if(!IfUser) return 0; 00816 } 00817 else if(!strcmp(Comando,"smoothGauss") ){ 00818 v1->SmoothGauss(Param,CoordY,NElMin,NElMax); 00819 v1->ScriviTutto(Uscita,0,NElMin,NElMax); 00820 if(!IfUser) return 0; 00821 } 00822 else if(!strcmp(Comando,"salva") ){ 00823 v1->ScriviTutto(Uscita,0,NElMin,NElMax); 00824 if(!IfUser) return 0; 00825 } 00826 else if(!strcmp(Comando,"tecplot") ){ 00827 v1->TecPlot(Uscita); 00828 if(!IfUser) return 0; 00829 } 00830 else if(!strcmp(Comando,"txvl") ){ 00831 v1->ExportTxvl(Uscita,NElMin,NElMax); 00832 if(!IfUser) return 0; 00833 } 00834 else if(!strcmp(Comando,"ResBulk") ){ 00835 v1->RescaleToBulk(Uscita); 00836 if(!IfUser) return 0; 00837 } 00838 else if(!strcmp(Comando,"conv") ){ 00839 FILE *FWrite = fopen(Uscita,"w"); 00840 double x = 0.; 00841 for(int n=0;n<NMax;n++){ 00842 x += .1; 00843 fprintf(FWrite,"%lf %lf\n",x,v1->Val(0,n)*1e12); 00844 } 00845 fclose(FWrite); 00846 if(!IfUser) return 0; 00847 } 00848 else if(!strcmp(Comando,"salvacol") ){ 00849 v1->ScriviFile(Uscita,CoordY,0,NElMin,NElMax); 00850 if(!IfUser) return 0; 00851 } 00852 else if(!strcmp(Comando,"col") ){ 00853 printf("Number of column: "); 00854 int NCol=0; 00855 scanf("%d",&NCol); 00856 v1->Punta(NCol); 00857 if(!IfUser) return 0; 00858 } 00859 else if(!strcmp(Comando,"print") ){ 00860 v1->Print(); 00861 if(!IfUser) return 0; 00862 } 00863 else if(!strcmp(Comando,"vet")){ 00864 Vettore v(1.,0.,1.); 00865 Vettore u(0.,1.,0.); 00866 Vettore w(0.,0.,1.); 00867 Vettore n(3); 00868 v.VetV(&u); 00869 //printf("%lf %lf %lf\n",n.Angle(v,u)*RAD_DEG,n.SinAngle(v,u),n.CosAngle(v,u)); 00870 n.Print(); 00871 break; 00872 if(!IfUser) return 0; 00873 } 00874 else if(!strcmp(Comando,"OrdAv")){ 00875 double *Distr = new double[NBin]; 00876 if(!IfBorder){ 00877 v1->pMinMaxGlob(NElMin,NElMax); 00878 v1->pGlobBorder(Border,Border+1,Border+2,Border+3); 00879 printf("%lf %lf\n",Border[0],Border[1]); 00880 Border[1] = Border[1] - Border[0]; 00881 Border[1] = 1./(1.001*Border[1]); 00882 } 00883 else{ 00884 Border[1] = Border[1] - Border[0]; 00885 Border[1] = 1./(1.001*Border[1]); 00886 } 00887 printf("%lf %lf\n",Border[0],Border[1]); 00888 v1->AverageOrdinate(NElMin,NElMax,Distr,Border); 00889 FILE *WFile = fopen(Uscita,"w"); 00890 for(int b=0;b<NBin;b++){ 00891 double x = b/(Border[1]*NBin) + Border[0]; 00892 fprintf(WFile,"%lf %lf\n",x,Distr[b]); 00893 } 00894 free(Distr); 00895 fclose(WFile); 00896 if(!IfUser) return 0; 00897 } 00898 else if(!strcmp(Comando,"WAv")){ 00899 MOMENTI m1 = v1->WeightAverageSet(CoordY,NElMin,NElMax); 00900 printf("Mean %lf +- %lf\n",m1.Uno,m1.Due); 00901 if(!IfUser) return 0; 00902 } 00903 else if(!strcmp(Comando,"q") ){} 00904 else{ 00905 printf("Comando sbagliato, riprovare\n"); 00906 IfUser = 1; 00907 } 00908 } 00909 printf("Te se qe ve be te ne?\n"); 00910 delete m1; 00911 return 0; 00912 }