BmnRoot
Loading...
Searching...
No Matches
BmnDigiMergeTask.h
Go to the documentation of this file.
1#include <TSystem.h>
2#include <TFile.h>
3#include <TTree.h>
4#include <TNamed.h>
5#include <TMath.h>
6#include <TChain.h>
7#include <TString.h>
8#include <TClonesArray.h>
9#include <iostream>
10#include <map>
11#include <vector>
12
13#include <BmnSiliconStationSet.h>
14#include <BmnGemStripStationSet.h>
15#include <BmnCSCStationSet.h>
16
17#include <BmnDigiContainer.h>
18
19#ifndef BMNDIGIMERGETASK_H
20#define BMNDIGIMERGETASK_H 1
21
22using namespace std;
23using namespace TMath;
24
25class BmnDigiMergeTask : public TNamed {
26public:
27
31
32 // RUN6 (split to detectors)
33 BmnDigiMergeTask(TString, TString, TString);
34
35 // RUN7 (split to detectors)
36 BmnDigiMergeTask(TString*);
37
38 // RUN7 (split to detectors), to be used in case of SRC only
39 BmnDigiMergeTask(vector <TString>);
40
41 // All-digits-together
42 BmnDigiMergeTask(vector <TString>, TString);
43
46 if (fOutTree && fOutFile) {
47 fOutTree->Write();
48 fOutFile->Close();
49 }
50
51 if (fOutTrees && fOutFiles)
52 for (Int_t iDet = 0; iDet < nDets; iDet++) {
53 fOutFiles[iDet]->cd();
54 fOutTrees[iDet]->Write();
55 fOutFiles[iDet]->Close();
56 }
57 }
58
59 // Setters
60
61 void SetNevsInSample(UInt_t nEvs) {
62 fNevsInSample = nEvs;
63 }
64
65 void SetNevsToBeProcessed(UInt_t nEvs) {
66 fNevsToBeProcessed = nEvs;
67 }
68
69 void ProcessEvents();
70
71 void SplitToDetectors(Bool_t src = kFALSE) {
72 if (!src)
73 isRun6 ? SplitToDetectorsRun6() : isRun7 ? SplitToDetectorsRun7() : throw;
74 else
75 SplitToDetectorsSrc();
76 }
77
78private:
79 Bool_t isRun6;
80 Bool_t isRun7;
81 Bool_t isSrc;
82
83 UInt_t fNevsInSample;
84 UInt_t fNevsToBeProcessed;
85
86 TChain* fIn1;
87 TChain* fIn2;
88 TChain* fIn3;
89
90 TChain** fInFiles;
91
92 TClonesArray* fGemDigits;
93 TClonesArray* fCscDigits;
94 TClonesArray* fSilDigits;
95 TClonesArray* fZdcDigits;
96 TClonesArray* fT0Digits;
97 TClonesArray* fBC1Digits;
98 TClonesArray* fBC2Digits;
99 TClonesArray* fBC3Digits;
100 TClonesArray* fBC4Digits;
101 TClonesArray* fBC1TQDCDigits;
102 TClonesArray* fBC2TQDCDigits;
103 TClonesArray* fBC3TQDCDigits;
104 TClonesArray* fBC4TQDCDigits;
105 TClonesArray* fX1LDigits;
106 TClonesArray* fX2LDigits;
107 TClonesArray* fY1LDigits;
108 TClonesArray* fY2LDigits;
109 TClonesArray* fX1RDigits;
110 TClonesArray* fX2RDigits;
111 TClonesArray* fY1RDigits;
112 TClonesArray* fY2RDigits;
113 TClonesArray* fX1LTQDCDigits;
114 TClonesArray* fX2LTQDCDigits;
115 TClonesArray* fY1LTQDCDigits;
116 TClonesArray* fY2LTQDCDigits;
117 TClonesArray* fX1RTQDCDigits;
118 TClonesArray* fX2RTQDCDigits;
119 TClonesArray* fY1RTQDCDigits;
120 TClonesArray* fY2RTQDCDigits;
121 TClonesArray* fVetoDigits;
122 TClonesArray* fVetoTQDCDigits;
123 TClonesArray* fFdDigits;
124 TClonesArray* fSiDigits;
125 TClonesArray* fBdDigits;
126 TClonesArray* fMwpcDigits;
127 TClonesArray* fDchDigits;
128 TClonesArray* fTof400Digits;
129 TClonesArray* fTof700Digits;
130 TClonesArray* fEcalDigits;
131
132 TClonesArray* fGem;
133 TClonesArray* fCsc;
134 TClonesArray* fSil;
135 TClonesArray* fZdc;
136 TClonesArray* fT0;
137 TClonesArray* fBC1;
138 TClonesArray* fBC2;
139 TClonesArray* fBC3;
140 TClonesArray* fBC4;
141 TClonesArray* fBC1TQDC;
142 TClonesArray* fBC2TQDC;
143 TClonesArray* fBC3TQDC;
144 TClonesArray* fBC4TQDC;
145 TClonesArray* fX1L;
146 TClonesArray* fX2L;
147 TClonesArray* fY1L;
148 TClonesArray* fY2L;
149 TClonesArray* fX1R;
150 TClonesArray* fX2R;
151 TClonesArray* fY1R;
152 TClonesArray* fY2R;
153 TClonesArray* fX1LTQDC;
154 TClonesArray* fX2LTQDC;
155 TClonesArray* fY1LTQDC;
156 TClonesArray* fY2LTQDC;
157 TClonesArray* fX1RTQDC;
158 TClonesArray* fX2RTQDC;
159 TClonesArray* fY1RTQDC;
160 TClonesArray* fY2RTQDC;
161 TClonesArray* fSi;
162 TClonesArray* fVeto;
163 TClonesArray* fVetoTQDC;
164 TClonesArray* fFd;
165 TClonesArray* fBd;
166 TClonesArray* fMwpc;
167 TClonesArray* fDch;
168 TClonesArray* fTof400;
169 TClonesArray* fTof700;
170 TClonesArray* fEcal;
171
172 // Three versions of BmnEventHeader to be read from files (Here fuck my life twice!)
173 TClonesArray* fHeader1;
174 TClonesArray* fHeader2;
175 BmnEventHeader* fHeader2Obj;
176 TClonesArray* fHeader3;
177 BmnEventHeader* fHeader3Obj;
178
179 // TClonesArray* fHeaderOut;
180 BmnEventHeader* fHeaderOut;
181
182 BmnDigiContainer* fCont;
183
184 TFile* fOutFile;
185 TFile** fOutFiles;
186
187 TTree* fOutTree;
188 TTree** fOutTrees;
189
190 Int_t nDets;
191 TClonesArray** fInArrs;
192 TClonesArray** fOutArrs;
193 BmnEventHeader** fHeaders;
194
195 BmnGemStripStationSet* fDetectorGEM;
196 BmnSiliconStationSet* fDetectorSI;
197 BmnCSCStationSet* fDetectorCSC;
198
199 map <Int_t, Int_t> fGemStats;
200 map <Int_t, Int_t> fSilStats;
201
202 Long_t** evId_evNum;
203 UInt_t maxEvId;
204
205 inline Int_t GemStatPermutation(Int_t stat) {
206 return fGemStats.find(stat)->second;
207 }
208
209 inline Int_t SiliconStatPermutation(Int_t stat) {
210 return fSilStats.find(stat)->second;
211 }
212
213 void GlueEventsFromInputFiles();
214 void CreateOutputFile(TString);
215 void CreateOutputFiles();
216
217 void SplitToDetectorsRun6();
218 void SplitToDetectorsRun7();
219 void SplitToDetectorsSrc();
220
221 void CreateGeometries();
222 void Run7(Int_t*, Int_t*, Int_t*, Int_t*);
223
224 template <class T> void FillDetDigi(TClonesArray* inDigiArr, TClonesArray* outDigiArr) {
225 for (UInt_t iDigi = 0; iDigi < inDigiArr->GetEntriesFast(); iDigi++)
226 new ((*outDigiArr)[outDigiArr->GetEntriesFast()]) T(*(T*) inDigiArr->UncheckedAt(iDigi));
227 };
228
229 ClassDef(BmnDigiMergeTask, 1);
230
231};
232
233#endif
void SplitToDetectors(Bool_t src=kFALSE)
void SetNevsInSample(UInt_t nEvs)
void SetNevsToBeProcessed(UInt_t nEvs)
virtual ~BmnDigiMergeTask()
STL namespace.