FlyoDoc_2011 Pisa 2011 by GmP --- 011
|
00001 /*************************************************************************** 00002 carte.cpp - description 00003 ------------------- 00004 begin : Sat Dec 9 2000 00005 copyright : (C) 2000 by Giuseppe M Pierazzini 00006 email : pierazzini@unipi.it 00007 *************************************************************************** 00008 * * 00009 * NA48 simulation program. New version 3.02.2005 * 00010 * * 00011 ***************************************************************************/ 00012 #include <parm.h> 00013 #include <part_db.h> 00014 00015 //using namespace std; 00016 00032 //-------------------------- 00033 void Part_db::Controlla_rates() 00034 { 00035 Part_db *ptr=this; 00036 00037 if (ptr==0)return; 00038 00039 if (ptr->ncan==0) 00040 { 00041 ptr=ptr->next; 00042 if (ptr!=0) ptr->Controlla_rates(); 00043 return; 00044 } 00045 00046 int Nc=ptr->ncan; 00047 // Gout<<"\n decadimento per "<< ptr->nome << " in calali "<<Nc; 00048 if (Nc>1) 00049 { 00050 double totr=0; 00051 for (int i=0;i<Nc;i++) 00052 { 00053 totr+=ptr->Canale[i].rate; 00054 00055 // Gout<<"\n "<< ptr->nome << " canale "<<i<<" rate "<< ptr->Canale[i].rate 00056 // <<" totr "<<totr; 00057 00058 00059 } 00060 if (totr<=0.) { 00061 Gout<<"\n Errore in particle data_base for "<< ptr->nome 00062 <<" \n tot Rate "<<totr 00063 << " รจ errato.. Exit! ....Controlla"; 00064 exit(0); 00065 } 00066 if (totr<1.) 00067 { 00068 double norma=1./totr; 00069 for (int i=0;i<Nc;i++) 00070 { 00071 ptr->Canale[i].rate*=norma; 00072 } 00073 Gout<<"\n Rinormalizzata ad 1. la decay _chain della particella "<<ptr->nome; 00074 } 00075 } 00076 ptr=ptr->next; 00077 if (ptr!=0) ptr->Controlla_rates(); 00078 return; 00079 00080 } 00081 //------------------- 00082 00083 void Crea_part_db() 00084 { 00085 00086 Part_db *ptr; 00087 // define the particle data base 00088 // Nome vis ch massa width ctau(cm) 00089 ptr=new Part_db ( "gam", 1, 0, 0.0, 0.0, -1.0 ); 00090 Gam =ptr->Get_Nome(); 00091 ptr_Gam=ptr; 00092 ptr=new Part_db ( "nu", 0, 0, 0.0, 0.0, -1.0 ); 00093 Neutrino=ptr->Get_Nome(); 00094 ptr_Neutrino=ptr; 00095 ptr=new Part_db ( "elec", 1, -1, 0.00051, 0.0, -1.0 ); 00096 Elec =ptr->Get_Nome(); 00097 ptr_Elec=ptr; 00098 ptr=new Part_db ( "elep", 1, 1, 0.00051, 0.0, -1.0 ); 00099 Elep =ptr->Get_Nome(); 00100 ptr_Elep=ptr; 00101 ptr=new Part_db ( "mum", 1, -1, 0.10565, 0.0, 65865.4 ); 00102 Mum =ptr->Get_Nome(); 00103 ptr_Mum=ptr; 00104 ptr=new Part_db ( "mup", 1, 1, 0.10565, 0.0, 65865.4 ); 00105 Mup =ptr->Get_Nome(); 00106 ptr_Mup=ptr; 00107 ptr=new Part_db ( "pim", 1, -1, 0.13957018, 0.0, 780.45 ); 00108 Pim =ptr->Get_Nome(); 00109 ptr_Pim=ptr; 00110 ptr=new Part_db ( "pip", 1, 1, 0.13957018, 0.0, 780.45 ); 00111 Pip =ptr->Get_Nome(); 00112 ptr_Pip=ptr; 00113 ptr=new Part_db ( "pi0", 0, 0, 0.1349766, 0.0, 0.0 ); 00114 Pi0 =ptr->Get_Nome(); 00115 ptr_Pi0=ptr; 00116 ptr=new Part_db ( "Km", 1, -1, 0.493677, 0.0, 371.3 ); 00117 Kapm =ptr->Get_Nome(); 00118 ptr_Kapm=ptr; 00119 ptr=new Part_db ( "Kp", 1, 1, 0.493677, 0.0, 371.3 ); 00120 Kapp =ptr->Get_Nome(); 00121 ptr_Kapp=ptr; 00122 ptr=new Part_db ( "Kl", 1, 0, 0.497648, 0.0, 1534.0 ); 00123 Kapl =ptr->Get_Nome(); 00124 ptr_Kapl=ptr; 00125 ptr=new Part_db ( "Ks", 1, 0, 0.497648, 0.0, 2.6842 ); 00126 Kaps =ptr->Get_Nome(); 00127 ptr_Kaps=ptr; 00128 ptr=new Part_db ( "K0", 1, 0, 0.497648, 0.0, 0.0 ); 00129 Kap0 =ptr->Get_Nome(); 00130 ptr_Kap0=ptr; 00131 ptr=new Part_db ( "a_K0", 1, 0, 0.4977, 0., 0. ); 00132 A_Kap0=ptr->Get_Nome(); 00133 ptr=new Part_db ( "eta", 0, 0, 0.54880, 0.0, 0.0 ); 00134 Eta =ptr->Get_Nome(); 00135 ptr_Eta=ptr; 00136 // 00137 ptr=new Part_db ( "Ro", 1, 0, 0.77000, 0.153, 0.0 ); 00138 ptr=new Part_db ( "W", 1, 0, 0.78300, 0.008, 0.0 ); 00139 ptr=new Part_db ( "p" , 1, 1, 0.93827, 0.0, -1.0 ); 00140 Protone =ptr->Get_Nome(); 00141 ptr_Protone=ptr; 00142 ptr=new Part_db ( "a_p", 1, -1, 0.93827, 0., -1. ); 00143 A_Protone=ptr->Get_Nome(); 00144 ptr=new Part_db ( "n" , 1, 0, 0.93957, 0.0, -1.0 ); 00145 Neutrone=ptr->Get_Nome(); 00146 ptr_Neutrone=ptr; 00147 ptr=new Part_db ( "a_n", 1, 0, 0.93957, 0., -1. ); 00148 A_Neutrone=ptr->Get_Nome(); 00149 ptr=new Part_db ( "fy", 1, 0, 1.01940, 0.00441, 0.0 ); 00150 ptr=new Part_db ( "a_lam", 1, 0, 1.1156, 0., 7.89 ); 00151 A_Lambda=ptr->Get_Nome(); 00152 ptr_A_Lambda=ptr; 00153 ptr=new Part_db ( "lam", 1, 0, 1.1156, 0., 7.89 ); 00154 Lambda=ptr->Get_Nome(); 00155 ptr_Lambda=ptr; 00156 // attenzione sono messi non visibili........????? 00157 ptr=new Part_db ( "uus", 0, 1, 1.1894, 0., 0. ); 00158 Uus=ptr->Get_Nome(); 00159 ptr_Uus=ptr; 00160 ptr=new Part_db ( "a_uus", 0, -1, 1.1894, 0., 0. ); 00161 A_Uus=ptr->Get_Nome(); 00162 ptr_A_Uus=ptr; 00163 ptr=new Part_db ( "uds", 0, 0, 1.1925, 0., 0. ); 00164 Uds=ptr->Get_Nome(); 00165 ptr_Uds=ptr; 00166 ptr=new Part_db ( "a_uds", 0, 0, 1.1925, 0., 0. ); 00167 A_Uds=ptr->Get_Nome(); 00168 ptr_A_Uds=ptr; 00169 ptr=new Part_db ( "dds", 0, -1, 1.1974, 0., 0. ); 00170 Dds=ptr->Get_Nome(); 00171 ptr_Dds=ptr; 00172 ptr=new Part_db ( "a_dds", 0, 1, 1.1974, 0., 0. ); 00173 A_Dds=ptr->Get_Nome(); 00174 ptr_A_Dds=ptr; 00175 ptr=new Part_db ( "uss", 0, 0, 1.3149, 0., 0. ); 00176 Uss=ptr->Get_Nome(); 00177 ptr_Uss=ptr; 00178 ptr=new Part_db ( "a_uss", 0, 0, 1.3149, 0., 0. ); 00179 A_Uss=ptr->Get_Nome(); 00180 ptr_A_Uss=ptr; 00181 ptr=new Part_db ( "dss", 0, -1, 1.3213, 0., 0. ); 00182 Dss=ptr->Get_Nome(); 00183 ptr_Dss=ptr; 00184 ptr=new Part_db ( "a_dss", 0, 1, 1.3213, 0., 0. ); 00185 A_Dss=ptr->Get_Nome(); 00186 ptr_A_Dss=ptr; 00187 ptr=new Part_db ( "sss", 0, -1, 1.6724, 0., 0. ); 00188 Sss=ptr->Get_Nome(); 00189 ptr_Sss=ptr; 00190 ptr=new Part_db ( "a_sss", 0, -1, 1.6724, 0., 0. ); 00191 A_Sss=ptr->Get_Nome(); 00192 ptr_A_Sss=ptr; 00193 00194 // lista degli ioni usati paer le interazioni su Gas...vedi reagas.h e reags.cpp 00195 ptr=new Part_db ( "AT33", 1, 1, 1.8756, 0., -1. ); // AT33= ptr->Get_Nome() 00196 ptr=new Part_db ( "AT34", 1, 2, 2.8084, 0., -1. ); // AT34= ptr->Get_Nome() 00197 ptr=new Part_db ( "AT35", 1, 1, 2.8089, 0., -1. ); // AT35= ptr->Get_Nome() 00198 ptr=new Part_db ( "AT36", 1, 2, 3.7274, 0., -1. ); // AT36= ptr->Get_Nome() 00199 ptr=new Part_db ( "AT37", 1, 3, 5.6015, 0., -1. ); // AT37= ptr->Get_Nome() 00200 ptr=new Part_db ( "AT38", 1, 2, 5.6055, 0., -1. ); // AT38= ptr->Get_Nome() 00201 ptr=new Part_db ( "AT39", 1, 3, 6.5338, 0., -1. ); // AT39= ptr->Get_Nome() 00202 ptr=new Part_db ( "AT40", 1, 4, 6.5342, 0., -1. ); // AT40= ptr->Get_Nome() 00203 ptr=new Part_db ( "AT41", 1, 3, 7.4714, 0., -1. ); //AT41= ptr->Get_Nome() 00204 ptr=new Part_db ( "AT42", 1, 5, 7.4723, 0., -1. ); // AT42= ptr->Get_Nome() 00205 ptr=new Part_db ( "AT43", 1, 2, 7.4825, 0., -1. ); // AT43= ptr->Get_Nome() 00206 ptr=new Part_db ( "AT44", 1, 4, 8.3928, 0., -1. ); // AT44= ptr->Get_Nome() 00207 ptr=new Part_db ( "AT45", 1, 3, 8.4069, 0., -1. ); // AT45= ptr->Get_Nome() 00208 ptr=new Part_db ( "AT46", 1, 6, 8.4093, 0., -1. ); //AT46= ptr->Get_Nome() 00209 ptr=new Part_db ( "AT47", 1, 5, 9.3244, 0., -1. ); //AT47= ptr->Get_Nome() 00210 ptr=new Part_db ( "AT48", 1, 4, 9.3255, 0., -1. ); // AT48= ptr->Get_Nome() 00211 ptr=new Part_db ( "AT49", 1, 6, 9.3276, 0., -1. ); // AT49= ptr->Get_Nome() 00212 ptr=new Part_db ( "AT50", 1, 5, 10.2526, 0., -1. ); // AT50= ptr->Get_Nome() 00213 ptr=new Part_db ( "AT51", 1, 6, 10.2540, 0., -1. ); // AT51= ptr->Get_Nome() 00214 ptr=new Part_db ( "AT52", 1, 4, 10.2646, 0., -1. ); // AT52= ptr->Get_Nome() 00215 ptr=new Part_db ( "AT53", 1, 3, 10.2857, 0., -1. ); // AT53= ptr->Get_Nome() 00216 ptr=new Part_db ( "AT54", 1, 8, 10.2882, 0., -1. ); // AT54= ptr->Get_Nome() 00217 ptr=new Part_db ( "AT55", 1, 6, 11.1749, 0., -1. ); // AT55= ptr->Get_Nome() 00218 ptr=new Part_db ( "AT56", 1, 5, 11.1887, 0., -1. ); //AT56= ptr->Get_Nome() 00219 ptr=new Part_db ( "AT57", 1, 7, 11.1917, 0., -1. ); // AT57= ptr->Get_Nome() 00220 ptr=new Part_db ( "AT58", 1, 4, 11.2010, 0., -1. ); // AT58= ptr->Get_Nome() 00221 ptr=new Part_db ( "AT59", 1, 6, 12.1095, 0., -1. ); // AT59= ptr->Get_Nome() 00222 ptr=new Part_db ( "AT60", 1, 7, 12.1112, 0., -1. ); // AT60= ptr->Get_Nome() 00223 ptr=new Part_db ( "AT61", 1, 5, 12.1234, 0., -1. ); // AT61= ptr->Get_Nome() 00224 ptr=new Part_db ( "AT62", 1, 8, 12.1285, 0., -1. ); // AT62= ptr->Get_Nome() 00225 ptr=new Part_db ( "AT63", 1, 7, 13.0402, 0., -1. ); // AT63= ptr->Get_Nome() 00226 ptr=new Part_db ( "AT64", 1, 6, 13.0409, 0., -1. ); // AT64= ptr->Get_Nome() 00227 ptr=new Part_db ( "AT65", 1, 8, 13.0448, 0., -1. ); //AT65= ptr->Get_Nome() 00228 ptr=new Part_db ( "AT66", 1, 7, 13.9689, 0., -1. ); //AT66= ptr->Get_Nome() 00229 ptr=new Part_db ( "AT67", 1, 8, 13.9712, 0., -1. ); //AT67= ptr->Get_Nome() 00230 ptr=new Part_db ( "Boo!", 0, 0, 0.0, 0.0, 0.0 ); 00231 Booh =ptr->Get_Nome(); 00232 ptr_boo=ptr; 00233 00234 // dummy particles 00235 ptr=new Part_db ( "res", 0, 0, 0.0, 0.0, 0.0 ); 00236 Res =ptr->Get_Nome(); 00237 ptr=new Part_db ( "res2", 0, 0, 0.0, 0.0, 0.0 ); 00238 Res2 =ptr->Get_Nome(); 00239 ptr=new Part_db ( "res3", 0, 0, 0.0, 0.0, 0.0 ); 00240 Res3 =ptr->Get_Nome(); 00241 ptr=new Part_db ( "res4", 0, 0, 0.0, 0.0, 0.0 ); 00242 Res4 =ptr->Get_Nome(); 00243 ptr=new Part_db ( "res5", 0, 0, 0.0, 0.0, 0.0 ); 00244 Res5 =ptr->Get_Nome(); 00245 ptr=new Part_db ( "dum", 0, 0, 0.0, 0.0, 0.0 ); 00246 Dum =ptr->Get_Nome(); 00247 ptr_dum=ptr; 00248 ptr=new Part_db ( "dum2", 0, 0, 0.0, 0.0, 0.0 ); 00249 Dum2 =ptr->Get_Nome(); 00250 ptr=new Part_db ( "dlz", 0, 0, 0.0, 0.0, 0.0 ); 00251 Dlz =ptr->Get_Nome(); 00252 ptr=new Part_db ( "pic2", 0, 0, 0.0, 0.0, 0.0 ); 00253 Pic2 =ptr->Get_Nome(); 00254 ptr=new Part_db ( "pi02", 0, 0, 0.0, 0.0, 0.0 ); 00255 Pi02 =ptr->Get_Nome(); 00256 ptr=new Part_db ( "cms", 0, 0, 0.0, 0.0, 0.0 ); 00257 Cms =ptr->Get_Nome(); 00258 ptr=new Part_db ( "pvv", 0, 0, 0.0, 0.0, 0.0 ); 00259 Pvv =ptr->Get_Nome(); 00260 // ************ lisat decadimenti elementari ***** 00261 ptr_Mum->Canale=new Decadimento[1]; 00262 ptr_Mum->Canale[0].Define(1.00,Elec,Neutrino,Neutrino); 00263 ptr_Mum->ncan=1; 00264 00265 ptr_Mup->Canale=new Decadimento[1]; 00266 ptr_Mup->Canale[0].Define(1.00,Elep,Neutrino,Neutrino); 00267 ptr_Mup->ncan=1; 00268 00269 ptr_Pim->Canale= new Decadimento[1]; 00270 ptr_Pim->Canale[0].Define(1.00,Mum,Neutrino); 00271 ptr_Pim->ncan=1; 00272 00273 ptr_Pip->Canale= new Decadimento[1]; 00274 ptr_Pip->Canale[0].Define(1.00,Mup,Neutrino); 00275 ptr_Pip->ncan=1; 00276 00277 ptr_Pi0->Canale= new Decadimento[1]; 00278 ptr_Pi0->Canale[0].Define(1.00,Gam,Gam); 00279 ptr_Pi0->ncan=1; 00280 00281 ptr_Kapm->Canale=new Decadimento[1]; 00282 ptr_Kapm->Canale[0].Define(1.00,Mum,Neutrino); 00283 ptr_Kapm->ncan=1; 00284 00285 ptr_Kapp->Canale=new Decadimento[1]; 00286 ptr_Kapp->Canale[0].Define(1.00,Mup,Neutrino); 00287 ptr_Kapp->ncan=1; 00288 00289 ptr_Kaps->Canale=new Decadimento[2]; 00290 ptr_Kaps->Canale[0].Define(0.6920,Pip,Pim); 00291 ptr_Kaps->Canale[1].Define(0.3069,Pi0,Pi0); 00292 ptr_Kaps->ncan=2; 00293 00294 ptr_Kapl->Canale=new Decadimento[6]; 00295 ptr_Kapl->Canale[0].Define(0.2027,Pip,Elec,Neutrino); 00296 ptr_Kapl->Canale[1].Define(0.2027,Pim,Elep,Neutrino); 00297 ptr_Kapl->Canale[2].Define(0.1352,Pip,Mum,Neutrino); 00298 ptr_Kapl->Canale[3].Define(0.1352,Pim,Mup,Neutrino); 00299 ptr_Kapl->Canale[4].Define(0.1952,Pi0,Pi0,Pi0); 00300 ptr_Kapl->Canale[5].Define(0.1254,Pip,Pim,Pi0); 00301 00302 ptr_Kapl->ncan=6; 00303 00304 ptr_Lambda->Canale=new Decadimento[2]; 00305 ptr_Lambda->Canale[0].Define(0.639,Protone,Pim); 00306 ptr_Lambda->Canale[1].Define(0.358,Neutrone,Pi0); 00307 ptr_Lambda->ncan=2; 00308 00309 ptr_A_Lambda->Canale=new Decadimento[2]; 00310 ptr_A_Lambda->Canale[0].Define(0.639,A_Protone,Pip); 00311 ptr_A_Lambda->Canale[1].Define(0.358,A_Neutrone,Pi0); 00312 ptr_A_Lambda->ncan=2; 00313 00314 ptr_Uus->Canale=new Decadimento[2]; 00315 ptr_Uus->Canale[0].Define(0.5157,Protone,Pi0); 00316 ptr_Uus->Canale[1].Define(0.4843,Neutrone,Pip); 00317 ptr_Uus->ncan=2; 00318 00319 ptr_A_Uus->Canale=new Decadimento[2]; 00320 ptr_A_Uus->Canale[0].Define(0.5157,A_Protone,Pi0); 00321 ptr_A_Uus->Canale[1].Define(0.4843,A_Neutrone,Pim); 00322 ptr_A_Uus->ncan=2; 00323 00324 ptr_Uds->Canale=new Decadimento[1]; 00325 ptr_Uds->Canale[0].Define(1.0,Lambda,Gam); 00326 ptr_Uds->ncan=1; 00327 00328 ptr_A_Uds->Canale=new Decadimento[1]; 00329 ptr_A_Uds->Canale[0].Define(1.0,A_Lambda,Gam); 00330 ptr_A_Uds->ncan=1; 00331 00332 ptr_Dds->Canale=new Decadimento[1]; 00333 ptr_Dds->Canale[0].Define(1.0,Neutrone,Pim); 00334 ptr_Dds->ncan=1; 00335 00336 ptr_A_Dds->Canale=new Decadimento[1]; 00337 ptr_A_Dds->Canale[0].Define(1.0,A_Neutrone,Pip); 00338 ptr_A_Dds->ncan=1; 00339 00340 ptr_Uss->Canale=new Decadimento[1]; 00341 ptr_Uss->Canale[0].Define(1.0,Lambda,Pi0); 00342 ptr_Uss->ncan=1; 00343 00344 ptr_A_Uss->Canale=new Decadimento[1]; 00345 ptr_A_Uss->Canale[0].Define(1.0,A_Lambda,Pi0); 00346 ptr_A_Uss->ncan=1; 00347 00348 ptr_Dss->Canale=new Decadimento[1]; 00349 ptr_Dss->Canale[0].Define(1.0,Lambda,Pim); 00350 ptr_Dss->ncan=1; 00351 00352 // controllo della decay_chain 00353 00354 Gout<<"\n ==== Particle Data_base and Chaining done si ha da fa "<<std::endl; 00355 Matter->Controlla_rates(); 00356 Gout<<"\n ==== Particle Data_base and Chaining done ======"<<std::endl; 00357 } 00358 00359 00360 00361 00362 00363 00364 00365 00366 00367 00368