/* This file is part of MAUS: http://micewww.pp.rl.ac.uk:8080/projects/maus * * MAUS is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * MAUS is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with MAUS. If not, see . * */ // C headers #include // Other headers #include "Config/MiceModule.hh" #include "src/common_cpp/DataStructure/SciFiEvent.hh" #include "src/common_cpp/DataStructure/SciFiSpacePoint.hh" #include "src/common_cpp/DataStructure/SciFiCluster.hh" #include "src/common_cpp/Recon/SciFi/SciFiSpacePointRec.hh" #include "gtest/gtest.h" namespace MAUS { class SciFiSpacePointRecTest : public ::testing::Test { protected: SciFiSpacePointRecTest() {} virtual ~SciFiSpacePointRecTest() {} virtual void SetUp() {} virtual void TearDown() {} }; TEST_F(SciFiSpacePointRecTest, test_default_constructor) { SciFiSpacePointRec test; double acceptable_radius = 160.0; double kuno_1_5 = 320.0; double kuno_else = 318.5; double kuno_tolerance = 3.0; EXPECT_EQ(acceptable_radius, test.get_acceptable_radius()); EXPECT_EQ(kuno_1_5, test.get_kuno_1_5()); EXPECT_EQ(kuno_else, test.get_kuno_else()); EXPECT_EQ(kuno_tolerance, test.get_kuno_tolerance()); } TEST_F(SciFiSpacePointRecTest, test_parameter_constructor) { double acceptable_radius = 160.0; double kuno_1_5 = 320.0; double kuno_else = 318.5; double kuno_tolerance = 3.0; SciFiSpacePointRec test(acceptable_radius, kuno_1_5, kuno_else, kuno_tolerance); EXPECT_EQ(acceptable_radius, test.get_acceptable_radius()); EXPECT_EQ(kuno_1_5, test.get_kuno_1_5()); EXPECT_EQ(kuno_else, test.get_kuno_else()); EXPECT_EQ(kuno_tolerance, test.get_kuno_tolerance()); } TEST_F(SciFiSpacePointRecTest, test_process) { int tracker = 1; int station = 2; int plane = 0; int channel = 106; double npe = 3.2; double time = 12.2; ThreeVector direction(0.0, 0.0, 1.0); ThreeVector position(1.0, 2.0, 3.0); SciFiCluster *Cluster = new SciFiCluster(); Cluster->set_tracker(tracker); Cluster->set_station(station); Cluster->set_plane(plane); Cluster->set_channel(channel); Cluster->set_npe(npe); Cluster->set_time(time); Cluster->set_direction(direction); Cluster->set_position(position); SciFiEvent event; event.add_cluster(Cluster); SciFiSpacePointRec test; test.process(event); int size = event.spacepoints().size(); EXPECT_EQ(0., size); SciFiCluster *Cluster2 = new SciFiCluster(); Cluster2->set_tracker(tracker); Cluster2->set_station(station); Cluster2->set_plane(1); Cluster2->set_channel(channel); Cluster->set_npe(npe); Cluster2->set_time(time); Cluster2->set_direction(direction); Cluster2->set_position(position); } TEST_F(SciFiSpacePointRecTest, test_duplet_radius) { SciFiSpacePointRec a_test; SciFiCluster* c1 = new SciFiCluster(); SciFiCluster* c2 = new SciFiCluster(); ThreeVector pos1(5.78222, -11.6053, -751.132); ThreeVector pos2(-50.6352, -0.604, -749.828); ThreeVector dir1(-0.866025, -0.5, 0); ThreeVector dir2(0.866025, -0.5, 0); c1->set_direction(dir1); c2->set_direction(dir2); c1->set_position(pos1); c2->set_position(pos2); bool test_1 = a_test.duplet_within_radius(c1, c2); EXPECT_TRUE(test_1); ThreeVector pos3(300.0, -11.6053, -751.132); ThreeVector pos4(300.0, -0.604, -749.828); c1->set_direction(pos3); c2->set_direction(pos4); bool test_2 = a_test.duplet_within_radius(c1, c2); EXPECT_FALSE(test_2); } TEST_F(SciFiSpacePointRecTest, test_clusters_arent_used) { SciFiCluster* c1 = new SciFiCluster(); SciFiCluster* c2 = new SciFiCluster(); SciFiCluster* c3 = new SciFiCluster(); SciFiSpacePointRec a_test; bool expect_true_triplets = a_test.clusters_are_not_used(c1, c2, c3); bool expect_true_duplets = a_test.clusters_are_not_used(c1, c2); EXPECT_TRUE(expect_true_triplets); EXPECT_TRUE(expect_true_duplets); c1->set_used(true); bool expect_false_triplets = a_test.clusters_are_not_used(c1, c2, c3); bool expect_false_duplets = a_test.clusters_are_not_used(c1, c2); EXPECT_FALSE(expect_false_triplets); EXPECT_FALSE(expect_false_duplets); } TEST_F(SciFiSpacePointRecTest, test_kuno_test) { SciFiCluster* c1 = new SciFiCluster(); SciFiCluster* c2 = new SciFiCluster(); SciFiCluster* c3 = new SciFiCluster(); c1->set_tracker(0); c2->set_tracker(0); c3->set_tracker(0); c1->set_station(1); c2->set_station(1); c3->set_station(1); c1->set_plane(0); c2->set_plane(1); c3->set_plane(2); c1->set_channel(106); c2->set_channel(106); c3->set_channel(106); SciFiSpacePointRec a_test; bool expect_true = a_test.kuno_accepts(c1, c2, c3); EXPECT_TRUE(expect_true); c1->set_station(4); bool expect_false = a_test.kuno_accepts(c1, c2, c3); EXPECT_FALSE(expect_false); } TEST_F(SciFiSpacePointRecTest, test_make_cluster_container) { SciFiEvent event; // Create 12 clusters belonging to dif planes... int tracker = 0; int station = 1; int plane = 0; for ( int i = 0; i < 60; ++i ) { SciFiCluster* cluster = new SciFiCluster(); cluster->set_tracker(tracker); cluster->set_station(station); cluster->set_plane(plane); event.add_cluster(cluster); tracker < 1 ? tracker += 1 : 0; station < 5 ? station += 1 : 1; plane < 2 ? plane += 1 : 0; } std::vector clusters[2][6][3]; SciFiSpacePointRec a_test; a_test.make_cluster_container(event, clusters); for ( int tracker = 0; tracker < 1; ++tracker ) { for ( int station = 1; station < 6; ++station ) { for ( int plane = 0; plane < 3; ++plane ) { int numb_clusters = clusters[tracker][station][plane].size(); for ( int clust_i = 0; clust_i < numb_clusters; ++clust_i ) { SciFiCluster* cluster = (clusters[tracker][station][plane])[clust_i]; int cluster_tracker = cluster->get_tracker(); int cluster_station = cluster->get_station(); int cluster_plane = cluster->get_plane(); EXPECT_EQ(tracker, cluster_tracker); EXPECT_EQ(station, cluster_station); EXPECT_EQ(plane, cluster_plane); } } } } } TEST_F(SciFiSpacePointRecTest, test_crossing_position) { // Calculate the crossing position of two clusters. // The expected crossing coordinates are: double expected_x = 7.; double expected_y = 10.; double expected_z = 0.; SciFiCluster* view_X = new SciFiCluster(); ThreeVector dir1(0., 1., 0.); ThreeVector pos1(expected_x, 0., expected_z); view_X->set_direction(dir1); view_X->set_position(pos1); SciFiCluster* view_W = new SciFiCluster(); ThreeVector dir2(1., 0., 0.); ThreeVector pos2(0., expected_y, expected_z); view_W->set_direction(dir2); view_W->set_position(pos2); SciFiSpacePointRec a_test; ThreeVector intersection = a_test.crossing_pos(view_X, view_W); EXPECT_EQ(expected_x, intersection.x()); EXPECT_EQ(expected_y, intersection.y()); EXPECT_EQ(expected_z, intersection.z()); } /* TEST_F(SciFiSpacePointRecTest, test_builds) { SciFiCluster* c1 = new SciFiCluster(); SciFiCluster* c2 = new SciFiCluster(); SciFiCluster* c3 = new SciFiCluster(); c1->set_spill(1); c1->set_event(1); c1->set_npe(3.); c2->set_npe(3.); c3->set_npe(3.); SciFiSpacePoint* triplet(c1, c2, c3); SciFiSpacePointRec a_test; a_test.build_triplet(triplet); _tracker = clust1->get_tracker(); _station = clust1->get_station(); } */ } // ~namespace MAUS