File indexing completed on 2024-04-06 12:11:49
0001 #include "TEveGeoNode.h"
0002 #include "TEveGeoShape.h"
0003 #include "TEveStraightLineSet.h"
0004
0005 #include "Fireworks/Core/interface/FWSimpleProxyBuilderTemplate.h"
0006 #include "Fireworks/Core/interface/FWEventItem.h"
0007 #include "Fireworks/Core/interface/FWGeometry.h"
0008 #include "Fireworks/Core/interface/fwLog.h"
0009
0010 #include "DataFormats/GEMRecHit/interface/ME0RecHitCollection.h"
0011
0012 class FWME0RecHitProxyBuilder : public FWSimpleProxyBuilderTemplate<ME0RecHit> {
0013 public:
0014 FWME0RecHitProxyBuilder() {}
0015 ~FWME0RecHitProxyBuilder() override {}
0016
0017 bool haveSingleProduct() const override { return false; }
0018
0019 REGISTER_PROXYBUILDER_METHODS();
0020
0021 FWME0RecHitProxyBuilder(const FWME0RecHitProxyBuilder&) = delete;
0022 const FWME0RecHitProxyBuilder& operator=(const FWME0RecHitProxyBuilder&) = delete;
0023
0024 private:
0025 void buildViewType(const ME0RecHit& iData,
0026 unsigned int iIndex,
0027 TEveElement& oItemHolder,
0028 FWViewType::EType type,
0029 const FWViewContext*) override;
0030 };
0031
0032 void FWME0RecHitProxyBuilder::buildViewType(const ME0RecHit& iData,
0033 unsigned int iIndex,
0034 TEveElement& oItemHolder,
0035 FWViewType::EType type,
0036 const FWViewContext*) {
0037 ME0DetId me0Id = iData.me0Id();
0038 unsigned int rawid = me0Id.rawId();
0039
0040 const FWGeometry* geom = item()->getGeom();
0041
0042 if (!geom->contains(rawid)) {
0043 fwLog(fwlog::kError) << "failed to get geometry of ME0 roll with detid: " << rawid << std::endl;
0044 return;
0045 }
0046
0047 TEveStraightLineSet* recHitSet = new TEveStraightLineSet;
0048 recHitSet->SetLineWidth(3);
0049
0050 if (type == FWViewType::k3D || type == FWViewType::kISpy) {
0051 TEveGeoShape* shape = geom->getEveShape(rawid);
0052 shape->SetMainTransparency(75);
0053 shape->SetMainColor(item()->defaultDisplayProperties().color());
0054 recHitSet->AddElement(shape);
0055 }
0056
0057 float localX = iData.localPosition().x();
0058 float localY = iData.localPosition().y();
0059 float localZ = iData.localPosition().z();
0060
0061 float localXerr = sqrt(iData.localPositionError().xx());
0062 float localYerr = sqrt(iData.localPositionError().yy());
0063
0064 float localU1[3] = {localX - localXerr, localY, localZ};
0065
0066 float localU2[3] = {localX + localXerr, localY, localZ};
0067
0068 float localV1[3] = {localX, localY - localYerr, localZ};
0069
0070 float localV2[3] = {localX, localY + localYerr, localZ};
0071
0072 float globalU1[3];
0073 float globalU2[3];
0074 float globalV1[3];
0075 float globalV2[3];
0076
0077 FWGeometry::IdToInfoItr det = geom->find(rawid);
0078
0079 geom->localToGlobal(*det, localU1, globalU1);
0080 geom->localToGlobal(*det, localU2, globalU2);
0081 geom->localToGlobal(*det, localV1, globalV1);
0082 geom->localToGlobal(*det, localV2, globalV2);
0083
0084 recHitSet->AddLine(globalU1[0], globalU1[1], globalU1[2], globalU2[0], globalU2[1], globalU2[2]);
0085
0086 recHitSet->AddLine(globalV1[0], globalV1[1], globalV1[2], globalV2[0], globalV2[1], globalV2[2]);
0087
0088 setupAddElement(recHitSet, &oItemHolder);
0089 }
0090
0091 REGISTER_FWPROXYBUILDER(FWME0RecHitProxyBuilder,
0092 ME0RecHit,
0093 "ME0 RecHits",
0094 FWViewType::kAll3DBits | FWViewType::kAllRPZBits);