Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
C
cbmroot
Manage
Activity
Members
Labels
Plan
Wiki
Redmine
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Computing
cbmroot
Commits
97f30861
Commit
97f30861
authored
1 year ago
by
Alexandru Bercuci
Browse files
Options
Downloads
Patches
Plain Diff
add module ASIC parameters
parent
7de3f705
No related branches found
No related tags found
1 merge request
!1228
Rebasing MR1179
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
core/detectors/trd/CbmTrdParModAsic.cxx
+163
-0
163 additions, 0 deletions
core/detectors/trd/CbmTrdParModAsic.cxx
core/detectors/trd/CbmTrdParModAsic.h
+102
-0
102 additions, 0 deletions
core/detectors/trd/CbmTrdParModAsic.h
with
265 additions
and
0 deletions
core/detectors/trd/CbmTrdParModAsic.cxx
0 → 100644
+
163
−
0
View file @
97f30861
/* Copyright (C) 2018-2020 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
SPDX-License-Identifier: GPL-3.0-only
Authors: Alexandru Bercuci [committer] */
#include
"CbmTrdParModAsic.h"
#include
"CbmTrdDigi.h"
// for eCbmTrdAsicType
#include
"CbmTrdParAsic.h"
// for CbmTrdParAsic
#include
"CbmTrdParFasp.h"
// for CbmTrdParFasp, NFASPCH, CbmTrdParFasp...
#include
"CbmTrdParMod.h"
// for CbmTrdParMod
#include
"CbmTrdParSpadic.h"
// for CbmTrdParSpadic, NSPADICCH
#include
<FairParamList.h>
// for FairParamList
#include
<Logger.h>
// for Logger, LOG
#include
<TArrayI.h>
// for TArrayI
#include
<TGenericClassInfo.h>
// for TGenericClassInfo
#include
<TObjArray.h>
#include
<TObjString.h>
#include
<TString.h>
// for Form
#include
<TSystem.h>
#include
<utility>
// for pair
#include
<stdint.h>
// for size_t
#include
<stdio.h>
// for printf
#include
<string.h>
// for strcmp
using
std
::
map
;
//_______________________________________________________________________________
CbmTrdParModAsic
::
CbmTrdParModAsic
(
const
char
*
name
,
const
char
*
title
)
:
CbmTrdParMod
(
name
,
title
)
,
fType
(
8
)
,
fCrobAdd
()
,
fModPar
()
{
}
//_______________________________________________________________________________
void
CbmTrdParModAsic
::
clear
()
{
for
(
auto
asic
:
fModPar
)
delete
asic
.
second
;
fModPar
.
clear
();
}
//_______________________________________________________________________________
Int_t
CbmTrdParModAsic
::
GetAsicAddress
(
Int_t
chAddress
)
const
{
/** Query the ASICs in the module set for the specified read-out channel.
* Returns the id of the ASIC within the module or -1 if all returns false.
*/
for
(
auto
asic
:
fModPar
)
{
if
(
asic
.
second
->
QueryChannel
(
chAddress
)
>=
0
)
return
asic
.
first
;
}
return
-
1
;
}
//_______________________________________________________________________________
void
CbmTrdParModAsic
::
GetAsicAddresses
(
std
::
vector
<
Int_t
>*
a
)
const
{
/** Query the ASICs in the module set for their addresses.
* Returns the list of these addresses in the vector prepared by the user
*/
for
(
auto
asic
:
fModPar
)
a
->
push_back
(
asic
.
first
);
}
//_______________________________________________________________________________
const
CbmTrdParAsic
*
CbmTrdParModAsic
::
GetAsicPar
(
Int_t
address
)
const
{
if
(
fModPar
.
find
(
address
)
==
fModPar
.
end
())
return
nullptr
;
return
fModPar
.
at
(
address
);
}
//_______________________________________________________________________________
CbmTrdParAsic
*
CbmTrdParModAsic
::
GetAsicPar
(
Int_t
address
)
{
if
(
fModPar
.
find
(
address
)
==
fModPar
.
end
())
return
nullptr
;
return
fModPar
[
address
];
}
//_______________________________________________________________________________
int
CbmTrdParModAsic
::
GetNofAsics
()
const
{
switch
(
fType
)
{
case
1
:
return
80
;
case
3
:
return
20
;
case
5
:
return
180
;
case
7
:
return
36
;
case
8
:
return
24
;
case
9
:
return
180
;
default:
LOG
(
warn
)
<<
GetName
()
<<
"::GetNofAsics : The chamber type "
<<
fType
<<
" has no mapping to ASICs. Skip."
;
}
return
0
;
}
//_______________________________________________________________________________
CbmTrdDigi
::
eCbmTrdAsicType
CbmTrdParModAsic
::
GetAsicType
()
const
{
switch
(
fType
)
{
case
1
:
case
3
:
case
5
:
case
7
:
case
8
:
return
CbmTrdDigi
::
eCbmTrdAsicType
::
kSPADIC
;
case
9
:
return
CbmTrdDigi
::
eCbmTrdAsicType
::
kFASP
;
default:
LOG
(
warn
)
<<
GetName
()
<<
"::GetAsicType : The chamber type "
<<
fType
<<
" has no mapping to ASICs. Skip."
;
}
return
CbmTrdDigi
::
eCbmTrdAsicType
::
kNTypes
;
}
//_______________________________________________________________________________
void
CbmTrdParModAsic
::
Print
(
Option_t
*
opt
)
const
{
printf
(
" %s Asics[%d]
\n
"
,
GetName
(),
GetNofAsics
());
if
(
strcmp
(
opt
,
"all"
)
==
0
)
{
for
(
auto
asic
:
fModPar
)
asic
.
second
->
Print
(
opt
);
}
}
//_______________________________________________________________________________
void
CbmTrdParModAsic
::
SetAsicPar
(
CbmTrdParAsic
*
p
)
{
int
address
=
p
->
GetAddress
();
if
(
fModPar
.
find
(
address
)
!=
fModPar
.
end
())
{
if
(
address
%
1000
==
999
)
return
;
LOG
(
warn
)
<<
GetName
()
<<
"::SetAsicPar : The ASIC @ "
<<
address
<<
" already initialized. Skip."
;
return
;
}
fModPar
[
address
]
=
p
;
}
//_______________________________________________________________________________
void
CbmTrdParModAsic
::
SetCrobAddresses
(
int
*
addresses
)
{
switch
(
fType
)
{
case
1
:
case
3
:
case
5
:
case
7
:
case
8
:
fCrobAdd
[
0
]
=
addresses
[
0
];
break
;
case
9
:
for
(
int
i
(
0
);
i
<
NCROBMOD
;
i
++
)
fCrobAdd
[
i
]
=
addresses
[
i
];
break
;
default:
LOG
(
warn
)
<<
GetName
()
<<
"::SetCrobAddresses : The chamber type "
<<
fType
<<
" has no mapping to CROBs. Skip."
;
}
}
ClassImp
(
CbmTrdParModAsic
)
This diff is collapsed.
Click to expand it.
core/detectors/trd/CbmTrdParModAsic.h
0 → 100644
+
102
−
0
View file @
97f30861
/* Copyright (C) 2018-2020 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
SPDX-License-Identifier: GPL-3.0-only
Authors: Alexandru Bercuci [committer] */
#ifndef CBMTRDPARMODASIC_H
#define CBMTRDPARMODASIC_H
#include
"CbmTrdDigi.h"
// for CbmTrdDigi::eCbmTrdAsicType
#include
"CbmTrdParMod.h"
// for CbmTrdParSet
#include
<Rtypes.h>
// for THashConsistencyHolder, ClassDef
#include
<RtypesCore.h>
// for Int_t, Bool_t, Option_t, UChar_t
#include
<map>
// for map
#include
<vector>
// for vector
class
CbmTrdParAsic
;
class
FairParamList
;
/**
* \brief Describe TRD module ASIC settings (electronic gain, delays, etc)
*
* The following concepts are used :
* - DAQ id : unique id of an ASIC composed of the format modId*1000+asicId.
* - modId : is calculated according to the CbmTrdAddress::GetModuleId().
* - asicId : uniquely identify the ASICs in one module.
* - chAddress : identify the read-out pad(s) connected to the ASIC. In the case of FASP it distinguish between R and T pairing
**/
class
CbmTrdParModAsic
:
public
CbmTrdParMod
{
friend
class
CbmTrdParSetAsic
;
public:
/** Standard constructor **/
CbmTrdParModAsic
(
const
char
*
name
=
"CbmTrdParModAsic"
,
const
char
*
title
=
"Generic list of ASICs for TRD modules"
);
/** \brief Destructor **/
virtual
~
CbmTrdParModAsic
()
{
clear
();}
/** \brief Reset all parameters **/
virtual
void
clear
();
/** \brief Query the ASICs in the module for their DAQ address.
* It applies to the list of ASICs.
* Returns the list of id of the ASICs within the module.
*/
virtual
void
GetAsicAddresses
(
std
::
vector
<
Int_t
>*
a
)
const
;
/** \brief Look for the ASIC which operates on a specific channel
* It applies to the list of ASICs.
*\param chAddress Pad address of the channel
*\return id of the ASIC operating on the channel. -1 in case of failure
*/
virtual
Int_t
GetAsicAddress
(
Int_t
chAddress
)
const
;
/** \brief Look for the ASIC parameters of a given DAQ id
* It applies to the list of ASICs.
* \param address ASIC address from DAQ
* \return A read-only pointer to the parameters
*/
virtual
const
CbmTrdParAsic
*
GetAsicPar
(
Int_t
address
)
const
;
/** \brief Look for the ASIC parameters of a given DAQ id
* It applies to the list of ASICs.
* \param address ASIC address from DAQ
* \return A read-write pointer to the parameters
*/
virtual
CbmTrdParAsic
*
GetAsicPar
(
Int_t
address
);
/** \brief Query the type of ASICs in the list*/
virtual
CbmTrdDigi
::
eCbmTrdAsicType
GetAsicType
()
const
;
/** \brief Query the type of chamber*/
virtual
Int_t
GetChamberType
()
const
{
return
fType
;
}
/** \brief Query the type of chamber*/
virtual
const
int
*
GetCrobAddresses
()
const
{
return
fCrobAdd
.
data
();
}
/** \brief Returns the number of INSTALLED ASICs for the current module
* It applies to the list of ASICs.
*/
virtual
size_t
GetNofAsicsOnModule
()
const
{
return
fModPar
.
size
();
}
/** \brief Returns the DEFAULT number of ASICs for the current module
*/
virtual
int
GetNofAsics
()
const
;
virtual
void
Print
(
Option_t
*
opt
=
""
)
const
;
/** \brief Initialize the ASIC parameters for DAQ id
* It applies to the list of ASICs.
*/
virtual
void
SetAsicPar
(
CbmTrdParAsic
*
p
);
virtual
void
SetChamberType
(
Int_t
t
)
{
fType
=
t
;
}
/** \brief Initialize the CROB addresses as they are used in the DAQ*/
virtual
void
SetCrobAddresses
(
int
*
addresses
);
protected
:
CbmTrdParModAsic
(
const
CbmTrdParModAsic
&
ref
);
const
CbmTrdParModAsic
&
operator
=
(
const
CbmTrdParModAsic
&
ref
);
uint8_t
fType
;
///< type of chamber for current module
std
::
vector
<
int
>
fCrobAdd
;
///< ordered list of Crobs for current module
std
::
map
<
int
,
CbmTrdParAsic
*>
fModPar
;
///< list of ASIC params for module
ClassDef
(
CbmTrdParModAsic
,
1
);
// The set of ASICs for one TRD modules
};
#endif
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment