Skip to content

Commit 303be36

Browse files
authored
[MCH] Added Processing of Digits and Preclusters (#515)
- Added PhysicsTasks for digits and preclusters processing - Added basic Check of occupancy level - Added Reductor and PostProcessing code for TrendingTasks
1 parent d3a6c8c commit 303be36

18 files changed

Lines changed: 1948 additions & 624 deletions

Modules/MUON/MCH/CMakeLists.txt

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,23 @@ set(SRCS
77
src/Decoding.cxx
88
src/GlobalHistogram.cxx
99
src/PedestalsTask.cxx
10-
src/PhysicsTask.cxx
10+
src/PhysicsTaskDigits.cxx
11+
src/PhysicsTaskPreclusters.cxx
1112
src/PedestalsCheck.cxx
13+
src/PhysicsCheck.cxx
14+
src/TH1MCHReductor.cxx
1215
)
1316

1417
set(HEADERS
1518
include/MCH/Mapping.h
1619
include/MCH/Decoding.h
1720
include/MCH/GlobalHistogram.h
1821
include/MCH/PedestalsTask.h
19-
include/MCH/PhysicsTask.h
22+
include/MCH/PhysicsTaskDigits.h
23+
include/MCH/PhysicsTaskPreclusters.h
2024
include/MCH/PedestalsCheck.h
25+
include/MCH/PhysicsCheck.h
26+
include/MCH/TH1MCHReductor.h
2127
)
2228

2329
# ---- Library ----
@@ -31,7 +37,7 @@ target_include_directories(
3137
)
3238

3339
target_link_libraries(${MODULE_NAME} PUBLIC QualityControl O2::CommonDataFormat O2::GPUCommon
34-
$<TARGET_NAME_IF_EXISTS:O2::MCHMappingFactory> O2::MCHMappingImpl3 O2::MCHMappingSegContour)
40+
$<TARGET_NAME_IF_EXISTS:O2::MCHMappingFactory> O2::MCHMappingImpl3 O2::MCHMappingSegContour O2::MCHRawDecoder O2::MCHPreClustering)
3541

3642
target_compile_definitions(${MODULE_NAME} PRIVATE $<$<TARGET_EXISTS:O2::MCHMappingFactory>:MCH_HAS_MAPPING_FACTORY>)
3743

@@ -49,8 +55,11 @@ add_root_dictionary(${MODULE_NAME}
4955
include/MCH/Decoding.h
5056
include/MCH/GlobalHistogram.h
5157
include/MCH/PedestalsTask.h
52-
include/MCH/PhysicsTask.h
58+
include/MCH/PhysicsTaskDigits.h
59+
include/MCH/PhysicsTaskPreclusters.h
60+
include/MCH/PhysicsCheck.h
5361
include/MCH/PedestalsCheck.h
62+
include/MCH/TH1MCHReductor.h
5463
include/MCH/sampa_header.h
5564
LINKDEF include/MCH/LinkDef.h)
5665

Modules/MUON/MCH/include/MCH/Decoding.h

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ struct SampaHit {
3737
uint32_t size, time;
3838
std::vector<uint16_t> samples;
3939
uint64_t csum;
40+
int32_t delta;
4041
MapPad pad;
4142
};
4243

@@ -49,14 +50,15 @@ struct DualSampa {
4950
int nsyn2Bits; // Nb of words waiting synchronization
5051
Sampa::SampaHeaderStruct header; // current channel header
5152
unsigned long bxc[2];
52-
uint32_t csize, ctime, cid, sample;
53+
int32_t csize, ctime, cid, sample;
5354
int chan_addr[2];
5455
uint64_t packetsize;
5556
int nbHit; // incremented each time a header packet is received for this card
5657
int nbHitChan[64]; // incremented each time a header packet for a given packet is received for this card
5758
int ndata[2][32];
5859
int nclus[2][32];
5960
double pedestal[2][32], noise[2][32];
61+
int32_t min[2][32], max[2][32], delta[2][32];
6062
SampaHit hit;
6163
};
6264

