|
FlyoDoc_2011 Pisa 2011 by GmP --- 011
|
#include <crossmat.h>
Classes | |
| struct | Cross |
Public Member Functions | |
| double | CrossAdd (float, float, float, float) |
| void | CrossPrint () |
| void | CrossList (const char *) |
| ========================================= | |
Calcolo della matrice di crossing .. per lo studio del CUPS
Definition at line 16 of file crossmat.h.
| double CrossMat::CrossAdd | ( | float | gss_sort, |
| float | gvss_sort, | ||
| float | ss_sort, | ||
| float | vss_sort | ||
| ) |
generate the crossed resolution matrix...gss,gvss in recon.-> iss,ivss Virtual Cross matrice [84x42x84x42] Con i parametri su definiti vedi anche in outnt.cpp
gss and gvss indici derivati dai valori generati iss and ivss indici derivati dai valori ricostruiti
Definition at line 39 of file crossmat.cpp.
{
int gss,gvss,iss,ivss;
gss= ( gss_sort-ss_xmin ) /stepss;
gvss= gvss_sort/stepvss;
iss= ( ss_sort-ss_xmin ) /stepss;
ivss= vss_sort/stepvss;
// get out if out of range
if ( gss<0 ||gss>83 ) return 1000.;
if ( gvss<0 ||gvss>41 ) return 1000.;
if ( iss<0 ||iss>83 ) return 1000.;
if ( ivss<0 ||ivss>41 ) return 1000.;
// ok
dati++;
// memorizza i dati di generazione
int gi = gss+gvss*84;
Cross *pg=Elem[gi]; // indice pg del Cross di generazione.....
if ( pg==0 ) // se non esiste si crea....
{
Elem[gi]=pg=new Cross();
pg->i=gss;pg->j=gvss;
pg->n=1;
pg->next=0;
pg->dist=0.0;
// Gout<<"\n elem "<<dati<<" "<<gi<<" "<<pg->i<<" " <<pg->j<<" "<<iss<< " "
// <<ivss<< " " <<endl;
}
else pg->n++; // se esiste si incrementa solo
// memorizza gli indici di ricostruzione
// per distanza dei canali Generato-ricostruito
double dss = gss-iss; double dvs=gvss-ivss;
Cross *plast;
Cross *px=pg->next; // punto al secondo Cross ...dati ricostruito...
if ( px==0 ) // non esiste ne creo uno nuovo....
{
pg->next=px=new Cross();
px->i=iss;px->j=ivss;
px->n=1;
px->next=0;
px->dist=sqrt ( dss*dss+dvs*dvs );
}
else if ( px!=0 )
{
while ( px ) //test su tutti i Cross collegati a pg....
{
if ( px->i==iss&&px->j==ivss )
{
px->n++;
break;
}
// se non sono uscito continuo...
plast=px;
px=px->next;
}
// se non ho trovato....px รจ ancora nullo...
if ( px==0 ) // non esiste ancora ne creo uno nuovo....
{
plast->next=px=new Cross();
px->i=iss;px->j=ivss;
px->n=1;
px->next=0;
px->dist=sqrt ( dss*dss+dvs*dvs );
}
}
return px->dist;
}
| void CrossMat::CrossList | ( | const char * | Res | ) |
=========================================
Definition at line 163 of file crossmat.cpp.
{
char *LisDat=new char[256];
char ListaOut[256];
std::ofstream Lout;
sprintf ( LisDat,"%s_%d.dat",Res,evento_.Gen.Run );
string AuxLis;AuxLis=LisDat;
check_file_name ( OutDir,AuxLis );
sprintf ( ListaOut,"%s/%s",OutDir,AuxLis.c_str() ); // Flyo running
Lout.open ( ListaOut,ios::out );
Cross *px,*pg;
int gi=0;
Gout <<"\n Crossmat listing summary Run "
<<" totali eventi "<< setw ( 9 ) << dati<<endl;
Lout <<"\n Crossmat listing summary Run "
<<" totali eventi "<< setw ( 9 ) << dati<<endl;
for ( int kss=0;kss<84;kss++ )
{
for ( int kvss=0;kvss<42;kvss++ )
{
gi =kss+kvss*84;
pg=Elem[gi];
if ( pg==0 ) continue;
px= pg->next;
while ( px!=0 )
{
Lout <<"\n "<< setw ( 3 ) << pg->i+1
<< " "<< setw ( 3 ) <<pg->j+1
<< setw ( 3 ) << px->i+1
<< " "<< setw ( 3 ) <<px->j+1
<< " "<< setw ( 6 ) << px->n <<setprecision ( 2 )
<< " "<< setw ( 5 ) << px->dist;
px=px->next;
}
}
}
}