]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGPP/CalibMacros/CPass1/mergeByComponent.C
#97528: Commit to the trunk changes needed for mirroring OCDB entries during CPass
[u/mrichter/AliRoot.git] / PWGPP / CalibMacros / CPass1 / mergeByComponent.C
CommitLineData
c5d00b61 1
2void mergeByComponent(TString component,
3 const Char_t* fileList="calib.list",
4 const Char_t* apath=0,
5 const Char_t* apattern=0,
6 Int_t fileDownloadTimeOut=10,
7 const Char_t* localFileList="calib.list",
8 const Char_t* mergedFileName="CalibObjects.root" )
9{
10 // merging procedure
11 // component can be COPY, MAKEALIENLIST, component name or ALL
12 // ALL will merge the full file
13 // selecting components will only merge the selected top level
14 // objects in the file
15 // COPY only copies the the alien files from fileList then
16 // saves a list of local downloaded files in localFileList.
17 // MAKEALIENLIST produces a list of files on alien, uses root
18 // to connect in case alien_xx utilities are not available
19 // liek on the alien nodes
20 /* load libs */
21 printf("Executing MergeByComponent.C\n");
22 gROOT->Macro("$ALICE_ROOT/PWGPP/CalibMacros/CPass1/LoadLibraries.C");
23 TH1::AddDirectory(0);
24
25 Int_t fileDownloadTimeOut=10;
26
27 /* copy only */
28 if (component == "COPY") {
29 if (!apath || ! apattern){
30 printf("Alien find path or pattern not specified");
31 exit(1);
32 }
33 CopyCPass(fileList, localFileList, fileDownloadTimeOut);
34 return;
35 }
36 /* make file list only */
37 if (component == "MAKEALIENLIST") {
38 if (!apath || ! apattern){
39 printf("Alien find path or pattern not specified");
40 exit(1);
41 }
42 MakeFileList(apath, apattern, fileList);
43 return;
44 }
45
46 /* merge component */
47 MergeCPass(fileList, component, mergedFileName);
48}
49
50//___________________________________________________________________
51
52void MergeCPass(const Char_t *list, TString component, TString outputFileName="CalibObjects.root")
53{
54 AliFileMerger merger;
7b58b4ed 55 merger.SetNoTrees(kFALSE);
c5d00b61 56 /* select what to merge */
57 if (component == "ALL")
58 merger.AddReject("esdFriend");
59 else
60 merger.AddAccept(component.Data());
61 /* merge */
62 merger.IterTXT(list, outputFileName.Data(), kFALSE);
63 /* notify */
64 gSystem->Exec(Form("touch %s_merge_done", component.Data()));
65 return;
66}
67
68//___________________________________________________________________
69void MakeFileList(const char *searchdir, const char *pattern, const char* outputFileName="calib.list", Int_t timeOut=10)
70{
71 gSystem->Setenv("XRDCLIENTMAXWAIT",Form("%d",timeOut));
72 gEnv->SetValue("XNet.RequestTimeout", timeOut);
73 gEnv->SetValue("XNet.ConnectTimeout", timeOut);
74 gEnv->SetValue("XNet.TransactionTimeout", timeOut);
75 TFile::SetOpenTimeout(timeOut);
76
77 TGrid::Connect("alien");
78
79 TString command;
80 command = Form("find %s/ %s", searchdir, pattern);
81 cerr<<"command: "<<command<<endl;
82 TGridResult *res = gGrid->Command(command);
83 if (!res) return;
84 TIter nextmap(res);
85 TMap *map = 0;
86
87 ofstream outputFile;
88 outputFile.open(Form(outputFileName));
89
90 while((map=(TMap*)nextmap()))
91 {
92 TObjString *objs = dynamic_cast<TObjString*>(map->GetValue("turl"));
93 if (!objs || !objs->GetString().Length())
94 {
95 delete res;
96 break;
97 }
98
99 TString src=Form("%s",objs->GetString().Data());
100 outputFile << src.Data()<< endl;
101 }
102 outputFile.close();
103 return;
104}
105
106//___________________________________________________________________
107void CopyCPass(const char* alienFileList="alien.list", const char* outputFileList="local.list", Int_t timeOut=10)
108{
109 //copy all the alien files to local
110 gSystem->Setenv("XRDCLIENTMAXWAIT",Form("%d",timeOut));
111 gEnv->SetValue("XNet.RequestTimeout", timeOut);
112 gEnv->SetValue("XNet.ConnectTimeout", timeOut);
113 gEnv->SetValue("XNet.TransactionTimeout", timeOut);
114 TFile::SetOpenTimeout(timeOut);
115
116 TGrid::Connect("alien");
117
118 ifstream inputFile;
119 inputFile.open(alienFileList);
120 ofstream outputFile;
121 outputFile.open(Form(outputFileList));
122
123 if (!inputFile.is_open())
124 {
125 printf("input file %s not found! exiting...\n",alienFileList);
126 exit(1);
127 }
128
129 Int_t counter=0;
130 while( inputFile.good())
131 {
132 TString src("");
133 src.ReadLine(inputFile);
134 if (src.IsNull()) continue;
135 TString dst=src;
136 dst.ReplaceAll("alien:///","");
137 dst.ReplaceAll("/","_");
138 Bool_t result = TFile::Cp(src.Data(),dst.Data(),kTRUE);
139 AliSysInfo::AddStamp(dst.Data(),counter, result);
140 if (result)
141 {
142 outputFile << dst.Data()<< endl;
143 counter++;
144 }
145 }
146 cout<<counter<<" files copied!"<<endl;
147
148 inputFile.close();
149 outputFile.close();
150 gSystem->Exec("touch copy_done");
151}
152