@@ -85,13 +87,30 @@ class Decoder
8587
std::vector<o2::mch::Digit>& getDigits() { return mDigits; }
8688
void reset();
8789

88-
int32_t getMapCRU(int cruid, int linkid) { return mMapCRU.getLink(cruid, linkid); }
90+
int32_t getMapCRU(int cruid, int linkid)
91+
{
92+
return mMapCRU.getLink(cruid, linkid);
93+
}
94+
95+
bool getMapCRUInv(int32_t link_id, int32_t& cruid, int32_t& crulink)
96+
{
97+
return mMapCRU.getLinkInv(link_id, cruid, crulink);
98+
}
99+
89100
int32_t getMapFEC(uint32_t link_id, uint32_t ds_addr, uint32_t& de, uint32_t& dsid)
90101
{
91102
if (!mMapFEC.getDSMapping(link_id, ds_addr, de, dsid))
92103
return -1;
93104
return de;
94105
}
106+
107+
int32_t getMapFECinv(uint32_t de, uint32_t dsid, uint32_t& link_id, uint32_t& ds_addr)
108+
{
109+
if (!mMapFEC.getDSMappingInv(de, dsid, link_id, ds_addr))
110+
return -1;
111+
return link_id;
112+
}
113+
95114
MapFEC& getMapFEC() { return mMapFEC; }
96115

97116
private:

Modules/MUON/MCH/include/MCH/GlobalHistogram.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,11 @@ class GlobalHistogram : public TH2F
3434
// add the histograms of the individual detection elements
3535
void add(std::map<int, TH2F*>& histB, std::map<int, TH2F*>& histNB);
3636

37+
// replace the contents with the histograms of the individual detection elements, including null bins
38+
void set_includeNull(std::map<int, TH2F*>& histB, std::map<int, TH2F*>& histNB);
39+
3740
// replace the contents with the histograms of the individual detection elements
38-
void set(std::map<int, TH2F*>& histB, std::map<int, TH2F*>& histNB, bool doAverage = true);
41+
void set(std::map<int, TH2F*>& histB, std::map<int, TH2F*>& histNB, bool doAverage = true, bool includeNullBins = false);
3942
};
4043

4144
} // namespace muonchambers

Modules/MUON/MCH/include/MCH/LinkDef.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
//#pragma link C++ class o2::quality_control_modules::muonchambers::Decoder+;
77
//#pragma link C++ class o2::quality_control_modules::muonchambers::MuonChambersMapping+;
88
#pragma link C++ class o2::quality_control_modules::muonchambers::PedestalsTask + ;
9-
#pragma link C++ class o2::quality_control_modules::muonchambers::PhysicsTask + ;
9+
#pragma link C++ class o2::quality_control_modules::muonchambers::PhysicsTaskDigits + ;
10+
#pragma link C++ class o2::quality_control_modules::muonchambers::PhysicsTaskPreclusters + ;
1011
#pragma link C++ class o2::quality_control_modules::muonchambers::PedestalsCheck + ;
12+
#pragma link C++ class o2::quality_control_modules::muonchambers::PhysicsCheck + ;
13+
#pragma link C++ class o2::quality_control_modules::muonchambers::TH1MCHReductor + ;
1114
#endif

Modules/MUON/MCH/include/MCH/Mapping.h

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include "QualityControl/TaskInterface.h"
1212

1313
#define MCH_DE_MAX 2000
14+
#define MCH_DSID_MAX 2047
1415
#define MCH_MAX_CRU_ID 31
1516
#define MCH_MAX_CRU_IN_FLP 31
1617
#define LINKID_MAX 0x7FF
@@ -33,6 +34,16 @@ class MapSolar
3334
~MapSolar();
3435
};
3536

37+
class MapSolarInv
38+
{
39+
public:
40+
int mCruId; // CRU ID
41+
int mCruLink; // CRU link
42+
43+
MapSolarInv();
44+
~MapSolarInv();
45+
};
46+
3647
class MapDualSampa
3748
{
3849
public:
@@ -44,6 +55,16 @@ class MapDualSampa
4455
~MapDualSampa();
4556
};
4657

