102 {
103
104
105 for(G4int i=0; i<43;i++){
106 for(G4int j=0;j<288;j++){
107 digiPointer[i][j]=-1;
108 }
109 }
110
111 G4int
NHits,layerId, cellId, posFlag;
112 G4double edep,driftD,driftT, globalT, theta,cosTheta,enterAngle;
113 G4double mean,
sigma,mean1,mean2,sigma1, sigma2, f,sig,delSig, fRandom, driftDNew, driftTNew;
114 G4double tempEff;
115 G4double resLargest,resSmallest,resRatio;
116
117 G4DigiManager* DigiMan = G4DigiManager::GetDMpointer();
118
119
120 G4int THCID=-1;
121 THCID = DigiMan->GetHitsCollectionID("BesMdcHitsCollection");
122
123
126
127 if(THC){
129 (moduleName, collectionName[0]);
130 NHits=THC->entries();
131 for(G4int i=0;i<
NHits;i++){
132 layerId = (*THC)[i]->GetLayerNo();
133 cellId = (*THC)[i]->GetCellNo();
134 edep = (*THC)[i]->GetEdep();
135 driftD = (*THC)[i]->GetDriftD();
136 globalT = (*THC)[i]->GetGlobalT();
137 theta = (*THC)[i]->GetTheta();
138 cosTheta =
cos(theta);
139 enterAngle = (*THC)[i]->GetEnterAngle();
140 posFlag = (*THC)[i]->GetPosFlag();
141
142
143 mdcCalPointer->SetHitPointer((*THC)[i]);
144
145
146 if(effFlag==0){
147
148 tempEff=mdcTunningSvc->GetEff(layerId,cellId,driftD,cosTheta,posFlag);
149 }else{
150 tempEff = layerEff[layerId];
151 }
152 fRandom=G4UniformRand();
153 if(fRandom>tempEff)continue;
154
155
156
157 if(smearFlag==0){
158 driftDNew = driftD;
159 }else if(smearFlag==1){
160
161
162 mdcTunningSvc->GetRes3(layerId,cellId,driftD,cosTheta,posFlag,enterAngle,f,mean1,sigma1,mean2,sigma2,resLargest,resSmallest,resRatio);
163
164
165
166
167 driftDNew = Smear(driftD-(f*mean1+(1-f)*mean2),f,mean1,sigma1,mean2,sigma2,resLargest,resSmallest,resRatio);
168
169
170 }else if(smearFlag==2){
171 driftDNew = Smear(driftD);
172 }else{
173 G4cerr<<"MdcDigitizer::worong smearFlag: "<<smearFlag<<G4endl;
174 }
175
176
177 driftTNew = mdcCalPointer->D2T(driftDNew);
178
179
180 driftTNew += mdcCalPointer->GetTimeWalk();
181
182
183 driftTNew += mdcCalPointer->GetT0();
184
185
186 driftTNew += globalT;
187
188
189
190
191
192 if(std::isnan(driftTNew)){
193 G4cout<<"MdcDigitizer::error, driftT is nan"<<G4endl;
194 continue;
195 }
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214 BesMdcDigi* newDigi = new BesMdcDigi();
220 G4int NbDigis = digisCollection->insert(newDigi);
221 digiPointer[layerId][cellId]=NbDigis-1;
222 }
223
224 if(noiseFlag==1)AddNoise();
225 if(noiseFlag==2){
226 ifstream readNoiseLevel(
"$MDCSIMROOT/share/noiselevel.txt");
227 if(!readNoiseLevel.good()){
228 std::cout<<" Error , noiselevel file not exist "<<std::endl;
229 }else{
230 std::cout<<" MdcDigitizer:: Open noiselevel file "<<std::endl;
231 }
232 G4int NLayer=mdcGeoPointer->SignalLayerNo();
233 G4double level;
234 for(G4int i=0;i<NLayer;i++){
235 readNoiseLevel>>level;
236 mixLevel.push_back(level);
237 }
238 AddNoise2();
239 }
240
241 if (verboseLevel>0) {
242 G4cout << "\n-------->digis Collection: in this event they are "
243 << digisCollection->entries()
244 << " digis in the MDC chambers: " << G4endl;
245 digisCollection->PrintAllDigi();
246 }
247 StoreDigiCollection(digisCollection);
248 }
249
250}
double cos(const BesAngle a)
G4TDigiCollection< BesMdcDigi > BesMdcDigisCollection
G4THitsCollection< BesMdcHit > BesMdcHitsCollection
void NHits(const AList< TMLink > &links, unsigned nHits[43])
void SetEdep(G4double de)
void SetCellNo(G4int cell)
void SetDriftT(G4double time)
void SetTrackID(G4int track)
void SetLayerNo(G4int layer)