1515// /
1616
1717#include " QualityControl/MonitorObject.h"
18+ #include < TObject.h>
19+ #include " QualityControl/RepoPathUtils.h"
20+ #include " QualityControl/QcInfoLogger.h"
1821
1922#include < iostream>
20- #include " QualityControl/RepoPathUtils.h"
2123
2224using namespace std ;
2325
2426namespace o2 ::quality_control::core
2527{
2628
2729MonitorObject::MonitorObject ()
28- : TObject(),
29- mObject (nullptr ),
30- mTaskName(" " ),
31- mDetectorName(" " ),
32- mIsOwner(true )
30+ : TObject{},
31+ mIsOwner { true }
3332{
3433 mActivity .mProvenance = " qc" ;
3534 mActivity .mId = 0 ;
3635 mActivity .mValidity = gInvalidValidityInterval ;
3736}
3837
3938MonitorObject::MonitorObject (TObject* object, const std::string& taskName, const std::string& taskClass, const std::string& detectorName, int runNumber, const std::string& periodName, const std::string& passName, const std::string& provenance)
40- : TObject(),
41- mObject(object),
42- mTaskName(taskName),
43- mTaskClass(taskClass),
44- mDetectorName(detectorName),
45- mActivity(runNumber, " NONE" , periodName, passName, provenance, gInvalidValidityInterval ),
46- mIsOwner(true )
39+ : TObject{},
40+ mObject { object },
41+ mTaskName { taskName },
42+ mTaskClass { taskClass },
43+ mDetectorName { detectorName },
44+ mActivity { runNumber, " NONE" , periodName, passName, provenance, gInvalidValidityInterval },
45+ mIsOwner { true }
46+ {
47+ }
48+
49+ MonitorObject::MonitorObject (const MonitorObject& other)
50+ : TObject{ other },
51+ mObject {},
52+ mTaskName { other.mTaskName },
53+ mTaskClass { other.mTaskClass },
54+ mDetectorName { other.mDetectorName },
55+ mUserMetadata { other.mUserMetadata },
56+ mDescription { other.mDescription },
57+ mActivity { other.mActivity },
58+ mCreateMovingWindow { other.mCreateMovingWindow }
59+ {
60+ cloneAndSetObject (other);
61+ }
62+
63+ MonitorObject& MonitorObject::operator =(const MonitorObject& other)
64+ {
65+ TObject::operator =(other);
66+ mTaskName = other.mTaskName ;
67+ mTaskClass = other.mTaskClass ;
68+ mDetectorName = other.mDetectorName ;
69+ mUserMetadata = other.mUserMetadata ;
70+ mDescription = other.mDescription ;
71+ mActivity = other.mActivity ;
72+ mCreateMovingWindow = other.mCreateMovingWindow ;
73+ cloneAndSetObject (other);
74+
75+ return *this ;
76+ }
77+
78+ void MonitorObject::Copy (TObject& object) const
4779{
80+ static_cast <MonitorObject&>(object) = *this ;
4881}
4982
5083MonitorObject::~MonitorObject ()
5184{
52- if (mIsOwner ) {
53- delete mObject ;
54- mObject = nullptr ;
55- }
85+ releaseObject ();
5686}
5787
58- void MonitorObject::Draw (Option_t* option) { mObject ->Draw (option); }
88+ void MonitorObject::Draw (Option_t* option)
89+ {
90+ if (mObject ) {
91+ mObject ->Draw (option);
92+ } else {
93+ ILOG (Error, Devel) << " MonitorObject::Draw() : You are trying to draw MonitorObject with no internal TObject" << ENDM;
94+ }
95+ }
5996
6097TObject* MonitorObject::DrawClone (Option_t* option) const
6198{
99+ if (!mObject ) {
100+ ILOG (Error, Devel) << " MonitorObject::DrawClone() : You are trying to draw MonitorObject with no internal TObject" << ENDM;
101+ return nullptr ;
102+ }
103+
62104 auto * clone = new MonitorObject ();
63105 clone->setTaskName (this ->getTaskName ());
64106 clone->setObject (mObject ->DrawClone (option));
@@ -72,10 +114,9 @@ const std::string MonitorObject::getName() const
72114
73115const char * MonitorObject::GetName () const
74116{
75- if (mObject == nullptr ) {
76- cerr << " MonitorObject::getName() : No object in this MonitorObject, returning empty string" << endl;
77- static char empty[] = " " ;
78- return empty;
117+ if (!mObject ) {
118+ ILOG (Error, Ops) << " MonitorObject::getName() : No object in this MonitorObject, returning empty string" << ENDM;
119+ return " " ;
79120 }
80121 return mObject ->GetName ();
81122}
@@ -160,6 +201,52 @@ void MonitorObject::updateValidity(validity_time_t value)
160201 mActivity .mValidity .update (value);
161202}
162203
204+ std::string MonitorObject::getFullName () const
205+ {
206+ return getTaskName () + " /" + getName ();
207+ }
208+
209+ TObject* MonitorObject::getObject () const
210+ {
211+ return mObject .get ();
212+ }
213+
214+ void MonitorObject::setObject (TObject* object)
215+ {
216+ releaseObject ();
217+ mObject .reset (object);
218+ }
219+
220+ bool MonitorObject::isIsOwner () const
221+ {
222+ return mIsOwner ;
223+ }
224+
225+ void MonitorObject::setIsOwner (bool isOwner)
226+ {
227+ mIsOwner = isOwner;
228+ }
229+
230+ const std::string& MonitorObject::getTaskName () const
231+ {
232+ return mTaskName ;
233+ }
234+
235+ void MonitorObject::setTaskName (const std::string& taskName)
236+ {
237+ mTaskName = taskName;
238+ }
239+
240+ const std::string& MonitorObject::getDetectorName () const
241+ {
242+ return mDetectorName ;
243+ }
244+
245+ void MonitorObject::setDetectorName (const std::string& detectorName)
246+ {
247+ mDetectorName = detectorName;
248+ }
249+
163250ValidityInterval MonitorObject::getValidity () const
164251{
165252 return mActivity .mValidity ;
@@ -185,4 +272,23 @@ bool MonitorObject::getCreateMovingWindow() const
185272 return mCreateMovingWindow ;
186273}
187274
275+ void MonitorObject::releaseObject ()
276+ {
277+ if (!mIsOwner ) {
278+ void (mObject .release ());
279+ }
280+ }
281+
282+ void MonitorObject::cloneAndSetObject (const MonitorObject& other)
283+ {
284+ releaseObject ();
285+
286+ if (auto * otherObject = other.getObject (); otherObject != nullptr && other.isIsOwner ()) {
287+ mObject .reset (otherObject->Clone ());
288+ } else {
289+ mObject .reset (otherObject);
290+ }
291+ mIsOwner = other.isIsOwner ();
292+ }
293+
188294} // namespace o2::quality_control::core
0 commit comments