BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
MixerAlg.h
Go to the documentation of this file.
1#ifndef MixerAlg_h
2#define MixerAlg_h
3
4#include "GaudiKernel/Algorithm.h"
5#include "GaudiKernel/MsgStream.h"
6#include "GaudiKernel/NTuple.h"
7#include "GaudiKernel/SmartDataPtr.h"
8
9#include "BesRndmGenSvc/IBesRndmGenSvc.h"
10#include "BesTimerSvc/IBesTimerSvc.h"
11#include "DataInfoSvc/IDataInfoSvc.h"
12#include "EmcRawEvent/EmcDigi.h"
13#include "MdcRawEvent/MdcDigi.h"
14#include "MucRawEvent/MucDigi.h"
15#include "RawDataCnv/EventManagement/EmcBuilder.h"
16#include "RawDataCnv/EventManagement/MdcBuilder.h"
17#include "RawDataCnv/EventManagement/MucBuilder.h"
18#include "RawDataCnv/EventManagement/RAWEVENT.h"
19#include "RawDataCnv/EventManagement/TofBuilder.h"
20#include "RawDataCnv/Util/EmcConverter.h"
21#include "RawDataCnv/Util/MdcConverter.h"
22#include "RawDataCnv/Util/MucConverter.h"
23#include "RawDataCnv/Util/TofConverter.h"
24#include "RawEvent/RawDataUtil.h"
25#include "RawFile/RawFileReader.h"
26#include "RealizationSvc/IRealizationSvc.h"
27#include "TofRawEvent/TofDigi.h"
28//
29// An algorithm to combine MC signal and background from raw data file at digi level
30//
31// A.Zhemchugov (zhemchugov@jinr.ru), 09/08/2006
32// A.Zhemchugov: modified to new data format, 29.07.08
33
34#define MAX_LOOP_TIMES 1000000
35
36template <class T1, class T2>
37void combineDigits( SmartDataPtr<T1>& mcDigits, T1& bgDigits, int verbosity );
38void combineMdcDigits( SmartDataPtr<MdcDigiCol>& mcDigits, MdcDigiCol& bgDigits,
39 int verbosity );
40void combineTofDigits( SmartDataPtr<TofDigiCol>& mcDigits, TofDigiCol& bgDigits,
41 int verbosity );
42
43class MixerAlg : public Algorithm {
44public:
45 MixerAlg( const std::string& name, ISvcLocator* pSvcLocator );
46 StatusCode initialize();
47 StatusCode execute();
48 StatusCode finalize();
50
51protected:
52 bool nextEvent( int nskip = 0, int evtbyte = 0, int eventsToEnd = 0 );
53
54 void mixDigi( SmartDataPtr<MdcDigiCol>& mdcMcDigits, SmartDataPtr<EmcDigiCol>& emcMcDigits,
55 SmartDataPtr<MucDigiCol>& mucMcDigits, SmartDataPtr<TofDigiCol>& tofMcDigits );
56
57 void decodeMdc( MdcDigiCol* digiCol );
58 void decodeMuc( MucDigiCol* digiCol );
59 void decodeEmc( EmcDigiCol* digiCol );
60 void decodeTof( TofDigiCol* digiCol );
61
62 int getTiming();
63 std::string eventType();
64
65 std::string prepareDbQuery();
66
67 bool file_sort( std::vector<std::string>& files, std::vector<int>& ranEvtNums );
68
69private:
70 MsgStream* log;
71
72 RAWEVENT* m_raw_event;
73 RawFileReader* m_fr;
74
75 // IDatabaseSvc* m_db;
76
77 // Converters to create Digi objects
78 MdcConverter* m_mdcCnv;
79 MucConverter* m_mucCnv;
80 EmcConverter* m_emcCnv;
81 TofConverter* m_tofCnv;
82
83 // Algorithm properties to be set in data card
84 std::string m_run;
85 std::vector<std::string> m_runs;
86 std::vector<std::string> m_dates;
87
88 // Flags to choose subdetectors for which background should be mixed in
89 bool b_mdc;
90 bool b_emc;
91 bool b_muc;
92 bool b_tof;
93
94 // Number of background events to be mixed in one signal event
95 // bool b_loop;
96 bool m_skip;
97 bool m_dbUserRequest;
98 int m_NSkip;
99 int m_skipCount;
100 int nskipped;
101 int m_mixingMethod;
102
103 int m_nevent;
104 int m_runNo;
105 int m_totRanEvtNum;
106 int m_totalEvent;
107 int m_totEvtNumInCurFile;
108 int m_nEventsToEnd;
109
110 std::vector<int> m_ranTrgEvents;
111 std::vector<int> m_numSets; // No. of sets of each bg file, for example:
112 // run_**_RandomTrg_file001_SF0-1.raw, 001 is set No.
113 std::vector<int> m_vRanEvtNumInSubSet;
114 std::vector<int> m_vStreamNumInSubSet;
115 std::vector<int> m_vStepLength;
116 std::vector<int> m_ranStepLenInCurrentFile;
117
118 std::map<int, std::vector<int>> map_stepLength;
119
120 int m_maxLoop;
121 bool m_ifSmearT0;
122
123 int m_readBGMethod;
124
125 bool m_usingFilter;
126
127 // Current bg file
128 std::string currentBGFile;
129
130 // Current MC file
131 std::string currentMCFile;
132
133 // Input file name of background data (raw data format)
134 std::vector<std::string> m_bgfiles;
135 std::vector<std::string> m_bgfilesIndex;
136 // std::vector<std::string>::iterator m_bgfile;
137
138 // Replace /besfs/offline/data/randomtrg in the file name from the database to the user
139 // defined value
140 std::string m_pattern;
141 // Use the user defined value of directory which contains random trigger files
142 std::string m_newdatadir;
143
144 // Reference to RealizationSvc
145 IRealizationSvc* m_RealizationSvc;
146 IDataInfoSvc* m_jobInfoSvc;
147
148 NTuple::Tuple* m_tuple1;
149 NTuple::Item<float> m_time1;
150 NTuple::Item<float> m_time2;
151 NTuple::Item<float> m_time3;
152 NTuple::Item<float> m_time4;
153 NTuple::Item<float> m_time5;
154
155 NTuple::Tuple* m_tuple2;
156 NTuple::Tuple* m_tuple3;
157 NTuple::Item<long> m_tdc;
158
159 IBesTimerSvc* m_timersvc;
160 BesTimer* m_timer;
161 BesTimer* m_timer1;
162 bool m_ifOutPut;
163 bool m_dump;
164
165 // caogf for random seed
166 IBesRndmGenSvc* p_BesRndmGenSvc;
167
168 // configuration file for raw data revise
169 std::string m_rawReviseConfig;
170};
171
172#endif
ObjectVector< EmcDigi > EmcDigiCol
NTuple::Array< double > m_tdc
NTuple::Tuple * m_tuple1
void combineMdcDigits(SmartDataPtr< MdcDigiCol > &mcDigits, MdcDigiCol &bgDigits, int verbosity)
void combineTofDigits(SmartDataPtr< TofDigiCol > &mcDigits, TofDigiCol &bgDigits, int verbosity)
void combineDigits(SmartDataPtr< T1 > &mcDigits, T1 &bgDigits, int verbosity)
Definition MixerAlg.cxx:972
manage multiple CLHEP random engines as named streams
std::string prepareDbQuery()
Definition MixerAlg.cxx:81
bool file_sort(std::vector< std::string > &files, std::vector< int > &ranEvtNums)
void mixDigi(SmartDataPtr< MdcDigiCol > &mdcMcDigits, SmartDataPtr< EmcDigiCol > &emcMcDigits, SmartDataPtr< MucDigiCol > &mucMcDigits, SmartDataPtr< TofDigiCol > &tofMcDigits)
void decodeMuc(MucDigiCol *digiCol)
void decodeEmc(EmcDigiCol *digiCol)
StatusCode finalize()
Definition MixerAlg.cxx:793
bool nextEvent(int nskip=0, int evtbyte=0, int eventsToEnd=0)
Definition MixerAlg.cxx:801
MixerAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition MixerAlg.cxx:39
int getTiming()
StatusCode execute()
Definition MixerAlg.cxx:283
StatusCode initialize()
Definition MixerAlg.cxx:110
~MixerAlg()
Definition MixerAlg.h:49
void decodeMdc(MdcDigiCol *digiCol)
void decodeTof(TofDigiCol *digiCol)
std::string eventType()