afea418a |
1 | void tag() {\r |
2 | const char* turl = gSystem->Getenv("ALIEN_JDL_OUTPUTDIR");\r |
3 | TString fESDFileName = "alien://";\r |
4 | fESDFileName += turl;\r |
5 | fESDFileName += "/AliESDs.root"; \r |
6 | \r |
7 | TString fGUID = 0;\r |
8 | GetGUID(fGUID);\r |
9 | \r |
10 | TString fAliroot, fRoot, fGeant;\r |
11 | GetVersions(fAliroot,fRoot,fGeant);\r |
12 | \r |
13 | UpdateTag(fAliroot,fRoot,fGeant,fESDFileName,fGUID);\r |
14 | }\r |
15 | \r |
16 | //_____________________________________//\r |
17 | GetVersions(TString &fAliroot, TString &froot, TString &fgeant) {\r |
18 | const char* fver = gSystem->Getenv("ALIEN_JDL_PACKAGES");\r |
19 | TString fS = fver;\r |
20 | Int_t fFirst = fS.First("#");\r |
21 | \r |
22 | while(fFirst != -1) {\r |
23 | Int_t fTotalLength = fS.Length();\r |
24 | TString tmp = fS;\r |
25 | TString fS1 = fS(0,fFirst);\r |
26 | tmp = fS(fFirst+2,fTotalLength);\r |
27 | fS = tmp;\r |
28 | \r |
29 | if(fS1.Contains("Root")) fAliroot = fS1;\r |
30 | if(fS1.Contains("ROOT")) froot = fS1;\r |
31 | if(fS1.Contains("GEANT")) fgeant = fS1;\r |
32 | \r |
33 | if(tmp.Contains("Root")) fAliroot = tmp;\r |
34 | if(tmp.Contains("ROOT")) froot = tmp;\r |
35 | if(tmp.Contains("GEANT")) fgeant = tmp;\r |
36 | \r |
37 | fFirst = tmp.First("#");\r |
38 | }\r |
39 | }\r |
40 | \r |
41 | //_____________________________________//\r |
42 | GetGUID(TString &guid) {\r |
43 | ofstream myfile ("guid.txt");\r |
44 | if (myfile.is_open()) {\r |
45 | TFile *f = TFile::Open("AliESDs.root","read");\r |
46 | if(f->IsOpen()) {\r |
47 | guid = f->GetUUID().AsString();\r |
48 | myfile << "AliESDs.root \t"<<f->GetUUID().AsString();\r |
49 | cout<<guid.Data()<<endl;\r |
50 | myfile.close();\r |
51 | }\r |
52 | else cout<<"Input file not found"<<endl;\r |
53 | }\r |
54 | else cout<<"Output file can't be created..."<<endl;\r |
55 | }\r |
56 | \r |
57 | \r |
58 | //_____________________________________//\r |
59 | Bool_t UpdateTag(TString faliroot, TString froot, TString fgeant, TString turl, TString guid) {\r |
60 | cout<<"Updating tags....."<<endl;\r |
61 | \r |
62 | const char * tagPattern = "tag.root";\r |
63 | // Open the working directory\r |
64 | void * dirp = gSystem->OpenDirectory(gSystem->pwd());\r |
65 | const char * name = 0x0;\r |
66 | // Add all files matching *pattern* to the chain\r |
67 | while((name = gSystem->GetDirEntry(dirp))) {\r |
68 | if (strstr(name,tagPattern)) {\r |
69 | TFile *f = TFile::Open(name,"read") ;\r |
70 | \r |
71 | AliRunTag *tag = new AliRunTag;\r |
72 | AliEventTag *evTag = new AliEventTag;\r |
73 | TTree *fTree = (TTree *)f->Get("T");\r |
74 | fTree->SetBranchAddress("AliTAG",&tag);\r |
75 | \r |
76 | //Defining new tag objects\r |
77 | AliRunTag *newTag = new AliRunTag();\r |
78 | TTree ttag("T","A Tree with event tags");\r |
79 | TBranch * btag = ttag.Branch("AliTAG", &newTag);\r |
80 | btag->SetCompressionLevel(9);\r |
81 | for(Int_t iTagFiles = 0; iTagFiles < fTree->GetEntries(); iTagFiles++) {\r |
82 | fTree->GetEntry(iTagFiles);\r |
83 | newTag->SetRunId(tag->GetRunId());\r |
84 | newTag->SetAlirootVersion(faliroot);\r |
85 | newTag->SetRootVersion(froot);\r |
86 | newTag->SetGeant3Version(fgeant);\r |
87 | const TClonesArray *tagList = tag->GetEventTags();\r |
88 | for(Int_t j = 0; j < tagList->GetEntries(); j++) {\r |
89 | evTag = (AliEventTag *) tagList->At(j);\r |
90 | evTag->SetTURL(turl);\r |
91 | evTag->SetGUID(guid);\r |
92 | newTag->AddEventTag(*evTag);\r |
93 | }\r |
94 | ttag.Fill();\r |
95 | newTag->Clear();\r |
96 | }//tag file loop \r |
97 | \r |
98 | TFile* ftag = TFile::Open(name, "recreate");\r |
99 | ftag->cd();\r |
100 | ttag.Write();\r |
101 | ftag->Close();\r |
102 | \r |
103 | delete tag;\r |
104 | delete newTag;\r |
105 | }//pattern check\r |
106 | }//directory loop\r |
107 | return kTRUE;\r |
108 | }\r |
109 | \r |