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 | } |