CbmRoot
Loading...
Searching...
No Matches
CbmTrdParManager.cxx
Go to the documentation of this file.
1/* Copyright (C) 2008-2020 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Florian Uhlig [committer], Alexandru Bercuci, Pascal Raisig */
4
10#include "CbmTrdParManager.h"
11
12#include "CbmTrdGeoHandler.h" // for CbmTrdGeoHandler
13#include "CbmTrdPads.h" // for fst1_pad_type, fst1_sect_count
14#include "CbmTrdParAsic.h" // for CbmTrdParAsic, CbmTrdParAsic::kCriId...
15#include "CbmTrdParFasp.h" // for CbmTrdParFasp
16#include "CbmTrdParModAsic.h" // for CbmTrdParModAsic
17#include "CbmTrdParModDigi.h" // for CbmTrdParModDigi
18#include "CbmTrdParModGain.h" // for CbmTrdParModGain
19#include "CbmTrdParModGas.h" // for CbmTrdParModGas
20#include "CbmTrdParModGeo.h" // for CbmTrdParModGeo
21#include "CbmTrdParSet.h" // for CbmTrdParSet
22#include "CbmTrdParSetAsic.h" // for CbmTrdParSetAsic
23#include "CbmTrdParSetDigi.h" // for CbmTrdParSetDigi
24#include "CbmTrdParSetGain.h" // for CbmTrdParSetGain
25#include "CbmTrdParSetGas.h" // for CbmTrdParSetGas
26#include "CbmTrdParSetGeo.h" // for CbmTrdParSetGeo
27#include "CbmTrdParSpadic.h" // for CbmTrdParSpadic
28
29#include <FairParAsciiFileIo.h> // for FairParAsciiFileIo
30#include <FairParRootFileIo.h> // for FairParRootFileIo
31#include <FairRunAna.h> // for FairRunAna
32#include <FairRuntimeDb.h> // for FairRuntimeDb
33#include <FairTask.h> // for FairTask, InitStatus, kSUCCESS
34
35#include <TArrayD.h> // for TArrayD
36#include <TFile.h> // for TFile
37#include <TGeoManager.h> // for TGeoManager, gGeoManager
38#include <TGeoNode.h> // for TGeoNode
39#include <TList.h> // for TList
40#include <TObjArray.h> // for TObjArray
41#include <TObject.h> // for TObject
42#include <TRandom.h> // for TRandom, gRandom
43
44#include <cstdio> // for printf
45#include <cstdlib> // for getenv
46#include <memory>
47#include <vector> // for vector
48
50 : FairTask("TrdParManager")
51 , fMaxSectors(0)
52 , fFASP(fasp)
53 // fModuleMap(),
54 , fAsicPar(nullptr)
55 , fDigiPar(nullptr)
56 , fGasPar(nullptr)
57 , fGainPar(nullptr)
58 , fGeoPar(nullptr)
60 , fGeometryTag("")
62{
63 // Get the maximum number of sectors. All arrays will have this number of entries.
65}
66
68
70{
71 FairRuntimeDb* rtdb = FairRunAna::Instance()->GetRuntimeDb();
72 fAsicPar = (CbmTrdParSetAsic*) (rtdb->getContainer("CbmTrdParSetAsic"));
73 fDigiPar = (CbmTrdParSetDigi*) (rtdb->getContainer("CbmTrdParSetDigi"));
74 fGasPar = (CbmTrdParSetGas*) (rtdb->getContainer("CbmTrdParSetGas"));
75 fGainPar = (CbmTrdParSetGain*) (rtdb->getContainer("CbmTrdParSetGain"));
76 fGeoPar = (CbmTrdParSetGeo*) (rtdb->getContainer("CbmTrdParSetGeo"));
77}
78
80{
81 // The geometry structure is treelike with cave as
82 // the top node. For the TRD there are keeping volume
83 // trd_vXXy_1 which is only container for the different layers.
84 // The trd layer is again only a container for all volumes of this layer.
85 // Loop over all nodes below the top node (cave). If one of
86 // the nodes contains a string trd it must be TRD detector.
87 // Now loop over the layers and
88 // then over all modules of the layer to extract in the end
89 // all active regions (gas) of the complete TRD. For each
90 // of the gas volumes get the information about size and
91 // position from the geomanager and the sizes of the sectors
92 // and pads from the definitions in CbmTrdPads. This info
93 // is then stored in a CbmTrdModuleSim object for each of the
94 // TRD modules.
95
96 TGeoNode* topNode = gGeoManager->GetTopNode();
97 TObjArray* nodes = topNode->GetNodes();
98 for (Int_t iNode = 0; iNode < nodes->GetEntriesFast(); iNode++) {
99 TGeoNode* node = static_cast<TGeoNode*>(nodes->At(iNode));
100 if (!TString(node->GetName()).Contains("trd")) continue; // trd_vXXy top node, e.g. trd_v13a, trd_v14b
101 TGeoNode* station = node;
102 fGeometryTag = station->GetName();
103 fHardwareSetup.SelectComponentIdMap(fGeometryTag);
104 TObjArray* layers = station->GetNodes();
105 for (Int_t iLayer = 0; iLayer < layers->GetEntriesFast(); iLayer++) {
106 TGeoNode* layer = static_cast<TGeoNode*>(layers->At(iLayer));
107 if (!TString(layer->GetName()).Contains("layer")) continue; // only layers
108
109 TObjArray* modules = layer->GetNodes();
110 for (Int_t iModule = 0; iModule < modules->GetEntriesFast(); iModule++) {
111 TGeoNode* module = static_cast<TGeoNode*>(modules->At(iModule));
112 TObjArray* parts = module->GetNodes();
113 for (Int_t iPart = 0; iPart < parts->GetEntriesFast(); iPart++) {
114 TGeoNode* part = static_cast<TGeoNode*>(parts->At(iPart));
115 if (!TString(part->GetName()).BeginsWith("gas_")) continue; // only active gas volume
116
117 // Put together the full path to the interesting volume, which
118 // is needed to navigate with the geomanager to this volume.
119 // Extract the geometry information (size, global position)
120 // from this volume.
121 TString path = TString("/") + topNode->GetName() + "/" + station->GetName() + "/" + layer->GetName() + "/"
122 + module->GetName() + "/" + part->GetName();
123
125 }
126 }
127 }
128 }
129 Finish();
130 return kSUCCESS;
131}
132
134{
135 printf("CbmTrdParManager::Finish()\n");
136 FairRuntimeDb* rtdb = FairRunAna::Instance()->GetRuntimeDb();
137 fDigiPar = (CbmTrdParSetDigi*) (rtdb->getContainer("CbmTrdParSetDigi"));
138 fAsicPar = (CbmTrdParSetAsic*) (rtdb->getContainer("CbmTrdParSetAsic"));
139 fDigiPar->Print();
140 fAsicPar->Print();
141}
142
143void CbmTrdParManager::Exec(Option_t*) {}
144
145
147{
151
152 Int_t moduleAddress = fGeoHandler->GetModuleAddress(path);
153 Int_t orientation = fGeoHandler->GetModuleOrientation(path);
154
155 Double_t sizeX = fGeoHandler->GetSizeX(path);
156 Double_t sizeY = fGeoHandler->GetSizeY(path);
157 Double_t sizeZ = fGeoHandler->GetSizeZ(path);
158 Double_t x = fGeoHandler->GetX(path);
159 Double_t y = fGeoHandler->GetY(path);
160 Double_t z = fGeoHandler->GetZ(path);
161
162 TArrayD sectorSizeX(fMaxSectors);
163 TArrayD sectorSizeY(fMaxSectors);
164 TArrayD padSizeX(fMaxSectors);
165 TArrayD padSizeY(fMaxSectors);
166 Int_t moduleType = fGeoHandler->GetModuleType(path);
167
168 printf("\nCbmTrdParManager::CreateModuleParameters(%s) type[%d]\n", path.Data(), moduleType);
169 // TODO Should move the geoHandler functionality to CbmTrdParSetGeo and remove code duplication
170 CbmTrdParModGeo* geo = new CbmTrdParModGeo(Form("TRD_%d", moduleAddress), path.Data());
171 fGeoPar->addParam(geo);
172
173 for (Int_t i = 0; i < fst1_sect_count; i++) {
174 sectorSizeX.AddAt(fst1_pad_type[moduleType - 1][i][0], i);
175 sectorSizeY.AddAt(fst1_pad_type[moduleType - 1][i][1], i);
176 padSizeX.AddAt(fst1_pad_type[moduleType - 1][i][2], i);
177 padSizeY.AddAt(fst1_pad_type[moduleType - 1][i][3], i);
178 printf(" sec[%d] dx[%5.2f] dy[%5.2f] px[%5.2f] py[%5.2f]\n", i, sectorSizeX[i], sectorSizeY[i], padSizeX[i],
179 padSizeY[i]);
180 }
181
182 // Orientation of the detector layers
183 // Odd layers (1,3,5..) have resolution in x-direction (isRotated == 0) - vertical pads
184 // Even layers (2,4,6..) have resolution in y-direction (isRotated == 1) - horizontal pads
185 // Int_t isRotated = fGeoHandler->GetModuleOrientation(path);
186 // if( (isRotated%2) == 1 ) { // flip pads for even layers
187 // Double_t copybuf;
188 // for (Int_t i = 0; i < fMaxSectors; i++) {
189 // copybuf = padSizeX.At(i);
190 // padSizeX.AddAt(padSizeY.At(i), i);
191 // padSizeY.AddAt(copybuf, i);
192 // copybuf = sectorSizeX.At(i);
193 // sectorSizeX.AddAt(sectorSizeY.At(i), i);
194 // sectorSizeY.AddAt(copybuf, i);
195 // }
196 // }
197
198 // Create new digi par for this module.
199 CbmTrdParModDigi* digi = new CbmTrdParModDigi(x, y, z, sizeX, sizeY, sizeZ, fMaxSectors, orientation, sectorSizeX,
200 sectorSizeY, padSizeX, padSizeY);
201 if (moduleType >= 9) { // for the Bucharest inner detector special anode wire geometry
203 digi->SetAnodeWireOffset(0.);
204 digi->SetAnodeWireSpacing(0.3);
205 }
206 digi->SetModuleId(moduleAddress);
207 digi->Print();
208 fDigiPar->addParam(digi);
209
210 // Create new asic par for this module
211 CbmTrdParModAsic* asics(nullptr);
212 // if(moduleType>=9 && fFASP){ // I do not think this check is required, actually I think it creates a bug in parameter creation
213 if (moduleType >= 9) {
214 asics = new CbmTrdParModAsic(Form("FaspPars%03d", moduleAddress), Form("Fasp set for Module %d", moduleAddress));
215 asics->SetChamberType(moduleType);
216 Double_t par[6];
217 par[1] = 14;
218 par[4] = 4.181e-6;
219 Int_t iasic(0), ncol(digi->GetNofColumns()), asicAddress, chAddress;
220 CbmTrdParFasp* asic(nullptr);
221 for (Int_t r(0); r < digi->GetNofRows(); r++) {
222 for (Int_t c(0); c < ncol; c++) {
223 if (c % 8 == 0) {
224 if (asic) asics->SetAsicPar(asic);
225 asicAddress = moduleAddress * 1000 + iasic;
226 asic = new CbmTrdParFasp(asicAddress);
227 iasic++;
228 }
229 for (Int_t ipair(0); ipair < 2; ipair++) {
230 par[0] = gRandom->Gaus(300, 4);
231 par[2] = gRandom->Gaus(600, 40);
232 par[3] = gRandom->Gaus(2580, 10);
233 chAddress = 2 * (r * ncol + c) + ipair;
234 par[5] = ipair;
235 asic->SetChannelAddress(chAddress);
236 Int_t chIdFasp = asic->QueryChannel(chAddress);
237 asic->SetCalibParameters(chIdFasp, par);
238 }
239 }
240 }
241 if (asic) asics->SetAsicPar(asic);
242 }
243 else { // Here only rectangular modules should enter. Hence, we have spadics in use.
244 asics = new CbmTrdParModAsic("TrdParModSpadic", Form("Spadic set for Module %d", moduleAddress));
245 asics->SetChamberType(moduleType);
246 CbmTrdParSpadic* asic(nullptr);
247
248 // To write the channelAddresses to the parameter files we first of all need to now the number of columns, rows and channels. The numbering of the channels starts at the bottom left and goes along the short side (column) of the pads row by row, for a not rotated module. The rotation is also taken care about in the following code.
249 Int_t nModuleColumns(digi->GetNofColumns());
250 Int_t nModuleRows(digi->GetNofRows());
251 Int_t nModuleChannels(nModuleColumns * nModuleRows);
252
253 Int_t nAsicsAlongColumns(-1);
254
255 std::vector<Int_t> chAddressesVec;
256 for (Int_t iAsic = 0; iAsic < CbmTrdParSpadic::GetNasicsOnModule(moduleType); iAsic++) {
257 asic = new CbmTrdParSpadic(
258 1000 * moduleAddress
259 + iAsic); // nTh-asic + module address define asicAddress counting for asic starts at bottom left and goes left to right row by row
260
261 Int_t nAsicChannels(asic->GetNchannels());
262
263 // Figure out the number of asics per column, this is required since one spadic is connected to two rows
264 nAsicsAlongColumns = nModuleColumns < nModuleRows ? nModuleRows / 2 : nModuleColumns / (nAsicChannels / 2);
265
266 // Get the asic-row (= rows/2) for the given asic
267 Int_t nThAsicRow(iAsic / nAsicsAlongColumns);
268
269 Int_t nThAsicColumn(iAsic % nAsicsAlongColumns);
270
271 chAddressesVec.clear();
272 chAddressesVec.resize(nAsicChannels);
273
274 Int_t iAsicChannel = 0; // This is the nth asic channel as it is written to the raw messages
275 for (auto channelAddress : chAddressesVec) {
276 // Now apply the asic specific mapping
277 channelAddress = asic->GetAsicChAddress(iAsicChannel); // returns the channeladdress in the scope of one asic
278
279 // Get the channel addressed to the top or bottom row of the single asic
280 if ((channelAddress / (nAsicChannels / 2)) > 0) {
281 // if the address corresponds to the second 16 channels 16..31 it goes into the next row
282 channelAddress -= (nAsicChannels / 2);
283 // since we have only 16 channels per row we have to subtract 16 from channels 16..31
284 channelAddress += nModuleColumns;
285 }
286 // move channel address to the correct column according to the asic column position
287 channelAddress += nThAsicColumn * nAsicChannels / 2; // one asic is split over two rows
288 // move channel address to the correct row according to the asic row position
289 channelAddress += nThAsicRow * nModuleColumns * 2; // one asic is split over two rows
290
291 // if the module is rotated 180 or 270 degrees, the channel number counting has to be rotated as well, since the X-Y placing in CbmTrdParModDigi expect it in this way.
292 if (orientation == 2) {
293 channelAddress *= (-1);
294 channelAddress += (nModuleChannels - 1);
295 }
296 chAddressesVec.at(iAsicChannel) = channelAddress;
297 iAsicChannel++;
298 }
299
300 asic->SetChannelAddresses(chAddressesVec);
301 // Get the according hardware component Id for the real asic placed at the according position in the experiment
302 asic->SetComponentId(fHardwareSetup.GetComponentId(asic->GetAddress()));
303 asics->SetAsicPar(asic);
304 }
305 }
306 asics->SetModuleId(moduleAddress);
307 asics->Print();
308 fAsicPar->addParam(asics);
309
310 // Create new gas par for this module
311 CbmTrdParModGas* gas(nullptr);
312 if (moduleType >= 9) {
313 gas = new CbmTrdParModGas(Form("Module/%d/Ua/%d/Ud/%d/Gas/Xe", moduleAddress, 1900, 500));
314 gas->SetDetType(1);
315 gas->SetPidType(1);
316 }
317 else
318 gas = new CbmTrdParModGas(Form("Module/%d/Ua/%d/Ud/%d/Gas/Xe", moduleAddress, 1600, 500));
319 gas->Print();
320 fGasPar->addParam(gas);
321
322 // Create new gain par for this module
323 CbmTrdParModGain* gain(nullptr);
324 if (moduleType == 9) gain = new CbmTrdParModGain();
325 else
326 gain = new CbmTrdParModGain();
327 gain->SetModuleId(moduleAddress);
328 gain->Print();
329 fGainPar->addParam(gain);
330}
331
332// ---- CreateParFilesFromGeometry ------------------------------------------------
333bool CbmTrdParManager::CreateParFilesFromGeometry(bool createRootFileOutput, TString outDir)
334{
335 // This function creates the trd parameter files based on a given geometry file, which has to be passed in a macro to the FairRunAna instance. Such a geometry file is produced by FairRunSim bases on the trd geometry input.
336
337 if (!createRootFileOutput) return CreateParFilesFromGeometry(outDir);
338
339 FairRunAna* run = FairRunAna::Instance();
340 FairRuntimeDb* rtdb = run->GetRuntimeDb();
341
343
344 TString inputDirectory = run->GetGeoFile()->GetName();
345 inputDirectory.Resize((inputDirectory.Last('/') + 1));
346 TString geoName = run->GetGeoFile()->GetName();
347 geoName.ReplaceAll(inputDirectory.Data(), "");
348 geoName.ReplaceAll("geofile_", "");
349 geoName.ReplaceAll(".root", "");
350
351 if (outDir.IsNull()) { outDir = Form("%s/../src/parameters/trd", getenv("CBM_ROOT")); }
352
353 TList* containerList = rtdb->getListOfContainers();
354
355 TString currentPar = "";
356 CbmTrdParSet* currentContainer = nullptr;
357 FairParRootFileIo parOut;
358 parOut.open(Form("%s/%s.par.root", outDir.Data(), geoName.Data()), "RECREATE");
359 rtdb->setOutput(&parOut);
360
361 for (auto iContainerIt : *containerList) {
362 currentPar = iContainerIt->GetName();
363 if (!currentPar.Contains("CbmTrd")) continue; // make sure that we only edit Trd container
364 currentContainer = (CbmTrdParSet*) iContainerIt;
365 currentContainer->setChanged();
366 currentContainer->setInputVersion(0, 1);
367 }
368 rtdb->saveOutput();
369 rtdb->closeOutput();
370
371 return true; // check if rtdb->writeContainers() could be used to run a bool check and return that bool instead of saveOutput void
372}
373
374// ---- private - CreateParFilesFromGeometry --------------------------------------
376{
377 // This function creates the trd parameter files based on a given geometry file, which has to be passed in a macro to the FairRunAna instance. Such a geometry file is produced by FairRunSim bases on the trd geometry input.
378
379 FairRunAna* run = FairRunAna::Instance();
380 FairRuntimeDb* rtdb = run->GetRuntimeDb();
381
383
384 TString inputDirectory = run->GetGeoFile()->GetName();
385 inputDirectory.Resize((inputDirectory.Last('/') + 1));
386 TString geoName = run->GetGeoFile()->GetName();
387 geoName.ReplaceAll(inputDirectory.Data(), "");
388 geoName.ReplaceAll("geofile_", "");
389 geoName.ReplaceAll(".root", "");
390
391 if (outDir.IsNull()) { outDir = Form("%s/../src/parameters/trd", getenv("CBM_ROOT")); }
392
393 TList* containerList = rtdb->getListOfContainers();
394
395 TString currentPar = "";
396 TString currentFile = "";
397 CbmTrdParSet* currentContainer = nullptr;
398
399 for (auto iContainerIt : *containerList) {
400 currentPar = iContainerIt->GetName();
401 if (!currentPar.Contains("CbmTrd")) continue; // make sure that we only edit Trd container
402 currentContainer = (CbmTrdParSet*) iContainerIt;
403 currentPar.ReplaceAll("CbmTrdParSet", "");
404 currentPar.ToLower();
405 currentFile.Form("%s/%s.%s.par", outDir.Data(), geoName.Data(), currentPar.Data());
406 FairParAsciiFileIo parOut;
407 parOut.open(currentFile, "out");
408 rtdb->setOutput(&parOut);
409 currentContainer->setChanged();
410 currentContainer->setInputVersion(0, 1);
411 rtdb->saveOutput();
412 rtdb->closeOutput();
413 }
414 return true; // check if rtdb->writeContainers() could be used to run a bool check and return that bool instead of saveOutput void
415}
416
417// ---- GetParSetList ----
418void CbmTrdParManager::GetParSetList(std::vector<std::shared_ptr<CbmTrdParSet>>* parSetList)
419{
420 // std::vector<CbmTrdParSet*> parSetList;
421 std::shared_ptr<CbmTrdParSet> parSet = nullptr;
422 for (Int_t iParSetType = (Int_t) ECbmTrdParSets::kBegin; iParSetType <= (Int_t) ECbmTrdParSets::kEnd; iParSetType++) {
423 switch (iParSetType) {
424 case (Int_t) ECbmTrdParSets::kCbmTrdParSetAsic: parSet = std::make_shared<CbmTrdParSetAsic>(); break;
425 case (Int_t) ECbmTrdParSets::kCbmTrdParSetDigi: parSet = std::make_shared<CbmTrdParSetDigi>(); break;
426 case (Int_t) ECbmTrdParSets::kCbmTrdParSetGain: parSet = std::make_shared<CbmTrdParSetGain>(); break;
427 case (Int_t) ECbmTrdParSets::kCbmTrdParSetGas: parSet = std::make_shared<CbmTrdParSetGas>(); break;
428 case (Int_t) ECbmTrdParSets::kCbmTrdParSetGeo: parSet = std::make_shared<CbmTrdParSetGeo>(); break;
429 }
430 parSetList->emplace_back(parSet);
431 }
432}
433
434// ---- GetParFileExtensions ----
435void CbmTrdParManager::GetParFileExtensions(std::vector<std::string>* vec)
436{
437 for (Int_t iParSetType = (Int_t) ECbmTrdParSets::kBegin; iParSetType <= (Int_t) ECbmTrdParSets::kEnd; iParSetType++) {
438 switch (iParSetType) {
439 case (Int_t) ECbmTrdParSets::kCbmTrdParSetAsic: vec->emplace_back("asic"); break;
440 case (Int_t) ECbmTrdParSets::kCbmTrdParSetDigi: vec->emplace_back("digi"); break;
441 case (Int_t) ECbmTrdParSets::kCbmTrdParSetGain: vec->emplace_back("gas"); break;
442 case (Int_t) ECbmTrdParSets::kCbmTrdParSetGas: vec->emplace_back("gain"); break;
443 case (Int_t) ECbmTrdParSets::kCbmTrdParSetGeo: vec->emplace_back("geo"); break;
444 }
445 }
446}
447
448
449// void CbmTrdParManager::FillDigiPar()
450// {
451// printf("CbmTrdParManager::FillDigiPar()\n");
452// // Int_t nofModules = fModuleMap.size();
453// // fDigiPar->SetNrOfModules(nofModules);
454// // fDigiPar->SetMaxSectors(fMaxSectors);
455// //
456// // TArrayI moduleId(nofModules);
457// // Int_t iModule = 0;
458// // std::map<Int_t, CbmTrdModuleSim*>::iterator it;
459// // for (it = fModuleMap.begin() ; it != fModuleMap.end(); it++) {
460// // moduleId.AddAt(it->second->GetModuleAddress(), iModule);
461// // iModule++;
462// // }
463// //
464// // fDigiPar->SetModuleIdArray(moduleId);
465// // fDigiPar->SetModuleMap(fModuleMap);
466// }
467
ClassImp(CbmConverterManager)
Helper class to extract information from the GeoManager.
Float_t fst1_pad_type[10][3][4]
Definition CbmTrdPads.h:18
Int_t fst1_sect_count
Definition CbmTrdPads.h:15
Assign pad layout to TRD Modules.
int Int_t
bool Bool_t
virtual Int_t QueryChannel(Int_t ch) const
Query ASIC for specific pad address.
virtual void SetComponentId(size_t id)
virtual Int_t GetAddress() const
virtual void SetChannelAddress(Int_t address)
virtual void SetChannelAddresses(std::vector< Int_t > addresses)
Definition of FASP parameters.
virtual Bool_t SetCalibParameters(Int_t ch, Double_t const *par)
Load FASP calibration parameters for a specific channel.
Manipulate calibration parameters for the TRD detectors.
static void GetParFileExtensions(std::vector< std::string > *vec)
virtual void SetParContainers()
Inherited from FairTask.
Bool_t fFASP
Switch to FASP ASIC.
CbmTrdParSetDigi * fDigiPar
The set of read-out description parameters.
bool CreateParFilesFromGeometry(bool createRootFileOutput, TString outDir="")
Create parameter files from geometry in gGeoManager A run macro can be found in the trd cbm....
CbmTrdParSetGeo * fGeoPar
The set of gain conversion parameters.
void CreateModuleParameters(const TString &path)
virtual void Finish()
Inherited from FairTask.
CbmTrdParManager(Bool_t fasp=kFALSE)
enumerator for organising the existing parameter sets of the trd
static void GetParSetList(std::vector< std::shared_ptr< CbmTrdParSet > > *parSetList)
virtual InitStatus Init()
Inherited from FairTask.
virtual ~CbmTrdParManager()
Destructor.
CbmTrdParSetGas * fGasPar
The set of gas description parameters.
CbmTrdParSetAsic * fAsicPar
The set of ASIC characterization parameters.
CbmTrdGeoHandler * fGeoHandler
CbmTrdHardwareSetupR fHardwareSetup
virtual void Exec(Option_t *option)
Inherited from FairTask.
CbmTrdParSetGain * fGainPar
The set of gain conversion parameters.
Describe TRD module ASIC settings (electronic gain, delays, etc)
virtual void SetChamberType(Int_t t)
virtual void Print(Option_t *opt="") const
virtual void SetAsicPar(CbmTrdParAsic *p)
Initialize the ASIC parameters for DAQ id It applies to the list of ASICs.
Definition of chamber gain conversion for one TRD module.
void Print(Option_t *opt="") const
void SetAnodeWireToPadPlaneDistance(Double_t d)
void SetAnodeWireOffset(Double_t off)
Int_t GetNofRows() const
void SetAnodeWireSpacing(Double_t dw)
Int_t GetNofColumns() const
Definition of gain parameters for one TRD module.
Definition of gas parameters for one TRD module.
void SetDetType(Int_t gsi=0)
void SetPidType(Int_t like=1)
virtual void Print(Option_t *opt="") const
Definition of geometry for one TRD module.
virtual void SetModuleId(int m)
Describe TRD module ASIC settings (electronic gain, delays, etc)
Describe TRD module working settings (HV, etc)
Definition of SPADIC parameters.
virtual Int_t GetNchannels() const
static Int_t GetNasicsOnModule(Int_t moduleType)
Returns the number of asics on a given moduleType defined in eCbmTrdModuleTypes.
Int_t GetAsicChAddress(const Int_t asicChannel)
Returns the nth asic Channel in asic coordinates in single asic padplane coordinates....