20 |
|
for (auto i=benCscResult.begin(); i!=benCscResult.end();i++) fract *= norm(BENCSC,i->second); |
21 |
|
for (auto i=benDtResult.begin(); i!=benDtResult.end();i++) fract *= norm(BENDT, i->second); |
22 |
|
unsigned int nTot = nMatchedPosRpc+nMatchedPosCsc+nMatchedPosDt+nMatchedBenCsc+nMatchedBenDt; |
23 |
< |
theValue = ( nTot > 2) ? pow(fract, 1./((double) nTot)) : 0.; |
23 |
> |
theValue = ( nTot > 4) ? pow(fract, 1./((double) nTot)) : 0.; |
24 |
|
if (posRpcResult.size() != nMatchedPosRpc) theValue = 0.; |
25 |
|
if (posCscResult.size() != nMatchedPosCsc) theValue = 0.; |
26 |
|
if (posDtResult.size() != nMatchedPosDt) theValue = 0.; |
44 |
|
} |
45 |
|
|
46 |
|
bool GoldenPattern::Result::operator < (const GoldenPattern::Result &o) const { |
47 |
< |
return (value() < o.value() ); |
47 |
> |
if ( *this && o) { |
48 |
> |
if (nMatchedTot() < o.nMatchedTot()) return true; |
49 |
> |
else if (nMatchedTot() == o.nMatchedTot() && value() < o.value()) return true; |
50 |
> |
else return false; |
51 |
> |
} |
52 |
> |
else if (o) {return true; } |
53 |
> |
else if (*this) { return false; } |
54 |
> |
else return false; |
55 |
> |
|
56 |
> |
// return (value() < o.value() ); |
57 |
> |
// return false; |
58 |
|
} |
59 |
|
|
60 |
|
GoldenPattern::Result::operator bool() const { |
61 |
< |
return (value() > 0.1); |
61 |
> |
return (value() > 0.1); // && hasStation1 && hasStation2); |
62 |
|
} |
63 |
|
|
64 |
|
double GoldenPattern::Result::value() const { |
139 |
|
RPCDigiSpec digi(rawId, is->second); |
140 |
|
DetFreq::const_iterator idm = posRpc.find(rawId); |
141 |
|
if (idm != posRpc.end() ) { |
142 |
< |
double f = whereInDistribution(digi.halfStrip(), idm->second); |
143 |
< |
result.posRpcResult.push_back( std::make_pair(rawId, f) ); |
142 |
> |
double f = whereInDistribution(digi.halfStrip(), idm->second); |
143 |
> |
result.posRpcResult.push_back( std::make_pair(rawId, f) ); |
144 |
> |
RPCDetId rpc(rawId); |
145 |
> |
if(rpc.station()==1) result.hasStation1 = true; |
146 |
> |
if(rpc.station()==2) result.hasStation2 = true; |
147 |
|
} |
148 |
|
} else if (detId.subdetId() == MuonSubdetId::DT) { |
149 |
|
DTphDigiSpec digi(rawId, is->second); |
151 |
|
if (idm != posDt.end() ) { |
152 |
|
double f = whereInDistribution(digi.phi(), idm->second); |
153 |
|
result.posDtResult.push_back( std::make_pair(rawId, f) ); |
154 |
+ |
DTChamberId dt(rawId); |
155 |
+ |
if(dt.station()==1) result.hasStation1 = true; |
156 |
+ |
if(dt.station()==2) result.hasStation2 = true; |
157 |
|
} |
158 |
|
idm = bendingDt.find(rawId); |
159 |
|
if (idm != bendingDt.end() ) { |
166 |
|
if (idm != posCsc.end() ) { |
167 |
|
double f = whereInDistribution(digi.strip(), idm->second); |
168 |
|
result.posCscResult.push_back( std::make_pair(rawId, f) ); |
169 |
+ |
CSCDetId csc(rawId); |
170 |
+ |
if (csc.station()==1) result.hasStation1 = true; |
171 |
+ |
if (csc.station()==2) result.hasStation1 = true; |
172 |
|
} |
173 |
|
idm = bendingCsc.find(rawId); |
174 |
|
if (idm != bendingCsc.end() ) { |