#include <Kfluk.h>
Public Member Functions | |
| Kfluk (const char *pathname="") | |
| ~Kfluk () | |
| double | GetWeight (int ndecay, float Ecm) |
| double | GetWeight (NtpMCFluxInfo *fluxinfo) |
Private Attributes | |
| std::vector< double > | ELO |
| std::vector< double > | EHI |
| std::vector< double > | CK0E3 |
| std::vector< double > | CK0M3 |
| std::vector< double > | CKE3 |
| std::vector< double > | CKM3 |
|
|
Definition at line 14 of file Kfluk.cxx. References base, CK0E3, CK0M3, CKE3, CKM3, EHI, ELO, gSystem(), and MSG. 00014 : 00015 ELO(), 00016 EHI(), 00017 CK0E3(), 00018 CK0M3(), 00019 CKE3(), 00020 CKM3() 00021 { 00022 00023 //initialize vectors by reading in vector files 00024 //copied code from Zbeam 00025 std::string topDir=pathname; // user may set location of input data 00026 if(topDir=="") { // by default, this code looks in a standard place 00027 topDir="MCReweight/data"; 00028 std::string base=""; 00029 base=getenv("SRT_PRIVATE_CONTEXT"); 00030 if (base!="" && base!="."){ 00031 // check if directory exists in SRT_PRIVATE_CONTEXT 00032 std::string path = base + "/" + topDir; 00033 void *dir_ptr = gSystem -> OpenDirectory(path.c_str()); 00034 if(!dir_ptr){ 00035 base=getenv("SRT_PUBLIC_CONTEXT"); // if it doesn't exist then use SRT_PUBLIC_CONTEXT 00036 } 00037 } 00038 else{ 00039 base=getenv("SRT_PUBLIC_CONTEXT"); 00040 } 00041 00042 //if after all those shenanigans, it still can't find the file, give up 00043 if(base=="") { 00044 MSG("MCReweight",Msg::kFatal)<<"No SRT_PUBLIC_CONTEXT set"<<std::endl; 00045 assert(false); 00046 } 00047 topDir = base+ "/" + topDir; 00048 } 00049 00050 MSG("Kfluk",Msg::kDebug) <<"Kfluk reading files from: "<<topDir<<std::endl; 00051 00052 float low, high, val; 00053 ifstream in1((topDir+"/k0m3.vec").c_str()); 00054 if(in1.is_open()){ 00055 in1>>low; 00056 while(!in1.eof()){ 00057 in1>>high>>val; 00058 ELO.push_back(low); 00059 EHI.push_back(high); 00060 CK0M3.push_back(val); 00061 // cout<<"high "<<high<<" low "<<low<<" val "<<val<<endl; 00062 in1>>low; 00063 } 00064 in1.close(); 00065 } 00066 else{ 00067 MSG("Kfluk",Msg::kError)<<"Could not open "<<topDir+"/k0m3.vec"<<endl; 00068 } 00069 00070 ifstream in2((topDir+"/k0e3.vec").c_str()); 00071 if(in2.is_open()){ 00072 in2>>low; 00073 while(!in2.eof()){ 00074 in2>>high>>val; 00075 CK0E3.push_back(val); 00076 in2>>low; 00077 } 00078 in2.close(); 00079 } 00080 else{ 00081 MSG("Kfluk",Msg::kError)<<"Could not open "<<topDir+"/k0e3.vec"<<endl; 00082 } 00083 00084 ifstream in3((topDir+"/km3.vec").c_str()); 00085 if(in3.is_open()){ 00086 in3>>low; 00087 while(!in3.eof()){ 00088 in3>>high>>val; 00089 CKM3.push_back(val); 00090 in3>>low; 00091 } 00092 in3.close(); 00093 } 00094 else{ 00095 MSG("Kfluk",Msg::kError)<<"Could not open "<<topDir+"/km3.vec"<<endl; 00096 } 00097 00098 00099 ifstream in4((topDir+"/ke3.vec").c_str()); 00100 if(in4.is_open()){ 00101 in4>>low; 00102 while(!in4.eof()){ 00103 in4>>high>>val; 00104 CKE3.push_back(val); 00105 in4>>low; 00106 } 00107 in4.close(); 00108 } 00109 else{ 00110 MSG("Kfluk",Msg::kError)<<"Could not open "<<topDir+"/ke3.vec"<<endl; 00111 } 00112 00113 bool sizematch=true; 00114 if(ELO.size()!=EHI.size()) sizematch=false; 00115 if(ELO.size()!=CK0E3.size()) sizematch=false; 00116 if(ELO.size()!=CK0M3.size()) sizematch=false; 00117 if(ELO.size()!=CKE3.size()) sizematch=false; 00118 if(ELO.size()!=CKM3.size()) sizematch=false; 00119 00120 if(!sizematch){ 00121 MSG("Kfluk",Msg::kError) <<"Sizes of vectors do not match!" 00122 <<"Can not continue"<<std::endl; 00123 assert(false); 00124 } 00125 00126 }
|
|
|
Definition at line 128 of file Kfluk.cxx. 00129 {}
|
|
|
Definition at line 131 of file Kfluk.cxx. References GetWeight(), NtpMCFluxInfo::ndecay, and NtpMCFluxInfo::necm.
|
|
||||||||||||
|
Definition at line 136 of file Kfluk.cxx. References CK0E3, CK0M3, CKE3, CKM3, and EHI. Referenced by GetWeight(). 00137 {
00138 //C implementation of D. Jaffe's correction to kl3 decays
00139 //an approximation of the real fix that is going into gnumi
00140 //as of April, 2006. This function is meant to be a stop gap measure.
00141
00142 // correction factor for kl3 decays to take
00143 // matrix element into account (approximately)
00144 // see relflux#k3corr 27mar06
00145 //
00146 // 28mar06 add correction factors for BR(recent)/BR(gnumi)
00147 // for the 2 Ke3 decays
00148 // KL: PRL93 (2004) 181802
00149 // K+: PRL91 (2003) 261802
00150
00151 double corrk3 = 1.;
00152 if(ndecay==5) return corrk3; //Km2 +
00153 if(ndecay==8) return corrk3; //Km2 -
00154 if(ndecay>=11) return corrk3; //mu,pi decays
00155
00156 unsigned int i = 0;
00157 while(ecm>EHI[i]&&i<EHI.size()){
00158 i = i+1;
00159 }
00160 if(i>=EHI.size()){
00161 i = EHI.size()-1;
00162 }
00163 // cout<<"Will look in "<<i<<"bin"<<endl;
00164 // cout<<" factors are: "<<CK0E3[i]<<" "<<CK0M3[i]<<" "<<CKE3[i]<<" "<<CKM3[i]<<endl;
00165
00166 if(ndecay==1||ndecay==2){
00167 corrk3 = CK0E3[i]*(40.67/38.70);
00168 }
00169 else if(ndecay==3||ndecay==4){
00170 corrk3 = CK0M3[i];
00171 }
00172 else if(ndecay==6||ndecay==9){
00173 corrk3 = CKE3[i]*(5.13/4.82);
00174 }
00175 else if(ndecay==7||ndecay==10){
00176 corrk3 = CKM3[i];
00177 }
00178
00179 return corrk3;
00180
00181 }
|
|
|
Definition at line 20 of file Kfluk.h. Referenced by GetWeight(), and Kfluk(). |
|
|
Definition at line 21 of file Kfluk.h. Referenced by GetWeight(), and Kfluk(). |
|
|
Definition at line 22 of file Kfluk.h. Referenced by GetWeight(), and Kfluk(). |
|
|
Definition at line 23 of file Kfluk.h. Referenced by GetWeight(), and Kfluk(). |
|
|
Definition at line 19 of file Kfluk.h. Referenced by GetWeight(), and Kfluk(). |
|
|
Definition at line 18 of file Kfluk.h. Referenced by Kfluk(). |
1.3.9.1