New private method ReflectClusterAroundZAxisForLayer plus related data members to...
authormasera <masera@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 25 May 2008 20:05:43 +0000 (20:05 +0000)
committermasera <masera@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 25 May 2008 20:05:43 +0000 (20:05 +0000)
ITS/AliITSTrackleterSPDEff.cxx
ITS/AliITSTrackleterSPDEff.h

index f09e12f..56894fe 100644 (file)
@@ -61,6 +61,8 @@ fOnlyOneTrackletPerC1(0),
 fUpdateOncePerEventPlaneEff(0),
 fChipUpdatedInEvent(0),
 fPlaneEffSPD(0),
+fReflectClusterAroundZAxisForLayer0(kFALSE),
+fReflectClusterAroundZAxisForLayer1(kFALSE),
 fMC(0),
 fUseOnlyPrimaryForPred(0),
 fUseOnlySecondaryForPred(0), 
@@ -124,6 +126,8 @@ fOnlyOneTrackletPerC1(mr.fOnlyOneTrackletPerC1),
 fUpdateOncePerEventPlaneEff(mr.fUpdateOncePerEventPlaneEff),
 fChipUpdatedInEvent(mr.fChipUpdatedInEvent),
 fPlaneEffSPD(mr.fPlaneEffSPD),
+fReflectClusterAroundZAxisForLayer0(mr.fReflectClusterAroundZAxisForLayer0),
+fReflectClusterAroundZAxisForLayer1(mr.fReflectClusterAroundZAxisForLayer1),
 fMC(mr.fMC),
 fUseOnlyPrimaryForPred(mr.fUseOnlyPrimaryForPred),
 fUseOnlySecondaryForPred(mr.fUseOnlySecondaryForPred),
