ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/auterman/SusyScan/PlotScript/TheLimits.cc
(Generate patch)

Comparing UserCode/auterman/SusyScan/PlotScript/TheLimits.cc (file contents):
Revision 1.3 by auterman, Sat Nov 27 12:03:26 2010 UTC vs.
Revision 1.10 by auterman, Wed Jun 22 15:03:36 2011 UTC

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines