Index: trunk/MagicSoft/Mars/Changelog
===================================================================
--- trunk/MagicSoft/Mars/Changelog	(revision 7214)
+++ trunk/MagicSoft/Mars/Changelog	(revision 7215)
@@ -20,5 +20,5 @@
 
                                                  -*-*- END OF LINE -*-*-
- 2005/07/12 Daniela Dorner
+ 2005/07/22 Daniela Dorner
 
    * sinope.cc:
@@ -36,4 +36,10 @@
      - small change in all scripts to make it easier to adapt scripts 
        for a different user
+
+   * datacenter/macros/buildsequenceentries.C:
+     - implemented new algorithm to build sequences: instead of 
+       checking the conditions of the runs after grouping them together
+       the condition are taken into account for grouping the runs
+       Attention: some sequences will change with this new algorithm! 
 
 
Index: trunk/MagicSoft/Mars/datacenter/macros/buildsequenceentries.C
===================================================================
--- trunk/MagicSoft/Mars/datacenter/macros/buildsequenceentries.C	(revision 7214)
+++ trunk/MagicSoft/Mars/datacenter/macros/buildsequenceentries.C	(revision 7215)
@@ -62,148 +62,229 @@
 int debug = 0;
 
-Bool_t DeleteSequences(MSQLServer &serv, TString cond)
-{
-    TString query(Form("SELECT fSequenceFirst FROM Sequences"
-                       " WHERE %s AND fManuallyChangedKEY=1", cond.Data()));
+Bool_t DeleteSequence(MSQLServer &serv, Int_t sequ, Bool_t dummy)
+{
+    TString query1(Form("DELETE FROM Calibration WHERE fSequenceFirst=%d", sequ));
+    TString query2(Form("DELETE FROM Star WHERE fSequenceFirst=%d", sequ));
+    TString query3(Form("DELETE FROM SequenceProcessStatus WHERE fSequenceFirst=%d", sequ));
+    TString query4(Form("UPDATE RunData SET fSequenceFirst=0 WHERE fSequenceFirst=%d", sequ));
+    TString query5(Form("DELETE FROM Sequences WHERE fSequenceFirst=%d AND fManuallyChangedKEY=1", sequ));
+
+    TString fname(Form("/mnt/stk01/sequences/%04d/sequence%08d.txt", sequ/10000, sequ));
+    TString command(Form("rm -r /magic/data/callisto/%04d/%08d/", sequ/10000, sequ));
+    TString command2(Form("rm -r /magic/data/star/%04d/%08d/", sequ/10000, sequ));
+
+    if (dummy)
+    {
+        cout << "not using dummy=kTRUE the following commands would be executed: " << endl;
+        cout << "queries: " << endl;
+        cout << query1 << endl;
+        cout << query2 << endl;
+        cout << query3 << endl;
+        cout << query4 << endl;
+        cout << query5 << endl;
+        cout << "removing files:" << endl;
+        cout << "unlink " << fname << endl;
+        cout << command << endl;
+        cout << command2 << endl;
+        return kTRUE;
+    }
+
+    TSQLResult *res = serv.Query(query1);
+    if (!res)
+        return kFALSE;
+    delete res;
+
+    res = serv.Query(query2);
+    if (!res)
+        return kFALSE;
+    delete res;
+
+    res = serv.Query(query3);
+    if (!res)
+        return kFALSE;
+    delete res;
+
+    res = serv.Query(query4);
+    if (!res)
+        return kFALSE;
+    delete res;
+
+    res = serv.Query(query5);
+    if (!res)
+        return kFALSE;
+    delete res;
+
+    gSystem->Unlink(fname);
+
+    gSystem->Exec(command);
+    gSystem->Exec(command2);
+
+    return kTRUE;
+}
+
+Int_t DoCheck(TSQLResult &res)
+{
+    TArrayI data(5);
+    Int_t n = 0;
+
+    TSQLRow *row=0;
+    while ((row=res.Next()))
+    {
+        n++;
+
+        if (data[0]==0)
+        {
+            for (int i=0; i<data.GetSize(); i++)
+                data[i] = atoi((*row)[i]);
+            continue;
+        }
+
+        for (int i=1; i<data.GetSize(); i++)
+        {
+            if (data[i] != atoi((*row)[i]))
+                return i+1;
+        }
+    }
+    return n==0 ? 0 : -1;
+}
+
+Bool_t CheckRuns(MSQLServer &serv, Int_t from, Int_t to, Int_t type)
+{
+    TString query("SELECT fRunNumber, fL1TriggerTableKEY, fL2TriggerTableKEY,"
+                  " fCalibrationScriptKEY, fProjectKEY FROM RunData");
+    query += Form(" WHERE fRunTypeKEY=%d AND fExcludedFDAKEY=1 AND "
+                  " (fRunNumber BETWEEN %d AND %d)"
+                  " ORDER BY fRunNumber", type, from, to);
 
     TSQLResult *res = serv.Query(query);
     if (!res)
         return kFALSE;
+
+    Int_t rc = DoCheck(*res);
+    delete res;
+
+    switch (rc)
+    {
+    case 0: cout << "ERROR - No runs found for check!"             << endl; break;
+    case 1: cout << "ERROR - fRunNumber doesn't match!"            << endl; break;
+    case 2: cout << "ERROR - fL1TriggerTableKEY doesn't match!"    << endl; break;
+    case 3: cout << "ERROR - fL2TriggerTableKEY doesn't match!"    << endl; break;
+    case 4: cout << "ERROR - fCalibrationScriptKEY doesn't match!" << endl; break;
+    case 5: cout << "ERROR - fProjectKEY doesn't match!"           << endl; break;
+    }
+
+    return rc<0;
+}
+
+Bool_t CheckSequence(MSQLServer &serv, Int_t from, Int_t to, Bool_t dummy)
+{
+    Bool_t rc=kFALSE;
+
+    TString query("SELECT fSequenceFirst, count(*) FROM RunData ");
+    query += Form(" WHERE fExcludedFDAKEY=1 AND (fRunNumber BETWEEN %d AND %d)"
+                  " GROUP BY fSequenceFirst", from, to);
+
+    TSQLResult *res = serv.Query(query);
+    if (!res)
+        return kFALSE;
+
+    Int_t count=0;
+    Int_t nor=0;
+    TArrayI sequences;
 
     TSQLRow *row=0;
     while ((row=res->Next()))
     {
-        query = Form("DELETE FROM Calibration WHERE fSequenceFirst=%s", (*row)[0]);
-
-        TSQLResult *res = serv.Query(query);
-        if (!res)
-            return kFALSE;
-        delete res;
-
-        query = Form("DELETE FROM Star WHERE fSequenceFirst=%s", (*row)[0]);
+        sequences.Set(count+1);
+        sequences.AddAt(atoi((*row)[0]), count);
+//        cout << "sequence:   " << sequences.At(count) << endl;
+        nor=atoi((*row)[1]);
+        count++;
+    }
+
+    delete res;
+
+    if (sequences.GetSize()>1)
+    {
+        for (Int_t i=0;i<sequences.GetSize();i++)
+        {
+            rc=kTRUE;
+            if (sequences.At(i)!=0)
+            {
+                cout << "deleting sequence " << sequences.At(i) << "... <" << i << ">" << endl;
+                if(!DeleteSequence(serv, sequences.At(i), dummy))
+                   rc=kFALSE;
+            }
+        }
+        return rc;
+    }
+
+    if (sequences.At(0)==0)
+        return kTRUE;
+
+
+    query="SELECT fRunNumber FROM RunData ";
+    query += Form(" WHERE fExcludedFDAKEY=1 AND (fRunNumber BETWEEN %d AND %d)"
+                  " ORDER BY fRunNumber", from, to);
+
+    res = serv.Query(query);
+    if (!res)
+        return kFALSE;
+
+    TArrayI runs;
+    count=0;
+    row=0;
+    while ((row=res->Next()))
+    {
+        runs.Set(count+1);
+        runs.AddAt(atoi((*row)[0]), count);
+        count++;
+    }
+
+    delete res;
+
+
+    if (nor==runs.GetSize() && sequences.GetSize()==1)
+    {
+        query="SELECT fRunNumber FROM RunData ";
+        query += Form(" WHERE fSequenceFirst=%d ", sequences.At(0));
 
         res = serv.Query(query);
         if (!res)
             return kFALSE;
+
+        TArrayI oldruns;
+        count=0;
+        row=0;
+        while ((row=res->Next()))
+        {
+            oldruns.Set(count+1);
+            oldruns.AddAt(atoi((*row)[0]), count);
+            count++;
+        }
+
+        if (runs.GetSize()!=oldruns.GetSize())
+        {
+            cout << "different sequsizes -> deleting sequence " << sequences.At(0) << endl;
+            return DeleteSequence(serv, sequences.At(0), dummy);
+        }
+
+        for (Int_t i=0; i<runs.GetSize(); i++)
+        {
+            if (runs.At(i)==oldruns.At(i))
+                continue;
+            cout << "different runs -> deleting sequence " << sequences.At(0) << endl;
+            return DeleteSequence(serv, sequences.At(0), dummy);
+        }
+
         delete res;
-
-        query = Form("DELETE FROM SequenceProcessStatus WHERE fSequenceFirst=%s", (*row)[0]);
-
-        res = serv.Query(query);
-        if (!res)
-            return kFALSE;
-        delete res;
-
-        Int_t sequno=atoi((*row)[0]);
-        TString fname(Form("/mnt/stk01/sequences/%04d/sequence%08d.txt", sequno/10000, sequno));
-        gSystem->Unlink(fname);
-
-        query = Form("UPDATE RunData SET fSequenceFirst=0 WHERE fSequenceFirst=%s", (*row)[0]);
-
-        res = serv.Query(query);
-        if (!res)
-            return kFALSE;
-        delete res;
-
-    }
-    delete res;
-
-    query = Form("DELETE FROM Sequences WHERE %s AND fManuallyChangedKEY=1", cond.Data());
-    res = serv.Query(query);
-    if (!res)
-        return kFALSE;
-
-    delete res;
-
-    return kTRUE;
-}
-
-Int_t CheckOverlap(MSQLServer &serv, Int_t from, Int_t to)
-{
-    TString query(Form("SELECT fSequenceFirst FROM Sequences WHERE"
-                       " (%d BETWEEN fSequenceFirst AND fSequenceLast) OR "
-                       " (%d BETWEEN fSequenceFirst AND fSequenceLast)", from, to));
-
-    TSQLResult *res = serv.Query(query);
-    if (!res)
-        return -1;
-
-    TSQLRow *row = res->Next();
-
-    Int_t rc = row ? kFALSE : kTRUE;
-    if (rc==kFALSE)
-        cout << "Sorry - the sequence from " << from << " to " << to << " overlaps with sequence #" << (*row)[0] << endl;
-
-    delete res;
-
+    }
+
+    cout << "same sequence -> nothing to do..." << endl;
     return rc;
 }
 
