slicPandora/src
diff -u -r1.22 -r1.23
--- SimpleTrackProcessor.cpp 1 Feb 2011 23:23:48 -0000 1.22
+++ SimpleTrackProcessor.cpp 3 Feb 2011 16:31:12 -0000 1.23
@@ -1,4 +1,4 @@
-// $Id: SimpleTrackProcessor.cpp,v 1.22 2011/02/01 23:23:48 jeremy Exp $
+// $Id: SimpleTrackProcessor.cpp,v 1.23 2011/02/03 16:31:12 stanitzk Exp $
//#define POST_CDR_VERSION 1
@@ -100,7 +100,7 @@
// Set impact parameters.
trackParameters.m_d0 = track->getD0();
trackParameters.m_z0 = track->getZ0();
-
+
// Set the sign.
const float signedCurvature(track->getOmega());
if (0. != signedCurvature)
@@ -116,9 +116,9 @@
trackParameters.m_particleId = -211;
// FIXME: Next three boolean parameters are hard-coded.
- trackParameters.m_reachesCalorimeter = true;
- trackParameters.m_canFormPfo = true;
- trackParameters.m_canFormClusterlessPfo = false;
+// trackParameters.m_reachesCalorimeter = true;
+// trackParameters.m_canFormPfo = true;
+// trackParameters.m_canFormClusterlessPfo = false;
// #ifdef POST_CDR_VERSION
trackParameters.m_isProjectedToEndCap = false; // FIXME
// #endif
@@ -136,13 +136,16 @@
std::cout << " z0 = " << trackParameters.m_z0.Get() << std::endl;
std::cout << " mass = " << trackParameters.m_mass.Get() << std::endl;
std::cout << " momentumAtDca = " << trackParameters.m_momentumAtDca.Get() << std::endl;
- std::cout << " stateAtStart = " << trackParameters.m_trackStateAtStart.Get() << std::endl;
- std::cout << " stateAtEnd = " << trackParameters.m_trackStateAtEnd.Get() << std::endl;
- std::cout << " stateAtECal = " << trackParameters.m_trackStateAtECal.Get() << std::endl;
- std::cout << " reachesECal = " << trackParameters.m_reachesECal.Get() << std::endl;
- std::cout << " canFormPfo = " << trackParameters.m_canFormPfo.Get() << std::endl;
- std::cout << " canFormClusterlessPfo = " << trackParameters.m_canFormClusterlessPfo.Get() << std::endl;
+ std::cout << " stateAtStart = " << trackParameters.m_trackStateAtStart.Get() << std::endl;
+ std::cout << " stateAtEnd = " << trackParameters.m_trackStateAtEnd.Get() << std::endl;
+ std::cout << " stateAtCalorimeter = " << trackParameters.m_trackStateAtCalorimeter.Get() << std::endl;
+ std::cout << " reachesCalorimeter = " << trackParameters.m_reachesCalorimeter.Get() << std::endl;
+ std::cout << " canFormPfo = " << trackParameters.m_canFormPfo.Get() << std::endl;
+ std::cout << " canFormClusterlessPfo = " << trackParameters.m_canFormClusterlessPfo.Get() << std::endl;
+ std::cout << " isProjectedToEndCap = " << trackParameters.m_isProjectedToEndCap.Get() << std::endl;
+ std::cout << " Number of Hits on Track = " << track->getTrackerHits().size() << std::endl;
std::cout << " parentAddress = " << trackParameters.m_pParentAddress.Get() << std::endl;
+ std::cout << " " << std::endl;
#endif
#ifdef USE_PANDORA_TRACK_EXTRAP
@@ -151,26 +154,26 @@
pandora::Helix *MyHelix = new pandora::Helix(track->getPhi(), track->getD0(), track->getZ0(), track->getOmega(), track->getTanLambda(), magneticField);
const pandora::CartesianVector &referencePoint(MyHelix->GetReferencePoint());
- // First project to endcap
+
float minGenericTime(std::numeric_limits<float>::max());
- bool isProjectedToEndCap=true;
+ float genericTime(std::numeric_limits<float>::max());
+
pandora::CartesianVector bestECalProjection;
-
- (void) MyHelix->GetPointInZ(trackParameters.m_charge.Get()* (pandora::GeometryHelper::GetECalEndCapParameters().GetInnerZCoordinate()), referencePoint, bestECalProjection, minGenericTime);
- // Cylinder, dealing with cylidners only right now
- float genericTime(std::numeric_limits<float>::max());
pandora::CartesianVector barrelProjection;
+ // First project to endcap
+ (void) MyHelix->GetPointInZ(trackParameters.m_charge.Get()* (pandora::GeometryHelper::GetECalEndCapParameters().GetInnerZCoordinate()), referencePoint, bestECalProjection, minGenericTime);
+ // Cylinder, dealing with cylinders only right now
+
const pandora::StatusCode statusCode(MyHelix->GetPointOnCircle(pandora::GeometryHelper::GetECalBarrelParameters().GetInnerRCoordinate(), referencePoint, barrelProjection, genericTime));
if ((pandora::STATUS_CODE_SUCCESS == statusCode) && (genericTime < minGenericTime))
{
minGenericTime = genericTime;
- isProjectedToEndCap = false;
+
bestECalProjection = barrelProjection;
}
- trackParameters.m_isProjectedToEndCap = isProjectedToEndCap;
// Convert generic time (length from reference point to intersection, divided by momentum) into nanoseconds
const float particleMass(trackParameters.m_mass.Get());
@@ -272,13 +275,17 @@
// this is the case for pt < 1.0GeV
if(std::isnan(ecalObj->getFloatVal(0)))
{
- LCGenericObject* exceptional_endObj = dynamic_cast<LCGenericObject*>(endCollection->getElementAt(i));
+
+ LCGenericObject* exceptional_endObj = dynamic_cast<LCGenericObject*>(endCollection->getElementAt(i));
trackParameters.m_trackStateAtCalorimeter = pandora::TrackState(exceptional_endObj->getFloatVal(0),
exceptional_endObj->getFloatVal(1),
exceptional_endObj->getFloatVal(2),
exceptional_endObj->getFloatVal(3),
exceptional_endObj->getFloatVal(4),
exceptional_endObj->getFloatVal(5));
+ trackParameters.m_reachesCalorimeter = false; //right to assume it does not reach the endcap
+ trackParameters.m_canFormClusterlessPfo = true; // it can still form a clusterless PFO
+ trackParameters.m_canFormPfo = false;
}
else
{
@@ -289,6 +296,9 @@
ecalObj->getFloatVal(3),
ecalObj->getFloatVal(4),
ecalObj->getFloatVal(5));
+ trackParameters.m_reachesCalorimeter = true; // does reach ECAL
+ trackParameters.m_canFormClusterlessPfo = false;
+ trackParameters.m_canFormPfo = true; // use a full PFO
}
// this will set the timing cut to infinity, till we have something better ...
trackParameters.m_timeAtCalorimeter = std::numeric_limits<float>::max(); // FIXME Temporarily set to large value to fail any timing cuts
@@ -301,4 +311,22 @@
endObj->getFloatVal(3),
endObj->getFloatVal(4),
endObj->getFloatVal(5));
+ // figure out, whether this one goes to the endcap using the StateAtECal fields
+ const float innerZ=pandora::GeometryHelper::GetECalEndCapParameters().GetInnerZCoordinate();
+ float trackZ=fabs(trackParameters.m_trackStateAtCalorimeter.Get().GetPosition().GetZ());
+
+ if (trackZ-innerZ>-1.5) // it is close to the endcap, hard-coded for now
+ {
+
+ trackParameters.m_isProjectedToEndCap=true; //it is in the endcap
+
+ }
+ else
+ {
+ trackParameters.m_isProjectedToEndCap=false; //stays in barrel
+ }
+
+
+
+
}