58+
class MapDualSampaInv
59+
{
60+
public:
61+
int mLink; // detector element
62+
int mAddress; // DS index
63+
64+
MapDualSampaInv();
65+
~MapDualSampaInv();
66+
};
67+
4768
class MapPad
4869
{
4970
public:
@@ -67,24 +88,28 @@ class MapCRU
6788
{
6889

6990
MapSolar mSolarMap[MCH_MAX_CRU_IN_FLP][24];
91+
MapSolarInv mSolarMapInv[LINKID_MAX + 1];
7092

7193
public:
7294
MapCRU();
7395
bool readMapping(std::string mapFile);
7496
int32_t getLink(int32_t c, int32_t l);
97+
bool getLinkInv(uint32_t link_id, int32_t& c, int32_t& l);
7598
};
7699

77100
class MapFEC
78101
{
79102

80103
MapDualSampa mDsMap[LINKID_MAX + 1][40];
104+
MapDualSampaInv mDsMapInv[MCH_DE_MAX + 1][MCH_DSID_MAX + 1];
81105

82106
public:
83107
MapFEC();
84108
bool readDSMapping(std::string mapFile);
85109
bool getDSMapping(uint32_t link_id, uint32_t ds_addr, uint32_t& de, uint32_t& dsid);
110+
bool getDSMappingInv(uint32_t de, uint32_t dsid, uint32_t& link_id, uint32_t& ds_addr);
86111
bool getPadByLinkID(uint32_t link_id, uint32_t ds_addr, uint32_t dsch, MapPad& pad);
87-
bool getPadByDE(uint32_t de, uint32_t dsis, uint32_t dsch, MapPad& pad);
112+
bool getPadByDE(uint32_t de, uint32_t dsid, uint32_t dsch, MapPad& pad);
88113
};
89114

90115
} // namespace muonchambers
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
// Copyright CERN and copyright holders of ALICE O2. This software is
2+
// distributed under the terms of the GNU General Public License v3 (GPL
3+
// Version 3), copied verbatim in the file "COPYING".
4+
//
5+
// See http://alice-o2.web.cern.ch/license for full licensing information.
6+
//
7+
// In applying this license CERN does not waive the privileges and immunities
8+
// granted to it by virtue of its status as an Intergovernmental Organization
9+
// or submit itself to any jurisdiction.
10+
11+
///
12+
/// \file PhysicsCheck.h
13+
/// \author Andrea Ferrero, Sebastien Perrin
14+
///
15+
16+
#ifndef QC_MODULE_MCH_PHYSICSCHECK_H
17+
#define QC_MODULE_MCH_PHYSICSCHECK_H
18+
19+
#include "QualityControl/CheckInterface.h"
20+
#include "QualityControl/MonitorObject.h"
21+
#include "QualityControl/Quality.h"
22+
#include <string>
23+
24+
namespace o2::quality_control_modules::muonchambers
25+
{
26+
27+
/// \brief Check if the occupancy on each pad is between the two specified values
28+
///
29+
/// \author Andrea Ferrero, Sebastien Perrin
30+
class PhysicsCheck : public o2::quality_control::checker::CheckInterface
31+
{
32+
public:
33+
/// Default constructor
34+
PhysicsCheck();
35+
/// Destructor
36+
~PhysicsCheck() override;
37+
38+
// Override interface
39+
void configure(std::string name) override;
40+
Quality check(std::map<std::string, std::shared_ptr<MonitorObject>>* moMap) override;
41+
void beautify(std::shared_ptr<MonitorObject> mo, Quality checkResult = Quality::Null) override;
42+
std::string getAcceptedType() override;
43+
44+
private:
45+
int mPrintLevel;
46+
double minOccupancy;
47+
double maxOccupancy;
48+
ClassDefOverride(PhysicsCheck, 1);
49+
};
50+
51+
} // namespace o2::quality_control_modules::muonchambers
52+
53+
#endif // QC_MODULE_TOF_TOFCHECKRAWSTIME_H

Modules/MUON/MCH/include/MCH/PhysicsTask.h

Lines changed: 0 additions & 75 deletions
This file was deleted.

0 commit comments

Comments
 (0)