]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG1/AliMCInfo.cxx
Add parameterizations for "uniform" mag field a la former AliMagFC.
[u/mrichter/AliRoot.git] / PWG1 / AliMCInfo.cxx
index 986305bd3ec1f8a2e1bc00e0dd9f092f82828771..73f3a07f864a2677783284f35dcd757ee5c23da0 100644 (file)
@@ -48,6 +48,7 @@ IMPORTANT FOR PROOF FAST PROTOTYPING ANALYSIS
 //ALIROOT includes
 #include "AliTrackReference.h"
 #include "AliMCInfo.h" 
+#include "AliMathBase.h" 
 #endif
 
 //
@@ -82,6 +83,10 @@ AliMCInfo::AliMCInfo():
   fNITSRef(0),                    // ITS references counter
   fNTRDRef(0),                    // TRD references counter
   fNTOFRef(0),                    // TOF references counter
+  fNTPCRefOut(0),                    // tpc references counter
+  fNITSRefOut(0),                    // ITS references counter
+  fNTRDRefOut(0),                    // TRD references counter
+  fNTOFRefOut(0),                    // TOF references counter
   fTPCReferences(0),
   fITSReferences(0),
   fTRDReferences(0),
@@ -95,6 +100,8 @@ AliMCInfo::AliMCInfo():
   fTRDReferences  = new TClonesArray("AliTrackReference",10);
   fTOFReferences  = new TClonesArray("AliTrackReference",10);
   fTRdecay.SetTrack(-1);
+  for (Int_t i=0;i<4;i++) fVDist[i]=0;
+  for (Int_t i=0;i<3;i++) fDecayCoord[i]=0;
   fCharge = 0;
 }
 
@@ -122,6 +129,10 @@ AliMCInfo::AliMCInfo(const AliMCInfo& info):
   fNITSRef(info.fNITSRef),                    // ITS references counter
   fNTRDRef(info.fNTRDRef),                    // TRD references counter
   fNTOFRef(info.fNTOFRef),                    // TOF references counter
+  fNTPCRefOut(info.fNTPCRefOut),                    // tpc references counter
+  fNITSRefOut(info.fNITSRefOut),                    // ITS references counter
+  fNTRDRefOut(info.fNTRDRefOut),                    // TRD references counter
+  fNTOFRefOut(info.fNTOFRefOut),                    // TOF references counter
   fTPCReferences(0),
   fITSReferences(0),
   fTRDReferences(0),
@@ -134,6 +145,9 @@ AliMCInfo::AliMCInfo(const AliMCInfo& info):
   fITSReferences = (TClonesArray*)info.fITSReferences->Clone();
   fTRDReferences = (TClonesArray*)info.fTRDReferences->Clone();
   fTOFReferences = (TClonesArray*)info.fTOFReferences->Clone();
+  for (Int_t i=0;i<4;i++) fVDist[i]=info.fVDist[i];
+  for (Int_t i=0;i<3;i++) fDecayCoord[i]=info.fDecayCoord[i];
+
 }
 
 
@@ -169,6 +183,7 @@ AliMCInfo::~AliMCInfo()
 
 
 
+
 void AliMCInfo::Update()
 {
   //
@@ -214,13 +229,16 @@ void AliMCInfo::Update()
                              fTrackRef.Pz()*fTrackRef.Pz());    
       if (p>0.001){
        Float_t betagama = p /fMass;
-       fPrim = TPCBetheBloch(betagama);
+       fPrim = AliMathBase::BetheBlochAleph(betagama);
       }else fPrim=0;
     }
   }else{
     fMass =0;
     fPrim =0;
   }  
+  
+
+
 }
 
 
@@ -318,31 +336,45 @@ Int_t AliTPCdigitRow::First() const
 }
 
 
