forked from AliceO2Group/QualityControl
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathROCReductor.cxx
More file actions
70 lines (59 loc) · 2.33 KB
/
ROCReductor.cxx
File metadata and controls
70 lines (59 loc) · 2.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
// All rights not expressly granted are reserved.
//
// This software is distributed under the terms of the GNU General Public
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
//
// In applying this license CERN does not waive the privileges and immunities
// granted to it by virtue of its status as an Intergovernmental Organization
// or submit itself to any jurisdiction.
//
// file ROCReductor.cxx
// author Cindy Mordasini
// author Marcel Lesch
//
#include "TPC/ROCReductor.h"
#if __has_include("TPCBase/CalDet.h")
#include "TPCBase/CalDet.h"
#else
#include "TPCBaseRecSim/CalDet.h"
#endif
#include "TPCBase/CalArray.h"
#include "TPCQC/CalPadWrapper.h"
#include <TMath.h>
#include <vector>
#include <algorithm>
#include <cmath>
namespace o2::quality_control_modules::tpc
{
void* ROCReductor::getBranchAddress()
{
return &mCalPad;
} // void* ROCReductor::getBranchAddress()
const char* ROCReductor::getBranchLeafList()
{
return "entries[72]/I:mean[72]/F:stddev[72]:median[72]:rms[72]";
} // const char* ROCReductor::getBranchLeafList()
void ROCReductor::update(TObject* obj)
{
if (obj) {
auto wrappedCalDet = dynamic_cast<o2::tpc::qc::CalPadWrapper*>(obj);
if (wrappedCalDet) {
o2::tpc::CalPad* pcalDet = wrappedCalDet->getObj();
auto& calDet = *pcalDet;
for (size_t iROC = 0; iROC < calDet.getData().size(); ++iROC) {
auto& calArray = calDet.getCalArray(iROC);
auto& data = calArray.getData();
// Remove pads which are empty from consideration
data.erase(std::remove_if(data.begin(), data.end(), [](const auto& value) { return (std::isnan(value) || value <= 0); }), data.end());
mCalPad.entries[iROC] = static_cast<int>(data.size());
mCalPad.mean[iROC] = TMath::Mean(data.begin(), data.end());
mCalPad.stddev[iROC] = TMath::StdDev(data.begin(), data.end());
mCalPad.median[iROC] = TMath::Median(data.size(), data.data());
mCalPad.rms[iROC] = TMath::RMS(data.size(), data.data());
} // for (size_t iROC = 0; iROC < calDet.getData().size(); ++iROC)
} // if (wrappedCalDet)
} // if(obj)
} // void ROCReductor::update(TObject* obj)
} // namespace o2::quality_control_modules::tpc