//____________________________________________________________________
//
// Task for running analyses using a BDT from TMVA
//  
// Author: Soeren Stamm <mailto: stamm@physik.hu-berlin.de>
// Update: $Id: AtlBDTAnalysisTask.cxx,v 1.1 2014/07/15 07:32:22 stamm Exp $
// Copyright: 2014 (C) Soeren Stamm
//
#ifndef ATLAS_AtlBDTAnalysisTask
#include <AtlBDTAnalysisTask.h>
#endif
#include <TSystem.h>
#include <iostream>
#include <fstream>
#include <TClass.h>
#include <TDataMember.h>
#include <TROOT.h>

using namespace std;

#ifndef __CINT__
ClassImp(AtlBDTAnalysisTask);
#endif

//____________________________________________________________________

AtlBDTAnalysisTask::AtlBDTAnalysisTask(const char* name, const char* title) :
    AtlAppAnalysisTask(name, title) {
    //
    // Default constructor
    //

    SetBatchJob(kTRUE);
    SetBatchNodeAutomatic(kFALSE);

    AddUserEnv("TMVAHOME");
}

//____________________________________________________________________

AtlBDTAnalysisTask::~AtlBDTAnalysisTask() {
    //
    // Default destructor
    //
}

//____________________________________________________________________

void AtlBDTAnalysisTask::CreateRunScript(Option_t *option) {
    //
    // Create run script for job submission
    //
    ofstream out;
    out.open(fRunScript->Data());
    out << "#!/bin/sh" << endl
	<< "# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl
	<< "# !!! This is an automatically generated file !!!" << endl
	<< "# !!! D O   N O T   E D I T                   !!!" << endl
	<< "# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl
	<< "#" << endl
	<< "# Run script for A++ analysis job submission" << endl
	<< "#" << endl << endl
	<< "# Set environment" << endl;

    // Platform
    if ( gSystem->Getenv("ARCH_TYPE") != 0 ) {
	out << "export ARCH_TYPE=" << gSystem->Getenv("ARCH_TYPE") << endl;
    } else {
	Error("CreateRunScript", "Environment variable ARCH_TYPE not set. Abort!");
	gSystem->Abort(0);
    }

    // ROOT
    out << "export ROOTSYS=" << gSystem->Getenv("ROOTSYS") << endl
	<< "export PATH=${ROOTSYS}/bin:${PATH}" << endl
	<< "export LD_LIBRARY_PATH=${ROOTSYS}/lib:${LD_LIBRARY_PATH}" << endl;

    // A++ and user-defined libraries
    TIter next_lib(fListOfUserEnvs);
    TNamed *env = 0;
    while ( (env = (TNamed*)next_lib()) ) {
	if ( gSystem->Getenv(env->GetName()) != 0 ) {
	    TString host2(gSystem->HostName());
	    if ( host2.Contains("lx") ) {	    
		out << "source /home/grid/lcg/sw/root_setup_sles11.sh-v5.34" << endl;
	    }
	    out << "export " << env->GetName() << "="
		<< gSystem->Getenv(env->GetName()) << endl
		<< "export LD_LIBRARY_PATH=${"
		<< env->GetName() << "}/lib/${ARCH_TYPE}:${LD_LIBRARY_PATH}"
		<< endl;
	} else {
	    Error("CreateRunScript", "Environment variable %s not set. Abort!",
		  env->GetName());
	    gSystem->Abort(0);
	}
    }

    // Load TMVA
    if ( gSystem->Getenv("TMVAHOME") != 0 ) {
	out << endl
	    << "# Setup TVMA version" << endl
	    << "source " << gSystem->Getenv("TMVAHOME") << "/test/setup.sh " << gSystem->Getenv("TMVAHOME")
	    << endl << endl;
    } else {
	Error("CreateRunScript", "Environment variable TMVAHOME not set. Abort!");
	gSystem->Abort(0);
    }
    
    out	<< endl << endl
	<< "# Job execution" << endl;
//	<< "export PBS_O_HOME=" << fTempOutputPath->Data() << endl
//	<< "export PBS_O_WORKDIR=" << fTempOutputPath->Data() << endl;
//	<< "cd $PBS_O_WORKDIR" << endl;

    if (  fTempOutputFileName != 0 ) {
	out << "if [ ! -d " << gSystem->DirName( fTempOutputFileName->Data() ) << " ]; then " << endl
	    << "   mkdir -p " << gSystem->DirName( fTempOutputFileName->Data() ) << endl
	    << "fi" << endl;
    }
    
    if ( fTempOutputPath != 0 && fTempLogFilePath != 0 ) {
	out << "mkdir -p " << fTempOutputPath->Data() << endl
	    << "cp " << fJobHome->Data() << "/analysis_run.C " << fTempOutputPath->Data() << endl
	    << "cd " << fTempOutputPath->Data() << endl
	    << endl
	    << "Remove old Logfiles " << endl
	    << "rm " << fTempLogFilePath->Data() << endl
	    << "rm " << fLogFilePath->Data() << endl
	    << "root -q -l -b analysis_run.C > " << fTempLogFilePath->Data()
	    << " 2>&1" << endl
	    << "mv " << fTempLogFilePath->Data() << " " << fLogFilePath->Data() << endl;
    } else {
	out << "JOBHOME=" << fJobHome->Data() << endl
	    << "cd $JOBHOME" << endl	
	    << "root -q -l -b analysis_run.C > " << fLogFilePath->Data()
	    << " 2>&1" << endl;
    }
    
    if (  fTempOutputFileName != 0 )
	out << "mv " << fTempOutputFileName->Data() << " " << fOutputFileName->Data() << endl;
    
    out.close();
}

 AtlBDTAnalysisTask.cxx:1
 AtlBDTAnalysisTask.cxx:2
 AtlBDTAnalysisTask.cxx:3
 AtlBDTAnalysisTask.cxx:4
 AtlBDTAnalysisTask.cxx:5
 AtlBDTAnalysisTask.cxx:6
 AtlBDTAnalysisTask.cxx:7
 AtlBDTAnalysisTask.cxx:8
 AtlBDTAnalysisTask.cxx:9
 AtlBDTAnalysisTask.cxx:10
 AtlBDTAnalysisTask.cxx:11
 AtlBDTAnalysisTask.cxx:12
 AtlBDTAnalysisTask.cxx:13
 AtlBDTAnalysisTask.cxx:14
 AtlBDTAnalysisTask.cxx:15
 AtlBDTAnalysisTask.cxx:16
 AtlBDTAnalysisTask.cxx:17
 AtlBDTAnalysisTask.cxx:18
 AtlBDTAnalysisTask.cxx:19
 AtlBDTAnalysisTask.cxx:20
 AtlBDTAnalysisTask.cxx:21
 AtlBDTAnalysisTask.cxx:22
 AtlBDTAnalysisTask.cxx:23
 AtlBDTAnalysisTask.cxx:24
 AtlBDTAnalysisTask.cxx:25
 AtlBDTAnalysisTask.cxx:26
 AtlBDTAnalysisTask.cxx:27
 AtlBDTAnalysisTask.cxx:28
 AtlBDTAnalysisTask.cxx:29
 AtlBDTAnalysisTask.cxx:30
 AtlBDTAnalysisTask.cxx:31
 AtlBDTAnalysisTask.cxx:32
 AtlBDTAnalysisTask.cxx:33
 AtlBDTAnalysisTask.cxx:34
 AtlBDTAnalysisTask.cxx:35
 AtlBDTAnalysisTask.cxx:36
 AtlBDTAnalysisTask.cxx:37
 AtlBDTAnalysisTask.cxx:38
 AtlBDTAnalysisTask.cxx:39
 AtlBDTAnalysisTask.cxx:40
 AtlBDTAnalysisTask.cxx:41
 AtlBDTAnalysisTask.cxx:42
 AtlBDTAnalysisTask.cxx:43
 AtlBDTAnalysisTask.cxx:44
 AtlBDTAnalysisTask.cxx:45
 AtlBDTAnalysisTask.cxx:46
 AtlBDTAnalysisTask.cxx:47
 AtlBDTAnalysisTask.cxx:48
 AtlBDTAnalysisTask.cxx:49
 AtlBDTAnalysisTask.cxx:50
 AtlBDTAnalysisTask.cxx:51
 AtlBDTAnalysisTask.cxx:52
 AtlBDTAnalysisTask.cxx:53
 AtlBDTAnalysisTask.cxx:54
 AtlBDTAnalysisTask.cxx:55
 AtlBDTAnalysisTask.cxx:56
 AtlBDTAnalysisTask.cxx:57
 AtlBDTAnalysisTask.cxx:58
 AtlBDTAnalysisTask.cxx:59
 AtlBDTAnalysisTask.cxx:60
 AtlBDTAnalysisTask.cxx:61
 AtlBDTAnalysisTask.cxx:62
 AtlBDTAnalysisTask.cxx:63
 AtlBDTAnalysisTask.cxx:64
 AtlBDTAnalysisTask.cxx:65
 AtlBDTAnalysisTask.cxx:66
 AtlBDTAnalysisTask.cxx:67
 AtlBDTAnalysisTask.cxx:68
 AtlBDTAnalysisTask.cxx:69
 AtlBDTAnalysisTask.cxx:70
 AtlBDTAnalysisTask.cxx:71
 AtlBDTAnalysisTask.cxx:72
 AtlBDTAnalysisTask.cxx:73
 AtlBDTAnalysisTask.cxx:74
 AtlBDTAnalysisTask.cxx:75
 AtlBDTAnalysisTask.cxx:76
 AtlBDTAnalysisTask.cxx:77
 AtlBDTAnalysisTask.cxx:78
 AtlBDTAnalysisTask.cxx:79
 AtlBDTAnalysisTask.cxx:80
 AtlBDTAnalysisTask.cxx:81
 AtlBDTAnalysisTask.cxx:82
 AtlBDTAnalysisTask.cxx:83
 AtlBDTAnalysisTask.cxx:84
 AtlBDTAnalysisTask.cxx:85
 AtlBDTAnalysisTask.cxx:86
 AtlBDTAnalysisTask.cxx:87
 AtlBDTAnalysisTask.cxx:88
 AtlBDTAnalysisTask.cxx:89
 AtlBDTAnalysisTask.cxx:90
 AtlBDTAnalysisTask.cxx:91
 AtlBDTAnalysisTask.cxx:92
 AtlBDTAnalysisTask.cxx:93
 AtlBDTAnalysisTask.cxx:94
 AtlBDTAnalysisTask.cxx:95
 AtlBDTAnalysisTask.cxx:96
 AtlBDTAnalysisTask.cxx:97
 AtlBDTAnalysisTask.cxx:98
 AtlBDTAnalysisTask.cxx:99
 AtlBDTAnalysisTask.cxx:100
 AtlBDTAnalysisTask.cxx:101
 AtlBDTAnalysisTask.cxx:102
 AtlBDTAnalysisTask.cxx:103
 AtlBDTAnalysisTask.cxx:104
 AtlBDTAnalysisTask.cxx:105
 AtlBDTAnalysisTask.cxx:106
 AtlBDTAnalysisTask.cxx:107
 AtlBDTAnalysisTask.cxx:108
 AtlBDTAnalysisTask.cxx:109
 AtlBDTAnalysisTask.cxx:110
 AtlBDTAnalysisTask.cxx:111
 AtlBDTAnalysisTask.cxx:112
 AtlBDTAnalysisTask.cxx:113
 AtlBDTAnalysisTask.cxx:114
 AtlBDTAnalysisTask.cxx:115
 AtlBDTAnalysisTask.cxx:116
 AtlBDTAnalysisTask.cxx:117
 AtlBDTAnalysisTask.cxx:118
 AtlBDTAnalysisTask.cxx:119
 AtlBDTAnalysisTask.cxx:120
 AtlBDTAnalysisTask.cxx:121
 AtlBDTAnalysisTask.cxx:122
 AtlBDTAnalysisTask.cxx:123
 AtlBDTAnalysisTask.cxx:124
 AtlBDTAnalysisTask.cxx:125
 AtlBDTAnalysisTask.cxx:126
 AtlBDTAnalysisTask.cxx:127
 AtlBDTAnalysisTask.cxx:128
 AtlBDTAnalysisTask.cxx:129
 AtlBDTAnalysisTask.cxx:130
 AtlBDTAnalysisTask.cxx:131
 AtlBDTAnalysisTask.cxx:132
 AtlBDTAnalysisTask.cxx:133
 AtlBDTAnalysisTask.cxx:134
 AtlBDTAnalysisTask.cxx:135
 AtlBDTAnalysisTask.cxx:136
 AtlBDTAnalysisTask.cxx:137
 AtlBDTAnalysisTask.cxx:138
 AtlBDTAnalysisTask.cxx:139
 AtlBDTAnalysisTask.cxx:140
 AtlBDTAnalysisTask.cxx:141
 AtlBDTAnalysisTask.cxx:142
 AtlBDTAnalysisTask.cxx:143
 AtlBDTAnalysisTask.cxx:144
 AtlBDTAnalysisTask.cxx:145