]> git.uio.no Git - u/mrichter/AliRoot.git/blob - 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
1
2 void 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
52 void MergeCPass(const Char_t *list, TString component, TString outputFileName="CalibObjects.root")
53 {
54   AliFileMerger merger;
55   merger.SetNoTrees(kFALSE);
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 //___________________________________________________________________
69 void 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 //___________________________________________________________________
107 void 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