FlyoDoc_2011 Pisa 2011 by GmP --- 011

flyopunta/src/src_dev/devrtrt.cpp

00001 /***************************************************************************
00002                           devrtrt.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 "devrtrt.h"
00014 #include "evento.h"
00015 // using namespace std;
00016 
00017 
00018 DevRtRt::~DevRtRt(){
00019 }
00020 //=================DevRtRt==============================
00021 //----------------- --------
00022 void DevRtRt::Prgeom()
00023  {
00024   Gout<<"==================  R i v e l a t o r e =================";
00025   Gout<<"\n --> < "<<nome <<" >  [ "<<fun
00026   <<" ]  Rettang. con buco rettang.";
00027   Device::Prgeom();
00028   Gout<<std::endl;
00029 }
00030 //======================================================
00031 //----------------- -----P o s i z i o n e ---
00032 int DevRtRt::Posizione()
00033 {
00034   if( DevRt::Posizione()>0) return 1; //  il punto e' esterno
00035 
00036   // se sono interno al rivelatore verifico se siamo nel buco
00037 
00038   P_Cin=X_dev-Centrin;   // mi riferisco al centro del buco interno
00039   Dind=P_Cin-Lin;
00040   Dins=-(Lin+P_Cin);
00041   
00042 //  if(idev==22){
00043 //   X_dev.print( evento_.Event,"XDev"); }
00044 
00045 
00046 //   P_Cin.print(evento_.Event,"PCIN");
00047 //   Dins.print(evento_.Event,nome);
00048 //   Dind.print(evento_.Event,nome) ;    }
00049    
00050   if(Dins[2]>0.0 || Dind[2]>0.0 || Dins[0]>0.0 ||
00051      Dind[0]>0.0 || Dins[1]>0.0 || Dind[1]>0.0   ) return 0;
00052 // ritorno -1 se il punto e' nel buco altrimento ritorno 0
00053 
00054 
00055    return -1;
00056 }
00057 
00058 
00059 
00060 //----------------------C a m I n t e r --------------------
00061 
00062 double DevRtRt::CamInter()
00063 {
00064 //uso quella di DevRt per calcolare il cammino
00065 // interno 
00066   tratto=DevRt::CamInter();
00067 //poi verifico se colpisce le pareti del buco .....
00068   double nv,t;
00069   camm=-1.;
00070 // calcolo il cammino positivo verso le sei superfici del buco. Per dist>0
00071 // scelgo il cammino maggiore
00072 
00073   if((nv=V_dev[0])>0.0 && Dins[0]>0.0)  // piani x
00074       {t=Dins[0]/nv;  if(t>camm)camm=t;}
00075   else if(nv<0.0 && Dind[0]>0.0)
00076       {t=-Dind[0]/nv; if(t>camm)camm=t;}
00077 
00078   if((nv=V_dev[1])>0.0 && Dins[1]>0.0)  // piani y
00079       {t=Dins[1]/nv;  if(t>camm)camm=t;}
00080   else if(nv<0.0 && Dind[1]>0.0)
00081       {t=-Dind[1]/nv; if(t>camm)camm=t;}
00082 
00083   if((nv=V_dev[2])>0.0 && Dins[2]>0.0)  // piani z
00084       {t=Dins[2]/nv;  if(t>camm)camm=t;}
00085   else if(nv<0.0 && Dind[2]>0.0)
00086       {t=-Dind[2]/nv; if(t>camm)camm=t;}
00087 
00088   // quindi confronto camm con tratto e accetto il cammino piu' breve......
00089   if(camm<0.0) {camm=tratto; return camm;}
00090   if(camm>0.0 && tratto<camm) camm=tratto;
00091   return camm;
00092 }
00093 //===============================================================
00094 //--------------- C a m B u c o ---------------------------------
00095 double DevRtRt::CamBuco()
00096 {
00097   double nv,t;
00098   camm=1.0e+10;
00099 // calcolo il cammino verso le sei superfici
00100 // le distanze sono per definizione negative...
00101 // e scelgo il cammino positivo  minore
00102 
00103 
00104   if((nv=V_dev[0])>0.0)  // piani x
00105       {t=-Dind[0]/nv; if(t<camm)camm=t; }
00106   else if(nv<0.0)
00107       {t=Dins[0]/nv;  if(t<camm)camm=t; }
00108 
00109   if((nv=V_dev[1])>0.0)  // piani y
00110       {t=-Dind[1]/nv; if(t<camm)camm=t; }
00111   else if(nv<0.0)
00112       {t=Dins[1]/nv;  if(t<camm)camm=t; }
00113 
00114   if((nv=V_dev[2])>0.0)  // piani z
00115       {t=-Dind[2]/nv; if(t<camm)camm=t; }
00116   else if(nv<0.0)
00117       {t=Dins[2]/nv;  if(t<camm)camm=t; }
00118 return camm;
00119 }
 All Classes Namespaces Files Functions Variables