|
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, 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::map< DataObject *, PERS * > | m_persMap |
|
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 37 of file DataHeaderCnv.cxx.
41 if( incSvc.retrieve().isSuccess() ) {
42 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 146 of file DataHeaderCnv.cxx.
150 size_t dbpos = iter->first.find(
"[DB=");
151 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) {
69 GenericAddress* genAddr =
dynamic_cast<GenericAddress*
>(pAddr);
71 ATH_MSG_ERROR(
"Dynamic cast failed in AthenaPoolConverter::createObj");
74 return StatusCode::FAILURE;
80 ::sprintf(
text,
"[CTXT=%08X]",
static_cast<int>(*(pAddr->ipar())));
88 std::string
key = pAddr->par()[1];
97 if (pObj ==
nullptr) {
101 delete tokAddr; tokAddr =
nullptr;
104 if (pObj ==
nullptr) {
105 return(StatusCode::FAILURE);
107 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 555 of file DataHeaderCnv.cxx.
561 std::string bestPfn, fileType;
568 static const pool::Guid p6_guid(
"4DDBD295-EFCE-472A-9EC8-15CD35A9EB8D");
569 static const pool::Guid p5_guid(
"D82968A1-CF91-4320-B2DD-E0F739CBC7E6");
570 static const pool::Guid p4_guid(
"9630EB7B-CCD7-47D9-A39B-CBBF4133CDF2");
571 static const pool::Guid p3_guid(
"EC1318F0-8E28-45F8-9A2D-2597C1CC87A6");
585 std::unique_ptr<DataHeader_p4> obj_p4(this->poolReadObject<DataHeader_p4>());
589 std::unique_ptr<DataHeader_p3> obj_p3(this->poolReadObject<DataHeader_p3>());
595 std::string
error =
e.what();
596 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 286 of file DataHeaderCnv.cxx.
290 ATH_MSG_ERROR(
"Failed to cast DataHeader to transient type" );
291 return(StatusCode::FAILURE);
295 std::string form_placement_str = dhf_placement.
toString();
297 std::unique_ptr<DataHeaderForm_p6>& dhForm =
m_persFormMap[form_placement_str];
298 if (dhForm ==
nullptr) {
300 dhForm = std::make_unique<DataHeaderForm_p6>();
307 const std::string connection = dh_placement.
fileName();
313 ATH_MSG_FATAL(
"Failed to convert DataHeader to persistent type: " <<
e.what());
314 return(StatusCode::FAILURE);
318 if (dh_token ==
nullptr) {
320 return(StatusCode::FAILURE);
330 static const RootType dhFormType(
typeid(*dhForm));
332 if (dhf_token ==
nullptr) {
334 return(StatusCode::FAILURE);
343 dhf_token->
release(); dhf_token =
nullptr;
354 dhForm->
setToken( form_placement_str );
356 form_placement_str = dhForm->
getToken();
359 auto b = form_placement_str.find(
"[FILE=");
360 auto e = form_placement_str.find(
"]",
b);
361 form_placement_str.erase(
b,
e-
b+1);
367 if (
list !=
nullptr) {
371 obj->getEvtRefTokenStr().c_str(),
373 delete ref_token; ref_token =
nullptr;
374 for (coral::AttributeList::const_iterator iter =
list->begin(), last =
list->end(); iter != last; ++iter) {
375 attr_placement = this->
setPlacementWithType(
"AttributeList", (*iter).specification().name(), *pAddr->par());
377 (*iter).addressOfData(),
378 RootType((*iter).specification().type()) );
379 delete attr_token; attr_token =
nullptr;
383 if (tokAddr !=
nullptr) {
384 tokAddr->
setToken(dh_token); dh_token =
nullptr;
386 delete dh_token; dh_token =
nullptr;
387 return(StatusCode::FAILURE);
389 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 86 of file DataHeaderCnv.cxx.
88 if( incident.type() ==
"PreFork" ) {
91 if( incident.type() == IncidentType::EndInputFile ) {
93 const std::string&
guid =
static_cast<const FileIncident&
>(incident).fileGuid();
96 if( incident.type() ==
"WriteDataHeaderForms" ) {
98 const std::string&
fileName =
static_cast<const FileIncident*
>(&incident)->
fileName();
100 std::vector<std::string> toWrite;
101 auto pos =
fileName.find(
"[OutputCollection=MetaDataHdr]");
102 bool metaDataCommit = (
pos != std::string::npos);
103 std::string justFileName =
fileName.substr(0,
pos);
107 const std::string& placementStr = elem.first;
113 if( (placementStr.find(
"[CONT=MetaData") != std::string::npos) == metaDataCommit ) {
114 toWrite.push_back( placementStr );
119 for( std::size_t
n = 0;
const std::string& placementStr : toWrite ) {
123 if( form_ptr->isModified() ) {
124 static const RootType dhFormType(
typeid( *form_ptr ) );
128 std::string
errmsg =
std::format(
"Failed to write {} {}", dhFormType.Name(), placementStr);
130 throw GaudiException(errmsg,
"DataHeaderCnv::WriteDataHeaderForms", StatusCode::FAILURE);
132 ATH_MSG_DEBUG(
"Wrote DatHeaderForm, placeemnt was " << placementStr <<
" token=" << form_token->
toString());
133 form_token->
release(); form_token =
nullptr;
134 bool doCommit = (++
n == toWrite.size());
137 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 46 of file DataHeaderCnv.cxx.
50 bool doFilterDHAliases =
true;
51 SmartIF<IProperty> cnvSvc{service(
"AthenaPoolCnvSvc")};
54 if( cnvSvc->getProperty(&sizeProp).isSuccess() ) {
57 BooleanProperty aliasFilterProp(
"doFilterDHAliases", doFilterDHAliases);
58 if( cnvSvc->getProperty(&aliasFilterProp).isSuccess() ) {
59 doFilterDHAliases = aliasFilterProp.value();
61 BooleanProperty oneDHForm(
"OneDataHeaderForm",
m_oneDHForm);
62 if( cnvSvc->getProperty(&oneDHForm).isSuccess() ) {
67 if( doFilterDHAliases ) {
78 incSvc->addListener(
this, IncidentType::EndInputFile, 0);
79 incSvc->addListener(
this,
"PreFork", 0);
81 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 393 of file DataHeaderCnv.cxx.
395 void* voidPtr1 =
nullptr;
397 if (voidPtr1 ==
nullptr) {
402 void* voidPtr2 =
nullptr;
409 if (voidPtr2 ==
nullptr) {
410 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 422 of file DataHeaderCnv.cxx.
424 void* voidPtr1 =
nullptr;
425 std::string error_message;
430 error_message =
err.what();
432 if (voidPtr1 ==
nullptr) {
433 throw std::runtime_error(
"Could not get object for token = " +
m_i_poolToken->
toString() +
", " + error_message);
438 std::string dhFormToken =
header->dhFormToken();
441 size_t dbpos = dhFormToken.find(
"[DB=");
442 if( dbpos != std::string::npos ) {
443 const std::string dbGuid = dhFormToken.substr(dbpos+4, dbpos+36);
451 void* voidPtr2 =
nullptr;
453 if( dhFormToken.empty() ) {
456 formToken.
setClassID(
Guid(
"7BE56CEF-C866-4BEE-9348-A5F34B5F1DAD") );
457 }
else if( dhFormToken.find(
"[OID=") != std::string::npos ) {
469 formToken.
setClassID(
Guid(
"7BE56CEF-C866-4BEE-9348-A5F34B5F1DAD") );
471 oid2 >>= 32; oid2 <<= 32;
474 if( !swn.empty() ) oid2 += std::stoul( swn ) - 1;
475 formToken.
setOid( {0,oid2} );
483 error_message =
err.what();
485 if (voidPtr2 ==
nullptr) {
491 void* firstPtr1 =
nullptr;
496 error_message =
err.what();
498 if (firstPtr1 ==
nullptr)
throw std::runtime_error(
"Could not get first DataHeader for token = " + firstToken.
toString() +
", " + error_message);
501 std::unique_ptr<DataHeader_p6> firstHeader(
reinterpret_cast<DataHeader_p6*
>(firstPtr1) );
502 dhFormToken = firstHeader->dhFormToken();
511 error_message =
err.what();
513 if (voidPtr2 ==
nullptr)
throw std::runtime_error(
"Could not get DataHeaderForm for token = " + formToken.
toString() +
", " + error_message);
516 ATH_MSG_WARNING(
"DataHeaderForm read exception: " << error_message <<
" - reusing the last good DHForm");
519 ATH_MSG_WARNING(
"DataHeaderForm read exception: " << error_message <<
" - reusing the last good DHForm");
524 if (voidPtr2 ==
nullptr) {
525 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 541 of file DataHeaderCnv.cxx.
543 auto iter =
dh->m_inputDataHeader.begin();
544 while( iter !=
dh->m_inputDataHeader.end() ) {
545 if( iter->getToken()->dbID() ==
Guid::null() ) {
547 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;
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 174 of file AthenaPoolConverter.cxx.
177 std::string::size_type pos1 =
output.find(
'[');
178 std::string outputConnectionSpec =
output.substr(0, pos1);
186 std::string containerName;
189 std::size_t colonPos = containerPrefix.find(
':');
190 if (colonPos != std::string::npos) {
191 dhContainerPrefix = containerPrefix.substr(0, colonPos + 1) + dhContainerPrefix;
197 std::string containerFriendPostfix;
198 while (pos1 != std::string::npos) {
199 const std::string::size_type pos2 =
output.find(
'=', pos1);
200 const std::string thisKey =
output.substr(pos1 + 1, pos2 - pos1 - 1);
201 const std::string::size_type pos3 =
output.find(
']', pos2);
202 const std::string
value =
output.substr(pos2 + 1, pos3 - pos2 - 1);
203 if (thisKey ==
"OutputCollection") {
204 dhContainerPrefix =
value;
205 }
else if (thisKey ==
"PoolContainerPrefix") {
206 containerPrefix =
value;
207 }
else if (thisKey ==
"TopLevelContainerName") {
208 containerNameHint =
value;
209 }
else if (thisKey ==
"SubLevelBranchName") {
210 branchNameHint =
value;
211 }
else if (thisKey ==
"PoolContainerFriendPostfix") {
212 containerFriendPostfix =
value;
214 pos1 =
output.find(
'[', pos3);
218 if( tname.compare(0, 10,
"DataHeader") == 0 ) {
219 if( tname.compare(10, 4,
"Form") == 0 ) {
220 containerName = dhContainerPrefix +
"Form" +
"(" + tname +
")";
222 if (
key[
key.size() - 1] ==
'/') {
223 containerName = dhContainerPrefix +
"(" +
key + tname +
")";
225 containerName = dhContainerPrefix +
"(" + tname +
")";
230 else if (tname.compare(0, 13,
"AttributeList") == 0) {
232 if( pool::ROOTRNTUPLE_StorageType.exactMatch(tech) ) {
237 tech = pool::ROOTTREE_StorageType.
type();
243 const std::string typeTok =
"<type>", keyTok =
"<key>";
244 containerName = containerPrefix + containerFriendPostfix + containerNameHint;
245 if (!branchNameHint.empty()) {
246 containerName +=
"(" + branchNameHint +
")";
248 const std::size_t pos1 = containerName.find(typeTok);
249 if (pos1 != std::string::npos) {
250 containerName.replace(pos1, typeTok.size(), tname);
252 const std::size_t pos2 = containerName.find(keyTok);
253 if (pos2 != std::string::npos) {
255 containerName.replace(pos2, keyTok.size(), tname);
257 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 206 of file DataHeaderCnv.cxx.
208 auto dataHeader =
reinterpret_cast<DataHeader_p6*
>( pObject );
209 const std::string dhRef = pAddress->par()[0];
210 const std::string dhPlacementStr = pAddress->par()[1];
213 dhFormPlacement.
fromString( dataHeader->dhFormToken() );
216 if( !clientN.empty() ) {
220 dataHeader->setDhFormToken( dhFormNewRef );
228 ATH_MSG_ERROR(
"updateRep called but the previous DataHeader was not yet processed."
231 return StatusCode::FAILURE;
236 std::size_t tagBeg = dhPlacementStr.find(
"[KEY=") + 5;
237 std::size_t tagSize = dhPlacementStr.find(
']', tagBeg) - tagBeg;
240 return StatusCode::SUCCESS;
◆ updateRepRefs()
StatusCode DataHeaderCnv::updateRepRefs |
( |
IOpaqueAddress * |
pAddress, |
|
|
DataObject * |
pObject |
|
) |
| |
|
overridevirtual |
Definition at line 244 of file DataHeaderCnv.cxx.
254 static const pool::Guid dhf_p6_guid(
"7BE56CEF-C866-4BEE-9348-A5F34B5F1DAD");
255 std::string dhid = pAddress->par()[1];
257 this->
setToken( pAddress->par()[0] );
259 ATH_MSG_ERROR(
"updateRepRefs called without DataHeaderForm" );
260 return StatusCode::FAILURE;
268 ATH_MSG_ERROR(
"updateRepRefs: missing DataHeaderForm for DH ID=" << dhid );
269 return StatusCode::FAILURE;
282 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_persMap
template<class TRANS , class PERS >
◆ 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.
void setToken(Token *token)
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)
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.
double chiSquared() const
returns the of the overall track fit
int numberDoF() const
returns the number of degrees of freedom of the overall track or vertex fit as integer
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)
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.