Commit in slicPandora/src on MAIN
SimpleTrackProcessor.cpp+48-201.22 -> 1.23
added a first attempt on gettint the reaches Endcap and use as PFO setting
in...

slicPandora/src
SimpleTrackProcessor.cpp 1.22 -> 1.23
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
+    }
+    
+    
+								    
+							    
 }
CVSspam 0.2.8