15 #ifndef TREEOUTPUTHELPER_C 16 #define TREEOUTPUTHELPER_C 20 # include <AliAnalysisManager.h> 21 # include <AliAnalysisDataContainer.h> 22 # include <AliVEventHandler.h> 26 # include <sys/types.h> 27 # include <sys/socket.h> 28 # include <netinet/in.h> 29 # include <netinet/ip.h> 58 AliVEventHandler* handler = mgr->GetOutputEventHandler();
59 if (!handler)
return true;
62 AliAnalysisDataContainer* cont = mgr->GetCommonOutputContainer();
64 Warning(
"OutputUtilities::RegisterDataset",
65 "No common output container defined");
71 if (nme.IsNull()) nme = mgr->GetName();
73 Error(
"OutputUtilities::RegisterDataset",
"No data set name specified");
78 cont->SetRegisterDataset(
true);
80 handler->SetOutputFileName(nme);
83 TString base(handler->GetOutputFileName());
84 base.ReplaceAll(
".root",
"");
85 Info(
"OutputUtilities::RegisterDataset",
86 "Will register tree output AODs (%s%s) as dataset",
87 base.Data(), cont->GetTitle());
102 AliVEventHandler* oh = mgr->GetOutputEventHandler();
104 Warning(
"OutputUtilities::GetOutputDataSet",
105 "No outout event handler defined");
108 AliAnalysisDataContainer* co = mgr->GetCommonOutputContainer();
110 Warning(
"OutputUtilities::GetOutputDataSet",
111 "No common output container defined");
114 if (!co->IsRegisterDataset()) {
115 Info(
"OutputUtilities::GetOutputDataSet",
116 "Common output is not registered as dataset");
119 ret = oh->GetOutputFileName();
121 ret.ReplaceAll(
".root",
"");
129 int sd = socket(AF_INET,SOCK_STREAM,0);
131 Warning(
"FindPort",
"Failed to make socket");
137 struct sockaddr_in addr;
138 addr.sin_family = AF_INET;
139 addr.sin_addr.s_addr = INADDR_ANY;
141 int bd = bind(sd, (
struct sockaddr*)&addr,
sizeof(addr));
143 Warning(
"FindPort",
"Failed to bind socket to port 0");
149 struct sockaddr_in radd;
150 socklen_t ladd =
sizeof(radd);
151 int nr = getsockname(sd, (
struct sockaddr*)&radd, &ladd);
153 Warning(
"FindPort",
"Failed get socket port");
158 int port = radd.sin_port;
163 Warning(
"FindPort",
"don't know how to do that on your system");
178 if (port < 0)
return false;
191 exec.Form(
"xrootd -p %d -l xrd.log -s ../xrd.pid -b -n %s %s",
192 port, name.Data(),
dir.Data());
193 Info(
"StartXrootd",
"Starting XRootD to serve %s on port %d",
195 Info(
"StartXrootd",
"%s", exec.Data());
198 Warning(
"StartXrootd",
"Failed to start XRootd server");
203 url = Form(
"root://%s@%s:%d/%s",
204 name.Data(), host.Data(), port,
dir.Data());
205 Info(
"StartXrootd",
"Access URL is \"%s\"", url.Data());
216 std::ifstream pidFile(
"xrd.pid");
217 if (!pidFile)
return false;
219 TString s; s.ReadFile(pidFile);
223 if (s.IsNull())
return false;
225 Info(
"StopXrootd",
"Stopping XRootd server (pid: %s)", s.Data());
226 return gSystem->Exec(Form(
"kill -9 %s", s.Data())) == 0;
238 Error(
"OutputUtilities::RegisterStorage",
"No storage URI specified");
246 AliAnalysisDataContainer* cont = mgr->GetCommonOutputContainer();
248 Warning(
"OutputUtilities::RegisterStorage",
249 "No common output container defined");
254 if (u.EqualTo(
"auto")) {
256 Warning(
"OutputUtilities::RegisterStorage",
257 "Couldn't start the XRootD server");
262 cont->SetSpecialOutput();
263 mgr->SetSpecialOutputLocation(u);
static Bool_t StartXrootd(TString &url)
static Bool_t StopXrootd()
static TString RegisteredDataset()
static Bool_t RegisterDataset(const TString &dsname)
static Bool_t RegisterStorage(const TString &url)