29#include <FairParAsciiFileIo.h>
30#include <FairParRootFileIo.h>
31#include <FairRunAna.h>
32#include <FairRuntimeDb.h>
37#include <TGeoManager.h>
50 : FairTask(
"TrdParManager")
71 FairRuntimeDb* rtdb = FairRunAna::Instance()->GetRuntimeDb();
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;
101 TGeoNode* station = node;
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;
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;
121 TString path = TString(
"/") + topNode->GetName() +
"/" + station->GetName() +
"/" + layer->GetName() +
"/"
122 +
module->GetName() + "/" + part->GetName();
135 printf(
"CbmTrdParManager::Finish()\n");
136 FairRuntimeDb* rtdb = FairRunAna::Instance()->GetRuntimeDb();
168 printf(
"\nCbmTrdParManager::CreateModuleParameters(%s) type[%d]\n", path.Data(), moduleType);
178 printf(
" sec[%d] dx[%5.2f] dy[%5.2f] px[%5.2f] py[%5.2f]\n", i, sectorSizeX[i], sectorSizeY[i], padSizeX[i],
200 sectorSizeY, padSizeX, padSizeY);
201 if (moduleType >= 9) {
213 if (moduleType >= 9) {
214 asics =
new CbmTrdParModAsic(Form(
"FaspPars%03d", moduleAddress), Form(
"Fasp set for Module %d", moduleAddress));
222 for (
Int_t c(0); c < ncol; c++) {
225 asicAddress = moduleAddress * 1000 + iasic;
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;
244 asics =
new CbmTrdParModAsic(
"TrdParModSpadic", Form(
"Spadic set for Module %d", moduleAddress));
251 Int_t nModuleChannels(nModuleColumns * nModuleRows);
253 Int_t nAsicsAlongColumns(-1);
255 std::vector<Int_t> chAddressesVec;
264 nAsicsAlongColumns = nModuleColumns < nModuleRows ? nModuleRows / 2 : nModuleColumns / (nAsicChannels / 2);
267 Int_t nThAsicRow(iAsic / nAsicsAlongColumns);
269 Int_t nThAsicColumn(iAsic % nAsicsAlongColumns);
271 chAddressesVec.clear();
272 chAddressesVec.resize(nAsicChannels);
274 Int_t iAsicChannel = 0;
275 for (
auto channelAddress : chAddressesVec) {
280 if ((channelAddress / (nAsicChannels / 2)) > 0) {
282 channelAddress -= (nAsicChannels / 2);
284 channelAddress += nModuleColumns;
287 channelAddress += nThAsicColumn * nAsicChannels / 2;
289 channelAddress += nThAsicRow * nModuleColumns * 2;
292 if (orientation == 2) {
293 channelAddress *= (-1);
294 channelAddress += (nModuleChannels - 1);
296 chAddressesVec.at(iAsicChannel) = channelAddress;
312 if (moduleType >= 9) {
313 gas =
new CbmTrdParModGas(Form(
"Module/%d/Ua/%d/Ud/%d/Gas/Xe", moduleAddress, 1900, 500));
318 gas =
new CbmTrdParModGas(Form(
"Module/%d/Ua/%d/Ud/%d/Gas/Xe", moduleAddress, 1600, 500));
339 FairRunAna* run = FairRunAna::Instance();
340 FairRuntimeDb* rtdb = run->GetRuntimeDb();
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",
"");
351 if (outDir.IsNull()) { outDir = Form(
"%s/../src/parameters/trd", getenv(
"CBM_ROOT")); }
353 TList* containerList = rtdb->getListOfContainers();
355 TString currentPar =
"";
357 FairParRootFileIo parOut;
358 parOut.open(Form(
"%s/%s.par.root", outDir.Data(), geoName.Data()),
"RECREATE");
359 rtdb->setOutput(&parOut);
361 for (
auto iContainerIt : *containerList) {
362 currentPar = iContainerIt->GetName();
363 if (!currentPar.Contains(
"CbmTrd"))
continue;
365 currentContainer->setChanged();
366 currentContainer->setInputVersion(0, 1);
379 FairRunAna* run = FairRunAna::Instance();
380 FairRuntimeDb* rtdb = run->GetRuntimeDb();
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",
"");
391 if (outDir.IsNull()) { outDir = Form(
"%s/../src/parameters/trd", getenv(
"CBM_ROOT")); }
393 TList* containerList = rtdb->getListOfContainers();
395 TString currentPar =
"";
396 TString currentFile =
"";
399 for (
auto iContainerIt : *containerList) {
400 currentPar = iContainerIt->GetName();
401 if (!currentPar.Contains(
"CbmTrd"))
continue;
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);
421 std::shared_ptr<CbmTrdParSet> parSet =
nullptr;
423 switch (iParSetType) {
430 parSetList->emplace_back(parSet);
438 switch (iParSetType) {
ClassImp(CbmConverterManager)
Helper class to extract information from the GeoManager.
Float_t fst1_pad_type[10][3][4]
Assign pad layout to TRD Modules.
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)
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....