CbmRoot
Loading...
Searching...
No Matches
CbmTrdParModAsic.cxx
Go to the documentation of this file.
1/* Copyright (C) 2018-2020 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Alexandru Bercuci [committer] */
4
5#include "CbmTrdParModAsic.h"
6
7#include "CbmTrdDigi.h" // for eCbmTrdAsicType
8#include "CbmTrdParAsic.h" // for CbmTrdParAsic
9#include "CbmTrdParFasp.h" // for CbmTrdParFasp, NFASPCH, CbmTrdParFasp...
10#include "CbmTrdParMod.h" // for CbmTrdParMod
11#include "CbmTrdParSpadic.h" // for CbmTrdParSpadic, NSPADICCH
12
13#include <FairParamList.h> // for FairParamList
14#include <Logger.h> // for Logger, LOG
15
16#include <TArrayI.h> // for TArrayI
17#include <TGenericClassInfo.h> // for TGenericClassInfo
18#include <TObjArray.h>
19#include <TObjString.h>
20#include <TString.h> // for Form
21#include <TSystem.h>
22
23#include <cstdint> // for size_t
24#include <cstdio> // for printf
25#include <cstring> // for strcmp
26#include <utility> // for pair
27
28using std::map;
29//_______________________________________________________________________________
30CbmTrdParModAsic::CbmTrdParModAsic(const char* name, const char* title)
31 : CbmTrdParMod(name, title)
32 , fType(8)
33 , fCrobAdd()
34 , fModPar()
35{
36}
37
38//_______________________________________________________________________________
40{
41 for (auto asic : fModPar)
42 delete asic.second;
43 fModPar.clear();
44}
45
46//_______________________________________________________________________________
48 const CbmTrdParFaspChannel*& rect) const
49{
50 if (pad < 0 || pad >= NFASPMOD * NFASPCH) return false;
51 for (int ich(0), ch(pad << 1); ich < 2; ich++, ch++) {
52 int faspAddress = GetAsicAddress(ch);
53 const CbmTrdParFasp* p = static_cast<const CbmTrdParFasp*>(GetAsicPar(faspAddress));
54 if (!p) {
55 LOG(debug) << GetName() << "::GetFaspChannelPar : Could not find FASP params for address=" << faspAddress
56 << " @ pad=" << pad;
57 continue;
58 }
59 if (ich) rect = p->GetChannel(pad, ich);
60 else
61 tilt = p->GetChannel(pad, ich);
62 }
63 return true;
64}
65
66//_______________________________________________________________________________
68{
72
73 for (auto asic : fModPar) {
74 if (asic.second->QueryChannel(chAddress) >= 0) return asic.first;
75 }
76 return -1;
77}
78
79//_______________________________________________________________________________
80void CbmTrdParModAsic::GetAsicAddresses(std::vector<Int_t>* a) const
81{
85 for (auto asic : fModPar)
86 a->push_back(asic.first);
87}
88
89//_______________________________________________________________________________
91{
92 if (fModPar.find(address) == fModPar.end()) return nullptr;
93 return fModPar.at(address);
94}
95
96//_______________________________________________________________________________
98{
99 if (fModPar.find(address) == fModPar.end()) return nullptr;
100 return fModPar[address];
101}
102
103//_______________________________________________________________________________
105{
106 switch (fType) {
107 case 1: return 80;
108 case 3: return 20;
109 case 5: return 108;
110 case 7: return 36;
111 case 8: return 24;
112 case 9: return 180;
113 default:
114 LOG(warn) << GetName() << "::GetNofAsics : The chamber type " << fType << " has no mapping to ASICs. Skip.";
115 }
116 return 0;
117}
118
119//_______________________________________________________________________________
121{
122 switch (fType) {
123 case 1:
124 case 3:
125 case 5:
126 case 7:
129 default:
130 LOG(warn) << GetName() << "::GetAsicType : The chamber type " << fType << " has no mapping to ASICs. Skip.";
131 }
133}
134
135//_______________________________________________________________________________
136int CbmTrdParModAsic::HasEqId(uint16_t eq, uint8_t& lnk) const
137{
138 int idx(0);
139 for (auto add : fCrobAdd) {
140 if ((add & 0xffff) == eq) {
141 lnk = 0;
142 return idx;
143 }
144 else if (((add >> 16) & 0xffff) == eq) {
145 lnk = 1;
146 return idx;
147 }
148 idx++;
149 }
150 return -1;
151}
152
153//_______________________________________________________________________________
154void CbmTrdParModAsic::Print(Option_t* opt) const
155{
156 printf(" %s Asics[%d] Crobs[%lu]\n", GetName(), GetNofAsics(), fCrobAdd.size());
157 printf(" ");
158 for (auto eqid : fCrobAdd)
159 printf(" %d", eqid);
160 printf("\n");
161 if (strcmp(opt, "all") == 0) {
162 for (auto asic : fModPar)
163 asic.second->Print(opt);
164 }
165}
166
167//_______________________________________________________________________________
169{
170 int address = p->GetAddress();
171 if (fModPar.find(address) != fModPar.end()) {
172 if (address % 1000 == 999) return;
173 LOG(warn) << GetName() << "::SetAsicPar : The ASIC @ " << address << " already initialized. Skip.";
174 return;
175 }
176 fModPar[address] = p;
177}
178
179//_______________________________________________________________________________
181{
182 switch (fType) {
183 case 1:
184 case 3:
185 case 5:
186 case 7:
187 case 8: fCrobAdd.push_back(addresses[0]); break;
188 case 9:
189 for (int i(0); i < NCROBMOD; i++)
190 fCrobAdd.push_back(addresses[i]);
191 break;
192 default:
193 LOG(warn) << GetName() << "::SetCrobAddresses : The chamber type " << fType << " has no mapping to CROBs. Skip.";
194 }
195}
196
197
ClassImp(CbmConverterManager)
#define NCROBMOD
int Int_t
Definition of ASIC parameters.
virtual Int_t GetAddress() const
Definition of FASP channel calibration container.
Definition of FASP parameters.
const CbmTrdParFaspChannel * GetChannel(Int_t pad_address, UChar_t pair) const
Query the calibration for one FASP RO channel.
Describe TRD module ASIC settings (electronic gain, delays, etc)
virtual void GetAsicAddresses(std::vector< Int_t > *a) const
Query the ASICs in the module for their DAQ address. It applies to the list of ASICs....
virtual void SetCrobAddresses(int *addresses)
Initialize the CROB addresses as they are used in the DAQ.
uint8_t fType
type of chamber for current module
std::map< int, CbmTrdParAsic * > fModPar
list of ASIC params for module
virtual int GetNofAsics() const
Returns the DEFAULT number of ASICs for the current module.
CbmTrdParModAsic(const char *name="CbmTrdParModAsic", const char *title="Generic list of ASICs for TRD modules")
virtual CbmTrdDigi::eCbmTrdAsicType GetAsicType() const
Query the type of ASICs in the list.
virtual void clear()
Reset all parameters.
virtual Int_t GetAsicAddress(Int_t chAddress) const
Look for the ASIC which operates on a specific channel It applies to the list of ASICs.
virtual const CbmTrdParAsic * GetAsicPar(Int_t address) const
Look for the ASIC parameters of a given DAQ id It applies to the list of ASICs.
bool GetFaspChannelPar(int pad, const CbmTrdParFaspChannel *&tilt, const CbmTrdParFaspChannel *&rect) const
Access the calibration objects describing the two FASP channels allocated to a pad....
virtual int HasEqId(uint16_t eqid, uint8_t &lnk) const
Query the existence of an equipment (CROB) by HW id on the current module params.
virtual void Print(Option_t *opt="") const
std::vector< int32_t > fCrobAdd
ordered list of Crobs for current module
virtual void SetAsicPar(CbmTrdParAsic *p)
Initialize the ASIC parameters for DAQ id It applies to the list of ASICs.
CbmTrdParMod(const char *name="CbmTrdParMod", const char *title="TRD generic module definition")
#define NFASPCH
#define NFASPMOD