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; } } } }