- #include <fstream>
- #include <algorithm>
-
- // Gaudi
- #include "GaudiKernel/PhysicalConstants.h"
-
- // Tb/TbEvent
- #include "Event/TbCluster.h"
-
- // Tb/TbKernel
- #include "TbKernel/TbConstants.h"
- #include "TbKernel/TbFunctors.h"
-
- // Local
- #include "TbVisualiserOutput.h"
-
- DECLARE_ALGORITHM_FACTORY(TbVisualiserOutput)
-
- //=============================================================================
- // Standard constructor
- //=============================================================================
- TbVisualiserOutput::TbVisualiserOutput(const std::string& name,
- ISvcLocator* pSvcLocator)
- : TbAlgorithm(name, pSvcLocator), m_event(0) {
- declareProperty("ViewerEvent", m_viewerEvent = 7);
- declareProperty("ClusterLocation",
- m_clusterLocation = LHCb::TbClusterLocation::Default);
- declareProperty("TrackLocation",
- m_trackLocation = LHCb::TbTrackLocation::Default);
- }
-
- //=============================================================================
- // Destructor
- //=============================================================================
- TbVisualiserOutput::~TbVisualiserOutput() {}
-
- //=============================================================================
- // Initialization
- //=============================================================================
- StatusCode TbVisualiserOutput::initialize() {
-
- StatusCode sc = TbAlgorithm::initialize();
- if (sc.isFailure()) return sc;
- m_clusterFinder =
- tool<ITbClusterFinder>("TbClusterFinder", "ClusterFinder", this);
-
- return StatusCode::SUCCESS;
- }
-
- //=============================================================================
- // Main execution
- //=============================================================================
- StatusCode TbVisualiserOutput::execute() {
- m_tracks = getIfExists<LHCb::TbTracks>(m_trackLocation);
- if (!m_tracks) {
- return Error("No tracks in " + m_trackLocation);
- }
- if (m_event == m_viewerEvent) {
-
- for (unsigned int i = 0; i < m_nPlanes; ++i) {
- const std::string clusterLocation = m_clusterLocation + std::to_string(i);
- LHCb::TbClusters* clusters =
- getIfExists<LHCb::TbClusters>(clusterLocation);
- m_clusterFinder->setClusters(clusters, i);
- }
- outputViewerData();
- }
-
- m_event++;
- return StatusCode::SUCCESS;
- }
-
- //=============================================================================
- // Viewer output
- //=============================================================================
- void TbVisualiserOutput::outputViewerData() {
- std::ofstream myfile;
- myfile.open("KeplerViewerData.dat", std::ofstream::app);
- myfile << "# Output\n";
- // First output the chips.
- for (unsigned int i = 0; i < m_nPlanes; i++) {
- myfile << "Chip ";
- Gaudi::XYZPoint posn1(0., 14.08, 0.);
- Gaudi::XYZPoint posn = geomSvc()->localToGlobal(posn1, i);
- myfile << posn.x() << " " << posn.y() << " " << posn.z() << " ";
-
- Gaudi::XYZPoint posn2(14.08, 14.08, 0.);
- posn = geomSvc()->localToGlobal(posn2, i);
- myfile << posn.x() << " " << posn.y() << " " << posn.z() << " ";
-
- Gaudi::XYZPoint posn3(14.08, 0., 0.);
- posn = geomSvc()->localToGlobal(posn3, i);
- myfile << posn.x() << " " << posn.y() << " " << posn.z() << " ";
-
- Gaudi::XYZPoint posn4(0., 0., 0.);
- posn = geomSvc()->localToGlobal(posn4, i);
- myfile << posn.x() << " " << posn.y() << " " << posn.z() << " ";
-
- myfile << "\n";
- }
- // Tracks.
- for (const LHCb::TbTrack* track : *m_tracks) {
- myfile << "Track ";
- myfile << track->firstState().tx() << " " << track->firstState().x() << " "
- << track->firstState().ty() << " " << track->firstState().y() << " "
- << track->htime() << "\n";
- }
- // Clusters.
- for (unsigned int i = 0; i < m_nPlanes; i++) {
- auto ic = m_clusterFinder->first(i);
- const auto end = m_clusterFinder->end(i);
- for (; ic != end; ++ic) {
- const int tag = (*ic)->associated();
- myfile << "Cluster ";
- myfile << (*ic)->x() << " " << (*ic)->y() << " " << (*ic)->z() << " "
- << (*ic)->htime() << " " << tag << " \n";
- // Its hits.
- for (const auto hit : (*ic)->hits()) {
- myfile << "Pixel ";
- double xLocal = 0.;
- double yLocal = 0.;
- geomSvc()->pixelToPoint(hit->scol(), hit->row(), i, xLocal, yLocal);
- Gaudi::XYZPoint pLocal(xLocal - 0.5 * Tb::PixelPitch,
- yLocal - 0.5 * Tb::PixelPitch, 0.);
- Gaudi::XYZPoint posn = geomSvc()->localToGlobal(pLocal, i);
- myfile << posn.x() << " " << posn.y() << " " << posn.z() << " ";
- Gaudi::XYZPoint posn2(pLocal.x() + Tb::PixelPitch, pLocal.y(), 0.);
- posn = geomSvc()->localToGlobal(posn2, i);
- myfile << posn.x() << " " << posn.y() << " " << posn.z() << " ";
- Gaudi::XYZPoint posn3(pLocal.x() + Tb::PixelPitch,
- pLocal.y() + Tb::PixelPitch, 0.);
- posn = geomSvc()->localToGlobal(posn3, i);
- myfile << posn.x() << " " << posn.y() << " " << posn.z() << " ";
- Gaudi::XYZPoint posn4(pLocal.x(), pLocal.y() + Tb::PixelPitch, 0.);
- posn = geomSvc()->localToGlobal(posn4, i);
- myfile << posn.x() << " " << posn.y() << " " << posn.z() << " ";
- myfile << hit->htime() << " " << hit->ToT() << "\n";
- }
- }
- }
- myfile.close();
- }