#ifndef ATLAS_AtlHforSplittingTask
#include <AtlHforSplittingTask.h>
#endif
#include <TROOT.h>
#include <TBrowser.h>
#include <TMath.h>
#include <TString.h>
#include <TObjString.h>
#include <TObjArray.h>
#include <TSystem.h>
#include <fstream>
#include <iostream>
#include <TClass.h>
#include <TTree.h>
#include <TFile.h>
#include <TChain.h>
#include <TH1D.h>
using namespace std;
#ifndef __CINT__
ClassImp(AtlHforSplittingTask);
#endif
AtlHforSplittingTask::AtlHforSplittingTask(const char* name,
const char* title) :
AtlTask(name, title) {
fInputTreeName = new TString("physics");
fListOfUserEnvs = new TList;
AddUserEnv("LIBATLASANALYSIS");
}
AtlHforSplittingTask::~AtlHforSplittingTask() {
delete fInputTreeName;
fListOfUserEnvs->Delete(); delete fListOfUserEnvs;
}
void AtlHforSplittingTask::SetInputTreeName(const char* TreeName) {
delete fInputTreeName;
fInputTreeName = new TString(TreeName);
}
void AtlHforSplittingTask::ExecInteractiveJob(Option_t *option) {
TString opt = option;
CreateRootScript(opt.Data());
}
void AtlHforSplittingTask::CreateRunScript(Option_t*) {
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++ HFOR job submission" << endl
<< "#" << endl << endl
<< "# Set environment" << endl;
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);
}
out << "export ROOTSYS=" << gSystem->Getenv("ROOTSYS") << endl
<< "export PATH=${ROOTSYS}/bin:${PATH}" << endl
<< "export LD_LIBRARY_PATH=${ROOTSYS}/lib:${LD_LIBRARY_PATH}" << endl;
TIter next_lib(fListOfUserEnvs);
TNamed *env = 0;
while ( (env = (TNamed*)next_lib()) ) {
if ( gSystem->Getenv(env->GetName()) != 0 ) {
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);
}
}
out << endl << endl
<< "# Job execution" << 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() << "/hfor_run.C " << fTempOutputPath->Data() << endl
<< "cd " << fTempOutputPath->Data() << endl
<< "root -q -l -b hfor_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 hfor_run.C > " << fLogFilePath->Data()
<< " 2>&1" << endl;
}
if ( fTempOutputFileName != 0 )
out << "mv " << fTempOutputFileName->Data() << " " << fOutputFileName->Data() << endl;
out.close();
}
Bool_t AtlHforSplittingTask::ExecBatchJob(Option_t *option) {
TString opt = option;
CreateRootScript(opt.Data());
return SubmitBatchJob();
}
void AtlHforSplittingTask::AddUserEnv(const char* env) {
fListOfUserEnvs->Add(new TNamed(env, ""));
}
void AtlHforSplittingTask::HforSplit(const char* InputFile,
const char* TreeName ) {
cout << Form( "HforSplit: Processing file %s ...", InputFile) << endl;
TFile *f_in = new TFile(InputFile, "read");
TTree *t_in = (TTree*)f_in->Get( TreeName );
for ( Int_t hfor = 0; hfor <= 3; hfor++ ) {
TString *fname_out = new TString( InputFile );
fname_out->ReplaceAll(".root", Form("_hfor%d.root", hfor));
cout << Form("HforSplit: Creating hfor file: %s ...", fname_out->Data() ) << endl;
TFile *f_out = new TFile(fname_out->Data(), "recreate");
TTree *t_out = t_in->CopyTree(Form("top_hfor_type==%d", hfor));
t_out->SetDirectory(f_out);
Double_t sf = 1.;
CopyFolder(f_in, f_out, sf);
f_out->Write();
delete f_out;
delete fname_out;
}
}
void AtlHforSplittingTask::CreateRootScript(Option_t *option) {
TString opt = option;
if ( fRootScript != 0 ) delete fRootScript;
fRootScript = new TString(fJobHome->Data());
fRootScript->Append("/hfor_run.C");
ofstream out;
out.open(fRootScript->Data());
out << "{" << endl
<< "// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl
<< "// !!! This is an automatically generated file !!!" << endl
<< "// !!! D O N O T E D I T !!!" << endl
<< "// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl
<< "//" << endl;
if ( fGridJob ) {
out << "// Root script for A++ HFOR grid job execution" << endl;
} else {
out << "// Root script for A++ HFOR batch job execution" << endl;
}
out << "//" << endl;
TChain *ch = new TChain( fInputTreeName->Data() );
TIter next(fInputFiles);
TObjString *item = 0;
while ( (item = (TObjString*)next()) )
ch->Add( item->GetString().Data() );
TIter next_file( ch->GetListOfFiles() );
TObject *obj = 0;
while ( ( obj = next_file() ) ) {
out << "AtlHforSplittingTask::HforSplit(\""
<< obj->GetTitle()
<< "\", \""
<< fInputTreeName->Data()
<< "\");" << endl;
}
out << "}" << endl;
out.close();
}
void AtlHforSplittingTask::ExecGridJob(const Option_t*) {
Error("ExecGridJob", "Not supported! Abort!");
gSystem->Abort(0);
}
void AtlHforSplittingTask::ExecNAFBatchJob(const Option_t*) {
Error("ExecNAFBatchJob", "Not supported! Abort!");
gSystem->Abort(0);
}
void AtlHforSplittingTask::CreateNAFBatchRunScript() {
Error("ExecNAFBatchRunScript", "Not supported! Abort!");
gSystem->Abort(0);
}
void AtlHforSplittingTask::CreateGridRunScript() {
Error("ExecGridRunScript", "Not supported! Abort!");
gSystem->Abort(0);
}
AtlHforSplittingTask.cxx:1 AtlHforSplittingTask.cxx:2 AtlHforSplittingTask.cxx:3 AtlHforSplittingTask.cxx:4 AtlHforSplittingTask.cxx:5 AtlHforSplittingTask.cxx:6 AtlHforSplittingTask.cxx:7 AtlHforSplittingTask.cxx:8 AtlHforSplittingTask.cxx:9 AtlHforSplittingTask.cxx:10 AtlHforSplittingTask.cxx:11 AtlHforSplittingTask.cxx:12 AtlHforSplittingTask.cxx:13 AtlHforSplittingTask.cxx:14 AtlHforSplittingTask.cxx:15 AtlHforSplittingTask.cxx:16 AtlHforSplittingTask.cxx:17 AtlHforSplittingTask.cxx:18 AtlHforSplittingTask.cxx:19 AtlHforSplittingTask.cxx:20 AtlHforSplittingTask.cxx:21 AtlHforSplittingTask.cxx:22 AtlHforSplittingTask.cxx:23 AtlHforSplittingTask.cxx:24 AtlHforSplittingTask.cxx:25 AtlHforSplittingTask.cxx:26 AtlHforSplittingTask.cxx:27 AtlHforSplittingTask.cxx:28 AtlHforSplittingTask.cxx:29 AtlHforSplittingTask.cxx:30 AtlHforSplittingTask.cxx:31 AtlHforSplittingTask.cxx:32 AtlHforSplittingTask.cxx:33 AtlHforSplittingTask.cxx:34 AtlHforSplittingTask.cxx:35 AtlHforSplittingTask.cxx:36 AtlHforSplittingTask.cxx:37 AtlHforSplittingTask.cxx:38 AtlHforSplittingTask.cxx:39 AtlHforSplittingTask.cxx:40 AtlHforSplittingTask.cxx:41 AtlHforSplittingTask.cxx:42 AtlHforSplittingTask.cxx:43 AtlHforSplittingTask.cxx:44 AtlHforSplittingTask.cxx:45 AtlHforSplittingTask.cxx:46 AtlHforSplittingTask.cxx:47 AtlHforSplittingTask.cxx:48 AtlHforSplittingTask.cxx:49 AtlHforSplittingTask.cxx:50 AtlHforSplittingTask.cxx:51 AtlHforSplittingTask.cxx:52 AtlHforSplittingTask.cxx:53 AtlHforSplittingTask.cxx:54 AtlHforSplittingTask.cxx:55 AtlHforSplittingTask.cxx:56 AtlHforSplittingTask.cxx:57 AtlHforSplittingTask.cxx:58 AtlHforSplittingTask.cxx:59 AtlHforSplittingTask.cxx:60 AtlHforSplittingTask.cxx:61 AtlHforSplittingTask.cxx:62 AtlHforSplittingTask.cxx:63 AtlHforSplittingTask.cxx:64 AtlHforSplittingTask.cxx:65 AtlHforSplittingTask.cxx:66 AtlHforSplittingTask.cxx:67 AtlHforSplittingTask.cxx:68 AtlHforSplittingTask.cxx:69 AtlHforSplittingTask.cxx:70 AtlHforSplittingTask.cxx:71 AtlHforSplittingTask.cxx:72 AtlHforSplittingTask.cxx:73 AtlHforSplittingTask.cxx:74 AtlHforSplittingTask.cxx:75 AtlHforSplittingTask.cxx:76 AtlHforSplittingTask.cxx:77 AtlHforSplittingTask.cxx:78 AtlHforSplittingTask.cxx:79 AtlHforSplittingTask.cxx:80 AtlHforSplittingTask.cxx:81 AtlHforSplittingTask.cxx:82 AtlHforSplittingTask.cxx:83 AtlHforSplittingTask.cxx:84 AtlHforSplittingTask.cxx:85 AtlHforSplittingTask.cxx:86 AtlHforSplittingTask.cxx:87 AtlHforSplittingTask.cxx:88 AtlHforSplittingTask.cxx:89 AtlHforSplittingTask.cxx:90 AtlHforSplittingTask.cxx:91 AtlHforSplittingTask.cxx:92 AtlHforSplittingTask.cxx:93 AtlHforSplittingTask.cxx:94 AtlHforSplittingTask.cxx:95 AtlHforSplittingTask.cxx:96 AtlHforSplittingTask.cxx:97 AtlHforSplittingTask.cxx:98 AtlHforSplittingTask.cxx:99 AtlHforSplittingTask.cxx:100 AtlHforSplittingTask.cxx:101 AtlHforSplittingTask.cxx:102 AtlHforSplittingTask.cxx:103 AtlHforSplittingTask.cxx:104 AtlHforSplittingTask.cxx:105 AtlHforSplittingTask.cxx:106 AtlHforSplittingTask.cxx:107 AtlHforSplittingTask.cxx:108 AtlHforSplittingTask.cxx:109 AtlHforSplittingTask.cxx:110 AtlHforSplittingTask.cxx:111 AtlHforSplittingTask.cxx:112 AtlHforSplittingTask.cxx:113 AtlHforSplittingTask.cxx:114 AtlHforSplittingTask.cxx:115 AtlHforSplittingTask.cxx:116 AtlHforSplittingTask.cxx:117 AtlHforSplittingTask.cxx:118 AtlHforSplittingTask.cxx:119 AtlHforSplittingTask.cxx:120 AtlHforSplittingTask.cxx:121 AtlHforSplittingTask.cxx:122 AtlHforSplittingTask.cxx:123 AtlHforSplittingTask.cxx:124 AtlHforSplittingTask.cxx:125 AtlHforSplittingTask.cxx:126 AtlHforSplittingTask.cxx:127 AtlHforSplittingTask.cxx:128 AtlHforSplittingTask.cxx:129 AtlHforSplittingTask.cxx:130 AtlHforSplittingTask.cxx:131 AtlHforSplittingTask.cxx:132 AtlHforSplittingTask.cxx:133 AtlHforSplittingTask.cxx:134 AtlHforSplittingTask.cxx:135 AtlHforSplittingTask.cxx:136 AtlHforSplittingTask.cxx:137 AtlHforSplittingTask.cxx:138 AtlHforSplittingTask.cxx:139 AtlHforSplittingTask.cxx:140 AtlHforSplittingTask.cxx:141 AtlHforSplittingTask.cxx:142 AtlHforSplittingTask.cxx:143 AtlHforSplittingTask.cxx:144 AtlHforSplittingTask.cxx:145 AtlHforSplittingTask.cxx:146 AtlHforSplittingTask.cxx:147 AtlHforSplittingTask.cxx:148 AtlHforSplittingTask.cxx:149 AtlHforSplittingTask.cxx:150 AtlHforSplittingTask.cxx:151 AtlHforSplittingTask.cxx:152 AtlHforSplittingTask.cxx:153 AtlHforSplittingTask.cxx:154 AtlHforSplittingTask.cxx:155 AtlHforSplittingTask.cxx:156 AtlHforSplittingTask.cxx:157 AtlHforSplittingTask.cxx:158 AtlHforSplittingTask.cxx:159 AtlHforSplittingTask.cxx:160 AtlHforSplittingTask.cxx:161 AtlHforSplittingTask.cxx:162 AtlHforSplittingTask.cxx:163 AtlHforSplittingTask.cxx:164 AtlHforSplittingTask.cxx:165 AtlHforSplittingTask.cxx:166 AtlHforSplittingTask.cxx:167 AtlHforSplittingTask.cxx:168 AtlHforSplittingTask.cxx:169 AtlHforSplittingTask.cxx:170 AtlHforSplittingTask.cxx:171 AtlHforSplittingTask.cxx:172 AtlHforSplittingTask.cxx:173 AtlHforSplittingTask.cxx:174 AtlHforSplittingTask.cxx:175 AtlHforSplittingTask.cxx:176 AtlHforSplittingTask.cxx:177 AtlHforSplittingTask.cxx:178 AtlHforSplittingTask.cxx:179 AtlHforSplittingTask.cxx:180 AtlHforSplittingTask.cxx:181 AtlHforSplittingTask.cxx:182 AtlHforSplittingTask.cxx:183 AtlHforSplittingTask.cxx:184 AtlHforSplittingTask.cxx:185 AtlHforSplittingTask.cxx:186 AtlHforSplittingTask.cxx:187 AtlHforSplittingTask.cxx:188 AtlHforSplittingTask.cxx:189 AtlHforSplittingTask.cxx:190 AtlHforSplittingTask.cxx:191 AtlHforSplittingTask.cxx:192 AtlHforSplittingTask.cxx:193 AtlHforSplittingTask.cxx:194 AtlHforSplittingTask.cxx:195 AtlHforSplittingTask.cxx:196 AtlHforSplittingTask.cxx:197 AtlHforSplittingTask.cxx:198 AtlHforSplittingTask.cxx:199 AtlHforSplittingTask.cxx:200 AtlHforSplittingTask.cxx:201 AtlHforSplittingTask.cxx:202 AtlHforSplittingTask.cxx:203 AtlHforSplittingTask.cxx:204 AtlHforSplittingTask.cxx:205 AtlHforSplittingTask.cxx:206 AtlHforSplittingTask.cxx:207 AtlHforSplittingTask.cxx:208 AtlHforSplittingTask.cxx:209 AtlHforSplittingTask.cxx:210 AtlHforSplittingTask.cxx:211 AtlHforSplittingTask.cxx:212 AtlHforSplittingTask.cxx:213 AtlHforSplittingTask.cxx:214 AtlHforSplittingTask.cxx:215 AtlHforSplittingTask.cxx:216 AtlHforSplittingTask.cxx:217 AtlHforSplittingTask.cxx:218 AtlHforSplittingTask.cxx:219 AtlHforSplittingTask.cxx:220 AtlHforSplittingTask.cxx:221 AtlHforSplittingTask.cxx:222 AtlHforSplittingTask.cxx:223 AtlHforSplittingTask.cxx:224 AtlHforSplittingTask.cxx:225 AtlHforSplittingTask.cxx:226 AtlHforSplittingTask.cxx:227 AtlHforSplittingTask.cxx:228 AtlHforSplittingTask.cxx:229 AtlHforSplittingTask.cxx:230 AtlHforSplittingTask.cxx:231 AtlHforSplittingTask.cxx:232 AtlHforSplittingTask.cxx:233 AtlHforSplittingTask.cxx:234 AtlHforSplittingTask.cxx:235 AtlHforSplittingTask.cxx:236 AtlHforSplittingTask.cxx:237 AtlHforSplittingTask.cxx:238 AtlHforSplittingTask.cxx:239 AtlHforSplittingTask.cxx:240 AtlHforSplittingTask.cxx:241 AtlHforSplittingTask.cxx:242 AtlHforSplittingTask.cxx:243 AtlHforSplittingTask.cxx:244 AtlHforSplittingTask.cxx:245 AtlHforSplittingTask.cxx:246 AtlHforSplittingTask.cxx:247 AtlHforSplittingTask.cxx:248 AtlHforSplittingTask.cxx:249 AtlHforSplittingTask.cxx:250 AtlHforSplittingTask.cxx:251 AtlHforSplittingTask.cxx:252 AtlHforSplittingTask.cxx:253 AtlHforSplittingTask.cxx:254 AtlHforSplittingTask.cxx:255 AtlHforSplittingTask.cxx:256 AtlHforSplittingTask.cxx:257 AtlHforSplittingTask.cxx:258 AtlHforSplittingTask.cxx:259 AtlHforSplittingTask.cxx:260 AtlHforSplittingTask.cxx:261 AtlHforSplittingTask.cxx:262 AtlHforSplittingTask.cxx:263 AtlHforSplittingTask.cxx:264 AtlHforSplittingTask.cxx:265 AtlHforSplittingTask.cxx:266 AtlHforSplittingTask.cxx:267 AtlHforSplittingTask.cxx:268 AtlHforSplittingTask.cxx:269 AtlHforSplittingTask.cxx:270 AtlHforSplittingTask.cxx:271 AtlHforSplittingTask.cxx:272 AtlHforSplittingTask.cxx:273 AtlHforSplittingTask.cxx:274 AtlHforSplittingTask.cxx:275 AtlHforSplittingTask.cxx:276 AtlHforSplittingTask.cxx:277 AtlHforSplittingTask.cxx:278 AtlHforSplittingTask.cxx:279 AtlHforSplittingTask.cxx:280 AtlHforSplittingTask.cxx:281 AtlHforSplittingTask.cxx:282 AtlHforSplittingTask.cxx:283 AtlHforSplittingTask.cxx:284 AtlHforSplittingTask.cxx:285 AtlHforSplittingTask.cxx:286 AtlHforSplittingTask.cxx:287 AtlHforSplittingTask.cxx:288 AtlHforSplittingTask.cxx:289 AtlHforSplittingTask.cxx:290 AtlHforSplittingTask.cxx:291 AtlHforSplittingTask.cxx:292 AtlHforSplittingTask.cxx:293 AtlHforSplittingTask.cxx:294 AtlHforSplittingTask.cxx:295 AtlHforSplittingTask.cxx:296 AtlHforSplittingTask.cxx:297 AtlHforSplittingTask.cxx:298 AtlHforSplittingTask.cxx:299 AtlHforSplittingTask.cxx:300 AtlHforSplittingTask.cxx:301 AtlHforSplittingTask.cxx:302 AtlHforSplittingTask.cxx:303 AtlHforSplittingTask.cxx:304 AtlHforSplittingTask.cxx:305 AtlHforSplittingTask.cxx:306 AtlHforSplittingTask.cxx:307 AtlHforSplittingTask.cxx:308 AtlHforSplittingTask.cxx:309 AtlHforSplittingTask.cxx:310 AtlHforSplittingTask.cxx:311 AtlHforSplittingTask.cxx:312 AtlHforSplittingTask.cxx:313 AtlHforSplittingTask.cxx:314 AtlHforSplittingTask.cxx:315 AtlHforSplittingTask.cxx:316 AtlHforSplittingTask.cxx:317 AtlHforSplittingTask.cxx:318 AtlHforSplittingTask.cxx:319 AtlHforSplittingTask.cxx:320 AtlHforSplittingTask.cxx:321 AtlHforSplittingTask.cxx:322 AtlHforSplittingTask.cxx:323 AtlHforSplittingTask.cxx:324 AtlHforSplittingTask.cxx:325