-Int_t DoCheck(TSQLResult &res, Int_t from, Int_t to)
-{
-    TSQLRow *row=0;
-
-    TArrayI data(9);
-
-    Int_t n = 0;
-
-    while ((row=res.Next()))
-    {
-        n++;
-
-        if (data[0]==0)
-        {
-            for (int i=0; i<data.GetSize(); i++)
-                data[i] = atoi((*row)[i]);
-            continue;
-        }
-
-        for (int i=1; i<data.GetSize(); i++)
-        {
-            if (data[i] != atoi((*row)[i]))
-                return i+1;
-        }
-    }
-    return n==0 ? 0 : -1;
-}
-
-Bool_t CheckSequence(MSQLServer &serv, Int_t from, Int_t to, Int_t src, Int_t type)
-{
-    TString query("SELECT fRunNumber, fL1TriggerTableKEY, fL2TriggerTableKEY,"
-                  " fProjectKEY, fHvSettingsKEY, fDiscriminatorThresholdTableKEY,"
-                  " fTriggerDelayTableKEY, fLightConditionsKEY, fTestFlagKEY"
-                  " FROM RunData");
-    query += Form(" WHERE fRunTypeKEY=%d AND fSourceKEY=%d AND fExcludedFDAKEY=1 AND (fRunNumber BETWEEN %d AND %d)"
-                  " ORDER BY fRunNumber", type, src, from, to);
-
-    TSQLResult *res = serv.Query(query);
-    if (!res)
-        return kFALSE;
-
-    Int_t rc = DoCheck(*res, from, to);
-    delete res;
-
-    switch (rc)
-    {
-    case 0: cout << "ERROR - No runs found for check!"                        << endl; break;
-    case 1: cout << "ERROR - fRunNumber doesn't match!"                       << endl; break;
-    case 2: cout << "ERROR - fL1TriggerTableKEY doesn't match!"                 << endl; break;
-    case 3: cout << "ERROR - fL2TriggerTableKEY doesn't match!"                 << endl; break;
-    case 4: cout << "ERROR - fProjectKEY doesn't match!"                      << endl; break;
-    case 5: cout << "ERROR - fHvSettingsKEY doesn't match!"                   << endl; break;
-    case 6: cout << "ERROR - fDiscriminatorThresholdTableKEY doesn't match!"  << endl; break;
-    case 7: cout << "ERROR - fTriggerDelayTableKEY doesn't match!"            << endl; break;
-    case 8: cout << "ERROR - fLightConditionsKEY doesn't match!"              << endl; break;
-    case 9: cout << "ERROR - fTestFlagKEY doesn't match!"                     << endl; break;
-    }
-
-    return rc<0;
-}
-
-Bool_t InsertSequence(MSQLServer &serv, Int_t from, Int_t to, Int_t src, Bool_t dummy)
-{
-    Int_t rc = dummy ? kTRUE : CheckOverlap(serv, from, to);
-    if (rc<=0)
-        return kFALSE;
+Bool_t InsertSequence(MSQLServer &serv, Int_t from, Int_t to)
+{
 
     // ========== Request number of events ==========
@@ -214,7 +295,7 @@
     query +=      " MIN(fZenithDistance), MAX(fZenithDistance), ";
     query +=      " MIN(fAzimuth), MAX(fAzimuth) ";
-    query += Form(" FROM RunData"
-                  " WHERE fRunTypeKEY=2 AND fSourceKEY=%d AND (fRunNumber BETWEEN %d AND %d) AND fExcludedFDAKEY=1",
-                  src, from, to);
+    query += Form(" FROM RunData WHERE fRunTypeKEY=2 AND "
+                  " (fRunNumber BETWEEN %d AND %d) AND fExcludedFDAKEY=1",
+                  from, to);
 
     TSQLResult *res = serv.Query(query);
@@ -239,5 +320,5 @@
 
     // ========== Request start time of sequence ==========
-    query = Form("SELECT fRunStart FROM RunData WHERE fRunNumber=%d AND fSourceKEY=%d AND fExcludedFDAKEY=1", from, src);
+    query = Form("SELECT fRunStart FROM RunData WHERE fRunNumber=%d AND fExcludedFDAKEY=1", from);
 
     res = serv.Query(query);
@@ -257,10 +338,11 @@
 
     // ========== Request data of sequence ==========
-    query = Form("SELECT fProjectKEY, fL1TriggerTableKEY, fL1TriggerTableKEY,"
+    query = Form("SELECT fSourceKEY, fProjectKEY, "
+                 " fL1TriggerTableKEY, fL1TriggerTableKEY,"
                  " fHvSettingsKEY, fDiscriminatorThresholdTableKEY,"
                  " fTriggerDelayTableKEY, fLightConditionsKEY, fTestFlagKEY"
                  " FROM RunData"
-                 " WHERE fRunTypeKEY=2 AND fSourceKEY=%d AND fExcludedFDAKEY=1 AND (fRunNumber BETWEEN %d AND %d)"
-                 " LIMIT 1", src, from, to);
+                 " WHERE fRunTypeKEY=2 AND fExcludedFDAKEY=1 AND (fRunNumber BETWEEN %d AND %d)"
+                 " LIMIT 1", from, to);
 
     res = serv.Query(query);
@@ -275,30 +357,23 @@
     }
 
-    TString query1 = Form("INSERT Sequences SET"
-                          " fSequenceFirst=%d,"
-                          " fSequenceLast=%d,"
-                          " fProjectKEY=%s,"
-                          " fSourceKEY=%d,"
-                          " fNumEvents=%s,"
-                          " fRunTime=%s,"
-                          " fRunStart=\"%s\","
-                          " fZenithDistanceMin=%s,"
-                          " fZenithDistanceMax=%s,"
-                          " fAzimuthMin=%s,"
-                          " fAzimuthMax=%s,"
-                          " fL1TriggerTableKEY=%s,"
-                          " fL2TriggerTableKEY=%s,"
-                          " fHvSettingsKEY=%s,"
-                          " fDiscriminatorThresholdTableKEY=%s,"
-                          " fTriggerDelayTableKEY=%s,"
-                          " fLightConditionsKEY=%s,"
-                          " fTestFlagKEY=%s,"
-                          " fManuallyChangedKEY=1",
-                          from, to, (*row)[0], src, nevts.Data(),
-                          secs.Data(), start.Data(), zdmin.Data(),
-                          zdmax.Data(), azmin.Data(), azmax.Data(),
-                          (*row)[1], (*row)[2], (*row)[3],
-                          (*row)[4], (*row)[5], (*row)[6],
-                          (*row)[7]);
+    TString query1("INSERT Sequences SET");
+    query1+=Form(" fSequenceFirst=%d,  fSequenceLast=%d,", from, to);
+    query1+=Form(" fProjectKEY=%s,", (*row)[0]);
+    query1+=Form(" fSourceKEY=%s,", (*row)[1]);
+    query1+=Form(" fNumEvents=%s,", nevts.Data());
+    query1+=Form(" fRunTime=%s,", secs.Data());
+    query1+=Form(" fRunStart=\"%s\",", start.Data());
+    query1+=Form(" fZenithDistanceMin=%s,", zdmin.Data());
+    query1+=Form(" fZenithDistanceMax=%s,", zdmax.Data());
+    query1+=Form(" fAzimuthMin=%s,", azmin.Data());
+    query1+=Form(" fAzimuthMax=%s,", azmax.Data());
+    query1+=Form(" fL1TriggerTableKEY=%s,", (*row)[2]);
+    query1+=Form(" fL2TriggerTableKEY=%s,", (*row)[3]);
+    query1+=Form(" fHvSettingsKEY=%s,", (*row)[4]);
+    query1+=Form(" fDiscriminatorThresholdTableKEY=%s,", (*row)[5]);
+    query1+=Form(" fTriggerDelayTableKEY=%s,", (*row)[6]);
+    query1+=Form(" fLightConditionsKEY=%s,", (*row)[7]);
+    query1+=Form(" fTestFlagKEY=%s, fManuallyChangedKEY=1", (*row)[8]);
+
 
     TString query2 = Form("UPDATE RunData SET fSequenceFirst=%d WHERE"
@@ -306,12 +381,9 @@
                           "  (fRunTypeKEY BETWEEN  2 AND  4) AND"
                           "  fSourceKEY=%d AND fHvSettingsKEY=%s AND fExcludedFDAKEY=1",
-                          from, from, to, src, (*row)[3]);
-
-    TString query3 = Form("INSERT SequenceProcessStatus SET fSequenceFirst=%d ",
-                          from);
-    delete res;
-
-    if (dummy)
-        return kTRUE;
+                          from, from, to, (*row)[1], (*row)[4]);
+
+    TString query3 = Form("INSERT SequenceProcessStatus SET fSequenceFirst=%d ", from);
+
+    delete res;
 
     res = serv.Query(query1);
