1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
// -*- C++ -*-
//
// Package: Core
// Class : unittest_changemanager
//
// Implementation:
// <Notes on implementation>
//
// Original Author: Chris Jones
// Created: Fri Jan 18 10:19:07 EST 2008
//
// system include files
#include <boost/test/unit_test.hpp>
#include <boost/test/test_tools.hpp>
#include "TClass.h"
// user include files
#include "DataFormats/TrackReco/interface/TrackFwd.h"
#include "DataFormats/TrackReco/interface/Track.h"
#include "FWCore/Reflection/interface/ObjectWithDict.h"
#include "Fireworks/Core/interface/FWEventItem.h"
#include "Fireworks/Core/interface/FWModelChangeManager.h"
#include "Fireworks/Core/interface/FWSelectionManager.h"
#include "Fireworks/Core/interface/FWModelExpressionSelector.h"
#include "Fireworks/Core/interface/FWItemAccessorBase.h"
//
// constants, enums and typedefs
//
namespace {
class TestAccessor : public FWItemAccessorBase {
public:
TestAccessor(const reco::TrackCollection* iCollection) : m_collection(iCollection) {}
virtual const void* modelData(int iIndex) const { return &((*m_collection)[iIndex]); }
virtual const void* data() const { return m_collection; }
virtual unsigned int size() const { return m_collection->size(); }
virtual const TClass* modelType() const { return TClass::GetClass("reco::Track"); }
virtual const TClass* type() const { return TClass::GetClass("std::vector<reco::Track>"); }
virtual bool isCollection() const { return true; }
///override if id of an object should be different than the index
//virtual std::string idForIndex(int iIndex) const;
// ---------- member functions ---------------------------
virtual void setData(const edm::ObjectWithDict&) {}
virtual void reset() {}
private:
const reco::TrackCollection* m_collection;
};
} // namespace
BOOST_AUTO_TEST_CASE(modelexpressionselector) {
FWModelChangeManager cm;
FWSelectionManager sm(&cm);
reco::TrackCollection fVector;
fVector.push_back(reco::Track());
fVector.push_back(
reco::Track(20, 20, reco::Track::Point(), reco::Track::Vector(20, 0, 0), -1, reco::Track::CovarianceMatrix()));
fVector.push_back(reco::Track());
TClass* cls = TClass::GetClass("std::vector<reco::Track>");
assert(0 != cls);
fireworks::Context context(&cm, &sm, 0, 0, 0);
auto accessor = std::make_shared<TestAccessor>(&fVector);
FWPhysicsObjectDesc pObj("Tracks", cls, "Tracks");
FWEventItem item(&context, 0, accessor, pObj);
//hack to force update of data
edm::ObjectWithDict dummy;
item.setData(dummy);
cm.newItemSlot(&item);
FWModelExpressionSelector selector;
{
FWChangeSentry sentry(cm);
selector.select(&item, "$.pt() > 10");
}
BOOST_CHECK(1 == sm.selected().size());
BOOST_CHECK(not item.modelInfo(0).m_isSelected);
BOOST_CHECK(item.modelInfo(1).m_isSelected);
BOOST_CHECK(not item.modelInfo(2).m_isSelected);
}
|