#include <StudyFiducial.h>
Inheritance diagram for Anp::StudyFiducial:
Public Member Functions | |
StudyFiducial () | |
virtual | ~StudyFiducial () |
bool | Run (Record &record) |
void | Config (const Registry &) |
void | Set (TDirectory *dir) |
void | End (const DataBlock &) |
Private Types | |
typedef std::pair< double, double > | PassFail |
typedef std::map< std::string, PassFail > | CountMap |
Private Member Functions | |
void | Print (std::ostream &os=std::cout) const |
void | Count (const std::string &key, bool pass, double weight) |
Private Attributes | |
int | fFiducialKey |
int | fNeutrinoKey |
std::map< std::string, PassFail > | fCountMap |
|
Definition at line 38 of file StudyFiducial.h. |
|
Definition at line 37 of file StudyFiducial.h. Referenced by Count(). |
|
Definition at line 23 of file StudyFiducial.cxx.
00024 :fFiducialKey(100), 00025 fNeutrinoKey(2100) 00026 { 00027 } |
|
Definition at line 30 of file StudyFiducial.cxx.
00031 { 00032 } |
|
Reimplemented from Anp::AlgSnarl. Definition at line 125 of file StudyFiducial.cxx. References fFiducialKey, fNeutrinoKey, Registry::Get(), and reg.
00126 { 00127 int value_int = 0; 00128 if(reg.Get("StudyFiducialKey", value_int) && value_int != 0) 00129 { 00130 fFiducialKey = value_int; 00131 } 00132 00133 value_int = 0; 00134 if(reg.Get("StudyFiducialNeu", value_int) && value_int != 0) 00135 { 00136 fNeutrinoKey = value_int; 00137 } 00138 00139 const char *value_char = 0; 00140 if(reg.Get("PrintConfig", value_char) && value_char && strcmp(value_char, "yes") == 0) 00141 { 00142 cout << "StudyFiducial::Config" << endl 00143 << " FiducialKey = " << fFiducialKey << endl 00144 << " NeutrinoKey = " << fNeutrinoKey << endl; 00145 } 00146 } |
|
Definition at line 227 of file StudyFiducial.cxx. References fCountMap, and PassFail. Referenced by Run().
00228 { 00229 map<string, PassFail>::iterator cit = fCountMap.find(key); 00230 if(cit == fCountMap.end()) 00231 { 00232 cit = fCountMap.insert(map<string, PassFail>::value_type(key, PassFail(0.0, 0.0))).first; 00233 } 00234 00235 PassFail &p = cit -> second; 00236 if(pass) 00237 { 00238 p.first += weight; 00239 } 00240 else 00241 { 00242 p.second += weight; 00243 } 00244 } |
|
Reimplemented from Anp::AlgSnarl. Definition at line 119 of file StudyFiducial.cxx. References Print().
00120 { 00121 Print(); 00122 } |
|
Definition at line 154 of file StudyFiducial.cxx. References fCountMap. Referenced by End().
00155 { 00156 // 00157 // Print count for all used keys 00158 // 00159 00160 // 00161 // Compute widths of three fields: string size and two integers 00162 // 00163 unsigned widthS = 0, widthN1 = 0, widthN2 = 0; 00164 00165 for(map<string, PassFail>::const_iterator cit = fCountMap.begin(); cit != fCountMap.end(); ++cit) 00166 { 00167 const double d1 = (cit -> second).first; 00168 const double d2 = (cit -> second).second; 00169 00170 unsigned w1 = 1; 00171 unsigned w2 = 1; 00172 00173 if(d1 > 1.0) 00174 { 00175 w1 += static_cast<unsigned int>(std::log10(d1)); 00176 } 00177 if(d2 > 1.0) 00178 { 00179 w2 += static_cast<unsigned int>(std::log10(d2)); 00180 } 00181 00182 if(cit == fCountMap.begin()) 00183 { 00184 widthS = (cit -> first).size(); 00185 widthN1 = w1; 00186 widthN2 = w2; 00187 } 00188 else 00189 { 00190 widthS = std::max<unsigned int>(widthS, (cit -> first).size()); 00191 widthN1 = std::max<unsigned int>(widthN1, w1); 00192 widthN2 = std::max<unsigned int>(widthN2, w2); 00193 } 00194 } 00195 00196 if(widthS < 1) 00197 { 00198 return; 00199 } 00200 00201 // 00202 // Actually print keys and values 00203 // 00204 for(map<string, PassFail>::const_iterator cit = fCountMap.begin(); cit != fCountMap.end(); ++cit) 00205 { 00206 const double d1 = (cit -> second).first; 00207 const double d2 = (cit -> second).second; 00208 00209 const unsigned int n1 = static_cast<unsigned int>(d1); 00210 const unsigned int n2 = static_cast<unsigned int>(d2); 00211 00212 os << " " << setw(widthS) << left << cit -> first << " pass, fail, pass/all = " 00213 << setw(widthN1) << std::right << n1 << ", " 00214 << setw(widthN2) << std::right << n2 << ", "; 00215 00216 double ratio = 0.0; 00217 if(d1+d2 > 0.0) 00218 { 00219 ratio = d1/(d1+d2); 00220 } 00221 00222 os << setw(6) << setprecision(4) << ratio << endl; 00223 } 00224 } |
|
Implements Anp::AlgSnarl. Definition at line 35 of file StudyFiducial.cxx. References Count(), Anp::Record::EventBeg(), Anp::Record::EventEnd(), Anp::EventIter, fFiducialKey, fNeutrinoKey, Anp::Record::TruthBeg(), Anp::Record::TruthEnd(), and Anp::TruthIter.
00036 { 00037 // 00038 // Count and study fiducial and non-fiducial events 00039 // 00040 00041 for(TruthIter itrue = record.TruthBeg(); itrue != record.TruthEnd(); ++itrue) 00042 { 00043 bool fid_true = false; 00044 bool fid_reco = false; 00045 bool pid_pass = false; 00046 00047 unsigned int rcount = 0; 00048 00049 string fidR = "FidReco=0"; 00050 string fidT = "FidTrue=0"; 00051 string skey = "Select=0"; 00052 00053 // 00054 // Find reco event information 00055 // 00056 for(EventIter ievent = record.EventBeg(); ievent != record.EventEnd(); ++ievent) 00057 { 00058 if(!(itrue -> Match(*ievent))) 00059 { 00060 continue; 00061 } 00062 00063 ++rcount; 00064 00065 if(ievent -> KeyExists(fFiducialKey)) 00066 { 00067 fid_reco = true; 00068 fidR = "FidReco=1"; 00069 } 00070 00071 if(ievent -> KeyExists(fNeutrinoKey)) 00072 { 00073 pid_pass = true; 00074 skey = "Select=1"; 00075 } 00076 } 00077 00078 // 00079 // Check if true interaction vertex is within fiducial volume 00080 // 00081 if(itrue -> KeyExists(fFiducialKey)) 00082 { 00083 fid_true = true; 00084 fidT = "FidTrue=1"; 00085 } 00086 00087 string ikey; 00088 if(itrue -> Interaction() == 0) 00089 { 00090 ikey = "NC"; 00091 } 00092 else if(itrue -> Interaction() == 1) 00093 { 00094 ikey = "CC"; 00095 } 00096 00097 Count(ikey + " & FidTrue=?", fid_true, 1.0); 00098 Count(ikey + " & RecoEvent=?", rcount > 0, 1.0); 00099 Count(ikey + " & " + fidT + " & RecoEvent=?", rcount > 0, 1.0); 00100 00101 if(rcount > 0) 00102 { 00103 Count(ikey + " & " + fidT + " & SplitEvent=?", rcount > 1, 1.0); 00104 Count(ikey + " & " + fidR + " & SplitEvent=?", rcount > 1, 1.0); 00105 00106 Count(ikey + " & " + fidT + " & FidReco=?", fid_reco, 1.0); 00107 00108 Count(ikey + " & " + skey + " & FidTrue=?", fid_true, 1.0); 00109 Count(ikey + " & " + skey + " & FidReco=?", fid_reco, 1.0); 00110 00111 Count(ikey + " & " + skey + " & " + fidT + " & FidReco=?", fid_reco, 1.0); 00112 } 00113 } 00114 00115 return true; 00116 } |
|
Reimplemented from Anp::AlgSnarl. Definition at line 149 of file StudyFiducial.cxx.
00150 { 00151 } |
|
Definition at line 50 of file StudyFiducial.h. |
|
Definition at line 47 of file StudyFiducial.h. |
|
Definition at line 48 of file StudyFiducial.h. |