60,7 → 60,7 |
void SetTypeC() {SetGlass(0, 0.3);SetGap(1.03);} |
*/ |
//----------------------------------------------------------------------------- |
void Init(double rsys_scale = 7.0) |
void Init(double rsys_scale = 10.0) |
{ |
RTSetStyle(gStyle); |
gStyle->SetOptStat(10); |
70,7 → 70,8 |
double rsys1[]={ rsys_scale, rsys_scale, rsys_scale}; |
|
c3dview = (TCanvas*)gROOT->FindObject("c3dview"); |
if(!c3dview) {c3dview = new TCanvas("c3dview", "3D View", 0, 0, 700, 723); c3dview->SetFillColor(0);} |
if(!c3dview) {c3dview = new TCanvas("c3dview", "3D View", 0, 0, 700, 723); |
c3dview->SetFillColor(0);} |
else c3dview->Clear(); |
|
TView3D *view = new TView3D(1, rsys0, rsys1); |
177,9 → 178,9 |
|
//----------------------------------------------------------------------------- |
// en zarek |
double Single(CDetector *detector, DetectorParameters& parameters, TVector3 hit = TVector3(0.0, 0.0, 0.0), double theta = 0.0, double phi = 0.0) |
double Single(CDetector *detector, DetectorParameters& parameters, |
TVector3 hit = TVector3(0.0, 0.0, 0.0), double theta = 0.0, double phi = 0.0) |
{ |
//CDetector *detector = new CDetector(center, 3, 1.666, 3, 3, 1, 1.48, 1.48); |
theta = Pi()*theta/180.0; |
if(theta < 1e-6) theta = 1e-6; |
phi = phi*Pi()/180.0; |
191,11 → 192,32 |
if(show_3d) detector->Draw(draw_width); |
|
CRay *ray0 = new CRay(hit.x() - offset, hit.y(), hit.z(), |
TMath::Cos(theta), TMath::Sin(theta)*TMath::Sin(phi), TMath::Sin(theta)*TMath::Cos(phi)); |
TMath::Cos(theta), TMath::Sin(theta)*TMath::Sin(phi), |
TMath::Sin(theta)*TMath::Cos(phi)); |
// Set z-polarization == vertical |
TVector3 polarization(0,0,1); |
polarization.RotateY(-theta); |
polarization.RotateZ(phi); |
if (polarization.Dot(ray0->GetK()) > 1e-5) printf("ERROR: pol not perep\n"); |
ray0->setPolarization(polarization); |
CRay *ray1 = new CRay; |
|
detector->Propagate(*ray0, ray1, show_3d); |
|
CRay *incidentPolarization = new CRay; |
incidentPolarization->SetColor(kGreen); |
TVector3 drawPosition = ray0->GetR(); |
drawPosition.SetX(drawPosition.X() - 5); |
incidentPolarization->Set(drawPosition, polarization); |
incidentPolarization->DrawS(drawPosition.X(), 1); |
|
TVector3 outPolarization = ray1->GetP(); |
drawPosition = ray1->GetR(); |
drawPosition.SetX(drawPosition.X() + 5); |
CRay* rayPol = new CRay(drawPosition, outPolarization); |
rayPol->SetColor(kBlack); |
rayPol->DrawS(drawPosition.X(), 1); |
|
delete ray0; |
delete ray1; |
|
203,7 → 225,8 |
} |
//----------------------------------------------------------------------------- |
// zarki, razporejeni v mrezi |
double Grid(CDetector *detector, DetectorParameters& parameters, int NN = 10, double theta = 0.0) |
double Grid(CDetector *detector, DetectorParameters& parameters, |
int NN = 10, double theta = 0.0) |
{ |
//CDetector *detector = new CDetector(center, 3, 1.666, 3, 3, 1, 1.48, 1.48); |
theta = Pi()*theta/180.0; |
224,6 → 247,9 |
TMath::Cos(theta), |
0.0, |
TMath::Sin(theta)); |
TVector3 polarization(0, 1, 0); |
polarization.RotateY(-theta); |
ray0->setPolarization(polarization); |
CRay *ray1 = new CRay; |
if(i == (NN/2)) |
detector->Propagate(*ray0, ray1, show_3d); |
247,7 → 273,8 |
//----------------------------------------------------------------------------- |
// zarki z nakljucnim polozajem vpada (na vstopni pov. vodnika) |
// vsi pod kotom (theta, phi) |
double RandYZ(CDetector *detector, DetectorParameters& parameters, int NN, double theta, double phi, int show_rays) |
double RandYZ(CDetector *detector, DetectorParameters& parameters, |
int NN, double theta, double phi, int show_rays) |
{ |
//CDetector *detector = new CDetector(center, 3, 1.666, 3, 3, 1, 1.48, 1.48); |
theta = theta*3.14159265358979312/180.0; |
277,6 → 304,10 |
double rn = TMath::Sin(theta)*TMath::Cos(phi); |
|
CRay *ray0 = new CRay(rx, ry, rz, rl, rm, rn); |
TVector3 polarization(0, 0, 1); |
polarization.RotateY(-theta); |
polarization.RotateZ(phi); |
ray0->setPolarization(polarization); |
CRay *ray1 = new CRay; |
|
if(i < show_rays) |
283,8 → 314,8 |
detector->Propagate(*ray0, ray1, show_3d); |
else |
detector->Propagate(*ray0, ray1, 0); |
//delete ray0; |
//delete ray1; |
delete ray1; |
delete ray0; |
} |
|
double acceptance = 0.0; |
304,7 → 335,8 |
// in cos theta and phi uniformly: |
// theta [0, theta] |
// phi [0,360] |
double RandIso(CDetector *detector, DetectorParameters& parameters, int NN = 1e3, double thetaMin=0.0, double theta = 30.0, int show_rays = 30, int show_rand = 0) |
double RandIso(CDetector *detector, DetectorParameters& parameters, |
int NN = 1e3, double thetaMin=0.0, double theta = 30.0, int show_rays = 30, int show_rand = 0) |
{ |
//CDetector *detector = new CDetector(center, 3, 1.666, 3, 3, 1, 1.48, 1.48); |
double pi = 3.14159265358979312; |
405,7 → 437,8 |
|
// Beamtest distribution |
// with fixed theta and phi in interval phiMin, phiMax |
double beamtest(CDetector *detector, DetectorParameters& parameters, int NN, double theta, double phiMin, double phiMax, int show_rays, int show_rand) |
double beamtest(CDetector *detector, DetectorParameters& parameters, |
int NN, double theta, double phiMin, double phiMax, int show_rays, int show_rand) |
{ |
double pi = 3.14159265358979312; |
theta *= pi/180.0; |
418,9 → 451,6 |
rand.SetSeed(now.Get()); |
double rx, ry, rz, rl, rm, rn; |
double rphi; |
//double rtheta; |
//double theta_min_rad = TMath::Power(TMath::Cos(theta), 2); |
//double theta_min_rad = TMath::Cos(theta); |
|
TH1F *hphi, *htheta, *hcostheta, *hl, *hm, *hn; |
hphi = (TH1F*)gROOT->FindObject("hphi"); if(hphi) delete hphi; |
461,10 → 491,17 |
//htheta->Fill(rtheta); |
//hcostheta->Fill( TMath::Cos(rtheta) ); |
hphi->Fill(rphi); |
hl->Fill(rl); hm->Fill(rm); hn->Fill(rn); |
hl->Fill(rl); |
hm->Fill(rm); |
hn->Fill(rn); |
} |
|
CRay *ray0 = new CRay(rx, ry, rz, rl, rm, rn); |
// inital polarizaton |
TVector3 polarization(0, 0, 1); |
polarization.RotateY(-theta); |
polarization.RotateX(rphi); |
ray0->setPolarization(polarization); |
CRay *ray1 = new CRay; |
|
if(i < show_rays) { |