@@ -214,6 +218,10 @@ AliITSTrackleterSPDEff::Reconstruct(TTree* clusterTree, Float_t* vtx, Float_t*,
   fNSingleCluster = 0; 
   // loading the clusters 
   LoadClusterArrays(clusterTree);
+  // to study residual background (i.e. contribution from TT' to measured efficiency) 
+  if(fReflectClusterAroundZAxisForLayer0) ReflectClusterAroundZAxisForLayer(0);
+  if(fReflectClusterAroundZAxisForLayer1) ReflectClusterAroundZAxisForLayer(1);
+  //
   if(fMC && !pStack) {AliError("You asked for MC infos but AliStack not properly loaded"); return;}
   if(fMC && !tRef) {AliError("You asked for MC infos but TrackRef Tree not properly loaded"); return;}
   Bool_t found;
@@ -1195,7 +1203,8 @@ void AliITSTrackleterSPDEff::PrintAscii(ostream *os)const{
     //   none.
     *os << fPhiWindowL1 <<" "<< fZetaWindowL1 << " " << fPhiWindow <<" "<< fZetaWindow 
         << " " << fOnlyOneTrackletPerC1 << " " << fOnlyOneTrackletPerC2 
-        << " " << fUpdateOncePerEventPlaneEff ;
+        << " " << fUpdateOncePerEventPlaneEff << " " << fReflectClusterAroundZAxisForLayer0
+        << " " << fReflectClusterAroundZAxisForLayer1;
     *os << " " << fMC;
     if(!fMC) {AliInfo("Writing only cuts, no MC info"); return;}
     *os << " " << fUseOnlyPrimaryForPred << " " << fUseOnlySecondaryForPred
@@ -1227,7 +1236,8 @@ void AliITSTrackleterSPDEff::ReadAscii(istream *is){
 
     *is >> fPhiWindowL1 >> fZetaWindowL1 >> fPhiWindow >> fZetaWindow 
         >> fOnlyOneTrackletPerC1 >> fOnlyOneTrackletPerC2  
-        >> fUpdateOncePerEventPlaneEff ;
+        >> fUpdateOncePerEventPlaneEff >> fReflectClusterAroundZAxisForLayer0
+        >> fReflectClusterAroundZAxisForLayer1;
     *is >> fMC;
     if(!fMC) {AliInfo("Reading only cuts, no MC info available");return;}
     *is >> fUseOnlyPrimaryForPred >> fUseOnlySecondaryForPred
@@ -1510,3 +1520,29 @@ for(Int_t iref=0;iref<nref;iref++) { // loop over all the refs of the matching t
 delete tcaRef;
 return ret;
 }
+//_________________________________________________________________________
+void AliITSTrackleterSPDEff::ReflectClusterAroundZAxisForLayer(Int_t ilayer){
+//
+// this method apply a rotation by 180 degree around the Z (beam) axis to all 
+// the RecPoints in a given layer to be used to build tracklets.
+// **************** VERY IMPORTANT:: ***************
+// It must be called just after LoadClusterArrays, since afterwards the datamember
+// fClustersLay1[iC1][0] and fClustersLay1[iC1][1] are redefined using polar coordinate 
+// instead of Cartesian
+//
+if(ilayer<0 || ilayer>1) {AliInfo("Input argument (ilayer) should be either 0 or 1: nothing done"); return ;}
+AliDebug(3,Form("Applying a rotation by 180 degree around z axiz to all clusters on layer %d",ilayer));
+if(ilayer==0) {
+  for (Int_t iC1=0; iC1<fNClustersLay1; iC1++) {
+    fClustersLay1[iC1][0]*=-1;
+    fClustersLay1[iC1][1]*=-1;
+  }
+}
+if(ilayer==1) {
+  for (Int_t iC2=0; iC2<fNClustersLay2; iC2++) {
+    fClustersLay2[iC2][0]*=-1;
+    fClustersLay2[iC2][1]*=-1;
+  }
+}
+return;
+}
index 18d3d95..26e7a46 100644 (file)
@@ -33,6 +33,13 @@ public:
   // Main method to perform the trackleter and the SPD efficiency evaluation
   void Reconstruct(TTree* tree, Float_t* vtx, Float_t* vtxRes, AliStack* pStack=0x0, TTree* tRef=0x0);
 
+  void SetReflectClusterAroundZAxisForLayer(Int_t ilayer,Bool_t b=kTRUE){  // method to study residual background:
+    if(b) AliInfo(Form("All clusters on layer %d will be rotated by 180 deg around z",ilayer)); 
+    if(ilayer==0) fReflectClusterAroundZAxisForLayer0=b;                   // a rotation by 180degree around the Z axis  
+    else if(ilayer==1) fReflectClusterAroundZAxisForLayer1=b;              // (x->-x; y->-y) to all RecPoints on a 
+    else AliInfo("Nothing done: input argument (ilayer) either 0 or 1");   // given layer is applied. In such a way 
+  }                                                                        // you remove all the true tracklets.
+
   void SetPhiWindowL1(Float_t w=0.08) {fPhiWindowL1=w;}  // method to set the cuts in the interpolation
   void SetZetaWindowL1(Float_t w=1.) {fZetaWindowL1=w;}  // phase; use method of the base class for extrap.
   void SetOnlyOneTrackletPerC1(Bool_t b = kTRUE) {fOnlyOneTrackletPerC1 = b;} // as in the base class but 
@@ -130,6 +137,8 @@ protected:
   Bool_t*       fChipUpdatedInEvent;          //  boolean (chip by chip) to flag which chip has been updated its efficiency
                                               //  in that event
   AliITSPlaneEffSPD* fPlaneEffSPD; // pointer to SPD plane efficiency class
+  Bool_t   fReflectClusterAroundZAxisForLayer0;  // if kTRUE, then a 180degree rotation around Z is applied to all 
+  Bool_t   fReflectClusterAroundZAxisForLayer1;  // clusters on that layer (x->-x; y->-y)
   Bool_t   fMC; // Boolean to access Kinematics (only for MC events )
   Bool_t   fUseOnlyPrimaryForPred; // Only for MC: if this is true, build tracklet prediction using only primary particles
   Bool_t   fUseOnlySecondaryForPred; // Only for MC: if this is true build tracklet prediction using only secondary particles
@@ -188,8 +197,10 @@ protected:
   Bool_t SaveHists();
   void BookHistos(); // booking of extra histograms w.r.t. base class
   void DeleteHistos(); //delete histos from memory
+  // Method to apply a rotation by 180degree to all RecPoints (x->-x; y->-y) on a given layer
+  void ReflectClusterAroundZAxisForLayer(Int_t ilayer); // to be used for backgnd estimation on real data 
 
-  ClassDef(AliITSTrackleterSPDEff,2)
+  ClassDef(AliITSTrackleterSPDEff,3)
 };
 // Input and output function for standard C++ input/output (for the cut values and MC statistics).
 ostream &operator<<(ostream &os,const AliITSTrackleterSPDEff &s);