62 using namespace KM3NETDAQ;
79 JParser<> zap(
"Example program to test chi2 calculations of co-variance matrix including direction uncertainty.");
84 zap[
'n'] =
make_field(numberOfEvents) = JLimit::max();
96 catch(
const exception& error) {
97 FATAL(error.what() << endl);
101 using namespace KM3NETDAQ;
106 const unsigned int NUMBER_OF_HITS = 6;
107 const double STANDARD_DEVIATIONS = 3.0;
108 const double HIT_OFF = 1.0e3 * sigma_ns*sigma_ns;
129 TH1D h0(
"h0", NULL, 40, 0.0, 20.0);
130 TH1D
h1(
"h1", NULL, 40, 0.0, 20.0);
132 TH1D p0(
"p0", NULL, 20, 0.0, 1.0);
133 TH1D
p1(
"p1", NULL, 20, 0.0, 1.0);
140 for ( ; x < 10.0; x += 1.0) {
X.push_back(x); }
141 for ( ; x < 25.0; x += 2.0) {
X.push_back(x); }
142 for ( ; x < 100.0; x += 5.0) {
X.push_back(x); }
145 TProfile n0(
"n0", NULL,
X.size() - 1,
X.data());
146 TProfile n1(
"n1", NULL,
X.size() - 1,
X.data());
155 while (inputFile.hasNext()) {
157 STATUS(
"event: " << setw(10) << inputFile.getCounter() <<
'\r');
DEBUG(endl);
162 const Evt*
event = ps;
168 if (muon != event->mc_trks.end()) {
177 const double theta = alpha_deg *
PI / 180.0;
178 const double phi = gRandom->Uniform(0.0, 2*
PI);
187 buildL2(*tev, moduleRouter, back_inserter(data));
189 data.erase(unique(data.begin(), data.end(), equal_to<JDAQModuleIdentifier>()), data.end());
199 const JPMTAddress& address = pmtRouter.getAddress(i->pmt_id);
201 const JPMT& pmt = pmtRouter.getPMT(address);
202 const double t1 = converter.putTime(
getTime(*i));
210 sort(i->second.begin(), i->second.end(), less<JHit>());
212 data.push_back(i->second[0]);
219 data.erase(
clusterizeWeight(data.begin(), data.end(), match3B), data.end());
224 for (JData_t::iterator i = data.begin(); i != data.end(); ++i) {
228 data.erase(
clusterizeWeight(data.begin(), data.end(), match1D), data.end());
238 for (JData_t::iterator i = data.begin(); i != data.end(); ++i) {
239 i->sub(tz.getPosition());
247 for (JData_t::iterator i = data.begin(); i != data.end(); ++i) {
252 if (data.size() >= NUMBER_OF_HITS + numberOfOutliers) {
254 JData_t::iterator __end = data.end();
256 for (
int n = 0;
n < numberOfOutliers &&
distance(data.begin(), __end) > NUMBER_OF_HITS; ++
n) {
259 JData_t::iterator kill = __end;
261 for (JData_t::iterator i = data.begin(); i != __end; ++i) {
263 const double y = fabs(i->getT() - tz.getT(*i)) / sigma_ns;
271 if (ymax >= STANDARD_DEVIATIONS)
272 iter_swap(kill, --__end);
277 const double chi2 =
getChi2(tz, data.begin(), __end, sigma_ns);
278 const int N =
distance(data.begin(), __end);
281 p0.Fill(TMath::Prob(chi2, N));
282 n0.Fill((
double) data.size(), (double) N / (
double) data.size());
286 if (data.size() >= NUMBER_OF_HITS + numberOfOutliers) {
291 V.
set(tz, data.begin(), data.end(), alpha_deg, sigma_ns);
292 Y.
set(tz, data.begin(), data.end());
296 unsigned int N = data.size();
298 for (
int n = 0; n < numberOfOutliers && N > NUMBER_OF_HITS; ++
n, --
N) {
303 for (
unsigned int i = 0; i != V.
size(); ++i) {
305 const double y =
getChi2(Y, V, i);
313 if (ymax >= STANDARD_DEVIATIONS * STANDARD_DEVIATIONS)
319 const double chi2 = V.
getDot(Y);
322 p1.Fill(TMath::Prob(chi2, N));
323 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 JShowerPostfit f $INPUT_FILE o $OUTPUT_FILE N
then for HISTOGRAM in h0 h1
JVertex3D & add(const JVertex3D &value)
Addition operator.
Auxiliary class to convert DAQ hit time to/from Monte Carlo hit time.
then fatal Wrong number of arguments fi set_variable STRING $argv[1] set_variable DETECTORXY_TXT $WORKDIR $DETECTORXY_TXT tail read X Y CHI2 RMS printf optimum n $X $Y $CHI2 $RMS awk v Y
static struct JTRIGGER::@82 clusterizeWeight
Anonymous struct for weighed clustering of hits.
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.
V(JDAQEvent-JTriggerReprocessor)*1.0/(JDAQEvent+1.0e-10)
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
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).
JDirection3D getDirection(const Vec &dir)
Get direction.
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, calibration and status.
JPosition3D getPosition(const Vec &pos)
Get position.
then break fi done getCenter read X Y Z let X
static const double PI
Mathematical constants.
void set(const JLine1Z &track, T __begin, T __end)
Set time residual vector.
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.
const double getSpeedOfLight()
Get speed of light.
Address of PMT in detector data structure.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
Data structure for L0 hit.
then usage $script< input_file >< detector_file > fi set_variable OUTPUT_DIR set_variable SELECTOR JDAQTimesliceL1 set_variable DEBUG case set_variable DEBUG
Data structure for fit of straight line paralel to z-axis.
Data structure for position in three dimensions.
const JLimit & getLimit() const
Get limit.
do set_variable DETECTOR_TXT $WORKDIR detector
General purpose class for multiple pointers.
double getChi2(const double P)
Get chi2 corresponding to given probability.
JPosition3D & rotate(const JRotation3D &R)
Rotate.
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
3D match criterion with road width.