@@ -333,9 +405,9 @@
 }
 
-Bool_t NewSequence(MSQLServer &serv, Int_t from, Int_t to, Int_t src, Bool_t dummy)
+Bool_t NewSequence(MSQLServer &serv, Int_t from, Int_t to, Bool_t dummy)
 {
     cout << "Found Sequence (" << from << ", " << to << ") ... checking runs..." << flush;
 
-    if (!CheckSequence(serv, from, to, src, 2))
+    if (!CheckRuns(serv, from, to, 2))
     {
         cout << "Warning - Found inconsistency in data-runs (" << from << ", " << to << ")" << endl;
@@ -344,5 +416,5 @@
         return kTRUE;
     }
-    if (!CheckSequence(serv, from, to, src, 3))
+    if (!CheckRuns(serv, from, to, 3))
     {
         cout << "Warning - Found inconsistency in ped-runs (" << from << ", " << to << ")" << endl;
@@ -354,5 +426,18 @@
     cout << "ok." << endl;
 
-    Bool_t rc = InsertSequence(serv, from, to, src, dummy);
+
+    cout << "checking Sequence..." << endl;
+
+    if (!CheckSequence(serv, from, to, dummy))
+    {
+        cout << " inserting sequence not necessary" << endl;
+        return kTRUE;
+    }
+
+
+    if (dummy)
+        return kTRUE;
+
+    Bool_t rc = InsertSequence(serv, from, to);
     if (!rc)
         cout << "InsertSequence failed!" << endl;
@@ -361,40 +446,12 @@
 }
 
-Bool_t GetSources(MSQLServer &serv, TString cond, TArrayI &srcs)
-{
-    TString query(Form("SELECT fSourceKEY"
-                       " FROM RunData"
-                       " WHERE %s AND fExcludedFDAKEY=1 AND (fRunTypeKEY BETWEEN 2 AND 4) GROUP BY fSourceKEY",
-                       cond.Data())
-                 ); //DATE(fStartTime)=\"2004-05-19\"");
-
-    TSQLResult *res = serv.Query(query);
-    if (!res)
-        return kFALSE;
-
-    srcs.Set(res->GetRowCount());
-
-    cout << "Found " << srcs.GetSize() << " sources." << endl << endl;
-
-    TSQLRow *row=0;
-    Int_t i=0;
-    while ((row=res->Next()))
-        srcs[i++] = atoi((*row)[0]);
-
-    delete res;
-    return kTRUE;
-}
-
-Bool_t Process(MSQLServer &serv, TString cond, Int_t src, Bool_t dummy)
-{
-    if (debug)
-        cout << "Processing Source: " << src << endl;
+Bool_t Process(MSQLServer &serv, Int_t from, Int_t to, Bool_t dummy)
+{
 
     TString query(Form("SELECT fRunNumber, fRunTypeKEY, fRunStart, fRunStop"
                        " FROM RunData"
-                       " WHERE %s AND fSourceKEY=%d AND fExcludedFDAKEY=1 AND"
-                       " (fRunTypeKEY BETWEEN 2 AND 4)"
-                       " ORDER BY fRunNumber", cond.Data(), src)
-                 ); //DATE(fStartTime)=\"2004-05-19\"");
+                       " WHERE fRunNumber BETWEEN %d AND %d AND "
+                       " fExcludedFDAKEY=1 AND (fRunTypeKEY BETWEEN 2 AND 4)"
+                       " ORDER BY fRunNumber", from, to));
 
     TSQLResult *res = serv.Query(query);
@@ -532,5 +589,5 @@
             if (n!=-1)
             {
-                if (!NewSequence(serv, start, last, src, dummy))
+                if (!NewSequence(serv, start, last, dummy))
                 {
                     rc = kFALSE;
@@ -548,5 +605,5 @@
     if (n!=-1 && start!=last)
     {
-        if (!NewSequence(serv, start, last, src, dummy))
+        if (!NewSequence(serv, start, last, dummy))
             rc = kFALSE;
     }
@@ -558,5 +615,6 @@
 }
 
-// This tool will work from Period017 (2004_05_17) on...
+
+
 int buildsequenceentries(TString day, Bool_t dummy=kTRUE)
 {
@@ -581,19 +639,76 @@
                             day.Data(), day.Data()));
 
-    if (!dummy && !DeleteSequences(serv, cond))
+    TString query(Form("SELECT fRunNumber, fSourceKEY, fProjectKEY, fHvSettingsKEY,  fLightConditionsKEY, fDiscriminatorThresholdTableKEY, fTriggerDelayTableKEY FROM RunData WHERE %s AND fExcludedFDAKEY=1 order by fRunNumber", cond.Data()));
+
+    TSQLResult *res = serv.Query(query);
+    if (!res)
         return 0;
 
+    TString keys[6]= { "NULL", "NULL", "NULL", "NULL", "NULL", "NULL" };
+    TString stop     = "NULL";
+    TString runstart = "NULL";
+    TString runstop  = "NULL";
+    Int_t count = 0;
+    TExMap blocks;
+    Int_t runbegin;
+    Int_t runend;
+
+    TSQLRow *row=0;
+    while ((row=res->Next()))
+    {
+        if (count==0)
+        {
+            for (Int_t i=1 ; i<7 ; i++)
+                keys[i-1]=(*row)[i];
+            runstart=(*row)[0];
+        }
+
+        for (Int_t i=1 ; i<7 ; i++)
+        {
+            runbegin=atoi(runstart.Data());
+            runend=atoi(runstop.Data());
+            if (i==2 && runbegin>20100 && runend<45100)
+                continue;
+
+            TString value=(*row)[i];
+            TString key=keys[i-1];
+            if (!value.CompareTo(key)) 
+                continue;
+
+            keys[i-1]=value;
+            //hier einfuellen
+            blocks.Add((ULong_t)blocks.GetSize(), (Long_t)runbegin, (Long_t)runend);
+            runstart=(*row)[0];
+            for (Int_t i=1 ; i<7 ; i++)
+                keys[i-1]=(*row)[i];
+            break;
+        }
+        runstop=(*row)[0];
+        count++;
+    }
+
+    //und hier einfuellen (letzter wert)
+    runbegin=atoi(runstart.Data());
+    runend=atoi(runstop.Data());
+    blocks.Add((ULong_t)blocks.GetSize(), (Long_t)runbegin, (Long_t)runend);
+
+
     Bool_t rc = kTRUE;
 
-    // get all sources for this day
-    TArrayI src;
-    GetSources(serv, cond, src);
-    // find and build the sequences for the day for each source
-    for (int i=0; i<src.GetSize(); i++)
-        if (!Process(serv, cond, src[i], dummy))
+    Long_t key, val;
+    TExMapIter nblocks(&blocks);
+    while (nblocks.Next(key, val))
+    {
+        Int_t runstart2 = (Int_t)key;
+        Int_t runstop2 = (Int_t)val;
+        cout << endl << "datablock from " << runstart2 << " to " << runstop2 << endl;
+
+        if (!Process(serv, runstart2, runstop2, dummy))
             rc = kFALSE;
 
+    }
     return rc ? 1 : 0;
 }
+
 
 int buildsequenceentries()
@@ -610,6 +725,4 @@
     TString query="SELECT fDate FROM SequenceBuildStatus";
 
-    cout << "Q: " << query << endl;
-
     TSQLResult *res = serv.Query(query);
     if (!res)
