]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGPP/CalibMacros/CPass1/mergeByComponent.C
mergeMakeOCDB.byComponent.sh:
[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   //AliTPCcalibTimeGain::SetMergeEntriesCut(2000000);
55   //AliTPCcalibGainMult::SetMergeEntriesCut(2000000);
56   //AliTPCcalibAlign::SetMergeEntriesCut(10000000);
57   //AliTPCcalibTracks::SetMergeEntriesCut(10000000);
58   //AliTPCcalibTime::SetResHistoMergeCut(10000000);
59   AliFileMerger merger;
60   /* select what to merge */
61   merger.SetNoTrees(kFALSE);
62   if (component == "ALL")
63     merger.AddReject("esdFriend");
64   else
65     merger.AddAccept(component.Data());
66   /* merge */
67   merger.IterTXT(list, outputFileName.Data(), kFALSE);
68   /* notify */
69   gSystem->Exec(Form("touch %s_merge_done", component.Data()));
70   return;
71 }
72
73 //___________________________________________________________________
74 void MakeFileList(const char *searchdir, const char *pattern, const char* outputFileName="calib.list", Int_t timeOut=10)
75 {
76   gSystem->Setenv("XRDCLIENTMAXWAIT",Form("%d",timeOut));
77   gEnv->SetValue("XNet.RequestTimeout", timeOut);
78   gEnv->SetValue("XNet.ConnectTimeout", timeOut);
79   gEnv->SetValue("XNet.TransactionTimeout", timeOut);
80   TFile::SetOpenTimeout(timeOut);
81
82   TGrid::Connect("alien");
83
84   TString command;
85   command = Form("find %s/ %s", searchdir, pattern);
86   cerr<<"command: "<<command<<endl;
87   TGridResult *res = gGrid->Command(command);
88   if (!res) return;
89   TIter nextmap(res);
90   TMap *map = 0;
91
92   ofstream outputFile;
93   outputFile.open(Form(outputFileName));
94
95   while((map=(TMap*)nextmap()))
96   {
97     TObjString *objs = dynamic_cast<TObjString*>(map->GetValue("turl"));
98     if (!objs || !objs->GetString().Length())
99     {
100       delete res;
101       break;
102     }
103
104     TString src=Form("%s",objs->GetString().Data());
105     outputFile << src.Data()<< endl;
106   }
107   outputFile.close();
108   return;
109 }
110
111 //___________________________________________________________________
112 void CopyCPass(const char* alienFileList="alien.list", const char* outputFileList="local.list", Int_t timeOut=10)
113 {
114   //copy all the alien files to local
115   gSystem->Setenv("XRDCLIENTMAXWAIT",Form("%d",timeOut));
116   gEnv->SetValue("XNet.RequestTimeout", timeOut);
117   gEnv->SetValue("XNet.ConnectTimeout", timeOut);
118   gEnv->SetValue("XNet.TransactionTimeout", timeOut);
119   TFile::SetOpenTimeout(timeOut);
120
121   TGrid::Connect("alien");
122
123   ifstream inputFile;
124   inputFile.open(alienFileList);
125   ofstream outputFile;
126   outputFile.open(Form(outputFileList));
127
128   if (!inputFile.is_open())
129   {
130     printf("input file %s not found! exiting...\n",alienFileList);
131     exit(1);
132   }
133
134   Int_t counter=0;
135   while( inputFile.good())
136   {
137     TString src("");
138     src.ReadLine(inputFile);
139     if (src.IsNull()) continue;
140     TString dst=src;
141     dst.ReplaceAll("alien:///","");
142     dst.ReplaceAll("/","_");
143     Bool_t result = TFile::Cp(src.Data(),dst.Data(),kTRUE);
144     AliSysInfo::AddStamp(dst.Data(),counter, result);
145     if (result) 
146     {
147       outputFile << dst.Data()<< endl;
148       counter++;
149     }
150   }
151   cout<<counter<<" files copied!"<<endl;
152
153   inputFile.close();
154   outputFile.close();
155   gSystem->Exec("touch copy_done");
156 }
157