#include "AliXMLCollection.h"
#include "AliAnalysisGoodies.h"
#include "AliAnalysisManager.h"
+#include "AliAODHandler.h"
#include "AliAnalysisTask.h"
- //#include "AliPhotonAnalysisTask.h"
#include "AliLog.h"
#include <Riostream.h>
#ifdef WITHALIEN
-#include <TAlienCollection.h>
+#include <TGridResult.h>
+#include <TFileMerger.h>
+#include <TFile.h>
#endif
#include <TChain.h>
-#include <TFileMerger.h>
#include <TGrid.h>
#include <TROOT.h>
#include <TSystem.h>
//______________________________________________________________________________
AliAnalysisGoodies::AliAnalysisGoodies() :
+ TObject(),
+ fTimer(),
fESDTreeName("esdTree"),
- fnumberOfTasks(0),
- fTaskList(0),
- fTaskInType(0),
- fTaskOuType(0)
+ fAmgr(0)
{
fTimer.Reset() ;
TGrid::Connect("alien://");
else
AliInfo("You are not connected to the GRID") ;
+ // Make the analysis manager
+ fAmgr = new AliAnalysisManager("Goodies Manager", "Analysis manager created by AliAnalysisGoodies") ;
+}
+
+//______________________________________________________________________________
+AliAnalysisGoodies::AliAnalysisGoodies(const AliAnalysisGoodies& ag) :
+ TObject(),
+ fTimer(),
+ fESDTreeName(""),
+ fAmgr(0x0)
+{
+
+ fESDTreeName = ag.fESDTreeName ;
+ TString token = gSystem->Getenv("GRID_TOKEN") ;
+
+ if ( token == "OK" )
+ TGrid::Connect("alien://");
+ else
+ AliInfo("You are not connected to the GRID") ;
+
+ // Make the analysis manager
+ fAmgr = new AliAnalysisManager("Goodies Manager", "Analysis manager created by AliAnalysisGoodies") ;
+}
+
+//______________________________________________________________________________
+AliAnalysisGoodies& AliAnalysisGoodies::operator=(const AliAnalysisGoodies& ag)
+{
+ // Assignment operator
+ if(this!=&ag) {
+ }
+
+ return *this;
}
//______________________________________________________________________________
}
//______________________________________________________________________
-const Bool_t AliAnalysisGoodies::Alien2Local(const TString collectionNameIn, const TString localDir)
+Bool_t AliAnalysisGoodies::Alien2Local(const TString collectionNameIn, const TString localDir)
{
// copy files ESD files listed in an xml collection from AliEn catalog to local storage and creates a local xml collection
// usage: Alien2Local(in, out)
// in: a xml esd collection file name
// ou: the local directory where to save the esd root files
+#ifdef WITHALIEN
Bool_t rv = kTRUE ;
fTimer.Start() ;
collectionOu->SetCollectionName(collectionNameOu) ;
collectionOu->WriteHeader() ;
- TFileMerger merger ;
-
const char* ocwd = gSystem->WorkingDirectory();
Int_t counter = 1 ;
AliInfo(Form("Copying %s to %s\n", fileTURL.Data(), dir.Data())) ;
collectionOu->WriteBody(counter, collectionIn->GetGUID(""), collectionIn->GetLFN(""), dir, list) ;
counter++ ;
- merger.Cp(fileTURL, dir) ;
+ TFile::Cp(fileTURL, dir) ;
}
collectionOu->Export() ;
gSystem->ChangeDirectory(ocwd) ;
fTimer.Stop();
fTimer.Print();
- return rv ;
+ return rv ;
+#else
+ return kFALSE;
+#endif
}
//______________________________________________________________________
-const Bool_t AliAnalysisGoodies::Make(AliRunTagCuts *runCuts, AliEventTagCuts *evtCuts, const char * in, const char * out) const
+AliAnalysisDataContainer * AliAnalysisGoodies::ConnectInput(AliAnalysisTask * task, TClass * classin, UShort_t index)
+{
+ // connect a task to the input
+
+ if ( ! fAmgr->GetTask(task->GetName()) )
+ fAmgr->AddTask(task) ;
+ else
+ AliFatal(Form("Task %s already exists", task->GetName())) ;
+
+ AliAnalysisDataContainer * taskInput = 0x0 ;
+ if ( fAmgr->GetInputs() )
+ taskInput = dynamic_cast<AliAnalysisDataContainer *>(fAmgr->GetInputs()->FindObject(Form("InputContainer_%s_%d", task->GetName(), index))) ;
+ if ( ! taskInput ) {
+ taskInput = fAmgr->CreateContainer(Form("InputContainer_%s_%d", task->GetName(), index), classin, AliAnalysisManager::kInputContainer) ;
+ fAmgr->ConnectInput (task, index, taskInput);
+ }
+ else
+ AliFatal(Form("Input %s already exists", taskInput->GetName())) ;
+
+ return taskInput ;
+}
+
+//______________________________________________________________________
+void AliAnalysisGoodies::ConnectInput(AliAnalysisTask * task, AliAnalysisDataContainer * taskInput, UShort_t index)
+{
+ // connect a task to the input
+
+ if ( ! fAmgr->GetTask(task->GetName()) )
+ fAmgr->AddTask(task) ;
+ else
+ AliFatal(Form("Task %s already exists", task->GetName())) ;
+
+ fAmgr->ConnectInput (task, index, taskInput);
+}
+
+//______________________________________________________________________
+AliAnalysisDataContainer * AliAnalysisGoodies::ConnectOuput(AliAnalysisTask * task, TClass * classou, UShort_t index, TString opt )
+{
+ // connect a task to the output
+
+ char filename[20] ;
+
+ if (opt == "AOD" ) {
+ if ( fAmgr->GetOutputEventHandler() == 0x0) {
+ AliAODHandler * aodHandler = new AliAODHandler() ;
+ aodHandler->SetOutputFileName(Form("%s_0.root",task->GetName())) ;
+ fAmgr->SetOutputEventHandler(aodHandler) ;
+ }
+ sprintf(filename, "default") ;
+ }
+ else
+ sprintf(filename, "%s_%d.root",task->GetName(), index) ;
+
+ AliAnalysisDataContainer * taskOuput = 0x0 ;
+ if ( fAmgr->GetOutputs() )
+ taskOuput = dynamic_cast<AliAnalysisDataContainer *>(fAmgr->GetOutputs()->FindObject(Form("OutputContainer_%s_%d", task->GetName(), index))) ;
+ if ( ! taskOuput )
+ taskOuput = fAmgr->CreateContainer(Form("OutputContainer_%s_%d", task->GetName(), index), classou, AliAnalysisManager::kOutputContainer, filename) ;
+ fAmgr->ConnectOutput(task, index, taskOuput);
+
+ return taskOuput ;
+}
+
+//______________________________________________________________________
+void AliAnalysisGoodies::ConnectOuput(AliAnalysisTask * task, AliAnalysisDataContainer * taskOuput, UShort_t index)
+{
+ // connect a task to the output
+
+ fAmgr->ConnectInput (task, index, taskOuput);
+}
+
+//______________________________________________________________________
+Bool_t AliAnalysisGoodies::Make(AliRunTagCuts *runCuts, AliLHCTagCuts *lhcCuts, AliDetectorTagCuts *detCuts, AliEventTagCuts *evtCuts, const char * in, const char * out) const
{
// makes esd collection from tags
// usage Make(tags, esds)
TString file(in) ;
if ( file.Contains(".root") )
- rv = MakeEsdCollectionFromTagFile(runCuts, evtCuts, file.Data(), out) ;
+ rv = MakeEsdCollectionFromTagFile(runCuts, lhcCuts, detCuts, evtCuts, file.Data(), out) ;
else if ( file.Contains(".xml") )
- rv = MakeEsdCollectionFromTagCollection(runCuts, evtCuts, file.Data(), out) ;
+ rv = MakeEsdCollectionFromTagCollection(runCuts, lhcCuts, detCuts, evtCuts, file.Data(), out) ;
else {
AliError(Form("%s is not a valid file format", in)) ;
rv = kFALSE ;
}
//______________________________________________________________________
-const Bool_t AliAnalysisGoodies::MakeEsdCollectionFromTagFile(AliRunTagCuts *runCuts, AliEventTagCuts *evtCuts, const char * in, const char * out) const
+Bool_t AliAnalysisGoodies::MakeEsdCollectionFromTagFile(AliRunTagCuts *runCuts, AliLHCTagCuts *lhcCuts, AliDetectorTagCuts *detCuts, AliEventTagCuts *evtCuts, const char * in, const char * out) const
{
// Makes an esd collection from a root tag file
Bool_t rv = kTRUE ;
if ( ! rv )
return rv ;
- tagAna->CreateXMLCollection(out, runCuts, evtCuts) ;
+ tagAna->CreateXMLCollection(out, runCuts, lhcCuts, detCuts, evtCuts) ;
return rv ;
}
//______________________________________________________________________
-const Bool_t AliAnalysisGoodies::MakeEsdCollectionFromTagCollection(AliRunTagCuts * runCuts, AliEventTagCuts * evtCuts, const char * in, const char * out) const
+Bool_t AliAnalysisGoodies::MakeEsdCollectionFromTagCollection(AliRunTagCuts *runCuts, AliLHCTagCuts *lhcCuts, AliDetectorTagCuts *detCuts, AliEventTagCuts *evtCuts, const char * in, const char * out) const
{
// Makes an esd collection from a xml tag collection
Bool_t rv = kTRUE ;
#ifdef WITHALIEN
- TAlienCollection * collection = TAlienCollection::Open(in);
- TGridResult* result = collection->GetGridResult("");
+ TGridCollection * collection = (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(\"%s\", 0)",in));
+ TGridResult* result = collection->GetGridResult("", 0, 0);
AliTagAnalysis * tagAna = new AliTagAnalysis();
tagAna->ChainGridTags(result);
- tagAna->CreateXMLCollection(out, runCuts, evtCuts) ;
+ tagAna->CreateXMLCollection(out, runCuts, lhcCuts, detCuts, evtCuts) ;
#else
rv = kFALSE;
}
//______________________________________________________________________
-const Bool_t AliAnalysisGoodies::MakeEsdCollectionFromTagCollection(const char * runCuts, const char * evtCuts, const char * in, const char * out) const
+Bool_t AliAnalysisGoodies::MakeEsdCollectionFromTagCollection(const char * runCuts, const char *lhcCuts, const char *detCuts, const char * evtCuts, const char * in, const char * out) const
{
// Makes an esd collection from a xml tag collection
#ifdef WITHALIEN
- TAlienCollection * collection = TAlienCollection::Open(in);
- TGridResult* result = collection->GetGridResult("");
+ TGridCollection * collection = (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(\"%s\", 0)",in));
+ TGridResult* result = collection->GetGridResult("", 0, 0);
AliTagAnalysis * tagAna = new AliTagAnalysis();
tagAna->ChainGridTags(result);
- tagAna->CreateXMLCollection(out, runCuts, evtCuts) ;
+ tagAna->CreateXMLCollection(out, runCuts, lhcCuts, detCuts, evtCuts) ;
- return rv ;
#else
- return kFALSE;
+ rv = kFALSE;
#endif
+ return rv ;
}
//______________________________________________________________________
-const Bool_t AliAnalysisGoodies::Merge(const char * collectionFile, const char * subFile, const char * outFile)
+Bool_t AliAnalysisGoodies::Merge(const char * collectionFile, const char * subFile, const char * outFile)
{
// merges files listed in a xml collection
// usage Merge(collection, outputFile))
#ifdef WITHALIEN
- TAlienCollection * collection = TAlienCollection::Open(collectionFile);
- TGridResult* result = collection->GetGridResult("");
+ TGridCollection * collection = (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(\"%s\", 0)",collectionFile));
+ TGridResult* result = collection->GetGridResult("", 0, 0);
Int_t index = 0 ;
const char * turl ;
fTimer.Stop();
fTimer.Print();
- return rv ;
#else
- return kFALSE;
+ rv = kFALSE;
#endif
+ return rv ;
}
//______________________________________________________________________
-const Bool_t AliAnalysisGoodies::Process(TChain * chain)
+Bool_t AliAnalysisGoodies::Process(TChain * chain)
{
// process events starting from a chain of esd Trees
Bool_t rv = kFALSE ;
-
fTimer.Start() ;
rv = ProcessChain(chain) ;
}
//______________________________________________________________________
-const Bool_t AliAnalysisGoodies::Process(const char * inFile)
+Bool_t AliAnalysisGoodies::Process(const char * inFile)
{
// process the events with an Analysis Task
// usage Process(esdFile)
// esdFile: is of the form opt?file_lfn
Bool_t rv = kFALSE ;
- AliRunTagCuts * runCuts = 0x0 ;
- AliEventTagCuts * evtCuts = 0x0 ;
+ AliRunTagCuts * runCuts = 0x0 ;
+ AliLHCTagCuts * lhcCuts = 0x0 ;
+ AliDetectorTagCuts * detCuts = 0x0 ;
+ AliEventTagCuts * evtCuts = 0x0 ;
- rv = Process(inFile, runCuts, evtCuts) ;
+ rv = Process(inFile, runCuts, lhcCuts, detCuts, evtCuts) ;
return rv ;
}
//______________________________________________________________________
-const Bool_t AliAnalysisGoodies::Process(const char * inFile, AliRunTagCuts *runCuts, AliEventTagCuts * evtCuts )
+Bool_t AliAnalysisGoodies::Process(const char * inFile, AliRunTagCuts *runCuts, AliLHCTagCuts *lhcCuts, AliDetectorTagCuts *detCuts, AliEventTagCuts * evtCuts )
{
// process the events with an Analysis Task
// usage Process(esdFile, runtagCuts, evtTagCuts)
} else if (file.Contains("tag?") && file.Contains(".root") ) {
file.ReplaceAll("tag?", "") ;
- rv = ProcessTagFile(file.Data(), runCuts, evtCuts) ;
+ rv = ProcessTagFile(file.Data(), runCuts, lhcCuts, detCuts, evtCuts) ;
} else if (file.Contains("tag?") && file.Contains(".xml") ) {
file.ReplaceAll("tag?", "") ;
- rv = ProcessTagXmlCollection(file.Data(), runCuts, evtCuts) ;
+ rv = ProcessTagXmlCollection(file.Data(), runCuts, lhcCuts, detCuts, evtCuts) ;
} else {
AliError(Form("%s is not a valid file format", inFile)) ;
}
//______________________________________________________________________
-const Bool_t AliAnalysisGoodies::Process(const char * inFile, const char * runCuts, const char * evtCuts)
+Bool_t AliAnalysisGoodies::Process(const char * inFile, const char * runCuts, const char * lhcCuts, const char * detCuts, const char * evtCuts)
{
// process the events with an Analysis Task
// usage Process(esdFile, runtagCuts, evtTagCuts)
} else if (file.Contains("tag?") && file.Contains(".root") ) {
file.ReplaceAll("tag?", "") ;
- rv = ProcessTagFile(file.Data(), runCuts, evtCuts) ;
+ rv = ProcessTagFile(file.Data(), runCuts, lhcCuts, detCuts, evtCuts) ;
} else if (file.Contains("tag?") && file.Contains(".xml") ) {
file.ReplaceAll("tag?", "") ;
- rv = ProcessTagXmlCollection(file.Data(), runCuts, evtCuts) ;
+ rv = ProcessTagXmlCollection(file.Data(), runCuts, lhcCuts, detCuts, evtCuts) ;
} else {
AliError(Form("%s is not a valid file format", inFile)) ;
}
//______________________________________________________________________
-const Bool_t AliAnalysisGoodies::ProcessChain(TChain * chain) const
+Bool_t AliAnalysisGoodies::ProcessChain(TChain * chain) const
{
// Procees a TChain.
Bool_t rv = kTRUE ;
- if (! fTaskList ) {
- AliError("No tasks defined") ;
- return kFALSE ;
- }
-
- // Make the analysis manager
- AliAnalysisManager * mgr = new AliAnalysisManager() ;
-
- // Make tasks
- // The top input must be common to all top tasks
- TClass * classIn = fTaskInType[0] ;
- AliAnalysisDataContainer * taskInput = mgr->CreateContainer("Input Container", classIn, AliAnalysisManager::kInputContainer) ;
- Int_t index ;
- for (index = 0; index < fnumberOfTasks; index++) {
- AliAnalysisTask * task = fTaskList[index] ;
- mgr->AddTask(task) ;
-
- // Create containers for input/output
- TClass * classOu = fTaskOuType[index] ;
- AliAnalysisDataContainer * taskOutput = mgr->CreateContainer("Output Container", classOu, AliAnalysisManager::kOutputContainer) ;
- mgr->ConnectInput (task, 0, taskInput);
- mgr->ConnectOutput(task, 0, taskOutput);
- }
-
- // Open data
- taskInput->SetData(chain);
-
- if (mgr->InitAnalysis()) {
- mgr->PrintStatus();
- chain->Process(mgr);
+ // start processing
+ if (fAmgr->InitAnalysis()) {
+ fAmgr->PrintStatus();
+ fAmgr->StartAnalysis("local",chain);
} else
rv = kFALSE ;
}
//______________________________________________________________________
-const Bool_t AliAnalysisGoodies::ProcessEsdFile(const char * esdFile) const
+Bool_t AliAnalysisGoodies::ProcessEsdFile(const char * esdFile) const
{
// process the events in a single ESD file with an Analysis Task
// usage ProcessLocalEsdFile(esdFile)
}
//______________________________________________________________________
-const Bool_t AliAnalysisGoodies::ProcessTagFile(const char * tagFile, AliRunTagCuts *runCuts, AliEventTagCuts *evtCuts) const
+Bool_t AliAnalysisGoodies::ProcessTagFile(const char * tagFile, AliRunTagCuts *runCuts, AliLHCTagCuts *lhcCuts, AliDetectorTagCuts *detCuts, AliEventTagCuts *evtCuts) const
{
// process the events in a single Tag file with an Analysis Task
// usage ProcessLocalEsdFile(tagFile)
// Query the tag file and make the analysis chain
TChain * analysisChain = new TChain(fESDTreeName) ;
- analysisChain = tagAna->QueryTags(runCuts, evtCuts);
+ analysisChain = tagAna->QueryTags(runCuts, lhcCuts, detCuts, evtCuts);
// Process the events
rv = ProcessChain(analysisChain) ;
}
//______________________________________________________________________
-const Bool_t AliAnalysisGoodies::ProcessTagFile(const char * tagFile, const char * runCuts, const char * evtCuts) const
+Bool_t AliAnalysisGoodies::ProcessTagFile(const char * tagFile, const char * runCuts, const char * lhcCuts, const char * detCuts, const char * evtCuts) const
{
// process the events in a single Tag file with an Analysis Task
// usage ProcessLocalEsdFile(tagFile)
// Query the tag file and make the analysis chain
TChain * analysisChain = new TChain(fESDTreeName) ;
- analysisChain = tagAna->QueryTags(runCuts, evtCuts);
+ analysisChain = tagAna->QueryTags(runCuts, lhcCuts, detCuts, evtCuts);
// Process the events
rv = ProcessChain(analysisChain) ;
}
//______________________________________________________________________
-const Bool_t AliAnalysisGoodies::ProcessEsdXmlCollection(const char * xmlFile) const
+Bool_t AliAnalysisGoodies::ProcessEsdXmlCollection(const char * xmlFile) const
{
// process the events in a xml ESD collection with an Analysis Task
// usage ProcessLocalEsdFile(xmlFile)
printf("*** Coll = |%s| \n",xmlFile);
#ifdef WITHALIEN
-
- TAlienCollection * collection = TAlienCollection::Open(xmlFile) ;
+ //AliXMLCollection * collection = AliXMLCollection::Open(xmlFile,0) ;
+ TGridCollection * collection = (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(\"%s\", 0)", xmlFile));
if (! collection) {
AliError(Form("%s not found", xmlFile)) ;
return kFALSE ;
}
- TGridResult* result = collection->GetGridResult("");
+ TGridResult* result = collection->GetGridResult("",0 ,0);
TList* analysisfilelist = result->GetFileInfoList();
// Makes the ESD chain
printf("*** Getting the Chain ***\n");
TChain* analysisChain = new TChain(fESDTreeName);
analysisChain->AddFileInfoList(analysisfilelist);
-
+
// Process the events
rv = ProcessChain(analysisChain) ;
- return rv ;
#else
- return kFALSE;
+ rv = kFALSE;
+
#endif
+
+ return rv ;
}
//______________________________________________________________________
-const Bool_t AliAnalysisGoodies::ProcessTagXmlCollection(const char * xmlFile, AliRunTagCuts *runCuts, AliEventTagCuts * evtCuts) const
+Bool_t AliAnalysisGoodies::ProcessTagXmlCollection(const char * xmlFile, AliRunTagCuts *runCuts, AliLHCTagCuts *lhcCuts, AliDetectorTagCuts *detCuts, AliEventTagCuts * evtCuts) const
{
// process the events in a xml ESD collection with an Analysis Task
// usage ProcessLocalEsdFile(xmlFile)
printf("*** Process ***\n");
printf("*** Wk-Dir = |%s| \n",gSystem->WorkingDirectory());
- printf("*** Coll = |%s| \n",xmlFile);
+ printf("*** Coll = |%s| \n",xmlFile);
// check if file is local or alien
if ( gSystem->AccessPathName(xmlFile) )
#ifdef WITHALIEN
- TAlienCollection * collection = TAlienCollection::Open(xmlFile) ;
+ TGridCollection * collection = (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(\"%s\", 0)",xmlFile));
if (! collection) {
AliError(Form("%s not found", xmlFile)) ;
return kFALSE ;
}
- TGridResult* result = collection->GetGridResult("");
+ TGridResult* result = collection->GetGridResult("", 0, 0);
AliTagAnalysis * tagAna = new AliTagAnalysis();
tagAna->ChainGridTags(result);
// Query the tag file and make the analysis chain
TChain * analysisChain = new TChain(fESDTreeName) ;
- analysisChain = tagAna->QueryTags(runCuts, evtCuts);
+ analysisChain = tagAna->QueryTags(runCuts, lhcCuts, detCuts, evtCuts);
// Process the events
rv = ProcessChain(analysisChain) ;
- return rv ;
#else
- return kFALSE;
+ rv = kFALSE;
#endif
+ return rv ;
}
//______________________________________________________________________
-const Bool_t AliAnalysisGoodies::ProcessTagXmlCollection(const char * xmlFile, const char * runCuts, const char * evtCuts) const
+Bool_t AliAnalysisGoodies::ProcessTagXmlCollection(const char * xmlFile, const char * runCuts, const char * lhcCuts, const char * detCuts, const char * evtCuts) const
{
// process the events in a xml ESD collection with an Analysis Task
// usage ProcessLocalEsdFile(xmlFile)
if ( gSystem->AccessPathName(xmlFile) )
TGrid::Connect("alien://");
- TAlienCollection * collection = TAlienCollection::Open(xmlFile) ;
+ TGridCollection * collection = (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(\"%s\", 0)",xmlFile));
if (! collection) {
AliError(Form("%s not found", xmlFile)) ;
return kFALSE ;
}
- TGridResult* result = collection->GetGridResult("");
+ TGridResult* result = collection->GetGridResult("", 0, 0);
AliTagAnalysis * tagAna = new AliTagAnalysis();
tagAna->ChainGridTags(result);
// Query the tag file and make the analysis chain
TChain * analysisChain = new TChain(fESDTreeName) ;
- analysisChain = tagAna->QueryTags(runCuts, evtCuts);
+ analysisChain = tagAna->QueryTags(runCuts, lhcCuts, detCuts, evtCuts);
// Process the events
rv = ProcessChain(analysisChain) ;
- return rv ;
#else
- return kFALSE;
+ rv = kFALSE;
#endif
+ return rv ;
}
//______________________________________________________________________
-const Bool_t AliAnalysisGoodies::Register( const char * lfndir, const char * pfndir, const char * file)
+Bool_t AliAnalysisGoodies::Register( const char * lfndir, const char * pfndir, const char * file)
{
// register files already stored in a MSS into the AliEn catalog
// usage: Register(lfndir, pfndir, pfnFileName)
return rv;
}
-//______________________________________________________________________
-void AliAnalysisGoodies::SetTasks(Int_t nb, AliAnalysisTask ** taskList, TClass ** inputType, TClass ** outputType)
-{
- // define a task with its output and input type
-
-
- fnumberOfTasks= nb;
- fTaskList = taskList ;
- fTaskInType = inputType ;
- fTaskOuType = outputType ;
-}