35 #ifndef __GoDBCollectionOfTraces_h
36 #define __GoDBCollectionOfTraces_h
38 #include "MegaVTK2Configure.h"
40 #include "vtkMySQLDatabase.h"
61 std::string CollectionName, std::string Traces,
62 std::string iCollectionOfName,
unsigned int iImgSessionID);
74 void SetCollectionInfo(std::string iCollectionName,
75 std::string iTracesName,
76 std::string iCollectionOfName);
81 void SetImgSessionID(
unsigned int iImgSessionID);
89 void DeleteTraceInDB(
int TraceToDelete, vtkMySQLDatabase *DatabaseConnector);
98 void DeleteTracesInDB(std::list< unsigned int > TracesToDelete,
99 vtkMySQLDatabase *DatabaseConnector);
110 void UpdateCollectionIDOfSelectedTraces(
111 std::list< unsigned int > iListSelectedTraces,
unsigned int iCollectionID,
112 vtkMySQLDatabase *iDatabaseConnector);
119 std::string GetCollectionOf();
130 void RecalculateDBBoundingBox(
131 vtkMySQLDatabase *iDatabaseConnector,
int iCollectionID);
139 void RecalculateDBBoundingBox(
140 vtkMySQLDatabase *iDatabaseConnector, std::list< unsigned int > iListTracesIDs);
147 std::list< NameWithColorData > GetAllTracesIDsWithColor(
148 vtkMySQLDatabase *iDatabaseConnector);
156 std::list< NameWithColorData > GetTracesIDsWithColorForATimePoint(
157 vtkMySQLDatabase *iDatabaseConnector,
unsigned int iTimePoint);
168 template<
typename T >
169 int CreateCollectionWithNoTracesNoPoints(vtkMySQLDatabase *iDatabaseConnector,
171 T iNewCollection,
int iTimePoint = -1)
173 iNewCollection.SetField(
"ImagingSessionID", this->m_ImgSessionID);
175 int CoordIDMax = GetCoordIDMaxForBoundingBoxWithNoTraces(iDatabaseConnector);
176 int CoordIDMin = GetCoordIDMinForBoundingBoxWithNoTraces(iDatabaseConnector);
178 if ( iTimePoint != -1 )
180 this->SetTheTimePointCoordinatesForMesh(
181 iTimePoint, CoordIDMax, CoordIDMin, iDatabaseConnector);
183 std::string CollectionID = iNewCollection.GetMapValue(this->m_CollectionIDName);
184 if ( CollectionID !=
"0" )
186 if (CollectionID ==
"noValue")
188 return this->CreateNewTraceInDB< T >( iNewCollection, iDatabaseConnector,
189 CoordIDMin, CoordIDMax, iColor);
193 return this->CreateNewTraceInDB< T >( iNewCollection, iDatabaseConnector,
194 CoordIDMin, CoordIDMax, iColor,
195 ss_atoi< unsigned int >(CollectionID) );
200 return this->CreateNewTraceInDB< T >(iNewCollection, iDatabaseConnector,
201 CoordIDMin, CoordIDMax, iColor, 0);
215 template<
typename T >
216 unsigned int CreateNewTraceInDB(T iTrace, vtkMySQLDatabase *iDatabaseConnector,
219 iTrace.SetColor(iColor.second.red(), iColor.second.green(),
220 iColor.second.blue(), iColor.second.alpha(), iColor.first,
223 iTrace.SetCollectionID(iCollectionID);
224 return iTrace.SaveInDB(iDatabaseConnector);
230 template<
typename T >
231 unsigned int CreateNewTraceInDB(T iTrace, vtkMySQLDatabase *iDatabaseConnector,
233 unsigned int iCollectionID)
235 iTrace.SetField(
"CoordIDMin", ConvertToString< unsigned int >(iCoordIDMin) );
236 iTrace.SetField(
"CoordIDMax", ConvertToString< unsigned int >(iCoordIDMax) );
237 iTrace.SetColor(iColor.second.red(), iColor.second.green(),
238 iColor.second.blue(), iColor.second.alpha(), iColor.first,
241 iTrace.SetCollectionID(iCollectionID);
242 return iTrace.SaveInDB(iDatabaseConnector);
248 template<
typename T >
249 unsigned int CreateNewTraceInDB(T iTrace, vtkMySQLDatabase *iDatabaseConnector,
250 unsigned int iCoordIDMin,
unsigned int iCoordIDMax,
253 iTrace.SetField(
"CoordIDMin", ConvertToString< unsigned int >(iCoordIDMin) );
254 iTrace.SetField(
"CoordIDMax", ConvertToString< unsigned int >(iCoordIDMax) );
255 iTrace.SetColor(iColor.second.red(), iColor.second.green(),
256 iColor.second.blue(), iColor.second.alpha(), iColor.first,
258 return iTrace.SaveInDB(iDatabaseConnector);
268 template<
typename T >
269 void ChangeColorForTrace(
unsigned int iTraceID,
274 tempTrace.SetValuesForSpecificID(iTraceID, iDatabaseConnector);
275 tempTrace.SetColor(iNewColor.second.red(), iNewColor.second.green(),
276 iNewColor.second.blue(), iNewColor.second.alpha(),
277 iNewColor.first, iDatabaseConnector);
278 tempTrace.SaveInDB(iDatabaseConnector);
287 std::list< unsigned int > GetListTracesIDsFromThisCollectionOf(
288 vtkMySQLDatabase *iDatabaseConnector, std::list< unsigned int > iListTraces);
298 std::list< unsigned int > GetListCollectionIDs(
299 vtkMySQLDatabase *iDatabaseConnector, std::list< unsigned int > iListTracesIDs,
300 bool ExcludeZero =
true,
bool Distinct =
true);
308 std::list< unsigned int > GetListTracesIDWithNoPoints(
309 std::list< unsigned int > iListTracesIDs, vtkMySQLDatabase *iDatabaseConnector);
317 std::list< unsigned int > GetLastCreatedTracesIDs(
318 vtkMySQLDatabase *iDatabaseConnector,
int iNumberOfTraces);
329 void UpdateValueForListTraces(
330 vtkMySQLDatabase *iDatabaseConnector,std::string iNameValue,
331 std::string iValue, std::list<unsigned int> iListTraceIDs);
341 std::list<double*> GetCoordinateCenterBoundingBox(vtkMySQLDatabase *iDatabaseConnector,
342 unsigned int iTraceID);
352 std::list<unsigned int> GetTraceIDsWithTimePointAndCollectionID(vtkMySQLDatabase *iDatabaseConnector,
353 unsigned int iCollectionID,
unsigned int iTimePoint);
362 std::list<unsigned int> GetTimePointWithSeveralTracesFromTheList(
363 vtkMySQLDatabase *iDatabaseConnector, std::list< unsigned int > iListTraceIDs);
373 int GetMaxTraceIDsForSpecificTimePoint(vtkMySQLDatabase *iDatabaseConnector,
374 std::list<unsigned int> iListTraceIDs,
unsigned int iTimePoint);
384 std::list<unsigned int> GetNonMaxTraceIDsForSpecificTimePoint(
385 vtkMySQLDatabase *iDatabaseConnector,std::list<unsigned int> iListTraceIDs,
386 unsigned int iTimePoint,
unsigned int iMaxTraceID);
395 std::list<unsigned int> GetListTimePointsFromTraceIDs(
396 vtkMySQLDatabase *iDatabaseConnector,std::list<unsigned int> iListTraceIDs);
406 std::list<unsigned int> GetTraceIDsBelongingToCollectionID(
407 vtkMySQLDatabase *iDatabaseConnector,std::list<unsigned int> iListTraceIDs,
408 unsigned int iCollectionID);
416 std::list<unsigned int> GetTraceIDsBelongingToCollectionID(
417 vtkMySQLDatabase *iDatabaseConnector,std::list<unsigned int> iListCollectionIDs);
419 std::list<unsigned int> GetTraceIDsBelongingToListTimePoints(
420 vtkMySQLDatabase *iDatabaseConnector,std::list<unsigned int> iListTPs);
428 std::list<unsigned int> GetTimePointsForTraceIDs(
429 vtkMySQLDatabase *iDatabaseConnector,std::list<unsigned int> iListTraceIDs);
439 std::list<unsigned int> GetTraceIDsWithTimePointInf(
440 vtkMySQLDatabase *iDatabaseConnector,std::list<unsigned int> iListTraceIDs,
441 unsigned int iTimePoint);
451 unsigned int GetBoundedBoxTimePoint(
452 vtkMySQLDatabase *iDatabaseConnector,
unsigned int iTraceID,
bool MinTimePoint =
true);
463 std::list<T> GetListStructureFromDB(
464 vtkMySQLDatabase* iDatabaseConnector,
unsigned int iImgSessionID,
465 std::list<unsigned int> iListTraces)
467 std::list<T> oListTracesResults;
468 std::vector<std::string> TraceAttributes = this->GetAttributesForTraces();
469 FieldWithValue CoordinateCondition = {
"CoordIDMin",
"CoordID",
"="};
472 GetInfoFromDBAndModifyListStructure<T>(
473 oListTracesResults, iDatabaseConnector,
474 TraceAttributes, this->m_TracesName,
"coordinate",
"color",
475 CoordinateCondition, ColorCondition,
"ImagingSessionID",
476 iImgSessionID, this->m_TracesIDName, iListTraces);
477 return oListTracesResults;
483 int GetTraceIDWithLowestTimePoint(vtkMySQLDatabase *iDatabaseConnector,
484 std::list<unsigned int> iListTraceIDs);
486 std::list<unsigned int> GetTrackFamilyDataFromDB(
487 vtkMySQLDatabase *iDatabaseConnector);
489 std::list<unsigned int> GetTrackFamiliesForLineages(
490 vtkMySQLDatabase *iDatabaseConnector, std::list<unsigned int> iLineagesID);
496 std::list<unsigned int> GetTrackFamilyID(vtkMySQLDatabase *iDatabaseConnector,
497 std::list<unsigned int> iListTrackIDs);
499 std::string GetPoints(vtkMySQLDatabase *iDatabaseConnector,
500 std::string iTraceName,
501 unsigned int iTraceID);
503 std::vector<unsigned int> GetTrackFamily(vtkMySQLDatabase *iDatabaseConnector,
504 unsigned int iTrackID);
506 bool isMother(vtkMySQLDatabase *iDatabaseConnector,
unsigned int iTrackID);
520 int CreateNewCollection();
525 int CreateNewCollection(vtkMySQLDatabase *DatabaseConnector,
GoDBTraceRow & myNewObject);
528 void UpdateBoundingBoxInDB(
int iCoordIDMin,
int iCoordIDMax,
529 int iTraceID, vtkMySQLDatabase *iDatabaseConnector);
533 void UpdateCollectionIDOfSelectedTrace(
int iSelectedTraceID,
int inewCollectionID,
534 vtkMySQLDatabase *DatabaseConnector);
550 void SetTheTimePointCoordinatesForMesh(
unsigned int iTimePoint,
553 vtkMySQLDatabase *iDatabaseConnector);
560 int GetCoordIDMaxForBoundingBoxWithNoTraces(
561 vtkMySQLDatabase *iDatabaseConnector);
568 int GetCoordIDMinForBoundingBoxWithNoTraces(
569 vtkMySQLDatabase *iDatabaseConnector);
574 int GetCoordMinID(vtkMySQLDatabase *DatabaseConnector,
int iTraceID);
579 int GetCoordMaxID(vtkMySQLDatabase *DatabaseConnector,
int iTraceID);
584 vtkMySQLDatabase *DatabaseConnector, std::list< unsigned int > iListCollectionOfTracesID);
589 vtkMySQLDatabase *DatabaseConnector, std::list< unsigned int > iListCollectionOfTracesID);
598 void GetFieldsNeededForQueryForColorData(
599 std::vector< std::string > & ioSelectedFields,
600 std::vector< std::string > & ioJoinTablesOnTraceTable);
608 std::list< NameWithColorData >
609 GetListNameWithColorDataFromResultsQuery(
610 std::vector< std::vector< std::string > > iResultsQuery);
612 std::vector<std::string> GetAttributesForTraces();