57 int main(
int argc,
char **argv)
64 JLimit_t& numberOfEvents = inputFile.getLimit();
78 JParser<> zap(
"Example program to test chi2 calculations of co-variance matrix including direction uncertainty.");
83 zap[
'n'] =
make_field(numberOfEvents) = JLimit::max();
95 catch(
const exception& error) {
96 FATAL(error.what() << endl);
105 const unsigned int NUMBER_OF_HITS = 6;
106 const double STANDARD_DEVIATIONS = 3.0;
107 const double HIT_OFF = 1.0e3 * sigma_ns*sigma_ns;
128 TH1D h0(
"h0", NULL, 40, 0.0, 20.0);
129 TH1D h1(
"h1", NULL, 40, 0.0, 20.0);
131 TH1D p0(
"p0", NULL, 20, 0.0, 1.0);
132 TH1D
p1(
"p1", NULL, 20, 0.0, 1.0);
139 for ( ; x < 10.0; x += 1.0) { X.push_back(x); }
140 for ( ; x < 25.0; x += 2.0) { X.push_back(x); }
141 for ( ; x < 100.0; x += 5.0) { X.push_back(x); }
144 TProfile n0(
"n0", NULL, X.size() - 1, X.data());
145 TProfile n1(
"n1", NULL, X.size() - 1, X.data());
161 const Evt*
event = ps;
167 if (muon != event->mc_trks.end()) {
176 const double theta = alpha_deg *
PI / 180.0;
177 const double phi = gRandom->Uniform(0.0, 2*
PI);
186 buildL2(*tev, moduleRouter, back_inserter(data));
188 data.erase(unique(data.begin(), data.end(), equal_to<JDAQModuleIdentifier>()), data.end());
209 sort(i->second.begin(), i->second.end(), less<JHit>());
211 data.push_back(i->second[0]);
218 data.erase(
clusterizeWeight(data.begin(), data.end(), match3B), data.end());
223 for (JData_t::iterator i = data.begin(); i != data.end(); ++i) {
227 data.erase(
clusterizeWeight(data.begin(), data.end(), match1D), data.end());
237 for (JData_t::iterator i = data.begin(); i != data.end(); ++i) {
238 i->sub(tz.getPosition());
246 for (JData_t::iterator i = data.begin(); i != data.end(); ++i) {
251 if (data.size() >= NUMBER_OF_HITS + numberOfOutliers) {
253 JData_t::iterator __end = data.end();
255 for (
int n = 0;
n < numberOfOutliers &&
distance(data.begin(), __end) > NUMBER_OF_HITS; ++
n) {
258 JData_t::iterator kill = __end;
260 for (JData_t::iterator i = data.begin(); i != __end; ++i) {
262 const double y = fabs(i->getT() - tz.getT(*i)) / sigma_ns;
270 if (ymax >= STANDARD_DEVIATIONS)
271 iter_swap(kill, --__end);
276 const double chi2 =
getChi2(tz, data.begin(), __end, sigma_ns);
277 const int N =
distance(data.begin(), __end);
280 p0.Fill(TMath::Prob(chi2, N));
281 n0.Fill((
double) data.size(), (double) N / (
double) data.size());
285 if (data.size() >= NUMBER_OF_HITS + numberOfOutliers) {
290 V.
set(tz, data.begin(), data.end(), alpha_deg, sigma_ns);
291 Y.
set(tz, data.begin(), data.end());
295 unsigned int N = data.size();
297 for (
int n = 0; n < numberOfOutliers && N > NUMBER_OF_HITS; ++
n, --N) {
302 for (
unsigned int i = 0; i != V.
size(); ++i) {
304 const double y =
getChi2(Y, V, i);
312 if (ymax >= STANDARD_DEVIATIONS * STANDARD_DEVIATIONS)
318 const double chi2 = V.
getDot(Y);
321 p1.Fill(TMath::Prob(chi2, N));
322 n1.Fill((
double) data.size(), (double) N / (
double) data.size());