FlyoDoc_2011 Pisa 2011 by GmP --- 011

flyopunta/src/src_dev/devotot.cpp

00001 /***************************************************************************
00002                           devotot.cpp  -  description
00003                              -------------------
00004     begin                : Sun Dec 7 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 "devotot.h"
00014 
00015 DevOtOt::~DevOtOt(){
00016 }
00017 
00018 
00019 //================== DevOtOt ======Erede di DevOt
00020 DevOtOt::DevOtOt()
00021  {
00022    devtype=TypDevOtOt;
00023    devclass="Ottg_Ottg";
00024  }
00025 
00026  //----------------- --------
00027  void DevOtOt::Prgeom()
00028  {
00029 
00030   Gout<<"==================  R i v e l a t o r e =================";
00031   Gout<<"\n --> < "<<nome <<" >  [ "<<fun
00032       <<" ]  Ottagonale con buco ottagonale  "<<std::endl;
00033   Device::Prgeom();
00034  }
00035 
00036 //======================================================
00037 //----------------- -----P o s i z i o n e ---
00038 int DevOtOt::Posizione()
00039 {
00040 
00041   if( DevOt::Posizione()>0) return 1; //  il punto e' esterno
00042 
00043   // se sono interno al rivelatore verifico se siamo nel buco
00044 
00045   P_Cin=X_dev-Centrin;   // mi riferisco al centro del buco interno
00046   Dind=P_Cin-Lin;
00047   Dins=-(Lin+P_Cin);
00048 
00049 // ruoto di -45 gradi il punto e lo paragono con i lati inclinati....
00050 // ripeto la stessa procedura di prima per simmetria (Lout non cambia);
00051 //double Firot=0.707107= 1/sqrt(2.);
00052    
00053    P_Crot.setvn(Firot*(P_Cin[0]+P_Cin[1]),Firot*(P_Cin[1]-P_Cin[0]), P_Cin[2]);
00054   Dinrd=P_Crot-Lin;
00055   Dinrs=-(Lin+P_Crot);   // l'operatore unario "-" funge....
00056 
00057 // Test now  
00058 
00059   if(Dins[2]>0.0  || Dind[2]>0.0  || Dins[0]>0.0 ||
00060      Dind[0]>0.0  || Dins[1]>0.0  || Dind[1]>0.0    ) return 0;
00061      
00062   if(Dinrs[0]>0.0 ||
00063      Dinrd[0]>0.0 || Dinrs[1]>0.0 || Dinrd[1]>0.0   ) return 0;
00064 // ritorno -1  perche' nel buco
00065   return -1;
00066 }
00067 //----------------------C a m E s t e r --------------------
00068 // usa quella di DevOt  per eredita'
00069 //===========================================================
00070 //----------------------C a m I n t e r --------------------
00071 
00072 double DevOtOt::CamInter()
00073 {
00074 //uso quella di DevRt per calcolare il cammino
00075 // interno senza il buco...
00076   double tratto=DevOt::CamInter();
00078   double nv,t;
00079   camm=-1.;
00080 // calcolo il cammino positivo verso le otto+2  superfici del buco. Per dist>0
00081 // scelgo il cammino maggiore
00082 
00083   if((nv=V_dev[0])>0.0 && Dins[0]>0.0)  // piani x
00084       {t=Dins[0]/nv;  if(t>camm)camm=t;}
00085   else if(nv<0.0 && Dind[0]>0.0)
00086       {t=-Dind[0]/nv; if(t>camm)camm=t;}
00087   if((nv=V_dev[1])>0.0 && Dins[1]>0.0)  // piani y
00088       {t=Dins[1]/nv;  if(t>camm)camm=t;}
00089   else if(nv<0.0 && Dind[1]>0.0)
00090       {t=-Dind[1]/nv; if(t>camm)camm=t;}   
00091   if((nv=V_dev[2])>0.0 && Dins[2]>0.0)  // piani z
00092       {t=Dins[2]/nv;  if(t>camm)camm=t;}
00093   else if(nv<0.0 && Dind[2]>0.0)
00094       {t=-Dind[2]/nv; if(t>camm)camm=t;}
00095 
00096 // roto di 45 gradi per controllare il moto rispetto ai piani inclinati...
00097      V_rot.setvn(Firot*(V_dev[0]+V_dev[1]),Firot*(V_dev[1]-V_dev[0]), V_dev[2]);
00098 
00099    if((nv=V_rot[0])>0.0 && Dinrs[0]>0.0)  // piani x
00100       {t=Dinrs[0]/nv;  if(t>camm)camm=t;}
00101   else if(nv<0.0 && Dinrd[0]>0.0)
00102       {t=-Dinrd[0]/nv; if(t>camm)camm=t;}
00103   if((nv=V_rot[1])>0.0 && Dinrs[1]>0.0)  // piani y
00104       {t=Dinrs[1]/nv;  if(t>camm)camm=t;}
00105   else if(nv<0.0 && Dind[1]>0.0)
00106       {t=-Dinrd[1]/nv; if(t>camm)camm=t;}
00107 // test su zeta non serve
00108  
00109 // quindi confronto camm con tratto e accetto il cammino piu' breve......
00110   if(camm<0.0) {camm=tratto; return camm;}
00111   if(camm>0.0 && tratto<camm) camm=tratto;
00112   return camm;
00113 }
00114 //===============================================================
00115 //--------------- C a m B u c o ---------------------------------
00116 double DevOtOt::CamBuco()
00117 {
00118   double nv,t;
00119   camm=1.0e+10;
00120 // calcolo il cammino verso le otto+2  superfici
00121 // le distanze sono per definizione negative...
00122 // e scelgo il cammino positivo  minore
00123 
00124 
00125   if((nv=V_dev[0])>0.0)  // piani x
00126       {t=-Dind[0]/nv; if(t<camm)camm=t; }
00127   else if(nv<0.0)
00128       {t=Dins[0]/nv;  if(t<camm)camm=t; }
00129 
00130   if((nv=V_dev[1])>0.0)  // piani y
00131       {t=-Dind[1]/nv; if(t<camm)camm=t; }
00132   else if(nv<0.0)
00133       {t=Dins[1]/nv;  if(t<camm)camm=t; }
00134 
00135   if((nv=V_dev[2])>0.0)  // piani z
00136       {t=-Dind[2]/nv; if(t<camm)camm=t; }
00137   else if(nv<0.0)
00138       {t=Dins[2]/nv;  if(t<camm)camm=t; }
00139 
00140 // roto di 45 gradi per controllare il moto rispetto ai piani inclinati...
00141      V_rot.setvn(Firot*(V_dev[0]+V_dev[1]),Firot*(V_dev[1]-V_dev[0]), V_dev[2]);
00142      
00143  if((nv=V_rot[0])>0.0)  // piani x
00144       {t=-Dinrd[0]/nv; if(t<camm)camm=t; }
00145   else if(nv<0.0)
00146       {t=Dinrs[0]/nv;  if(t<camm)camm=t; }
00147 
00148   if((nv=V_rot[1])>0.0)  // piani y
00149       {t=-Dinrd[1]/nv; if(t<camm)camm=t; }
00150   else if(nv<0.0)
00151       {t=Dinrs[1]/nv;  if(t<camm)camm=t; }
00152 
00153   if((nv=V_rot[2])>0.0)  // piani y
00154       {t=-Dinrd[2]/nv; if(t<camm)camm=t; }
00155   else if(nv<0.0)
00156       {t=Dinrs[2]/nv;  if(t<camm)camm=t; }
00157 
00158 
00159       
00160      
00161 return camm;
00162 }
 All Classes Namespaces Files Functions Variables