 |
ATLAS Offline Software
|
This class provides the converter to customize the saving of DataHeader.
More...
#include <DataHeaderCnv.h>
|
struct | placementComp |
| Cache for new DHForms created when writing, indexed by ref or placement. More...
|
|
|
virtual PERS * | createPersistent (TRANS *obj)=0 |
|
virtual PERS * | createPersistentWithKey (TRANS *obj, const std::string &) override |
| method to be implemented by the developer. More...
|
|
virtual TRANS * | createTransientWithKey (const std::string &) override |
| method to be implemented by the developer. More...
|
|
template<class P > |
P * | poolReadObject () |
| Read object of type P. More...
|
|
template<class P > |
void | poolReadObject (TopLevelTPCnvBase &tlp_converter) |
| Read object of type P (plus all extending objects) using the indicated top-level TP converter. More...
|
|
void | keepPoolObj (PERS *obj, const std::string &output) |
| Remember the POOL object to be written out (will be deleted after commit) More...
|
|
virtual StatusCode | transToPers (TRANS *, PERS *&) override |
| Obsolete methods replaced by createPersistent() and createTransient() obsolete. More...
|
|
virtual StatusCode | persToTrans (TRANS *&, PERS *) override |
| obsolete More...
|
|
virtual StatusCode | DataObjectToPers (DataObject *pObj, IOpaqueAddress *&pAddr) override |
| Convert an object into Persistent. More...
|
|
virtual StatusCode | PoolToDataObject (DataObject *&pObj, const Token *token, const std::string &key) override |
| Read an object from POOL. More...
|
|
virtual StatusCode | cleanUp (const std::string &output) override |
| Callback from the CleanupSvc to delete persistent object in the local list. More...
|
|
template<class P > |
Placement | setPlacementForP (P &p, const std::string &key, const std::string &output) |
| Set POOL placement for type P. More...
|
|
template<class P > |
StatusCode | objectToPool (P *pObj, std::unique_ptr< Token > &token, const std::string &key, const std::string &output) |
| Write an object into POOL returning its token. More...
|
|
template<class P > |
StatusCode | poolToObject (const Token *&token, P *&pObj) |
| Read an object from POOL. More...
|
|
virtual bool | compareClassGuid (const Guid &clid) const |
| Compare POOL class GUID with the one of the object being read. More...
|
|
virtual void | setToken (const std::string &token) |
| Set the token (in std::string representation) and classID for the object that will be read next. More...
|
|
virtual Placement | setPlacement (const std::string &key, const std::string &output) |
| Set POOL placement. More...
|
|
virtual Placement | setPlacementWithType (const std::string &tname, const std::string &key, const std::string &output) |
| Set POOL placement hint for a given type. More...
|
|
virtual const DataObject * | getDataObject () const |
|
double | phiCorr (double phi) |
|
void | ipCorr (double d0, double z0, double &d0c, double &z0c, double phi0, double eta, double pt) |
|
|
DataHeaderCnv_p6 | m_tpOutConverter |
|
DataHeaderCnv_p6 | m_tpInConverter |
|
RootType | m_dhFormType |
| cached shape of the DataHeaderForm_pN More...
|
|
bool | m_oneDHForm = true |
| if true write only one DataHeaderForm at the end (stop, finalize, or WriteDataHeaderForms incident) the value is read from AthenaPoolCnvSvc OneDataHeaderForm property More...
|
|
std::map< std::string, std::unique_ptr< DataHeaderForm_p6 >, placementComp > | m_persFormMap |
|
std::map< std::string, std::unique_ptr< DataHeaderForm_p6 > > | m_inputDHForms |
| DHForm cache indexed by the DHForm reference (from DataHeader) that was used to read it. More...
|
|
std::map< std::string, unsigned > | m_inDHFormCount |
| How many DHForms for an input file are in the cache. More...
|
|
unsigned | m_inDHFMapMaxsize |
| Max DHForms to cache per input file. More...
|
|
std::map< std::string, std::string > | m_lastGoodDHFRef |
|
DataHeaderCnv_p5 | m_tpInConverter_p5 |
| for use when reading DataHeader_p5 More...
|
|
std::unique_ptr< DataHeaderForm_p5 > | m_dhInForm5 |
|
std::string | m_dhFormMdx |
|
DataHeader_p6 * | m_sharedWriterCachedDH = nullptr |
| cached values for use with SharedWriter server More...
|
|
std::map< std::string, std::unique_ptr< DataHeaderForm_p6 > > | m_sharedWriterCachedDHForm |
| map of cached DHForms for DataHeader ID More...
|
|
std::string | m_sharedWriterCachedDHKey |
|
std::string | m_sharedWriterCachedDHToken |
|
std::map< std::string, std::vector< std::unique_ptr< PERS > > > | m_persObjLists |
| Local cache for persistent objects created by this converter, grouped by processing slot These objects are deleted after a commit. More...
|
|
std::mutex | m_pListMutex |
| protection mutex for m_persObjLists More...
|
|
Guid | m_classID |
|
ServiceHandle< StoreGateSvc > | m_detStore |
|
ServiceHandle< IAthenaPoolCnvSvc > | m_athenaPoolCnvSvc |
|
RootType | m_classDesc |
|
std::string | m_className |
|
ClassMap | m_classDescs |
|
std::string | m_containerPrefix |
|
std::string | m_containerNameHint |
|
std::string | m_branchNameHint |
|
const DataObject * | m_dataObject |
|
const Token * | m_i_poolToken |
|
CallMutex | m_conv_mut |
|
double | m_beamX |
|
double | m_beamY |
|
double | m_beamZ |
|
std::vector< TIDA::Track * > | m_tracks |
|
|
std::string | m_nm |
| Message source name. More...
|
|
boost::thread_specific_ptr< MsgStream > | m_msg_tls |
| MsgStream instance (a std::cout like with print-out levels) More...
|
|
std::atomic< IMessageSvc * > | m_imsg { nullptr } |
| MessageSvc pointer. More...
|
|
std::atomic< MSG::Level > | m_lvl { MSG::NIL } |
| Current logging level. More...
|
|
std::atomic_flag m_initialized | ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT |
| Messaging initialized (initMessaging) More...
|
|
This class provides the converter to customize the saving of DataHeader.
Definition at line 31 of file DataHeaderCnv.h.
◆ BaseType
template<class TRANS , class PERS >
◆ CallMutex
◆ ClassMap
◆ ClassMapIt
◆ DataHeaderCnv()
DataHeaderCnv::DataHeaderCnv |
( |
ISvcLocator * |
svcloc | ) |
|
◆ ~DataHeaderCnv()
DataHeaderCnv::~DataHeaderCnv |
( |
| ) |
|
Definition at line 40 of file DataHeaderCnv.cxx.
44 if( incSvc.retrieve().isSuccess() ) {
45 incSvc->removeListener(
this, IncidentType::EndInputFile);
◆ addTrack()
◆ classID()
template<class TRANS , class PERS >
◆ cleanUp()
template<class TRANS , class PERS >
|
overrideprotectedvirtualinherited |
Callback from the CleanupSvc to delete persistent object in the local list.
Reimplemented from AthenaPoolConverter.
◆ clear()
void Converter::clear |
( |
| ) |
|
|
inlineinherited |
◆ clearInputDHFormCache()
void DataHeaderCnv::clearInputDHFormCache |
( |
const std::string & |
dbGuid | ) |
|
Delete cached DHForms for a given input file GUID.
Definition at line 149 of file DataHeaderCnv.cxx.
153 size_t dbpos = iter->first.find(
"[DB=");
154 if( dbpos != std::string::npos && iter->first.compare(dbpos+4, dbpos+36, dbGuid) == 0 ) {
◆ compareClassGuid()
template<class TRANS , class PERS >
|
protectedvirtualinherited |
Compare POOL class GUID with the one of the object being read.
- Parameters
-
- Returns
- true if the type of the object about to be read matches the GUID
◆ createObj()
StatusCode AthenaPoolConverter::createObj |
( |
IOpaqueAddress * |
pAddr, |
|
|
DataObject *& |
pObj |
|
) |
| |
|
overridevirtualinherited |
Create a transient object from a POOL persistent representation.
- Parameters
-
pAddr | [IN] IOpaqueAddress of POOL persistent representation. |
pObj | [OUT] pointer to the transient object. |
Reimplemented in T_AthenaPoolCoolMultChanCnv< COLL_T, ELEM_T, ELEM_P >, T_AthenaPoolCoolMultChanCnv< LArHVScaleCorrComplete, LArConditionsSubset< LArSingleFloatP >, LArSingleFloatSubset_p1 >, and T_AthenaPoolCoolMultChanCnv< TransientClass, LArConditionsSubset< LArSingleFloatP >, LArSingleFloatSubset_p1 >.
Definition at line 61 of file AthenaPoolConverter.cxx.
64 bool ownTokAddr =
false;
65 if (tokAddr ==
nullptr || tokAddr->
getToken() ==
nullptr) {
67 auto token = std::make_unique<Token>();
68 token->fromString(*(pAddr->par()));
69 GenericAddress* genAddr =
dynamic_cast<GenericAddress*
>(pAddr);
71 ATH_MSG_ERROR(
"Dynamic cast failed in AthenaPoolConverter::createObj");
73 return StatusCode::FAILURE;
79 ::sprintf(
text,
"[CTXT=%08X]",
static_cast<int>(*(pAddr->ipar())));
87 std::string
key = pAddr->par()[1];
96 if (pObj ==
nullptr) {
100 delete tokAddr; tokAddr =
nullptr;
103 if (pObj ==
nullptr) {
104 return(StatusCode::FAILURE);
106 return(StatusCode::SUCCESS);
◆ createPersistent() [1/3]
◆ createPersistent() [2/3]
◆ createPersistent() [3/3]
template<class TRANS , class PERS >
|
protectedpure virtualinherited |
Implemented in ZdcRawChannelCollectionCnv, TruthParticleContainerCnv, TruthEtIsolationsContainerCnv, TRTUncompressedHitCollectionCnv, TrigTauTracksInfoCnv, TrigTauClusterDetailsCnv, TrigTauClusterCnv, TrigTauCnv, TrigRoiDescriptorCollectionCnv, TrigRoiDescriptorCnv, TrigRNNOutputCnv, TrigOperationalInfoCollectionCnv, TrigOperationalInfoCnv, TrigMonEventCollectionCnv, TrigMonEventCnv, TrigMonConfigCollectionCnv, TrigMonConfigCnv, TrigEMClusterCnv, TrigCompositeCnv, T_AthenaPoolViewVectorCnv< DV >, T_AthenaPoolLegacyCnv< TRANS, PERS, LEGACY >::LegacyCnv, T_AthenaPoolLegacyCnv< TRANS, PERS, LEGACY >, TrackRecordCollectionCnv, TileTTL1ContainerCnv, TileRawChannelContainerCnv, TileMuonReceiverContainerCnv, TileMuContainerCnv, TileL2ContainerCnv, TileHitVectorCnv, TileHitContainerCnv, TileDigitsContainerCnv, TileCosmicMuonContainerCnv, TileBeamElemContainerCnv, LArRawEventContainerCnv< T, P, C >, MuonRdoContainerTPCnv< T, P, CONV >, SimulationHitCollectionCnv, SiHitCollectionCnv, RingerRingsCnv, RecoTimingObjCnv, MuonSpShowerContainerCnv, PhotonContainerCnv, MuonCaloEnergyContainerCnv, MissingEtTruthCnv, MissingEtCaloCnv, MissingETCnv, McEventCollectionCnv, LArTTL1ContainerCnv, LArHitFloatContainerCnv, LArHitContainerCnv, IParticleLinkContainerCnv, InDetLowBetaCandidateCnv, INav4MomLinkContainerCnv, INav4MomAssocsCnv, ElectronContainerCnv, egDetailContainerCnv, egammaContainerCnv, eflowObjectContainerCnv, CaloRingsContainerCnv, CaloCalibrationHitContainerCnv, BCM_RDO_ContainerCnv, AthExFatObjectCnv, AthExElephantinoCnv, AthExDecayCnv, MuonContainerCnv, TauJetContainerCnv, TauDetailsContainerCnv, ALFA_ODHitCollectionCnv, ALFA_ODDigitCollectionCnv, ALFA_LocRecODEvCollectionCnv, ALFA_LocRecEvCollectionCnv, ALFA_LocRecCorrODEvCollectionCnv, ALFA_LocRecCorrEvCollectionCnv, ALFA_HitCollectionCnv, ALFA_GloRecEvCollectionCnv, ALFA_DigitCollectionCnv, ALFA_CLinkEventCnv, AFP_TDSimHitCollectionCnv, AFP_TDLocRecoEvCollectionCnv, AFP_TDDigiCollectionCnv, AFP_SIDSimHitCollectionCnv, AFP_SIDLocRecoEvCollectionCnv, and AFP_SiDigiCollectionCnv.
◆ createPersistentWithKey()
template<class TRANS , class PERS >
|
overrideprotectedvirtualinherited |
method to be implemented by the developer.
It should create the persistent representation of the object, using the default top-level TP converter.
- Parameters
-
- Returns
- the created persistent representation (by pointer)
Implements T_AthenaPoolCustomCnvWithKey< TRANS, PERS >.
◆ createRep()
StatusCode AthenaPoolConverter::createRep |
( |
DataObject * |
pObj, |
|
|
IOpaqueAddress *& |
pAddr |
|
) |
| |
|
overridevirtualinherited |
◆ createTransient()
Implements T_AthenaPoolCustomCnv< TRANS, PERS >.
Definition at line 559 of file DataHeaderCnv.cxx.
565 std::string bestPfn, fileType;
571 static const pool::Guid p6_guid(
"4DDBD295-EFCE-472A-9EC8-15CD35A9EB8D");
572 static const pool::Guid p5_guid(
"D82968A1-CF91-4320-B2DD-E0F739CBC7E6");
573 static const pool::Guid p4_guid(
"9630EB7B-CCD7-47D9-A39B-CBBF4133CDF2");
574 static const pool::Guid p3_guid(
"EC1318F0-8E28-45F8-9A2D-2597C1CC87A6");
588 std::unique_ptr<DataHeader_p4> obj_p4(this->poolReadObject<DataHeader_p4>());
592 std::unique_ptr<DataHeader_p3> obj_p3(this->poolReadObject<DataHeader_p3>());
598 std::string
error =
e.what();
599 throw std::runtime_error(
error);
◆ createTransientWithKey()
template<class TRANS , class PERS >
|
overrideprotectedvirtualinherited |
method to be implemented by the developer.
It has to find out the type of the persistent object to be read (by comparing GUIDs), read it using poolReadObject<P>(), call TLP converter to create a transient representation and return it. if the version 1 of poolReadObject is used, the persistent object HAS TO BE DELETED manually.
Implements T_AthenaPoolCustomCnvWithKey< TRANS, PERS >.
◆ DataObjectToPers()
template<class TRANS , class PERS >
|
overrideprotectedvirtualinherited |
Convert an object into Persistent.
- Parameters
-
pObj | [IN] pointer to the transient object. |
key | [IN] StoreGate key (string) - placement hint to generate POOL container name |
Reimplemented from T_AthenaPoolCustCnv< TRANS, PERS >.
◆ DataObjectToPool()
StatusCode DataHeaderCnv::DataObjectToPool |
( |
IOpaqueAddress * |
pAddr, |
|
|
DataObject * |
pObj |
|
) |
| |
|
overridevirtual |
Write an object into POOL.
- Parameters
-
pObj | [IN] pointer to the transient object. |
key | [IN] StoreGate key (string) - placement hint to generate POOL container name |
Reimplemented from T_AthenaPoolCustomCnvWithKey< TRANS, PERS >.
Definition at line 288 of file DataHeaderCnv.cxx.
292 ATH_MSG_ERROR(
"Failed to cast DataHeader to transient type" );
293 return(StatusCode::FAILURE);
297 std::string form_placement_str = dhf_placement.
toString();
299 std::unique_ptr<DataHeaderForm_p6>& dhForm =
m_persFormMap[form_placement_str];
300 if (dhForm ==
nullptr) {
302 dhForm = std::make_unique<DataHeaderForm_p6>();
309 const std::string connection = dh_placement.
fileName();
315 ATH_MSG_FATAL(
"Failed to convert DataHeader to persistent type: " <<
e.what());
316 return(StatusCode::FAILURE);
320 if (dh_token ==
nullptr) {
322 return(StatusCode::FAILURE);
332 static const RootType dhFormType(
typeid(*dhForm));
334 if (dhf_token ==
nullptr) {
336 return(StatusCode::FAILURE);
341 ATH_MSG_DEBUG(
"Technology does not support setting DHF token for: " << dh_token->toString());
345 dhf_token->
release(); dhf_token =
nullptr;
355 form_placement_str +=
std::format(
"[DB={}]", dh_token->dbID().toString());
356 dhForm->
setToken( form_placement_str );
358 form_placement_str = dhForm->
getToken();
361 auto b = form_placement_str.find(
"[FILE=");
362 auto e = form_placement_str.find(
"]",
b);
363 form_placement_str.erase(
b,
e-
b+1);
369 if (
list !=
nullptr) {
370 obj->setEvtRefTokenStr(dh_token->toString());
373 obj->getEvtRefTokenStr().c_str(),
375 delete ref_token; ref_token =
nullptr;
376 for (coral::AttributeList::const_iterator iter =
list->begin(), last =
list->end(); iter != last; ++iter) {
377 attr_placement = this->
setPlacementWithType(
"AttributeList", (*iter).specification().name(), *pAddr->par());
379 (*iter).addressOfData(),
380 RootType((*iter).specification().type()) );
381 delete attr_token; attr_token =
nullptr;
385 if (tokAddr !=
nullptr) {
386 tokAddr->
setToken(std::move(dh_token));
388 return(StatusCode::FAILURE);
390 return(StatusCode::SUCCESS);
◆ detStore()
◆ fillRepRefs()
StatusCode AthenaPoolConverter::fillRepRefs |
( |
IOpaqueAddress * |
pAddr, |
|
|
DataObject * |
pObj |
|
) |
| |
|
overridevirtualinherited |
◆ finalize()
StatusCode AthenaPoolConverter::finalize |
( |
| ) |
|
|
overridevirtualinherited |
◆ getDataObject()
const DataObject * AthenaPoolConverter::getDataObject |
( |
| ) |
const |
|
protectedvirtualinherited |
◆ handle()
void DataHeaderCnv::handle |
( |
const Incident & |
incident | ) |
|
|
overridevirtual |
Incident service handle listening for EndInputFile.
Definition at line 89 of file DataHeaderCnv.cxx.
91 if( incident.type() ==
"PreFork" ) {
94 if( incident.type() == IncidentType::EndInputFile ) {
96 const std::string&
guid =
static_cast<const FileIncident&
>(incident).fileGuid();
99 if( incident.type() ==
"WriteDataHeaderForms" ) {
101 const std::string&
fileName =
static_cast<const FileIncident*
>(&incident)->
fileName();
103 std::vector<std::string> toWrite;
104 auto pos =
fileName.find(
"[OutputCollection=MetaDataHdr]");
105 bool metaDataCommit = (
pos != std::string::npos);
106 std::string justFileName =
fileName.substr(0,
pos);
110 const std::string& placementStr = elem.first;
116 if( (placementStr.find(
"[CONT=MetaData") != std::string::npos) == metaDataCommit ) {
117 toWrite.push_back( placementStr );
122 for( std::size_t
n = 0;
const std::string& placementStr : toWrite ) {
126 if( form_ptr->isModified() ) {
127 static const RootType dhFormType(
typeid( *form_ptr ) );
131 std::string
errmsg =
std::format(
"Failed to write {} {}", dhFormType.Name(), placementStr);
133 throw GaudiException(errmsg,
"DataHeaderCnv::WriteDataHeaderForms", StatusCode::FAILURE);
135 ATH_MSG_DEBUG(
"Wrote DatHeaderForm, placeemnt was " << placementStr <<
" token=" << form_token->
toString());
136 form_token->
release(); form_token =
nullptr;
137 bool doCommit = (++
n == toWrite.size());
140 throw GaudiException(
"WriteDataHeaderForms failed",
"DataHeaderCnv::WriteDataHeaderForms", StatusCode::FAILURE);
◆ initialize()
StatusCode DataHeaderCnv::initialize |
( |
| ) |
|
|
overridevirtual |
Gaudi Service Interface method implementations:
Reimplemented from T_AthenaPoolCustCnv< TRANS, PERS >.
Definition at line 49 of file DataHeaderCnv.cxx.
53 bool doFilterDHAliases =
true;
54 SmartIF<IProperty> cnvSvc{service(
"AthenaPoolCnvSvc")};
57 if( cnvSvc->getProperty(&sizeProp).isSuccess() ) {
60 BooleanProperty aliasFilterProp(
"doFilterDHAliases", doFilterDHAliases);
61 if( cnvSvc->getProperty(&aliasFilterProp).isSuccess() ) {
62 doFilterDHAliases = aliasFilterProp.value();
64 BooleanProperty oneDHForm(
"OneDataHeaderForm",
m_oneDHForm);
65 if( cnvSvc->getProperty(&oneDHForm).isSuccess() ) {
70 if( doFilterDHAliases ) {
81 incSvc->addListener(
this, IncidentType::EndInputFile, 0);
82 incSvc->addListener(
this,
"PreFork", 0);
84 incSvc->addListener(
this,
"WriteDataHeaderForms", 0);
◆ initMessaging()
void AthMessaging::initMessaging |
( |
| ) |
const |
|
privateinherited |
Initialize our message level and MessageSvc.
This method should only be called once.
Definition at line 39 of file AthMessaging.cxx.
◆ ipCorr()
void Converter::ipCorr |
( |
double |
d0, |
|
|
double |
z0, |
|
|
double & |
d0c, |
|
|
double & |
z0c, |
|
|
double |
phi0, |
|
|
double |
eta, |
|
|
double |
pt |
|
) |
| |
|
inlineprotectedinherited |
Definition at line 257 of file Converter.h.
261 double sd0 = (
d0 != 0 ?
d0/fabs(
d0) : 1);
262 double spt = (
pt != 0 ?
pt/fabs(
pt) : 1);
270 double rc = fabs(
pt)*15.0/(9.0*1.042);
276 double xd01,yd01,xd02,yd02;
279 xd01 = 0; yd01 =
rc+yc;
280 xd02 = 0; yd02 = -
rc+yc;
282 xd01 = xc+yc/xc*yc+sqrt(
pow((xc+yc/xc*yc),2)-xc*xc-yc*yc+rc*rc); yd01 = yc/xc*xd01;
283 xd02 = xc+yc/xc*yc-sqrt(
pow((xc+yc/xc*yc),2)-xc*xc-yc*yc+rc*rc); yd02 = yc/xc*xd02;
286 double r1 = sqrt(xd01*xd01+yd01*yd01);
287 double r2 = sqrt(xd02*xd02+yd02*yd02);
292 phiV = atan2(yd01,xd01);
294 phiV = atan2(yd02,xd02);
304 d0c = fabs(sqrt(xc*xc+yc*yc)-rc)*
sin(phiV-newphi);
307 double theta_save=
theta;
◆ keepPoolObj()
template<class TRANS , class PERS >
Remember the POOL object to be written out (will be deleted after commit)
- Parameters
-
obj | [IN] persistent object |
◆ msg() [1/2]
MsgStream & AthMessaging::msg |
( |
| ) |
const |
|
inlineinherited |
The standard message stream.
Returns a reference to the default message stream May not be invoked before sysInitialize() has been invoked.
Definition at line 164 of file AthMessaging.h.
◆ msg() [2/2]
MsgStream & AthMessaging::msg |
( |
const MSG::Level |
lvl | ) |
const |
|
inlineinherited |
The standard message stream.
Returns a reference to the default message stream May not be invoked before sysInitialize() has been invoked.
Definition at line 179 of file AthMessaging.h.
180 {
return msg() << lvl; }
◆ msgLvl()
bool AthMessaging::msgLvl |
( |
const MSG::Level |
lvl | ) |
const |
|
inlineinherited |
Test the output level.
- Parameters
-
lvl | The message level to test against |
- Returns
- boolean Indicating if messages at given level will be printed
- Return values
-
true | Messages at level "lvl" will be printed |
Definition at line 151 of file AthMessaging.h.
◆ objectToPool()
template<class TRANS , class PERS >
template<class P >
Write an object into POOL returning its token.
- Parameters
-
pObj | [IN] pointer to the object to be written. |
token | [OUT] POOL token of the persistent representation. |
key | [IN] StoreGate key (string) - placement hint to generate POOL container name |
◆ persToTrans()
template<class TRANS , class PERS >
|
inlineoverrideprotectedvirtualinherited |
◆ phiCorr()
double Converter::phiCorr |
( |
double |
phi | ) |
|
|
inlineprotectedinherited |
Definition at line 248 of file Converter.h.
250 if (
phi < -TMath::Pi())
phi += 2*TMath::Pi();
251 if (
phi > TMath::Pi())
phi -= 2*TMath::Pi();
◆ poolReadObject() [1/2]
template<class TRANS , class PERS >
template<class P >
Read object of type P.
This is an exception-throwing version of poolToObject() plus reading of all extending objects. Version 1 - (see createTransient() above)
- Returns
- object read from POOL (by pointer)
◆ poolReadObject() [2/2]
template<class TRANS , class PERS >
template<class P >
Read object of type P (plus all extending objects) using the indicated top-level TP converter.
Version 2 - (see createTransient() above) NOTE: the TLP converter will delete the persistent object after createTransient()
- Parameters
-
tlp_converter | [IN] top-level TP converter to be used when reading |
◆ poolReadObject_p5()
std::unique_ptr< DataHeader_p5 > DataHeaderCnv::poolReadObject_p5 |
( |
| ) |
|
Definition at line 394 of file DataHeaderCnv.cxx.
396 void* voidPtr1 =
nullptr;
398 if (voidPtr1 ==
nullptr) {
403 void* voidPtr2 =
nullptr;
410 if (voidPtr2 ==
nullptr) {
411 throw std::runtime_error(
"Could not get object for token = " + mapToken.
toString());
◆ poolReadObject_p6()
std::unique_ptr< DataHeader_p6 > DataHeaderCnv::poolReadObject_p6 |
( |
| ) |
|
Definition at line 423 of file DataHeaderCnv.cxx.
425 void* voidPtr1 =
nullptr;
426 std::string error_message;
431 error_message =
err.what();
433 if (voidPtr1 ==
nullptr) {
434 throw std::runtime_error(
"Could not get object for token = " +
m_i_poolToken->
toString() +
", " + error_message);
438 std::string dhFormToken =
header->dhFormToken();
440 if( !dhFormToken.empty() and dhFormToken.find(
"[OID=") == std::string::npos) {
451 oid2 >>= 32; oid2 <<= 32;
454 if( !swn.empty() ) oid2 += std::stoul( swn ) - 1;
455 formToken.
setOid( {0,oid2} );
458 header->setDhFormToken( dhFormToken );
463 size_t dbpos = dhFormToken.find(
"[DB=");
464 if( dbpos != std::string::npos ) {
465 const std::string dbGuid = dhFormToken.substr(dbpos+4, dbpos+36);
473 void* voidPtr2 =
nullptr;
474 if( dhFormToken.empty() ) {
487 error_message =
err.what();
489 if (voidPtr2 ==
nullptr) {
495 void* firstPtr1 =
nullptr;
500 error_message =
err.what();
502 if (firstPtr1 ==
nullptr)
throw std::runtime_error(
"Could not get first DataHeader for token = " + firstToken.
toString() +
", " + error_message);
505 std::unique_ptr<DataHeader_p6> firstHeader(
reinterpret_cast<DataHeader_p6*
>(firstPtr1) );
506 dhFormToken = firstHeader->dhFormToken();
515 error_message =
err.what();
517 if (voidPtr2 ==
nullptr)
throw std::runtime_error(
"Could not get DataHeaderForm for token = " + formToken.
toString() +
", " + error_message);
520 ATH_MSG_WARNING(
"DataHeaderForm read exception: " << error_message <<
" - reusing the last good DHForm");
523 ATH_MSG_WARNING(
"DataHeaderForm read exception: " << error_message <<
" - reusing the last good DHForm");
528 if (voidPtr2 ==
nullptr) {
529 throw std::runtime_error(
"Could not get object for token = " + formToken.
toString());
◆ PoolToDataObject()
template<class TRANS , class PERS >
|
overrideprotectedvirtualinherited |
Read an object from POOL.
- Parameters
-
pObj | [OUT] pointer to the transient object. |
token | [IN] POOL token of the persistent representation. |
key | [IN] SG key of the object being read. |
Reimplemented from T_AthenaPoolCustCnv< TRANS, PERS >.
◆ poolToObject()
template<class TRANS , class PERS >
template<class P >
Read an object from POOL.
- Parameters
-
token | [IN] POOL token of the persistent representation. |
pObj | [OUT] pointer to the object read. |
◆ removeBadElements()
void DataHeaderCnv::removeBadElements |
( |
DataHeader * |
dh | ) |
|
Remove DataHeaderElements with incomplete (dbID="") refs.
Definition at line 545 of file DataHeaderCnv.cxx.
547 auto iter =
dh->m_inputDataHeader.begin();
548 while( iter !=
dh->m_inputDataHeader.end() ) {
549 if( iter->getToken()->dbID() ==
Guid::null() ) {
551 iter =
dh->m_inputDataHeader.erase(iter);
◆ repSvcType()
long AthenaPoolConverter::repSvcType |
( |
| ) |
const |
|
overridevirtualinherited |
◆ selectTracks() [1/3]
Definition at line 177 of file Converter.h.
179 static int hpmap[20] = { 0, 1, 2, 7, 8, 9, 3, 4, 5, 6, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 };
184 while(muonitr!=muonend) {
186 bool hasInDet = (*muonitr)->hasInDetTrackParticle();
188 if(hasInDet) trackitr=(*muonitr)->inDetTrackParticle();
190 if(!hasInDet)
continue;
194 CLHEP::HepVector perigeeParams = measPer->parameters();
195 double pT = measPer->pT();
196 double eta = measPer->eta();
223 double dof =
quality->quality->numberDoF();
227 for (
int ih=0 ; ih<20 ; ih++ ) {
236 deta, dphi, dz0, dd0, dpT,
238 nStrawHits, nTrHits, bitmap, 0,
◆ selectTracks() [2/3]
Definition at line 111 of file Converter.h.
116 static int hpmap[20] = { 0, 1, 2, 7, 8, 9, 3, 4, 5, 6, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 };
118 while ( trackitr!=trackend ) {
122 CLHEP::HepVector perigeeParams = measPer->parameters();
123 double pT = measPer->pT();
124 double eta = measPer->eta();
147 bool expectBL =
false;
151 double dof =
quality->numberDoF();
155 for (
int ih=0 ; ih<20 ; ih++ ) {
164 deta, dphi, dz0, dd0, dpT,
166 nStrawHits, nTrHits, bitmap, 0,
◆ selectTracks() [3/3]
Definition at line 56 of file Converter.h.
61 while ( trackitr!=trackend ) {
63 double eta = (*trackitr)->param()->eta();
64 double phi = (*trackitr)->param()->phi0();
65 double z0 = (*trackitr)->param()->z0();
66 double pT = (*trackitr)->param()->pT();
67 double d0 = (*trackitr)->param()->a0();
70 double deta = (*trackitr)->param()->eeta();
71 double dphi = (*trackitr)->param()->ephi0();
72 double dz0 = (*trackitr)->param()->ez0();
73 double dpT = (*trackitr)->param()->epT();
74 double dd0 = (*trackitr)->param()->ea0();
76 int algoid = (*trackitr)->algorithmId();
78 int nBlayerHits = ((*trackitr)->HitPattern() & 0x1);
79 int nPixelHits = 2*(*trackitr)->NPixelSpacePoints();
80 int nSctHits = 2*(*trackitr)->NSCT_SpacePoints();
81 int nStrawHits = (*trackitr)->NStrawHits();
82 int nTrHits = (*trackitr)->NTRHits();
85 bool expectBL =
false;
87 unsigned hitPattern = (*trackitr)->HitPattern();
88 unsigned multiPattern = 0;
90 double chi2 = (*trackitr)->chi2();
98 deta, dphi, dz0, dd0, dpT,
100 nStrawHits, nTrHits, hitPattern, multiPattern,
◆ setLevel()
void AthMessaging::setLevel |
( |
MSG::Level |
lvl | ) |
|
|
inherited |
◆ setPlacement()
|
protectedvirtualinherited |
◆ setPlacementForP()
template<class TRANS , class PERS >
template<class P >
Set POOL placement for type P.
◆ setPlacementWithType()
Placement AthenaPoolConverter::setPlacementWithType |
( |
const std::string & |
tname, |
|
|
const std::string & |
key, |
|
|
const std::string & |
output |
|
) |
| |
|
protectedvirtualinherited |
Set POOL placement hint for a given type.
- Parameters
-
tname | [IN] type name. |
key | [IN] SG key. |
Definition at line 173 of file AthenaPoolConverter.cxx.
176 std::string::size_type pos1 =
output.find(
'[');
177 std::string outputConnectionSpec =
output.substr(0, pos1);
185 std::string containerName;
188 std::size_t colonPos = containerPrefix.find(
':');
189 if (colonPos != std::string::npos) {
190 dhContainerPrefix = containerPrefix.substr(0, colonPos + 1) + dhContainerPrefix;
196 std::string containerFriendPostfix;
197 while (pos1 != std::string::npos) {
198 const std::string::size_type pos2 =
output.find(
'=', pos1);
199 const std::string thisKey =
output.substr(pos1 + 1, pos2 - pos1 - 1);
200 const std::string::size_type pos3 =
output.find(
']', pos2);
201 const std::string
value =
output.substr(pos2 + 1, pos3 - pos2 - 1);
202 if (thisKey ==
"OutputCollection") {
203 dhContainerPrefix =
value;
204 }
else if (thisKey ==
"PoolContainerPrefix") {
205 containerPrefix =
value;
206 }
else if (thisKey ==
"TopLevelContainerName") {
207 containerNameHint =
value;
208 }
else if (thisKey ==
"SubLevelBranchName") {
209 branchNameHint =
value;
210 }
else if (thisKey ==
"PoolContainerFriendPostfix") {
211 containerFriendPostfix =
value;
213 pos1 =
output.find(
'[', pos3);
217 if( tname.compare(0, 10,
"DataHeader") == 0 ) {
218 if( tname.compare(10, 4,
"Form") == 0 ) {
219 containerName = dhContainerPrefix +
"Form" +
"(" + tname +
")";
221 if (
key[
key.size() - 1] ==
'/') {
222 containerName = dhContainerPrefix +
"(" +
key + tname +
")";
224 containerName = dhContainerPrefix +
"(" + tname +
")";
229 else if (tname.compare(0, 13,
"AttributeList") == 0) {
231 if( pool::ROOTRNTUPLE_StorageType.exactMatch(tech) ) {
236 tech = pool::ROOTTREE_StorageType.
type();
242 const std::string typeTok =
"<type>", keyTok =
"<key>";
243 containerName = containerPrefix + containerFriendPostfix + containerNameHint;
244 if (!branchNameHint.empty()) {
245 containerName +=
"(" + branchNameHint +
")";
247 const std::size_t pos1 = containerName.find(typeTok);
248 if (pos1 != std::string::npos) {
249 containerName.replace(pos1, typeTok.size(), tname);
251 const std::size_t pos2 = containerName.find(keyTok);
252 if (pos2 != std::string::npos) {
254 containerName.replace(pos2, keyTok.size(), tname);
256 containerName.replace(pos2, keyTok.size(),
key);
◆ setToken()
template<class TRANS , class PERS >
|
protectedvirtualinherited |
◆ storageType()
long AthenaPoolConverter::storageType |
( |
| ) |
|
|
staticinherited |
◆ tracks()
◆ transToPers()
template<class TRANS , class PERS >
|
inlineoverrideprotectedvirtualinherited |
◆ updateRep()
StatusCode DataHeaderCnv::updateRep |
( |
IOpaqueAddress * |
pAddress, |
|
|
DataObject * |
pObject |
|
) |
| |
|
overridevirtual |
Extend base-class conversion methods.
Definition at line 209 of file DataHeaderCnv.cxx.
211 auto dataHeader =
reinterpret_cast<DataHeader_p6*
>( pObject );
212 const std::string dhRef = pAddress->par()[0];
213 const std::string dhPlacementStr = pAddress->par()[1];
216 dhFormPlacement.
fromString( dataHeader->dhFormToken() );
219 if( !clientN.empty() ) {
223 dataHeader->setDhFormToken( dhFormNewRef );
231 ATH_MSG_ERROR(
"updateRep called but the previous DataHeader was not yet processed."
234 return StatusCode::FAILURE;
239 std::size_t tagBeg = dhPlacementStr.find(
"[KEY=") + 5;
240 std::size_t tagSize = dhPlacementStr.find(
']', tagBeg) - tagBeg;
243 return StatusCode::SUCCESS;
◆ updateRepRefs()
StatusCode DataHeaderCnv::updateRepRefs |
( |
IOpaqueAddress * |
pAddress, |
|
|
DataObject * |
pObject |
|
) |
| |
|
overridevirtual |
Definition at line 247 of file DataHeaderCnv.cxx.
257 std::string dhid = pAddress->par()[1];
259 this->
setToken( pAddress->par()[0] );
261 ATH_MSG_ERROR(
"updateRepRefs called without DataHeaderForm" );
262 return StatusCode::FAILURE;
270 ATH_MSG_ERROR(
"updateRepRefs: missing DataHeaderForm for DH ID=" << dhid );
271 return StatusCode::FAILURE;
284 return(StatusCode::SUCCESS);
◆ CnvFactory< DataHeaderCnv >
◆ ATLAS_THREAD_SAFE
std::atomic_flag m_initialized AthMessaging::ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT |
|
mutableprivateinherited |
◆ m_athenaPoolCnvSvc
◆ m_beamX
double Converter::m_beamX |
|
protectedinherited |
◆ m_beamY
double Converter::m_beamY |
|
protectedinherited |
◆ m_beamZ
double Converter::m_beamZ |
|
protectedinherited |
◆ m_branchNameHint
std::string AthenaPoolConverter::m_branchNameHint |
|
protectedinherited |
◆ m_classDesc
RootType AthenaPoolConverter::m_classDesc |
|
protectedinherited |
◆ m_classDescs
ClassMap AthenaPoolConverter::m_classDescs |
|
protectedinherited |
◆ m_classID
template<class TRANS , class PERS >
◆ m_className
std::string AthenaPoolConverter::m_className |
|
protectedinherited |
◆ m_containerNameHint
std::string AthenaPoolConverter::m_containerNameHint |
|
protectedinherited |
◆ m_containerPrefix
std::string AthenaPoolConverter::m_containerPrefix |
|
protectedinherited |
◆ m_conv_mut
◆ m_dataObject
const DataObject* AthenaPoolConverter::m_dataObject |
|
protectedinherited |
◆ m_detStore
◆ m_dhFormMdx
std::string DataHeaderCnv::m_dhFormMdx |
|
protected |
◆ m_dhFormType
◆ m_dhInForm5
◆ m_i_poolToken
◆ m_imsg
std::atomic<IMessageSvc*> AthMessaging::m_imsg { nullptr } |
|
mutableprivateinherited |
◆ m_inDHFMapMaxsize
unsigned DataHeaderCnv::m_inDHFMapMaxsize |
|
protected |
◆ m_inDHFormCount
std::map<std::string, unsigned> DataHeaderCnv::m_inDHFormCount |
|
protected |
How many DHForms for an input file are in the cache.
Definition at line 80 of file DataHeaderCnv.h.
◆ m_inputDHForms
std::map<std::string, std::unique_ptr<DataHeaderForm_p6> > DataHeaderCnv::m_inputDHForms |
|
protected |
DHForm cache indexed by the DHForm reference (from DataHeader) that was used to read it.
Definition at line 77 of file DataHeaderCnv.h.
◆ m_lastGoodDHFRef
std::map< std::string, std::string> DataHeaderCnv::m_lastGoodDHFRef |
|
protected |
◆ m_lvl
std::atomic<MSG::Level> AthMessaging::m_lvl { MSG::NIL } |
|
mutableprivateinherited |
◆ m_msg_tls
boost::thread_specific_ptr<MsgStream> AthMessaging::m_msg_tls |
|
mutableprivateinherited |
MsgStream instance (a std::cout like with print-out levels)
Definition at line 132 of file AthMessaging.h.
◆ m_nm
std::string AthMessaging::m_nm |
|
privateinherited |
◆ m_oneDHForm
bool DataHeaderCnv::m_oneDHForm = true |
|
protected |
if true write only one DataHeaderForm at the end (stop, finalize, or WriteDataHeaderForms incident) the value is read from AthenaPoolCnvSvc OneDataHeaderForm property
Definition at line 72 of file DataHeaderCnv.h.
◆ m_persFormMap
◆ m_persObjLists
template<class TRANS , class PERS >
Local cache for persistent objects created by this converter, grouped by processing slot These objects are deleted after a commit.
Definition at line 120 of file T_AthenaPoolCustomCnv.h.
◆ m_pListMutex
template<class TRANS , class PERS >
◆ m_sharedWriterCachedDH
cached values for use with SharedWriter server
Definition at line 92 of file DataHeaderCnv.h.
◆ m_sharedWriterCachedDHForm
std::map< std::string, std::unique_ptr<DataHeaderForm_p6> > DataHeaderCnv::m_sharedWriterCachedDHForm |
|
protected |
◆ m_sharedWriterCachedDHKey
std::string DataHeaderCnv::m_sharedWriterCachedDHKey |
|
protected |
◆ m_sharedWriterCachedDHToken
std::string DataHeaderCnv::m_sharedWriterCachedDHToken |
|
protected |
◆ m_tpInConverter
◆ m_tpInConverter_p5
◆ m_tpOutConverter
◆ m_tracks
The documentation for this class was generated from the following files:
std::atomic< MSG::Level > m_lvl
Current logging level.
@ numberOfPixelHits
number of pixel layers on track with absence of hits
virtual Placement setPlacementWithType(const std::string &tname, const std::string &key, const std::string &output)
Set POOL placement hint for a given type.
const DataObject * m_dataObject
void ipCorr(double d0, double z0, double &d0c, double &z0c, double phi0, double eta, double pt)
static const Guid & null()
NULL-Guid: static class method.
def finalize(self)
_info( "content of StoreGate..." ) self.sg.dump()
Const iterator class for DataVector/DataList.
This class holds all the necessary information to guide the writing of an object in a physical place.
@ numberOfTRTHighThresholdHits
total number of TRT hits which pass the high threshold
virtual StatusCode DataObjectToPool(IOpaqueAddress *pAddr, DataObject *pObj)=0
Write an object into POOL.
const std::string & containerName() const
Access container name.
Scalar phi() const
phi method
const std::string & contID() const
Access container identifier.
bool fromStorable(DataObject *pDObj, T *&pTrans, bool quiet=false, IRegisterTransient *irt=0, bool isConst=true)
static constexpr const char * DataHeader
ServiceHandle< IAthenaPoolCnvSvc > m_athenaPoolCnvSvc
Scalar eta() const
pseudorapidity method
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
Scalar theta() const
theta method
const std::string & auxString() const
Access auxiliary string.
const TrackSummary * trackSummary() const
accessor function for TrackSummary.
static long storageType()
const Guid & dbID() const
Access database identifier.
void keepPoolObj(PERS *obj, const std::string &output)
Remember the POOL object to be written out (will be deleted after commit)
ServiceHandle< StoreGateSvc > m_detStore
static constexpr const char * EventTag
int technology() const
Access technology type.
const std::string toString() const
Automatic conversion to string representation.
const Guid & classID() const
Access database identifier.
#define ATH_MSG_VERBOSE(x)
Placement & setContainerName(const std::string &containerName)
Set container name.
std::atomic< IMessageSvc * > m_imsg
MessageSvc pointer.
float nPixelHits(const U &p)
IMessageSvc * getMessageSvc(bool quiet=false)
int type() const
Access to full type.
@ numberOfBLayerHits
these are the hits in the 0th pixel layer?
virtual void setToken(const std::string &token)
Set the token (in std::string representation) and classID for the object that will be read next.
This class provides a token that identifies in a unique way objects on the persistent storage.
double phiCorr(double phi)
This class provides a Generic Transient Address for POOL tokens.
Token & fromString(const std::string &from)
Build from the string representation of a token.
Token & setClassID(const Guid &cl_id)
Access database identifier.
int technology() const
Access technology type.
const Token * m_i_poolToken
@ numberOfSCTHits
number of SCT holes
Default, invalid implementation of ClassID_traits.
std::string m_containerPrefix
const FitQuality * fitQuality() const
accessor function for FitQuality.
double chi2(TH1 *h0, TH1 *h1)
std::string m_containerNameHint
Token & setDb(const Guid &db)
Set database name.
const std::string & fileName() const
Access file name.
int release()
Release token: Decrease reference count and eventually delete.
Placement & setFileName(const std::string &fileName)
Set file name.
Class to represent and store fit qualities from track reconstruction in terms of and number of degre...
Token & setTechnology(int t)
Set technology type.
uint32_t CLID
The Class ID type.
static constexpr const char * EventTag
const std::string & auxString() const
Access auxiliary string.
MsgStream & msg() const
The standard message stream.
void addTrack(TIDA::Track *t)
void setToken(std::unique_ptr< Token > token)
static constexpr const char * DataHeader
@ numberOfTRTHits
number of TRT outliers
A summary of the information contained by a track.
virtual StatusCode PoolToDataObject(DataObject *&pObj, const Token *token, const std::string &key)=0
Read an object from POOL.
virtual const std::string toString() const
Retrieve the string representation of the token.
Token & setOid(const OID_t &oid)
Set object identifier.
const std::string toString() const
Retrieve the string representation of the placement.
const Trk::Perigee * measuredPerigee() const
Accessor method for Perigee.
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
virtual StatusCode DataObjectToPers(DataObject *pObj, IOpaqueAddress *&pAddr)=0
Convert an object into Persistent.
DetectorType
enumerates the various detector types currently accessible from the isHit() method.
bool exactMatch(const DbType &typ) const
#define ATH_MSG_WARNING(x)
std::string m_branchNameHint
const OID_t & oid() const
Access object identifier.
Token & setAuxString(const std::string &auxString)
Set auxiliary string.
std::string m_nm
Message source name.
Placement & setTechnology(int technology)
Set technology type.
Token & setCont(const std::string &cnt)
Set container name.
virtual bool compareClassGuid(const Guid &clid) const
Compare POOL class GUID with the one of the object being read.
void initMessaging() const
Initialize our message level and MessageSvc.
const Token & setData(Token *pToken) const
Set all the data part of the token.
virtual StatusCode initialize()
Gaudi Service Interface method implementations:
boost::thread_specific_ptr< MsgStream > m_msg_tls
MsgStream instance (a std::cout like with print-out levels)
constexpr int pow(int base, int exp) noexcept
std::vector< TIDA::Track * > m_tracks
Placement & fromString(const std::string &from)
Build from the string representation of a placement.
float nSiHits(const U &p)
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.