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