]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ANALYSIS/BadChunkFilter/ProcessBadChunks02.C
ADDING ANALYSIS FOR REMOVAL OF BAD CHUNKS (D.Dobrikeit & AK)
[u/mrichter/AliRoot.git] / ANALYSIS / BadChunkFilter / ProcessBadChunks02.C
CommitLineData
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
8using namespace std;\r
9\r
10int 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