]>
Commit | Line | Data |
---|---|---|
73fc3ccc | 1 | #include <iostream>\r |
2 | #include <fstream>\r | |
3 | \r | |
4 | #include "TFile.h"\r | |
5 | #include "TTree.h"\r | |
6 | #include "TString.h"\r | |
7 | \r | |
8 | using namespace std;\r | |
9 | \r | |
10 | int ProcessBadChunks02(){\r | |
11 | // Open the file\r | |
12 | TFile* file = TFile::Open("BadChunkTree.root", "READ");\r | |
13 | if (!file || !file->IsOpen()) {\r | |
14 | cout<<"File not found!"<<endl;\r | |
15 | return 1;\r | |
16 | }\r | |
17 | // Get the tree\r | |
18 | TTree* ftree = (TTree*)file->FindObjectAny("fTree");\r | |
19 | if (!ftree) {\r | |
20 | cout<<"File doesn't contain fTree!"<<endl;\r | |
21 | return 2;\r | |
22 | }\r | |
23 | //Print out "I'm alive"\r | |
24 | cout<<"----------------------------------------------------"<<endl;\r | |
25 | cout<<" Bad Chunk Analysis Macro"<<endl;\r | |
26 | cout<<"----------------------------------------------------"<<endl; \r | |
27 | cout<<" Entries in Event Tree......"<<ftree->GetEntries()<<endl;\r | |
28 | cout<<"----------------------------------------------------"<<endl;\r | |
29 | Int_t llRunNumber = 0;\r | |
30 | TString * llFileName = 0x0;\r | |
31 | Int_t llNTracks = 0;\r | |
32 | Int_t llNGlobalTracks = 0;\r | |
33 | \r | |
34 | ftree->SetBranchAddress("fRunNumber" ,&llRunNumber );\r | |
35 | ftree->SetBranchAddress("fFileName" , &llFileName );\r | |
36 | ftree->SetBranchAddress("fNTracks" ,&llNTracks );\r | |
37 | ftree->SetBranchAddress("fNGlobalTracks" ,&llNGlobalTracks );\r | |
38 | \r | |
39 | //Output ostreams: text files with chunk location, good and bad\r | |
40 | \r | |
41 | filebuf fbgood;\r | |
42 | fbgood.open ("goodguys.txt",ios::out);\r | |
43 | ostream osgood(&fbgood);\r | |
44 | \r | |
45 | filebuf fbbad;\r | |
46 | fbbad.open ("badguys.txt",ios::out);\r | |
47 | ostream osbad(&fbbad);\r | |
48 | \r | |
49 | //Main Tree Loop\r | |
50 | Long_t lProcessedChunks = 0;\r | |
51 | Long_t lProcessedChunksGood = 0;\r | |
52 | Long_t lProcessedChunksBad = 0;\r | |
53 | Long_t lTracks = 0;\r | |
54 | Long_t lGlobalTracks = 0;\r | |
55 | TString *lChunkName = new TString();\r | |
56 | \r | |
57 | //First Chunk entry\r | |
58 | ftree->GetEntry(0);\r | |
59 | *lChunkName = *llFileName;\r | |
60 | \r | |
61 | cout<<"TEST "<<lChunkName->Data() <<", track = "<<lTracks<<", globals = "<<lGlobalTracks<<" " << llFileName->Data() << endl;\r | |
62 | \r | |
63 | for(Long_t iEvent = 1; iEvent<ftree->GetEntries(); iEvent++){\r | |
64 | ftree->GetEntry(iEvent);\r | |
65 | if( !llFileName->EqualTo(*lChunkName) ){\r | |
66 | lProcessedChunks++;\r | |
67 | //Change Chunk\r | |
68 | if( lTracks > 0 && lGlobalTracks ==0){\r | |
69 | //Candidate bad chunk found!\r | |
70 | cout<<"BAD CHUNK at "<<lChunkName->Data() <<", track = "<<lTracks<<", globals = "<<lGlobalTracks<< endl;\r | |
71 | osbad<<lChunkName->Data()<<endl;\r | |
72 | lProcessedChunksBad++;\r | |
73 | }else{\r | |
74 | //This looks OK...\r | |
75 | //cout<<"GOOD CHUNK at "<<lChunkName<<endl;\r | |
76 | osgood<<lChunkName->Data()<<endl;\r | |
77 | lProcessedChunksGood++;\r | |
78 | }\r | |
79 | //Get ready to loop over new chunk\r | |
80 | *lChunkName = *llFileName;\r | |
81 | lTracks = llNTracks;\r | |
82 | lGlobalTracks = llNGlobalTracks;\r | |
83 | if(lProcessedChunks%5000==0) cout<<"---> Processed "<<lProcessedChunks<<"..."<<endl;\r | |
84 | }else{\r | |
85 | lTracks += llNTracks;\r | |
86 | lGlobalTracks += llNGlobalTracks;\r | |
87 | }\r | |
88 | }\r | |
89 | //CLOSE the processing: one extra pass...\r | |
90 | lProcessedChunks++;\r | |
91 | if( lTracks > 0 && lGlobalTracks ==0){\r | |
92 | //Candidate bad chunk found!\r | |
93 | cout<<"BAD CHUNK at "<<lChunkName->Data()<<endl;\r | |
94 | osbad<<lChunkName->Data() <<endl;\r | |
95 | lProcessedChunksBad++;\r | |
96 | }else{\r | |
97 | //This looks OK...\r | |
98 | //cout<<"GOOD CHUNK at "<<lChunkName<<endl;\r | |
99 | osgood<<lChunkName->Data()<<endl;\r | |
100 | lProcessedChunksGood++;\r | |
101 | }\r | |
102 | fbgood.close();\r | |
103 | fbbad.close();\r | |
104 | cout<<"----------------------------------------------------"<<endl;\r | |
105 | cout<<"Processed chunks, total..: "<<lProcessedChunks<<endl;\r | |
106 | cout<<"Processed chunks, good...: "<<lProcessedChunksGood<<endl;\r | |
107 | cout<<"Processed chunks, bad....: "<<lProcessedChunksBad<<endl;\r | |
108 | cout<<"----------------------------------------------------"<<endl;\r | |
109 | cout<<endl;\r | |
110 | cout<<"---> Good chunks saved to \"goodguys.txt\""<<endl;\r | |
111 | cout<<"---> Bad chunks saved to \"badguys.txt\""<<endl;\r | |
112 | cout<<endl;\r | |
113 | cout<<"DONE!"<<endl;\r | |
114 | return 0;\r | |
115 | \r | |
116 | }\r |