ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/auterman/SusyScan/PlotScript/TheLimits.cc
Revision: 1.9
Committed: Fri May 20 07:39:34 2011 UTC (13 years, 11 months ago) by auterman
Content type: text/plain
Branch: MAIN
Changes since 1.8: +29 -0 lines
Log Message:
post CWR comments

File Contents

# Content
1 #include "TheLimits.h"
2 #include "SusyScan.h"
3 #include "GeneratorMasses.h"
4
5 #include <fstream>
6 #include <iostream>
7 #include <cmath>
8
9 void TheLimits::Fill(int argc, char** argv)
10 {
11 for (int i = 1; i<argc; ++i)
12 {
13 add( new SusyScan(argv[i]) );
14 }
15 }
16
17 void TheLimits::Fill(const std::string filelist)
18 {
19 std::ifstream masses_file;
20 masses_file.open(filelist.c_str());
21 std::string file;
22 while (1) {
23 GeneratorMasses * p = new GeneratorMasses;
24 masses_file >> file;
25 if (!masses_file.good()) break;
26 add( new SusyScan(file));
27 }
28 //std::cout << filelist << ": "<< _scan.size() <<std::endl;
29 masses_file.close();
30 }
31
32 void TheLimits::match()
33 {
34 for (std::vector<SusyScan*>::iterator it=_scan.begin();it!=_scan.end();++it){
35 bool match = false;
36 for (std::vector<GeneratorMasses*>::const_iterator gt=_masses.begin();gt!=_masses.end();++gt){
37 if ((*it)->Mzero==(*gt)->Mzero &&
38 (*it)->Mhalf==(*gt)->Mhalf &&
39 (*it)->Azero==(*gt)->Azero &&
40 (*it)->TanBeta==(*gt)->TanBeta &&
41 (*it)->Mu==(*gt)->Mu ) {
42 (*it)->M1 = (*gt)->M1;
43 (*it)->M2 = (*gt)->M2;
44 (*it)->M3 = (*gt)->M3;
45 (*it)->MGL = (*gt)->MGL;
46 (*it)->MUL = (*gt)->MUL;
47 (*it)->MB1 = (*gt)->MB1;
48 (*it)->MSN = (*gt)->MSN;
49 (*it)->MNTAU = (*gt)->MNTAU;
50 (*it)->MZ1 = (*gt)->MZ1;
51 (*it)->MW1 = (*gt)->MW1;
52 (*it)->MHL = (*gt)->MHL;
53 (*it)->MUR = (*gt)->MUR;
54 (*it)->MB2 = (*gt)->MB2;
55 (*it)->MEL = (*gt)->MEL;
56 (*it)->MTAU1 = (*gt)->MTAU1;
57 (*it)->MZ2 = (*gt)->MZ2;
58 (*it)->MW2 = (*gt)->MW2;
59 (*it)->MHH = (*gt)->MHH;
60 (*it)->MDL = (*gt)->MDL;
61 (*it)->MT1 = (*gt)->MT1;
62 (*it)->MER = (*gt)->MER;
63 (*it)->MTAU2 = (*gt)->MTAU2;
64 (*it)->MZ3 = (*gt)->MZ3;
65 (*it)->MHA = (*gt)->MHA;
66 (*it)->MDR = (*gt)->MDR;
67 (*it)->MT2 = (*gt)->MT2;
68 (*it)->MZ4 = (*gt)->MZ4;
69 (*it)->MHp = (*gt)->MHp;
70 match = true;
71 }
72 }
73 //if (!match) std::cout << "No match for M0="<<(*it)->Mzero
74 // << ", M12="<<(*it)->Mhalf<<std::endl;
75 }
76 }
77
78 void TheLimits::FillGeneratorMasses(std::string file)
79 {
80 std::ifstream masses_file;
81 masses_file.open(file.c_str());
82 while (1) {
83 GeneratorMasses * p = new GeneratorMasses;
84 masses_file >> p->Mzero
85 >> p->Mhalf
86 >> p->TanBeta
87 >> p->Mu
88 >> p->Azero
89 >> p->Mtop
90 >> p->muQ
91 >> p->Q
92 >> p->M1
93 >> p->M2
94 >> p->M3
95 >> p->MGL
96 >> p->MUL
97 >> p->MB1
98 >> p->MSN
99 >> p->MNTAU
100 >> p->MZ1
101 >> p->MW1
102 >> p->MHL
103 >> p->MUR
104 >> p->MB2
105 >> p->MEL
106 >> p->MTAU1
107 >> p->MZ2
108 >> p->MW2
109 >> p->MHH
110 >> p->MDL
111 >> p->MT1
112 >> p->MER
113 >> p->MTAU2
114 >> p->MZ3
115 >> p->MHA
116 >> p->MDR
117 >> p->MT2
118 >> p->MZ4
119 >> p->MHp;
120
121 if (!masses_file.good()) break;
122 //std::cout << p->Mzero<<", "<<p->Mhalf<<", "<<p->TanBeta<<std::endl;
123 if (fabs(p->Mu)!=1.) {
124 std::cerr << "check lines near m0=" << p->Mzero << ", m1/2=" << p->Mhalf << std::endl;
125 break;
126 }
127 _masses.push_back( p );
128 }
129 }
130
131
132 void TheLimits::OverwriteLimits(std::string flag)
133 {
134 for (std::vector<SusyScan*>::iterator it=_scan.begin();it!=_scan.end();++it){
135 if (flag=="ABCD_MHT") {
136 (*it)->ExpNsigLimit = 17.85;
137 (*it)->PLExpNsigLimit = 12.558;
138 (*it)->FCExpNsigLimit = 15.75;
139 (*it)->MCMCExpNsigLimit = 15.8085;
140 (*it)->ObsNsigLimit = 10.0637;
141 (*it)->PLObsNsigLimit = 4.22124;
142 (*it)->FCObsNsigLimit = 0.75;
143 (*it)->MCMCObsNsigLimit = 8.75403;
144 }
145 else if (flag=="ABCD_HT") {
146 (*it)->ExpNsigLimit = 24.0438;
147 (*it)->PLExpNsigLimit = 17.8537;
148 (*it)->FCExpNsigLimit = 22.05;
149 (*it)->MCMCExpNsigLimit = 20.781;
150 (*it)->ObsNsigLimit = 18.24;
151 (*it)->PLObsNsigLimit = 9.70375;
152 (*it)->FCObsNsigLimit = 11.85;
153 (*it)->MCMCObsNsigLimit = 14.34;
154 }
155
156
157 (*it)->ExpXsecLimit = (*it)->ExpNsigLimit * (*it)->Xsection / (*it)->signal;
158 (*it)->PLExpXsecLimit = (*it)->PLExpNsigLimit * (*it)->Xsection / (*it)->signal;
159 (*it)->FCExpXsecLimit = (*it)->FCExpNsigLimit * (*it)->Xsection / (*it)->signal;
160 (*it)->MCMCExpXsecLimit= (*it)->MCMCExpNsigLimit * (*it)->Xsection / (*it)->signal;
161 (*it)->ObsXsecLimit = (*it)->ObsNsigLimit * (*it)->Xsection / (*it)->signal;
162 (*it)->PLObsXsecLimit = (*it)->PLObsNsigLimit * (*it)->Xsection / (*it)->signal;
163 (*it)->FCObsXsecLimit = (*it)->FCObsNsigLimit * (*it)->Xsection / (*it)->signal;
164 (*it)->MCMCObsXsecLimit= (*it)->MCMCObsNsigLimit * (*it)->Xsection / (*it)->signal;
165
166
167 }
168
169
170 }
171
172 void TheLimits::ExpandGrid(int s)
173 {
174 std::vector<SusyScan*> new_grid;
175 for (std::vector<SusyScan*>::iterator it=_scan.begin(); it!=_scan.end(); ++it){
176 double x=9999, y=9999;
177 std::vector<SusyScan*>::iterator next_x=_scan.end(), next_y=_scan.end();
178 for (std::vector<SusyScan*>::iterator nx=_scan.begin(); nx!=_scan.end(); ++nx)
179 if ((*it)->Mzero<(*nx)->Mzero && fabs((*it)->Mzero-(*nx)->Mzero)<x) {
180 x=fabs((*it)->Mzero-(*nx)->Mzero);
181 next_x=nx;
182 }
183 for (std::vector<SusyScan*>::iterator ny=_scan.begin(); ny!=_scan.end(); ++ny)
184 if ( (*it)->Mzero==(*ny)->Mzero && (*it)->Mhalf<(*ny)->Mhalf && fabs((*it)->Mhalf-(*ny)->Mhalf)<y) {
185 y=fabs((*it)->Mhalf-(*ny)->Mhalf);
186 next_y=ny;
187 }
188 if (next_y!=_scan.end()) {
189 SusyScan* n = new SusyScan((**it + **next_y) * 0.5);
190 new_grid.push_back( n );
191 //std::cout
192 //<< "l:"<<(*it)->Mzero<<","<<(*it)->Mhalf
193 //<< " <>"<< n->Mzero<<","<<n->Mhalf
194 //<< " <> r:"<<(*next_y)->Mzero<<","<<(*next_y)->Mhalf
195 //<<std::endl;
196 }
197
198 }
199 _scan.insert(_scan.end(), new_grid.begin(), new_grid.end());
200 }