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