Changeset 4678 for trunk/MagicSoft
- Timestamp:
- 08/18/04 10:12:10 (20 years ago)
- Location:
- trunk/MagicSoft/Mars
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/MagicSoft/Mars/Changelog
r4677 r4678 21 21 22 22 23 2004/08/18 : Wolfgang Wittek 24 25 * mastro/MTransCelLocCam.[h,cc] 26 - new class; allows to calculate for any point (X, Y) in the 27 camera the local (celestial) coordinates if the local 28 (celestial) coordinates are known for some fixed point (X0, Y0) 29 in the camera 30 - for given local (celestial) coordinates of the camera center, 31 the meber function PlotGrid draws the lines of constant theta 32 and phi (and of constant dec and hourangle) onto the camera 33 plane 34 35 * mastro/Makefile, mastro/AstroLinkDef.h 36 - MTransCelLocCam added 37 38 * macros/testMTrans.C 39 - macro to test the class MTransCelLocCam 23 2004/08/18: Thomas Bretz 24 25 * mbadpixels/MBadPixelsCam.[h,cc]: 26 - implemented function to calculate max cluster sizes 27 28 29 30 2004/08/18 : Wolfgang Wittek 31 32 * mastro/MTransCelLocCam.[h,cc] 33 - new class; allows to calculate for any point (X, Y) in the 34 camera the local (celestial) coordinates if the local 35 (celestial) coordinates are known for some fixed point (X0, Y0) 36 in the camera 37 - for given local (celestial) coordinates of the camera center, 38 the meber function PlotGrid draws the lines of constant theta 39 and phi (and of constant dec and hourangle) onto the camera 40 plane 41 42 * mastro/Makefile, mastro/AstroLinkDef.h 43 - MTransCelLocCam added 44 45 * macros/testMTrans.C 46 - macro to test the class MTransCelLocCam 40 47 41 48 -
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.