FlyoDoc_2011 Pisa 2011 by GmP --- 011
|
00001 /*************************************************************************** 00002 devclrt.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 "devclrt.h" 00014 00015 // using namespace std; 00016 00017 void DevClRt::Prgeom() 00018 { 00019 Gout<<"================== R i v e l a t o r e ================="; 00020 Gout<<"\n --> < "<<nome <<" > [ "<<fun 00021 <<" ] Cilindrico con buco di x "<<Lin.x<<" e y " <<Lin.y<<" rettangolare "; 00022 Device::Prgeom(); 00023 } 00024 //====================================================== 00025 //----------------- -----P o s i z i o n e --- 00026 int DevClRt::Posizione() 00027 { 00028 if( DevCln::Posizione()>0) return 1; // il punto e' esterno 00029 // se sono interno al rivelatore verifico se siamo nel buco 00030 P_Cin=X_dev-Centrin; 00031 Dind=P_Cin-Lin; 00032 Dins=-(Lin+P_Cin); 00033 if(Dins[2]>0.0 || Dind[2]>0.0 || Dins[0]>0.0 || 00034 Dind[0]>0.0 || Dins[1]>0.0 || Dind[1]>0.0 ) return 0; 00035 // ritorno -1 se il punto e' nel buco altrimento ritorno 0 00036 return -1; 00037 } 00038 //----------------------C a m E s t e r -------------------- 00039 // usa quella di Cilindro per eredita' 00040 //=========================================================== 00041 //----------------------C a m I n t e r -------------------- 00042 00043 double DevClRt::CamInter() 00044 { 00045 //uso quella di Cilindro per calcolare il cammino 00046 // interno senza il buco... 00047 double tratto=DevCln::CamInter(); 00048 //poi verifico se colpisce le pareti del buco ..... 00049 double nv,t; 00050 camm=-1.; 00051 // calcolo il cammino positivo verso le sei superfici del buco. Per dist>0 00052 // scelgo il cammino maggiore 00053 00054 if((nv=V_dev[0])>0.0 && Dins[0]>0.0) // piani x 00055 {t=Dins[0]/nv; if(t>camm)camm=t;} 00056 else if(nv<0.0 && Dind[0]>0.0) 00057 {t=-Dind[0]/nv; if(t>camm)camm=t;} 00058 00059 if((nv=V_dev[1])>0.0 && Dins[1]>0.0) // piani y 00060 {t=Dins[1]/nv; if(t>camm)camm=t;} 00061 else if(nv<0.0 && Dind[1]>0.0) 00062 {t=-Dind[1]/nv; if(t>camm)camm=t;} 00063 00064 if((nv=V_dev[2])>0.0 && Dins[2]>0.0) // piani z 00065 {t=Dins[2]/nv; if(t>camm)camm=t;} 00066 else if(nv<0.0 && Dind[2]>0.0) 00067 {t=-Dind[2]/nv; if(t>camm)camm=t;} 00068 00069 // quindi confronto camm con tratto e accetto il cammino piu' breve...... 00070 if(camm<0.0) {camm=tratto; return camm;} 00071 if(camm>0.0 && tratto<camm) camm=tratto; 00072 return camm; 00073 } 00074 //=============================================================== 00075 //--------------- C a m B u c o --------------------------------- 00076 double DevClRt::CamBuco() 00077 { 00078 double nv,t; 00079 camm=1.0e+10; 00080 // calcolo il cammino verso le sei superfici 00081 // le distanze sono per definizione negative... 00082 // e scelgo il cammino positivo minore 00083 00084 if((nv=V_dev[0])>0.0) // piani x 00085 {t=-Dind[0]/nv; if(t<camm)camm=t; } 00086 else if(nv<0.0) 00087 {t=Dins[0]/nv; if(t<camm)camm=t; } 00088 00089 if((nv=V_dev[1])>0.0) // piani y 00090 {t=-Dind[1]/nv; if(t<camm)camm=t; } 00091 else if(nv<0.0) 00092 {t=Dins[1]/nv; if(t<camm)camm=t; } 00093 00094 if((nv=V_dev[2])>0.0) // piani z 00095 {t=-Dind[2]/nv; if(t<camm)camm=t; } 00096 else if(nv<0.0) 00097 {t=Dins[2]/nv; if(t<camm)camm=t; } 00098 return camm; 00099 }