FlyoDoc_2011 Pisa 2011 by GmP --- 011

flyopunta/src/src_dev/devot.cpp

00001 /***************************************************************************
00002                           devot.cpp  -  description
00003                              -------------------
00004     begin                : Sat Dec 6 2003
00005     copyright            : (C) 2003 by gmp
00006     email                : peppe@newpeppe
00007   ***************************************************************************
00008   *                                                                         *
00009   *   NA48  simulation program.                                             *
00010   *                                                                         *
00011   ***************************************************************************/
00012 #include "parm.h"
00013 #include "devot.h"
00014 #include "particella.h"
00015 
00016 DevOt::DevOt()
00017 {
00018   devtype=TypDevOt;
00019   devclass="Ottagon";
00020   Firot=.707107;
00021 };
00022 DevOt::~DevOt()
00023 {
00024 }
00025 
00026 
00027 void DevOt::Prgeom()
00028 {
00029 
00030   Gout<<"==================  R i v e l a t o r e =================";
00031   Gout<<"\n --> < "<<nome <<" >  [ "<<fun
00032   <<" ]  ottagonale  senza buco "<<std::endl;
00033   Device::Prgeom();
00034 }
00035 //----------------- -----P o s i z i o n e ---
00036 int DevOt::Posizione()
00037 {
00038 //     Posizione della particella rispetto questo dev
00039 // Le distanze di un punto interno dai piani del
00040 // rivelatore sono tutte negative o nulle data
00041 // la definizione delle normali ai piani ( verso l'esterno)
00042 // Le distanze di un punto esterno sono sia positive che negative:
00043 // ma almeno  una distanza e' positiva.
00044 // X_dev   e' la posizione  della particella rispeto al sistema del dev
00045 // Ruoto di -45 gradi il punto e lo paragono con i lati inclinati....
00046 // ripeto la stessa procedura di prima per simmetria (Lout non cambia);
00047 // double Firot=0.707107= 1/sqrt(2.);
00048 // X_rot   e' la posizione rotata di 45 gradi
00049 
00050   X_rot.setvn ( Firot* ( X_dev[0]+X_dev[1] ),Firot* ( X_dev[1]-X_dev[0] ), X_dev[2] );
00051   Doutrd=X_rot-Lout;
00052   Doutrs=- ( Lout+X_rot );
00053 
00054 //Test now
00055   if ( DevRt::Posizione() >0 ) return 1;
00056   if ( Doutrs[0]>0.0 ||
00057           Doutrd[0]>0.0 || Doutrs[1]>0.0 || Doutrd[1]>0.0 ) return 1;
00058 
00059   return 0;  // 0 se interno, 1 se esterno. Il buco qui non c'e'.
00060 
00061 }
00062 //----------------------------------------------------------
00063 //----------------------C a m E s t e r --------------------
00064 // calcola il cammino esterno per raggiungere il rivelatore...
00065 // vedi la routine nella classe base rettangolo.
00066 // V_dev e' il versore della traiettoria nel dev
00067 // V_rot e' il versore ruotato di 45 gradi per i lati inclinati
00068 //
00069 double DevOt::CamEster()
00070 {
00071   double nv,t;
00072 //   test sulla classe base
00073   camm=DevRt::CamEster();
00074 
00075   /*
00076      Doutd.print("doutd");
00077      Douts.print("douts");
00078      Doutrd.print("doutrd");
00079      Doutrs.print("doutrs");
00080   */
00081 
00082 // roto di 45 gradi per controllare il moto rispetto ai piani inclinati...
00083   V_rot.setvn ( Firot* ( V_dev[0]+V_dev[1] ),Firot* ( V_dev[1]-V_dev[0] ), V_dev[2] );
00084 
00085   if ( ( nv=V_rot[0] ) >0.0 && Doutrs[0]>0.0 )  // piani x inclinati
00086     {t=Doutrs[0]/nv; if ( t>camm ) camm=t;}
00087   else if ( nv<0.0 && Doutrd[0]>0.0 )
00088     {t=-Doutrd[0]/nv;if ( t>camm ) camm=t;}
00089 
00090 
00091 
00092   if ( ( nv=V_rot[1] ) >0.0 && Doutrs[1]>0.0 )  // piani y inclinati
00093   {
00094     t=Doutrs[1]/nv;if ( t>camm ) camm=t;
00095   }
00096   else if ( nv<0.0 && Doutrd[1]>0.0 )
00097     {t=-Doutrd[1]/nv;if ( t>camm ) camm=t;}
00098 
00099   return camm;
00100 }
00101 
00102 //----------------------C a m I n t e r --------------------
00103 // calcola il cammino interno per uscire dal rivelatore...
00104 // vedi la routine nella classe base rettangolo.
00105 // V_dev e' il versore della traiettoria nel dev
00106 // V_rot e' il versore ruotato di 45 gradi per i lati inclinati
00107 //
00108 double DevOt::CamInter()
00109 {
00110   double nv,t;
00111   // calcolo il cammino verso le otto +2 superfici
00112   // le distanze sono per definizione negative...
00113   // e scelgo il cammino positivo  maggiore
00114   // camm in uscita e' sempre definito
00115   // prima la classe base....
00116   camm=DevRt::CamInter();
00117 
00118 // roto di 45 gradi per controllare il moto rispetto ai piani inclinati...
00119   V_rot.setvn ( Firot* ( V_dev[0]+V_dev[1] ),Firot* ( V_dev[1]-V_dev[0] ), V_dev[2] );
00120 
00121   if ( ( nv=V_rot[0] ) >0.0 )  // piani x    rotato
00122     {t=-Doutrd[0]/nv; if ( t<camm ) camm=t; }
00123   else if ( nv<0.0 )
00124     {t=Doutrs[0]/nv;  if ( t<camm ) camm=t; }
00125   if ( ( nv=V_rot[1] ) >0.0 )  // piani y    rotato
00126     {t=-Doutrd[1]/nv; if ( t<camm ) camm=t; }
00127   else if ( nv<0.0 )
00128     {t=Doutrs[1]/nv;  if ( t<camm ) camm=t; }
00129 
00130   return camm;
00131 }
00132 
00133 
00134 
00135 
00136 
00137 
00138 
00139 
00140 
00141 
00142 
00143 
00144 
00145 
00146 
 All Classes Namespaces Files Functions Variables