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]
> 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