Update of /cvsroot/nsclspectcl/SpecTcl/contrib/scriptable In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv26440 Modified Files: Tag: SpecTcl-2-1-fixes CCAENDigitizerCreator.cpp CCAENDigitizerCreator.h CCAENDigitizerModule.cpp CCAENDigitizerModule.h CCAENV830Creator.cpp CCAENV830Creator.h CCAENV830Module.cpp CCAENV830Module.h CModule.cpp CModule.h CModuleCommand.cpp CModuleCommand.h CModuleCreator.cpp CModuleCreator.h CModuleDictionary.cpp CModuleDictionary.h Makefile.am MySpecTclApp.cpp MySpecTclApp.h Log Message: Just get this all from the 2.2 branch Index: CModuleCommand.cpp =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/contrib/scriptable/CModuleCommand.cpp,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -C2 -d -r1.1.2.2 -r1.1.2.3 *** CModuleCommand.cpp 21 Dec 2006 20:34:53 -0000 1.1.2.2 --- CModuleCommand.cpp 29 May 2007 16:03:33 -0000 1.1.2.3 *************** *** 2,6 **** #include "CModuleCommand.h" #include "CModuleDictionary.h" - #include "CUnpacker.h" #include "CModuleCreator.h" #include <TCLInterpreter.h> --- 2,5 ---- *************** *** 25,32 **** m_Pattern(rPattern), m_rResult(rResult) {} ! void operator()(pair<string,CModule*> p) { CTCLString entry; if(Tcl_StringMatch(p.first.c_str(), m_Pattern.c_str())) { ! CModule* pModule = p.second; assert(pModule); entry.AppendElement(pModule->getName()); --- 24,31 ---- m_Pattern(rPattern), m_rResult(rResult) {} ! void operator()(pair<string,CSegmentUnpacker*> p) { CTCLString entry; if(Tcl_StringMatch(p.first.c_str(), m_Pattern.c_str())) { ! CSegmentUnpacker* pModule = p.second; assert(pModule); entry.AppendElement(pModule->getName()); *************** *** 49,53 **** { string info(item.first); ! CModuleCreator* pCreator = item.second;; assert(pCreator); info += "\t - "; --- 48,52 ---- { string info(item.first); ! CModuleCreator* pCreator = item.second; assert(pCreator); info += "\t - "; *************** *** 73,80 **** CModuleCommand::CModuleCommand (CTCLInterpreter& rInterp, const string& rCommand, - CUnpacker& rUnpacker, CModuleDictionary& rDict) : CTCLProcessor(rCommand, &rInterp), - m_rUnpacker(rUnpacker), m_rModules(rDict) --- 72,77 ---- *************** *** 223,227 **** // Create and configure the module: ! CModule* pModule = pCreator->Create(rInterp, Name); if(pModule) { if(argc) { --- 220,224 ---- // Create and configure the module: ! CSegmentUnpacker* pModule = pCreator->Create(rInterp, Name); if(pModule) { if(argc) { *************** *** 308,323 **** // Remove the module from the dictionary. ! CModule* pModule= iModule->second; assert(pModule); m_rModules.Delete(iModule); ! // If the module is in the unpacker, remove it. ! ! CUnpacker::UnpackerIterator iUnpack = m_rUnpacker.Find(Name); ! if(iUnpack != m_rUnpacker.end()) { ! m_rUnpacker.Delete(iUnpack); ! } ! ! // Delete the module. delete pModule; --- 305,315 ---- // Remove the module from the dictionary. ! CSegmentUnpacker* pModule= iModule->second; assert(pModule); m_rModules.Delete(iModule); ! ! // Delete the module. This calls the OnDelete member which removes ! // the modle from it's packet. delete pModule; Index: CCAENDigitizerCreator.cpp =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/contrib/scriptable/CCAENDigitizerCreator.cpp,v retrieving revision 1.1 retrieving revision 1.1.2.1 diff -C2 -d -r1.1 -r1.1.2.1 *** CCAENDigitizerCreator.cpp 12 Dec 2003 17:55:15 -0000 1.1 --- CCAENDigitizerCreator.cpp 29 May 2007 16:03:30 -0000 1.1.2.1 *************** *** 9,14 **** Construct a digitizer creator for CAEN7xx modules. */ ! CCAENDigitizerCreator::CCAENDigitizerCreator () : ! CModuleCreator("caen7xx") { --- 9,15 ---- Construct a digitizer creator for CAEN7xx modules. */ ! CCAENDigitizerCreator::CCAENDigitizerCreator (const string& name, ! CModuleCommand* pCreator) : ! CModuleCreator(name, pCreator) { *************** *** 67,71 **** \return POinter to the new module or null if could not create. */ ! CModule* CCAENDigitizerCreator::Create(CTCLInterpreter& rInterp, const string& rName) --- 68,72 ---- \return POinter to the new module or null if could not create. */ ! CSegmentUnpacker* CCAENDigitizerCreator::Create(CTCLInterpreter& rInterp, const string& rName) Index: CModuleCommand.h =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/contrib/scriptable/CModuleCommand.h,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -C2 -d -r1.1.2.1 -r1.1.2.2 *** CModuleCommand.h 5 Apr 2004 21:09:09 -0000 1.1.2.1 --- CModuleCommand.h 29 May 2007 16:03:34 -0000 1.1.2.2 *************** *** 11,19 **** of modules that can be created to be extended without adding code to the module command class itself. ! The command has the following subcommands: ! - create - creates a new module. ! - list - lists the modules that have been created. ! - types - lists the module types that can be created. ! - delete - Destroys a module that has been created (removing it from the unpacker if it has been installed. */ --- 11,19 ---- of modules that can be created to be extended without adding code to the module command class itself. ! The command has the following switches ! - -create - creates a new module. ! - -list - lists the modules that have been created. ! - -types - lists the module types that can be created. ! - -delete - Destroys a module that has been created (removing it from the unpacker if it has been installed. */ *************** *** 51,55 **** private: CreatorCollection m_Creators; //!< Creator objects - CUnpacker& m_rUnpacker; //!< Pointer to unpacker object. CModuleDictionary& m_rModules; //!< Pointer to module dictionary. --- 51,54 ---- *************** *** 60,64 **** CModuleCommand (CTCLInterpreter& rInterp, const string& rCommand, - CUnpacker& rUnpacker, CModuleDictionary& rDictionary); virtual ~ CModuleCommand ( ); --- 59,62 ---- *************** *** 79,89 **** return m_Creators; } ! CUnpacker& getUnpacker() ! { ! return m_rUnpacker; ! } ! CModuleDictionary& getDictionary() { ! return m_rModules; } --- 77,84 ---- return m_Creators; } ! ! CModuleDictionary* getDictionary() { ! return &m_rModules; } Index: CCAENDigitizerCreator.h =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/contrib/scriptable/CCAENDigitizerCreator.h,v retrieving revision 1.1 retrieving revision 1.1.2.1 diff -C2 -d -r1.1 -r1.1.2.1 *** CCAENDigitizerCreator.h 12 Dec 2003 17:55:15 -0000 1.1 --- CCAENDigitizerCreator.h 29 May 2007 16:03:30 -0000 1.1.2.1 *************** *** 1,2 **** --- 1,13 ---- + /*! + Creator for CAEN digitizers (common format). For more information about + the unpackig of CAEN 32 channel digitizers, see CCAENDigitizerModule. + + This module is registered in a module command object to allow it to recognize + and create unpackers for the 785, 775, 792 and compatibles. + Normally this module is registered to recognize several module types in order + to be compatible with the readout software. + + */ + #ifndef __CCAENDIGITIZERCREATOR_H //Required for current class *************** *** 22,29 **** class CTCLInterpreter; class CTCLResult; ! ! /*! ! Creator for CAEN digitizers (common format). ! */ class CCAENDigitizerCreator : public CModuleCreator { --- 33,39 ---- class CTCLInterpreter; class CTCLResult; ! class CModuleCommand; ! ! class CCAENDigitizerCreator : public CModuleCreator { *************** *** 31,35 **** public: // Constructors and other cannonical operatios. ! CCAENDigitizerCreator (); ~ CCAENDigitizerCreator ( ); CCAENDigitizerCreator (const CCAENDigitizerCreator& rhs ); --- 41,45 ---- public: // Constructors and other cannonical operatios. ! CCAENDigitizerCreator (const string& name, CModuleCommand* pCreator); ~ CCAENDigitizerCreator ( ); CCAENDigitizerCreator (const CCAENDigitizerCreator& rhs ); *************** *** 42,47 **** public: ! CModule* Create (CTCLInterpreter& rInterp, const string& rName); ! virtual string TypeInfo() const; }; --- 52,57 ---- public: ! virtual CSegmentUnpacker* Create (CTCLInterpreter& rInterp, const string& rName); ! virtual string TypeInfo() const; }; Index: CModuleDictionary.cpp =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/contrib/scriptable/CModuleDictionary.cpp,v retrieving revision 1.1 retrieving revision 1.1.2.1 diff -C2 -d -r1.1 -r1.1.2.1 *** CModuleDictionary.cpp 12 Dec 2003 17:55:15 -0000 1.1 --- CModuleDictionary.cpp 29 May 2007 16:03:35 -0000 1.1.2.1 *************** *** 68,72 **** */ void ! CModuleDictionary::Add(CModule* pModule) { string name = pModule->getName(); --- 68,72 ---- */ void ! CModuleDictionary::Add(CSegmentUnpacker* pModule) { string name = pModule->getName(); Index: CCAENDigitizerModule.h =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/contrib/scriptable/CCAENDigitizerModule.h,v retrieving revision 1.1 retrieving revision 1.1.2.1 diff -C2 -d -r1.1 -r1.1.2.1 *** CCAENDigitizerModule.h 12 Dec 2003 17:55:15 -0000 1.1 --- CCAENDigitizerModule.h 29 May 2007 16:03:31 -0000 1.1.2.1 *************** *** 9,12 **** --- 9,24 ---- // // Copyright + /*! + + Unpacks data from a CAEN digitizer. The CAEN Digitizer modules + handed by this are the CAEN V775, 785, 792. These modules produce + essentially identical data formats. For more information about the + data format see the documentation of the Unpack member. + + Most of the configuration parameters that are supported by this + module are ignored but are defined so that the module is compatible with + the readout configuration parameters. This allows the readout and analysis + software to share configuration data. + */ #ifndef __CCAENDIGITIZERMODULE_H //Required for current class *************** *** 35,50 **** #include <TranslatorPointer.h> #endif // Forward Class Defintions: class CTCLInterpreter; - class CTCLResult; class CAnalyzer; class CBufferDecoder; class CEvent; ! ! /*! ! Unpacks data from a CAEN digitizer. ! */ class CCAENDigitizerModule : public CModule { --- 47,60 ---- #include <TranslatorPointer.h> #endif + // Forward Class Defintions: class CTCLInterpreter; class CAnalyzer; class CBufferDecoder; class CEvent; ! ! class CCAENDigitizerModule : public CModule { *************** *** 52,61 **** // Private Member data: ! int m_aParameterMap[32]; //! Maps channels to spectcl parameter ids. ! int m_nCrate; //! Crate number (from crate register). ! int m_nSlot; //! Slot number from GEO address or register. ! CIntConfigParam* m_pCrateConfig; //!< Pointer to "crate" parameter ! CIntConfigParam* m_pSlotConfig; //!< Pointer to "slot" parameter. ! CStringArrayparam* m_pParamConfig; //!< Pointer to "parameters" param. public: --- 62,70 ---- // Private Member data: ! int m_nCrate; //! Crate number (from crate register). ! int m_nSlot; //! Slot number from GEO address or register. ! CIntConfigParam* m_pCrateConfig; //!< Pointer to "crate" parameter ! CIntConfigParam* m_pSlotConfig; //!< Pointer to "slot" parameter. ! CStringArrayparam* m_pParamConfig; //!< Pointer to "parameters" param. public: *************** *** 75,83 **** public: - //Get accessor function for non-static attribute data member - const int* getParameterMap() const - { - return m_aParameterMap; - } //Get accessor function for non-static attribute data member int getCrate() const --- 84,87 ---- *************** *** 95,111 **** protected: ! //Set accessor function for non-static attribute data member ! void setParameterMap (const int* am_aParameterMap) ! { ! memcpy(m_aParameterMap, am_aParameterMap, ! sizeof(m_aParameterMap)); ! } //Set accessor function for non-static attribute data member void setCrate (const int am_nCrate) ! { m_nCrate = am_nCrate; } //Set accessor function for non-static attribute data member void setSlot (const int am_nSlot) ! { m_nSlot = am_nSlot; } --- 99,112 ---- protected: ! //Set accessor function for non-static attribute data member void setCrate (const int am_nCrate) ! { ! m_nCrate = am_nCrate; } //Set accessor function for non-static attribute data member void setSlot (const int am_nSlot) ! { ! m_nSlot = am_nSlot; } Index: Makefile.am =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/contrib/scriptable/Makefile.am,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -C2 -d -r1.1.2.1 -r1.1.2.2 *** Makefile.am 2 Jan 2006 16:54:48 -0000 1.1.2.1 --- Makefile.am 29 May 2007 16:03:36 -0000 1.1.2.2 *************** *** 13,16 **** --- 13,18 ---- ScriptedSpecTcl_SOURCES = MySpecTclApp.cpp + libScripted_la_LDFLAGS = -version-info 0:0:0 + libScripted_la_SOURCES = CBoolConfigParam.cpp \ CCAENDigitizerCreator.cpp \ *************** *** 18,21 **** --- 20,24 ---- CCAENV830Creator.cpp \ CCAENV830Module.cpp \ + CConfigurableObject.cpp \ CConfigurationParameter.cpp \ CIntArrayParam.cpp \ *************** *** 25,35 **** CModuleCreator.cpp \ CModuleDictionary.cpp \ ! CPosition.cpp \ ! CProfile.cpp \ ! CSeeAnalyzer.cpp \ CStringArrayparam.cpp \ ! CStringConfigParam.cpp \ ! CUnpacker.cpp \ ! CUnpackerCommand.cpp --- 28,37 ---- CModuleCreator.cpp \ CModuleDictionary.cpp \ ! CPacket.cpp CPacketCreator.cpp \ ! CScriptableUnpacker.cpp \ ! CSegmentUnpacker.cpp \ CStringArrayparam.cpp \ ! CStringConfigParam.cpp ! *************** *** 39,42 **** --- 41,45 ---- CCAENV830Creator.h \ CCAENV830Module.h \ + CConfigurableObject.h \ CConfigurationParameter.h \ CIntArrayParam.h \ *************** *** 46,57 **** CModuleCreator.h \ CModuleDictionary.h \ ! CPosition.h \ ! CProfile.h \ ! CSeeAnalyzer.h \ CStringArrayparam.h \ CStringConfigParam.h \ ! CUnpacker.h \ ! CUnpackerCommand.h \ ! MySpecTclApp.h --- 49,61 ---- CModuleCreator.h \ CModuleDictionary.h \ ! CPacket.h CPacketCreator.h \ ! CScriptableUnpacker.h \ ! CSegmentUnpacker.h \ CStringArrayparam.h \ CStringConfigParam.h \ ! MySpecTclApp.h \ ! CConfigurableObject.h \ ! CCAENV1x90Data.h ! *************** *** 64,73 **** -ltape -lXt -lX11 $(X11EXTRA_LDFLAGS) $(LD_EXTRA_FLAGS) ! ScriptedSpecTcl_LDFLAGS = -L. -g \ @TCL_LDFLAGS@ @XLIBSW@ -L@top_srcdir@/SpectrumIO \ -L@top_srcdir@/Tape -L@top_srcdir@/Sorter -L@top_srcdir@/Xamine \ -L@top_srcdir@/Display -L@top_srcdir@/Gates -L@top_srcdir@/EventSource \ -L@top_srcdir@/Events -L@top_srcdir@/TCL -L@top_srcdir@/NSCLException \ ! -L@top_srcdir@/Filter -L@top_srcdir@/SpecTcl # --- 68,77 ---- -ltape -lXt -lX11 $(X11EXTRA_LDFLAGS) $(LD_EXTRA_FLAGS) ! ScriptedSpecTcl_LDFLAGS = -L. \ @TCL_LDFLAGS@ @XLIBSW@ -L@top_srcdir@/SpectrumIO \ -L@top_srcdir@/Tape -L@top_srcdir@/Sorter -L@top_srcdir@/Xamine \ -L@top_srcdir@/Display -L@top_srcdir@/Gates -L@top_srcdir@/EventSource \ -L@top_srcdir@/Events -L@top_srcdir@/TCL -L@top_srcdir@/NSCLException \ ! -L@top_srcdir@/Filter -L@top_srcdir@/SpecTcl -g -Wl,"-rpath=($prefix)/lib" # *************** *** 102,122 **** > Makefile.user echo INSTDIR=$(prefix) >> Makefile.user ! echo OS=$(OS)| cut -d- -f1 >> Makefile.user ! echo >> Makefile.user ! echo INCLUDES="@TCL_FLAGS@ @XINCLUDES@ -I." \ ! >>Makefile.user ! echo LIBDIRS="@TCL_LDFLAGS@ @XLIBSW@ " >> Makefile.user ! echo LIBFLAGS="@X_PRE_LIBS@" >> Makefile.user ! echo >> Makefile.user ! echo CPP=$(CPP) >> Makefile.user ! echo CXX=$(CXX) >> Makefile.user ! echo CC=$(CC) >> Makefile.user ! echo LD=$(CXX) >> Makefile.user ! echo >> Makefile.user ! echo "#------- End of autogenerated stuff" \ ! >> Makefile.user ! cat Makefile.skel >> Makefile.user $(INSTALL_DATA) Makefile.user $(prefix)/contrib/scripted/skel/Makefile ! EXTRA_DIST=Makefile.skel \ No newline at end of file --- 106,113 ---- > Makefile.user echo INSTDIR=$(prefix) >> Makefile.user ! cat Makefile.skel >> Makefile.user $(INSTALL_DATA) Makefile.user $(prefix)/contrib/scripted/skel/Makefile + $(INSTALL_DATA) scriptable_Makefile.include $(sysconfdir) ! EXTRA_DIST=Makefile.skel scriptable_Makefile.include \ No newline at end of file Index: CCAENDigitizerModule.cpp =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/contrib/scriptable/CCAENDigitizerModule.cpp,v retrieving revision 1.1 retrieving revision 1.1.2.1 diff -C2 -d -r1.1 -r1.1.2.1 *** CCAENDigitizerModule.cpp 12 Dec 2003 17:55:15 -0000 1.1 --- CCAENDigitizerModule.cpp 29 May 2007 16:03:30 -0000 1.1.2.1 *************** *** 16,19 **** --- 16,21 ---- #include <TranslatorPointer.h> + #include <assert.h> + // Mask definitions: *************** *** 82,95 **** ! memset(m_aParameterMap, 0, sizeof(m_aParameterMap)); // Register the parameters: ! m_pCrateConfig = AddIntParam(string("crate")); m_pCrateConfig->setRange(0, 0xff); ! m_pSlotConfig = AddIntParam(string("slot")); m_pSlotConfig->setRange(0, 0x1f); ! m_pParamConfig= AddStringArrayParam(string("parameters"), 32); // The remaining parameters are ignored but registered for compatibility --- 84,97 ---- ! CreateMap(32); // Create the parameter map (all undefed now). // Register the parameters: ! m_pCrateConfig = (CIntConfigParam*)*AddIntParam(string("crate")); m_pCrateConfig->setRange(0, 0xff); ! m_pSlotConfig = (CIntConfigParam*)*AddIntParam(string("slot")); m_pSlotConfig->setRange(0, 0x1f); ! m_pParamConfig= (CStringArrayparam*)*AddStringArrayParam(string("parameters"), 32); // The remaining parameters are ignored but registered for compatibility *************** *** 105,112 **** AddIntParam(string("base"), 0); AddBoolParam(string("multievent"), false); ! // V785 specific parameters: AddIntParam(string("range"), 500); // V792 specific parameters: --- 107,117 ---- AddIntParam(string("base"), 0); AddBoolParam(string("multievent"), false); + AddIntParam(string("fastclearwindow"), 0); + AddIntParam(string("waitloops"), 20); // Readout only. ! // V775 specific parameters: AddIntParam(string("range"), 500); + AddBoolParam(string("commonstart"), true); // V792 specific parameters: *************** *** 116,126 **** } /*! ! Destructor. No dynamic storage is managed, so the implementation is a No-Op. */ CCAENDigitizerModule::~CCAENDigitizerModule ( ) //Destructor - Delete dynamic objects { ! delete m_pCrateConfig; ! delete m_pSlotConfig; ! delete m_pParamConfig; } // Functions for class CCAENDigitizerModule --- 121,129 ---- } /*! ! Destructor. No Action required. */ CCAENDigitizerModule::~CCAENDigitizerModule ( ) //Destructor - Delete dynamic objects { ! } // Functions for class CCAENDigitizerModule *************** *** 148,161 **** // translate names into parameter ids: - CHistogrammer* pHist = &rHistogrammer; for(int i =0; i < 32; i++) { string ParamName = (*m_pParamConfig)[i]; ! CParameter* pParameter = pHist->FindParameter(ParamName); ! if(pParameter) { ! m_aParameterMap[i] = pParameter->getNumber(); ! } ! else { ! m_aParameterMap[i] = -1; // No mapping. ! } } } --- 151,157 ---- // translate names into parameter ids: for(int i =0; i < 32; i++) { string ParamName = (*m_pParamConfig)[i]; ! MapElement(i, ParamName); } } *************** *** 168,177 **** CAEN event data looks like a sequence of longwords. ! Header word: | Geo 5bits|0|1|0| Crate 8 bits| 0 | 0| nChannels 6bits| unused 8bits| ! Data words | Geo 5bits| mbz 5bits| Channel 6 bits|x|x|Un|Ov| Value: 12 bits| ! Trailer word | Geo 5 bits| 1|0|0| Event number 24 bits | The header is used to determine if this is data from the right slot. \note The words within the long word are stored in big endian order while the --- 164,175 ---- CAEN event data looks like a sequence of longwords. ! \verbatim ! Header | Geo 5bits|0|1|0| Crate 8 bits| 0 | 0| nChannels 6bits| unused 8bits| ! Data | Geo 5bits| mbz 5bits| Channel 6 bits|x|x|Un|Ov| Value: 12 bits| ! Trailer| Geo 5bits| 1|0|0| Event number 24 bits | + \endverbatim The header is used to determine if this is data from the right slot. \note The words within the long word are stored in big endian order while the *************** *** 216,225 **** // Unpack the channels -> rEvent. for(int i =0; i < nChannels; i++) { UShort_t nChan = (*p & DATAH_CHANMASK) >> DATAH_CHANSHIFT; ++p; ! if(m_aParameterMap[nChan] >=0 && ((*p & (DATAL_UNBIT | DATAL_OVBIT)) == 0)) { ! rEvent[m_aParameterMap[nChan]] = (*p & DATAL_DATAMASK); } ++p; --- 214,225 ---- // Unpack the channels -> rEvent. + assert(nChannels <= 32); for(int i =0; i < nChannels; i++) { UShort_t nChan = (*p & DATAH_CHANMASK) >> DATAH_CHANSHIFT; ++p; ! int nId = Id(nChan); ! if( nId >=0 && ((*p & (DATAL_UNBIT | DATAL_OVBIT)) == 0)) { ! rEvent[nId] = (*p & DATAL_DATAMASK); } ++p; Index: CModuleCreator.cpp =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/contrib/scriptable/CModuleCreator.cpp,v retrieving revision 1.1 retrieving revision 1.1.2.1 diff -C2 -d -r1.1 -r1.1.2.1 *** CModuleCreator.cpp 12 Dec 2003 17:55:15 -0000 1.1 --- CModuleCreator.cpp 29 May 2007 16:03:34 -0000 1.1.2.1 *************** *** 6,13 **** Construct a module creator. \param rType (const string& [in]): Type of module being constructed. */ ! CModuleCreator::CModuleCreator (const string& rType) ! : m_sType(rType) { --- 6,17 ---- Construct a module creator. \param rType (const string& [in]): Type of module being constructed. + \param pCreatorCommand (CModuleCommand* [in]): + Pointer to the command that creates modules. */ ! CModuleCreator::CModuleCreator (const string& rType, ! CModuleCommand* pCreatorCommand) ! : m_sType(rType), ! m_pCreatorCommand(pCreatorCommand) { Index: CModuleCreator.h =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/contrib/scriptable/CModuleCreator.h,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -C2 -d -r1.1.2.1 -r1.1.2.2 *** CModuleCreator.h 5 Apr 2004 21:09:09 -0000 1.1.2.1 --- CModuleCreator.h 29 May 2007 16:03:34 -0000 1.1.2.2 *************** *** 17,32 **** class CTCLInterpreter; class CTCLResult; ! ! class CModuleCreator { private: ! string m_sType; //! Type of module created public: // Constructors and other cannonical functions. ! CModuleCreator (const string& rType); virtual ~CModuleCreator ( ); CModuleCreator (const CModuleCreator& aCModuleCreator ); --- 17,35 ---- class CTCLInterpreter; class CTCLResult; ! class CModuleCommand; ! class CSegmentCreator; ! class CSegmentUnpacker; class CModuleCreator { private: ! string m_sType; //! Type of module created ! CModuleCommand* m_pCreatorCommand; //!< The creator command. public: // Constructors and other cannonical functions. ! CModuleCreator (const string& rType, ! CModuleCommand* pCreatorCommand); virtual ~CModuleCreator ( ); CModuleCreator (const CModuleCreator& aCModuleCreator ); *************** *** 53,57 **** virtual bool Match (const string& sModuletype) ; // ! virtual CModule* Create (CTCLInterpreter& rInterp, const string& rName) = 0; virtual string TypeInfo() const= 0; --- 56,60 ---- virtual bool Match (const string& sModuletype) ; // ! virtual CSegmentUnpacker* Create (CTCLInterpreter& rInterp, const string& rName) = 0; virtual string TypeInfo() const= 0; Index: MySpecTclApp.h =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/contrib/scriptable/MySpecTclApp.h,v retrieving revision 1.1 retrieving revision 1.1.2.1 diff -C2 -d -r1.1 -r1.1.2.1 *** MySpecTclApp.h 12 Dec 2003 17:55:15 -0000 1.1 --- MySpecTclApp.h 29 May 2007 16:03:37 -0000 1.1.2.1 *************** *** 39,46 **** { private: ! CModuleDictionary* m_pDictionary; ! CUnpackerCommand* m_pUnpackerCommand; ! CModuleCommand* m_pModuleCommand; ! CUnpacker* m_pUnpacker; public: //Default constructor alternative to compiler provided default constructor --- 39,43 ---- { private: ! public: //Default constructor alternative to compiler provided default constructor Index: CCAENV830Creator.cpp =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/contrib/scriptable/CCAENV830Creator.cpp,v retrieving revision 1.1 retrieving revision 1.1.2.1 diff -C2 -d -r1.1 -r1.1.2.1 *** CCAENV830Creator.cpp 12 Dec 2003 17:55:15 -0000 1.1 --- CCAENV830Creator.cpp 29 May 2007 16:03:31 -0000 1.1.2.1 *************** *** 274,278 **** DAMAGES. ! END OF TERMS AND CONDITIONS */ --- 274,278 ---- DAMAGES. ! END OF TERMS AND CONDITIONS ' */ *************** *** 284,287 **** --- 284,288 ---- #include <TCLResult.h> + #include <assert.h> /*! *************** *** 289,300 **** */ ! CCAENV830Creator::CCAENV830Creator() : ! CModuleCreator("caenv830") { } /*! Destructor */ ! CCAENV830Creator::~CCAENV830Creator() {} /*! --- 290,305 ---- */ ! CCAENV830Creator::CCAENV830Creator(const string& rName, ! CModuleCommand* pCommand) : ! CModuleCreator( rName, pCommand) { + assert(pCommand); } /*! Destructor */ ! CCAENV830Creator::~CCAENV830Creator() ! { ! } /*! *************** *** 331,335 **** Create a new scaler module. */ ! CModule* CCAENV830Creator::Create(CTCLInterpreter& rInterp, const string& rName) --- 336,340 ---- Create a new scaler module. */ ! CSegmentUnpacker* CCAENV830Creator::Create(CTCLInterpreter& rInterp, const string& rName) Index: CModule.cpp =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/contrib/scriptable/CModule.cpp,v retrieving revision 1.1 retrieving revision 1.1.2.1 diff -C2 -d -r1.1 -r1.1.2.1 *** CModule.cpp 12 Dec 2003 17:55:15 -0000 1.1 --- CModule.cpp 29 May 2007 16:03:33 -0000 1.1.2.1 *************** *** 1,406 **** ! #include "CModule.h" ! #include "CConfigurationParameter.h" ! #include "CBoolConfigParam.h" ! #include "CIntConfigParam.h" ! #include "CIntArrayParam.h" ! #include "CStringArrayparam.h" ! #include "CStringConfigParam.h" ! ! #include <TCLInterpreter.h> ! #include <TCLResult.h> ! #include <TCLString.h> ! #include <Analyzer.h> ! #include <Histogrammer.h> ! #include <BufferDecoder.h> ! #include <algorithm> ! ! ! /// Local visitor class to build up the string of parameter name/formats. ! ! class Visitor { ! CTCLString& m_rParams; ! public: ! Visitor(CTCLString& rParams) : ! m_rParams(rParams) {} ! void operator()(pair<string, CConfigurationParameter*> p) { ! m_rParams.StartSublist(); ! m_rParams.AppendElement(p.first); ! m_rParams.AppendElement(p.second->GetParameterFormat()); ! m_rParams.EndSublist(); ! } ! }; ! ! /*! ! Constructs a module. The module creates a command ! of the same name. ! \param rName (const string [in]): The name of the module/command. ! \param rInterp (CTCLInterpreter& [in]): The interpreter on which the ! command will be registered. ! ! */ ! CModule::CModule (const string& rName, ! CTCLInterpreter& rInterp) : ! CTCLProcessor(rName, &rInterp), ! m_sName(rName) ! { ! Bind(&rInterp); ! Register(); ! } ! ! /*! ! Destroys the module. ! */ ! CModule::~CModule ( ) //Destructor - Delete dynamic objects ! { ! } ! ! // Functions for class CModule ! ! /*! ! ! Executes commands associated with this module ! Commands are divided into subcommands based on the ! second parameter: ! - config - configures the command. The configuration ! mechanism used is identical to that of the module reader. ! There are int, bool and int array parameters and added ! to them, string parameters and string array parameters. ! -list - lists the current configuration. ! - anything else is dispatched to the virtual function: ! OtherSubcommands ! ! \param rInterp (CTCLInterpreter& [in]): The interpreter that's running the ! command. ! \param rResult (CTCLResult& [out]): The result string: This is either empty if ! the command worked, or alternatively an error message describing why the ! command failed. ! \param argc (int [in]): Number of parameters in the command. ! \praam argv (char** [in]): The parameters. ! \return One of: ! - TCL_OK - If the command worked. ! - TCL_ERROR - If the command failed (rResult has a stringified reason for the ! error). ! \note The first parameter is the command verb. ! ! */ ! int ! CModule::operator()(CTCLInterpreter& rInterp, CTCLResult& rResult, ! int argc, char** argv) ! { ! int nStatus = TCL_OK; // Assume the command works. ! argc--; argv++; // Skip the verb. ! ! // The next parameter, if it exists should be a subcommand keyword: ! ! if(!argc) { // No command keyword. ! nStatus = TCL_ERROR; ! rResult += "Insufficient command parameters:\n"; ! rResult += Usage(); ! } ! else { // dispatch based on the keyword: ! string subcommand(*argv); // Extract the subcommand: ! if(subcommand == string("config")) { ! argc--; argv++; ! nStatus = Configure(rInterp, rResult, argc, argv); ! } ! else if (subcommand == string("cget")) { ! argc--; argv++; ! nStatus = ListConfig(rInterp, rResult, argc, argv); ! } ! else { ! nStatus = OtherSubcommands(rInterp, rResult, argc, argv); ! } ! } ! ! return nStatus; ! } ! ! /*! ! ! Configures the module, by taking keyword value pairs, matching the keyword ! against a configuration parameter and setting the parameter according to the ! value. ! \param rInterp (CTCLInterpreter& [in]): The interpreter that is executing the ! command. ! \param rResult (CTCLResult& [out]): The result string that will be filled with ! any descriptive error text that may be appropriate. ! \param argc (int [in]): Count of the remaining parameters after the "config" keyword. ! \param argv (char** [in]): Pointers to the remaining parameters after "config" keyword. ! ! \return One of: ! - TCL_OK - If the command worked. ! - TCL_ERROR - If the command failed. ! ! */ ! int ! CModule::Configure(CTCLInterpreter& rInterp, CTCLResult &rResult, ! int argc, char** argv) ! { ! int nStatus = TCL_OK; // Assume everything works. ! ! // Parameters must come in pairs, and there must be at least one pair. ! ! if((argc % 2) || (argc == 0)) { // Nonzero if odd... ! nStatus = TCL_ERROR; ! rResult = "config requires a set of keyword value pairs\n"; ! rResult += Usage(); ! } else { // At least the count is ok. ! while(argc) { ! string key(*argv); ! argc--; argv++; ! ! char* value(*argv); ! argc--; argv++; ! ! // See if we can find the keyword: ! ! ConfigurationIterator i = m_Parameters.find(key); ! if(i != m_Parameters.end()) { ! CConfigurationParameter* pParam(i->second); ! int s = (*pParam)(rInterp, rResult, value); ! if (s != TCL_OK) nStatus = s; ! } ! else { // Unrecognized configuration keyword. ! rResult += "Unrecognized configuration keyword: "; ! rResult += key; ! rResult += "ignored.\n"; ! nStatus = TCL_ERROR; ! } ! } ! } ! return nStatus; ! } ! ! /*! ! ! Lists the current configuration of the ! object. The configuration is returned in the result string as a list. ! Each list is itself a 2 element sublist consisting of the parameter keyword ! and current value (formatted as a valid tcl list element). ! ! \param rInterp (CTCLInterpreter& [in]): The interpreter that is running this command. ! \param rResult (CTCLResult& [out]): The result string returned. If everything works ! this is the configuration as described above. If there's a failure, this is the error ! string. ! \param argc (int [in]): The number of parameters remaining on the command line ! following the "cget' subcommand. ! \param argv (char** [in]): List of pointers to the remaining parameters. ! \return One of: ! - TCL_OK - On success. ! - TCL_ERROR - on failure. ! ! */ ! int ! CModule::ListConfig(CTCLInterpreter& rInterp, CTCLResult& rResult, int argc, char** argv) ! { ! int nStatus = TCL_OK; ! ! // There should be no remaining parameters: ! ! if(argc) { ! rResult += "Excessive parameters on the command line\n"; ! rResult += Usage(); ! nStatus = TCL_ERROR; ! } ! else { ! CTCLString configList; ! ConfigurationIterator i = m_Parameters.begin(); ! while(i != end()) { ! CConfigurationParameter* pParam(i->second); ! configList.StartSublist(); ! configList.AppendElement(pParam->getSwitch()); ! configList.AppendElement(pParam->getValue()); ! configList.EndSublist(); ! i++; ! } ! rResult = (const char*)configList; ! } ! return nStatus; ! } ! ! /*! ! ! Called when an unrecognized subcommand ! is supplied. This is a hook to extend the ! command processing of the module to support ! user specirfic requirements. ! ! The default action is to return an error... since the keyword is not recognized. ! \param rInterp (CTCLInterpreter& [in]): The interpreter that's running the command. ! \param rResult (CTCLResult& [out]): The result string -- an error message. ! \param argc (int [in]): Count of remaining command line parameters. The ! next parameter is the subcommand keyword. ! \param argv (char** [in]): Pointers to the remaining parameters. ! \return TCL_ERROR - since this should not be called except when the command ! keyword is not recognized. ! */ ! int ! CModule::OtherSubcommands(CTCLInterpreter& rInterp, ! CTCLResult& rResult, ! int argc, char** argv) ! { ! rResult += "Unrecognized subcommand keyword: "; ! rResult += *argv; ! rResult += "\n"; ! return TCL_ERROR; ! } ! ! ! ! /*! ! ! Add an integer configuration parameter ! to the module. ! \param rName (const string& [in]): The name of the configuration parameter. ! \param default (int [in] = 0): The default value of the parameter if none is asssigned. ! \return CIntConfigParam* - pointer to the new configuration parameter. ! \ ! */ ! CIntConfigParam* ! CModule::AddIntParam(const string& rName, int def) ! { ! CIntConfigParam* pParam = new CIntConfigParam(rName, def); ! AddParameter(pParam); ! return pParam; ! } ! ! /*! ! ! Adds a boolean config parameter ! to the configuration list. ! \param rName (const string & [in]): The name of the parameter. ! \param default (bool [in] = false): Default value of the parameter. ! \return CBoolConfigParam* - Pointer to the newly created parame4ter. ! ! */ ! CBoolConfigParam* ! CModule::AddBoolParam(const string& rName, bool def) ! { ! CBoolConfigParam* pParam = new CBoolConfigParam(rName, def); ! AddParameter( pParam); ! ! return pParam; ! } ! ! /*! ! ! Add an integer array parameter to the configuration ! parameter set. ! \param rName (const string & [in]): The name of the parameter. ! \param nSize (int [in]): The size of the array. ! \param default (int [in] = 0): The initial value given to all of the array elements. ! \return CIntArrayParam* - pointer to the newly created parameter. ! */ ! CIntArrayParam* ! CModule::AddIntArrayParam(const string& rName, int nSize, int def) ! { ! CIntArrayParam* pParam = new CIntArrayParam(rName, nSize, def); ! AddParameter(pParam); ! ! return pParam; ! } ! ! /*! ! ! Adds a string valued configuration ! parameter to the config set. ! \param rName (const string& [in]) - name of the parameter. ! \return A pointer to the newly created parameter. ! ! */ ! CStringConfigParam* ! CModule::AddStringParam(const string& rName) ! { ! CStringConfigParam* pParam = new CStringConfigParam(rName); ! AddParameter(pParam); ! ! return pParam; ! } ! ! /*! ! ! Adds a string array valued configuration ! parameter to the module's parameter set. ! \param rName (const string& [in]): The name of the parameter. ! \param nSize (int [in]): The number of the elements in the array. ! \return A pointer to the newly created parameter. ! */ ! CStringArrayparam* ! CModule::AddStringArrayParam(const string& rName, int nSize) ! { ! CStringArrayparam* pParam = new CStringArrayparam(rName, nSize); ! AddParameter(pParam); ! ! return pParam; ! } ! ! /*! ! Adds a parameter to the parameter list. While this can be used ! from the outside, it is also used internally to add parameters that have ! been created by the specific parameter add functions. ! \param pParam (CConfigurationParameter* [in]): Pointer to the parameter to add. ! */ ! void ! CModule::AddParameter(CConfigurationParameter* pParam) ! { ! string key(pParam->getSwitch()); ! if (m_Parameters.find(key) != m_Parameters.end()) { ! string error("Duplicate parameter name: "); ! error += key; ! throw error; ! } ! else { ! m_Parameters[key] = pParam; ! } ! } ! /*! ! ! Returns the command usage. ! Note that all of the parameter keywords are listed along with their formats ! We use for_each to do this. ! ! */ ! string ! CModule::Usage() ! { ! string u; ! CTCLString params; ! Visitor v(params); // Visits each parameter in the map. ! for_each(m_Parameters.begin(), m_Parameters.end(), v); ! ! u += "Usage: \n"; ! u += " "; ! u += getName(); ! u += " config "; ! u += string((const char*)params); ! u += "\n"; ! u += " "; ! u += getName(); ! u += " cget\n"; ! ! return u; ! } ! /*! ! Returns a begin iterator for the parameter map: ! */ ! CModule::Configuration::iterator ! CModule::begin() ! { ! return m_Parameters.begin(); ! } ! /*! ! Returns an end of iteration iterator for the parameter map: ! */ ! CModule::Configuration::iterator ! CModule::end() ! { ! return m_Parameters.end(); ! } ! /*! ! Returns the number of configuration parameters. ! */ ! int ! CModule::size() ! { ! return m_Parameters.size(); ! } --- 1,212 ---- ! ! ! /* ! Implementation file for CModule for a description of the ! class see CModule.h ! */ ! ! ////////////////////////// FILE_NAME.cpp /////////////////////////// ! ! // Include files required: ! ! #include "CModule.h" ! #include <Histogrammer.h> ! #include <Parameter.h> ! #include <RangeError.h> ! #include <Globals.h> ! ! // Static attribute storage and initialization for CModule ! ! /*! ! Create an object of type CModule ! */ ! CModule::CModule (const string& rName, CTCLInterpreter& rInterp) : ! CSegmentUnpacker(rName, rInterp) ! { ! } ! ! /*! ! Called to destroy an instance of CModule ! */ ! CModule::~CModule ( ) ! { ! } ! ! // Functions for class CModule ! ! /*! ! ! Description: ! ! Creates a new parameter map. ! - Any existing parameter map is discarded. ! - A new parameter map of the specified size is ! created and initialized such that attempts to ! do channel->id translations for all channels ! will produce -1 (undefined). ! ! ! \pre none ! ! \post m_ParameterMap.size() == nMapSize ! ! Parameters: ! ! \param nMapSize (int [in]): ! Number of elements in the map. ! ! \return void ! NONE ! ! \throw string ! - "Map sizes cannot be negative" ! ! Pseudo code: ! ! \verbatim ! Clear m_ParameterMap ! for i =0; i < nMapSize; i++ ! push_back -1 to m_ParameterMap ! ! \endverbatim ! ! */ ! void ! CModule::CreateMap(int nMapSize) ! { ! ! if(nMapSize < 0) { ! throw string("Map sizes cannot be negative"); ! } ! // Clear Parameter map: ! ! if(!m_ParameterMap.empty()) { ! m_ParameterMap.erase(m_ParameterMap.begin(), ! m_ParameterMap.end()); ! } ! // Create a map full of undefineds: ! ! for(int i=0; i < nMapSize; i++) { ! m_ParameterMap.push_back(-1); ! } ! } ! ! /*! ! ! Description: ! ! Define a mapping between a channel and a SpecTcl ! parameter name. If the channel number is larger than the ! map size a CRangeError Exception is thrown. ! If the parameter name does not correspond to an ! existing SpecTcl parameter, the map entry remains ! undefined. ! ! \pre none ! ! \post none ! ! Parameters: ! ! \param nChannel (int [in]): ! Number of the channel to map. ! \param sName (const string& [in]): ! Name of the spectcl parameter that should ! be bound to this entry. ! ! \return void ! ! \throw CRangeError ! ! Pseudo code: ! ! \verbatim ! if nChannel < m_ParameterMap size ! pParameter = LocateParameter(sName) ! if(pParameter) ! m_ParameterMap[nChannel] = pParameter.id ! else ! m_ParameterMap[nChanne] = undefined ! else ! throw CRangeError ! \endverbatim ! ! */ ! void ! CModule::MapElement(int nChannel, const string& sName) ! { ! ! // Ensure nChannel is in the range of the map: ! ! if((nChannel < m_ParameterMap.size()) && (nChannel >= 0)) { ! ! // Find the parameter: ! ! CHistogrammer* pHistogrammer = (CHistogrammer*)gpEventSink; ! CParameter* pParameter = pHistogrammer->FindParameter(sName); ! ! // Set map entry if not null else set map to undefined (-1) ! ! if(pParameter) { ! m_ParameterMap[nChannel] = pParameter->getNumber(); ! } ! else { ! m_ParameterMap[nChannel] = -1; ! } ! ! } ! else { // Out of range!! ! throw CRangeError(0, m_ParameterMap.size(), nChannel, "CModule::MapElement"); ! } ! } ! ! /*! ! ! Description: ! ! Returns the SpecTcl parameter id to ! which a channel maps. ! - If the channel is out of range a ! CRangeError is thrown ! - It is possible to return -1 which means there ! is no SpecTcl parameter that corresponds to ! this channel. ! ! \pre none ! ! \post none ! ! Parameters: ! ! \param nChannel (int [in]): ! Number of the channel to translate. ! ! \return int ! \retval -1 The channel has no SpecTcl parameter. ! \retval != 0 The parameter id (index into rEvent) that ! corresponds to nChannel. ! ! \throw CRangeError ! ! Pseudo code: ! ! \verbatim ! if nChannel < size of m_ParameterMap ! return m_ParameterMap[i] ! else ! throw CRangeError ! \endverbatim ! ! */ ! int ! CModule::Id(int nChannel) ! { ! // Range check the lookup: ! ! if((nChannel < m_ParameterMap.size()) && (nChannel >= 0)) { ! return m_ParameterMap[nChannel]; ! } ! else { ! throw CRangeError(0, m_ParameterMap.size(), nChannel, "CModule::Id()"); ! } ! } Index: CModuleDictionary.h =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/contrib/scriptable/CModuleDictionary.h,v retrieving revision 1.1 retrieving revision 1.1.2.1 diff -C2 -d -r1.1 -r1.1.2.1 *** CModuleDictionary.h 12 Dec 2003 17:55:15 -0000 1.1 --- CModuleDictionary.h 29 May 2007 16:03:36 -0000 1.1.2.1 *************** *** 16,19 **** --- 16,20 ---- class CModule; + class CSegmentUnpacker; /*! *************** *** 25,29 **** { public: ! typedef map<string, CModule*> ModuleMap; typedef ModuleMap::iterator ModuleIterator; --- 26,30 ---- { public: ! typedef map<string, CSegmentUnpacker*> ModuleMap; typedef ModuleMap::iterator ModuleIterator; *************** *** 55,59 **** public: ! void Add (CModule* pModule) ; ModuleIterator Find (const string& rName) ; void Delete (ModuleIterator iModule) ; --- 56,60 ---- public: ! void Add (CSegmentUnpacker* pModule) ; ModuleIterator Find (const string& rName) ; void Delete (ModuleIterator iModule) ; Index: CCAENV830Module.cpp =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/contrib/scriptable/CCAENV830Module.cpp,v retrieving revision 1.1 retrieving revision 1.1.2.1 diff -C2 -d -r1.1 -r1.1.2.1 *** CCAENV830Module.cpp 12 Dec 2003 17:55:15 -0000 1.1 --- CCAENV830Module.cpp 29 May 2007 16:03:32 -0000 1.1.2.1 *************** *** 316,320 **** CCAENV830Module::~CCAENV830Module() ! {} /*! Get the module type. --- 316,321 ---- CCAENV830Module::~CCAENV830Module() ! { ! } /*! Get the module type. Index: CCAENV830Module.h =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/contrib/scriptable/CCAENV830Module.h,v retrieving revision 1.1 retrieving revision 1.1.2.1 diff -C2 -d -r1.1 -r1.1.2.1 *** CCAENV830Module.h 12 Dec 2003 17:55:15 -0000 1.1 --- CCAENV830Module.h 29 May 2007 16:03:32 -0000 1.1.2.1 *************** *** 274,280 **** DAMAGES. ! END OF TERMS AND CONDITIONS */ #ifndef __CCAENV830MODULE_H #define __CCAENV830MODULE_H --- 274,288 ---- DAMAGES. ! END OF TERMS AND CONDITIONS ' */ + /*! + This is a dummy unpacker for the CAEN v830 scaler. + it does nothing, but is necessary in order to make a single + config file work for both readout and SpecTcl. + + */ + + #ifndef __CCAENV830MODULE_H #define __CCAENV830MODULE_H *************** *** 304,313 **** class CHistogrammer; - /*! - This is a dummy unpacker for the CAEN v830 scaler. - it does nothing, but is necessary in order to make a single - config file work for both readout and SpecTcl. - - */ class CCAENV830Module : public CModule { --- 312,315 ---- Index: CModule.h =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/contrib/scriptable/CModule.h,v retrieving revision 1.1 retrieving revision 1.1.2.1 diff -C2 -d -r1.1 -r1.1.2.1 *** CModule.h 12 Dec 2003 17:55:15 -0000 1.1 --- CModule.h 29 May 2007 16:03:33 -0000 1.1.2.1 *************** *** 1,131 **** #ifndef __CMODULE_H //Required for current class #define __CMODULE_H ! #ifndef __CTCLPROCESSOR_H ! #include "TCLProcessor.h" #endif #ifndef __STL_STRING ! #include <string> //Required for include files #define __STL_STRING #endif ! #ifndef __STL_MAP ! #include <map> ! #define __STL_MAP ! #endif ! ! #ifndef __TRANSLATORPOINTER_H ! #include "TranslatorPointer.h" #endif - // Forward class definitions: ! class CConfigurationParameter; ! class CBoolConfigParam; ! class CStringConfigParam; ! class CIntConfigParam; ! class CIntArrayParam; ! class CStringArrayparam; ! class CTCLInterpreter; ! class CTCLResult; ! class CAnalyzer; ! class CHistogrammer; ! class CBufferDecoder; ! class CEvent; ! ! /*! ! Abstract base class representing unpackers for data ! put in the event stream by a module. Module objects ! have two stereotypes: ! - They are commands that can be used to configure ! the module (for example assign parameter names ! to the ! ! */ ! class CModule : public CTCLProcessor { - public: - typedef map<string, CConfigurationParameter*> Configuration; - typedef Configuration::iterator ConfigurationIterator; - private: - string m_sName; //!< Module name. - Configuration m_Parameters; //!< Current module configuration. - - public: - // Constructors and other cannonical operations: - - CModule (const string& rName, - CTCLInterpreter& rInterp); - virtual ~ CModule ( ); private: ! CModule (const CModule& aCModule ); ! CModule& operator= (const CModule& aCModule); ! int operator== (const CModule& aCModule) const; ! int operator!= (const CModule& rhs) const; ! public: ! // Selectors: public: ! //Get accessor function for non-static attribute data member ! string getName() const ! { ! return m_sName; ! } ! Configuration getParameters() const ! { ! return m_Parameters; ! } ! ! // Attribute mutators: ! ! protected: ! ! //Set accessor function for non-static attribute data member ! ! void setName (const string am_sName) ! { ! m_sName = am_sName; ! } ! void setParameters(const Configuration& rConfig) { ! m_Parameters = rConfig; ! } ! ! ! // Class operations: ! public: ! virtual string getType() const = 0; ! virtual int operator() (CTCLInterpreter& rInterp, CTCLResult& rResult, ! int argc, char** argv) ; ! virtual int Configure (CTCLInterpreter& rInterp, CTCLResult &rResult, ! int argc, char** argv) ; ! virtual int ListConfig (CTCLInterpreter& rInterp, CTCLResult& rResult, ! int argc, char** argv) ; ! virtual int OtherSubcommands (CTCLInterpreter& rInterp, ! CTCLResult& rResult, ! int argc, char** argv) ; ! virtual TranslatorPointer<UShort_t> ! Unpack (TranslatorPointer<UShort_t> pBuffer, ! CEvent& rEvent, ! CAnalyzer& rAnalyzer, ! CBufferDecoder& rDecoder) = 0 ; ! virtual void Setup (CAnalyzer& rAnalyzer, ! CHistogrammer& rHistogrammer) = 0; ! CIntConfigParam* AddIntParam (const string &rName, int def = 0) ; ! CBoolConfigParam* AddBoolParam (const string& rName, ! bool def = false) ; ! CIntArrayParam* AddIntArrayParam (const string&rName, int nSize, ! int def = 0) ; ! CStringConfigParam* AddStringParam (const string& rName) ; ! CStringArrayparam* AddStringArrayParam (const string& rName, ! int nSize) ; ! void AddParameter(CConfigurationParameter* pParam); ! Configuration::iterator begin(); ! Configuration::iterator end(); ! int size(); ! virtual string Usage () ; // }; --- 1,75 ---- + /*! + This is an abstract base class that is the base + class for individual readout modules. + This class provides support for a parameter + map. Parameter maps provide a mapping + between module chnannel numbers and + SpecTcl parameter ids. + + */ + + // Author: + // Ron Fox + // NSCL + // Michigan State University + // East Lansing, MI 48824-1321 + // mailto:fo...@ns... + // + // Copyright + #ifndef __CMODULE_H //Required for current class #define __CMODULE_H ! // ! // Include files: ! // ! ! //Required for base classes ! #ifndef __CSEGMENTUNPACKER_H //CSegmentUnpacker ! #include "CSegmentUnpacker.h" ! #endif ! ! #ifndef __TCLPROCESSOR_H ! #include <TCLProcessor.h> #endif #ifndef __STL_STRING ! #include <string> #define __STL_STRING #endif ! #ifndef __STL_VECTOR ! #include <vector> ! #define __STL_VECTOR #endif ! class CModule : public CSegmentUnpacker { private: ! ! vector<int> m_ParameterMap; //!< Maps channel # -> parameter id. ! public: + // Constructors and other canonical operations. ! CModule (const string& rName,CTCLInterpreter& rInterp); //!< Constructor. ! ~CModule ( ); //!< Destructor. ! private: ! CModule (const CModule& rSource ); //!< Copy construction. ! CModule& operator= (const CModule& rhs); //!< Assignment. ! int operator== (const CModule& rhs) const; //!< == comparison. ! int operator!= (const CModule& rhs) const; //!< != comparison. ! public: ! ! public: ! ! void CreateMap (int nMapSize) ; //!< Define an empty map. ! void MapElement (int nChannel, const string& sName) ; //!< Make a mapping. ! int Id (int nChannel) ; //!< Translate map. ! }; Index: CCAENV830Creator.h =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/contrib/scriptable/CCAENV830Creator.h,v retrieving revision 1.1 retrieving revision 1.1.2.1 diff -C2 -d -r1.1 -r1.1.2.1 *** CCAENV830Creator.h 12 Dec 2003 17:55:15 -0000 1.1 --- CCAENV830Creator.h 29 May 2007 16:03:31 -0000 1.1.2.1 *************** *** 274,280 **** DAMAGES. ! END OF TERMS AND CONDITIONS */ #ifndef __CCAENV830CREATOR_H #define __CCAENV830CREATOR_H --- 274,287 ---- DAMAGES. ! END OF TERMS AND CONDITIONS ' */ + /*! + \class CCAENV830Creator + \file CCAENV830Creator.h + This is a dummy creator for the CAEN v830 scaler module. + It is defined in order to support a common specification script + for SpectTcl and the Readout engine. + */ #ifndef __CCAENV830CREATOR_H #define __CCAENV830CREATOR_H *************** *** 296,310 **** class CModule; class CTCLInterpreter; ! class CTCLResult; - /*! - This is a dummy creator for the CAEN v830 scaler module. - It is defined in order to support a common specification script - for SpectTcl and the Readout engine. - */ class CCAENV830Creator : public CModuleCreator { public: ! CCAENV830Creator(); ~CCAENV830Creator(); CCAENV830Creator (const CCAENV830Creator& rhs ); --- 303,313 ---- class CModule; class CTCLInterpreter; ! class CModuleCommand; ! class CCAENV830Creator : public CModuleCreator { public: ! CCAENV830Creator(const string& rName, CModuleCommand* pCommand); ~CCAENV830Creator(); CCAENV830Creator (const CCAENV830Creator& rhs ); *************** *** 317,321 **** public: ! CModule* Create (CTCLInterpreter& rInterp, const string& rName); virtual string TypeInfo() const; }; --- 320,324 ---- public: ! CSegmentUnpacker* Create (CTCLInterpreter& rInterp, const string& rName); virtual string TypeInfo() const; }; Index: MySpecTclApp.cpp =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/contrib/scriptable/MySpecTclApp.cpp,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -C2 -d -r1.1.2.2 -r1.1.2.3 *** MySpecTclApp.cpp 3 May 2007 20:51:43 -0000 1.1.2.2 --- MySpecTclApp.cpp 29 May 2007 16:03:36 -0000 1.1.2.3 *************** *** 2,7 **** ////////////////////////// FILE_NAME.cpp ///////////////////////////////////////////////////// - - #include <config.h> #include "MySpecTclApp.h" #include "EventProcessor.h" --- 2,5 ---- *************** *** 9,20 **** #include "CScriptableUnpacker.h" #include <Event.h> #include <Globals.h> - #ifdef HAVE_STD_NAMESPACE - using namespace std; - #endif - - // Function: // void CreateAnalysisPipeline(CAnalyzer& rAnalyzer) --- 7,14 ---- #include "CScriptableUnpacker.h" + #include <Event.h> #include <Globals.h> // Function: // void CreateAnalysisPipeline(CAnalyzer& rAnalyzer) *************** *** 227,231 **** CMySpecTclApp::SelectDecoder(CAnalyzer& rAnalyzer) { CTclGrammerApp::SelectDecoder(rAnalyzer); - } --- 221,224 ---- |