This file is indexed.

/usr/include/casacore/casa/Arrays/AxesSpecifier.h is in casacore-dev 2.2.0-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
//# AxesSpecifier.h: Specification of axes to keep or remove
//# Copyright (C) 2000
//# Associated Universities, Inc. Washington DC, USA.
//#
//# This library is free software; you can redistribute it and/or modify it
//# under the terms of the GNU Library General Public License as published by
//# the Free Software Foundation; either version 2 of the License, or (at your
//# option) any later version.
//#
//# This library is distributed in the hope that it will be useful, but WITHOUT
//# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
//# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
//# License for more details.
//#
//# You should have received a copy of the GNU Library General Public License
//# along with this library; if not, write to the Free Software Foundation,
//# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
//#
//# Correspondence concerning AIPS++ should be addressed as follows:
//#        Internet email: aips2-request@nrao.edu.
//#        Postal address: AIPS++ Project Office
//#                        National Radio Astronomy Observatory
//#                        520 Edgemont Road
//#                        Charlottesville, VA 22903-2475 USA
//#
//#
//# $Id$

#ifndef CASA_AXESSPECIFIER_H
#define CASA_AXESSPECIFIER_H


//# Includes
#include <casacore/casa/aips.h>
#include <casacore/casa/Arrays/IPosition.h>
#include <casacore/casa/Arrays/AxesMapping.h>

namespace casacore { //# NAMESPACE CASACORE - BEGIN

//# Forward Declarations


// <summary>
// Specification of axes to keep or remove
// </summary>

// <use visibility=export>

// <reviewed reviewer="" date="yyyy/mm/dd" tests="tAxesSpecifier.cc" demos="">
// </reviewed>

// <prerequisite>
//   <li> <linkto class="IPosition">IPosition</linkto>
// </prerequisite>

// <synopsis>
// AxesSpecifier makes it possible to specify which axes should
// be used in a shape. Degenerate axes (i.e. axes with length 0)
// can be thrown away which makes it possible to reduce the
// dimensionality of an array. All degenerate axes can be thrown
// away, but one can also specify which ones should be kept.
// <p>
// Another option of this class is to reorder the axes, thus to
// make the axes of a lattice appear in a different order.
// This can be useful when two images with diferent axes orders
// have to be combined.
// <p>
// When an AxesSpecifier has to be used for a lattice, the lattice's
// shape has to be applied to the AxesSpecifier. The result is
// a <linkto class=AxesMapping>AxesMapping</linkto> object.
// This object is (for example) used internally in the
// <linkto class=SubLattice>SubLattice</linkto> class to know how
// to map the axes form the original lattice to the sublattice.
// <note role=caution>
// Reordering axes is not supported (yet) by the other Casacore classes
// like Lattices and Images.
// </note>
// </synopsis>

// <example>
// This example tells that all degenerate axes have to be kept.
// The axes are reordered to 1,0,2. Thus the first and second axes are
// swapped.
// <srcblock>
// AxesSpecifier spec(True, IPosition(3,1,0,2));
// AxesMapping map = spec.apply (IPosition(3,4,1,5));
// AlwaysAssertExit (map.posToNew (IPosition(3,2,0,3)) == IPosition(3,0,2,3));
// AlwaysAssertExit (map.posToOld (IPosition(3,0,2,3)) == IPosition(3,2,0,3));
//
// The following specification would have the same effect, because the
// unspecified axes are kept in their natural order.
// AxesSpecifier spec(True, IPosition(1,1));
// </srcblock>
//
// The same example as above, but now degenerated axes are removed.
// Note that because the second axis is removed, the third axis now
// get the second axis, thus gets swapped with the first axis.
// <br>Also note the difference between the functions <src>posToOld</src>
// and <src>shapeToOld</src>.
// <srcblock>
// AxesSpecifier spec(False, IPosition(1,1));
// AxesMapping map = spec.apply (IPosition(3,4,1,5));
// AlwaysAssertExit (map.posToNew (IPosition(3,2,0,3)) == IPosition(2,3,2));
// AlwaysAssertExit (map.posToOld (IPosition(3,3,2)) == IPosition(3,2,0,3);
// AlwaysAssertExit (map.shapeToOld (IPosition(3,3,2)) == IPosition(3,2,1,3);
// </srcblock>
// </example>

//# <todo asof="yyyy/mm/dd">
//# </todo>

class AxesSpecifier
{
public:
  // The default constructor keeps all axes.
  AxesSpecifier();

  // Tell if no or all degenerate axes have to be removed.
  explicit AxesSpecifier (Bool keepDegenerate);

  // Tell if no or all degenerate axes have to be removed.
  // <br>The argument <src>axisPath</src> makes it possible to specify in
  // which order the KEPT axes have to be used. Unspecified axes are
  // appended to the end. It gives a means to reorder the axes of a lattice.
  // <br>E.g. for a 4-dim lattice axisPath [2,0] means axis order [2,0,1,3].
  explicit AxesSpecifier (Bool keepDegenerate, const IPosition& axisPath);

  // Tell which (degenerate) axes have to be kept.
  // Non-degenerate axes will always be kept.
  explicit AxesSpecifier (const IPosition& keepAxes);

  // The argument <src>keepAxes</src> tells which degenerate axes have
  // to be kept. Non-degenerate axes will always be kept.
  // <br>The argument <src>axisPath</src> makes it possible to specify in
  // which order the KEPT axes have to be used. Unspecified axes are
  // appended to the end. It gives a means to reorder the axes of a lattice.
  // <br>E.g. for a 4-dim lattice axisPath [2,0] means axis order [2,0,1,3].
  AxesSpecifier (const IPosition& keepAxes, const IPosition& axisPath);

  // Copy constructor (copy semantics).
  AxesSpecifier(const AxesSpecifier& other);
  
  ~AxesSpecifier();

  // Assignment (copy semantics).
  // This and that do not have to have the same length.
  AxesSpecifier& operator= (const AxesSpecifier& other);

  // Apply the specification to a shape.
  // It returns an <linkto class=AxesMapping>AxesMapping</linkto>
  // object which takes care of mapping old to new axes order.
  AxesMapping apply (const IPosition& shape) const;

  // Are we keeping all degenerate axes ?
  Bool keep() const {return itsKeep;};

private:
  IPosition itsAxes;
  IPosition itsPath;
  Bool      itsKeep;
};



} //# NAMESPACE CASACORE - END

#endif