Commit 0ddf3402 authored by LorenzoMonti's avatar LorenzoMonti
Browse files

mapping algorithm and documentation improved

parent d8603021
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -984,7 +984,6 @@ private:
    /** Number of feeds of the receiver */
    const unsigned short m_number_of_feeds;
     

    /** The IP address of the switches board */
    const std::string m_switch_ip; 

+11 −6
Original line number Diff line number Diff line
@@ -1578,6 +1578,8 @@ ReceiverControl::FeedValues ReceiverControl::feedValues(
    std::string vg_selector;               // A03: it allows to select the value requested for a given stadium
    std::string quantity_selector;         // A03: it allows to select the value requested for a given stadium
    
    const unsigned short feeds_per_pcb = ceil(m_number_of_feeds/5.0f); 
    
    //cout << "m_number_of_feeds " << m_number_of_feeds << endl;
    //cout << "stage_number " << stage_number << endl;
    //cout << "quantity" << quantity << endl;
@@ -1656,6 +1658,8 @@ ReceiverControl::FeedValues ReceiverControl::feedValues(
            throw ReceiverControlEx("ReceiverControl::stageValues(): the quantity requested does not exist.");
    }
    
    cout << quant << " " << quantity_selector << endl;

    // Left channel values, right channel values, left channel disorderly values, right channel disorderly values
    std::vector<double> lvalues, rvalues, ldvalues, rdvalues;
    std::vector<BYTE> parameters;
@@ -1733,7 +1737,7 @@ ReceiverControl::FeedValues ReceiverControl::feedValues(
        rvalues.push_back(rdvalues[8]);
    }
    else 
        if(ldvalues.size() > 50) {
        if(m_number_of_feeds > 50) {
        	   cout << "feeds > 50" << endl;
            cout << "ldvalues.size()" << ldvalues.size() << endl;
            cout << "rdvalues.size()" << rdvalues.size() << endl;
@@ -1753,18 +1757,19 @@ ReceiverControl::FeedValues ReceiverControl::feedValues(
	 cout << "rvalues.size() " << rvalues.size() << endl;
	 cout << "m_number_of_feeds " << m_number_of_feeds << endl;
    
    
    for(std::size_t i = 0; i < lvalues.size(); i++)
    	cout << i << " lvalues " << lvalues[i] << endl;
    for(std::size_t j = 0; j < rvalues.size(); j++)
    	cout  << j << "rvalues " << rvalues[j] << endl;
    /*
    if(lvalues.size() < m_number_of_feeds || rvalues.size() < m_number_of_feeds)
    
    if(lvalues.size() < feeds_per_pcb || rvalues.size() < feeds_per_pcb)
        throw ReceiverControlEx("Error: the vector size doesn't match the number of feeds.");
	*/
    // Add the first "number_of_feeds" converted items of lvalues and rvalues
	
    // Add the first "feeds_per_pcb" converted items of lvalues and rvalues
    FeedValues values;
    try {
        for(size_t idx=0; idx<m_number_of_feeds; idx++) {
        for(size_t idx=0; idx<feeds_per_pcb; idx++) {
            (values.left_channel).push_back(converter != NULL ? converter(lvalues[idx]) : lvalues[idx]);
            (values.right_channel).push_back(converter != NULL ? converter(rvalues[idx]) : rvalues[idx]);                   
        }
+4 −4
Original line number Diff line number Diff line
@@ -31,8 +31,8 @@ public:
            SRTQBandCore* core,
            const IRA::ReceiverControl::FetValue& control,
            const DWORD ifs,
            const DWORD stage
    ) :  m_pCore(core), m_control(control), m_ifs(ifs), m_stage(stage)
            const DWORD feed
    ) :  m_pCore(core), m_control(control), m_ifs(ifs), m_feed(feed)
	{
		AUTO_TRACE("DevIOLNAControls::DevIOLNAControls()");
        m_val.length(m_pCore->getFeeds());
@@ -62,7 +62,7 @@ public:
	ACS::doubleSeq read(ACS::Time& timestamp) throw (ACSErr::ACSbaseExImpl)
	{
      // In pCore I need a method to get the vector of values (An extension, so I can ereditate from ComponentCore)
		m_val=m_pCore->getStageValues(m_control, m_ifs, m_stage);
		m_val=m_pCore->getFeedValues(m_control, m_ifs, m_feed);
		timestamp=getTimeStamp();  // Completion time
		return m_val;
	}
@@ -80,7 +80,7 @@ private:
	ACS::doubleSeq  m_val;
	IRA::ReceiverControl::FetValue m_control;
	DWORD m_ifs;
   DWORD m_stage;
   DWORD m_feed;
};

#endif
+10 −10
Original line number Diff line number Diff line
@@ -20,8 +20,8 @@
 * <h2>Methods defined in this class</h2>
 * <ul>
 *      <li>virtual void initialize(...): it initializes the object</li>
 *      <li>ACS::doubleSeq getStageValues(...): it returns for each feed the fet quantity value 
 *      <li>of a given channel (if) and stage</li>
 *      <li>ACS::doubleSeq getFeedValues(...): it returns for each feed per pcb the fet quantity value 
 *      <li>of a given channel </li>
 *      <li>void setMode(): it allows to change the operating mode of the receiver</li>
 *      <li>void updateVdLNAControls(): it reads and updates from the LNA control board the 
 *      <li>drain voltage values of the transistors</li>
@@ -93,15 +93,15 @@ public:
    virtual void initialize(maci::ContainerServices* services);


    /** Return for each feed the fet quantity value of a given channel (if) and stage. For
    /** Return for each feed the fet quantity value of a given channel. For
     *  instance, if you want to get the VD left channel values of all the feeds related to the amplifier stage N,
     *  you must call the method like so: stageValues(DRAIN_VOLTAGE, 0, N).
     *  you must call the method like so: feedValues(DRAIN_VOLTAGE, 0, N).
     *  @param quantity a FetValue: DRAIN_VOLTAGE, DRAIN_CURRENT or GATE_CURRENT 
     *  @param ifs the channel (0: LEFT, 1: RIGHT)
     *  @param stage the stage number (from 1 to 5)
     *  @return a doubleSeq of values for a given fet ``quantity``, channel and ``stage_number``.
     *  @param feed the feed number per pcb (from 1 to 5)
     *  @return a doubleSeq of values for a given fet ``quantity``, channel and ``feed_number``.
     */
    ACS::doubleSeq getStageValues(const IRA::ReceiverControl::FetValue& control, DWORD ifs, DWORD stage);
    ACS::doubleSeq getFeedValues(const IRA::ReceiverControl::FetValue& control, DWORD ifs, DWORD feed);


    /**
@@ -176,9 +176,9 @@ protected:

private:

    std::vector<IRA::ReceiverControl::StageValues> m_vdStageValues;
    std::vector<IRA::ReceiverControl::StageValues> m_idStageValues;
    std::vector<IRA::ReceiverControl::StageValues> m_vgStageValues;
    std::vector<IRA::ReceiverControl::FeedValues> m_vdFeedValues;
    std::vector<IRA::ReceiverControl::FeedValues> m_idFeedValues;
    std::vector<IRA::ReceiverControl::FeedValues> m_vgFeedValues;
};


+29 −35
Original line number Diff line number Diff line
@@ -15,14 +15,14 @@ SRTQBandCore::~SRTQBandCore() {}

void SRTQBandCore::initialize(maci::ContainerServices* services)
{
    m_vdStageValues = std::vector<IRA::ReceiverControl::StageValues>(NUMBER_OF_FEEDS);
    m_idStageValues = std::vector<IRA::ReceiverControl::StageValues>(NUMBER_OF_FEEDS);
    m_vgStageValues = std::vector<IRA::ReceiverControl::StageValues>(NUMBER_OF_FEEDS);
    m_vdFeedValues = std::vector<IRA::ReceiverControl::FeedValues>(NUMBER_OF_FEEDS);
    m_idFeedValues = std::vector<IRA::ReceiverControl::FeedValues>(NUMBER_OF_FEEDS);
    m_vgFeedValues = std::vector<IRA::ReceiverControl::FeedValues>(NUMBER_OF_FEEDS);

    CComponentCore::initialize(services);
}

ACS::doubleSeq SRTQBandCore::getStageValues(const IRA::ReceiverControl::FetValue& control, DWORD ifs, DWORD stage)
ACS::doubleSeq SRTQBandCore::getFeedValues(const IRA::ReceiverControl::FetValue& control, DWORD ifs, DWORD feed)
{
    baci::ThreadSyncGuard guard(&m_mutex);

@@ -30,12 +30,12 @@ ACS::doubleSeq SRTQBandCore::getStageValues(const IRA::ReceiverControl::FetValue
    values.length(getFeeds());
    cout << "getFeeds() " << getFeeds() << endl;
	 cout << "ifs " << ifs  << endl;
    cout << "stage " << stage << endl;
    cout << "feed " << feed << endl;
	 cout << "m_configuration.getIFs() " << m_configuration.getIFs()  << endl;
	 cout << "m_configuration.getFeeds()" << m_configuration.getFeeds() << endl;
    for(size_t i=0; i<getFeeds(); i++)
        values[i] = 0.0;
    if (ifs >= m_configuration.getIFs() || stage > NUMBER_OF_FEEDS || stage < 1)
    if (ifs >= m_configuration.getIFs() || feed > NUMBER_OF_FEEDS || feed < 1)
        return values;
    cout << "m_polarization[ifs] " << m_polarization[ifs] << endl;
	 cout << "Receivers::RCV_LCP " << Receivers::RCV_LCP << endl;
@@ -43,64 +43,58 @@ ACS::doubleSeq SRTQBandCore::getStageValues(const IRA::ReceiverControl::FetValue
    cout << "IRA::ReceiverControl::DRAIN_VOLTAGE " << IRA::ReceiverControl::DRAIN_VOLTAGE << endl;
    cout << "IRA::ReceiverControl::DRAIN_CURRENT " << IRA::ReceiverControl::DRAIN_CURRENT << endl;
        cout << "IRA::ReceiverControl::GATE_VOLTAGE " << IRA::ReceiverControl::GATE_VOLTAGE << endl;
	 cout << "m_vdStageValues[stage-1].left_channel.size() " << m_vdStageValues[stage-1].left_channel.size() << endl;
    //cout << "m_vdStageValues[stage-1].left_channel " << m_vdStageValues[stage-1].left_channel << endl;	 
	 cout << "m_idStageValues[stage-1].left_channel.size() " << m_idStageValues[stage-1].left_channel.size() << endl;
    //cout << "m_idStageValues[stage-1].left_channel " << m_idStageValues[stage-1].left_channel << endl;	 
	 cout << "m_vgStageValues[stage-1].left_channel.size() " << m_vgStageValues[stage-1].left_channel.size() << endl;
	 //cout << "m_vgStageValues[stage-1].left_channel " << m_vgStageValues[stage-1].left_channel << endl;
	 
	 cout << "m_vdStageValues[stage-1].right_channel.size() " << m_vdStageValues[stage-1].right_channel.size() << endl;
    //cout << "m_vdStageValues[stage-1].right_channel " << m_vdStageValues[stage-1].right_channel << endl;	 
	 cout << "m_idStageValues[stage-1].right_channel.size() " << m_idStageValues[stage-1].right_channel.size() << endl;
    //cout << "m_idStageValues[stage-1].right_channel " << m_idStageValues[stage-1].right_channel << endl;	 
	 cout << "m_vgStageValues[stage-1].right_channel.size() " << m_vgStageValues[stage-1].right_channel.size() << endl;
	 //cout << "m_vgStageValues[stage-1].right_channel " << m_vgStageValues[stage-1].right_channel << endl;
	 cout << "m_vdFeedValues[feed-1].left_channel.size() " << m_vdFeedValues[feed-1].left_channel.size() << endl;
	 cout << "m_idFeedValues[feed-1].left_channel.size() " << m_idFeedValues[feed-1].left_channel.size() << endl;
	 cout << "m_vgFeedeValues[feed-1].left_channel.size() " << m_vgFeedValues[feed-1].left_channel.size() << endl;

	 cout << "m_vdFeedValues[feed-1].right_channel.size() " << m_vdFeedValues[feed-1].right_channel.size() << endl;
	 cout << "m_idFeedValues[feed-1].right_channel.size() " << m_idFeedValues[feed-1].right_channel.size() << endl;
	 cout << "m_vgFeedeValues[feed-1].right_channel.size() " << m_vgFeedValues[feed-1].right_channel.size() << endl;
    
    // Left Channel
    if(m_polarization[ifs] == (long)Receivers::RCV_LCP) {
        if (control == IRA::ReceiverControl::DRAIN_VOLTAGE) {
        		if (getFeeds()>m_vdStageValues[stage-1].left_channel.size())
        		if (getFeeds()>m_vdFeedValues[feed-1].left_channel.size())
    				return values;
            for(size_t i=0; i<getFeeds(); i++) {
            	values[i] = (m_vdStageValues[stage-1]).left_channel[i];
            	values[i] = (m_vdFeedValues[feed-1]).left_channel[i];
            }
        }
        else {
            if (control == IRA::ReceiverControl::DRAIN_CURRENT) {
           		if (getFeeds()>m_idStageValues[stage-1].left_channel.size())
           		if (getFeeds()>m_idFeedValues[feed-1].left_channel.size())
    					return values;
               for(size_t i=0; i<getFeeds(); i++)
               	values[i] = (m_idStageValues[stage-1]).left_channel[i];
               	values[i] = (m_idFeedValues[feed-1]).left_channel[i];
            }
            else {
            	if (getFeeds()>m_vgStageValues[stage-1].left_channel.size())
            	if (getFeeds()>m_vgFeedValues[feed-1].left_channel.size())
    					return values;
               for(size_t i=0; i<getFeeds(); i++)
               	values[i] = (m_vgStageValues[stage-1]).left_channel[i];
               	values[i] = (m_vgFeedValues[feed-1]).left_channel[i];
            }
        }
    }
    // Right Channel
    if (m_polarization[ifs] == (long)Receivers::RCV_RCP) {
        if (control==IRA::ReceiverControl::DRAIN_VOLTAGE) {
        		if (getFeeds()>m_vdStageValues[stage-1].right_channel.size())
        		if (getFeeds()>m_vdFeedValues[feed-1].right_channel.size())
    				return values;
            for(size_t i=0;i<getFeeds();i++)
                values[i] = (m_vdStageValues[stage-1]).right_channel[i];
                values[i] = (m_vdFeedValues[feed-1]).right_channel[i];
        }
        else {
            if (control == IRA::ReceiverControl::DRAIN_CURRENT) {
            	if (getFeeds()>m_idStageValues[stage-1].right_channel.size())
            	if (getFeeds()>m_idFeedValues[feed-1].right_channel.size())
    					return values; 
               for(size_t i=0; i<getFeeds(); i++)
               	values[i] = (m_idStageValues[stage-1]).right_channel[i];
               	values[i] = (m_idFeedValues[feed-1]).right_channel[i];
            }
            else { 
            	if (getFeeds()>m_vgStageValues[stage-1].right_channel.size())
            	if (getFeeds()>m_vgFeedValues[feed-1].right_channel.size())
    					return values;
               for(size_t i=0; i<getFeeds(); i++)
               	values[i] = (m_vgStageValues[stage-1]).right_channel[i];
               	values[i] = (m_vgFeedValues[feed-1]).right_channel[i];
            }
       }
    }
@@ -200,7 +194,7 @@ void SRTQBandCore::updateVdLNAControls() throw (ReceiversErrors::ReceiverControl
    try {
        cout << "Number of feeds per pcb " << NUMBER_OF_FEEDS << endl;
        for(size_t i=0; i<NUMBER_OF_FEEDS; i++)
            m_vdStageValues[i] = m_control->feedValues(IRA::ReceiverControl::DRAIN_VOLTAGE, i+1, SRTQBandCore::voltageConverter);
            m_vdFeedValues[i] = m_control->feedValues(IRA::ReceiverControl::DRAIN_VOLTAGE, i+1, SRTQBandCore::voltageConverter);
    }
    catch (IRA::ReceiverControlEx& ex) {
        _EXCPT(ReceiversErrors::ReceiverControlBoardErrorExImpl,impl, "SRTQBandCore::updateVdLNAControls()");
@@ -217,7 +211,7 @@ void SRTQBandCore::updateIdLNAControls() throw (ReceiversErrors::ReceiverControl
    // Not under the mutex protection because the m_control object is thread safe (at the micro controller board stage)
    try {
        for(size_t i=0; i<NUMBER_OF_FEEDS; i++)
            m_idStageValues[i] = m_control->feedValues(IRA::ReceiverControl::DRAIN_CURRENT, i+1, SRTQBandCore::currentConverter);
            m_idFeedValues[i] = m_control->feedValues(IRA::ReceiverControl::DRAIN_CURRENT, i+1, SRTQBandCore::currentConverter);
    }
    catch (IRA::ReceiverControlEx& ex) {
        _EXCPT(ReceiversErrors::ReceiverControlBoardErrorExImpl, impl, "SRTQBandCore::updateIdLNAControls()");
@@ -234,7 +228,7 @@ void SRTQBandCore::updateVgLNAControls() throw (ReceiversErrors::ReceiverControl
    // Not under the mutex protection because the m_control object is thread safe (at the micro controller board stage)
    try {
        for(size_t i=0; i<NUMBER_OF_FEEDS; i++)
            m_vgStageValues[i] = m_control->feedValues(IRA::ReceiverControl::GATE_VOLTAGE, i+1, SRTQBandCore::voltageConverter);
            m_vgFeedValues[i] = m_control->feedValues(IRA::ReceiverControl::GATE_VOLTAGE, i+1, SRTQBandCore::voltageConverter);
    }
    catch (IRA::ReceiverControlEx& ex) {
        _EXCPT(ReceiversErrors::ReceiverControlBoardErrorExImpl, impl, "SRTQBandCore::updateVgLNAControls()");