// // File: FdNumbering.hh // // Purpose: Definition of FD numbering constants // // $Id: FdNumbering.hh 11973 2011-01-28 14:33:23Z mathes $ // /** @file FdNumbering.hh * Definition of FD numbering constants. * @author H.-J. Mathes, FzK */ #ifndef _FdUtil_FdNumbering_hh_ #define _FdUtil_FdNumbering_hh_ #include #include #ifndef NO_VERSION # include #endif // _NO_VERSION // WIN32 on Linux (= EntireX) mustn't see that !!! #ifndef WIN32 # include #endif // WIN32 namespace FdUtil { /** A class which holds all numbering conventions and definitions. * * Note: This definition tries to follow the FD numbering conventions * as close a possible. * @see R.Shellard: http://auger.in2p3.fr/DPA/malap00/conventions.tar * * See also: J. Blowers et al., Conventions for the PAO * * at https://edms.cern.ch/cedar/plsql/doc.info?cookie=7032781&document_id=317390&version=1 */ class Fd { public: /** Just to make some compilers happy. */ virtual ~Fd() { } /** Basic constants defined by this class. */ enum { /** Number of pixel columns per camera. */ kMI_NCOLS = 20, /** Number of pixel rows per camera. */ kMI_NROWS = 22, /** Number of time slots in SLT V3, aka. 1 us */ kMI_NSLT_BINS_v3 = 100, /** Number of time slots in SLT V4, aka. 100 ns */ kMI_NSLT_BINS_v4 = 1000, /** Number of time slots of the SLT memory. */ kMI_NSLT_BINS = kMI_NSLT_BINS_v3, /** Number of time slots in multiplicity memory (V3 = V4). */ kMI_NMULT_BINS = 1000, /** Number of FADC time bins used by FADCs in hardware V3. */ kMI_NFADC_BINS_v3 = 1000, /** Number of FADC time bins, low resolution (100 ns). */ kMI_NFADC_BINS_LOW = kMI_NFADC_BINS_v3, /** Number of FADC time bins, medium resolution (50 ns). */ kMI_NFADC_BINS_MED = 2000, /** Number of FADC time bins, high resolution (25 ns). */ kMI_NFADC_BINS_HIGH = 4000, /** The default number of bins used for memory allocation. */ kMI_NFADC_BINS_DEFAULT = kMI_NFADC_BINS_MED, /** Number of mirrors (cameras) per eye. */ kEYE_NMIRRORS = 6, /** Number of mirrors (cameras) of 5th Eye. */ kHEAT_NMIRRORS = 3, /** Number of eyes per observatory. */ kFD_NEYES = 5, /** Total number of mirrors in southern observatory. */ kFD_NMIRRORS = 27, // HEAT //kFD_NMIRRORS = kFD_NEYES * kEYE_NMIRRORS, /** Number of pixels per camera. */ kMI_NPIXELS = (kMI_NCOLS * kMI_NROWS), // --- dealing with the virtual channel(s) --- /** Number of virtual channels per module. */ kMI_NVCHANNELS = 2, /** Extended number of rows per camera including the virtual rows. */ kMI_NEXTROWS = (kMI_NROWS + kMI_NVCHANNELS), /** Macro to calculate row number for virtual rows. */ kMI_FIRST_VCHANNEL = 1, /** Last index for virtual channels. */ kMI_LAST_VCHANNEL = 2, /** Row index of first virtual channel. */ kMI_VC1_ROW = (kMI_NROWS + 1), /** Row index of second (=last) virtual channel. */ kMI_VC2_ROW = (kMI_NROWS + 2), /** Extended number of pixels per camera including the virtual pixels. */ kMI_NEXTPIXELS = (kMI_NCOLS * kMI_NEXTROWS), /** Index of last virtual row. */ kMI_LAST_VCROW = (kMI_NROWS + kMI_LAST_VCHANNEL), /** Maximum number of pixels per eye including virtual pixels. */ kEYE_NEXTPIXELS = kMI_NCOLS * kMI_NEXTROWS * kEYE_NMIRRORS }; // --- how do we want to count --- /** Constants for the overall counting scheme. */ enum { /** Start index for FD eyes (1= Los Leones). */ kFD_FIRST_EYE = 1, /** Last index for FD eyes. */ kFD_LAST_EYE = kFD_NEYES, /** Start index for mirrors at eye level. */ kEYE_FIRST_MIRROR = 1, /** Last index for mirrors at eye level. */ kEYE_LAST_MIRROR = 6, /** Start index for mirrors at observatory level. */ kFD_FIRST_MIRROR = 1, /** Last index for mirrors at observatory level. */ kFD_LAST_MIRROR = kFD_NMIRRORS, /** Start index for pixels at observatory level. */ kFD_FIRST_PIXEL = 1, /** Start index for pixels at eye level. */ kEYE_FIRST_PIXEL = 1, /** First index for pixels at camera level. */ kMI_FIRST_PIXEL = 1, /** Last index for pixels at camera level excluding the virtual pixels. */ kMI_LAST_PIXEL = kMI_NPIXELS, /** Last index for pixels at camera level including the virtual pixels. */ kMI_LAST_EXTPIXEL = kMI_NEXTPIXELS, /* --- physics convention: col = module, row = channel --- */ /** Start index for pixel columns at camera level. */ kMI_FIRST_COL = 1, /** Last index for pixel columns at camera level. */ kMI_LAST_COL = kMI_NCOLS, /** Start index for pixel rows at camera level. */ kMI_FIRST_ROW = 1, /** Last index for pixel rows at camera level. */ kMI_LAST_ROW = kMI_NROWS, /* --- electronic convention: module, channel = counting from 0 --- */ /** Start index for FLT modules at camera level. */ kMI_FIRST_MODULE = 0, /** Last index for FLT modules at camera level. */ kMI_LAST_MODULE = kMI_NCOLS - 1, /** Start index for FLT channels at camera level. */ kMI_FIRST_CHANNEL = 0, /** Number of virtual channels per camera. */ kMI_NVC_CHANNELS = kMI_NVCHANNELS * kMI_NCOLS, /** Number of electronic channels at camera level. */ kMI_N_CHANNELS = kMI_NROWS + kMI_NVC_CHANNELS, /** Last index for FLT channels at camera level. */ kMI_LAST_CHANNEL = kMI_N_CHANNELS - 1 }; // --- data structure definitions ... /** The pixel number union is composed of eye, telescope and pixel index. * * The union PixelNumber holds the numbering information for pixels at * the camera level according to the formula: * * Npi,k(x,y) = 22 * (Nx - 1) + Ny * * with Nx = column index and Ny = row index * * These structure has to be accessed by using: * @li GetEyeNo(), SetEyeNo() * @li GetMirrorNo(), SetMirrorNo() * @li GetPixelNo(), SetPixelNo() * @li GetFdPixelNo(), SetFdPixelNo() * @li GetColumnNo(), GetRowNo(), SetPixelNoFromColumnRow() * @li GetModuleNo(), GetChannelNo(), SetPixelNoFromModuleChannel() * @li GetPixelTrigger(), SetPixelTrigger() */ typedef union _PixelNumber { /** The combined pixel number. */ int fPixelNumber; #ifndef __CINT__ /** bit field */ struct { /** Pixel number. */ unsigned fPixelNo : 9; /** Mirror number. */ unsigned fMirrorNo : 3; /** Eye number. */ unsigned fEyeNo : 3; /** Information if pixel has triggered or not (not used). */ unsigned fTrigger : 1; } fBits; #endif // __CINT__ } PixelNumberRec, *PixelNumber; /** Composite pixel number on observatory level. * * The union FdPixelNumber holds the numbering information at the * observatory level. * * This structure has to be accessed using: * @li GetPixelNo(), SetPixelNo() : * @li GetEyeNo(), SetEyeNo() * @li GetMirrorNo(), SetMirrorNo() * @li GetPixelNumber() * @li GetColumnNo(), GetRowNo() */ typedef union _FdPixelNumber { #if 1 /** Constructor: init to 0. */ _FdPixelNumber() { fPixelNumber = 0; } /** Copy constructor. */ _FdPixelNumber(const _FdPixelNumber& rhs) { fPixelNumber = rhs.fPixelNumber; } /** Constructor from PixelNumber. */ _FdPixelNumber(_PixelNumber p) { fPixelNumber = FdUtil::Fd::GetFdPixelNumber(&p)->fPixelNumber; } /** Constructor from PixelNumber*. */ _FdPixelNumber(_PixelNumber *p) { fPixelNumber = FdUtil::Fd::GetFdPixelNumber(p)->fPixelNumber; } #endif /** The combined pixel number at observatory level. */ short fPixelNumber; #ifndef __CINT__ /** bit field */ struct { /** Pixel number. */ unsigned fPixelNo : 14; /** Spare bit 0. */ unsigned fBit0 : 1; /** Spare bit 1. */ unsigned fBit1 : 1; } fBits; #endif // __CINT__ } FdPixelNumberRec, *FdPixelNumber; /** Composite mirror number. * * The union MirrorNumber holds the numbering information for the mirrors * which consists of the eye number and the local mirror number. * * This data structure has to be accessed using: * @li GetEyeNo(), SetEyeNo() * @li GetMirrorNo(), SetMirrorNo() * * Note 1: There is a bug in the data which have been recorded with the * old version of this method, Eye 1 is internally coded as 1 * and not as 0. * * Note 1: There is another bug in the data which have been recorded with * the old version of this method, Mirror 1 is internally coded * as 1 and not as 0. */ typedef union _MirrorNumber { /** The combined mirror number. */ short fMirrorNumber; #ifndef __CINT__ /** bit field */ struct { /** Mirror number (1..27). */ unsigned fMirrorNo : 5; /** Eye number (1..4). */ unsigned fEyeNo : 3; } fBits; #endif // __CINT__ } MirrorNumberRec, *MirrorNumber; // --- getters for PixelNumberRec type ... /** Get individual eye number from the combined pixel number. */ static unsigned int GetEyeNo(PixelNumber pi) { return pi->fBits.fEyeNo; } /** Calculate the official mirror number from a given eye and mirror * number using the formula:
* Nmi(k) = 6 * (Neye - 1) + k. */ static unsigned int GetFdMirrorNo(unsigned int eye_no,unsigned int mi_no) { return (kEYE_NMIRRORS * (eye_no - kFD_FIRST_EYE) + (mi_no - kEYE_FIRST_MIRROR + 1)); } /** Get the official (absolute) mirror number (observatory level) from the * combined pixel number. */ static unsigned int GetFdMirrorNo(PixelNumber pi) { return GetFdMirrorNo( GetEyeNo( pi ), GetMirrorNo( pi ) ); } /** Get the mirror number (Eye frame) from the absolute telescope number. */ static unsigned int GetMirrorNoFromFdMirrorNo(unsigned int tel_no) { return (tel_no - kFD_FIRST_MIRROR) % kEYE_NMIRRORS + kEYE_FIRST_MIRROR; } /** Get the eye number from the absolute telescope number. */ static unsigned int GetEyeNoFromFdMirrorNo(unsigned int tel_no) { return (tel_no - kFD_FIRST_MIRROR) / kEYE_NMIRRORS + kFD_FIRST_EYE; } /** Get individual mirror number from the combined pixel number. */ static unsigned int GetMirrorNo(PixelNumber pi) { return pi->fBits.fMirrorNo; } /** Get individual (at Mirror level) pixel number from the combined pixel * number. */ static unsigned int GetPixelNo(PixelNumber pi) { return pi->fBits.fPixelNo; } /** Get column number from the combined pixel number. */ static unsigned int GetColumnNo(PixelNumber); /** Get row number from the combined pixel number. */ static unsigned int GetRowNo(PixelNumber); /** Get module number from the combined pixel number. */ static unsigned int GetModuleNo(PixelNumber pi) { return (GetColumnNo(pi) - kMI_FIRST_COL + kMI_FIRST_MODULE); } /** Get channel number from combined pixel number. */ static unsigned int GetChannelNo(PixelNumber pi) { return (GetRowNo(pi) - kMI_FIRST_ROW + kMI_FIRST_CHANNEL); } /** Get the combined pixel number from the observatory pixel number. */ static PixelNumber GetPixelNumber(FdPixelNumber); /** Get the pixel number on Eye level. */ static unsigned int GetEyePixelNo(PixelNumber); /** Get the pixel number on observatory level. */ static unsigned int GetFdPixelNo(PixelNumber); // --- getters for MirrorNumberRec type ... /** Get the eye number from the composite mirror number. */ static unsigned int GetEyeNo(MirrorNumber mi) { return mi->fBits.fEyeNo; } /** Get the observatory mirror number (1..27) from the composite * mirror number. */ static unsigned int GetFdMirrorNo(MirrorNumber mi) { return mi->fBits.fMirrorNo; } /** Get the Eye mirror number (1..6) from the composite mirror number. */ static unsigned int GetMirrorNo(MirrorNumber mi) { return ( (mi->fBits.fMirrorNo - Fd::kFD_FIRST_MIRROR) % Fd::kEYE_NMIRRORS) + Fd::kEYE_FIRST_MIRROR; } /** Get the number of telescopes for the specified Eye. */ static unsigned int GetEyeNMirrors(unsigned int); /** Get the last mirror number for the specified Eye. */ static unsigned int GetEyeLastMirrorNo(unsigned int); /** Get the first FD mirror number for the specified Eye. */ static unsigned int GetFdFirstMirrorNo(unsigned int); /** Get the last FD mirror number for the specified Eye. */ static unsigned int GetFdLastMirrorNo(unsigned int); // --- getters for FdPixelNumberRec type ... /** Get individual pixel number (at mirror level) from the pixel number * at observatory level. */ static unsigned int GetMirrorPixelNo(FdPixelNumber); /** Calculate the FdPixelNumber which is valid throughout the whole * observatory from the mirror internal PixelNumber. The PixelNumber scheme * leaves also address space for the virtual pixels, the global numbering * scheme not. */ static FdPixelNumber GetFdPixelNumber(PixelNumber); /** Get the eye number from the pixel number at observatory level. */ static unsigned int GetEyeNo(FdPixelNumber pi) { return (( (pi->fBits.fPixelNo - kFD_FIRST_PIXEL) / kMI_NEXTPIXELS) / kEYE_NMIRRORS + kFD_FIRST_EYE); } /** Get FD mirror number (1..27) from pixel number at observatory level. */ static unsigned int GetMirrorNo(FdPixelNumber); /** Get the observatory pixel number (1..11520) from the FdPixelNumber. */ static unsigned int GetPixelNo(FdPixelNumber pi) { return pi->fBits.fPixelNo; } /** Get the pixel number on Eye level (1..2880) from the FdPixelNumber. */ static unsigned int GetEyePixelNo(FdPixelNumber); /** Get the Eye level Mirror number (1..6) from the FdPixelNumber. */ static unsigned int GetEyeMirrorNo(FdPixelNumber); /** Get column number from the FdPixelNumber. */ static unsigned int GetColumnNo(FdPixelNumber pixel) { return GetColumnNo( GetPixelNumber(pixel) ); } /** Get row number from the FdPixelNumber. */ static unsigned int GetRowNo(FdPixelNumber pixel) { return GetRowNo( GetPixelNumber(pixel) ); } // --- setters for PixelNumberRec type ... /** Set the eye and the mirror number in the composite pixel number. */ static void Set(PixelNumber); /** Set the eye number in the composite pixel number. */ static void SetEyeNo(PixelNumber pi,unsigned int no) { pi->fBits.fEyeNo = no & 7; } /** Set the mirror number in the composite pixel number. */ static void SetMirrorNo(PixelNumber pi,unsigned int no) { pi->fBits.fMirrorNo = no & 0x1f; } /** Set the pixel number the composite pixel number. */ static void SetPixelNo(PixelNumber pi,unsigned int no) { pi->fBits.fPixelNo = no & 0x1ff; } /** Set the pixel number in the composite pixel number from the module and * the channel number. */ static void SetPixelNoFromModuleChannel(PixelNumber pi, unsigned int mod, unsigned int ch) { SetPixelNoFromColumnRow( pi, mod - kMI_FIRST_MODULE + kMI_FIRST_COL, ch - kMI_FIRST_CHANNEL + kMI_FIRST_ROW ); } /** Sets the pixel number according to the given column and row number. * 'row' could be above the maximum allowed value, in this case it is assumed, * that the 'row number' of a virtual channel is entered ... * * Changes: * @li 2001/02/28 (thjm) New mapping of virtual channels. This affects * also the macros/inlines GetPixelColumnNo() and GetPixelRowNo(). * @li odd channels : 441 + (col - 1) * 2 => 441, 443, ... 479 * @li even channels: 442 + (col - 1) * 2 => 442, 444, ... 480 */ static void SetPixelNoFromColumnRow(PixelNumber,unsigned int,unsigned int); /** Set the combined pixel number from the observatory level pixel number. */ static void SetFdPixelNo(PixelNumber,unsigned int); // --- setters for MirrorNumberRec type ... /** Set the eye and mirror number of the composite mirror number from * the automatically determined values. */ static void Set(MirrorNumber); /** Set the eye number of the composite mirror number, the Eye number must * be in the valid range 1 .. kFD_NEYES ! */ static void SetEyeNo(MirrorNumber,unsigned int); /** Set the mirror number of the composite mirror number, the Mirror number * must be in the valid range 1 .. 6 ! */ static void SetMirrorNo(MirrorNumber,unsigned int); /** Set the mirror number of the composite mirror number, the Mirror number * must be in the valid range 1 .. 27 ! * * Note: There is a bug in the data which have been recorded with the * old version of this method, Mirror 1 is internally coded as 1 * and not as 0. */ static void SetFdMirrorNo(MirrorNumber,unsigned int); // --- setters for FdPixelNumberRec type ... /** Set the Eye number (1..kFD_NEYES). */ static void SetEyeNo(FdPixelNumber pi,unsigned int eye_no); /** Set the observatory level pixel number (1..12960). */ static void SetPixelNo(FdPixelNumber pi,unsigned int n) { pi->fBits.fPixelNo = n; } #ifndef WIN32 /** operator>> to read PixelNumberRec from TBuffer. */ friend TBuffer& operator>>(TBuffer&,PixelNumberRec&); /** operator<< to insert PixelNumberRec into TBuffer. */ friend TBuffer& operator<<(TBuffer&,PixelNumberRec&); /** operator>> to read PixelNumber from TBuffer. */ friend TBuffer& operator>>(TBuffer&,PixelNumber&); /** operator<< to insert PixelNumber into TBuffer. */ friend TBuffer& operator<<(TBuffer&,PixelNumber&); /** operator>> to read FdPixelNumberRec from TBuffer. */ friend TBuffer& operator>>(TBuffer&,FdPixelNumberRec&); /** operator<< to insert FdPixelNumberRec into TBuffer. */ friend TBuffer& operator<<(TBuffer&,FdPixelNumberRec&); /** operator>> to read FdPixelNumber from TBuffer. */ friend TBuffer& operator>>(TBuffer&,FdPixelNumber&); /** operator<< to insert FdPixelNumber into TBuffer. */ friend TBuffer& operator<<(TBuffer&,FdPixelNumber&); /** operator>> to read MirrorNumberRec from TBuffer. */ friend TBuffer& operator>>(TBuffer&,MirrorNumberRec&); /** operator<< to insert MirrorNumberRec into TBuffer. */ friend TBuffer& operator<<(TBuffer&,MirrorNumberRec&); /** operator>> to read MirrorNumber from TBuffer. */ friend TBuffer& operator>>(TBuffer&,MirrorNumber&); /** operator<< to insert MirrorNumber into TBuffer. */ friend TBuffer& operator<<(TBuffer&,MirrorNumber&); ClassDef(Fd,0) #endif // WIN32 }; #ifndef WIN32 /** operator>>() to read a PixelNumberRec from a ROOT stream. */ inline TBuffer& operator>>(TBuffer& b, Fd::PixelNumberRec& p) { b >> p.fPixelNumber; #ifdef __ppc__ Fd::PixelNumberRec copy = p; p.fBits.fPixelNo = copy.fPixelNumber & 0x01ff; p.fBits.fMirrorNo = (copy.fPixelNumber & 0x0e00 ) >>9; p.fBits.fEyeNo = (copy.fPixelNumber & 0x7000) >> 12; p.fBits.fTrigger = (copy.fPixelNumber & 0x8000) >> 15; #endif // __ppc__ return b; } /** operator<<() to write a PixelNumberRec into a ROOT stream. */ inline TBuffer& operator<<(TBuffer& b, Fd::PixelNumberRec& p) { #ifdef __ppc__ Fd::PixelNumberRec copy; copy.fPixelNumber = p.fBits.fPixelNo; copy.fPixelNumber |= p.fBits.fMirrorNo << 9; copy.fPixelNumber |= p.fBits.fEyeNo << 12; copy.fPixelNumber |= p.fBits.fTrigger << 15; p = copy; #endif // __ppc__ b << p.fPixelNumber; return b; } /** operator>>() to read a PixelNumberRec from a ROOT stream. */ inline TBuffer& operator>>(TBuffer& b, Fd::PixelNumber& p) { b >> p->fPixelNumber; #ifdef __ppc__ Fd::PixelNumberRec copy = *p; p->fBits.fPixelNo = copy.fPixelNumber & 0x01ff; p->fBits.fMirrorNo = (copy.fPixelNumber & 0x0e00)>>9; p->fBits.fEyeNo = (copy.fPixelNumber & 0x7000)>>12; p->fBits.fTrigger = (copy.fPixelNumber & 0x8000)>>15; #endif // __ppc__ return b; } /** operator<<() to write a PixelNumberRec into a ROOT stream. */ inline TBuffer& operator<<(TBuffer& b, Fd::PixelNumber& p) { #ifdef __ppc__ Fd::PixelNumberRec copy; copy.fPixelNumber = p->fBits.fPixelNo; copy.fPixelNumber |= p->fBits.fMirrorNo << 9; copy.fPixelNumber |= p->fBits.fEyeNo << 12; copy.fPixelNumber |= p->fBits.fTrigger << 15; *p = copy; #endif // __ppc__ b << p->fPixelNumber; return b; } /** operator>>() to read a FdPixelNumberRec from a ROOT stream. */ inline TBuffer& operator>>(TBuffer& b, Fd::FdPixelNumberRec& p) { b >> p.fPixelNumber; #ifdef __ppc__ Fd::FdPixelNumberRec copy = p; p.fBits.fPixelNo = copy.fPixelNumber & 0x3fff; #endif // __ppc__ return b; } /** operator<<() to write a FdPixelNumberRec into a ROOT stream. */ inline TBuffer& operator<<(TBuffer& b, Fd::FdPixelNumberRec& p) { #ifdef __ppc__ Fd::FdPixelNumberRec copy; copy.fPixelNumber = p.fBits.fPixelNo; p = copy; #endif // __ppc__ b << p.fPixelNumber; return b; } /** operator>>() to read a FdPixelNumberRec from a ROOT stream. */ inline TBuffer& operator>>(TBuffer& b, Fd::FdPixelNumber& p) { b >> p->fPixelNumber; #ifdef __ppc__ Fd::FdPixelNumberRec copy = *p; p->fBits.fPixelNo = copy.fPixelNumber & 0x3fff; #endif // __ppc__ return b; } /** operator<<() to write a FdPixelNumberRec into a ROOT stream. */ inline TBuffer& operator<<(TBuffer& b, Fd::FdPixelNumber& p) { #ifdef __ppc__ Fd::FdPixelNumberRec copy; copy.fPixelNumber = p->fBits.fPixelNo; *p = copy; #endif // __ppc__ b << p->fPixelNumber; return b; } /** operator>>() to read a MirrorNumberRec from a ROOT stream. */ inline TBuffer& operator>>(TBuffer& b, Fd::MirrorNumberRec& p) { b >> p.fMirrorNumber; #ifdef __ppc__ Fd::MirrorNumberRec copy = p; p.fBits.fMirrorNo = copy.fMirrorNumber & 0x001f; p.fBits.fEyeNo = (copy.fMirrorNumber & 0x00e0) >> 5; #endif // __ppc__ return b; } /** operator<<() to write a MirrorNumberRec into a ROOT stream. */ inline TBuffer& operator<<(TBuffer& b, Fd::MirrorNumberRec& p) { #ifdef __ppc__ Fd::MirrorNumberRec copy; copy.fMirrorNumber = p.fBits.fMirrorNo; copy.fMirrorNumber |= p.fBits.fEyeNo << 5; p = copy; #endif // __ppc__ b << p.fMirrorNumber; return b; } /** operator>>() to read a MirrorNumberRec from a ROOT stream. */ inline TBuffer& operator>>(TBuffer& b, Fd::MirrorNumber& p) { b >> p->fMirrorNumber; #ifdef __ppc__ Fd::MirrorNumberRec copy = *p; p->fBits.fMirrorNo = copy.fMirrorNumber & 0x001f; p->fBits.fEyeNo = (copy.fMirrorNumber & 0x00e0) >> 5; #endif // __ppc__ return b; } /** operator<<() to write a MirrorNumberRec into a ROOT stream. */ inline TBuffer& operator<<(TBuffer& b, Fd::MirrorNumber& p) { #ifdef __ppc__ Fd::MirrorNumberRec copy; copy.fMirrorNumber = p->fBits.fMirrorNo; copy.fMirrorNumber |= p->fBits.fEyeNo << 5; *p = copy; #endif // __ppc__ b << p->fMirrorNumber; return b; } #endif // WIN32 } // namespace FdUtil #endif // _FdUtil_FdNumbering_hh_