FlyoDoc_2011 Pisa 2011 by GmP --- 011
|
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 }