casa  $Rev:20696$
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
CalPointingTable.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 CalPointingTable.h
00032  */
00033  
00034 #ifndef CalPointingTable_CLASS
00035 #define CalPointingTable_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 <Frequency.h>
00061         
00062 
00063 
00064 
00065 
00066         
00067 
00068         
00069 #include "CReceiverBand.h"
00070         
00071 
00072         
00073 
00074         
00075 
00076         
00077 
00078         
00079 #include "CAntennaMake.h"
00080         
00081 
00082         
00083 #include "CAtmPhaseCorrection.h"
00084         
00085 
00086         
00087 
00088         
00089 
00090         
00091 #include "CPointingModelMode.h"
00092         
00093 
00094         
00095 #include "CPointingMethod.h"
00096         
00097 
00098         
00099 
00100         
00101 #include "CPolarizationType.h"
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         
00135 
00136         
00137 
00138         
00139 
00140 
00141 
00142 #include <ConversionException.h>
00143 #include <DuplicateKey.h>
00144 #include <UniquenessViolationException.h>
00145 #include <NoSuchRow.h>
00146 #include <DuplicateKey.h>
00147 
00148 
00149 #ifndef WITHOUT_ACS
00150 #include <asdmIDLC.h>
00151 #endif
00152 
00153 #include <Representable.h>
00154 
00155 #include <pthread.h>
00156 
00157 namespace asdm {
00158 
00159 //class asdm::ASDM;
00160 //class asdm::CalPointingRow;
00161 
00162 class ASDM;
00163 class CalPointingRow;
00430 class CalPointingTable : public Representable {
00431         friend class ASDM;
00432 
00433 public:
00434 
00435 
00441         static const std::vector<std::string>& getKeyName();
00442 
00443 
00444         virtual ~CalPointingTable();
00445         
00451         ASDM &getContainer() const;
00452         
00458         unsigned int size() const;
00459         
00467         std::string getName() const;
00468         
00476         static std::string name() ;     
00477         
00482          std::string getVersion() const ;
00483         
00489          static const std::vector<std::string>& getAttributesNames();
00490 
00496          static const std::vector<std::string>& defaultAttributesNamesInBin();
00497          
00501         Entity getEntity() const;
00502 
00507         void setEntity(Entity e);
00508                 
00516         std::string toXML()  ;
00517 
00518 #ifndef WITHOUT_ACS
00519         // Conversion Methods
00525         asdmIDL::CalPointingTableIDL *toIDL() ;
00526         
00534          void toIDL(asdmIDL::CalPointingTableIDL& x) const;
00535          
00536 #endif
00537 
00538 #ifndef WITHOUT_ACS
00539 
00545         void fromIDL(asdmIDL::CalPointingTableIDL x) ;
00546 #endif
00547         
00548         //
00549         // ====> Row creation.
00550         //
00551         
00556         CalPointingRow *newRow();
00557         
00558         
00604         CalPointingRow *newRow(string antennaName, ReceiverBandMod::ReceiverBand receiverBand, Tag calDataId, Tag calReductionId, ArrayTime startValidTime, ArrayTime endValidTime, Temperature ambientTemperature, AntennaMakeMod::AntennaMake antennaMake, AtmPhaseCorrectionMod::AtmPhaseCorrection atmPhaseCorrection, vector<Angle > direction, vector<Frequency > frequencyRange, PointingModelModeMod::PointingModelMode pointingModelMode, PointingMethodMod::PointingMethod pointingMethod, int numReceptor, vector<PolarizationTypeMod::PolarizationType > polarizationTypes, vector<vector<Angle > > collOffsetRelative, vector<vector<Angle > > collOffsetAbsolute, vector<vector<Angle > > collError, vector<vector<bool > > collOffsetTied, vector<double > reducedChiSquared);
00605         
00606 
00607 
00620          CalPointingRow *newRow(CalPointingRow *row); 
00621 
00622         //
00623         // ====> Append a row to its table.
00624         //
00625  
00626         
00639         CalPointingRow* add(CalPointingRow* x) ; 
00640 
00641  
00642 
00643 
00644 
00645         //
00646         // ====> Methods returning rows.
00647         //
00648                 
00654         std::vector<CalPointingRow *> get() ;
00655         
00662          const std::vector<CalPointingRow *>& get() const ;
00663         
00664 
00665 
00666  
00667         
00683         CalPointingRow* getRowByKey(string antennaName, ReceiverBandMod::ReceiverBand receiverBand, Tag calDataId, Tag calReductionId);
00684 
00685                 
00686 
00687 
00688 
00736         CalPointingRow* lookup(string antennaName, ReceiverBandMod::ReceiverBand receiverBand, Tag calDataId, Tag calReductionId, ArrayTime startValidTime, ArrayTime endValidTime, Temperature ambientTemperature, AntennaMakeMod::AntennaMake antennaMake, AtmPhaseCorrectionMod::AtmPhaseCorrection atmPhaseCorrection, vector<Angle > direction, vector<Frequency > frequencyRange, PointingModelModeMod::PointingModelMode pointingModelMode, PointingMethodMod::PointingMethod pointingMethod, int numReceptor, vector<PolarizationTypeMod::PolarizationType > polarizationTypes, vector<vector<Angle > > collOffsetRelative, vector<vector<Angle > > collOffsetAbsolute, vector<vector<Angle > > collError, vector<vector<bool > > collOffsetTied, vector<double > reducedChiSquared); 
00737 
00738 
00739         void setUnknownAttributeBinaryReader(const std::string& attributeName, BinaryAttributeReaderFunctor* barFctr);
00740         BinaryAttributeReaderFunctor* getUnknownAttributeBinaryReader(const std::string& attributeName) const;
00741 
00742 private:
00743 
00752         CalPointingTable (ASDM & container);
00753 
00754         ASDM & container;
00755         
00756         bool archiveAsBin; // If true archive binary else archive XML
00757         bool fileAsBin ; // If true file binary else file XML   
00758         
00759         std::string version ; 
00760         
00761         Entity entity;
00762         
00763 
00764 
00772         CalPointingRow* checkAndAdd(CalPointingRow* x, bool skipCheckUniqueness=false) ;
00773         
00779          void append(CalPointingRow* x) ;
00780          
00786          void addWithoutCheckingUnique(CalPointingRow* x) ;
00787          
00788          
00789 
00790 
00791 
00792 // A data structure to store the pointers on the table's rows.
00793 
00794 // In all cases we maintain a private vector of CalPointingRow s.
00795    std::vector<CalPointingRow * > privateRows;
00796    
00797 
00798                         
00799         std::vector<CalPointingRow *> row;
00800 
00801         
00802         void error() ; //throw(ConversionException);
00803 
00804         
00811         void fromXML(std::string& xmlDoc) ;
00812                 
00813         std::map<std::string, BinaryAttributeReaderFunctor *> unknownAttributes2Functors;
00814 
00819         void setFromMIMEFile(const std::string& directory);
00820         /*
00821         void openMIMEFile(const std::string& directory);
00822         */
00823         void setFromXMLFile(const std::string& directory);
00824         
00832         std::string toMIME(const asdm::ByteOrder* byteOrder=asdm::ByteOrder::Machine_Endianity);
00833   
00834         
00841          void setFromMIME(const std::string & mimeMsg);
00842         
00846         std::string MIMEXMLPart(const asdm::ByteOrder* byteOrder=asdm::ByteOrder::Machine_Endianity);
00847         
00857           void toFile(std::string directory);
00858           
00862           bool loadInProgress;
00863           void checkPresenceInMemory() {
00864                 if (!presentInMemory && !loadInProgress) {
00865                         loadInProgress = true;
00866                         setFromFile(getContainer().getDirectory());
00867                         presentInMemory = true;
00868                         loadInProgress = false;
00869                 }
00870           }
00879          void setFromFile(const std::string& directory);        
00880  
00881 };
00882 
00883 } // End namespace asdm
00884 
00885 #endif /* CalPointingTable_CLASS */