49 -5.191, -4.889, -4.716, -4.538, -4.363, -4.191, -4.013, -3.839, -3.664, -3.489, -3.314, -3.139, -2.964, -2.853,
50 -2.650, -2.500, -2.322, -2.172, -2.043, -1.930, -1.830, -1.740, -1.653, -1.566, -1.479, -1.392, -1.305, -1.218,
51 -1.131, -1.044, -0.957, -0.870, -0.783, -0.696, -0.609, -0.522, -0.435, -0.348, -0.261, -0.174, -0.087, 0.000,
52 0.087, 0.174, 0.261, 0.348, 0.435, 0.522, 0.609, 0.696, 0.783, 0.870, 0.957, 1.044, 1.131, 1.218,
53 1.305, 1.392, 1.479, 1.566, 1.653, 1.740, 1.830, 1.930, 2.043, 2.172, 2.322, 2.500, 2.650, 2.853,
54 2.964, 3.139, 3.314, 3.489, 3.664, 3.839, 4.013, 4.191, 4.363, 4.538, 4.716, 4.889, 5.191};
74 float GetEtaSize()
const {
return fEtaSize; }
75 float GetPhiSize()
const {
return fPhiSize; }
76 void SetEtaSize(
float iEtaSize) { fEtaSize = iEtaSize; }
77 void SetPhiSize(
float iPhiSize) { fPhiSize = iPhiSize; }
81 TParticle(pdg, status, mother1, mother2, daughter1, daughter2, px, py, pz, etot, 0, 0, 0, 0)
95 RecHit(
float pt,
float x,
float y,
float z): fPt(
pt), fX(
x), fY(
y), fZ(z) {}
99 class CaloTower :
public TObject
106 CaloTower(
float eta,
float phi,
float et): fEta(eta), fPhi(phi), fEt(et) {}
122 std::set<int> item_set;
124 for (
auto &cellId : sel_cells)
126 fCaloData->GetCellData(cellId, cd);
129 for (
int t = 0; t < fCollection->GetNItems(); ++t)
131 CaloTower* tower = (CaloTower*) fCollection->GetDataPtr(t);
138 sel->
NewElementPicked(fCollection->GetItemList()->GetElementId(), multi,
true, item_set);
144 TH2F* hist = fCaloData->GetHist(GetSliceIndex());
147 for(
auto &i : idcs ) {
148 CaloTower* tower = (CaloTower*)fCollection->GetDataPtr(i);
149 int bin = hist->
FindBin(tower->fEta, tower->fPhi);
152 for (
size_t ci = 0; ci < out.size(); ++ci)
154 if (out[ci].fTower == bin && out[ci].fSlice == GetSliceIndex())
156 float oldv = out[ci].fFraction;
157 out[ci].fFraction = oldv + frac;
175 std::vector<TList*> fListData;
183 fCaloData->AddHistogram(baseHist);
186 fCaloData->SetSelector(selector);
197 for (
int i = 1; i <=
N; ++i)
199 double pt =
r.Uniform(0.5, 10);
200 double eta =
r.Uniform(-2.55, 2.55);
207 auto jet =
new Jet(0, 0, 0, 0, 0, 0, px, py, pz,
std::sqrt(px*px + py*py + pz*pz + 80*80));
208 jet->SetEtaSize(
r.Uniform(0.02, 0.2));
209 jet->SetPhiSize(
r.Uniform(0.01, 0.3));
212 fListData.push_back(list);
215 void MakeParticles(
int N)
221 for (
int i = 1; i <=
N; ++i)
223 double pt =
r.Uniform(0.5, 10);
224 double eta =
r.Uniform(-2.55, 2.55);
232 auto particle =
new TParticle(0, 0, 0, 0, 0, 0,
233 px, py, pz,
std::sqrt(px*px + py*py + pz*pz + 80*80),
236 int pdg = 11 * (
r.Integer(2) > 0 ? 1 : -1);
237 particle->SetPdgCode(pdg);
241 fListData.push_back(list);
244 void MakeRecHits(
int N)
251 for (
int i = 1; i <=
N; ++i)
253 float pt =
r.Uniform(0.5, 10);
254 float x =
r.Uniform(-200, 200);
255 float y =
r.Uniform(-200, 200);
256 float z =
r.Uniform(-500, 500);
257 auto rechit =
new RecHit(
pt,
x,
y, z);
260 fListData.push_back(list);
265 for (
auto &
l : fListData)
278 TList* jlist = fListData[0];
281 fListData.push_back(elist);
284 fListData.push_back(hlist);
285 for (
int i = 0; i <= jlist->
GetLast(); ++i) {
286 const Jet* j = (Jet*)jlist->
At(i);
287 float offX = j->Eta();
289 for (
int k=0; k<20; ++k) {
300 fCaloData->DataChanged();
312 bool HaveSingleProduct()
const override {
return false; }
316 void BuildViewType(
const Jet& dj,
int idx,
REveElement* iItemHolder,
321 jet->AddEllipticCone(dj.Eta(), dj.Phi(), dj.GetEtaSize(), dj.GetPhiSize());
322 SetupAddElement(jet, iItemHolder,
true);
323 jet->SetLineColor(jet->GetMainColor());
325 float size = 50.f * dj.Pt();
326 double theta = dj.Theta();
328 double phi = dj.Phi();
331 if (viewType ==
"Projected" )
333 static const float_t offr = 6;
334 float r_ecal = context->
GetMaxR() + offr;
335 float z_ecal = context->
GetMaxZ() + offr;
337 float transAngle = abs(
atan(r_ecal/z_ecal));
340 if (theta < transAngle || 3.14-theta < transAngle)
342 z_ecal = context->
GetMaxZ() + offr/transAngle;
348 r = r_ecal/
sin(theta);
355 marker->SetScaleCenter(p1.fX, p1.fY, p1.fZ);
356 marker->AddLine(p1, p2);
357 marker->SetLineWidth(4);
359 marker->AddMarker(0, 0.9);
361 SetupAddElement(marker, iItemHolder,
true);
362 marker->SetName(
Form(
"line %s %d", Collection()->GetCName(), idx));
387 SetupAddElement(track, iItemHolder,
true);
395 auto collection = Collection();
399 #define RND_BOX(x) (Float_t)r.Uniform(-(x), (x))
400 for (
int h = 0;
h < collection->GetNItems(); ++
h)
402 RecHit* hit = (RecHit*)collection->GetDataPtr(
h);
447 impSet.insert(p->m_elements->FirstChild());
455 buildBoxSet((
REveBoxSet*)product->m_elements->FirstChild());
464 TH2F* fHist {
nullptr};
465 int fSliceIndex {-1};
474 fSliceIndex = fCaloData->AddHistogram(fHist);
476 fCaloData->RefSliceInfo(fSliceIndex)
477 .Setup(Collection()->GetCName(),
479 Collection()->GetMainColor(),
480 Collection()->GetMainTransparency());
482 fCaloData->GetSelector()->AddSliceSelector(std::unique_ptr<REveCaloDataSliceSelector>
483 (
new REveCaloTowerSliceSelector(fSliceIndex, Collection(), fCaloData)));
497 fCaloData->RefSliceInfo(fSliceIndex)
498 .Setup(Collection()->GetCName(),
500 Collection()->GetMainColor(),
501 Collection()->GetMainTransparency());
506 CaloTower* tower = (CaloTower*)collection->
GetDataPtr(
h);
511 fHist->Fill(tower->fEta, tower->fPhi, tower->fEt);
514 fCaloData->DataChanged();
520 fCaloData->GetSelector()->SetActiveSlice(fSliceIndex);
521 impSet.insert(fCaloData);
522 fCaloData->FillImpliedSelectedSet(impSet);
537 class CollectionManager
540 Event *fEvent{
nullptr};
542 std::vector<REveScene *> m_scenes;
545 std::vector<REveDataProxyBuilderBase *> m_builders;
548 bool m_inEventLoading {
false};
551 CollectionManager(Event* event) : fEvent(event)
564 m_viewContext->SetBarrel(
r, z);
565 m_viewContext->SetTrackPropagator(prop);
570 tableInfo->table(
"TParticle").
571 column(
"pt", 1,
"i.Pt()").
572 column(
"eta", 3,
"i.Eta()").
573 column(
"phi", 3,
"i.Phi()");
575 tableInfo->table(
"Jet").
576 column(
"eta", 1,
"i.Eta()").
577 column(
"phi", 1,
"i.Phi()").
578 column(
"etasize", 2,
"i.GetEtaSize()").
579 column(
"phisize", 2,
"i.GetPhiSize()");
581 tableInfo->table(
"RecHit").
582 column(
"pt", 1,
"i.fPt");
584 tableInfo->table(
"CaloTower").
585 column(
"eta", 3,
"i.fEta").
586 column(
"phi", 3,
"i.fPhi").
587 column(
"Et", 3,
"i.fEt");
589 m_viewContext->SetTableViewInfo(tableInfo);
596 if (!strncmp(
c->GetCName(),
"Table", 5))
597 c->AddElement(m_viewContext->GetTableViewInfo());
606 for (
auto &
l : fEvent->fListData) {
608 if (collection->
GetName() == std::string(
l->GetName()))
612 for (
int i = 0; i <=
l->GetLast(); ++i)
614 std::string cname = collection->
GetName();
615 auto len = cname.size();
616 char end = cname[len-1];
618 cname = cname.substr(0, len-1);
621 collection->
AddItem(
l->At(i), pname.Data(),
"");
630 m_inEventLoading =
true;
632 for (
auto &el: m_collections->RefChildren())
635 SetDataItemsFromEvent(
c);
638 for (
auto proxy : m_builders)
643 fEvent->fCaloData->DataChanged();
644 m_inEventLoading =
false;
649 m_collections->AddElement(collection);
652 SetDataItemsFromEvent(collection);
655 for (
auto scene : m_scenes)
659 if (strncmp(scene->GetCName(),
"Tables", 5) == 0)
continue;
661 if (!strncmp(scene->GetCTitle(),
"Projected", 8))
670 m_builders.push_back(glBuilder);
675 tableBuilder->SetHaveAWindow(
true);
676 tableBuilder->SetCollection(collection);
677 REveElement* tablep = tableBuilder->CreateProduct(
"table-type", m_viewContext);
678 auto tableMng = m_viewContext->GetTableViewInfo();
681 tableMng->SetDisplayedCollection(collection->
GetElementId());
684 for (
auto s : m_scenes)
686 if (strncmp(
s->GetCTitle(),
"Table", 5) == 0)
688 s->AddElement(tablep);
689 tableBuilder->Build(collection, tablep, m_viewContext );
692 tableMng->AddDelegate([=]() { tableBuilder->ConfigChanged(); });
693 m_builders.push_back(tableBuilder);
699 for (
int t = 0; t <
N; t++) {
700 auto te = tableEntries[t];
706 this->ModelChanged( collection, ids );
710 this->FillImpliedSelected( collection, impSelSet);
714 void finishViewCreate()
716 auto mngTable = m_viewContext->GetTableViewInfo();
719 for (
auto &el : m_collections->RefChildren())
730 if (m_inEventLoading)
return;
732 for (
auto proxy : m_builders)
734 if (proxy->Collection()->GetItemList() == itemList)
737 proxy->ModelChanges(ids);
744 if (m_inEventLoading)
return;
746 for (
auto proxy : m_builders)
748 if (proxy->Collection()->GetItemList() == itemList)
750 proxy->FillImpliedSelected(impSelSet);
766 CollectionManager* fCMng;
769 EventManager(Event*
e, CollectionManager*
m): fEvent(
e), fCMng(
m) {}
771 virtual ~EventManager() {}
773 virtual void NextEvent()
792 auto event =
new Event();
800 b1->SetMainColor(
kCyan);
818 auto collectionMng =
new CollectionManager(event);
823 trackCollection->
SetFilterExpr(
"i.Pt() > 4.1 && std::abs(i.Eta()) < 1");
824 collectionMng->addCollection(trackCollection,
new TParticleProxyBuilder(),
true);
829 collectionMng->addCollection(jetCollection,
new JetProxyBuilder());
835 collectionMng->addCollection(hitCollection,
new RecHitProxyBuilder());
838 auto calo3d =
new REveCalo3D(event->fCaloData);
839 calo3d->SetBarrelRadius(
kR_max);
840 calo3d->SetEndCapPos(
kZ_d);
841 calo3d->SetMaxTowerH(300);
848 collectionMng->addCollection(ecalCollection,
new CaloTowerProxyBuilder(event->fCaloData));
853 collectionMng->addCollection(hcalCollection,
new CaloTowerProxyBuilder(event->fCaloData));
856 auto eventMng =
new EventManager(event, collectionMng);
857 eventMng->SetName(
"EventManager");