1 void SetupPar(char* pararchivename);
2 void SwitchBranches(TChain *c);
3 TChain * CreateXMLChain(char* xmlfile);
4 TChain * CreateAODChain(const char * name = 0x0);
6 void runElectronTask(const char *treelist = 0x0, Bool_t hasMC = kTRUE){
8 printf("Error: No ESD list specified\n");
11 if(gSystem->Getenv("ALICE_ROOT")){
12 gSystem->Load("libANALYSIS");
13 gSystem->Load("libANALYSISalice");
14 gSystem->Load("libCORRFW");
17 SetupPar("STEERBase");
21 SetupPar("ANALYSISalice");
26 gSystem->Load("libHFE");
27 // gROOT->LoadMacro("AliAnalysisTaskHFE.cxx++");
28 // AliLog::SetGlobalLogLevel(AliLog::kError);
31 TString treename = treelist;
32 TChain *inputChain = 0x0;
33 Bool_t isAOD = kFALSE;
34 if(treename.EndsWith(".xml")){
35 esdchain = CreateXMLChain(treelist);
36 SwitchBranches(inputChain);
38 inputChain = CreateAODChain(treelist);
39 if(inputChain) isAOD = kTRUE;
41 gROOT->LoadMacro("CreateESDChain.C");
42 inputChain = CreateESDChain(treelist, -1);
43 SwitchBranches(inputChain);
47 // Start the Analysis Manager and Create Handlers
48 AliAnalysisManager *hfeAnalysis = new AliAnalysisManager("Single Electron Analysis");
49 if(!isAOD) hfeAnalysis->SetInputEventHandler(new AliESDInputHandler);
50 else hfeAnalysis->SetInputEventHandler(new AliAODInputHandler);
51 if(hasMC && !isAOD) hfeAnalysis->SetMCtruthEventHandler(new AliMCEventHandler);
52 AliHFEcuts *hfecuts = new AliHFEcuts;
53 hfecuts->CreateStandardCuts();
54 AliAnalysisTaskHFE *task = new AliAnalysisTaskHFE;
55 if(hasMC) task->SetHasMCData();
56 if(isAOD) task->SetAODAnalysis();
57 task->SetHFECuts(hfecuts);
58 task->SetPIDStrategy(4);
59 task->SetQAOn(AliAnalysisTaskHFE::kPIDqa);
60 task->SetQAOn(AliAnalysisTaskHFE::kMCqa);
61 task->SwitchOnPlugin(AliAnalysisTaskHFE::kSecVtx);
62 //task->SwitchOnPlugin(AliAnalysisTaskHFE::kIsElecBackGround);
63 hfeAnalysis->AddTask(task);
64 task->ConnectInput(0, hfeAnalysis->GetCommonInputContainer());
65 task->ConnectOutput(1, hfeAnalysis->CreateContainer("nEvents", TH1I::Class(), AliAnalysisManager::kOutputContainer, "HFEtask.root"));
66 task->ConnectOutput(2, hfeAnalysis->CreateContainer("Results", TList::Class(), AliAnalysisManager::kOutputContainer, "HFEtask.root"));
67 task->ConnectOutput(3, hfeAnalysis->CreateContainer("QA", TList::Class(), AliAnalysisManager::kOutputContainer, "HFEtask.root"));
68 //task->ConnectOutput(3, hfeAnalysis->CreateContainer("QA-new", TList::Class(), AliAnalysisManager::kOutputContainer, "HFEtask.root"));
70 if(hfeAnalysis->InitAnalysis()){
73 hfeAnalysis->StartAnalysis("local", inputChain);
79 //____________________________________________
80 TChain * CreateXMLChain(char* xmlfile)
83 //TChain *chain = 0x0;
84 const char *chainname="esdTree";
85 TChain* chain = new TChain(chainname);
87 TString input =xmlfile;
88 cout<<" the input is::"<< xmlfile<<endl;
91 if(gSystem->Getenv("XML") )
92 kXML = gSystem->Getenv("XML");
94 sprintf(kXML, xmlfile) ;
96 // sprintf(kXML, "collection.xml") ;
98 cout<<"XML file "<<kXML<<endl;
100 if (!TFile::Open(kXML)) {
101 printf("No collection file with name -- %s -- was found\n",kXML);
104 gSystem->Load("libNetx") ;
105 gSystem->Load("libRAliEn");
106 TGrid::Connect("alien://") ;
110 // TGridCollection * collection = (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(\"%s\", 0)", kXML));
111 TGridCollection * collection = (TGridCollection*) TAlienCollection::Open(kXML);
113 AliError(Form("%s not found", kXML)) ;
116 //collection->CheckIfOnline();
118 TGridResult* result = collection->GetGridResult("",0 ,0);
120 // TList* analysisfilelist = result->GetFileInfoList();
122 // Makes the ESD chain
123 printf("*** Getting the Chain ***\n");
125 for (Int_t index = 0; index < result->GetEntries(); index++) {
126 TString alienURL = result->GetKey(index, "turl") ;
127 cout << "================== " << alienURL << endl ;
128 chain->Add(alienURL) ;
129 //alienURL.ReplaceAll("AliESDs.root",kXSFileName);
130 // chainxs->Add(alienURL) ;
134 // chain->AddFileInfoList(analysisfilelist);
135 if (chain) chain->ls();
136 chain->SetBranchStatus("*Calo*",0);
137 chain->SetBranchStatus("*FMD*",0);
141 //______________________________________________________________________________
142 TChain *CreateAODChain(const char * name){
143 if(!name) return NULL;
144 ifstream filelist(name);
146 TChain *c = new TChain("aodTree");
147 Bool_t isAODlist = kTRUE;
148 while(getline(filelist,filename)){
149 if(!strstr(filename.c_str(), "AliAOD")){
153 c->Add(filename.c_str());
156 printf("No AOD anlysis");
163 //______________________________________________________________________________
164 void SetupPar(char* pararchivename)
166 if (pararchivename) {
167 char processline[1024];
168 sprintf(processline,".! tar xvzf %s.par",pararchivename);
169 gROOT->ProcessLine(processline);
170 TString ocwd = gSystem->WorkingDirectory();
171 gSystem->ChangeDirectory(pararchivename);
173 // check for BUILD.sh and execute
174 if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) {
175 printf("*******************************\n");
176 printf("*** Building PAR archive ***\n");
177 printf("*******************************\n");
179 if (gSystem->Exec("PROOF-INF/BUILD.sh")) {
180 Error("runProcess","Cannot Build the PAR Archive! - Abort!");
184 // check for SETUP.C and execute
185 if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) {
186 printf("*******************************\n");
187 printf("*** Setup PAR archive ***\n");
188 printf("*******************************\n");
189 gROOT->Macro("PROOF-INF/SETUP.C");
192 gSystem->ChangeDirectory(ocwd.Data());
193 printf("Current dir: %s\n", ocwd.Data());
197 void SwitchBranches(TChain *c){
198 //esdchain->SetBranchStatus("*", 0);
199 c->SetBranchStatus("Calo*", 0);
200 c->SetBranchStatus("*FMD*", 1);
201 c->SetBranchStatus("Tracks", 1);