Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 25 | f9daq | 1 | #include "RTUtil.h" |
| 2 | #include "CGuide.h" |
||
| 3 | |||
| 4 | #include "TROOT.h" |
||
| 5 | #include "TSystem.h" |
||
| 6 | #include "TStyle.h" |
||
| 7 | #include "TCanvas.h" |
||
| 8 | #include "TMath.h" |
||
| 9 | #include "TView3D.h" |
||
| 10 | #include "TH1F.h" |
||
| 11 | #include "TH2F.h" |
||
| 12 | #include "TBenchmark.h" |
||
| 13 | #include "TPolyMarker.h" |
||
| 14 | #include "TGraph.h" |
||
| 15 | #include "TF1.h" |
||
| 16 | |||
| 17 | int show_3d = 1; |
||
| 18 | int show_data = 1; |
||
| 19 | int draw_width = 2; |
||
| 20 | TVector3 center(-2.0, 0.0, 0.0); |
||
| 21 | |||
| 22 | double RandIso(int NN = 1e3, double theta = 30.0, int show_rays = 30, int show_rand = 0) |
||
| 23 | { |
||
| 24 | CDetector *detector = new CDetector(center); |
||
| 25 | double pi = 3.14159265358979312; |
||
| 26 | theta = theta*3.14159265358979312/180.0; |
||
| 27 | if(theta < MARGIN) theta = MARGIN; |
||
| 28 | |||
| 29 | TDatime now; |
||
| 30 | TRandom rand; |
||
| 31 | rand.SetSeed(now.Get()); |
||
| 32 | double rx, ry, rz, rl, rm, rn; |
||
| 33 | double rphi, rtheta; |
||
| 34 | //double theta_min_rad = TMath::Power(TMath::Cos(theta), 2); |
||
| 35 | double theta_min_rad = TMath::Cos(theta); |
||
| 36 | //if (show_rand) { |
||
| 37 | TH1F *hphi, *htheta, *hcostheta, *hl, *hm, *hn; |
||
| 38 | hphi = (TH1F*)gROOT->FindObject("hphi"); if(hphi) delete hphi; |
||
| 39 | hphi = new TH1F("hphi", "hphi", 100, 0.0, 2.0*pi); |
||
| 40 | htheta = (TH1F*)gROOT->FindObject("htheta"); if(htheta) delete htheta; |
||
| 41 | htheta = new TH1F("htheta", "htheta", 100, 0.0, pi/2.0); |
||
| 42 | hcostheta = (TH1F*)gROOT->FindObject("hcostheta"); if(hcostheta) delete hcostheta; |
||
| 43 | hcostheta = new TH1F("hcostheta", "hcostheta", 100, 0.0, 1.0); |
||
| 44 | hl = (TH1F*)gROOT->FindObject("hl"); if(hl) delete hl; |
||
| 45 | hl = new TH1F("hl", "hl", 100, 0.0, 1.0); |
||
| 46 | hm = (TH1F*)gROOT->FindObject("hm"); if(hm) delete hm; |
||
| 47 | hm = new TH1F("hm", "hm", 100, 0.0, 1.0); |
||
| 48 | hn = (TH1F*)gROOT->FindObject("hn"); if(hn) delete hn; |
||
| 49 | hn = new TH1F("hn", "hn", 100, 0.0, 1.0); |
||
| 50 | //} |
||
| 51 | |||
| 52 | |||
| 53 | detector->Init(); |
||
| 54 | if (show_3d) detector->Draw(draw_width); |
||
| 55 | |||
| 56 | int fate; |
||
| 57 | double SiPM = detector->GetSiPM(); |
||
| 58 | double M = detector->GetM(); |
||
| 59 | CRay *ray0 = new CRay; |
||
| 60 | CRay *ray1 = new CRay; |
||
| 61 | |||
| 62 | for(int i = 0; i < NN; i++) { |
||
| 63 | |||
| 64 | rx = center.x(); |
||
| 65 | ry = rand.Uniform(-M*SiPM/2.0, M*SiPM/2.0); |
||
| 66 | rz = rand.Uniform(-M*SiPM/2.0, M*SiPM/2.0); |
||
| 67 | |||
| 68 | rphi = rand.Uniform(0.0, 2.0*pi); |
||
| 69 | rtheta = TMath::ACos((rand.Uniform(theta_min_rad, 1.0))); |
||
| 70 | |||
| 71 | rl = TMath::Cos(rtheta); |
||
| 72 | rm = TMath::Sin(rtheta)*TMath::Sin(rphi); |
||
| 73 | rn = TMath::Sin(rtheta)*TMath::Cos(rphi); |
||
| 74 | |||
| 75 | if(show_rand) { |
||
| 76 | htheta->Fill(rtheta); |
||
| 77 | hcostheta->Fill( TMath::Cos(rtheta) ); |
||
| 78 | hphi->Fill(rphi); |
||
| 79 | hl->Fill(rl); hm->Fill(rm); hn->Fill(rn); |
||
| 80 | } |
||
| 81 | |||
| 82 | ray0->Set(rx, ry, rz, rl, rm, rn); |
||
| 83 | |||
| 84 | if(i < show_rays) |
||
| 85 | fate = detector->Propagate(*ray0, ray1, show_3d); |
||
| 86 | else |
||
| 87 | fate = detector->Propagate(*ray0, ray1, 0); |
||
| 88 | } |
||
| 89 | |||
| 90 | if(show_rand) { |
||
| 91 | TCanvas *c2rand = (TCanvas*)gROOT->FindObject("c2rand"); |
||
| 92 | if(!c2rand) c2rand = new TCanvas("c2rand", "Random", 750, 550, 700, 700); |
||
| 93 | else c2rand->Clear(); |
||
| 94 | c2rand->Divide(2,3); |
||
| 95 | |||
| 96 | c2rand->cd(1); hphi->Draw(); |
||
| 97 | c2rand->cd(3); htheta->Draw(); |
||
| 98 | c2rand->cd(5); hcostheta->Draw(); |
||
| 99 | c2rand->cd(2); hl->Draw(); |
||
| 100 | c2rand->cd(4); hm->Draw(); |
||
| 101 | c2rand->cd(6); hn->Draw(); |
||
| 102 | delete c2rand; |
||
| 103 | } |
||
| 104 | |||
| 105 | delete hphi; |
||
| 106 | delete htheta; |
||
| 107 | delete hcostheta; |
||
| 108 | delete hl; |
||
| 109 | delete hm; |
||
| 110 | delete hn; |
||
| 111 | |||
| 112 | delete ray0; |
||
| 113 | delete ray1; |
||
| 114 | |||
| 115 | |||
| 116 | return (detector->GetHActive())->GetEntries() / (double)NN; |
||
| 117 | } |
||
| 118 | |||
| 119 | // a vs. d |
||
| 120 | void LGI_ad(int NN = 1e4, double min = 2.5, double max = 3.5, double minD = 1, double maxD = 6, const int steps = 10, double theta = 30.0) |
||
| 121 | { |
||
| 122 | show_3d = 0; // don't show every simulation |
||
| 123 | show_data = 1; |
||
| 124 | |||
| 125 | //double d = detector->GetD(); |
||
| 126 | double b = 5.0; // upper side of LG |
||
| 127 | double R = 0.96; |
||
| 128 | |||
| 129 | TH2F *hAcceptance = new TH2F("hAcceptance","Acceptance",steps-1,minD,maxD,steps-1,min,max); |
||
| 130 | |||
| 131 | printf(" d | a | Acceptance\n"); |
||
| 132 | for(int i=0; i<steps; i++) { |
||
| 133 | double x = hAcceptance->GetXaxis()->GetBinCenter(i); |
||
| 134 | for(int j=0; j<steps; j++) { |
||
| 135 | double y = hAcceptance->GetYaxis()->GetBinCenter(j); |
||
| 136 | double M = b/y; |
||
| 137 | // hardcoded n0 and n1 |
||
| 138 | SetLG(y, M, x); |
||
| 139 | //Init(); exclude simulation |
||
| 140 | double acceptance = RandIso(NN, theta, 5, 0); |
||
| 141 | //double acceptance = Grid(NN, theta); |
||
| 142 | //double acceptance = -1.0; |
||
| 143 | hAcceptance->Fill(x, y, acceptance); |
||
| 144 | //printf("%.2lf | %.2lf | ", x,y); |
||
| 145 | //PrintGuideStat(NN); |
||
| 146 | } |
||
| 147 | } |
||
| 148 | |||
| 149 | |||
| 150 | |||
| 151 | TCanvas *cp = new TCanvas("Acceptance", "Acceptance", 0, 0, 640, 480); |
||
| 152 | TVirtualPad *pacc = cp->cd(0); |
||
| 153 | |||
| 154 | pacc->SetRightMargin(0.10); |
||
| 155 | pacc->SetLeftMargin(0.10); |
||
| 156 | pacc->SetTopMargin(0.10); |
||
| 157 | |||
| 158 | //TFile *file = new TFile("acceptance.root","RECREATE"); |
||
| 159 | //hAcceptance->Write(); |
||
| 160 | //file->Close(); |
||
| 161 | |||
| 162 | //hAcceptance->SetContour(100); |
||
| 163 | //gStyle->SetPalette(1,0); |
||
| 164 | hAcceptance->SetTitle(";d [mm];a [mm]"); |
||
| 165 | hAcceptance->GetXaxis()->SetRangeUser(minD,maxD); |
||
| 166 | hAcceptance->Draw("COLZ"); |
||
| 167 | |||
| 168 | return; |
||
| 169 | } |