]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PHOS/AliPHOSTrackSegmentMakerv1.cxx
Changed maximum distance between TPC track and CPV signal, to link the track with...
[u/mrichter/AliRoot.git] / PHOS / AliPHOSTrackSegmentMakerv1.cxx
index 1ba124b70d9c61df843a8231d21a9f1593fbf2bb..ca89c4175a307b9a786aab8d5309b6235646e689 100644 (file)
 //_________________________________________________________________________
 // Implementation version 1 of algorithm class to construct PHOS track segments
 // Track segment for PHOS is list of 
-//        EMC RecPoint + (possibly) CPV RecPoint + (possibly) PPSD RecPoint
+//        EMC RecPoint + (possibly) CPV RecPoint
 // To find TrackSegments we do the following: 
 //  for each EMC RecPoints we look at
-//   CPV/PPSD RecPoints in the radious fRcpv. 
+//   CPV RecPoints in the radious fRcpv. 
 //  If there is such a CPV RecPoint, 
-//   we make "Link" it is just indexes of EMC and CPV/PPSD RecPoint and distance
+//   we make "Link" it is just indexes of EMC and CPV RecPoint and distance
 //   between them in the PHOS plane. 
 //  Then we sort "Links" and starting from the 
 //   least "Link" pointing to the unassined EMC and CPV RecPoints assing them to 
 //   new TrackSegment. 
-// If there is no CPV/PPSD RecPoint we make TrackSegment 
+// If there is no CPV RecPoint we make TrackSegment 
 // consisting from EMC alone. There is no TrackSegments without EMC RecPoint.
-//// In principle this class should be called from AliPHOSReconstructioner, but 
+//// In principle this class should be called from AliPHOSReconstructor, but 
 // one can use it as well in standalone mode.
 // Use  case:
 //  root [0] AliPHOSTrackSegmentMakerv1 * t = new AliPHOSTrackSegmentMaker("galice.root", "tracksegmentsname", "recpointsname")
@@ -36,7 +36,6 @@
 //               // reads gAlice from header file "galice.root", uses recpoints stored in the branch names "recpointsname" (default = "Default")
 //               // and saves recpoints in branch named "tracksegmentsname" (default = "recpointsname")                       
 //  root [1] t->ExecuteTask()
-//  root [2] t->SetMaxEmcPpsdDistance(5)
 //  root [3] t->SetTrackSegmentsBranch("max distance 5 cm")
 //  root [4] t->ExecuteTask("deb all time") 
 //                 
@@ -48,7 +47,7 @@
 #include "TBenchmark.h"
 
 // --- Standard library ---
-
+#include "Riostream.h"
 // --- AliRoot header files ---
 #include "AliPHOSGeometry.h"
 #include "AliPHOSTrackSegmentMakerv1.h"
@@ -126,15 +125,18 @@ void  AliPHOSTrackSegmentMakerv1::FillOneModule()
 }
 
 //____________________________________________________________________________
