61 using namespace KM3NETDAQ;
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);
100 using namespace KM3NETDAQ;
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());
154 while (inputFile.hasNext()) {
156 STATUS(
"event: " << setw(10) << inputFile.getCounter() <<
'\r');
DEBUG(endl);
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());
198 const JPMTAddress& address = pmtRouter.getAddress(i->pmt_id);
201 const double t1 = converter.putTime(
getTime(*i));
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());
Router for direct addressing of PMT data in detector data structure.
Data structure for angles in three dimensions.
Utility class to parse command line options.
void set(const JVector3D &pos, T __begin, T __end, const double alpha, const double sigma)
Set co-variance matrix.
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
static double getDot(const variance &first, const variance &second)
Get dot product.
bool is_muon(const Trk &track)
Test whether given track is a (anti-)muon.
Router for direct addressing of module data in detector data structure.
Auxiliary class to synchronously read DAQ events and Monte Carlo events (and optionally other events)...
then for HISTOGRAM in h0 h1
JVertex3D & add(const JVertex3D &value)
Addition operator.
const JPMT & getPMT(const JPMTAddress &address) const
Get PMT parameters.
double getTime(const Hit &hit)
Get true time of hit.
void update(const size_t k, const double value)
Update inverted matrix at given diagonal element.
esac $JPP_DIR examples JDetector JTransitTime o $OUTPUT_FILE n N $NPE T $TTS_NS d $DEBUG for HISTOGRAM in tts tt2 pmt
bool is_noise(const Hit &hit)
Verify hit origin.
Head getHeader(const JMultipleFileScanner_t &file_list)
Get Monte Carlo header.
int first
index of module in detector data structure
static struct JTRIGGER::@71 clusterizeWeight
Anonymous struct for weighed clustering of hits.
Auxiliary class for defining the range of iterations of objects.
Determination of the time residual vector of hits for a track along z-axis (JFIT::JLine1Z).
Data structure for vector in three dimensions.
Determination of the co-variance matrix of hits for a track along z-axis (JFIT::JLine1Z).
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Data structure for PMT geometry and calibration.
void set(const JLine1Z &track, T __begin, T __end)
Set time residual vector.
void load(const JString &file_name, JDetector &detector)
Load detector from input file.
then usage $script[distance] fi case set_variable R
void invert()
Invert matrix according LDU decomposition.
size_t size() const
Get dimension of matrix.
Data structure for L2 parameters.
Address of PMT in detector data structure.
Data structure for L0 hit.
alias put_queue eval echo n
Data structure for fit of straight line paralel to z-axis.
JDirection3D getDirection(const Vec &v)
Get direction.
Auxiliary class to convert DAQ/trigger hit time to/from Monte Carlo hit time.
Data structure for position in three dimensions.
const JLimit & getLimit() const
Get limit.
General purpose class for multiple pointers.
double getChi2(const double P)
Get chi2 corresponding to given probability.
JPosition3D & rotate(const JRotation3D &R)
Rotate.
then usage $script[input file[working directory[option]]] nWhere option can be N
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
3D match criterion with road width.
#define DEBUG(A)
Message macros.
JPosition3D getPosition(const Vec &v)
Get position.