6 #include "cetlib_except/exception.h" 41 fWireDirection = G4ThreeVector(WireDirection.X(),
43 WireDirection.Z()).unit();
44 fPlaneNormal = G4ThreeVector(PlaneNormal.X(),
46 PlaneNormal.Z()).unit();
47 fDPRatio = WireDiameter/WirePitch;
64 G4ThreeVector ProjDirection = PhotonDirection - fWireDirection*(fWireDirection.dot(PhotonDirection));
65 double CosTheta =
std::abs(fPlaneNormal.dot(ProjDirection));
66 if(CosTheta < fDPRatio)
69 return (1.0 - fDPRatio / CosTheta);
82 G4ThreeVector WireBasis1, WireBasis2;
86 fPlaneNormal=G4ThreeVector(1,0,0);
87 WireBasis1 =G4ThreeVector(0,1,0);
88 WireBasis2 =G4ThreeVector(0,0,1);
90 else if(Orientation==1)
92 fPlaneNormal=G4ThreeVector(0,1,0);
93 WireBasis1 =G4ThreeVector(1,0,0);
94 WireBasis2 =G4ThreeVector(0,0,1);
96 else if(Orientation==2)
98 fPlaneNormal=G4ThreeVector(0,0,1);
99 WireBasis1 =G4ThreeVector(0,1,0);
100 WireBasis2 =G4ThreeVector(0,0,1);
104 throw cet::exception(
"OpParamAction") <<
"Unrecognized wireplane orientation. Options are 1=Xdrift, 2=Ydrift, 3=Zdrift\n";
106 for(
size_t i=0; i!=InputVectors.size(); ++i)
108 if(InputVectors.at(i).size()!=3)
110 throw cet::exception(
"OpParamAction") <<
"Unrecognized wireplane parameter format. Expected vector(3)'s with v[0] = wire angle, v[1] = wire pitch, v[2] = wire diameter\n";
114 double theta = InputVectors[i][0]*3.142/180.;
115 fWireDirections.push_back(cos(theta)*WireBasis1 + sin(theta)*WireBasis2);
116 fDPRatios.push_back(InputVectors[i][2]/InputVectors[i][1]);
134 double AttenFraction=1.;
136 for(
size_t i=0; i!=fWireDirections.size(); ++i)
138 G4ThreeVector ProjDirection = PhotonDirection - fWireDirections.at(i) * (fWireDirections.at(i).dot(PhotonDirection.unit()));
141 double CosTheta = (ProjDirection.mag() > 0 ?
std::abs(fPlaneNormal.dot(ProjDirection))/ProjDirection.mag() : 1.0);
142 if(CosTheta < fDPRatios.at(i))
145 AttenFraction *= (1.0 - fDPRatios.at(i) / CosTheta);
147 return AttenFraction;
SimpleWireplaneAction(TVector3 WireDirection, TVector3 PlaneNormal, double WirePitch, double WireDiameter)
double GetAttenuationFraction(G4ThreeVector PhotonDirection, G4ThreeVector PhotonPosition)
double GetAttenuationFraction(G4ThreeVector PhotonDirection, G4ThreeVector PhotonPosition)
OverlaidWireplanesAction(std::vector< std::vector< double > >, int)
virtual double GetAttenuationFraction(G4ThreeVector PhotonDirection, G4ThreeVector PhotonPosition)
~OverlaidWireplanesAction()
cet::coded_exception< error, detail::translate > exception