Skip to content
Snippets Groups Projects
melodic.h 2.55 KiB
Newer Older
Mark Jenkinson's avatar
Mark Jenkinson committed
/*  MELODIC - Multivariate exploratory linear optimized decomposition into 
                 independent components
    
    melodic.h - main program header

    Christian F. Beckmann, FMRIB Analysis Group
Mark Jenkinson's avatar
Mark Jenkinson committed
    
    Copyright (C) 1999-2013 University of Oxford */
Mark Jenkinson's avatar
Mark Jenkinson committed

/*  CCOPYRIGHT */
Mark Jenkinson's avatar
Mark Jenkinson committed

#ifndef __MELODIC_h
#define __MELODIC_h

Christian Beckmann's avatar
Christian Beckmann committed
#include <strstream>
Mark Jenkinson's avatar
Mark Jenkinson committed

#ifdef __APPLE__
#include <mach/mach.h>
#define memmsg(msg) { \
Christian Beckmann's avatar
Christian Beckmann committed
  MelodicOptions&opt = MelodicOptions::getInstance(); \
  struct task_basic_info t_info; \
  mach_msg_type_number_t t_info_count = TASK_BASIC_INFO_COUNT; \
  if (KERN_SUCCESS == task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t) &t_info, &t_info_count)) \
	{ \
Christian Beckmann's avatar
Christian Beckmann committed
		if(opt.debug.value()) {\
		    cout << " MEM: " << msg << " res: " << t_info.resident_size/1000000 << " virt: " << t_info.virtual_size/1000000 << "\n"; \
		    cout.flush(); \
		 } \
	} \
}
#else
#define memmsg(msg) { \
Christian Beckmann's avatar
Christian Beckmann committed
  MelodicOptions&opt = MelodicOptions::getInstance(); \
  if(opt.debug.value()) {\
		cout << msg; \
		cout.flush(); \
  } \
Mark Jenkinson's avatar
Mark Jenkinson committed
// a simple message macro that takes care of cout and log
#define message(msg) { \
  MelodicOptions& opt = MelodicOptions::getInstance(); \
  if(opt.verbose.value()) \
    { \
      cout << msg; \
    } \
  Log& logger  =   LogSingleton::getInstance(); \
  logger.str() << msg; \
  cout.flush(); \
}

Christian Beckmann's avatar
Christian Beckmann committed
#define dbgmsg(msg) { \
  MelodicOptions&opt = MelodicOptions::getInstance(); \
  if(opt.debug.value()) {\
		cout << msg; } \
}

#define outMsize(msg,Mat) { \
Christian Beckmann's avatar
Christian Beckmann committed
  MelodicOptions& opt = MelodicOptions::getInstance();		\
  if(opt.debug.value())						\
    cerr << "     " << msg << "  " <<Mat.Nrows() << " x " << Mat.Ncols() << endl;	\
Mark Jenkinson's avatar
Mark Jenkinson committed
}

namespace Melodic{

const string version = "3.13";  

// The two strings below specify the title and example usage that is	
// printed out as the help or usage message
const string title=string("MELODIC (Version ")+version+")"+
		string("\n Multivariate Exploratory Linear Optimised Decomposition into Independent Components\n")+
		string("\nAuthor: Christian F. Beckmann \n Copyright(c) 2001-2013 University of Oxford");

const string usageexmpl=string(" melodic -i <filename> <options>")+
		   string("\n \t \t to run melodic")+
	//	   string("\n melodic -i <filename> --mix=melodic_mix")+
	//	   string(" --filter=\"string of component numbers\"")+
	//	   string("\n \t \t to remove estimated ICs from input")+
		   string("\n melodic -i <filename> --ICs=melodic_IC")+
		   string(" --mix=melodic_mix <options>")+
		   string("\n \t \t to run Mixture Model based inference on estimated ICs")+
		   string("\n melodic --help ");
Mark Jenkinson's avatar
Mark Jenkinson committed
}

#endif