Allink  v0.1
ElementiGraficiEl.cpp
1 /***********************************************************************
2 ElementiGrafici: Class that interface the VarData, VarElementiGrafici
3 and Matematica classes function for comunicating with main window of
4 Visualizza. The main function is the plotting function DisegnaPunti()
5 that provides the visualisation of two set of data. The bars at the
6 bottom permits to change the visualisation and the limit for the analisys
7  Copyright (C) 2008 by Giovanni Marelli <sabeiro@virgilio.it>
8 
9 
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2 of the License, or
13 (at your option) any later version.
14 
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19 
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 ***********************************************************************/
24 #include "ElementiGrafici.h"
25 #include <qpainter.h>
26 #include <Q3PaintDeviceMetrics>
27 ;
28 void ElementiGrafici::PuntiSegnale(){
29  PuntiMax = NMax;
30  v1->ImpCoordY(CoordY);
31  //v1->ImpCoordX(CoordX,CoordY);
32  sprintf(stringa,"Mostro i %d Punti Coord %d %d/%d",PuntiMax,CoordX,CoordY,NVar);
33  IfDisegna = DIS_SEGNALE;
34  InfoStato(stringa);
35  ImpInter(PuntiMax);
36  ImpInter(0,PuntiMax);
37  ImpNVisMin(0); ImpNVisMax(PuntiMax);
38  ImpNElMin(0); ImpNElMax(PuntiMax);
39  Ridisegna();
40 }
41 void ElementiGrafici::PuntiSommaSegnali(){
42  if(PrimaVolta){
43  ErrPrima->message(QString("Aprire un file prima"));
44  return;
45  }
46  v1->SommaSegnali();
47  sprintf(stringa,"Somma di tutti i segnali\n");
48  DIS_ADD_TYPE(IfDisegna,DIS_PUNTI);
49  IfDisegna = DIS_PUNTI;
50  ImpNMobile(1);
51  InfoStato(stringa);
52  repaint();
53 }
54 void ElementiGrafici::PuntiDistribuzione(){
55  if(PrimaVolta){
56  ErrPrima->message(QString("Aprire un file prima"));
57  return;
58  }
59  m1 = v1->DistrGaussSegnale(NElMin,NElMax,IfNorm);
60  sprintf(stringa,"Distribuzione per %d NBin di %d Punti",NBin,NElMax-NElMin);
61  DIS_ADD_TYPE(IfDisegna,DIS_MOMENTI);
62  ImpNVisMin(0);
63  ImpNVisMax(NBin);
64  ImpInter(NBin);
65  InfoStato(stringa);
66  repaint();
67 }
68 void ElementiGrafici::PuntiSpettro(){
69  if(PrimaVolta){
70  ErrPrima->message(QString("Aprire un file prima"));
71  return;
72  }
73  // QMessageBox::information(this,"Visualizza","Sto calcolando\n","Attendere");
74  PuntiMax = v1->SpettroSegnale(NElMin,NElMax);
75  sprintf(stringa,"Spettro da %d a %d di %d Punti",NElMin,NElMax,NElMax-NElMin);
76  DIS_ADD_TYPE(IfDisegna,DIS_PUNTI);
77  IfDisegna = DIS_PUNTI;
78  ImpNMobile(1);
79  InfoStato(stringa);
80  repaint();
81 }
82 void ElementiGrafici::PuntiNormalizza(){
83  if(PrimaVolta){
84  ErrPrima->message(QString("Aprire un file prima"));
85  return;
86  }
87  int Campioni=0;
88  // QMessageBox::information(this,"Visualizza","Sto calcolando\n","Attendere");
89  Campioni = v1->NormalizzaSegnale(NElMin,NElMax);
90  sprintf(stringa,"Normalizzazione del segnale da %d campioni",Campioni);
91  IfDisegna = DIS_PUNTI;
92  ImpNMobile(1);
93  InfoStato(stringa);
94  repaint();
95 }
96 void ElementiGrafici::PuntiModulo(){
97  if(PrimaVolta){
98  ErrPrima->message(QString("Aprire un file prima"));
99  return;
100  }
101  int Campioni=0;
102  // QMessageBox::information(this,"Visualizza","Sto calcolando\n","Attendere");
103  v1->ModuloSegnale();
104  Campioni = v1->ElabSegnale(NElMin,NElMax);
105  sprintf(stringa,"Modulo del segnale da %d campioni",Campioni);
106  DIS_ADD_TYPE(IfDisegna,DIS_PUNTI);
107  IfDisegna = DIS_PUNTI;
108  ImpNMobile(1);
109  InfoStato(stringa);
110  repaint();
111 }
112 void ElementiGrafici::PuntiRadice(){
113  if(PrimaVolta){
114  ErrPrima->message(QString("Aprire un file prima"));
115  return;
116  }
117  // QMessageBox::information(this,"Visualizza","Sto calcolando\n","Attendere");
118  v1->RadiceSegnale();
119  PuntiMax = NMax;
120  sprintf(stringa,"Radice di %d NBin",PuntiMax);
121  DIS_ADD_TYPE(IfDisegna,DIS_PUNTI);
122  IfDisegna = DIS_PUNTI;
123  ImpNMobile(1);
124  InfoStato(stringa);
125  repaint();
126 }
127 void ElementiGrafici::PuntiAutocor(){
128  if(PrimaVolta){
129  ErrPrima->message(QString("Aprire un file prima"));
130  return;
131  }
132  PuntiMax = v1->AutocorSegnale(NElMin,NElMax);
133  sprintf(stringa,"Autocorrelazione da %d a %d di %d Punti",NElMin,NElMax,NElMax-NElMin);
134  DIS_ADD_TYPE(IfDisegna,DIS_PUNTI);
135  IfDisegna = DIS_PUNTI;
136  ImpNMobile(1);
137  InfoStato(stringa);
138  repaint();
139 }
140 void ElementiGrafici::PuntiSum(){
141  if(PrimaVolta){
142  ErrPrima->message(QString("Aprire un file prima"));
143  return;
144  }
145  double Resp = v1->SumSegnale(CoordY,NElMin,NElMax);
146  sprintf(stringa,"Somma %lf da %d a %d di %d Punti",Resp,NElMin,NElMax,NElMax-NElMin);
147  // IfDisegna = DIS_SEGNALE;
148  ImpNMobile(1);
149  InfoStato(stringa);
150  repaint();
151 }
152 void ElementiGrafici::PuntiInterRett(){
153  if(PrimaVolta){
154  ErrPrima->message(QString("Aprire un file prima"));
155  return;
156  }
157  r1 = v1->InterRettSegnale(CoordY,NElMin,NElMax,LogLog);
158  PuntiMax = NMax;
159  sprintf(stringa,"Interpolazione lineare da %d a %d di %d Punti",NElMin,NElMax,NElMax-NElMin);
160  DIS_ADD_TYPE(IfDisegna,DIS_RETTA);
161  DIS_REM_TYPE(IfDisegna,DIS_GAUSS);
162  DIS_REM_TYPE(IfDisegna,DIS_PARABOLA);
163  DIS_REM_TYPE(IfDisegna,DIS_EXP);
164  DIS_ADD_TYPE(IfDisegna,DIS_BLU);
165  InfoStato(stringa);
166  repaint();
167 }
168 void ElementiGrafici::PuntiInterExp(){
169  if(PrimaVolta){
170  ErrPrima->message(QString("Aprire un file prima"));
171  return;
172  }
173  r1 = v1->InterExpSegnale(CoordY,NElMin,NElMax,LogLog);
174  PuntiMax = NMax;
175  sprintf(stringa,"Interpolazione lineare da %d a %d di %d Punti",NElMin,NElMax,NElMax-NElMin);
176  DIS_REM_TYPE(IfDisegna,DIS_RETTA);
177  DIS_REM_TYPE(IfDisegna,DIS_GAUSS);
178  DIS_REM_TYPE(IfDisegna,DIS_PARABOLA);
179  DIS_ADD_TYPE(IfDisegna,DIS_EXP);
180  DIS_ADD_TYPE(IfDisegna,DIS_BLU);
181  InfoStato(stringa);
182  repaint();
183 }
184 void ElementiGrafici::PuntiParabola(){
185  if(PrimaVolta){
186  ErrPrima->message(QString("Aprire un file prima"));
187  return;
188  }
189  p1 = v1->ParabolaSegnale(CoordY,NElMin,NElMax,LogLog);
190  printf("%.2g + %.2g x + %.2g x^2",p1.a0,p1.a1,p1.a2);
191  PuntiMax = NMax;
192  sprintf(stringa,"Interpolazione parabolica da %d a %d di %d Punti",NElMin,NElMax,NElMax-NElMin);
193  DIS_REM_TYPE(IfDisegna,DIS_RETTA);
194  DIS_REM_TYPE(IfDisegna,DIS_GAUSS);
195  DIS_ADD_TYPE(IfDisegna,DIS_PARABOLA);
196  DIS_REM_TYPE(IfDisegna,DIS_EXP);
197  DIS_ADD_TYPE(IfDisegna,DIS_BLU);
198  InfoStato(stringa);
199  repaint();
200 }
201 void ElementiGrafici::PuntiInterGauss(){
202  if(PrimaVolta){
203  ErrPrima->message(QString("Aprire un file prima"));
204  return;
205  }
206  m1 = v1->InterGaussSegnale(CoordY,NElMin,NElMax,LogLog);
207  PuntiMax = NMax;
208  sprintf(stringa,"Interpolazione gaussiana da %d a %d di %d Punti",NElMin,NElMax,NElMax-NElMin);
209  DIS_REM_TYPE(IfDisegna,DIS_RETTA);
210  DIS_ADD_TYPE(IfDisegna,DIS_GAUSS);
211  DIS_REM_TYPE(IfDisegna,DIS_PARABOLA);
212  DIS_REM_TYPE(IfDisegna,DIS_EXP);
213  DIS_ADD_TYPE(IfDisegna,DIS_BLU);
214  InfoStato(stringa);
215  repaint();
216 }
217 void ElementiGrafici::PuntiMediaMob(){
218  if(PrimaVolta){
219  ErrPrima->message(QString("Aprire un file prima"));
220  return;
221  }
222  PuntiMax = NVisMax = v1->MediaMobSegnale(NMobile);
223  sprintf(stringa,"MediaMobile di %d Punti divisi in %d Parti",PuntiMax,NMobile);
224  InfoStato(stringa);
225  DIS_ADD_TYPE(IfDisegna,DIS_PUNTI);
226  IfDisegna = DIS_PUNTI;
227  ImpNVisMin(0);
228  ImpInter(NVisMax);
229  ImpNVisMax(NVisMax);
230  repaint();
231 }
232 void ElementiGrafici::PuntiCorrelaADue(){
233  if(PrimaVolta){
234  ErrPrima->message(QString("Aprire un file prima"));
235  return;
236  }
237  PuntiMax = v1->CorrelaADuePunti(NCorrela);
238  ImpNCorrela(NCorrela);
239  sprintf(stringa,"MediaMobile di %d Punti divisi in %d Parti",PuntiMax,NCorrela);
240  DIS_ADD_TYPE(IfDisegna,DIS_PUNTI);
241  IfDisegna = DIS_PUNTI;
242  ImpNMobile(1);
243  InfoStato(stringa);
244  repaint();
245 }
246 void ElementiGrafici::PuntiAutosimilarita(){
247  if(PrimaVolta){
248  ErrPrima->message(QString("Aprire un file prima"));
249  return;
250  }
251  PuntiMax = 10;
252  v1->AutosimilaritaSegnale(PuntiMax);
253  sprintf(stringa,"Autosimilarita di %d Punti su %d Potenze",NMax,PuntiMax);
254  DIS_ADD_TYPE(IfDisegna,DIS_PUNTI);
255  IfDisegna = DIS_PUNTI;
256  ImpNMobile(1);
257  InfoStato(stringa);
258  repaint();
259 }
260 void ElementiGrafici::PuntiIntegrale(){
261  if(PrimaVolta){
262  ErrPrima->message(QString("Aprire un file prima"));
263  return;
264  }
265  //void (Matematica::*Qui)(double *,double *,int) = &Matematica::Integrazione;
266  //v1->Elab = &Matematica::Integrazione;
267  //v1->ElabSegnale(NElMin,NElMax);
268  double Int = v1->IntSegnale();
269  PuntiMax = NMax;
270  sprintf(stringa,"Integrale su %d Punti= %lf",PuntiMax,Int);
271  DIS_ADD_TYPE(IfDisegna,DIS_PUNTI);
272  IfDisegna = DIS_PUNTI;
273  ImpNMobile(1);
274  InfoStato(stringa);
275  repaint();
276 }
277 void ElementiGrafici::PuntiDerivata(){
278  if(PrimaVolta){
279  ErrPrima->message(QString("Aprire un file prima"));
280  return;
281  }
282  v1->DerivataSegnale();
283  v1->ElabSegnale(NElMin,NElMax);
284  PuntiMax = NElMax - NElMin - 2;
285  sprintf(stringa,"Derivata su %d Punti",PuntiMax);
286  DIS_ADD_TYPE(IfDisegna,DIS_PUNTI);
287  IfDisegna = DIS_PUNTI;
288  ImpNMobile(1);
289  InfoStato(stringa);
290  repaint();
291 }
292 void ElementiGrafici::PuntiVarie(){
293  if(PrimaVolta){
294  ErrPrima->message(QString("Aprire un file prima"));
295  return;
296  }
297  //v1->VarieSegnale();
298  //v1->ElabSegnale(NElMin,NElMax);
299  double Integr = v1->VarieSegnale(NElMin,NElMax)*32./200.;
300  PuntiMax = NElMax - NElMin -2;
301  NVisMax = PuntiMax;
302  NVisMin = 0;
303  double Volume = NMax/(32.*32.*32.);
304  for(int n=0;n<PuntiMax;n++){
305  //Punti[n] *= Volume;
306  }
307  sprintf(stringa,"Surface tension %lf",Integr);
308  DIS_ADD_TYPE(IfDisegna,DIS_PUNTI);
309  IfDisegna = DIS_PUNTI;
310  ImpNMobile(1);
311  InfoStato(stringa);
312  repaint();
313 }
314 void ElementiGrafici::StampaFile(){
315  QPainter paint;
316  InfoStato("Stampando...");
317  Stampante->setOutputFileName(QString(nomeSalva));
318  if(Stampante->setup(this))
319  if(!paint.begin(Stampante) )
320  return;
321  IfStampa = 1;
322  DisegnaPunti(&paint);
323  InfoStato("Stampato");
324  IfStampa = 0;
325 }
326 void ElementiGrafici::PuntaExt(double **ExtSt,int NVar){
327  v1->Punta(ExtSt,NVar);
328 }
int SpettroSegnale(int NElMin, int NElMax)
Calculate the spectrum.
Definition: VarDatFile.cpp:388
double a1
a0 + a1 x + a2 x^2
void SommaSegnali()
Sums all the yCoordinates.
Definition: VarDatFile.cpp:441
void ImpNCorrela(int n)
Set the bins for the point correlation.
int ElabSegnale(int NElMin, int NElMax)
Do a generic elaboration.
Definition: VarDatFile.cpp:376
int NMax
Number of points per array.
MOMENTI InterGaussSegnale(int CoordY, int NElMin, int NElMax, int LogLog)
Computes a Gaussian fit.
Definition: VarDatFile.cpp:536
int AutocorSegnale(int NElMin, int NElMax)
Autocorrelation of the signal.
Definition: VarDatFile.cpp:382
double a2
a0 + a1 x + a2 x^2
RETTA InterRettSegnale(int CoordY, int NElMin, int NElMax, int LogLog)
Computes a liner fit.
Definition: VarDatFile.cpp:500
char * nomeSalva
Name of the output file.
void Punta(int n)
Points to a different column.
Definition: VarDatFile.cpp:638
void ImpNElMin(int n)
Set the minimum elaboration point.
void ImpNVisMax(int n)
Set the maximum visualisation point.
void ImpCoordY(int Ext)
Set the column for the y array.
Definition: VarDatFile.cpp:938
void VarieSegnale()
Points the function Elab to the square gradient, probably not working.
Definition: VarDatFile.h:154
PARABOLA ParabolaSegnale(int CoordY, int NElMin, int NElMax, int LogLog)
Computes a parabolic fit.
Definition: VarDatFile.cpp:541
void ImpNVisMin(int n)
Set the minimum visualisation point.
void ModuloSegnale()
Points the function Elab to the module, probably not working.
Definition: VarDatFile.h:156
bool RadiceSegnale()
Transforms the signal into its square root.
Definition: VarDatFile.cpp:422
double IntSegnale()
Numerical integration of the signal.
Definition: VarDatFile.cpp:427
MOMENTI DistrGaussSegnale(int ElMin, int ElMax, int IfNorm)
Tests a gaussian distribution of the signal.
Definition: VarDatFile.cpp:368
double a0
a0 + a1 x + a2 x^2
void AutosimilaritaSegnale(int)
Selfsimilarity.
Definition: VarDatFile.cpp:626
void ImpNElMax(int n)
Set the maximum elaboration point.
void DerivataSegnale()
Points the function Elab to the derivative, probably not working.
Definition: VarDatFile.h:152
int CorrelaADuePunti(int dist)
To point correlation at a distance dist.
Definition: VarDatFile.cpp:621
double SumSegnale(int CoordY, int NElMin, int NElMax)
Sum the values between ElMin and ElMax.
Definition: VarDatFile.cpp:431
int NormalizzaSegnale(int NElMin, int NElMax)
Normalize the signal.
Definition: VarDatFile.cpp:418
RETTA InterExpSegnale(int CoordY, int NElMin, int NElMax, int LogLog)
Computes a exponential fit.
Definition: VarDatFile.cpp:530
void ImpNMobile(int n)
Set the bins for the running average.
VarDatFile * v1
Class for the file handle.
int MediaMobSegnale(int)
Running average.
Definition: VarDatFile.cpp:573