Possibility of switching on/off tracklets to tracks references (Ruben)
authormasera <masera@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sat, 26 Nov 2011 18:14:52 +0000 (18:14 +0000)
committermasera <masera@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sat, 26 Nov 2011 18:14:52 +0000 (18:14 +0000)
ITS/AliITSMultReconstructor.cxx
ITS/AliITSMultReconstructor.h
ITS/AliITSRecoParam.cxx
ITS/AliITSRecoParam.h

index 899d404..ae26e7c 100644 (file)
@@ -155,6 +155,7 @@ fhphiClustersLay1(0),
   fCreateClustersCopy(0),
   fClustersLoaded(0),
   fRecoDone(0),
+  fBuildRefs(kTRUE),
   fSPDSeg()
 {
   // default c-tor
@@ -172,7 +173,7 @@ fhphiClustersLay1(0),
   
   SetHistOn();
 
-  if(AliITSReconstructor::GetRecoParam()) { 
+  if (AliITSReconstructor::GetRecoParam()) { 
     SetPhiWindow(AliITSReconstructor::GetRecoParam()->GetTrackleterPhiWindow());
     SetThetaWindow(AliITSReconstructor::GetRecoParam()->GetTrackleterThetaWindow());
     SetPhiShift(AliITSReconstructor::GetRecoParam()->GetTrackleterPhiShift());
@@ -182,6 +183,7 @@ fhphiClustersLay1(0),
     SetPhiRotationAngle(AliITSReconstructor::GetRecoParam()->GetTrackleterPhiRotationAngle());
     SetNStdDev(AliITSReconstructor::GetRecoParam()->GetTrackleterNStdDevCut());
     SetScaleDThetaBySin2T(AliITSReconstructor::GetRecoParam()->GetTrackleterScaleDThetaBySin2T());
+    SetBuildRefs(AliITSReconstructor::GetRecoParam()->GetTrackleterBuildCl2TrkRefs());
     //
     SetCutPxDrSPDin(AliITSReconstructor::GetRecoParam()->GetMultCutPxDrSPDin());
     SetCutPxDrSPDout(AliITSReconstructor::GetRecoParam()->GetMultCutPxDrSPDout());
@@ -323,6 +325,7 @@ fBlackList(0),
 fCreateClustersCopy(0),
 fClustersLoaded(0),
 fRecoDone(0),
+fBuildRefs(kTRUE),
 fSPDSeg()
  {
   // Copy constructor :!!! RS ATTENTION: old c-tor reassigned the pointers instead of creating a new copy -> would crash on delete
@@ -366,7 +369,7 @@ AliITSMultReconstructor::~AliITSMultReconstructor(){
     delete[] fDetectorIndexClustersLay[i];
     delete[] fOverlapFlagClustersLay[i];
     delete   fClArr[i];
-    for (int j=0;j<2;j++) delete fUsedClusLay[i][j];
+    for (int j=0;j<2;j++) if (fUsedClusLay[i][j]) delete fUsedClusLay[i][j];
   }
   delete [] fTracklets;
   delete [] fSClusters;
@@ -525,7 +528,7 @@ void AliITSMultReconstructor::CreateMultiplicityObject()
   }
   //
   fMult = new AliMultiplicity(fNTracklets,fNSingleCluster,fNFiredChips[0],fNFiredChips[1],fastOrFiredMap);
-  fMult->SetMultTrackRefs(kTRUE);
+  fMult->SetMultTrackRefs( fBuildRefs );
   // store some details of reco:
   fMult->SetScaleDThetaBySin2T(fScaleDTBySin2T);
   fMult->SetDPhiWindow2(fDPhiWindow2);
@@ -540,13 +543,17 @@ void AliITSMultReconstructor::CreateMultiplicityObject()
   //
   UInt_t shared[100]; 
   AliRefArray *refs[2][2] = {{0,0},{0,0}};
-  for (int il=2;il--;) 
-    for (int it=2;it--;)  // tracklet_clusters->track references to stor
-      if (fStoreRefs[il][it]) refs[il][it] = new AliRefArray(fNTracklets,0);
+  if (fBuildRefs) {
+    for (int il=2;il--;) 
+      for (int it=2;it--;)  // tracklet_clusters->track references to stor
+       if (fStoreRefs[il][it]) refs[il][it] = new AliRefArray(fNTracklets,0);
+  }
   //
   for (int i=fNTracklets;i--;)  {
     float* tlInfo = fTracklets[i];
     fMult->SetTrackletData(i,tlInfo);
+    //
+    if (!fBuildRefs) continue; // do we need references?
     for (int itp=0;itp<2;itp++) {      
       for (int ilr=0;ilr<2;ilr++) {
        if (!fStoreRefs[ilr][itp]) continue; // nothing to store
@@ -558,13 +565,15 @@ void AliITSMultReconstructor::CreateMultiplicityObject()
       }
     }
   }
-  fMult->AttachTracklet2TrackRefs(refs[0][0],refs[0][1],refs[1][0],refs[1][1]); 
+  if (fBuildRefs) fMult->AttachTracklet2TrackRefs(refs[0][0],refs[0][1],refs[1][0],refs[1][1]); 
   //
   AliRefArray *refsc[2] = {0,0};
-  for (int it=2;it--;) if (fStoreRefs[0][it]) refsc[it] = new AliRefArray(fNClustersLay[0]);
+  if (fBuildRefs) for (int it=2;it--;) if (fStoreRefs[0][it]) refsc[it] = new AliRefArray(fNClustersLay[0]);
   for (int i=fNSingleCluster;i--;) {
     float* clInfo = fSClusters[i];
     fMult->SetSingleClusterData(i,clInfo); 
+    //
+    if (!fBuildRefs) continue; // do we need references?
     int clID = int(clInfo[kSCID]);
     for (int itp=0;itp<2;itp++) {
       if (!fStoreRefs[0][itp]) continue;
@@ -574,7 +583,7 @@ void AliITSMultReconstructor::CreateMultiplicityObject()
       else refsc[itp]->AddReferences(i,shared,nref);
     }
   }
-  fMult->AttachCluster2TrackRefs(refsc[0],refsc[1]); 
+  if (fBuildRefs) fMult->AttachCluster2TrackRefs(refsc[0],refsc[1]); 
   fMult->CompactBits();
   //
 }
@@ -690,9 +699,11 @@ void AliITSMultReconstructor::LoadClusterArrays(TTree* itsClusterTree, int il)
   if (fDetectorIndexClustersLay[il]) delete[] fDetectorIndexClustersLay[il]; 
   fDetectorIndexClustersLay[il] = detectorIndexClustersLay;
   //
-  for (int it=0;it<2;it++) {
-    if (fUsedClusLay[il][it]) delete fUsedClusLay[il][it];
-    fUsedClusLay[il][it] = new AliRefArray(nclLayer);
+  if (fBuildRefs) {
+    for (int it=0;it<2;it++) {
+      if (fUsedClusLay[il][it]) delete fUsedClusLay[il][it];
+      fUsedClusLay[il][it] = new AliRefArray(nclLayer);
+    }
   }
   //
   if (fClustersLay[il]) delete[] fClustersLay[il]; 
@@ -1065,7 +1076,7 @@ void AliITSMultReconstructor::ProcessESDTracks()
   // Flag the clusters used by ESD tracks
   // Flag primary tracks to be used for multiplicity counting 
   //
-  if (!fESDEvent) return;
+  if (!fESDEvent || !fBuildRefs) return;
   AliESDVertex* vtx = (AliESDVertex*)fESDEvent->GetPrimaryVertexTracks();
   if (!vtx || vtx->GetNContributors()<1) vtx = (AliESDVertex*)fESDEvent->GetPrimaryVertexSPD();
   if (!vtx || vtx->GetNContributors()<1) {
index b6f0665..a228e8e 100644 (file)
@@ -89,6 +89,9 @@ public:
   //
   void SetHistOn(Bool_t b=kFALSE) {fHistOn=b;}
   void SaveHists();
+  //
+  void   SetBuildRefs(Bool_t v=kTRUE)                    {fBuildRefs = v;}
+  Bool_t GetBuildRefs()                          const   {return fBuildRefs;}
 
   AliITSDetTypeRec *GetDetTypeRec() const {return fDetTypeRec;}
   void SetDetTypeRec(AliITSDetTypeRec *ptr){fDetTypeRec = ptr;}
@@ -252,13 +255,14 @@ public:
   Bool_t        fCreateClustersCopy;   //  read and clone clusters directly from the tree
   Bool_t        fClustersLoaded;       // flag of clusters loaded
   Bool_t        fRecoDone;             // flag that reconstruction is done
+  Bool_t        fBuildRefs;            // build cluster to tracks references
   //
   AliITSsegmentationSPD fSPDSeg;       // SPD segmentation model
   //
   void LoadClusterArrays(TTree* tree, TTree* treeMix=0);
   void LoadClusterArrays(TTree* tree,int il);
 
-  ClassDef(AliITSMultReconstructor,10)
+  ClassDef(AliITSMultReconstructor,11)
 };
 
 //____________________________________________________________________
index 7e4019c..b5aef57 100644 (file)
@@ -155,6 +155,8 @@ fTrackleterZetaOverlapCut(0.05),
 fTrackleterPhiRotationAngle(0.0),
 fTrackleterNStdDev(1.5),
 fScaleDTBySin2T(kFALSE),
+fTrackleterBuildCl2TrkRefs(kTRUE),
+//
 fUseCosmicRunShiftsSSD(kFALSE),
 fSPDRemoveNoisyFlag(kTRUE),
 fSPDRemoveDeadFlag(kTRUE),
@@ -419,6 +421,7 @@ AliITSRecoParam *AliITSRecoParam::GetHighFluxParam()
   //
   // trackleter
   param->fTrackleterPhiWindow = 0.06;
+  param->fTrackleterBuildCl2TrkRefs = kFALSE;
   param->fScaleDTBySin2T = kTRUE;
   //
   param->fSelectBestMIP03 = kFALSE;//kTRUE;
@@ -528,7 +531,6 @@ AliITSRecoParam *AliITSRecoParam::GetLowFluxParam()
   param->SetNLoopsSA(20);
   param->fMaxPhiSA = 0.07;
   param->fMaxLambdaSA = 0.04;
-
  
   param->GetESDV0Params()->SetMinRTgl0(0.5);
   param->GetESDV0Params()->SetMaxDist(1.5);
@@ -543,6 +545,9 @@ AliITSRecoParam *AliITSRecoParam::GetLowFluxParam()
   param->GetESDV0Params()->SetLikelihood1Cut(0.35);
   param->GetESDV0Params()->SetCombinedCut(0.4);
 
+  // trackleter
+  param->fTrackleterBuildCl2TrkRefs = kTRUE;
+
   // mult reco
   param->fMultCutPxDrSPDin = 0.1;
   param->fMultCutPxDrSPDout = 0.15;
@@ -714,6 +719,9 @@ AliITSRecoParam *AliITSRecoParam::GetCosmicTestParam()
   param->fSigmaZDeadZoneHit2 = 0.001/12.;
   param->fXPassDeadZoneHits = 0.018;
 
+  // trackleter
+  param->fTrackleterBuildCl2TrkRefs = kFALSE;
+
   return param;
 }
 //_____________________________________________________________________________
index 4db7947..e4e1324 100644 (file)
@@ -242,6 +242,9 @@ class AliITSRecoParam : public AliDetectorRecoParam
   Float_t GetTrackleterZetaWindowL1() const {return fTrackleterZetaWindowL1;}
   void    SetTrackleterZetaWindowL2(Float_t w=0.40) {fTrackleterZetaWindowL2=w; return;}
   Float_t GetTrackleterZetaWindowL2() const {return fTrackleterZetaWindowL2;}
+  void    SetTrackleterBuildCl2TrkRefs(Bool_t v=kTRUE) {fTrackleterBuildCl2TrkRefs = v;}
+  Bool_t  GetTrackleterBuildCl2TrkRefs() const { return fTrackleterBuildCl2TrkRefs;}
+  //
   void    SetUpdateOncePerEventPlaneEff(Bool_t use=kTRUE) {fUpdateOncePerEventPlaneEff=use; return;}
   Bool_t  GetUpdateOncePerEventPlaneEff() const {return fUpdateOncePerEventPlaneEff;}
   void    SetMinContVtxPlaneEff(Int_t n=3) {fMinContVtxPlaneEff=n; return;}
@@ -685,7 +688,9 @@ class AliITSRecoParam : public AliDetectorRecoParam
   Float_t fTrackleterPhiRotationAngle;             // Angle to rotate cluster in the SPD inner layer for combinatorial reco only
   Float_t fTrackleterNStdDev;      // cut on the number of standard deviations
   Bool_t  fScaleDTBySin2T;         // scale Dtheta by 1/sin^2(theta)
-
+  //
+  Bool_t  fTrackleterBuildCl2TrkRefs;           // build cluster to track references in AliMultiplicity
+  //
   Bool_t fUseCosmicRunShiftsSSD; // SSD time shifts for cosmic run 2007/2008 (use for data taken up to 18 sept 2008)
 
 
@@ -739,7 +744,6 @@ class AliITSRecoParam : public AliDetectorRecoParam
   Float_t fMultCutGammaSFromDecay;        // min path*P for gammas
   Float_t fMultCutK0SFromDecay;           // min path*P for K0s
   Float_t fMultCutMaxDCA;                 // max DCA for V0 at ESD vertex
-  //
   // Lorentz angle
   Bool_t fCorrectLorentzAngleSPD;         // flag to enable correction
   Float_t fTanLorentzAngleHolesSPD;       // angle for holes in SPD
@@ -757,7 +761,7 @@ class AliITSRecoParam : public AliDetectorRecoParam
   AliITSRecoParam(const AliITSRecoParam & param);
   AliITSRecoParam & operator=(const AliITSRecoParam &param);
 
-  ClassDef(AliITSRecoParam,49) // ITS reco parameters
+  ClassDef(AliITSRecoParam,50) // ITS reco parameters
 };
 
 #endif