-Float_t  AliPHOSTrackSegmentMakerv1::GetDistanceInPHOSPlane(AliPHOSEmcRecPoint * emcClu,AliPHOSCpvRecPoint * cpvClu, Bool_t &toofar) const
+Float_t  AliPHOSTrackSegmentMakerv1::GetDistanceInPHOSPlane(AliPHOSEmcRecPoint * emcClu,AliPHOSCpvRecPoint * cpvClu, Int_t &trackindex) const
 {
-  // Calculates the distance between the EMC RecPoint and the PPSD RecPoint
+  // Calculates the distance between the EMC RecPoint and the CPV RecPoint
   // Clusters are sorted in "rows" and "columns" of width 1 cm
 
-  Float_t delta = 1 ;  // Width of the rows in sorting of RecPoints (in cm)
+  //Float_t delta = 1 ;  // Width of the rows in sorting of RecPoints (in cm)
                        // if you change this value, change it as well in xxxRecPoint::Compare()
-  Float_t distance = fRcpv ;
+  Float_t distance2Cpv   = fRcpv ;
+  Float_t distance2Track = fRtpc ; 
+
+  trackindex = -1 ; // closest track within fRCpv 
+
   TVector3 vecEmc ;   // Local position of EMC recpoint
   TVector3 vecCpv ;   // Local position of CPV recpoint propagated to EMC
   TVector3 vecDist ;  // Distance between local positions of two points
@@ -142,9 +144,12 @@ Float_t  AliPHOSTrackSegmentMakerv1::GetDistanceInPHOSPlane(AliPHOSEmcRecPoint *
   emcClu->GetLocalPosition(vecEmc) ;
   cpvClu->GetLocalPosition(vecCpv) ;
 
-  toofar = kTRUE ;
+  //toofar = kTRUE ;
   if(emcClu->GetPHOSMod() == cpvClu->GetPHOSMod()){ 
 
+    // Find EMC-CPV distance
+    distance2Cpv = (vecCpv - vecEmc).Mag() ;
+    
     if (fESD != 0x0) {
       // Extrapolate the global track direction if any to CPV and find the closest track
       Int_t nTracks = fESD->GetNumberOfTracks();
@@ -154,25 +159,27 @@ Float_t  AliPHOSTrackSegmentMakerv1::GetDistanceInPHOSPlane(AliPHOSEmcRecPoint *
       AliESDtrack *track;
       for (Int_t iTrack=0; iTrack<nTracks; iTrack++) {
        track = fESD->GetTrack(iTrack);
-       track->GetOuterXYZ(xyz);     // track coord on the cylinder of PHOS radius
+       if (track->IsPHOS()) 
+         continue ; 
+       track->GetOuterXYZ(xyz, "PHOS");     // track coord on the cylinder of PHOS radius
        if ((TMath::Abs(xyz[0])+TMath::Abs(xyz[1])+TMath::Abs(xyz[2]))<=0)
          continue;
-       track->GetOuterPxPyPz(pxyz); // track momentum ibid.
+       track->GetOuterPxPyPz(pxyz, "PHOS"); // track momentum ibid.
        vecDist = PropagateToPlane(xyz,pxyz,"CPV",cpvClu->GetPHOSMod());
-//     Info("GetDistanceInPHOSPlane","Track %d propagation to CPV = (%f,%f,%f)",
-//          iTrack,vecDist.X(),vecDist.Y(),vecDist.Z());
+       //      Info("GetDistanceInPHOSPlane","Track %d propagation to CPV = (%f,%f,%f)",
+       //     iTrack,vecDist.X(),vecDist.Y(),vecDist.Z());
        vecDist -= vecCpv;
-       distance = TMath::Sqrt(vecDist.X()*vecDist.X() + vecDist.Z()*vecDist.Z());
+       distance2Track = TMath::Sqrt(vecDist.X()*vecDist.X() + vecDist.Z()*vecDist.Z());
        // Find the closest track to the EMC recpoint
-       if (distance < minDistance) {
-         minDistance = distance;
+       if (distance2Track < minDistance) {
+         minDistance = distance2Track;
          iClosestTrack = iTrack;
        }
       }
 
       if (iClosestTrack != -1) {
        track = fESD->GetTrack(iClosestTrack);
-       track->GetOuterPxPyPz(pxyz); // track momentum ibid.
+       track->GetOuterPxPyPz(pxyz, "PHOS"); // track momentum ibid.
        TVector3 vecCpvGlobal; // Global position of the CPV recpoint
        AliPHOSGetter * gime = AliPHOSGetter::Instance() ; 
        const AliPHOSGeometry * geom = gime->PHOSGeometry() ; 
@@ -183,19 +190,22 @@ Float_t  AliPHOSTrackSegmentMakerv1::GetDistanceInPHOSPlane(AliPHOSEmcRecPoint *
 //     Info("GetDistanceInPHOSPlane","Track %d propagation to EMC = (%f,%f,%f)",
 //          iClosestTrack,vecDist.X(),vecDist.Y(),vecDist.Z());
        vecDist -= vecEmc;
-       distance = TMath::Sqrt(vecDist.X()*vecDist.X() + vecDist.Z()*vecDist.Z());
+       distance2Track = TMath::Sqrt(vecDist.X()*vecDist.X() + vecDist.Z()*vecDist.Z());
       }
-    } else {
-      // If no ESD exists, than simply find EMC-CPV distance
-      distance = (vecCpv - vecEmc).Mag() ;
+//     } else {
+//       // If no ESD exists, than simply find EMC-CPV distance
+//       distance = (vecCpv - vecEmc).Mag() ;
+    
+      //if(distance2Track < fRcpv + 2*delta )
+      if(distance2Track < fRtpc )
+       trackindex = iClosestTrack ; 
+      //      toofar = kFALSE ;
     }
-//     Info("GetDistanceInPHOSPlane","cpv-emc distance is %f cm",
-//      distance);
-    if(distance < fRcpv + 2*delta )
-      toofar = kFALSE ;
+    //     Info("GetDistanceInPHOSPlane","cpv-emc distance is %f cm",
+    //          distance);
   }
   
-  return distance ;
+  return distance2Cpv ;
 }
 
 //____________________________________________________________________________
@@ -238,7 +248,8 @@ void  AliPHOSTrackSegmentMakerv1::Init()
 void  AliPHOSTrackSegmentMakerv1::InitParameters()
 {
   //Initializes parameters
-  fRcpv      = 10. ;   
+  fRcpv      = 10. ;
+  fRtpc      = 4. ;
   fEmcFirst  = 0 ;    
   fEmcLast   = 0 ;   
   fCpvFirst  = 0 ;   
@@ -252,7 +263,7 @@ void  AliPHOSTrackSegmentMakerv1::InitParameters()
 //____________________________________________________________________________
 void  AliPHOSTrackSegmentMakerv1::MakeLinks()const
 { 
-  // Finds distances (links) between all EMC and PPSD clusters, 
+  // Finds distances (links) between all EMC and CPV clusters, 
   // which are not further apart from each other than fRcpv 
   // and sort them in accordance with this distance
   
@@ -271,17 +282,17 @@ void  AliPHOSTrackSegmentMakerv1::MakeLinks()const
   for(iEmcRP = fEmcFirst; iEmcRP < fEmcLast; iEmcRP++ ) {
     emcclu = dynamic_cast<AliPHOSEmcRecPoint *>(emcRecPoints->At(iEmcRP)) ;
 
-    Bool_t toofar ;        
+    //Bool_t toofar ;        
     Int_t iCpv = 0 ;    
     for(iCpv = fCpvFirst; iCpv < fCpvLast;iCpv++ ) { 
       
       cpv = dynamic_cast<AliPHOSCpvRecPoint *>(cpvRecPoints->At(iCpv)) ;
-      Float_t r = GetDistanceInPHOSPlane(emcclu, cpv, toofar) ;
-      
-      if(toofar)
-        break ;         
+      Int_t track = -1 ; 
+      Float_t r = GetDistanceInPHOSPlane(emcclu, cpv, track) ;     
+      //      if(toofar)
+      //       continue ;       
       if(r < fRcpv) { 
-        new ((*fLinkUpArray)[iLinkUp++])  AliPHOSLink(r, iEmcRP, iCpv) ;
+        new ((*fLinkUpArray)[iLinkUp++])  AliPHOSLink(r, iEmcRP, iCpv, track) ;
       }      
     }
   } 
@@ -328,24 +339,24 @@ void  AliPHOSTrackSegmentMakerv1::MakePairs()
   
   while ( (linkUp =  static_cast<AliPHOSLink *>(nextUp()) ) ){  
 
-    if(emcExist[linkUp->GetEmc()-fEmcFirst] != -1){ //without ppsd Up yet 
+    if(emcExist[linkUp->GetEmc()-fEmcFirst] != -1){
 
-      if(cpvExist[linkUp->GetPpsd()-fCpvFirst]){ //CPV still exist
-       
-       new ((* trackSegments)[fNTrackSegments]) 
-         AliPHOSTrackSegment(dynamic_cast<AliPHOSEmcRecPoint *>(emcRecPoints->At(linkUp->GetEmc())) , 
-                            dynamic_cast<AliPHOSCpvRecPoint *>(cpvRecPoints->At(linkUp->GetPpsd()))) ;
+      if(cpvExist[linkUp->GetCpv()-fCpvFirst]){ //CPV still exist
+        new ((* trackSegments)[fNTrackSegments]) 
+          AliPHOSTrackSegment(dynamic_cast<AliPHOSEmcRecPoint *>(emcRecPoints->At(linkUp->GetEmc())) , 
+                              dynamic_cast<AliPHOSCpvRecPoint *>(cpvRecPoints->At(linkUp->GetCpv())) , 
+                              linkUp->GetTrack()) ;
+        
        (dynamic_cast<AliPHOSTrackSegment *>(trackSegments->At(fNTrackSegments)))->SetIndexInList(fNTrackSegments);
        fNTrackSegments++ ;
-       
        emcExist[linkUp->GetEmc()-fEmcFirst] = -1 ; //Mark emc  that Cpv was found 
        //mark CPV recpoint as already used 
-       cpvExist[linkUp->GetPpsd()-fCpvFirst] = kFALSE ;
-      } //if ppsdUp still exist
+       cpvExist[linkUp->GetCpv()-fCpvFirst] = kFALSE ;
+      } //if CpvUp still exist
     } 
   }        
 
-  //look through emc recPoints left without CPV/PPSD
+  //look through emc recPoints left without CPV
   if(emcExist){ //if there is emc rec point
     Int_t iEmcRP ;
     for(iEmcRP = 0; iEmcRP < fEmcLast-fEmcFirst  ; iEmcRP++ ){
@@ -382,14 +393,16 @@ void  AliPHOSTrackSegmentMakerv1::Exec(Option_t *option)
  
   const AliPHOSGeometry * geom = gime->PHOSGeometry() ; 
 
-  if (fLastEvent == -1) fLastEvent = gime->MaxEvent() - 1 ;
-  else fLastEvent = TMath::Min(fFirstEvent,gime->MaxEvent());
+  if (fLastEvent == -1) 
+    fLastEvent = gime->MaxEvent() - 1 ;
+  else 
+    fLastEvent = TMath::Min(fFirstEvent,gime->MaxEvent());
   Int_t nEvents   = fLastEvent - fFirstEvent + 1;
 
   Int_t ievent ; 
   for (ievent = fFirstEvent; ievent <= fLastEvent; ievent++) {
     gime->Event(ievent,"R") ;
-    //Make some initializations 
+   //Make some initializations 
     fNTrackSegments = 0 ;
     fEmcFirst = 0 ;    
     fEmcLast  = 0 ;   
@@ -413,7 +426,6 @@ void  AliPHOSTrackSegmentMakerv1::Exec(Option_t *option)
     
     //increment the total number of track segments per run 
     fTrackSegmentsInRun += gime->TrackSegments()->GetEntriesFast() ; 
-
   }
   
   if(strstr(option,"tim")){
@@ -444,7 +456,7 @@ void AliPHOSTrackSegmentMakerv1::Print()const
     message = "\n======== AliPHOSTrackSegmentMakerv1 ========\n" ; 
     message += "Making Track segments\n" ;
     message += "with parameters:\n" ; 
-    message += "     Maximal EMC - CPV (PPSD) distance (cm) %f\n" ;
+    message += "     Maximal EMC - CPV distance (cm) %f\n" ;
     message += "============================================\n" ;
     Info("Print", message.Data(),fRcpv) ;
   }