-//_____________________________________________________________________________
-Float_t AliMCInfo::TPCBetheBloch(Float_t bg)
-{
+void AliMCInfo::Clear(Option_t* ){
   //
-  // Bethe-Bloch energy loss formula
+  // clear the content
   //
-  const Double_t kp1=0.76176e-1;
-  const Double_t kp2=10.632;
-  const Double_t kp3=0.13279e-4;
-  const Double_t kp4=1.8631;
-  const Double_t kp5=1.9479;
-
-  Double_t dbg = (Double_t) bg;
-
-  Double_t beta = dbg/TMath::Sqrt(1.+dbg*dbg);
-
-  Double_t aa = TMath::Power(beta,kp4);
-  Double_t bb = TMath::Power(1./dbg,kp5);
-
-  bb=TMath::Log(kp3+bb);
-  
-  return ((Float_t)((kp2-aa-bb)*kp1/aa));
+  if (fTPCReferences) fTPCReferences->Clear();
+  if (fITSReferences) fITSReferences->Clear();
+  if (fTRDReferences) fTRDReferences->Clear();
+  if (fTOFReferences) fTOFReferences->Clear();
+  for (Int_t i=0;i<4;i++) fVDist[i]=0;
+  for (Int_t i=0;i<3;i++) fDecayCoord[i]=0;
+  fTRdecay.SetTrack(-1);
+  fCharge = 0;
+  fEventNr=-1;
+  fPrimPart=-1;               // index of primary particle in TreeH
+  fMass=0;                   // mass of the particle
+  fCharge=0;                 // charge of the particle
+  fLabel=0;                  // track label
+  fEventNr=0;                // event number
+  fMCtracks=0;               // indication of how many times the track is retuturned back
+  fPdg=0;                        //pdg code
+  fTPCdecay=0;                  //indicates decay in TPC
+  fRowsWithDigitsInn=0;          // number of rows with digits in the inner sectors
+  fRowsWithDigits=0;             // number of rows with digits in the outer sectors
+  fRowsTrackLength=0;            // last - first row with digit
+  fTPCtrackLength=0;           // distance between first and last track reference
+  fPrim=0;                     // theoretical dedx in tpc according particle momenta and mass
+  fNTPCRef=0;                    // tpc references counter
+  fNITSRef=0;                    // ITS references counter
+  fNTRDRef=0;                    // TRD references counter
+  fNTOFRef=0;                    // TOF references counter
+  //
+  fNTPCRefOut=0;                    // tpc references counter - out
+  fNITSRefOut=0;                    // ITS references counter - out
+  fNTRDRefOut=0;                    // TRD references counter - out
+  fNTOFRefOut=0;                    // TOF references counter - out
 }
 
 
+
 void AliMCInfo::CalcTPCrows(TClonesArray * runArrayTR){
   //
   // Calculates the numebr of the track references for detectors
@@ -355,43 +387,124 @@ void AliMCInfo::CalcTPCrows(TClonesArray * runArrayTR){
   fNITSRef = 0;
   fNTRDRef = 0;
   fNTOFRef = 0;  
-  Float_t tpcminRadius=250;
-  Float_t tpcmaxRadius=80;
-  Float_t dir=0;
-  Int_t nover=0;
-  
-  for (Int_t iTrackRef = 0; iTrackRef < runArrayTR->GetEntriesFast(); iTrackRef++) {
+  fNTPCRefOut = 0;
+  fNITSRefOut = 0;
+  fNTRDRefOut = 0;
+  fNTOFRefOut = 0;  
+  //
+  //
+  Float_t tpcminRadius=TMath::Max(90., fParticle.R());
+  Float_t tpcmaxRadius=TMath::Min(250.,fParticle.R());  
+  Int_t nover=-1;
+
+  if (runArrayTR->GetEntriesFast()>0){  
+    nover=0;
+    AliTrackReference *ref0 = (AliTrackReference*)runArrayTR->At(0);    
+    Float_t dir = ((ref0->X()*ref0->Px()+ref0->Y()*ref0->Py())>0)? 1.:-1.; //inside or outside
     //
-    AliTrackReference *ref = (AliTrackReference*)runArrayTR->At(iTrackRef);  
-    Float_t newdirection = (ref->X()*ref->Px()+ref->Y()*ref->Py()>0)? 1.:-1.; //inside or outside
-    if (dir*newdirection<0.5) {
-      nover++;
-      dir = newdirection;
+    //    
+    for (Int_t iTrackRef = 0; iTrackRef < runArrayTR->GetEntriesFast(); iTrackRef++) {
+      //
+      AliTrackReference *ref = (AliTrackReference*)runArrayTR->At(iTrackRef);  
+      Float_t newdirection = ((ref->X()*ref->Px()+ref->Y()*ref->Py())>0)? 1.:-1.; //inside or outside
+      //
+      //
+      if (dir*newdirection<0.0) {
+       nover++;
+       dir = newdirection;
+      }
+      //
+      if (ref->DetectorId()== AliTrackReference::kTRD){
+       if (nover==0) {
+         tpcmaxRadius =250;
+         fNTRDRefOut++;
+       }
+       fNTRDRef++;
+      }
+      if (ref->DetectorId()== AliTrackReference::kITS){ 
+       if (nover==0) {
+         fNITSRefOut++;
+         tpcminRadius =90;
+       }
+       fNITSRef++;
+      }
+      if (ref->DetectorId()== AliTrackReference::kTOF){
+       fNTOFRef++;
+       if (nover==0) {
+         fNTOFRefOut++;
+         tpcmaxRadius =250;
+       }
+      }
+      //
+      if (ref->DetectorId()== AliTrackReference::kTPC){
+       fNTPCRef++;
+       if (nover==0) {
+         fNTPCRefOut++;
+         fTrackRefOut = (*ref);
+         if (ref->R()>tpcmaxRadius) tpcmaxRadius = ref->R();
+         if (ref->R()<tpcminRadius) tpcminRadius = ref->R();
+       }
+      }
+      if (ref->DetectorId()== AliTrackReference::kDisappeared){
+       if (nover==0 &&TMath::Abs(ref->Z())<250){
+         tpcmaxRadius = TMath::Min(Float_t(250.),ref->R());
+       }
+      }
     }
-    //
-    if (ref->DetectorId()== AliTrackReference::kTRD){
-      tpcmaxRadius =250;
-      fNTRDRef++;
+  }  // if we have track refs
+  fTPCtrackLength = tpcmaxRadius-tpcminRadius;
+  fMCtracks=nover+1;
+}
+
+//
+//
+//
+
+
+
+void AliMCInfo::Update(TParticle * part, TClonesArray * runArrayTR, Double_t pvertex[4], Int_t label){
+  //
+  //
+  //
+  Clear();
+  fLabel=label;
+  fParticle=(*part);
+  AliMCInfo *info = this;
+  fVDist[0]=part->Vx()-pvertex[0];
+  fVDist[1]=part->Vy()-pvertex[1];
+  fVDist[2]=part->Vz()-pvertex[2];
+  fVDist[3]=part->R()-pvertex[3];
+  //
+  //
+  //
+  for (Int_t iTrackRef = 0; iTrackRef < runArrayTR->GetEntriesFast(); iTrackRef++) {
+    AliTrackReference *trackRef = (AliTrackReference*)runArrayTR->At(iTrackRef);         
+    Int_t label = trackRef->GetTrack();
+    if (trackRef->DetectorId()== AliTrackReference::kTPC){     
+      TClonesArray & arr = *(info->fTPCReferences);
+      new (arr[arr.GetEntriesFast()]) AliTrackReference(*trackRef);     
     }
-    if (ref->DetectorId()== AliTrackReference::kITS){
-      fNITSRef++;
-      tpcminRadius =90;
+    if (trackRef->DetectorId()== AliTrackReference::kITS){
+      TClonesArray & arr = *(info->fITSReferences);
+      new (arr[arr.GetEntriesFast()]) AliTrackReference(*trackRef);     
     }
-    if (ref->DetectorId()== AliTrackReference::kITS){
-      fNTOFRef++;
-      tpcmaxRadius =250;
+    if (trackRef->DetectorId()== AliTrackReference::kTRD){
+      TClonesArray & arr = *(info->fTRDReferences);
+      new (arr[arr.GetEntriesFast()]) AliTrackReference(*trackRef);     
     }
-    //
-    if (ref->DetectorId()== AliTrackReference::kTPC){
-      fNTPCRef++;
-      if (ref->R()>tpcmaxRadius) tpcmaxRadius = ref->R();
-      if (ref->R()<tpcminRadius) tpcminRadius = ref->R();
+    if (trackRef->DetectorId()== AliTrackReference::kTOF){
+      TClonesArray & arr = *(info->fTOFReferences);
+      new (arr[arr.GetEntriesFast()]) AliTrackReference(*trackRef);     
     }
-    if (ref->DetectorId()== AliTrackReference::kDisappeared){
-      if (TMath::Abs(ref->Z())<250 && TMath::Abs(ref->R()<250))
-       tpcmaxRadius = ref->R();
+    //
+    // decay case
+    //
+    if (trackRef->DetectorId()== AliTrackReference::kDisappeared){
+      info->fTRdecay = *trackRef;              
     }
   }
-  fTPCtrackLength = tpcmaxRadius-tpcminRadius;
-  fMCtracks=nover;
+  //
+  Update();
+  CalcTPCrows(runArrayTR);
 }
+