Changeset 4678 for trunk/MagicSoft/Mars/mbadpixels
- Timestamp:
- 08/18/04 10:12:10 (20 years ago)
- Location:
- trunk/MagicSoft/Mars/mbadpixels
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/MagicSoft/Mars/mbadpixels/MBadPixelsCam.cc
r4658 r4678 42 42 #include "MBadPixelsPix.h" 43 43 44 #include "MGeomCam.h" 45 #include "MGeomPix.h" 46 44 47 ClassImp(MBadPixelsCam); 45 48 … … 163 166 { 164 167 fArray->ForEach(TObject, Clear)(); 168 } 169 170 // -------------------------------------------------------------------------- 171 // 172 // Calculate the number of pixels with the given type-flags. 173 // 174 // The second argument aidx is the area index (see MGeomCam, MGeomPix) 175 // The default (or any value less than 0) means: all 176 // 177 // Returns -1 if the geometry doesn't match. 178 // 179 Short_t MBadPixelsCam::GetNumUnsuitable(MBadPixelsPix::UnsuitableType_t type, const MGeomCam *geom, Int_t aidx) const 180 { 181 const UInt_t n = GetSize(); 182 183 if (aidx>=0 && geom->GetNumPixels()!=n) 184 { 185 *fLog << err << GetDescriptor() << "ERROR - Geometry (" << geom->ClassName() << ") size mismatch!" << endl; 186 return -1; 187 } 188 189 Short_t rc = 0; 190 for (UInt_t i=0; i<n; i++) 191 { 192 if (aidx>=0 && (*geom)[i].GetAidx()!=aidx) 193 continue; 194 195 if ((*this)[i].IsUnsuitable(type)) 196 rc++; 197 } 198 return rc; 199 } 200 201 // -------------------------------------------------------------------------- 202 // 203 // Calculate the number of pixels which are - under no circumstances - 204 // interpolatable, called isolated. This means that a pixel (its own status 205 // doesn't matter) has less than two reliable neighbor pixels. 206 // 207 // The second argument aidx is the area index (see MGeomCam, MGeomPix) 208 // The default (or any value less than 0) means: all 209 // 210 // Returns -1 if the geometry doesn't match. 211 // 212 Short_t MBadPixelsCam::GetNumIsolated(MBadPixelsPix::UnsuitableType_t type, const MGeomCam &geom, Int_t aidx) const 213 { 214 const Int_t n = geom.GetNumPixels(); 215 216 if (n!=GetSize()) 217 { 218 *fLog << err << GetDescriptor() << "ERROR - Geometry (" << geom.ClassName() << ") size mismatch!" << endl; 219 return -1; 220 } 221 222 Short_t rc = 0; 223 for (int i=0; i<n; i++) 224 { 225 const MGeomPix &pix = geom[i]; 226 if (aidx>=0 && pix.GetAidx()!=aidx) 227 continue; 228 229 const Int_t n2 = pix.GetNumNeighbors(); 230 231 Int_t cnt=0; 232 for (int j=0; j<n2; j++) 233 { 234 const Int_t id2 = pix.GetNeighbor(j); 235 if (!(*this)[id2].IsUnsuitable(type)) 236 cnt++; 237 } 238 239 if (cnt<2) 240 rc++; 241 } 242 return rc; 243 } 244 245 // -------------------------------------------------------------------------- 246 // 247 // This is a helper function which calculates the size of a single cluster 248 // by iterative calling. 249 // 250 // If a pixel matches the criterias the counter is increased by 1 and 251 // the function is called for all its neighbors. If 252 // 253 // The second argument aidx is the area index (see MGeomCam, MGeomPix) 254 // The default (or any value less than 0) means: all 255 // 256 // Returns -1 if the geometry doesn't match. 257 // 258 Short_t MBadPixelsCam::GetNumMaxCluster(MBadPixelsPix::UnsuitableType_t type, TObjArray &list, Int_t idx, Int_t aidx) const 259 { 260 const MGeomPix *pix = (MGeomPix*)list[idx]; 261 if (!pix) 262 return 0; 263 264 if (!(*this)[idx].IsUnsuitable(type)) 265 return 0; 266 267 if (aidx>=0 && pix->GetAidx()!=aidx) 268 return 1; 269 270 list.RemoveAt(idx); 271 272 Short_t cnt = 1; 273 const Int_t n = pix->GetNumNeighbors(); 274 for (int i=0; i<n; i++) 275 cnt += GetNumMaxCluster(type, list, pix->GetNeighbor(i), aidx); 276 277 return cnt; 278 } 279 280 // -------------------------------------------------------------------------- 281 // 282 // Returns the size of the biggest cluster with the given USuitableType 283 // type and the given area index. 284 // 285 // The second argument aidx is the area index (see MGeomCam, MGeomPix) 286 // The default (or any value less than 0) means: all 287 // 288 // Returns -1 if the geometry doesn't match. 289 // 290 Short_t MBadPixelsCam::GetNumMaxCluster(MBadPixelsPix::UnsuitableType_t type, const MGeomCam &geom, Int_t aidx) const 291 { 292 const Int_t n = geom.GetNumPixels(); 293 294 if (n!=GetSize()) 295 { 296 *fLog << err << GetDescriptor() << "ERROR - Geometry (" << geom.ClassName() << ") size mismatch!" << endl; 297 return -1; 298 } 299 300 TObjArray list(n); 301 for (int i=0; i<n; i++) 302 list.AddAt(&geom[i], i); 303 304 Short_t max = 0; 305 for (int i=0; i<n; i++) 306 max = TMath::Max(GetNumMaxCluster(type, list, i, aidx), max); 307 308 return max; 165 309 } 166 310 -
trunk/MagicSoft/Mars/mbadpixels/MBadPixelsCam.h
r3734 r4678 2 2 #define MARS_MBadPixelsCam 3 3 4 #ifndef MARS_M ParContainer5 #include "M ParContainer.h"4 #ifndef MARS_MBadPixelsPix 5 #include "MBadPixelsPix.h" 6 6 #endif 7 7 #ifndef MARS_MCamEvent … … 10 10 11 11 class TClonesArray; 12 class MBadPixelsPix;13 12 14 13 class MBadPixelsCam : public MParContainer, public MCamEvent … … 16 15 private: 17 16 TClonesArray *fArray; //-> 17 18 Short_t GetNumMaxCluster(MBadPixelsPix::UnsuitableType_t type, TObjArray &list, Int_t idx, Int_t aidx) const; 18 19 19 20 public: … … 34 35 void Merge(const MBadPixelsCam &cam); 35 36 37 Short_t GetNumUnsuitable(MBadPixelsPix::UnsuitableType_t type, const MGeomCam *geom, Int_t aidx=-1) const; 38 Short_t GetNumUnsuitable(MBadPixelsPix::UnsuitableType_t type) const { return GetNumUnsuitable(type, 0); } 39 Short_t GetNumIsolated(MBadPixelsPix::UnsuitableType_t type, const MGeomCam &geom, Int_t aidx=-1) const; 40 Short_t GetNumIsolated(const MGeomCam &geom, Int_t aidx=-1) const { return GetNumIsolated(MBadPixelsPix::kUnsuitableRun, geom, aidx); } 41 Short_t GetNumMaxCluster(MBadPixelsPix::UnsuitableType_t type, const MGeomCam &geom, Int_t aidx=-1) const; 42 Short_t GetNumMaxCluster(const MGeomCam &geom, Int_t aidx=-1) { return GetNumMaxCluster(MBadPixelsPix::kUnsuitableRun, geom, aidx); } 43 36 44 void AsciiRead(ifstream &fin, UInt_t run); 37 45 void AsciiRead(ifstream &fin) { AsciiRead(fin, 0); }
Note:
See TracChangeset
for help on using the changeset viewer.