Fast EMCAL simulation option added.
authormorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 21 Jul 2005 14:05:26 +0000 (14:05 +0000)
committermorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 21 Jul 2005 14:05:26 +0000 (14:05 +0000)
JETAN/AliJetKineReader.cxx
JETAN/AliJetKineReader.h
JETAN/AliJetKineReaderHeader.h

index 06406a8062b691564952bb1d10ef8371f0773341..2b96d2c301aac2429613e8349ef705df4b9302a9 100644 (file)
@@ -89,11 +89,13 @@ void AliJetKineReader::FillMomentumArray(Int_t event)
     Int_t goodTrack = 0;
     // Clear array
     ClearArray();
-
+    // Get event from runloader
     fRunLoader->GetEvent(event);
+    // Get the stack
     AliStack* stack = fRunLoader->Stack();
+    // Number of primaries
     Int_t nt = stack->GetNprimary();
-    // Get cuts set by user
+    // Get cuts set by user and header
     Double_t ptMin = ((AliJetKineReaderHeader*) fReaderHeader)->GetPtCut();
     fAliHeader = fRunLoader->GetHeader();
         
@@ -105,36 +107,64 @@ void AliJetKineReader::FillMomentumArray(Int_t event)
        Int_t   pdg     = TMath::Abs(part->GetPdgCode());
        Float_t pt      = part->Pt(); 
        
+       // Skip non-final state particles, neutrinos and particles with pt < pt_min 
+       
        if (
            (status != 1)            
-           || (pdg == 12 || pdg == 14) 
+           || (pdg == 12 || pdg == 14 || pdg == 16
            || (pt < ptMin)             
            ) continue; 
 
+
        Float_t p       = part->P();
+       Float_t p0      = p;
        Float_t eta     = part->Eta();
        Float_t phi     = part->Phi();
 
+        // Fast simulation of TPC if requested
        if (((AliJetKineReaderHeader*)fReaderHeader)->FastSimTPC()) {
            // Charged particles only
            Float_t charge = TDatabasePDG::Instance()->GetParticle(pdg)->Charge();
-           if (charge == 0)              continue;
+           if (charge == 0)               continue;
            // Simulate efficiency
-           if (!Efficiency(p, eta, phi)) continue;
+           if (!Efficiency(p0, eta, phi)) continue;
            // Simulate resolution
-           SmearMomentum(3, p);
-       }
+           p = SmearMomentum(4, p0);
+       } // Fast TPC
+       
+        // Fast simulation of EMCAL if requested
+       if (((AliJetKineReaderHeader*)fReaderHeader)->FastSimEMCAL()) {
+           Float_t charge = TDatabasePDG::Instance()->GetParticle(pdg)->Charge();
+           // Charged particles
+           if (charge != 0) {
+               // Simulate efficiency
+               if (!Efficiency(p0, eta, phi)) continue;
+               // Simulate resolution
+               p = SmearMomentum(4, p0);
+           } // charged
+           // Neutral particles
+           // Exclude K0L, n, nbar
+           if (pdg == kNeutron || pdg == kK0Long) continue;
+       } // Fast EMCAL
        
        fMass = part->GetCalcMass();
        fPdgC = part->GetPdgCode();
        // Fill momentum array
+       Float_t r  = p/p0;
+//             printf("smeared %13.3f %13.3f %13.3f\n", p0, p, r);
+       
+       Float_t px = r * part->Px(); 
+       Float_t py = r * part->Py(); 
+       Float_t pz = r * part->Pz();
+       Float_t m  = part->GetMass();
+       Float_t e  = TMath::Sqrt(px * px + py * py + pz * pz + m * m);
        
        new ((*fMomentumArray)[goodTrack]) 
-           TLorentzVector(part->Px(),part->Py(),part->Pz(), part->Energy());
+           TLorentzVector(px, py, pz, e);
        goodTrack++;
   }
     fSignalFlag.Set(goodTrack,flag);
-    printf("\nNumber of good tracks %d \n", goodTrack);
+    printf("\nNumber of good tracks in event %d= %d \n",event,goodTrack);
 }
 
 
@@ -162,7 +192,7 @@ Float_t AliJetKineReader::SmearMomentum(Int_t ind, Float_t p)
     if (ind == 3) b = 0.12;    
     if (ind == 4) b = 0.08;    
     
-    Float_t sigma = p*TMath::Sqrt(a*a+b*b*p*p)*0.01;
+    Float_t sigma =  p * TMath::Sqrt(a * a + b * b * p * p)*0.01;
     pSmeared = p + gRandom->Gaus(0., sigma);
     return pSmeared;
 }
index f543ca8bd7f133843117b9a610a7e30e4e6136c0..ee26dbbbf38d9a60db826dfe969a6271a3448a30 100644 (file)
@@ -18,9 +18,6 @@ class AliJetKineReader : public AliJetReader
   AliJetKineReader();
   virtual ~AliJetKineReader();
 
-  Bool_t Efficiency(Float_t p, Float_t /*eta*/, Float_t phi);
-  Float_t SmearMomentum(Int_t ind, Float_t p);
-
   // Getters
   Float_t GetParticleMass() const {return fMass;}        // returns mass of the Track
   Int_t   GetParticlePdgCode() const {return fPdgC;}     // returns Pdg code
@@ -28,6 +25,9 @@ class AliJetKineReader : public AliJetReader
   // Setters
   void FillMomentumArray(Int_t event);
   void OpenInputFiles();
+  // Fast Simulation
+  Float_t SmearMomentum(Int_t ind, Float_t p);
+  Bool_t  Efficiency(Float_t pt, Float_t eta, Float_t phi);
 
  protected:
   AliRunLoader           *fRunLoader; // Pointer to the run loader
index 11ad678d2a1005eed4c2a0392925c54c98307c4e..49ef2e161e172bb65db54aae14c16124ca6c973f 100644 (file)
@@ -19,14 +19,17 @@ class AliJetKineReaderHeader : public AliJetReaderHeader
   
   // Setters
   void SetFastSimTPC(Bool_t flag = kTRUE) {fFastSimTPC = flag;}
+  void SetFastSimEMCAL(Bool_t flag = kTRUE) {fFastSimEMCAL = flag;}
   virtual void SetPtCut(Float_t par = 2.0) {fPtCut = par;}
   // Getter
   Bool_t  FastSimTPC() const  {return fFastSimTPC;}
+  Bool_t  FastSimEMCAL() const  {return fFastSimEMCAL;}
   Float_t GetPtCut()   const  {return fPtCut;}
          
  protected:
   //parameters set by user
   Bool_t fFastSimTPC;
+  Bool_t fFastSimEMCAL;
   Float_t fPtCut;
   ClassDef(AliJetKineReaderHeader,1);
 };