ATLAS Offline Software
EventInfoCnv_p3.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "EventInfo/EventInfo.h"
6 #include "EventInfo/EventID.h"
7 #include "EventInfo/EventType.h"
9 
14 
15 static const EventIDCnv_p2 idConv;
16 static const EventTypeCnv_p2 typeConv;
17 static const TriggerInfoCnv_p3 trigInfoCnv;
18 
19 
20 void EventInfoCnv_p3::persToTrans(const EventInfo_p3* pers, EventInfo* trans, MsgStream &/* log */) const {
21  *trans = EventInfo();
22  std::vector<unsigned int>::const_iterator i= pers->m_AllTheData.begin();
23 
24  int vers = (*i); ++i;
25  // std::cout<<"EventInfo vers EventID: "<<(vers&0x003f)<<"\t EventType: "<< ((vers>>6)&0x003f)<<"\tTriggerInfo: "<<((vers>>12)&0x003f) <<"\t Local vars: "<<(vers>>18)<<std::endl;
26 
27  bool bugcompat = (vers&(1<<24)) == 0;
28 
29  EventID *t = new EventID();
30  idConv.persToTrans(i, t);
31  trans->setEventID (t);
32 
33  EventType *et = new EventType();
34  typeConv.persToTrans(i, et, (vers>>6)&0x003f, bugcompat );
35  trans->setEventType (et);
36 
37  if ((vers>>12)&0x003f){ // if there is trigger info
38  TriggerInfo *ti = new TriggerInfo();
39  trigInfoCnv.persToTrans(i, ti, bugcompat);
40  trans->setTriggerInfo (ti);
41  }
42  else
43  *trans->m_trigger_info = TriggerInfo();
44 
45  if (i != pers->m_AllTheData.end()) {
46  // must reset event flags, in case we're reusing the EventInfo object
47  trans->m_event_flags.clear();
48 
49  unsigned int n = pers->m_AllTheData.size() - (i - pers->m_AllTheData.begin());
50  trans->m_event_flags.reserve(n);
51  }
52  while(i!=pers->m_AllTheData.end()){ // there is still some data: m_event_flags
53  trans->m_event_flags.push_back((*i)); ++i;
54  }
55  // std::cout<<"persToTrans of EventInfo \t"<<trans->m_event_flags.size()<<std::endl;
56 
57 }
58 
59 void EventInfoCnv_p3::transToPers(const EventInfo* trans, EventInfo_p3* pers, MsgStream &/* log */) const
60 {
61 
62  // std::cout<<"transToPers of EventInfo ..."<<std::endl;
63  pers->m_AllTheData.reserve(34);
64 
65  // For versioning of the different elements, we use 6 bits for
66  // each part:
67  // the first number (LSB) is version of EventIDCnv
68  // the second number is EventType version
69  // the third is TriggerInfo version
70  // the fourth is version of local variables ( now just m_event_flags)
71  // version number == 0 means that part is not saved at all
72  // bit 24 is set if the vector packing bug is fixed.
73 
74  int versionToWrite = 2 | (3<<6) | (3<<12) | (1<<18) | (1<<24);
75  pers->m_AllTheData.push_back(versionToWrite);
76  idConv.transToPers(trans->m_event_ID, pers->m_AllTheData);
77  typeConv.transToPers(trans->m_event_type, pers->m_AllTheData);
78  //
79  if( trans->m_trigger_info ) { // this should always be there !
80  trigInfoCnv.transToPers(trans->m_trigger_info, pers->m_AllTheData);
81  }else{
82  pers->m_AllTheData[0]&=0xfffc0fff; // sets TriggerInfo version to 0
83  }
84 
85  // Don't write out event flags if they are all == 0
86  if (trans->m_event_flags.size()) {
87  bool copy = false;
88  for (unsigned int i = 0; i < trans->m_event_flags.size(); ++i) {
89  // std::cout << "event flag: \t" << std::hex << trans->m_event_flags[i] << std::dec << std::endl;
90  if (trans->m_event_flags[i]) { copy = true; break; }
91  }
92  if (copy) {
93  std::copy (trans->m_event_flags.begin(), trans->m_event_flags.end(), std::back_inserter (pers->m_AllTheData));
94  // std::cout << "event flags written: \t" << trans->m_event_flags.size() << std::endl;
95  }
96  }
97  // std::cout << "transToPers of EventInfo out size \t" << pers->m_AllTheData.size() << std::endl;
98 }
99 
100 
101 
102 
103 // work around the default constructor of EventInfo allocating memory
104 EventInfo* EventInfoCnv_p3::createTransientConst ( const EventInfo_p3* persObj, MsgStream &log) const {
105  std::unique_ptr<EventInfo> trans( new EventInfo() );
106  persToTrans(persObj, trans.get(), log);
107  return(trans.release());
108 }
et
Extra patterns decribing particle interation process.
TriggerInfoCnv_p3
Definition: TriggerInfoCnv_p3.h:11
EventIDCnv_p2::persToTrans
void persToTrans(std::vector< unsigned int >::const_iterator &nnnnpersObj, EventID *transObj) const
Definition: EventIDCnv_p2.cxx:9
EventInfo::m_event_flags
std::vector< unsigned int > m_event_flags
Definition: EventInfo/EventInfo/EventInfo.h:204
EventInfoCnv_p3::createTransientConst
virtual EventInfo * createTransientConst(const EventInfo_p3 *persObj, MsgStream &log) const override
Definition: EventInfoCnv_p3.cxx:104
EventType
This class represents the "type of event" where the type is given by one or more "characteristics".
Definition: EventType.h:92
EventInfo
EventInfo
Definition: EventTPCnv.cxx:47
EventInfo_p3::m_AllTheData
std::vector< unsigned int > m_AllTheData
Definition: EventInfo_p3.h:22
TriggerInfo.h
This class contains trigger related information.
EventIDCnv_p2
Definition: EventIDCnv_p2.h:9
EventType.h
This class provides general information about an event. It extends EventInfo with a list of sub-evts ...
EventInfo::setTriggerInfo
void setTriggerInfo(TriggerInfo *)
Add TriggerInfo to existing object.
Definition: EventInfo.cxx:130
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
EventInfo::setEventID
void setEventID(EventID *pid)
Definition: EventInfo.cxx:118
EventID.h
This class provides a unique identification for each event, in terms of run/event number and/or a tim...
TriggerInfoCnv_p3.h
EventInfoCnv_p3::persToTrans
virtual void persToTrans(const EventInfo_p3 *persObj, EventInfo *transObj, MsgStream &log) const override
Definition: EventInfoCnv_p3.cxx:20
lumiFormat.i
int i
Definition: lumiFormat.py:92
beamspotman.n
n
Definition: beamspotman.py:731
TriggerInfoCnv_p3::transToPers
void transToPers(const TriggerInfo *transObj, std::vector< unsigned int > &persObj) const
Definition: TriggerInfoCnv_p3.cxx:57
EventInfo_p3
Definition: EventInfo_p3.h:18
EventIDCnv_p2.h
EventTypeCnv_p2
Definition: EventTypeCnv_p2.h:10
EventTypeCnv_p2.h
TriggerInfoCnv_p3::persToTrans
void persToTrans(std::vector< unsigned int >::const_iterator &persObj, TriggerInfo *transObj, bool bugcompat) const
Definition: TriggerInfoCnv_p3.cxx:9
EventIDCnv_p2::transToPers
void transToPers(const EventID *transObj, std::vector< unsigned int > &persObj) const
Definition: EventIDCnv_p2.cxx:22
TriggerInfo
This class contains trigger related information.
Definition: TriggerInfo.h:77
EventInfo::m_event_type
EventType * m_event_type
Definition: EventInfo/EventInfo/EventInfo.h:202
EventInfo
This class provides general information about an event. Event information is provided by the accessor...
Definition: EventInfo/EventInfo/EventInfo.h:42
EventInfoCnv_p3.h
EventInfo::m_event_ID
EventID * m_event_ID
Definition: EventInfo/EventInfo/EventInfo.h:201
EventTypeCnv_p2::transToPers
void transToPers(const EventType *transObj, std::vector< unsigned int > &persObj) const
Definition: EventTypeCnv_p2.cxx:38
EventTypeCnv_p2::persToTrans
void persToTrans(std::vector< unsigned int >::const_iterator &persObj, EventType *transObj, int version, bool bugcompat) const
Definition: EventTypeCnv_p2.cxx:12
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
EventID
This class provides a unique identification for each event, in terms of run/event number and/or a tim...
Definition: EventID.h:35
EventInfo::setEventType
void setEventType(EventType *)
Definition: EventInfo.cxx:124
calibdata.copy
bool copy
Definition: calibdata.py:27
EventInfoCnv_p3::transToPers
virtual void transToPers(const EventInfo *transObj, EventInfo_p3 *persObj, MsgStream &log) const override
Definition: EventInfoCnv_p3.cxx:59
EventInfo::m_trigger_info
TriggerInfo * m_trigger_info
Definition: EventInfo/EventInfo/EventInfo.h:203