54 epDepth( 0 ), theAngle( 0 ), calorimeterEDLeftAdjacent( 0 ),
55 calorimeterEDRightAdjacent( 0 ), collectEDInAdjacentCrystals( false ),
56 targetEPInitialized( false ), messenger( NULL )
59 const CexmcSetup * setup( static_cast< const CexmcSetup * >(
104 TransformToAdjacentInnerCrystal( columnLeft, rowLeft );
105 TransformToAdjacentInnerCrystal( columnRight, rowRight );
121 G4bool edInAdjacentCrystalsCollected(
false );
129 G4int nCrystalsInColumn(
137 crystalWidth + crystalWidth / 2 );
140 crystalHeight + crystalHeight / 2 );
143 crystalWidth + crystalWidth / 2 );
146 crystalHeight + crystalHeight / 2 );
156 rowLeft, columnLeft, x, y,
161 rowRight, columnRight, x, y,
167 edInAdjacentCrystalsCollected =
true;
180 G4double calorimeterEPLeftRadiusOfTheSphere(
183 G4double calorimeterEPLeftRadiusOfTheSphere2(
184 calorimeterEPLeftRadiusOfTheSphere *
185 calorimeterEPLeftRadiusOfTheSphere );
186 G4double calorimeterEPLeftPositionX2(
189 G4double calorimeterEPLeftPositionY2(
192 G4double calorimeterEPLeftPositionZOffset(
193 calorimeterEPLeftRadiusOfTheSphere - std::sqrt(
194 calorimeterEPLeftRadiusOfTheSphere2 -
195 calorimeterEPLeftPositionX2 -
196 calorimeterEPLeftPositionY2 ) );
197 G4double calorimeterEPRightRadiusOfTheSphere(
200 G4double calorimeterEPRightRadiusOfTheSphere2(
201 calorimeterEPRightRadiusOfTheSphere *
202 calorimeterEPRightRadiusOfTheSphere );
203 G4double calorimeterEPRightPositionX2(
206 G4double calorimeterEPRightPositionY2(
209 G4double calorimeterEPRightPositionZOffset(
210 calorimeterEPRightRadiusOfTheSphere - std::sqrt(
211 calorimeterEPRightRadiusOfTheSphere2 -
212 calorimeterEPRightPositionX2 -
213 calorimeterEPRightPositionY2 ) );
215 calorimeterEPLeftPositionZOffset );
217 calorimeterEPRightPositionZOffset );
239 rowRight, columnRight,
249 if ( ! targetEPInitialized )
261 targetEPInitialized =
true;
280 void CexmcReconstructor::CollectEDInAdjacentCrystals(
286 for ( CexmcEnergyDepositCalorimeterCollection::const_iterator
287 k( edHits.begin() ); k != edHits.end(); ++k )
289 if ( i - row > 1 || i - row < -1 )
296 for ( CexmcEnergyDepositCrystalRowCollection::const_iterator
297 l( k->begin() ); l != k->end(); ++l )
299 if ( j - column > 1 || j - column < -1 )
312 void CexmcReconstructor::CalculateWeightedEPPosition(
330 for ( CexmcEnergyDepositCalorimeterCollection::const_iterator
331 k( edHits.begin() ); k != edHits.end(); ++k )
334 ( i - row > 1 || i - row < -1 ) )
341 for ( CexmcEnergyDepositCrystalRowCollection::const_iterator
342 l( k->begin() ); l != k->end(); ++l )
345 ( j - column > 1 || j - column < -1 ) )
356 crystalWidth + crystalWidth / 2 );
360 std::sqrt( *l ) : *l );
361 xWeightsSum += energyWeight * xInCalorimeterOffset;
364 crystalHeight + crystalHeight / 2 );
365 yWeightsSum += energyWeight * yInCalorimeterOffset;
366 energyWeightsSum += energyWeight;
372 x = xWeightsSum / energyWeightsSum;
373 y = yWeightsSum / energyWeightsSum;
G4ThreeVector calorimeterEPLeftPosition
G4ThreeVector calorimeterEPLeftWorldPosition
G4int calorimeterEDLeftMaxY
G4int calorimeterEDRightMaxY
virtual void Reconstruct(const CexmcEnergyDepositStore *edStore)
double angle(const Hep3Vector &) const
CLHEP::Hep3Vector G4ThreeVector
G4double calorimeterEDLeftAdjacent
G4int calorimeterEDRightMaxX
const G4VUserDetectorConstruction * GetUserDetectorConstruction() const
const CexmcEnergyDepositCalorimeterCollection & calorimeterEDLeftCollection
G4ThreeVector targetEPWorldDirection
G4int calorimeterEDLeftMaxX
virtual ~CexmcReconstructor()
G4bool useInnerRefCrystal
const G4AffineTransform & GetCalorimeterLeftTransform(void) const
void ReconstructAngle(void)
G4ThreeVector calorimeterEPLeftWorldDirection
G4ThreeVector targetEPWorldPosition
std::vector< CexmcEnergyDepositCrystalRowCollection > CexmcEnergyDepositCalorimeterCollection
CexmcCrystalSelectionAlgorithm csAlgorithm
void ReconstructEntryPoints(const CexmcEnergyDepositStore *edStore)
CexmcCalorimeterEntryPointDefinitionAlgorithm epDefinitionAlgorithm
G4bool collectEDInAdjacentCrystals
G4ThreeVector calorimeterEPLeftDirection
void ReconstructTargetPoint(void)
G4ThreeVector calorimeterEPRightWorldPosition
static G4RunManager * GetRunManager()
G4ThreeVector calorimeterEPRightPosition
const G4AffineTransform & GetCalorimeterRightTransform(void) const
CexmcCalorimeterEntryPointDepthDefinitionAlgorithm epDepthDefinitionAlgorithm
const CalorimeterGeometryData & GetCalorimeterGeometry(void) const
G4ThreeVector calorimeterEPRightDirection
G4ThreeVector targetEPDirection
const G4AffineTransform & GetTargetTransform(void) const
const CexmcEnergyDepositCalorimeterCollection & calorimeterEDRightCollection
G4ThreeVector targetEPPosition
G4ThreeVector calorimeterEPRightWorldDirection
virtual G4bool HasFullTrigger(void) const
G4double calorimeterEDRightAdjacent