Go to the documentation of this file.00001 #include "DetectorDescription/Core/interface/DDComparator.h"
00002
00003
00004
00005 #include<map>
00006 #include<iostream>
00007
00008 namespace {
00009
00010 struct Counter {
00011 int old;
00012 int diff;
00013 int t;
00014 int f;
00015 std::map<int,int> res;
00016 std::map<int,int> siz;
00017 Counter() :old(0),diff(0),t(0),f(0){}
00018 ~Counter() {
00019 for (std::map<int,int>::const_iterator p=res.begin();p!=res.end(); ++p)
00020 std::cout << (*p).first <<","<<(*p).second <<" ";
00021 if (!res.empty()) std::cout << std::endl;
00022 for (std::map<int,int>::const_iterator p=siz.begin();p!=siz.end(); ++p)
00023 std::cout << (*p).first <<","<<(*p).second <<" ";
00024 if (!siz.empty()) std::cout << std::endl;
00025 }
00026 void add(bool r, int , int ) {
00027 if(r) {
00028 ++t;
00029 return;
00030 }
00031 else ++f;
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 }
00042
00043 };
00044
00045 inline Counter & counter() {
00046 static Counter local;
00047 return local;
00048 }
00049
00050 }
00051
00052
00053
00054
00055
00056 bool DDCompareEqual::operator() (const DDGeoHistory &, const DDPartSelection &)
00057 {
00058 return (*this)();
00059 }
00060
00061 bool DDCompareEqual::operator() ()
00062 {
00063
00064
00065 bool result(absResult_);
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078 while(result && sIndex_ < sMax_) {
00079 sLp_ = partsel_[sIndex_].lp_;
00080 sCopyno_ = partsel_[sIndex_].copyno_;
00081 ddselection_type stype = partsel_[sIndex_].selectionType_;
00082 switch (stype) {
00083
00084 case ddanylogp:
00085 result=nextAnylogp();
00086 break;
00087
00088 case ddanyposp:
00089 result=nextAnyposp();
00090 break;
00091
00092 case ddchildlogp:
00093 result=nextChildlogp();
00094 break;
00095
00096 case ddchildposp:
00097 result=nextChildposp();
00098 break;
00099
00100 case ddanychild:
00101 ++sIndex_;
00102 ++hIndex_;
00103 result=true;
00104 break;
00105
00106
00107 case ddanynode:
00108 result=false;
00109 break;
00110
00111 default:
00112 result=false;
00113
00114 }
00115 ++sIndex_;
00116 }
00117 counter().add(result,sIndex_, sMax_);
00118 return result;
00119 }
00120
00121
00122 bool DDCompareEqual::nextAnylogp()
00123 {
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136 register size_t hi = hIndex_;
00137 while (hi < hMax_) {
00138 if (sLp_==hist_[hi].logicalPart()) {
00139
00140
00141 hIndex_ = hi+1;
00142 return true;
00143 }
00144 ++hi;
00145 }
00146 hIndex_ = hi;
00147 return false;
00148 }
00149
00150
00151 bool DDCompareEqual::nextAnyposp()
00152 {
00153 bool result(false);
00154 while (hIndex_ < hMax_) {
00155 if (sLp_ == hist_[hIndex_].logicalPart() &&
00156 sCopyno_ == hist_[hIndex_].copyno() )
00157 { result=true;
00158 ++hIndex_;
00159 break;
00160 }
00161 ++hIndex_;
00162 }
00163 return result;
00164 }
00165
00166
00167 bool DDCompareEqual::nextChildlogp()
00168 {
00169 bool result(false);
00170 if (hIndex_ < hMax_) {
00171 if (sLp_ == hist_[hIndex_].logicalPart()) {
00172 ++hIndex_;
00173 result=true;
00174 }
00175 }
00176 return result;
00177 }
00178
00179
00180 bool DDCompareEqual::nextChildposp()
00181 {
00182 bool result(false);
00183 if (hIndex_ < hMax_) {
00184 if (sLp_ == hist_[hIndex_].logicalPart() &&
00185 sCopyno_ == hist_[hIndex_].copyno() ) {
00186 ++hIndex_;
00187 result=true;
00188 }
00189 }
00190 return result;
00191 }