Index: trunk/MagicSoft/Mars/datacenter/macros/buildsequenceentries.C
===================================================================
--- trunk/MagicSoft/Mars/datacenter/macros/buildsequenceentries.C	(revision 7242)
+++ trunk/MagicSoft/Mars/datacenter/macros/buildsequenceentries.C	(revision 7243)
@@ -177,131 +177,172 @@
 Bool_t CheckSequence(MSQLServer &serv, TString datapath, TString sequpath, 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);
+    Int_t rc=0; //rc=0 means sequence is still the same -> insert not neccessary
+    //rc=1 means deleting sequence(s) worked -> insert
+    //if deleting sequence doesn't work -> return -1
+
+
+    //getting # of sequence (in sequDB) between from and to
+    TString query(Form("SELECT fSequenceFirst FROM Sequences WHERE fSequenceFirst BETWEEN %d and %d", from, to));
 
     TSQLResult *res = serv.Query(query);
     if (!res)
-        return kFALSE;
-
-    Int_t count=0;
-    Int_t nor=0;
-    TArrayI sequences;
+        return -1;
+
+    TArrayI Sequences;
+    Int_t numsequ=0;
 
     TSQLRow *row=0;
-    while ((row=res->Next()))
-    {
-        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)
-    {
+    while ((row=res.Next()))
+    {
+        numsequ++;
+        sequences.Set(numsequ);
+        sequences.AddAt(atoi((*row)[0]), numsequ-1);
+    }
+    delete res;
+
+    //if there's no sequence in the table Sequences -> check other tables
+    //if there's one sequence -> check if the sequence is identical
+    //if there are more sequences -> delete them
+    switch (numsequ)
+    {
+    case 0:
+        cout << "found no sequence in Sequ-DB -> check other tables" << endl;
+        cout << " deleting every sequence found in Calibration, Star or SequenceProcessStatus between "
+            << from << " and " << to << endl;
+
+        //calibration table
+        query(Form("SELECT fSequenceFirst FROM Calibration WHERE fSequenceFirst BETWEEN %d and %d", from, to));
+        res = serv.Query(query);
+        if (!res)
+            return -1;
+        row=0;
+        while ((row=res.Next()))
+        {
+            if(!DeleteSequence(serv, datapath, sequpath, atoi((*row)[0]), dummy))
+                return -1;
+            else
+                rc=1;
+        }
+        delete res;
+
+        //Star table
+        query(Form("SELECT fSequenceFirst FROM Star WHERE fSequenceFirst BETWEEN %d and %d", from, to));
+        res = serv.Query(query);
+        if (!res)
+            return -1;
+        row=0;
+        while ((row=res.Next()))
+        {
+            if(!DeleteSequence(serv, datapath, sequpath, atoi((*row)[0]), dummy))
+                return -1;
+            else
+                rc=1;
+        }
+        delete res;
+
+        //SequenceProcessStatus table
+        query(Form("SELECT fSequenceFirst FROM SequenceProcessStatus WHERE fSequenceFirst BETWEEN %d and %d", from, to));
+        res = serv.Query(query);
+        if (!res)
+            return -1;
+        row=0;
+        while ((row=res.Next()))
+        {
+            if(!DeleteSequence(serv, datapath, sequpath, atoi((*row)[0]), dummy))
+                return -1;
+            else
+                rc=1;
+        }
+        delete res;
+
+
+    case 1:
+        cout << "found 1 sequence: " << sequences.At(0) << " -> check sequ# " << endl;
+        if (sequences.At(0)!=from)
+        {
+            if(!DeleteSequence(serv, datapath, sequpath, sequences.At(i), dummy))
+                return -1;
+            else
+                rc=1;
+        }
+        else
+        {
+            cout << "sequence# is the same -> checking the runs " << endl;
+
+            //getting olf runs
+            query(Form("SELECT fRunNumber FROM RunData WHERE fSequenceFirst=%d ", from));
+            res = serv.Query(query);
+            if (!res)
+                return -1;
+
+            TArrayI oldruns;
+            Int_t count=0;
+            row=0;
+            while ((row=res.Next()))
+            {
+                count++;
+                oldruns.Set(count);
+                oldruns.AddAt(atoi((*row)[0]), count-1);
+            }
+            delete res;
+
+            //getting new runs
+            query(Form("SELECT fRunNumber FROM RunData WHERE fRunNumber BETWEEN %d and %d AND fExcludedFDAKEY=1", from, to));
+            res = serv.Query(query);
+            if (!res)
+                return -1;
+            TArrayI newruns;
+            count=0;
+            row=0;
+            while ((row=res.Next()))
+            {
+                count++;
+                oldruns.Set(count);
+                oldruns.AddAt(atoi((*row)[0]), count-1);
+            }
+            delete res;
+
+            //comparing old and new runs (first the # of runs, if it is the same, also the single runnumbers
+            if (oldruns.GetSize()!=newruns.GetSize())
+            {
+                cout << " number of runs is not the same -> deleting sequence " << sequences.At(0) << endl;
+                if(!DeleteSequence(serv, datapath, sequpath, sequences.At(0), dummy))
+                    return -1;
+                else
+                    rc=1;
+            }
+            else
+            {
+                cout << " number of runs is the same -> checking the single runnumbers " << endl;
+
+                for (Int_t i=0;i<newruns.GetSize();i++)
+                {
+                    if (newruns.At(i)==oldruns.At(i))
+                        continue;
+
+                    cout << i << ". run is not the same ( " << oldruns.At(i) << " -- " << newruns.At(i)
+                        << ") -> deleting sequence " << sequences.At(0) << endl;
+                    if(!DeleteSequence(serv, datapath, sequpath, sequences.At(0), dummy))
+                        return -1;
+                    else
+                        rc=1;
+                    break;
+                }
+            }
+        }
+
+    default:
+        cout << "found " << numsequ << " sequences -> deleting them " << endl;
+
         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, datapath, sequpath, 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, datapath, sequpath, sequences.At(0), dummy);
-            rc=DeleteSequence(serv, datapath, sequpath, 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;
-            rc=DeleteSequence(serv, datapath, sequpath, sequences.At(0), dummy);
-//            return DeleteSequence(serv, datapath, sequpath, sequences.At(0), dummy);
-        }
-
-        delete res;
-    }
-
-    query="SELECT fSequenceFirst FROM Sequences ";
-    query += Form(" WHERE fSequenceFirst BETWEEN %d AND %d "
-                  " ORDER BY fSequenceFirst", from, to);
-
-    cout << query << endl;
-
-    res = serv.Query(query);
-    if (!res)
-        return kFALSE;
-
-    Int_t sequ=0;
-    while ((row=res->Next()))
-    {
-        sequ=atoi((*row)[0]);
-        cout << "deleting sequence " << sequ << endl;
-        if(!DeleteSequence(serv, datapath, sequpath, sequ, dummy))
-            rc=kFALSE;
-    }
-
-    delete res;
-
-
-    cout << "same sequence -> nothing to do..." << endl;
+                    return -1;
+                else
+                    rc=1;
+        }
+    }
+
     return rc;
 }
@@ -451,17 +492,24 @@
     cout << "checking Sequence..." << endl;
 
-    if (!CheckSequence(serv, datapath, sequpath, from, to, dummy))
-    {
+    Bool_t rc=kFALSE;
+    switch (CheckSequence(serv, datapath, sequpath, from, to, dummy))
+    {
+    case 0:
         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;
+
+    case 1:
+        cout << " deleting successfully finished -> inserting sequence " << from << endl;
+        if (dummy)
+            return kTRUE;
+        rc = InsertSequence(serv, from, to);
+        if (!rc)
+            cout << "InsertSequence failed!" << endl;
+
+    case -1:
+        cout << " deleting went wrong " << endl;
+        rc=kFALSE;
+    }
+
 
     return rc;
