diff --git a/etc/eve7/EveElements.js b/etc/eve7/EveElements.js index 10f11307aee86..74df570884123 100644 --- a/etc/eve7/EveElements.js +++ b/etc/eve7/EveElements.js @@ -628,7 +628,7 @@ var mainColor = JSROOT.Painter.root_colors[el.fMainColor]; - mainColor = "lightgreen"; + // mainColor = "lightgreen"; var buf = new Float32Array(el.fLinePlexSize * 6); for (var i = 0; i < el.fLinePlexSize * 6; ++i) diff --git a/etc/eve7/EveScene.js b/etc/eve7/EveScene.js index e712da7127e59..f82d535f03b95 100644 --- a/etc/eve7/EveScene.js +++ b/etc/eve7/EveScene.js @@ -416,7 +416,9 @@ EveScene.prototype.sceneElementChange = function(msg) { var el = this.mgr.GetElement(msg.fElementId); - this[msg.tag](el); + if (el.render_data) { + this[msg.tag](el); + } } EveScene.prototype.elementsRemoved = function(ids) { diff --git a/graf3d/eve7/CMakeLists.txt b/graf3d/eve7/CMakeLists.txt index 47663450068d8..42b741f53ed35 100644 --- a/graf3d/eve7/CMakeLists.txt +++ b/graf3d/eve7/CMakeLists.txt @@ -25,6 +25,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(ROOTEve inc/ROOT/REveProjectionManager.hxx inc/ROOT/REveProjections.hxx inc/ROOT/REveRenderData.hxx + inc/ROOT/REveScalableStraightLineSet.hxx inc/ROOT/REveScene.hxx inc/ROOT/REveSceneInfo.hxx inc/ROOT/REveSecondarySelectable.hxx @@ -75,6 +76,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(ROOTEve src/REveProjectionManager.cxx src/REveProjections.cxx src/REveRenderData.cxx + src/REveScalableStraightLineSet.cxx src/REveScene.cxx src/REveSceneInfo.cxx src/REveSecondarySelectable.cxx diff --git a/graf3d/eve7/inc/ROOT/REveDataProxyBuilderBase.hxx b/graf3d/eve7/inc/ROOT/REveDataProxyBuilderBase.hxx index df54f147df109..1c27f7b447ad3 100644 --- a/graf3d/eve7/inc/ROOT/REveDataProxyBuilderBase.hxx +++ b/graf3d/eve7/inc/ROOT/REveDataProxyBuilderBase.hxx @@ -16,10 +16,11 @@ class REveDataProxyBuilderBase public: struct Product { + std::string m_viewType; const REveViewContext *m_viewContext; REveCompound *m_elements; - Product(const REveViewContext* c); + Product(std::string viewType, const REveViewContext* c); virtual ~Product(); }; @@ -41,7 +42,7 @@ public: void Build(); // virtual void Build(REveElement* product); - REveElement* CreateProduct(const REveViewContext*); + REveElement* CreateProduct(std::string viewType, const REveViewContext*); // void removePerViewProduct(const REveViewContext* vc); void ModelChanges(const REveDataCollection::Ids_t&); @@ -55,12 +56,16 @@ public: std::string Type() const { return m_type; } + // const member functions + virtual bool HaveSingleProduct() const { return true; } + protected: // Override this if visibility changes can cause (re)-creation of proxies. // Returns true if new proxies were created. virtual bool VisibilityModelChanges(int idx, REveElement*, const REveViewContext*); virtual void Build(const REveDataCollection* iItem, REveElement* product, const REveViewContext*); + virtual void BuildViewType(const REveDataCollection* iItem, REveElement* product, std::string viewType, const REveViewContext*); virtual void ModelChanges(const REveDataCollection::Ids_t&, Product*); diff --git a/graf3d/eve7/inc/ROOT/REveDataSimpleProxyBuilder.hxx b/graf3d/eve7/inc/ROOT/REveDataSimpleProxyBuilder.hxx index 3494444bcd642..8cf3fffbcec2c 100644 --- a/graf3d/eve7/inc/ROOT/REveDataSimpleProxyBuilder.hxx +++ b/graf3d/eve7/inc/ROOT/REveDataSimpleProxyBuilder.hxx @@ -18,10 +18,12 @@ public: protected: using REveDataProxyBuilderBase::Build; virtual void Build(const REveDataCollection* iCollection, REveElement* product, const REveViewContext*); + virtual void BuildViewType(const REveDataCollection* iCollection, REveElement* product, std::string viewType, const REveViewContext*); //called once for each collection in collection, the void* points to the // object properly offset in memory virtual void Build(const void* data, REveElement* iCollectionHolder, const REveViewContext*) = 0; + virtual void BuildViewType(const void* data, REveElement* iCollectionHolder, std::string viewType, const REveViewContext*) = 0; virtual void Clean(); diff --git a/graf3d/eve7/inc/ROOT/REveDataSimpleProxyBuilderTemplate.hxx b/graf3d/eve7/inc/ROOT/REveDataSimpleProxyBuilderTemplate.hxx index 8b6ae269e5f20..b7a2194e6992c 100644 --- a/graf3d/eve7/inc/ROOT/REveDataSimpleProxyBuilderTemplate.hxx +++ b/graf3d/eve7/inc/ROOT/REveDataSimpleProxyBuilderTemplate.hxx @@ -25,9 +25,22 @@ protected: } } + using REveDataSimpleProxyBuilder::BuildViewType; + virtual void BuildViewType(const void*iData, REveElement* itemHolder, std::string viewType, const REveViewContext* context) + { + if(0!=iData) { + BuildViewType(*reinterpret_cast (iData), itemHolder, viewType, context); + } + } + virtual void Build(const T& iData, REveElement* itemHolder, const REveViewContext* context) { - throw std::runtime_error("virtual build(const T&, unsigned int, TEveElement&, const FWViewContext*) not implemented by inherited class."); + throw std::runtime_error("virtual Build(const T&, unsigned int, TEveElement&, const FWViewContext*) not implemented by inherited class."); + } + + virtual void BuildViewType(const T& iData, REveElement* itemHolder, std::string viewType, const REveViewContext* context) + { + throw std::runtime_error("virtual BuildViewType(const T&, unsigned int, TEveElement&, const FWViewContext*) not implemented by inherited class."); } private: diff --git a/graf3d/eve7/inc/ROOT/REveScalableStraightLineSet.hxx b/graf3d/eve7/inc/ROOT/REveScalableStraightLineSet.hxx new file mode 100644 index 0000000000000..63076d94d9187 --- /dev/null +++ b/graf3d/eve7/inc/ROOT/REveScalableStraightLineSet.hxx @@ -0,0 +1,30 @@ +#ifndef ROOT_REveScalableStraightLineSet +#define ROOT_REveScalableStraightLineSet + +#include "ROOT/REveStraightLineSet.hxx" + +namespace ROOT { +namespace Experimental { +class REveScalableStraightLineSet : public REveStraightLineSet +{ +private: + REveScalableStraightLineSet(const REveScalableStraightLineSet&); // Not implemented + REveScalableStraightLineSet& operator=(const REveScalableStraightLineSet&); // Not implemented + +protected: + Double_t fCurrentScale; + Float_t fScaleCenter[3]; + +public: + REveScalableStraightLineSet(const char* n="ScalableStraightLineSet", const char* t=""); + virtual ~REveScalableStraightLineSet() {} + + void SetScaleCenter(Float_t x, Float_t y, Float_t z); + void SetScale(Double_t scale); + + Double_t GetScale() const; +}; + +} // namespace Experimental +} // namespace ROOT +#endif diff --git a/graf3d/eve7/src/REveDataClasses.cxx b/graf3d/eve7/src/REveDataClasses.cxx index f10458da965a2..7e4f285973f23 100644 --- a/graf3d/eve7/src/REveDataClasses.cxx +++ b/graf3d/eve7/src/REveDataClasses.cxx @@ -35,10 +35,8 @@ REveDataCollection::REveDataCollection(const std::string& n, const std::string& { fChildClass = REveDataItem::Class(); - fCanEditMainColor = kTRUE; - fCanEditMainTransparency = kTRUE; - SetMainColorPtr(new Color_t(REveDataCollection::fgDefaultColor)); - + SetupDefaultColorAndTransparency(fgDefaultColor, true, true); + _handler_func = 0; _handler_func_ids = 0; } @@ -47,6 +45,7 @@ void REveDataCollection::AddItem(void *data_ptr, const std::string& n, const std { auto el = new REveDataItem(n, t); AddElement(el); + el->SetMainColor(GetMainColor()); fItems.emplace_back(data_ptr, el); } @@ -186,7 +185,7 @@ void REveDataCollection::ItemChanged(REveDataItem* iItem) REveDataItem::REveDataItem(const std::string& n, const std::string& t) : REveElement(n, t) { - SetMainColorPtr(new Color_t(REveDataCollection::fgDefaultColor)); + SetupDefaultColorAndTransparency(kMagenta, true, true); } Int_t REveDataItem::WriteCoreJson(nlohmann::json &j, Int_t rnr_offset) diff --git a/graf3d/eve7/src/REveDataProxyBuilderBase.cxx b/graf3d/eve7/src/REveDataProxyBuilderBase.cxx index fd498d9e419d2..08f57303aa2eb 100644 --- a/graf3d/eve7/src/REveDataProxyBuilderBase.cxx +++ b/graf3d/eve7/src/REveDataProxyBuilderBase.cxx @@ -7,7 +7,7 @@ using namespace ROOT::Experimental; namespace REX = ROOT::Experimental; -REveDataProxyBuilderBase::Product::Product(const REveViewContext* c) : m_viewContext(c), m_elements(0) +REveDataProxyBuilderBase::Product::Product(std::string iViewType, const REveViewContext* c) : m_viewType(iViewType), m_viewContext(c), m_elements(0) { m_elements = new REveCompound("ProxyProduct", "", false); m_elements->IncDenyDestroy(); @@ -79,7 +79,14 @@ void REveDataProxyBuilderBase::Build() REveElement* elms = (*i)->m_elements; size_t oldSize = elms->NumChildren(); - Build(m_collection, elms, (*i)->m_viewContext); + if (HaveSingleProduct()) + { + Build(m_collection, elms, (*i)->m_viewContext); + } + else + { + BuildViewType(m_collection, elms, (*i)->m_viewType, (*i)->m_viewContext); + } // Project all children of current product. // If product is not registered into any projection-manager, @@ -153,23 +160,38 @@ void REveDataProxyBuilderBase::Build() void REveDataProxyBuilderBase::Build(const REveDataCollection*, REveElement*, const REveViewContext*) { - assert("virtual build(const REveEventItem*, REveElement*, const REveViewContext*) not implemented by inherited class"); + assert("virtual Build(const REveEventItem*, REveElement*, const REveViewContext*) not implemented by inherited class"); } +void +REveDataProxyBuilderBase::BuildViewType(const REveDataCollection*, REveElement*, std::string, const REveViewContext*) +{ + assert("virtual BuildViewType(const FWEventItem*, TEveElementList*, FWViewType::EType, const FWViewContext*) not implemented by inherited class"); +} + //______________________________________________________________________________ REveElement* -REveDataProxyBuilderBase::CreateProduct( const REveViewContext* viewContext) +REveDataProxyBuilderBase::CreateProduct( std::string viewType, const REveViewContext* viewContext) { if ( m_products.empty() == false) { + if (HaveSingleProduct()) { return m_products.back()->m_elements; - } + } + else { + for (Product_it i = m_products.begin(); i!= m_products.end(); ++i) + { + if (viewType == (*i)->m_viewType) + return (*i)->m_elements; + } + } + } - Product* product = new Product(viewContext); + Product* product = new Product(viewType, viewContext); m_products.push_back(product); if (m_collection) @@ -215,12 +237,10 @@ REveDataProxyBuilderBase::ModelChanges(const REveDataCollection::Ids_t& iIds, Pr REveElement::List_i itElement = elms->BeginChildren(); std::advance(itElement, itemIdx); REveElement* comp = *itElement; - // AMT temporary workaround for use of compunds - if (comp->GetMainColor() != item->GetMainColor()) - comp->SetMainColor(item->GetMainColor()); + comp->SetMainColor(item->GetMainColor()); comp->SetRnrSelf(item->GetRnrSelf()); - applyVisAttrToChildren(comp); - + // AMT temporary workaround for use of compunds + // applyVisAttrToChildren(comp); if (VisibilityModelChanges(*it, *itElement, p->m_viewContext)) { diff --git a/graf3d/eve7/src/REveDataSimpleProxyBuilder.cxx b/graf3d/eve7/src/REveDataSimpleProxyBuilder.cxx index 6646ac311decf..1adc1044a4160 100644 --- a/graf3d/eve7/src/REveDataSimpleProxyBuilder.cxx +++ b/graf3d/eve7/src/REveDataSimpleProxyBuilder.cxx @@ -34,7 +34,6 @@ REveDataSimpleProxyBuilder::Clean() //______________________________________________________________________________ -// AMT: looks like collection parameter is not necessary, maybe for callbacks void REveDataSimpleProxyBuilder::Build(const REveDataCollection* collection, REveElement* product, const REveViewContext* vc) @@ -53,7 +52,7 @@ REveDataSimpleProxyBuilder::Build(const REveDataCollection* collection, else { itemHolder = CreateCompound(true, true); - itemHolder->SetMainColorPtr(collection->GetMainColorPtr()); + itemHolder->SetMainColor(collection->GetMainColor()); SetupAddElement(itemHolder, product, true); itemHolder->SetName(Form("compound %d", index)); @@ -66,6 +65,37 @@ REveDataSimpleProxyBuilder::Build(const REveDataCollection* collection, } } +void +REveDataSimpleProxyBuilder::BuildViewType(const REveDataCollection* collection, + REveElement* product, std::string viewType, const REveViewContext* vc) +{ + size_t size = collection->GetNItems(); + REveElement::List_i pIdx = product->BeginChildren(); + for (int index = 0; index < static_cast(size); ++index) + { + REveElement* itemHolder = 0; + if (index < product->NumChildren()) + { + itemHolder = *pIdx; + itemHolder->SetRnrSelfChildren(true, true); + ++pIdx; + } + else + { + itemHolder = CreateCompound(true, true); + itemHolder->SetMainColor(collection->GetMainColor()); + SetupAddElement(itemHolder, product, true); + itemHolder->SetName(Form("compound %d", index)); + + } + auto di = Collection()->GetDataItem(index); + if (di->GetRnrSelf() && !di->GetFiltered()) + { + BuildViewType(collection->GetDataPtr(index), itemHolder, viewType, vc); + } + } +} + //______________________________________________________________________________ bool diff --git a/graf3d/eve7/src/REveScalableStraightLineSet.cxx b/graf3d/eve7/src/REveScalableStraightLineSet.cxx new file mode 100644 index 0000000000000..27d2a74056534 --- /dev/null +++ b/graf3d/eve7/src/REveScalableStraightLineSet.cxx @@ -0,0 +1,60 @@ +#include "ROOT/REveScalableStraightLineSet.hxx" +#include "ROOT/REveChunkManager.hxx" + +/** \class REveScalableStraightLineSet +\ingroup REve +Straight-line-set with extra scaling, useful for projectables that need +to be scaled in accordance with an external object. +*/ + +using namespace ROOT::Experimental; +namespace REX = ROOT::Experimental; + +//////////////////////////////////////////////////////////////////////////////// +/// Constructor. + +REveScalableStraightLineSet::REveScalableStraightLineSet(const char* n, const char* t): + REveStraightLineSet (n, t), + fCurrentScale(1.0) +{ + fScaleCenter[0] = 0; + fScaleCenter[1] = 0; + fScaleCenter[2] = 0; +} + +//////////////////////////////////////////////////////////////////////////////// +/// Set scale center. + +void REveScalableStraightLineSet::SetScaleCenter(Float_t x, Float_t y, Float_t z) +{ + fScaleCenter[0] = x; + fScaleCenter[1] = y; + fScaleCenter[2] = z; +} + +//////////////////////////////////////////////////////////////////////////////// +/// Return current scale. + +Double_t REveScalableStraightLineSet::GetScale() const +{ + return fCurrentScale; +} + +//////////////////////////////////////////////////////////////////////////////// +/// Loop over line parameters and scale coordinates. + +void REveScalableStraightLineSet::SetScale(Double_t scale) +{ + REveChunkManager::iterator li(GetLinePlex()); + while (li.next()) + { + REveStraightLineSet::Line_t& l = * (REveStraightLineSet::Line_t*) li(); + l.fV1[0] = fScaleCenter[0]+(l.fV1[0]-fScaleCenter[0])/fCurrentScale*scale; + l.fV1[1] = fScaleCenter[1]+(l.fV1[1]-fScaleCenter[1])/fCurrentScale*scale; + l.fV1[2] = fScaleCenter[2]+(l.fV1[2]-fScaleCenter[2])/fCurrentScale*scale; + l.fV2[0] = fScaleCenter[0]+(l.fV2[0]-fScaleCenter[0])/fCurrentScale*scale; + l.fV2[1] = fScaleCenter[1]+(l.fV2[1]-fScaleCenter[1])/fCurrentScale*scale; + l.fV2[2] = fScaleCenter[2]+(l.fV2[2]-fScaleCenter[2])/fCurrentScale*scale; + } + fCurrentScale = scale; +} diff --git a/tutorials/eve7/collection_proxies.C b/tutorials/eve7/collection_proxies.C index f5556bc465bdb..550115da45712 100644 --- a/tutorials/eve7/collection_proxies.C +++ b/tutorials/eve7/collection_proxies.C @@ -20,6 +20,7 @@ #include #include #include "ROOT/REveManager.hxx" +#include "ROOT/REveScalableStraightLineSet.hxx" #include "TParticle.h" #include "TRandom.h" @@ -71,7 +72,7 @@ public: { double pt = r.Uniform(0.5, 10); double eta = r.Uniform(-2.55, 2.55); - double phi = r.Uniform(0, TMath::TwoPi()); + double phi = r.Uniform(-TMath::Pi(), TMath::Pi()); double px = pt * std::cos(phi); double py = pt * std::sin(phi); @@ -188,14 +189,60 @@ private: //============================================================================== class XYJetProxyBuilder: public REX::REveDataSimpleProxyBuilderTemplate { - using REveDataSimpleProxyBuilderTemplate::Build; - virtual void Build(const XYJet& dj, REX::REveElement* iItemHolder, const REX::REveViewContext* context) + virtual bool HaveSingleProduct() const { return false; } + + using REveDataSimpleProxyBuilderTemplate::BuildViewType; + virtual void BuildViewType(const XYJet& dj, REX::REveElement* iItemHolder, std::string viewType, const REX::REveViewContext* context) { auto jet = new REX::REveJetCone(); - jet->SetCylinder(2*context->GetMaxR(), context->GetMaxZ()); + jet->SetCylinder(context->GetMaxR(), context->GetMaxZ()); jet->AddEllipticCone(dj.Eta(), dj.Phi(), dj.GetEtaSize(), dj.GetPhiSize()); - // printf("============== BUILD jet %s (%f, %f)\n",iItemHolder->GetCName(), dj.GetPolarPhi(), dj.GetEtaSize()); - SetupAddElement(jet, iItemHolder); + SetupAddElement(jet, iItemHolder, true); + + REX::REveVector p1; + REX::REveVector p2; + + float size = 50.f * dj.Pt(); // values are saved in scale + double theta = dj.Theta(); + // printf("%s jet theta = %f, phi = %f \n", iItemHolder->GetCName(), theta, dj.Phi()); + double phi = dj.Phi(); + + + if (viewType == "Projected" ) + { + static const float_t offr = 6; + float r_ecal = context->GetMaxR() + offr; + float z_ecal = context->GetMaxZ() + offr; + + float transAngle = abs(atan(r_ecal/z_ecal)); + double r(0); + bool debug = false; + if ( theta < transAngle || 3.14-theta < transAngle) + { + z_ecal = context->GetMaxZ() + offr/transAngle; + r = z_ecal/fabs(cos(theta)); + } + else + { + debug = 3; + r = r_ecal/sin(theta); + } + + p1.Set( 0., (phiSetScaleCenter(p1.fX, p1.fY, p1.fZ); + marker->AddLine(p1, p2); + + marker->SetLineWidth(4); + if (debug) + marker->AddMarker(0, 0.9); + + SetupAddElement(marker, iItemHolder, true); + } + jet->SetName(Form("element %s", iItemHolder->GetName().c_str())); } }; @@ -209,7 +256,7 @@ class TrackProxyBuilder : public REX::REveDataSimpleProxyBuilderTemplateGetCName(), p.Pt(), p.Eta()); auto track = new REX::REveTrack((TParticle*)(x), 1, context->GetPropagator()); track->MakeTrack(); - SetupAddElement(track, iItemHolder, false); + SetupAddElement(track, iItemHolder, true); // iItemHolder->AddElement(track); track->SetName(Form("element %s id=%d", iItemHolder->GetCName(), track->GetElementId())); } @@ -277,7 +324,6 @@ private: REX::REveProjectionManager* m_mngRhoZ; std::vector m_builders; - // std::vector m_collections; REX::REveScene* m_collections; TableHandle::TableSpecs m_tableFormats; @@ -285,6 +331,20 @@ private: public: XYManager(Event* event): m_event(event), m_viewContext(0), m_mngRhoZ(0), m_collections(0) { + //view context + float r = 300; + float z = 300; + auto prop = new REX::REveTrackPropagator(); + prop->SetMagFieldObj(new REX::REveMagFieldDuo(350, -3.5, 2.0)); + prop->SetMaxR(r); + prop->SetMaxZ(z); + prop->SetMaxOrbs(6); + prop->IncRefCount(); + + m_viewContext = new REX::REveViewContext(); + m_viewContext->SetBarrel(r, z); + m_viewContext->SetTrackPropagator(prop); + createScenesAndViews(); // table specs @@ -298,22 +358,6 @@ public: column("phi", 1, "Phi"). column("etasize", 2, "GetEtaSize"). column("phisize", 2, "GetPhiSize"); - - - //view context - float r = 300; - float z = 600; - auto prop = new REX::REveTrackPropagator(); - prop->SetMagFieldObj(new REX::REveMagFieldDuo(350, -3.5, 2.0)); - prop->SetMaxR(r); - prop->SetMaxZ(z); - prop->SetMaxOrbs(6); - prop->IncRefCount(); - - m_viewContext = new REX::REveViewContext(); - m_viewContext->SetBarrel(r, z); - m_viewContext->SetTrackPropagator(prop); - // m_viewContext->IncRefCount(); } void createScenesAndViews() @@ -324,14 +368,26 @@ public: // 3D m_scenes.push_back(REX::gEve->GetEventScene()); + // Geometry + auto b1 = new REX::REveGeoShape("Barrel 1"); + float dr = 3; + b1->SetShape(new TGeoTube(m_viewContext->GetMaxR() , m_viewContext->GetMaxR() + dr, m_viewContext->GetMaxZ())); + b1->SetMainColor(kCyan); + REX::gEve->GetGlobalScene()->AddElement(b1); + + // RhoZ - if (1) { + if (gRhoZView) { auto rhoZEventScene = REX::gEve->SpawnNewScene("RhoZ Scene","Projected"); m_mngRhoZ = new REX::REveProjectionManager(REX::REveProjection::kPT_RhoZ); m_mngRhoZ->SetImportEmpty(true); auto rhoZView = REX::gEve->SpawnNewViewer("RhoZ View", ""); rhoZView->AddScene(rhoZEventScene); m_scenes.push_back(rhoZEventScene); + + auto pgeoScene = REX::gEve->SpawnNewScene("Projection Geometry","xxx"); + m_mngRhoZ->ImportElements(b1,pgeoScene ); + rhoZView->AddScene(pgeoScene); } // Table @@ -374,7 +430,6 @@ public: { TString pname; pname.Form("item %2d", i); collection->AddItem(l->At(i), pname.Data(), ""); - collection->GetDataItem(i)->SetMainColorPtr(collection->GetMainColorPtr()); } } } @@ -402,8 +457,8 @@ public: auto glBuilder = makeGLBuilderForType(collection->GetItemClass()); glBuilder->SetCollection(collection); glBuilder->SetHaveAWindow(true); - REX::REveElement* product = glBuilder->CreateProduct(m_viewContext); for (REX::REveScene* scene : m_scenes) { + REX::REveElement* product = glBuilder->CreateProduct(scene->GetTitle(), m_viewContext); if (strncmp(scene->GetCTitle(), "Table", 5) == 0) continue; if (!strncmp(scene->GetCTitle(), "Projected", 8)) { m_mngRhoZ->ImportElements(product, scene); @@ -423,7 +478,7 @@ public: tableBuilder->SetHaveAWindow(showTable); tableBuilder->SetTableEntries(m_tableFormats[collection->GetName()]); - REX::REveElement* tablep = tableBuilder->CreateProduct(m_viewContext); + REX::REveElement* tablep = tableBuilder->CreateProduct("table-type", m_viewContext); for (REX::REveScene* scene : m_scenes) { if (strncmp(scene->GetCTitle(), "Table", 5) == 0) { scene->AddElement(tablep); @@ -489,7 +544,7 @@ public: //______________________________________________________________________________ -void collection_proxies() +void collection_proxies(bool proj=true) { REX::REveManager::Create(); @@ -497,6 +552,8 @@ void collection_proxies() event->Create(); event->N_tracks = 10; event->N_jets = 4; + + gRhoZView = true; // debug settings auto xyManager = new XYManager(event); @@ -504,8 +561,7 @@ void collection_proxies() if (1) { REX::REveDataCollection* trackCollection = new REX::REveDataCollection("XYTracks"); trackCollection->SetItemClass(TParticle::Class()); - Color_t trackColor = kGreen; - trackCollection->SetMainColorPtr(&trackColor); + trackCollection->SetMainColor(kGreen); //trackCollection->SetFilterExpr("i.Pt() > 0.1 && std::abs(i.Eta()) < 1"); xyManager->addCollection(trackCollection); } @@ -513,8 +569,7 @@ void collection_proxies() if (1) { REX::REveDataCollection* jetCollection = new REX::REveDataCollection("XYJets"); jetCollection->SetItemClass(XYJet::Class()); - Color_t jetColor = kYellow; - jetCollection->SetMainColorPtr(&jetColor); + jetCollection->SetMainColor(kYellow); xyManager->addCollection(jetCollection); }