casa  $Rev:20696$
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
CalFocusTable.h
Go to the documentation of this file.
00001 
00002 /*
00003  * ALMA - Atacama Large Millimeter Array
00004  * (c) European Southern Observatory, 2002
00005  * (c) Associated Universities Inc., 2002
00006  * Copyright by ESO (in the framework of the ALMA collaboration),
00007  * Copyright by AUI (in the framework of the ALMA collaboration),
00008  * All rights reserved.
00009  * 
00010  * This library is free software; you can redistribute it and/or
00011  * modify it under the terms of the GNU Lesser General Public
00012  * License as published by the Free software Foundation; either
00013  * version 2.1 of the License, or (at your option) any later version.
00014  * 
00015  * This library is distributed in the hope that it will be useful,
00016  * but WITHOUT ANY WARRANTY, without even the implied warranty of
00017  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00018  * Lesser General Public License for more details.
00019  * 
00020  * You should have received a copy of the GNU Lesser General Public
00021  * License along with this library; if not, write to the Free Software
00022  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
00023  * MA 02111-1307  USA
00024  *
00025  * Warning!
00026  *  -------------------------------------------------------------------- 
00027  * | This is generated code!  Do not modify this file.                  |
00028  * | If you do, all changes will be lost when the file is re-generated. |
00029  *  --------------------------------------------------------------------
00030  *
00031  * File CalFocusTable.h
00032  */
00033  
00034 #ifndef CalFocusTable_CLASS
00035 #define CalFocusTable_CLASS
00036 
00037 #include <string>
00038 #include <vector>
00039 #include <map>
00040 
00041 
00042 
00043         
00044 #include <ArrayTime.h>
00045         
00046 
00047         
00048 #include <Temperature.h>
00049         
00050 
00051         
00052 #include <Angle.h>
00053         
00054 
00055         
00056 #include <Tag.h>
00057         
00058 
00059         
00060 #include <Length.h>
00061         
00062 
00063         
00064 #include <Frequency.h>
00065         
00066 
00067 
00068 
00069 
00070         
00071 
00072         
00073 
00074         
00075 
00076         
00077 #include "CReceiverBand.h"
00078         
00079 
00080         
00081 
00082         
00083 #include "CAtmPhaseCorrection.h"
00084         
00085 
00086         
00087 #include "CFocusMethod.h"
00088         
00089 
00090         
00091 
00092         
00093 
00094         
00095 
00096         
00097 #include "CPolarizationType.h"
00098         
00099 
00100         
00101 
00102         
00103 
00104         
00105 
00106         
00107 
00108         
00109 
00110         
00111 
00112         
00113 
00114         
00115 
00116         
00117 
00118         
00119 
00120         
00121 
00122         
00123 
00124         
00125 
00126         
00127 
00128         
00129 
00130         
00131 
00132 
00133 
00134 #include <ConversionException.h>
00135 #include <DuplicateKey.h>
00136 #include <UniquenessViolationException.h>
00137 #include <NoSuchRow.h>
00138 #include <DuplicateKey.h>
00139 
00140 
00141 #ifndef WITHOUT_ACS
00142 #include <asdmIDLC.h>
00143 #endif
00144 
00145 #include <Representable.h>
00146 
00147 #include <pthread.h>
00148 
00149 namespace asdm {
00150 
00151 //class asdm::ASDM;
00152 //class asdm::CalFocusRow;
00153 
00154 class ASDM;
00155 class CalFocusRow;
00394 class CalFocusTable : public Representable {
00395         friend class ASDM;
00396 
00397 public:
00398 
00399 
00405         static const std::vector<std::string>& getKeyName();
00406 
00407 
00408         virtual ~CalFocusTable();
00409         
00415         ASDM &getContainer() const;
00416         
00422         unsigned int size() const;
00423         
00431         std::string getName() const;
00432         
00440         static std::string name() ;     
00441         
00446          std::string getVersion() const ;
00447         
00453          static const std::vector<std::string>& getAttributesNames();
00454 
00460          static const std::vector<std::string>& defaultAttributesNamesInBin();
00461          
00465         Entity getEntity() const;
00466 
00471         void setEntity(Entity e);
00472                 
00480         std::string toXML()  ;
00481 
00482 #ifndef WITHOUT_ACS
00483         // Conversion Methods
00489         asdmIDL::CalFocusTableIDL *toIDL() ;
00490         
00498          void toIDL(asdmIDL::CalFocusTableIDL& x) const;
00499          
00500 #endif
00501 
00502 #ifndef WITHOUT_ACS
00503 
00509         void fromIDL(asdmIDL::CalFocusTableIDL x) ;
00510 #endif
00511         
00512         //
00513         // ====> Row creation.
00514         //
00515         
00520         CalFocusRow *newRow();
00521         
00522         
00566         CalFocusRow *newRow(string antennaName, ReceiverBandMod::ReceiverBand receiverBand, Tag calDataId, Tag calReductionId, ArrayTime startValidTime, ArrayTime endValidTime, Temperature ambientTemperature, AtmPhaseCorrectionMod::AtmPhaseCorrection atmPhaseCorrection, FocusMethodMod::FocusMethod focusMethod, vector<Frequency > frequencyRange, vector<Angle > pointingDirection, int numReceptor, vector<PolarizationTypeMod::PolarizationType > polarizationTypes, vector<bool > wereFixed, vector<vector<Length > > offset, vector<vector<Length > > offsetError, vector<vector<bool > > offsetWasTied, vector<vector<double > > reducedChiSquared, vector<vector<Length > > position);
00567         
00568 
00569 
00582          CalFocusRow *newRow(CalFocusRow *row); 
00583 
00584         //
00585         // ====> Append a row to its table.
00586         //
00587  
00588         
00601         CalFocusRow* add(CalFocusRow* x) ; 
00602 
00603  
00604 
00605 
00606 
00607         //
00608         // ====> Methods returning rows.
00609         //
00610                 
00616         std::vector<CalFocusRow *> get() ;
00617         
00624          const std::vector<CalFocusRow *>& get() const ;
00625         
00626 
00627 
00628  
00629         
00645         CalFocusRow* getRowByKey(string antennaName, ReceiverBandMod::ReceiverBand receiverBand, Tag calDataId, Tag calReductionId);
00646 
00647                 
00648 
00649 
00650 
00696         CalFocusRow* lookup(string antennaName, ReceiverBandMod::ReceiverBand receiverBand, Tag calDataId, Tag calReductionId, ArrayTime startValidTime, ArrayTime endValidTime, Temperature ambientTemperature, AtmPhaseCorrectionMod::AtmPhaseCorrection atmPhaseCorrection, FocusMethodMod::FocusMethod focusMethod, vector<Frequency > frequencyRange, vector<Angle > pointingDirection, int numReceptor, vector<PolarizationTypeMod::PolarizationType > polarizationTypes, vector<bool > wereFixed, vector<vector<Length > > offset, vector<vector<Length > > offsetError, vector<vector<bool > > offsetWasTied, vector<vector<double > > reducedChiSquared, vector<vector<Length > > position); 
00697 
00698 
00699         void setUnknownAttributeBinaryReader(const std::string& attributeName, BinaryAttributeReaderFunctor* barFctr);
00700         BinaryAttributeReaderFunctor* getUnknownAttributeBinaryReader(const std::string& attributeName) const;
00701 
00702 private:
00703 
00712         CalFocusTable (ASDM & container);
00713 
00714         ASDM & container;
00715         
00716         bool archiveAsBin; // If true archive binary else archive XML
00717         bool fileAsBin ; // If true file binary else file XML   
00718         
00719         std::string version ; 
00720         
00721         Entity entity;
00722         
00723 
00724 
00732         CalFocusRow* checkAndAdd(CalFocusRow* x, bool skipCheckUniqueness=false) ;
00733         
00739          void append(CalFocusRow* x) ;
00740          
00746          void addWithoutCheckingUnique(CalFocusRow* x) ;
00747          
00748          
00749 
00750 
00751 
00752 // A data structure to store the pointers on the table's rows.
00753 
00754 // In all cases we maintain a private vector of CalFocusRow s.
00755    std::vector<CalFocusRow * > privateRows;
00756    
00757 
00758                         
00759         std::vector<CalFocusRow *> row;
00760 
00761         
00762         void error() ; //throw(ConversionException);
00763 
00764         
00771         void fromXML(std::string& xmlDoc) ;
00772                 
00773         std::map<std::string, BinaryAttributeReaderFunctor *> unknownAttributes2Functors;
00774 
00779         void setFromMIMEFile(const std::string& directory);
00780         /*
00781         void openMIMEFile(const std::string& directory);
00782         */
00783         void setFromXMLFile(const std::string& directory);
00784         
00792         std::string toMIME(const asdm::ByteOrder* byteOrder=asdm::ByteOrder::Machine_Endianity);
00793   
00794         
00801          void setFromMIME(const std::string & mimeMsg);
00802         
00806         std::string MIMEXMLPart(const asdm::ByteOrder* byteOrder=asdm::ByteOrder::Machine_Endianity);
00807         
00817           void toFile(std::string directory);
00818           
00822           bool loadInProgress;
00823           void checkPresenceInMemory() {
00824                 if (!presentInMemory && !loadInProgress) {
00825                         loadInProgress = true;
00826                         setFromFile(getContainer().getDirectory());
00827                         presentInMemory = true;
00828                         loadInProgress = false;
00829                 }
00830           }
00839          void setFromFile(const std::string& directory);        
00840  
00841 };
00842 
00843 } // End namespace asdm
00844 
00845 #endif /* CalFocusTable_CLASS */