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