Project
Loading...
Searching...
No Matches
HitAnalysis.cxx
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
12//
13// HitAnalysis.cpp
14// ALICEO2
15//
16// Created by Markus Fasel on 28.07.15.
17//
18//
19
21
22#include <fairlogger/Logger.h> // for LOG
23#include <FairRootManager.h>
24#include <TH1.h> // for TH1, TH1D, TH1F
25#include <TFile.h>
26
27#include <vector>
31#include "MathUtils/Cartesian.h"
32#include "MathUtils/Utils.h"
33
35using o2::itsmft::Hit;
36
37using namespace o2::its;
38using namespace o2::base;
39using namespace o2::utils;
40
42 : FairTask(),
43 mIsInitialized(kFALSE),
44 mLocalX0(nullptr),
45 mLocalX1(nullptr),
46 mLocalY0(nullptr),
47 mLocalY1(nullptr),
48 mLocalZ0(nullptr),
49 mLocalZ1(nullptr),
50 mHitCounter(nullptr)
51{
52}
53
55{
56 // Delete geometry
57 delete mGeometry;
58 // Delete histograms
59 delete mLineSegment;
60 delete mLocalX0;
61 delete mLocalX1;
62 delete mLocalY0;
63 delete mLocalY1;
64 delete mLocalZ0;
65 delete mLocalZ1;
66}
67
69{
70 // Get the FairRootManager
71 FairRootManager* mgr = FairRootManager::Instance();
72 if (!mgr) {
73 LOG(error) << "Could not instantiate FairRootManager. Exiting ...";
74 return kERROR;
75 }
76
77 mHits = mgr->InitObjectAs<const std::vector<o2::itsmft::Hit>*>("ITSHit");
78 if (!mHits) {
79 LOG(error) << "ITS points not registered in the FairRootManager. Exiting ...";
80 return kERROR;
81 }
82
83 // Create geometry, initialize chip array
85 if (!geom->isBuilt()) {
86 geom->Build(true);
87 }
88 geom->fillMatrixCache(o2::math_utils::bit2Mask(o2::math_utils::TransformType::L2G)); // make sure T2L matrices are loaded
89
90 mGeometry = geom;
91
92 // Create histograms
93 // Ranges to be adjusted
96
97 mLineSegment = new TH1D("lineSegment", "Length of the line segment within the chip", 500, 0.0, 0.01);
98 mLocalX0 = new TH1D("localX0", "X position in local (chip) coordinates at the start of a hit", 5000, -2 * maxLengthX,
99 2 * maxLengthX);
100 mLocalX1 = new TH1D("localX1", "X position in local (chip) coordinates at the end of a hit", 500, -0.005, 0.005);
101 mLocalY0 = new TH1D("localY0", "Y position in local (chip) coordinates at the start of a hit", 5000, -2 * maxLengthY,
102 2. * maxLengthY);
103 mLocalY1 = new TH1D("localY1", "Y position in local (chip) coordinates at the end of a hit", 500, -0.005, 0.005);
104 mLocalZ0 = new TH1D("localZ0", "Z position in local (chip) coordinates at the start of a hit", 5000, 2 * maxLengthZ,
105 -2 * maxLengthZ);
106 mLocalZ1 = new TH1D("localZ1", "Z position in local (chip) coordinates at the end of a hit", 500, -0.005, 0.005);
107 mHitCounter = new TH1F("hitcounter", "Simple hit counter", 1, 0.5, 1.5);
108
109 mIsInitialized = kTRUE;
110 return kSUCCESS;
111}
112
113void HitAnalysis::Exec(Option_t* option)
114{
115 if (!mIsInitialized) {
116 return;
117 }
118 // Clear all chips
119 // for (auto chipiter : fChips) {
120 // chipiter.second.Clear();
121 //}
122
123 // Add test: Count number of hits in the points array (cannot be larger then the entries in the tree)
124 mHitCounter->Fill(1., mHits->size());
125
126 ProcessHits();
127}
128
130{
131 for (auto& hit : *mHits) {
132 auto loc = mGeometry->getMatrixL2G(hit.GetDetectorID()) ^ (hit.GetPos()); // global->local end position
133 auto locS = mGeometry->getMatrixL2G(hit.GetDetectorID()) ^ (hit.GetPosStart()); // global->local start position
134 auto glo = mGeometry->getMatrixL2G(hit.GetDetectorID())(loc);
135 auto gloS = mGeometry->getMatrixL2G(hit.GetDetectorID())(locS);
136 mLocalX0->Fill(locS.X());
137 mLocalY0->Fill(locS.Y());
138 mLocalZ0->Fill(locS.Z());
139 loc.SetXYZ(loc.X() - locS.X(), loc.Y() - locS.Y(), loc.Z() - locS.Z());
140 mLocalX1->Fill(loc.X());
141 mLocalY1->Fill(loc.Y());
142 mLocalZ1->Fill(loc.Z());
143 }
144}
145
147{
148 if (!mIsInitialized) {
149 return;
150 }
151
152 TFile* outfile = TFile::Open("hitanalysis.root", "RECREATE");
153 outfile->cd();
154 mLineSegment->Write();
155 mLocalX0->Write();
156 mLocalX1->Write();
157 mLocalY0->Write();
158 mLocalY1->Write();
159 mLocalZ0->Write();
160 mLocalZ1->Write();
161 mHitCounter->Write();
162 outfile->Close();
163 delete outfile;
164}
General auxilliary methods.
Definition of the ITSMFT Hit class.
Definition of the GeometryTGeo class.
Definition of the SegmentationAlpide class.
const Mat3D & getMatrixL2G(int sensID) const
static GeometryTGeo * Instance()
void Build(int loadTrans=0) override
Exract ITS parameters from TGeo.
void fillMatrixCache(int mask) override
void FinishTask() override
void Exec(Option_t *option) override
InitStatus Init() override
static constexpr float SensorLayerThickness
static constexpr float SensorSizeCols
static constexpr float SensorSizeRows
static constexpr int L2G
Definition Cartesian.h:54
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"