FlyoDoc_2011 Pisa 2011 by GmP --- 011

flyopunta/src/src_dev/devsfera.cpp

00001 /***************************************************************************
00002                           DevSfera.cpp  -  description
00003                              -------------------
00004     begin                : Sat May 26 2001
00005     copyright            : (C) 2001 by Giuseppe Pierazzini
00006     email                : peppe@unipi.it
00007   ***************************************************************************
00008   *                                                                         *
00009   *   NA48  simulation program.                                             *
00010   *                                                                         *
00011   ***************************************************************************/
00012 #include "parm.h"
00013 #include "devsfera.h"
00014 #include "evento.h"
00015 
00016 //using namespace std;
00017 
00018 DevSfera::~DevSfera()
00019 {
00020 }
00021 //==================  Sfera=======Erede di RettEdro
00022 DevSfera::DevSfera()
00023 {
00024   devtype=TypDevSfera;
00025   devclass="Sfera";
00026   rout=Lout.z;
00027   routq=rout*rout;
00028   Lout.Norma();
00029   Rqsize=Lout.normaq;
00030   rin=Lin.z;
00031   rinq=rin*rin;
00032   rbuco=Lin.x=Lin.y;  // attenzione a definire le dimensione del buco di ingresso del beam...
00033   rbucoq=rbuco*rbuco;
00034   zbucoout= -sqrt ( routq-rbucoq ); // superficie interna del buco.
00035   zbucoin = -sqrt ( rinq-rbucoq ); // superficie interna del buco.
00036 
00037 }
00038 
00039 //----------------- --------
00040 void DevSfera::Prgeom()
00041 {
00042   Gout<<"==================  R i v e l a t o r e =================";
00043   Gout<<"\n --> < "<<nome <<" >  [ "<<fun
00044   <<" ]  Sfera di rout "<< rout<<" cm   con un buco cilin. di "<<rbuco<<" cm";
00045   Device::Prgeom();
00046 
00047 }
00048 
00049 //======================================================
00050 //----------------- -----P o s i z i o n e ---
00051 int DevSfera::Posizione()
00052 {
00053 
00054   if ( X_dev.normaq>routq ) return 1;//e' fuori
00055 
00056   if ( X_dev.normaq>rinq ) // è interno tra i due gusci sferici
00057     { // è forse anche nel buco all'ingresso?
00058       if ( X_dev.z>0.0 ) return 0; // è interno nel guscio della semisfera dowstream
00059       if ( ( X_dev.x*X_dev.x+ X_dev.y*X_dev.y ) >rbucoq ) return 0;// è interno comunque anche  nella semisfera upstream
00060       if ( X_dev.z<zbucoout ) return 1; // è  fuori dall'ingresso upstream
00061     }
00062   return -1;// e se arivva qui è nel buco !
00063 }
00064 //----------------------------------------------------------
00065 //----------------------C a m E s t e r --------------------
00066 double DevSfera::CamEster()
00067 {
00068 // calcolo il cammino positivo verso la  superfice della sfera
00069 // e scelgo il cammino maggiore
00070 // calcolo i coefficienti della equazione intersezione di una retta con la sfera.
00071   camm=-1.;
00072 
00073 // se mi allontano  ritorno -1.
00074 
00075 //con la sfera
00076 
00077   double a=X_dev%V_dev;
00078   if ( a>0.0 ) return -1.;
00079   double b=X_dev.normaq-routq;
00080   double d=a*a-b;
00081   if ( d<0.0 ) return -1.;
00082   camm= -a - sqrt ( d );
00083   //
00084 // distanza dal piano del buco di ingresso del beam
00085   if ( abs ( V_dev.z ) >0.00001 )
00086     {
00087       double t= ( zbucoout-X_dev.z ) /V_dev.z;
00088       if ( t<0.0 ) return -1;
00089       if ( t>camm ) camm=t;
00090     }
00091 
00092   return camm;
00093 }
00094 //===========================================================
00095 //----------------------C a m I n t e r --------------------
00096 double DevSfera::CamInter()
00097 {
00098   camm=0.01;
00099 // sono tra le due sfere
00100   double a=X_dev%V_dev;
00101   double b=X_dev.normaq-rinq;  // sempre positivo
00102   double d=a*a-b;
00103   if ( a<=0.0&&d>=0.0)
00104     { // va verso la sfera interna
00105       camm= -a - sqrt ( d );
00106     }
00107   else if ( a>0.0 )
00108     {// dovrebbe colpire la sfera esterna
00109       b=X_dev.normaq-routq;  // sempre negativo
00110       camm= -a + sqrt ( a*a-b ); // è positivo
00111     }
00112    return camm; 
00113 }
00114 //===========================================================
00115 //----------------------C a m I n t e r --------------------
00116 double DevSfera::CamBuco()
00117 {
00118   camm=1.0e+10;
00119 // calcolo il cammino verso la  superfice sferica esterna
00120 // scelgo il cammino positivo minore...
00121 // calcolo il cammino positivo verso la superfice del Sfera interno.
00122 
00123 //con la sfera
00124 
00125   double a=X_dev%V_dev;
00126   double b=X_dev.normaq-rinq;  // sempre negativo
00127   camm= -a + sqrt ( a*a-b ); // è positivo
00128 // distanza dal piano di ingresso
00129   if ( abs ( V_dev.z ) >0.00001 )
00130     {
00131       double t= ( zbucoout-X_dev.z ) /V_dev.z;
00132       if ( t<camm ) camm=t;
00133     }
00134   return camm;
00135 }
 All Classes Namespaces Files Functions Variables