72 gErrorIgnoreLevel = kFatal;
74 G4double edep = aStep->GetTotalEnergyDeposit();
75 G4double stepl = aStep->GetStepLength();
76 if ( ( edep == 0. ) && ( stepl == 0. ) )
return false;
78 G4TouchableHistory* theTouchable =
79 (G4TouchableHistory*)( aStep->GetPreStepPoint()->GetTouchable() );
80 G4VPhysicalVolume* physVol = theTouchable->GetVolume();
82 if ( physVol->GetName().contains(
"physicalCrystal" ) )
85 CryNumberPhi = theTouchable->GetReplicaNumber( 2 );
86 CryNumberTheta = theTouchable->GetReplicaNumber( 1 );
88 else if ( physVol->GetName().contains(
"logicalCrystal" ) )
91 std::istringstream thetaBuf( ( theTouchable->GetVolume( 1 )->GetName() ).substr( 16, 2 ) );
92 thetaBuf >> CryNumberTheta;
93 CryNumberPhi = 308 - theTouchable->GetCopyNumber( 2 );
95 else if ( physVol->GetName().contains(
"physicalEndCrystal" ) )
97 PartId = theTouchable->GetReplicaNumber( 3 );
98 G4int endSector = theTouchable->GetReplicaNumber( 2 );
99 G4int endNb = theTouchable->GetReplicaNumber( 0 );
102 else if ( physVol->GetName().contains(
"logicalEndCrystal" ) )
104 PartId = 2 - 2 * theTouchable->GetCopyNumber( 3 );
105 G4int endSector = theTouchable->GetCopyNumber( 2 );
106 G4int endNb, endNbGDML;
107 std::istringstream thetaBuf( ( theTouchable->GetVolume( 0 )->GetName() ).substr( 20, 2 ) );
113 else if ( physVol->GetName().contains(
"physicalPD" ) )
117 CryNumberPhi = theTouchable->GetReplicaNumber( 2 );
118 CryNumberTheta = theTouchable->GetReplicaNumber( 1 );
120 else if ( physVol->GetName().contains(
"logicalPD" ) )
124 G4int nb = theTouchable->GetCopyNumber( 1 );
125 if ( nb == 216 ) { CryNumberTheta = 0; }
126 else { CryNumberTheta = 43 - ( nb - 2 ) / 5; }
127 CryNumberPhi = 308 - theTouchable->GetCopyNumber( 2 );
130 if ( verboseLevel > 1 )
131 G4cout <<
"(Check ID)New EMC Hit on crystal: " << CryNumberPhi <<
"(phi)" << CryNumberTheta
133 <<
" and the volume is " << physVol->GetName() << G4endl;
136 G4int trackId = aStep->GetTrack()->GetTrackID();
143 calHit->
SetPosCrystal( aStep->GetPreStepPoint()->GetPosition() );
144 calHit->
SetTimeCrystal( aStep->GetPreStepPoint()->GetGlobalTime() );
145 calHit->
SetMomentum( aStep->GetPreStepPoint()->GetMomentum() );
146 calHit->
SetNumCrystal( PartId, CryNumberTheta, CryNumberPhi );
150 G4int idhit = CalCollection->insert( calHit ) - 1;
151 if ( nHit < 40000 ) HitID[nHit] = idhit;
164 G4int trackIndex, g4TrackId;
168 if ( m_trackIndex != trackIndex )
170 m_trackIndex = trackIndex;
173 G4int pdg =
abs( aStep->GetTrack()->GetDefinition()->GetPDGEncoding() );
174 if ( pdg == 12 || pdg == 14 || pdg == 16 )
179 if (
flag && aStep->GetTrack()->GetTrackID() == g4TrackId )
186 truHit->
SetPosCrystal( aStep->GetPreStepPoint()->GetPosition() );
187 truHit->
SetTimeCrystal( aStep->GetPreStepPoint()->GetGlobalTime() );
188 truHit->
SetMomentum( aStep->GetPreStepPoint()->GetMomentum() );
189 truHit->
SetNumCrystal( PartId, CryNumberTheta, CryNumberPhi );
190 CalList->insert( truHit );
194 else if ( m_trackIndex == trackIndex )
196 G4int length = CalList->entries();
199 for ( G4int i = 0; i < length; i++ )
215 G4int trackIndex, g4TrackId;
220 if ( CalTruthList->entries() > 0 )
222 for ( G4int i = 0; i < CalTruthList->entries(); i++ )
229 if ( oldHit->
Find(
id ) != oldHit->
End() ) { oldHit->
AddEHit(
id, edep ); }
230 else { oldHit->
Insert(
id, edep ); }
238 G4int pdg =
abs( aStep->GetTrack()->GetDefinition()->GetPDGEncoding() );
239 if ( !( pdg == 12 || pdg == 14 || pdg == 16 ) )
246 truHit->
Insert(
id, edep );
248 if ( aStep->GetTrack()->GetTrackID() == g4TrackId )
251 truHit->
SetPDGCode( aStep->GetTrack()->GetDefinition()->GetPDGEncoding() );
252 truHit->
SetPDGCharge( aStep->GetTrack()->GetDefinition()->GetPDGCharge() );
253 truHit->
SetParticleName( aStep->GetTrack()->GetDefinition()->GetParticleName() );
254 truHit->
SetTime( aStep->GetPreStepPoint()->GetGlobalTime() );
255 truHit->
SetPosition( aStep->GetPreStepPoint()->GetPosition() );
256 truHit->
SetMomentum( aStep->GetPreStepPoint()->GetMomentum() );
262 std::vector<BesTruthTrack*>* trackList = sensitiveManager->
GetTrackList();
264 for (
unsigned i = 0; i < trackList->size(); i++ )
268 if ( trackIndex == truthTrack->
GetIndex() )
283 truHit->
SetPosition( G4ThreeVector( -99, -99, -99 ) );
291 CalTruthList->insert( truHit );
302 if ( ( sector >= 0 ) && ( sector < 3 ) ) sector += 16;
305 if ( ( nb >= 0 ) && ( nb < 4 ) )
308 CryNumberPhi = ( sector - 3 ) * 4 + nb;
310 else if ( ( nb >= 4 ) && ( nb < 8 ) )
313 CryNumberPhi = ( sector - 3 ) * 4 + nb - 4;
315 else if ( ( nb >= 8 ) && ( nb < 13 ) )
318 CryNumberPhi = ( sector - 3 ) * 5 + nb - 8;
320 else if ( ( nb >= 13 ) && ( nb < 18 ) )
323 CryNumberPhi = ( sector - 3 ) * 5 + nb - 13;
325 else if ( ( nb >= 18 ) && ( nb < 24 ) )
328 CryNumberPhi = ( sector - 3 ) * 6 + nb - 18;
330 else if ( ( nb >= 24 ) && ( nb < 30 ) )
333 CryNumberPhi = ( sector - 3 ) * 6 + nb - 24;
372 switch ( CryNumberTheta )
375 if ( CryNumberPhi < 32 ) CryNumberPhi = 31 - CryNumberPhi;
376 else CryNumberPhi = 95 - CryNumberPhi;
379 if ( CryNumberPhi < 32 ) CryNumberPhi = 31 - CryNumberPhi;
380 else CryNumberPhi = 95 - CryNumberPhi;
383 if ( CryNumberPhi < 40 ) CryNumberPhi = 39 - CryNumberPhi;
384 else CryNumberPhi = 119 - CryNumberPhi;
387 if ( CryNumberPhi < 40 ) CryNumberPhi = 39 - CryNumberPhi;
388 else CryNumberPhi = 119 - CryNumberPhi;
391 if ( CryNumberPhi < 48 ) CryNumberPhi = 47 - CryNumberPhi;
392 else CryNumberPhi = 143 - CryNumberPhi;
395 if ( CryNumberPhi < 48 ) CryNumberPhi = 47 - CryNumberPhi;
396 else CryNumberPhi = 143 - CryNumberPhi;