File indexing completed on 2024-04-06 12:11:54
0001
0002
0003 #include <vector>
0004
0005 #include "TMatrixDEigen.h"
0006 #include "TMatrixDSym.h"
0007 #include "TDecompSVD.h"
0008 #include "TEveTrans.h"
0009 #include "TEveTrack.h"
0010 #include "TGeoSphere.h"
0011 #include "TGeoMatrix.h"
0012 #include "TEveGeoNode.h"
0013 #include "TEveGeoShape.h"
0014 #include "TEveVSDStructs.h"
0015
0016 #include "Fireworks/Candidates/interface/CandidateUtils.h"
0017
0018
0019 #include "Fireworks/Core/interface/FWSimpleProxyBuilderTemplate.h"
0020 #include "Fireworks/Core/interface/FWEventItem.h"
0021
0022 #include "DataFormats/BTauReco/interface/CandSecondaryVertexTagInfo.h"
0023
0024 class FWSecVertexCandidateProxyBuilder : public FWSimpleProxyBuilderTemplate<reco::CandSecondaryVertexTagInfo> {
0025 public:
0026 FWSecVertexCandidateProxyBuilder() {}
0027 ~FWSecVertexCandidateProxyBuilder() override {}
0028
0029 REGISTER_PROXYBUILDER_METHODS();
0030
0031 FWSecVertexCandidateProxyBuilder(const FWSecVertexCandidateProxyBuilder&) = delete;
0032 const FWSecVertexCandidateProxyBuilder& operator=(const FWSecVertexCandidateProxyBuilder&) = delete;
0033
0034 private:
0035
0036 using FWSimpleProxyBuilderTemplate<reco::CandSecondaryVertexTagInfo>::build;
0037 void build(const reco::CandSecondaryVertexTagInfo& iData,
0038 unsigned int iIndex,
0039 TEveElement& oItemHolder,
0040 const FWViewContext*) override;
0041 };
0042
0043 void FWSecVertexCandidateProxyBuilder::build(const reco::CandSecondaryVertexTagInfo& iData,
0044 unsigned int iIndex,
0045 TEveElement& oItemHolder,
0046 const FWViewContext*) {
0047 TEveGeoManagerHolder gmgr(TEveGeoShape::GetGeoMangeur());
0048 TEvePointSet* pointSet = new TEvePointSet();
0049 pointSet->SetMainColor(item()->defaultDisplayProperties().color());
0050 for (unsigned int i = 0; i < iData.nVertices(); i++) {
0051 const reco::VertexCompositePtrCandidate& v = iData.secondaryVertex(i);
0052
0053 TGeoSphere* sphere = new TGeoSphere(0, 0.002);
0054 TGeoTranslation position(v.vx(), v.vy(), v.vz());
0055 TEveGeoShape* shape = new TEveGeoShape();
0056 sphere->SetBoxDimensions(2.5, 2.5, 2.5);
0057 shape->SetShape(sphere);
0058 shape->SetMainColor(item()->defaultDisplayProperties().color());
0059 shape->SetMainTransparency(10);
0060
0061 TEveTrans& t = shape->RefMainTrans();
0062 reco::Vertex::Error e = v.error();
0063 TMatrixDSym m(3);
0064 for (int i = 0; i < 3; i++)
0065 for (int j = 0; j < 3; j++) {
0066 m(i, j) = e(i, j);
0067 }
0068 TMatrixDEigen eig(m);
0069 TDecompSVD svd(m);
0070 TMatrixD mm = svd.GetU();
0071
0072 for (int i = 0; i < 3; i++)
0073 for (int j = 0; j < 3; j++) {
0074 t(i + 1, j + 1) = mm(i, j);
0075 }
0076 TVectorD vv(eig.GetEigenValuesRe());
0077 t.Scale(sqrt(vv(0)) * 1000., sqrt(vv(1)) * 1000., sqrt(vv(2)) * 1000.);
0078 t.SetPos(v.vx(), v.vy(), v.vz());
0079
0080 setupAddElement(shape, &oItemHolder);
0081
0082 pointSet->SetNextPoint(v.vx(), v.vy(), v.vz());
0083
0084 for (unsigned int j = 0; j < v.numberOfDaughters(); j++) {
0085 const reco::Candidate* c = v.daughter(j);
0086 std::cout << c << std::endl;
0087 TEveTrack* trk = fireworks::prepareCandidate(*c, context().getTrackPropagator());
0088
0089 trk->SetMainColor(item()->defaultDisplayProperties().color());
0090 trk->MakeTrack();
0091 setupAddElement(trk, &oItemHolder);
0092 }
0093 }
0094 setupAddElement(pointSet, &oItemHolder);
0095 }
0096
0097 REGISTER_FWPROXYBUILDER(FWSecVertexCandidateProxyBuilder,
0098 reco::CandSecondaryVertexTagInfo,
0099 "SecVertexCand",
0100 FWViewType::k3DBit | FWViewType::kAllRPZBits);