51{
52 G4double edep = aStep->GetTotalEnergyDeposit();
53 edep *= CLHEP::MeV;
54
55
56 if(edep==0.)
57 {
58 if(aStep->GetTrack()->GetDefinition()!=G4Geantino::GeantinoDefinition() && aStep->GetTrack()->GetDefinition()!=G4ChargedGeantino::ChargedGeantinoDefinition()) return false;
59 }
60
61
62 const G4TouchableHistory *myTouch = dynamic_cast<const G4TouchableHistory*>(aStep->GetPreStepPoint()->GetTouchable());
63 if (not myTouch) {
64 G4cout << "BCMSensorSD::ProcessHits bad dynamic_cast" << G4endl;
65 return false;
66 }
67
68 int BEcopyNo = myTouch->GetVolume()->GetCopyNo();
69
70
71 G4ThreeVector coord1 = aStep->GetPreStepPoint()->GetPosition();
72 G4ThreeVector coord2 = aStep->GetPostStepPoint()->GetPosition();
73
74
75
76
77 const G4AffineTransform transformation = myTouch->GetHistory()->GetTopTransform();
78 G4ThreeVector localPosition1 = transformation.TransformPoint(coord1);
79 G4ThreeVector localPosition2 = transformation.TransformPoint(coord2);
80
81 HepGeom::Point3D<double> lP1,lP2;
85
89
90
91 if(BEcopyNo == 11950 || BEcopyNo == 11951)
92 {
93 TrackHelper trHelp(aStep->GetTrack());
94
95 int primaren = 0;
96 if(trHelp.IsPrimary())
97 primaren = 1;
98 else if(trHelp.IsRegeneratedPrimary())
99 primaren = 2;
100 else if(trHelp.IsSecondary())
101 primaren = 3;
102 else if(trHelp.IsRegisteredSecondary())
103 primaren = 4;
104
105 int produced_in_diamond = 0;
106 if(aStep->GetTrack()->GetLogicalVolumeAtVertex()->GetName() == "Pixel::bcmDiamondLog")
107 produced_in_diamond = 1;
108 else if(aStep->GetTrack()->GetLogicalVolumeAtVertex()->GetName() == "Pixel::bcmModLog")
109 produced_in_diamond = 2;
110 else if(aStep->GetTrack()->GetLogicalVolumeAtVertex()->GetName() == "Pixel::bcmWallLog")
111 produced_in_diamond = 3;
112
113 m_HitColl->Emplace(lP1, lP2, edep, aStep->GetPreStepPoint()->GetGlobalTime(),
115 0, 0, myTouch->GetVolume(1)->GetCopyNo()-951, BEcopyNo - 11950, primaren, produced_in_diamond);
116 }
117 return true;
118}