Hi, Alexandre,

Thanks for the confirmation.  My apologies for messing up your patch. 
   Please don't hesitate if you find additional issues with FastBit. 
We would very much like to hear about your use case whenever you are 
ready to tell anyone about it.

John


On 11/11/2009 1:50 AM, Alexandre Maurel wrote:
> Hi John,
> 
> I've been to fast in my testing of version 1.1.3, in fact it is not 
> working !
> 
> But in the mean time I moved to version 1.1.4 and the problem is solved.
> 
> Thanks,
> 
> Alexandre
> 
> [email protected] a écrit :
>> Send FastBit-users mailing list submissions to
>>      [email protected]
>>
>> To subscribe or unsubscribe via the World Wide Web, visit
>>      https://hpcrdm.lbl.gov/cgi-bin/mailman/listinfo/fastbit-users
>> or, via email, send a message with subject or body 'help' to
>>      [email protected]
>>
>> You can reach the person managing the list at
>>      [email protected]
>>
>> When replying, please edit your Subject line so it is more specific
>> than "Re: Contents of FastBit-users digest..."
>>
>>
>> Today's Topics:
>>
>>    1. Re: problem in segment method (K. John Wu)
>>    2. Re: problem in segment method (Alexandre Maurel)
>>
>>
>> ----------------------------------------------------------------------
>>
>> Message: 1
>> Date: Tue, 10 Nov 2009 16:38:07 -0800
>> From: "K. John Wu" <[email protected]>
>> Subject: Re: [FastBit-users] problem in segment method
>> To: FastBit Users <[email protected]>
>> Message-ID: <[email protected]>
>> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
>>
>> Hi, Alexandre,
>>
>> My apologies.  I have messed up the modification you've given me earlier.
>>
>> We are very appreciative of your test data and test case.  The problem 
>> should be fixed now -- there was an extra ++j statement in my version 
>> of the code.
>>
>> The change has been rolled into the new release ibis1.1.4.  You may 
>> find it at 
>> <https://codeforge.lbl.gov/frs/download.php/124/fastbit-ibis1.1.4.tar.gz>.
>> A description of the changes is available at 
>> <https://codeforge.lbl.gov/frs/shownotes.php?release_id=123>.
>>
>> Please give this new code a try and let us know if you find any 
>> issues.  Thanks.
>>
>> John
>>
>>
>>
>> On 11/10/2009 7:41 AM, Alexandre Maurel wrote:
>>   
>>> Hi John,
>>>
>>> I update my code with fastbit snapshot fastbit-scm-2009-09-01.
>>> I did some test and it is not working for me.
>>>
>>> To make it work, I had to go back to the implementation of the segment 
>>> method I first sent.
>>>
>>> As attached document you will find the dataset I used for the test.
>>>
>>> The dataset contains 152 rows, when I run a query (select <all columns>) 
>>> that should return the complete dataset, 2 rows are missing.
>>>
>>> Here are the segment methods implementation I used to make it work.
>>>
>>> array_t<uint32_t>*
>>>    ibis::colFloats::segment(const array_t<uint32_t>* old) const {
>>>       array_t<uint32_t>* res = new array_t<uint32_t>;
>>>      // res->push_back(0); // the first number is always 0
>>>       uint32_t j = 0;
>>>       float target = *(array->begin());
>>>       const uint32_t nelm = array->size();
>>>
>>>       if (old != 0 && old->size()>2) {
>>>       // find segments with in the previously defined segments
>>>           for (uint32_t i=0; i<old->size()-1; ++i) {
>>>               if (j < nelm) {
>>>                   res->push_back(j);
>>>                   target = (*array)[j];
>>>                   ++ j;
>>>                   if (j < nelm) {
>>>                       do {
>>>                           while (j < (*old)[i+1] && (*array)[j] ==
>>>    target) ++
>>>    j;
>>>                           if (j < (*old)[i+1]) {
>>>                               res->push_back(j);
>>>                               if (j < nelm) {
>>>                                   target = (*array)[j];
>>>                                   ++ j;
>>>                               }
>>>                           }
>>>                       } while (j < (*old)[i+1]);
>>>                   }
>>>               };
>>>           }
>>>       }
>>>       else { // start with all elements in one segment
>>>       res->push_back(0); // the first number is always 0
>>>       uint32_t j = 1;
>>>       while (j < nelm) {
>>>           while (j < nelm && (*array)[j] == target)
>>>           ++ j;
>>>           res->push_back(j);
>>>           if (j < nelm) {
>>>           target = (*array)[j];
>>>           ++ j;
>>>           }
>>>       }
>>>       }
>>>       if (res->back() < nelm)
>>>       res->push_back(nelm);
>>>       return res;
>>>    } // ibis::colFloats::segment
>>>
>>> and
>>>
>>> ibis::array_t<uint32_t>*
>>> ibis::colUInts::segment(const array_t<uint32_t>* old) const {
>>> array_t<uint32_t>* res = new array_t<uint32_t>;
>>>   // res->push_back(0); // the first number is always 0
>>>    uint32_t j = 0;
>>>    uint32_t target = *(array->begin());
>>>    const uint32_t nelm = array->size();
>>>
>>>    if (old != 0 && old->size()>2) {
>>>    // find segments with in the previously defined segments
>>>        for (uint32_t i=0; i<old->size()-1; ++i) {
>>>            if (j < nelm) {
>>>                res->push_back(j);
>>>                target = (*array)[j];
>>>                ++ j;
>>>                if (j < nelm) {
>>>                    do {
>>>                        while (j < (*old)[i+1] && (*array)[j] == target) ++
>>> j;
>>>                        if (j < (*old)[i+1]) {
>>>                            res->push_back(j);
>>>                            if (j < nelm) {
>>>                                target = (*array)[j];
>>>                                ++ j;
>>>                            }
>>>                        }
>>>                    } while (j < (*old)[i+1]);
>>>                }
>>>            };
>>>        }
>>>    }
>>>    else { // start with all elements in one segment
>>>    res->push_back(0); // the first number is always 0
>>>    uint32_t j = 1;
>>>    while (j < nelm) {
>>>        while (j < nelm && (*array)[j] == target)
>>>        ++ j;
>>>        res->push_back(j);
>>>        if (j < nelm) {
>>>        target = (*array)[j];
>>>        ++ j;
>>>        }
>>>    }
>>>    }
>>>    if (res->back() < nelm)
>>>    res->push_back(nelm);
>>>    return res;
>>> } // ibis::colUInts::segment
>>>
>>> Alexandre
>>>
>>> [email protected] a ?crit :
>>>     
>>>> Send FastBit-users mailing list submissions to
>>>>     [email protected]
>>>>
>>>> To subscribe or unsubscribe via the World Wide Web, visit
>>>>     https://hpcrdm.lbl.gov/cgi-bin/mailman/listinfo/fastbit-users
>>>> or, via email, send a message with subject or body 'help' to
>>>>     [email protected]
>>>>
>>>> You can reach the person managing the list at
>>>>     [email protected]
>>>>
>>>> When replying, please edit your Subject line so it is more specific
>>>> than "Re: Contents of FastBit-users digest..."
>>>>
>>>>
>>>> Today's Topics:
>>>>
>>>>    1. Re: problem in segment method (K. John Wu)
>>>>
>>>>
>>>> ----------------------------------------------------------------------
>>>>
>>>> Message: 1
>>>> Date: Fri, 28 Aug 2009 06:56:19 -0700
>>>> From: "K. John Wu" <[email protected]>
>>>> Subject: Re: [FastBit-users] problem in segment method
>>>> To: FastBit Users <[email protected]>
>>>> Message-ID: <[email protected]>
>>>> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
>>>>
>>>> Hi, Alexandre,
>>>>
>>>> You are right, I misunderstood your original message and only realized 
>>>> my mistake after I have sent out the first message.  We have adopted 
>>>> your changes to ibis::colFloats::segment and have made changes to 
>>>> other versions of the function segment.
>>>>
>>>> Hope you have got a chance to try the latest snapshot 
>>>> <https://codeforge.lbl.gov/snapshots.php?group_id=44>.   Please let us 
>>>> know if it correctly resolves the problem for you.
>>>>
>>>> Again, thanks for the feedback and your interest in FastBit.
>>>>
>>>> John
>>>>
>>>> PS: Since we have accepted your modified version of 
>>>> ibis::colFloats::segment, your name is now listed in the list of 
>>>> contributors 
>>>> <https://codeforge.lbl.gov/plugins/scmsvn/viewcvs.php/trunk/AUTHORS?root=fastbit&view=markup>
>>>>  
>>>> along with a more detailed information in ChangeLog 
>>>> <https://codeforge.lbl.gov/plugins/scmsvn/viewcvs.php/trunk/ChangeLog?root=fastbit&view=markup>.
>>>>  
>>>>
>>>>
>>>> On 8/28/2009 2:13 AM, Alexandre Maurel wrote:
>>>>  
>>>>       
>>>>> Hello John,
>>>>>
>>>>> You suspect that the last row is not in the table because of a 
>>>>> missing  end-of-line, but it is not the case.
>>>>> If you look at the last column of the result set (with counts), the 
>>>>> last row has counts equals to 2.
>>>>>
>>>>> Moreover the following query :
>>>>> ibis -d tmp -q "select Barcode,Row,Col,Cycle,Sample where Row = 4"
>>>>> return the correct result.
>>>>>
>>>>> Barcode, Row, Col, Cycle, Sample (with counts)
>>>>> 100220, 4, 4, 38, sample2,      1
>>>>>
>>>>> which is the last row of the table.
>>>>>
>>>>> Note that the segment method implementation I sent is working 
>>>>> properly on this data set.
>>>>>
>>>>> Alexandre
>>>>>
>>>>> 2009/8/27 <[email protected] 
>>>>> <mailto:[email protected]>>
>>>>>
>>>>>     Send FastBit-users mailing list submissions to
>>>>>            [email protected]
>>>>>     <mailto:[email protected]>
>>>>>
>>>>>     To subscribe or unsubscribe via the World Wide Web, visit
>>>>>            https://hpcrdm.lbl.gov/cgi-bin/mailman/listinfo/fastbit-users
>>>>>     or, via email, send a message with subject or body 'help' to
>>>>>            [email protected]
>>>>>     <mailto:[email protected]>
>>>>>
>>>>>     You can reach the person managing the list at
>>>>>            [email protected]
>>>>>     <mailto:[email protected]>
>>>>>
>>>>>     When replying, please edit your Subject line so it is more specific
>>>>>     than "Re: Contents of FastBit-users digest..."
>>>>>
>>>>>
>>>>>     Today's Topics:
>>>>>
>>>>>       1. problem in segment method (Alexandre Maurel)
>>>>>       2. problem in segment method (Alexandre Maurel)
>>>>>       3. Re: problem in segment method (K. John Wu)
>>>>>
>>>>>
>>>>>     
>>>>> ----------------------------------------------------------------------
>>>>>
>>>>>     Message: 1
>>>>>     Date: Thu, 27 Aug 2009 17:55:57 +0200
>>>>>     From: Alexandre Maurel <[email protected]
>>>>>     <mailto:[email protected]>>
>>>>>     Subject: [FastBit-users] problem in segment method
>>>>>     To: [email protected] 
>>>>> <mailto:[email protected]>
>>>>>     Message-ID:
>>>>>            <[email protected]
>>>>>     
>>>>> <mailto:[email protected]>>
>>>>>     Content-Type: text/plain; charset="iso-8859-1"
>>>>>
>>>>>     Hello,
>>>>>
>>>>>     I used ardea to generate a table using the following :
>>>>>
>>>>>     Barcode    Row    Col    Cycle    Sample
>>>>>     100220    1    1    30    sample1
>>>>>     100220    1    1    36    sample1
>>>>>     100220    1    2    30    sample1
>>>>>     100220    1    2    36    sample1
>>>>>     100220    2    1    30    sample1
>>>>>     100220    2    1    36    sample1
>>>>>     100220    2    2    30    sample1
>>>>>     100220    2    2    36    sample1
>>>>>     100220    3    3    38    sample2
>>>>>     100220    4    4    38    sample2
>>>>>
>>>>>     ardea -d tmp -m
>>>>>     "Barcode:float,Row:float,Col:float,Cycle:float,Sample:category" -t
>>>>>     Array.txt
>>>>>
>>>>>     then using ibis,
>>>>>
>>>>>     ibis -d tmp -q "select Barcode,Row,Col,Cycle,Sample where Row > 0"
>>>>>
>>>>>     result gives ....
>>>>>
>>>>>     Barcode, Row, Col, Cycle, Sample (with counts)
>>>>>     100220, 1, 1, 30, sample1,      1
>>>>>     100220, 1, 1, 36, sample1,      1
>>>>>     100220, 1, 2, 30, sample1,      1
>>>>>     100220, 1, 2, 36, sample1,      1
>>>>>     100220, 2, 1, 30, sample1,      1
>>>>>     100220, 2, 1, 36, sample1,      1
>>>>>     100220, 2, 2, 30, sample1,      1
>>>>>     100220, 2, 2, 36, sample1,      1
>>>>>     100220, 3, 3, 38, sample2,      2
>>>>>
>>>>>     which is wrong the last row is missing ....
>>>>>
>>>>>     Here how I solved this bug
>>>>>
>>>>>     array_t<uint32_t>*
>>>>>     ibis::colFloats::segment(const array_t<uint32_t>* old) const {
>>>>>        array_t<uint32_t>* res = new array_t<uint32_t>;
>>>>>       // res->push_back(0); // the first number is always 0
>>>>>        uint32_t j = 0;
>>>>>        float target = *(array->begin());
>>>>>        const uint32_t nelm = array->size();
>>>>>
>>>>>        if (old != 0 && old->size()>2) {
>>>>>        // find segments with in the previously defined segments
>>>>>            for (uint32_t i=0; i<old->size()-1; ++i) {
>>>>>                if (j < nelm) {
>>>>>                    res->push_back(j);
>>>>>                    target = (*array)[j];
>>>>>                    ++ j;
>>>>>                    if (j < nelm) {
>>>>>                        do {
>>>>>                            while (j < (*old)[i+1] && (*array)[j] ==
>>>>>     target) ++
>>>>>     j;
>>>>>                            if (j < (*old)[i+1]) {
>>>>>                                res->push_back(j);
>>>>>                                if (j < nelm) {
>>>>>                                    target = (*array)[j];
>>>>>                                    ++ j;
>>>>>                                }
>>>>>                            }
>>>>>                        } while (j < (*old)[i+1]);
>>>>>                    }
>>>>>                };
>>>>>            }
>>>>>        }
>>>>>        else { // start with all elements in one segment
>>>>>        res->push_back(0); // the first number is always 0
>>>>>        uint32_t j = 1;
>>>>>        while (j < nelm) {
>>>>>            while (j < nelm && (*array)[j] == target)
>>>>>            ++ j;
>>>>>            res->push_back(j);
>>>>>            if (j < nelm) {
>>>>>            target = (*array)[j];
>>>>>            ++ j;
>>>>>            }
>>>>>        }
>>>>>        }
>>>>>        if (res->back() < nelm)
>>>>>        res->push_back(nelm);
>>>>>        return res;
>>>>>     } // ibis::colFloats::segment
>>>>>
>>>>>
>>>>>     Hope this help.
>>>>>
>>>>>     Alexandre Maurel
>>>>>     -------------- next part --------------
>>>>>     An HTML attachment was scrubbed...
>>>>>     URL:
>>>>>     
>>>>> http://hpcrdm.lbl.gov/pipermail/fastbit-users/attachments/20090827/962c3caa/attachment-0001.htm
>>>>>  
>>>>>
>>>>>
>>>>>     ------------------------------
>>>>>
>>>>>     Message: 2
>>>>>     Date: Thu, 27 Aug 2009 17:59:12 +0200
>>>>>     From: Alexandre Maurel <[email protected]
>>>>>     <mailto:[email protected]>>
>>>>>     Subject: [FastBit-users] problem in segment method
>>>>>     To: [email protected] 
>>>>> <mailto:[email protected]>
>>>>>     Message-ID:
>>>>>            <[email protected]
>>>>>     
>>>>> <mailto:[email protected]>>
>>>>>     Content-Type: text/plain; charset="iso-8859-1"
>>>>>
>>>>>     Hello,
>>>>>
>>>>>     I used ardea to generate a table using the following :
>>>>>
>>>>>     Barcode    Row    Col    Cycle    Sample
>>>>>     100220    1    1    30    sample1
>>>>>     100220    1    1    36    sample1
>>>>>     100220    1    2    30    sample1
>>>>>     100220    1    2    36    sample1
>>>>>     100220    2    1    30    sample1
>>>>>     100220    2    1    36    sample1
>>>>>     100220    2    2    30    sample1
>>>>>     100220    2    2    36    sample1
>>>>>     100220    3    3    38    sample2
>>>>>     100220    4    4    38    sample2
>>>>>
>>>>>     ardea -d tmp -m
>>>>>     "Barcode:float,Row:float,Col:float,Cycle:float,Sample:category" -t
>>>>>     Array.txt
>>>>>
>>>>>     then using ibis,
>>>>>
>>>>>     ibis -d tmp -q "select Barcode,Row,Col,Cycle,Sample where Row > 0"
>>>>>
>>>>>     result gives ....
>>>>>
>>>>>     Barcode, Row, Col, Cycle, Sample (with counts)
>>>>>     100220, 1, 1, 30, sample1,      1
>>>>>     100220, 1, 1, 36, sample1,      1
>>>>>     100220, 1, 2, 30, sample1,      1
>>>>>     100220, 1, 2, 36, sample1,      1
>>>>>     100220, 2, 1, 30, sample1,      1
>>>>>     100220, 2, 1, 36, sample1,      1
>>>>>     100220, 2, 2, 30, sample1,      1
>>>>>     100220, 2, 2, 36, sample1,      1
>>>>>     100220, 3, 3, 38, sample2,      2
>>>>>
>>>>>     which is wrong the last row is missing ....
>>>>>
>>>>>     Here how I solved this bug
>>>>>
>>>>>     array_t<uint32_t>*
>>>>>     ibis::colFloats::segment(const array_t<uint32_t>* old) const {
>>>>>        array_t<uint32_t>* res = new array_t<uint32_t>;
>>>>>       // res->push_back(0); // the first number is always 0
>>>>>        uint32_t j = 0;
>>>>>        float target = *(array->begin());
>>>>>        const uint32_t nelm = array->size();
>>>>>
>>>>>        if (old != 0 && old->size()>2) {
>>>>>        // find segments with in the previously defined segments
>>>>>            for (uint32_t i=0; i<old->size()-1; ++i) {
>>>>>                if (j < nelm) {
>>>>>                    res->push_back(j);
>>>>>                    target = (*array)[j];
>>>>>                    ++ j;
>>>>>                    if (j < nelm) {
>>>>>                        do {
>>>>>                            while (j < (*old)[i+1] && (*array)[j] ==
>>>>>     target) ++
>>>>>     j;
>>>>>                            if (j < (*old)[i+1]) {
>>>>>                                res->push_back(j);
>>>>>                                if (j < nelm) {
>>>>>                                    target = (*array)[j];
>>>>>                                    ++ j;
>>>>>                                }
>>>>>                            }
>>>>>                        } while (j < (*old)[i+1]);
>>>>>                    }
>>>>>                };
>>>>>            }
>>>>>        }
>>>>>        else { // start with all elements in one segment
>>>>>        res->push_back(0); // the first number is always 0
>>>>>        uint32_t j = 1;
>>>>>        while (j < nelm) {
>>>>>            while (j < nelm && (*array)[j] == target)
>>>>>            ++ j;
>>>>>            res->push_back(j);
>>>>>            if (j < nelm) {
>>>>>            target = (*array)[j];
>>>>>            ++ j;
>>>>>            }
>>>>>        }
>>>>>        }
>>>>>        if (res->back() < nelm)
>>>>>        res->push_back(nelm);
>>>>>        return res;
>>>>>     } // ibis::colFloats::segment
>>>>>
>>>>>
>>>>>     Hope this help.
>>>>>
>>>>>     Alexandre Maurel
>>>>>     -------------- next part --------------
>>>>>     An HTML attachment was scrubbed...
>>>>>     URL:
>>>>>     
>>>>> http://hpcrdm.lbl.gov/pipermail/fastbit-users/attachments/20090827/0928f095/attachment-0001.htm
>>>>>  
>>>>>
>>>>>
>>>>>     ------------------------------
>>>>>
>>>>>     Message: 3
>>>>>     Date: Thu, 27 Aug 2009 11:57:05 -0700
>>>>>     From: "K. John Wu" <[email protected] <mailto:[email protected]>>
>>>>>     Subject: Re: [FastBit-users] problem in segment method
>>>>>     To: FastBit Users <[email protected]
>>>>>     <mailto:[email protected]>>
>>>>>     Message-ID: <[email protected] 
>>>>> <mailto:[email protected]>>
>>>>>     Content-Type: text/plain; charset=ISO-8859-1; format=flowed
>>>>>
>>>>>     Hi, Alexandre,
>>>>>
>>>>>     Thanks for bring this issue to our attention.  My first 
>>>>> impression was
>>>>>     that your input data might be missing a end-of-line or some such
>>>>>     thing, but guess you suspect that ibis::colFloats::segment is in
>>>>>     trouble.  Would you mind check whether your input CSV file is indeed
>>>>>     missing the end-of-line for the last line?  In the mean time, I will
>>>>>     look into ibis::colFloats::segment..
>>>>>
>>>>>     John
>>>>>
>>>>>
>>>>>     On 8/27/2009 8:59 AM, Alexandre Maurel wrote:
>>>>>      > Hello,
>>>>>      >
>>>>>      > I used ardea to generate a table using the following :
>>>>>      >
>>>>>      > Barcode    Row    Col    Cycle    Sample
>>>>>      > 100220    1    1    30    sample1
>>>>>      > 100220    1    1    36    sample1
>>>>>      > 100220    1    2    30    sample1
>>>>>      > 100220    1    2    36    sample1
>>>>>      > 100220    2    1    30    sample1
>>>>>      > 100220    2    1    36    sample1
>>>>>      > 100220    2    2    30    sample1
>>>>>      > 100220    2    2    36    sample1
>>>>>      > 100220    3    3    38    sample2
>>>>>      > 100220    4    4    38    sample2
>>>>>      >
>>>>>      > ardea -d tmp -m
>>>>>      > "Barcode:float,Row:float,Col:float,Cycle:float,Sample:category"
>>>>>     -t Array.txt
>>>>>      >
>>>>>      > then using ibis,
>>>>>      >
>>>>>      > ibis -d tmp -q "select Barcode,Row,Col,Cycle,Sample where Row 
>>>>>         
>>>>>> 0"
>>>>>>           
>>>>>      >
>>>>>      > result gives ....
>>>>>      >
>>>>>      > Barcode, Row, Col, Cycle, Sample (with counts)
>>>>>      > 100220, 1, 1, 30, sample1,      1
>>>>>      > 100220, 1, 1, 36, sample1,      1
>>>>>      > 100220, 1, 2, 30, sample1,      1
>>>>>      > 100220, 1, 2, 36, sample1,      1
>>>>>      > 100220, 2, 1, 30, sample1,      1
>>>>>      > 100220, 2, 1, 36, sample1,      1
>>>>>      > 100220, 2, 2, 30, sample1,      1
>>>>>      > 100220, 2, 2, 36, sample1,      1
>>>>>      > 100220, 3, 3, 38, sample2,      2
>>>>>      >
>>>>>      > which is wrong the last row is missing ....
>>>>>      >
>>>>>      > Here how I solved this bug
>>>>>      >
>>>>>      > array_t<uint32_t>*
>>>>>      > ibis::colFloats::segment(const array_t<uint32_t>* old) const {
>>>>>      >     array_t<uint32_t>* res = new array_t<uint32_t>;
>>>>>      >    // res->push_back(0); // the first number is always 0
>>>>>      >     uint32_t j = 0;
>>>>>      >     float target = *(array->begin());
>>>>>      >     const uint32_t nelm = array->size();
>>>>>      >
>>>>>      >     if (old != 0 && old->size()>2) {
>>>>>      >     // find segments with in the previously defined segments
>>>>>      >         for (uint32_t i=0; i<old->size()-1; ++i) {
>>>>>      >             if (j < nelm) {
>>>>>      >                 res->push_back(j);
>>>>>      >                 target = (*array)[j];
>>>>>      >                 ++ j;
>>>>>      >                 if (j < nelm) {
>>>>>      >                     do {
>>>>>      >                         while (j < (*old)[i+1] && (*array)[j] ==
>>>>>     target)
>>>>>      > ++ j;
>>>>>      >                         if (j < (*old)[i+1]) {
>>>>>      >                             res->push_back(j);
>>>>>      >                             if (j < nelm) {
>>>>>      >                                 target = (*array)[j];
>>>>>      >                                 ++ j;
>>>>>      >                             }
>>>>>      >                         }
>>>>>      >                     } while (j < (*old)[i+1]);
>>>>>      >                 }
>>>>>      >             };
>>>>>      >         }
>>>>>      >     }
>>>>>      >     else { // start with all elements in one segment
>>>>>      >     res->push_back(0); // the first number is always 0
>>>>>      >     uint32_t j = 1;
>>>>>      >     while (j < nelm) {
>>>>>      >         while (j < nelm && (*array)[j] == target)
>>>>>      >         ++ j;
>>>>>      >         res->push_back(j);
>>>>>      >         if (j < nelm) {
>>>>>      >         target = (*array)[j];
>>>>>      >         ++ j;
>>>>>      >         }
>>>>>      >     }
>>>>>      >     }
>>>>>      >     if (res->back() < nelm)
>>>>>      >     res->push_back(nelm);
>>>>>      >     return res;
>>>>>      > } // ibis::colFloats::segment
>>>>>      >
>>>>>      >
>>>>>      > Hope this help.
>>>>>      >
>>>>>      > Alexandre Maurel
>>>>>      >
>>>>>      >
>>>>>      >
>>>>>      >
>>>>>     
>>>>> ------------------------------------------------------------------------
>>>>>      >
>>>>>      > _______________________________________________
>>>>>      > FastBit-users mailing list
>>>>>      > [email protected] 
>>>>> <mailto:[email protected]>
>>>>>      > https://hpcrdm.lbl.gov/cgi-bin/mailman/listinfo/fastbit-users
>>>>>
>>>>>
>>>>>     ------------------------------
>>>>>
>>>>>     _______________________________________________
>>>>>     FastBit-users mailing list
>>>>>     [email protected] <mailto:[email protected]>
>>>>>     https://hpcrdm.lbl.gov/cgi-bin/mailman/listinfo/fastbit-users
>>>>>
>>>>>
>>>>>     End of FastBit-users Digest, Vol 24, Issue 6
>>>>>     ********************************************
>>>>>
>>>>>
>>>>>
>>>>> ------------------------------------------------------------------------
>>>>>
>>>>> _______________________________________________
>>>>> FastBit-users mailing list
>>>>> [email protected]
>>>>> https://hpcrdm.lbl.gov/cgi-bin/mailman/listinfo/fastbit-users
>>>>>     
>>>>>         
>>>> ------------------------------
>>>>
>>>> _______________________________________________
>>>> FastBit-users mailing list
>>>> [email protected]
>>>> https://hpcrdm.lbl.gov/cgi-bin/mailman/listinfo/fastbit-users
>>>>
>>>>
>>>> End of FastBit-users Digest, Vol 24, Issue 8
>>>> ********************************************
>>>>
>>>>   
>>>>       
>>> ------------------------------------------------------------------------
>>>
>>> _______________________________________________
>>> FastBit-users mailing list
>>> [email protected]
>>> https://hpcrdm.lbl.gov/cgi-bin/mailman/listinfo/fastbit-users
>>>     
>>
>> ------------------------------
>>
>> Message: 2
>> Date: Wed, 11 Nov 2009 09:32:45 +0100
>> From: Alexandre Maurel <[email protected]>
>> Subject: Re: [FastBit-users] problem in segment method
>> To: [email protected]
>> Message-ID: <[email protected]>
>> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
>>
>> Hello John,
>>
>> I tried version 1.1.3 it's working.
>> But not now I am confused, as far as I can see the segment methods are 
>> the same in both version ...!
>>
>> Alexandre
>>
>> [email protected] a ?crit :
>>   
>>> Send FastBit-users mailing list submissions to
>>>     [email protected]
>>>
>>> To subscribe or unsubscribe via the World Wide Web, visit
>>>     https://hpcrdm.lbl.gov/cgi-bin/mailman/listinfo/fastbit-users
>>> or, via email, send a message with subject or body 'help' to
>>>     [email protected]
>>>
>>> You can reach the person managing the list at
>>>     [email protected]
>>>
>>> When replying, please edit your Subject line so it is more specific
>>> than "Re: Contents of FastBit-users digest..."
>>>
>>>
>>> Today's Topics:
>>>
>>>    1. Re: problem in segment method (K. John Wu)
>>>
>>>
>>> ----------------------------------------------------------------------
>>>
>>> Message: 1
>>> Date: Tue, 10 Nov 2009 08:46:38 -0800
>>> From: "K. John Wu" <[email protected]>
>>> Subject: Re: [FastBit-users] problem in segment method
>>> To: FastBit Users <[email protected]>
>>> Message-ID: <[email protected]>
>>> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
>>>
>>> Hi, Alexandre,
>>>
>>> Would it be possible for you to try version 1.1.3, which was released 
>>> on Sept 10 (and newer than the snapshot you used)?
>>>
>>> In the mean time, I will take a more careful look at differences 
>>> between your code and what I have now...  We are in the middle of 
>>> trying to get the next release ready.  The current SVN repository 
>>> should stabilize in the next few days..
>>>
>>> John
>>>
>>>
>>> On 11/10/2009 7:41 AM, Alexandre Maurel wrote:
>>>   
>>>     
>>>> Hi John,
>>>>
>>>> I update my code with fastbit snapshot fastbit-scm-2009-09-01.
>>>> I did some test and it is not working for me.
>>>>
>>>> To make it work, I had to go back to the implementation of the segment 
>>>> method I first sent.
>>>>
>>>> As attached document you will find the dataset I used for the test.
>>>>
>>>> The dataset contains 152 rows, when I run a query (select <all columns>) 
>>>> that should return the complete dataset, 2 rows are missing.
>>>>
>>>> Here are the segment methods implementation I used to make it work.
>>>>
>>>> array_t<uint32_t>*
>>>>    ibis::colFloats::segment(const array_t<uint32_t>* old) const {
>>>>       array_t<uint32_t>* res = new array_t<uint32_t>;
>>>>      // res->push_back(0); // the first number is always 0
>>>>       uint32_t j = 0;
>>>>       float target = *(array->begin());
>>>>       const uint32_t nelm = array->size();
>>>>
>>>>       if (old != 0 && old->size()>2) {
>>>>       // find segments with in the previously defined segments
>>>>           for (uint32_t i=0; i<old->size()-1; ++i) {
>>>>               if (j < nelm) {
>>>>                   res->push_back(j);
>>>>                   target = (*array)[j];
>>>>                   ++ j;
>>>>                   if (j < nelm) {
>>>>                       do {
>>>>                           while (j < (*old)[i+1] && (*array)[j] ==
>>>>    target) ++
>>>>    j;
>>>>                           if (j < (*old)[i+1]) {
>>>>                               res->push_back(j);
>>>>                               if (j < nelm) {
>>>>                                   target = (*array)[j];
>>>>                                   ++ j;
>>>>                               }
>>>>                           }
>>>>                       } while (j < (*old)[i+1]);
>>>>                   }
>>>>               };
>>>>           }
>>>>       }
>>>>       else { // start with all elements in one segment
>>>>       res->push_back(0); // the first number is always 0
>>>>       uint32_t j = 1;
>>>>       while (j < nelm) {
>>>>           while (j < nelm && (*array)[j] == target)
>>>>           ++ j;
>>>>           res->push_back(j);
>>>>           if (j < nelm) {
>>>>           target = (*array)[j];
>>>>           ++ j;
>>>>           }
>>>>       }
>>>>       }
>>>>       if (res->back() < nelm)
>>>>       res->push_back(nelm);
>>>>       return res;
>>>>    } // ibis::colFloats::segment
>>>>
>>>> and
>>>>
>>>> ibis::array_t<uint32_t>*
>>>> ibis::colUInts::segment(const array_t<uint32_t>* old) const {
>>>> array_t<uint32_t>* res = new array_t<uint32_t>;
>>>>   // res->push_back(0); // the first number is always 0
>>>>    uint32_t j = 0;
>>>>    uint32_t target = *(array->begin());
>>>>    const uint32_t nelm = array->size();
>>>>
>>>>    if (old != 0 && old->size()>2) {
>>>>    // find segments with in the previously defined segments
>>>>        for (uint32_t i=0; i<old->size()-1; ++i) {
>>>>            if (j < nelm) {
>>>>                res->push_back(j);
>>>>                target = (*array)[j];
>>>>                ++ j;
>>>>                if (j < nelm) {
>>>>                    do {
>>>>                        while (j < (*old)[i+1] && (*array)[j] == target) ++
>>>> j;
>>>>                        if (j < (*old)[i+1]) {
>>>>                            res->push_back(j);
>>>>                            if (j < nelm) {
>>>>                                target = (*array)[j];
>>>>                                ++ j;
>>>>                            }
>>>>                        }
>>>>                    } while (j < (*old)[i+1]);
>>>>                }
>>>>            };
>>>>        }
>>>>    }
>>>>    else { // start with all elements in one segment
>>>>    res->push_back(0); // the first number is always 0
>>>>    uint32_t j = 1;
>>>>    while (j < nelm) {
>>>>        while (j < nelm && (*array)[j] == target)
>>>>        ++ j;
>>>>        res->push_back(j);
>>>>        if (j < nelm) {
>>>>        target = (*array)[j];
>>>>        ++ j;
>>>>        }
>>>>    }
>>>>    }
>>>>    if (res->back() < nelm)
>>>>    res->push_back(nelm);
>>>>    return res;
>>>> } // ibis::colUInts::segment
>>>>
>>>> Alexandre
>>>>
>>>> [email protected] a ?crit :
>>>>     
>>>>       
>>>>> Send FastBit-users mailing list submissions to
>>>>>     [email protected]
>>>>>
>>>>> To subscribe or unsubscribe via the World Wide Web, visit
>>>>>     https://hpcrdm.lbl.gov/cgi-bin/mailman/listinfo/fastbit-users
>>>>> or, via email, send a message with subject or body 'help' to
>>>>>     [email protected]
>>>>>
>>>>> You can reach the person managing the list at
>>>>>     [email protected]
>>>>>
>>>>> When replying, please edit your Subject line so it is more specific
>>>>> than "Re: Contents of FastBit-users digest..."
>>>>>
>>>>>
>>>>> Today's Topics:
>>>>>
>>>>>    1. Re: problem in segment method (K. John Wu)
>>>>>
>>>>>
>>>>> ----------------------------------------------------------------------
>>>>>
>>>>> Message: 1
>>>>> Date: Fri, 28 Aug 2009 06:56:19 -0700
>>>>> From: "K. John Wu" <[email protected]>
>>>>> Subject: Re: [FastBit-users] problem in segment method
>>>>> To: FastBit Users <[email protected]>
>>>>> Message-ID: <[email protected]>
>>>>> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
>>>>>
>>>>> Hi, Alexandre,
>>>>>
>>>>> You are right, I misunderstood your original message and only realized 
>>>>> my mistake after I have sent out the first message.  We have adopted 
>>>>> your changes to ibis::colFloats::segment and have made changes to 
>>>>> other versions of the function segment.
>>>>>
>>>>> Hope you have got a chance to try the latest snapshot 
>>>>> <https://codeforge.lbl.gov/snapshots.php?group_id=44>.   Please let us 
>>>>> know if it correctly resolves the problem for you.
>>>>>
>>>>> Again, thanks for the feedback and your interest in FastBit.
>>>>>
>>>>> John
>>>>>
>>>>> PS: Since we have accepted your modified version of 
>>>>> ibis::colFloats::segment, your name is now listed in the list of 
>>>>> contributors 
>>>>> <https://codeforge.lbl.gov/plugins/scmsvn/viewcvs.php/trunk/AUTHORS?root=fastbit&view=markup>
>>>>>  
>>>>> along with a more detailed information in ChangeLog 
>>>>> <https://codeforge.lbl.gov/plugins/scmsvn/viewcvs.php/trunk/ChangeLog?root=fastbit&view=markup>.
>>>>>  
>>>>>
>>>>>
>>>>> On 8/28/2009 2:13 AM, Alexandre Maurel wrote:
>>>>>  
>>>>>       
>>>>>         
>>>>>> Hello John,
>>>>>>
>>>>>> You suspect that the last row is not in the table because of a 
>>>>>> missing  end-of-line, but it is not the case.
>>>>>> If you look at the last column of the result set (with counts), the 
>>>>>> last row has counts equals to 2.
>>>>>>
>>>>>> Moreover the following query :
>>>>>> ibis -d tmp -q "select Barcode,Row,Col,Cycle,Sample where Row = 4"
>>>>>> return the correct result.
>>>>>>
>>>>>> Barcode, Row, Col, Cycle, Sample (with counts)
>>>>>> 100220, 4, 4, 38, sample2,      1
>>>>>>
>>>>>> which is the last row of the table.
>>>>>>
>>>>>> Note that the segment method implementation I sent is working 
>>>>>> properly on this data set.
>>>>>>
>>>>>> Alexandre
>>>>>>
>>>>>> 2009/8/27 <[email protected] 
>>>>>> <mailto:[email protected]>>
>>>>>>
>>>>>>     Send FastBit-users mailing list submissions to
>>>>>>            [email protected]
>>>>>>     <mailto:[email protected]>
>>>>>>
>>>>>>     To subscribe or unsubscribe via the World Wide Web, visit
>>>>>>            https://hpcrdm.lbl.gov/cgi-bin/mailman/listinfo/fastbit-users
>>>>>>     or, via email, send a message with subject or body 'help' to
>>>>>>            [email protected]
>>>>>>     <mailto:[email protected]>
>>>>>>
>>>>>>     You can reach the person managing the list at
>>>>>>            [email protected]
>>>>>>     <mailto:[email protected]>
>>>>>>
>>>>>>     When replying, please edit your Subject line so it is more specific
>>>>>>     than "Re: Contents of FastBit-users digest..."
>>>>>>
>>>>>>
>>>>>>     Today's Topics:
>>>>>>
>>>>>>       1. problem in segment method (Alexandre Maurel)
>>>>>>       2. problem in segment method (Alexandre Maurel)
>>>>>>       3. Re: problem in segment method (K. John Wu)
>>>>>>
>>>>>>
>>>>>>     
>>>>>> ----------------------------------------------------------------------
>>>>>>
>>>>>>     Message: 1
>>>>>>     Date: Thu, 27 Aug 2009 17:55:57 +0200
>>>>>>     From: Alexandre Maurel <[email protected]
>>>>>>     <mailto:[email protected]>>
>>>>>>     Subject: [FastBit-users] problem in segment method
>>>>>>     To: [email protected] 
>>>>>> <mailto:[email protected]>
>>>>>>     Message-ID:
>>>>>>            <[email protected]
>>>>>>     
>>>>>> <mailto:[email protected]>>
>>>>>>     Content-Type: text/plain; charset="iso-8859-1"
>>>>>>
>>>>>>     Hello,
>>>>>>
>>>>>>     I used ardea to generate a table using the following :
>>>>>>
>>>>>>     Barcode    Row    Col    Cycle    Sample
>>>>>>     100220    1    1    30    sample1
>>>>>>     100220    1    1    36    sample1
>>>>>>     100220    1    2    30    sample1
>>>>>>     100220    1    2    36    sample1
>>>>>>     100220    2    1    30    sample1
>>>>>>     100220    2    1    36    sample1
>>>>>>     100220    2    2    30    sample1
>>>>>>     100220    2    2    36    sample1
>>>>>>     100220    3    3    38    sample2
>>>>>>     100220    4    4    38    sample2
>>>>>>
>>>>>>     ardea -d tmp -m
>>>>>>     "Barcode:float,Row:float,Col:float,Cycle:float,Sample:category" -t
>>>>>>     Array.txt
>>>>>>
>>>>>>     then using ibis,
>>>>>>
>>>>>>     ibis -d tmp -q "select Barcode,Row,Col,Cycle,Sample where Row > 0"
>>>>>>
>>>>>>     result gives ....
>>>>>>
>>>>>>     Barcode, Row, Col, Cycle, Sample (with counts)
>>>>>>     100220, 1, 1, 30, sample1,      1
>>>>>>     100220, 1, 1, 36, sample1,      1
>>>>>>     100220, 1, 2, 30, sample1,      1
>>>>>>     100220, 1, 2, 36, sample1,      1
>>>>>>     100220, 2, 1, 30, sample1,      1
>>>>>>     100220, 2, 1, 36, sample1,      1
>>>>>>     100220, 2, 2, 30, sample1,      1
>>>>>>     100220, 2, 2, 36, sample1,      1
>>>>>>     100220, 3, 3, 38, sample2,      2
>>>>>>
>>>>>>     which is wrong the last row is missing ....
>>>>>>
>>>>>>     Here how I solved this bug
>>>>>>
>>>>>>     array_t<uint32_t>*
>>>>>>     ibis::colFloats::segment(const array_t<uint32_t>* old) const {
>>>>>>        array_t<uint32_t>* res = new array_t<uint32_t>;
>>>>>>       // res->push_back(0); // the first number is always 0
>>>>>>        uint32_t j = 0;
>>>>>>        float target = *(array->begin());
>>>>>>        const uint32_t nelm = array->size();
>>>>>>
>>>>>>        if (old != 0 && old->size()>2) {
>>>>>>        // find segments with in the previously defined segments
>>>>>>            for (uint32_t i=0; i<old->size()-1; ++i) {
>>>>>>                if (j < nelm) {
>>>>>>                    res->push_back(j);
>>>>>>                    target = (*array)[j];
>>>>>>                    ++ j;
>>>>>>                    if (j < nelm) {
>>>>>>                        do {
>>>>>>                            while (j < (*old)[i+1] && (*array)[j] ==
>>>>>>     target) ++
>>>>>>     j;
>>>>>>                            if (j < (*old)[i+1]) {
>>>>>>                                res->push_back(j);
>>>>>>                                if (j < nelm) {
>>>>>>                                    target = (*array)[j];
>>>>>>                                    ++ j;
>>>>>>                                }
>>>>>>                            }
>>>>>>                        } while (j < (*old)[i+1]);
>>>>>>                    }
>>>>>>                };
>>>>>>            }
>>>>>>        }
>>>>>>        else { // start with all elements in one segment
>>>>>>        res->push_back(0); // the first number is always 0
>>>>>>        uint32_t j = 1;
>>>>>>        while (j < nelm) {
>>>>>>            while (j < nelm && (*array)[j] == target)
>>>>>>            ++ j;
>>>>>>            res->push_back(j);
>>>>>>            if (j < nelm) {
>>>>>>            target = (*array)[j];
>>>>>>            ++ j;
>>>>>>            }
>>>>>>        }
>>>>>>        }
>>>>>>        if (res->back() < nelm)
>>>>>>        res->push_back(nelm);
>>>>>>        return res;
>>>>>>     } // ibis::colFloats::segment
>>>>>>
>>>>>>
>>>>>>     Hope this help.
>>>>>>
>>>>>>     Alexandre Maurel
>>>>>>     -------------- next part --------------
>>>>>>     An HTML attachment was scrubbed...
>>>>>>     URL:
>>>>>>     
>>>>>> http://hpcrdm.lbl.gov/pipermail/fastbit-users/attachments/20090827/962c3caa/attachment-0001.htm
>>>>>>  
>>>>>>
>>>>>>
>>>>>>     ------------------------------
>>>>>>
>>>>>>     Message: 2
>>>>>>     Date: Thu, 27 Aug 2009 17:59:12 +0200
>>>>>>     From: Alexandre Maurel <[email protected]
>>>>>>     <mailto:[email protected]>>
>>>>>>     Subject: [FastBit-users] problem in segment method
>>>>>>     To: [email protected] 
>>>>>> <mailto:[email protected]>
>>>>>>     Message-ID:
>>>>>>            <[email protected]
>>>>>>     
>>>>>> <mailto:[email protected]>>
>>>>>>     Content-Type: text/plain; charset="iso-8859-1"
>>>>>>
>>>>>>     Hello,
>>>>>>
>>>>>>     I used ardea to generate a table using the following :
>>>>>>
>>>>>>     Barcode    Row    Col    Cycle    Sample
>>>>>>     100220    1    1    30    sample1
>>>>>>     100220    1    1    36    sample1
>>>>>>     100220    1    2    30    sample1
>>>>>>     100220    1    2    36    sample1
>>>>>>     100220    2    1    30    sample1
>>>>>>     100220    2    1    36    sample1
>>>>>>     100220    2    2    30    sample1
>>>>>>     100220    2    2    36    sample1
>>>>>>     100220    3    3    38    sample2
>>>>>>     100220    4    4    38    sample2
>>>>>>
>>>>>>     ardea -d tmp -m
>>>>>>     "Barcode:float,Row:float,Col:float,Cycle:float,Sample:category" -t
>>>>>>     Array.txt
>>>>>>
>>>>>>     then using ibis,
>>>>>>
>>>>>>     ibis -d tmp -q "select Barcode,Row,Col,Cycle,Sample where Row > 0"
>>>>>>
>>>>>>     result gives ....
>>>>>>
>>>>>>     Barcode, Row, Col, Cycle, Sample (with counts)
>>>>>>     100220, 1, 1, 30, sample1,      1
>>>>>>     100220, 1, 1, 36, sample1,      1
>>>>>>     100220, 1, 2, 30, sample1,      1
>>>>>>     100220, 1, 2, 36, sample1,      1
>>>>>>     100220, 2, 1, 30, sample1,      1
>>>>>>     100220, 2, 1, 36, sample1,      1
>>>>>>     100220, 2, 2, 30, sample1,      1
>>>>>>     100220, 2, 2, 36, sample1,      1
>>>>>>     100220, 3, 3, 38, sample2,      2
>>>>>>
>>>>>>     which is wrong the last row is missing ....
>>>>>>
>>>>>>     Here how I solved this bug
>>>>>>
>>>>>>     array_t<uint32_t>*
>>>>>>     ibis::colFloats::segment(const array_t<uint32_t>* old) const {
>>>>>>        array_t<uint32_t>* res = new array_t<uint32_t>;
>>>>>>       // res->push_back(0); // the first number is always 0
>>>>>>        uint32_t j = 0;
>>>>>>        float target = *(array->begin());
>>>>>>        const uint32_t nelm = array->size();
>>>>>>
>>>>>>        if (old != 0 && old->size()>2) {
>>>>>>        // find segments with in the previously defined segments
>>>>>>            for (uint32_t i=0; i<old->size()-1; ++i) {
>>>>>>                if (j < nelm) {
>>>>>>                    res->push_back(j);
>>>>>>                    target = (*array)[j];
>>>>>>                    ++ j;
>>>>>>                    if (j < nelm) {
>>>>>>                        do {
>>>>>>                            while (j < (*old)[i+1] && (*array)[j] ==
>>>>>>     target) ++
>>>>>>     j;
>>>>>>                            if (j < (*old)[i+1]) {
>>>>>>                                res->push_back(j);
>>>>>>                                if (j < nelm) {
>>>>>>                                    target = (*array)[j];
>>>>>>                                    ++ j;
>>>>>>                                }
>>>>>>                            }
>>>>>>                        } while (j < (*old)[i+1]);
>>>>>>                    }
>>>>>>                };
>>>>>>            }
>>>>>>        }
>>>>>>        else { // start with all elements in one segment
>>>>>>        res->push_back(0); // the first number is always 0
>>>>>>        uint32_t j = 1;
>>>>>>        while (j < nelm) {
>>>>>>            while (j < nelm && (*array)[j] == target)
>>>>>>            ++ j;
>>>>>>            res->push_back(j);
>>>>>>            if (j < nelm) {
>>>>>>            target = (*array)[j];
>>>>>>            ++ j;
>>>>>>            }
>>>>>>        }
>>>>>>        }
>>>>>>        if (res->back() < nelm)
>>>>>>        res->push_back(nelm);
>>>>>>        return res;
>>>>>>     } // ibis::colFloats::segment
>>>>>>
>>>>>>
>>>>>>     Hope this help.
>>>>>>
>>>>>>     Alexandre Maurel
>>>>>>     -------------- next part --------------
>>>>>>     An HTML attachment was scrubbed...
>>>>>>     URL:
>>>>>>     
>>>>>> http://hpcrdm.lbl.gov/pipermail/fastbit-users/attachments/20090827/0928f095/attachment-0001.htm
>>>>>>  
>>>>>>
>>>>>>
>>>>>>     ------------------------------
>>>>>>
>>>>>>     Message: 3
>>>>>>     Date: Thu, 27 Aug 2009 11:57:05 -0700
>>>>>>     From: "K. John Wu" <[email protected] <mailto:[email protected]>>
>>>>>>     Subject: Re: [FastBit-users] problem in segment method
>>>>>>     To: FastBit Users <[email protected]
>>>>>>     <mailto:[email protected]>>
>>>>>>     Message-ID: <[email protected] 
>>>>>> <mailto:[email protected]>>
>>>>>>     Content-Type: text/plain; charset=ISO-8859-1; format=flowed
>>>>>>
>>>>>>     Hi, Alexandre,
>>>>>>
>>>>>>     Thanks for bring this issue to our attention.  My first 
>>>>>> impression was
>>>>>>     that your input data might be missing a end-of-line or some such
>>>>>>     thing, but guess you suspect that ibis::colFloats::segment is in
>>>>>>     trouble.  Would you mind check whether your input CSV file is indeed
>>>>>>     missing the end-of-line for the last line?  In the mean time, I will
>>>>>>     look into ibis::colFloats::segment..
>>>>>>
>>>>>>     John
>>>>>>
>>>>>>
>>>>>>     On 8/27/2009 8:59 AM, Alexandre Maurel wrote:
>>>>>>      > Hello,
>>>>>>      >
>>>>>>      > I used ardea to generate a table using the following :
>>>>>>      >
>>>>>>      > Barcode    Row    Col    Cycle    Sample
>>>>>>      > 100220    1    1    30    sample1
>>>>>>      > 100220    1    1    36    sample1
>>>>>>      > 100220    1    2    30    sample1
>>>>>>      > 100220    1    2    36    sample1
>>>>>>      > 100220    2    1    30    sample1
>>>>>>      > 100220    2    1    36    sample1
>>>>>>      > 100220    2    2    30    sample1
>>>>>>      > 100220    2    2    36    sample1
>>>>>>      > 100220    3    3    38    sample2
>>>>>>      > 100220    4    4    38    sample2
>>>>>>      >
>>>>>>      > ardea -d tmp -m
>>>>>>      > "Barcode:float,Row:float,Col:float,Cycle:float,Sample:category"
>>>>>>     -t Array.txt
>>>>>>      >
>>>>>>      > then using ibis,
>>>>>>      >
>>>>>>      > ibis -d tmp -q "select Barcode,Row,Col,Cycle,Sample where Row 
>>>>>>         
>>>>>>           
>>>>>>> 0"
>>>>>>>           
>>>>>>>             
>>>>>>      >
>>>>>>      > result gives ....
>>>>>>      >
>>>>>>      > Barcode, Row, Col, Cycle, Sample (with counts)
>>>>>>      > 100220, 1, 1, 30, sample1,      1
>>>>>>      > 100220, 1, 1, 36, sample1,      1
>>>>>>      > 100220, 1, 2, 30, sample1,      1
>>>>>>      > 100220, 1, 2, 36, sample1,      1
>>>>>>      > 100220, 2, 1, 30, sample1,      1
>>>>>>      > 100220, 2, 1, 36, sample1,      1
>>>>>>      > 100220, 2, 2, 30, sample1,      1
>>>>>>      > 100220, 2, 2, 36, sample1,      1
>>>>>>      > 100220, 3, 3, 38, sample2,      2
>>>>>>      >
>>>>>>      > which is wrong the last row is missing ....
>>>>>>      >
>>>>>>      > Here how I solved this bug
>>>>>>      >
>>>>>>      > array_t<uint32_t>*
>>>>>>      > ibis::colFloats::segment(const array_t<uint32_t>* old) const {
>>>>>>      >     array_t<uint32_t>* res = new array_t<uint32_t>;
>>>>>>      >    // res->push_back(0); // the first number is always 0
>>>>>>      >     uint32_t j = 0;
>>>>>>      >     float target = *(array->begin());
>>>>>>      >     const uint32_t nelm = array->size();
>>>>>>      >
>>>>>>      >     if (old != 0 && old->size()>2) {
>>>>>>      >     // find segments with in the previously defined segments
>>>>>>      >         for (uint32_t i=0; i<old->size()-1; ++i) {
>>>>>>      >             if (j < nelm) {
>>>>>>      >                 res->push_back(j);
>>>>>>      >                 target = (*array)[j];
>>>>>>      >                 ++ j;
>>>>>>      >                 if (j < nelm) {
>>>>>>      >                     do {
>>>>>>      >                         while (j < (*old)[i+1] && (*array)[j] ==
>>>>>>     target)
>>>>>>      > ++ j;
>>>>>>      >                         if (j < (*old)[i+1]) {
>>>>>>      >                             res->push_back(j);
>>>>>>      >                             if (j < nelm) {
>>>>>>      >                                 target = (*array)[j];
>>>>>>      >                                 ++ j;
>>>>>>      >                             }
>>>>>>      >                         }
>>>>>>      >                     } while (j < (*old)[i+1]);
>>>>>>      >                 }
>>>>>>      >             };
>>>>>>      >         }
>>>>>>      >     }
>>>>>>      >     else { // start with all elements in one segment
>>>>>>      >     res->push_back(0); // the first number is always 0
>>>>>>      >     uint32_t j = 1;
>>>>>>      >     while (j < nelm) {
>>>>>>      >         while (j < nelm && (*array)[j] == target)
>>>>>>      >         ++ j;
>>>>>>      >         res->push_back(j);
>>>>>>      >         if (j < nelm) {
>>>>>>      >         target = (*array)[j];
>>>>>>      >         ++ j;
>>>>>>      >         }
>>>>>>      >     }
>>>>>>      >     }
>>>>>>      >     if (res->back() < nelm)
>>>>>>      >     res->push_back(nelm);
>>>>>>      >     return res;
>>>>>>      > } // ibis::colFloats::segment
>>>>>>      >
>>>>>>      >
>>>>>>      > Hope this help.
>>>>>>      >
>>>>>>      > Alexandre Maurel
>>>>>>      >
>>>>>>      >
>>>>>>      >
>>>>>>      >
>>>>>>     
>>>>>> ------------------------------------------------------------------------
>>>>>>      >
>>>>>>      > _______________________________________________
>>>>>>      > FastBit-users mailing list
>>>>>>      > [email protected] 
>>>>>> <mailto:[email protected]>
>>>>>>      > https://hpcrdm.lbl.gov/cgi-bin/mailman/listinfo/fastbit-users
>>>>>>
>>>>>>
>>>>>>     ------------------------------
>>>>>>
>>>>>>     _______________________________________________
>>>>>>     FastBit-users mailing list
>>>>>>     [email protected] <mailto:[email protected]>
>>>>>>     https://hpcrdm.lbl.gov/cgi-bin/mailman/listinfo/fastbit-users
>>>>>>
>>>>>>
>>>>>>     End of FastBit-users Digest, Vol 24, Issue 6
>>>>>>     ********************************************
>>>>>>
>>>>>>
>>>>>>
>>>>>> ------------------------------------------------------------------------
>>>>>>
>>>>>> _______________________________________________
>>>>>> FastBit-users mailing list
>>>>>> [email protected]
>>>>>> https://hpcrdm.lbl.gov/cgi-bin/mailman/listinfo/fastbit-users
>>>>>>     
>>>>>>         
>>>>>>           
>>>>> ------------------------------
>>>>>
>>>>> _______________________________________________
>>>>> FastBit-users mailing list
>>>>> [email protected]
>>>>> https://hpcrdm.lbl.gov/cgi-bin/mailman/listinfo/fastbit-users
>>>>>
>>>>>
>>>>> End of FastBit-users Digest, Vol 24, Issue 8
>>>>> ********************************************
>>>>>
>>>>>   
>>>>>       
>>>>>         
>>>> ------------------------------------------------------------------------
>>>>
>>>> _______________________________________________
>>>> FastBit-users mailing list
>>>> [email protected]
>>>> https://hpcrdm.lbl.gov/cgi-bin/mailman/listinfo/fastbit-users
>>>>     
>>>>       
>>> ------------------------------
>>>
>>> _______________________________________________
>>> FastBit-users mailing list
>>> [email protected]
>>> https://hpcrdm.lbl.gov/cgi-bin/mailman/listinfo/fastbit-users
>>>
>>>
>>> End of FastBit-users Digest, Vol 27, Issue 9
>>> ********************************************
>>>
>>>   
>>>     
>>
>> ------------------------------
>>
>> _______________________________________________
>> FastBit-users mailing list
>> [email protected]
>> https://hpcrdm.lbl.gov/cgi-bin/mailman/listinfo/fastbit-users
>>
>>
>> End of FastBit-users Digest, Vol 27, Issue 10
>> *********************************************
>>
>>   
> _______________________________________________
> FastBit-users mailing list
> [email protected]
> https://hpcrdm.lbl.gov/cgi-bin/mailman/listinfo/fastbit-users
_______________________________________________
FastBit-users mailing list
[email protected]
https://hpcrdm.lbl.gov/cgi-bin/mailman/listinfo/fastbit-users

Reply via email to