00001 #include "Geometry/CaloTopology/interface/EcalPreshowerTopology.h"
00002 #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h"
00003 #include <stdexcept>
00004
00005 ESDetId EcalPreshowerTopology::incrementIy(const ESDetId& id) const {
00006 if (!(*theGeom_).getSubdetectorGeometry(DetId::Ecal,EcalPreshower)->present(id))
00007 {
00008 return ESDetId(0);
00009 }
00010
00011 ESDetId nextPoint;
00012
00013 if (id.plane() == 2)
00014 {
00015 if (id.strip() < 32 )
00016 {
00017
00018 if (ESDetId::validDetId(id.strip()+1,id.six(),id.siy(),id.plane(),id.zside()))
00019 nextPoint=ESDetId(id.strip()+1,id.six(),id.siy(),id.plane(),id.zside());
00020 else
00021 return ESDetId(0);
00022 }
00023 else
00024 {
00025
00026 if (ESDetId::validDetId(1,id.six(),id.siy()+1,id.plane(),id.zside()))
00027 nextPoint=ESDetId(1,id.six(),id.siy()+1,id.plane(),id.zside());
00028 else
00029 return ESDetId(0);
00030 }
00031 }
00032
00033 else if (id.plane() == 1)
00034 {
00035
00036 if (ESDetId::validDetId(id.strip(),id.six(),id.siy()+1,id.plane(),id.zside()))
00037 nextPoint=ESDetId(id.strip(),id.six(),id.siy()+1,id.plane(),id.zside());
00038 else
00039 return ESDetId(0);
00040 }
00041 else
00042 return ESDetId(0);
00043
00044 if ((*theGeom_).getSubdetectorGeometry(DetId::Ecal,EcalPreshower)->present(nextPoint))
00045 return nextPoint;
00046 else
00047 return ESDetId(0);
00048 }
00049
00050
00051 ESDetId EcalPreshowerTopology::decrementIy(const ESDetId& id) const {
00052 if (!(*theGeom_).getSubdetectorGeometry(DetId::Ecal,EcalPreshower)->present(id))
00053 {
00054 return ESDetId(0);
00055 }
00056 ESDetId nextPoint;
00057
00058 if (id.plane() == 2)
00059 {
00060 if (id.strip() >1 )
00061 {
00062
00063 if (ESDetId::validDetId(id.strip()-1,id.six(),id.siy(),id.plane(),id.zside()))
00064 nextPoint=ESDetId(id.strip()-1,id.six(),id.siy(),id.plane(),id.zside());
00065 else
00066 return ESDetId(0);
00067 }
00068 else
00069 {
00070
00071 if (ESDetId::validDetId(32,id.six(),id.siy()-1,id.plane(),id.zside()))
00072 nextPoint=ESDetId(32,id.six(),id.siy()-1,id.plane(),id.zside());
00073 else
00074 return ESDetId(0);
00075 }
00076 }
00077
00078 else if (id.plane() == 1)
00079 {
00080
00081 if (ESDetId::validDetId(id.strip(),id.six(),id.siy()-1,id.plane(),id.zside()))
00082 nextPoint=ESDetId(id.strip(),id.six(),id.siy()-1,id.plane(),id.zside());
00083 else
00084 return ESDetId(0);
00085 }
00086 else
00087 return ESDetId(0);
00088
00089 if ((*theGeom_).getSubdetectorGeometry(DetId::Ecal,EcalPreshower)->present(nextPoint))
00090 return nextPoint;
00091 else
00092 return ESDetId(0);
00093 }
00094
00095
00096 ESDetId EcalPreshowerTopology::incrementIx(const ESDetId& id) const {
00097
00098 if (!(*theGeom_).getSubdetectorGeometry(DetId::Ecal,EcalPreshower)->present(id))
00099 {
00100 return ESDetId(0);
00101 }
00102 ESDetId nextPoint;
00103
00104
00105 if (id.plane() == 2)
00106 {
00107
00108 if (ESDetId::validDetId(id.strip(),id.six()+1,id.siy(),id.plane(),id.zside()))
00109 nextPoint=ESDetId(id.strip(),id.six()+1,id.siy(),id.plane(),id.zside());
00110 else
00111 return ESDetId(0);
00112 }
00113
00114 else if (id.plane() == 1)
00115 {
00116 if (id.strip() < 32 )
00117 {
00118
00119 if (ESDetId::validDetId(id.strip()+1,id.six(),id.siy(),id.plane(),id.zside()))
00120 nextPoint=ESDetId(id.strip()+1,id.six(),id.siy(),id.plane(),id.zside());
00121 else
00122 return ESDetId(0);
00123 }
00124 else
00125 {
00126
00127 if (ESDetId::validDetId(1,id.six()+1,id.siy(),id.plane(),id.zside()))
00128 nextPoint=ESDetId(1,id.six()+1,id.siy(),id.plane(),id.zside());
00129 else
00130 return ESDetId(0);
00131 }
00132 }
00133 else
00134 return ESDetId(0);
00135
00136 if ((*theGeom_).getSubdetectorGeometry(DetId::Ecal,EcalPreshower)->present(nextPoint))
00137 return nextPoint;
00138 else
00139 return ESDetId(0);
00140 }
00141
00142
00143 ESDetId EcalPreshowerTopology::decrementIx(const ESDetId& id) const {
00144
00145 if (!(*theGeom_).getSubdetectorGeometry(DetId::Ecal,EcalPreshower)->present(id))
00146 {
00147 return ESDetId(0);
00148 }
00149 ESDetId nextPoint;
00150
00151 if (id.plane() == 2)
00152 {
00153
00154 if (ESDetId::validDetId(id.strip(),id.six()-1,id.siy(),id.plane(),id.zside()))
00155 nextPoint=ESDetId(id.strip(),id.six()-1,id.siy(),id.plane(),id.zside());
00156 else
00157 return ESDetId(0);
00158 }
00159
00160 else if (id.plane() == 1)
00161 {
00162 if (id.strip() > 1 )
00163 {
00164
00165 if (ESDetId::validDetId(id.strip()-1,id.six(),id.siy(),id.plane(),id.zside()))
00166 nextPoint=ESDetId(id.strip()-1,id.six(),id.siy(),id.plane(),id.zside());
00167 else
00168 return ESDetId(0);
00169 }
00170 else
00171 {
00172
00173 if (ESDetId::validDetId(32,id.six()-1,id.siy(),id.plane(),id.zside()))
00174 nextPoint=ESDetId(32,id.six()-1,id.siy(),id.plane(),id.zside());
00175 else
00176 return ESDetId(0);
00177 }
00178 }
00179 else
00180 return ESDetId(0);
00181
00182 if ((*theGeom_).getSubdetectorGeometry(DetId::Ecal,EcalPreshower)->present(nextPoint))
00183 return nextPoint;
00184 else
00185 return ESDetId(0);
00186 }
00187
00188
00189 ESDetId EcalPreshowerTopology::incrementIz(const ESDetId& id) const {
00190
00191 if (!(*theGeom_).getSubdetectorGeometry(DetId::Ecal,EcalPreshower)->present(id))
00192 {
00193 return ESDetId(0);
00194 }
00195 ESDetId nextPoint;
00196 if (ESDetId::validDetId(id.strip(),id.six(),id.siy(),id.plane()+1,id.zside()))
00197 nextPoint=ESDetId(id.strip(),id.six(),id.siy(),id.plane()+1,id.zside());
00198 else
00199 return ESDetId(0);
00200
00201 if ((*theGeom_).getSubdetectorGeometry(DetId::Ecal,EcalPreshower)->present(nextPoint))
00202 return nextPoint;
00203 else
00204 return ESDetId(0);
00205 }
00206
00207
00208
00209 ESDetId EcalPreshowerTopology::decrementIz(const ESDetId& id) const {
00210
00211 if (!(*theGeom_).getSubdetectorGeometry(DetId::Ecal,EcalPreshower)->present(id))
00212 {
00213 return ESDetId(0);
00214 }
00215 ESDetId nextPoint;
00216 if (ESDetId::validDetId(id.strip(),id.six(),id.siy(),id.plane()-1,id.zside()))
00217 nextPoint=ESDetId(id.strip(),id.six(),id.siy(),id.plane()-1,id.zside());
00218 else
00219 return ESDetId(0);
00220
00221 if ((*theGeom_).getSubdetectorGeometry(DetId::Ecal,EcalPreshower)->present(nextPoint))
00222 return nextPoint;
00223 else
00224 return ESDetId(0);
00225 }
00226
00227
00228
00229
00230
00231
00232