]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSsimulationFastPointsV0.cxx
Four overlaps fixed (M. Sitta)
[u/mrichter/AliRoot.git] / ITS / AliITSsimulationFastPointsV0.cxx
index 4d484cb78a94615a44372442f02d5895cf47bf09..517a66c839450c0e5c48f8f61cb4cfc9c32ed0ef 100644 (file)
  * appear in the supporting documentation. The authors make no claims     *
  * about the suitability of this software for any purpose. It is          *
  * provided "as is" without express or implied warranty.                  *
- **************************************************************************/
+ ***********************************************************************/
 
-/*
-$Log$
-Revision 1.1.2.4  2000/10/02 16:03:20  barbera
-Forward declarations added
-
-Revision 1.3  2000/09/22 12:44:34  nilsen
-Default track number set to -3 and not 0.
-
-Revision 1.2  2000/07/10 16:07:19  fca
-Release version of ITS code
-
-*/
-
-#include <TParticle.h>
-#include <TRandom.h>
+/* $Id$ */
+/////////////////////////////////////////////////////////
+//  fast simulation V0                                 //
+//                                                     //
+//                                                     //
+/////////////////////////////////////////////////////////
 
 #include "AliITS.h"
 #include "AliITShit.h"
 #include "AliITSRecPoint.h"
 #include "AliITSmodule.h"
-#include "AliITSgeom.h"
 #include "AliITSsimulationFastPointsV0.h"
 #include "AliITSstatistics.h"
 
 ClassImp(AliITSsimulationFastPointsV0)
 
-AliITSsimulationFastPointsV0::AliITSsimulationFastPointsV0()
-{
+AliITSsimulationFastPointsV0::AliITSsimulationFastPointsV0():
+fNrecp(0),
+fSx(0),
+fSz(0){
+  // default constructor
+}
+AliITSsimulationFastPointsV0::AliITSsimulationFastPointsV0(const char *dataType):
+fNrecp(0),
+fSx(0),
+fSz(0){
   //constructor
+  Info("AliITSsimulationFastPointsV0","Standard constructor %s",dataType);
   fSx = new AliITSstatistics(2);
   fSz = new AliITSstatistics(2);
 }
+//______________________________________________________________________
+AliITSsimulationFastPointsV0::AliITSsimulationFastPointsV0(const AliITSsimulationFastPointsV0 & rec):AliITSsimulation(rec),
+fNrecp(rec.fNrecp),
+fSx(rec.fSx),
+fSz(rec.fSz){
+    // Copy constructor. 
+
+}
+//______________________________________________________________________
+AliITSsimulationFastPointsV0& AliITSsimulationFastPointsV0::operator=(const AliITSsimulationFastPointsV0&  /*source*/){
+    // Assignment operator
+  Error("operator=","Assignment operator not allowed");
+  return *this;
+}
 
 //----------------------------------------------------------
 AliITSsimulationFastPointsV0::~AliITSsimulationFastPointsV0()
 {
   //destructor
-  delete fSx;
-  delete fSz;
+  if(fSx) delete fSx;
+  if(fSz) delete fSz;
 
 }
 
 //-------------------------------------------------------------
-void AliITSsimulationFastPointsV0::CreateFastRecPoints(AliITSmodule *mod,Int_t module,TRandom *rndm){
+void AliITSsimulationFastPointsV0::CreateFastRecPoints(AliITSmodule *mod,Int_t module,TRandom *rndm, TClonesArray* recp) {
   // Fast points simulator for all of the ITS.
+
   Int_t   nhit,h,trk,ifirst;
   Float_t x,y,z,t,e;// local coordinate (cm) and time of flight, and dedx.
   Float_t x1,y1,z1;
   AliITShit *hit;
 
+  if(rndm!=0) module=0; // fix unsued parameter warnings.
   fSx->Reset(); // Start out with things clearly zeroed
   fSz->Reset(); // Start out with things clearly zeroed
   e = 0.; // Start out with things clearly zeroed
@@ -89,13 +104,13 @@ void AliITSsimulationFastPointsV0::CreateFastRecPoints(AliITSmodule *mod,Int_t m
       //      }
       switch (mod->GetLayer()){
       case 1: case 2:  // SPDs
-       AddSPD(e,mod,trk);
+       AddSPD(e,mod,trk,recp);
        break;
       case 3: case 4:  // SDDs
-       AddSDD(e,mod,trk);
+       AddSDD(e,mod,trk,recp);
        break;
       case 5: case 6:  // SSDs
-       AddSSD(e,mod,trk);
+       AddSSD(e,mod,trk,recp);
        break;
       } // end switch
       fSx->Reset();
@@ -108,86 +123,81 @@ void AliITSsimulationFastPointsV0::CreateFastRecPoints(AliITSmodule *mod,Int_t m
 }
 //_______________________________________________________________________
 void AliITSsimulationFastPointsV0::AddSPD(Float_t &e,
-                                        AliITSmodule *mod,Int_t trackNumber){
+                                         AliITSmodule* mod,Int_t trackNumber,TClonesArray* recp){
+  //
+  TClonesArray &pt=*recp;
   const Float_t kmicronTocm = 1.0e-4;
   //  const Float_t kdEdXtoQ = ;
   const Float_t kRMSx = 12.0*kmicronTocm; // microns->cm ITS TDR Table 1.3
   const Float_t kRMSz = 70.0*kmicronTocm; // microns->cm ITS TDR Table 1.3
-  Float_t a1,a2; // general float.
-  AliITSRecPoint rpSPD;
-
-  rpSPD.fTracks[0]=trackNumber;
-  rpSPD.fTracks[1]=-3;
-  rpSPD.fTracks[2]=-3;
-  rpSPD.SetX(fSx->GetMean());
-  rpSPD.SetZ(fSz->GetMean());
-  rpSPD.SetdEdX(0.0);
-  rpSPD.SetQ(1.0);
-  a1 = fSx->GetRMS(); a1 *= a1; a1 += kRMSx*kRMSx;
+  
+  Int_t lab[4] = {trackNumber,-3,-3,mod->GetIndex()};
+  Float_t a1 = fSx->GetRMS(); a1 *= a1; a1 += kRMSx*kRMSx;
   //  if(a1>1.E5) printf("addSPD: layer=%d track #%d dedx=%e sigmaX2= %e ",
   //               mod->GetLayer(),trackNumber,e,a1);
-  rpSPD.SetSigmaX2(a1);
-  a2 = fSz->GetRMS(); a2 *= a2; a2 += kRMSz*kRMSz;
+  Float_t a2 = fSz->GetRMS(); a2 *= a2; a2 += kRMSz*kRMSz;
   //  if(a1>1.E5) printf(" sigmaZ2= %e\n",a2);
-  rpSPD.SetSigmaZ2(a2);
+  Float_t hit[5] = {fSx->GetMean(),fSz->GetMean(),a1,a2,1.0};
+  Int_t info[3] = {0,0,mod->GetLayer()};
+
+  AliITSRecPoint rpSPD(lab,hit,info,kTRUE);
+  rpSPD.SetdEdX(e);
 
-  (mod->GetITS())->AddRecPoint(rpSPD);
+  new (pt[fNrecp]) AliITSRecPoint(rpSPD);
+  fNrecp++;
 }
 //_______________________________________________________________________
 void AliITSsimulationFastPointsV0::AddSDD(Float_t &e,
-                                        AliITSmodule *mod,Int_t trackNumber){
-
+                                         AliITSmodule* mod,Int_t trackNumber,TClonesArray* recp){
+  //
+  TClonesArray &pt=*recp;
   const Float_t kmicronTocm = 1.0e-4;
   const Float_t kdEdXtoQ = 2.778e+8; 
   const Float_t kRMSx = 38.0*kmicronTocm; // microns->cm ITS TDR Table 1.3
   const Float_t kRMSz = 28.0*kmicronTocm; // microns->cm ITS TDR Table 1.3
-  Float_t a1,a2; // general float.
-  AliITSRecPoint rpSDD;
-
-  rpSDD.fTracks[0]=trackNumber;
-  rpSDD.fTracks[1]=-3;
-  rpSDD.fTracks[2]=-3;
-  rpSDD.SetX(fSx->GetMean());
-  rpSDD.SetZ(fSz->GetMean());
-  rpSDD.SetdEdX(e);
-  rpSDD.SetQ(kdEdXtoQ*e);
-  a1 = fSx->GetRMS(); a1 *= a1; a1 += kRMSx*kRMSx;
-  //  if(a1>1.E5) printf("addSDD: layer=%d track #%d dedx=%e sigmaX2= %e ",
+
+  Int_t lab[4] = {trackNumber,-3,-3,mod->GetIndex()};
+  Float_t a1 = fSx->GetRMS(); a1 *= a1; a1 += kRMSx*kRMSx;
+  //  if(a1>1.E5) printf("addSPD: layer=%d track #%d dedx=%e sigmaX2= %e ",
   //               mod->GetLayer(),trackNumber,e,a1);
-  rpSDD.SetSigmaX2(a1);
-  a2 = fSz->GetRMS(); a2 *= a2; a2 += kRMSz*kRMSz;
+  Float_t a2 = fSz->GetRMS(); a2 *= a2; a2 += kRMSz*kRMSz;
   //  if(a1>1.E5) printf(" sigmaZ2= %e\n",a2);
-  rpSDD.SetSigmaZ2(a2);
+  Float_t hit[5] = {fSx->GetMean(),fSz->GetMean(),a1,a2,kdEdXtoQ*e};
+  Int_t info[3] = {0,0,mod->GetLayer()};
+
+  AliITSRecPoint rpSDD(lab,hit,info,kTRUE);
+  rpSDD.SetdEdX(e);
+
+  new (pt[fNrecp]) AliITSRecPoint(rpSDD);
+  fNrecp++;
 
-  (mod->GetITS())->AddRecPoint(rpSDD);
 }
 //_______________________________________________________________________
 void AliITSsimulationFastPointsV0::AddSSD(Float_t &e,
-                                        AliITSmodule *mod,Int_t trackNumber){
-
+                                         AliITSmodule* mod,Int_t trackNumber,TClonesArray* recp){
+  // 
+  TClonesArray &pt=*recp;
   const Float_t kmicronTocm = 1.0e-4;
   const Float_t kdEdXtoQ = 2.778e+8;
   const Float_t kRMSx = 20.0*kmicronTocm;  // microns->cm ITS TDR Table 1.3
   const Float_t kRMSz = 830.0*kmicronTocm; // microns->cm ITS TDR Table 1.3
-  Float_t a1,a2; // general float.
-  AliITSRecPoint rpSSD;
-
-  rpSSD.fTracks[0]=trackNumber;
-  rpSSD.fTracks[1]=-3;
-  rpSSD.fTracks[2]=-3;
-  rpSSD.SetX(fSx->GetMean());
-  rpSSD.SetZ(fSz->GetMean());
-  rpSSD.SetdEdX(e);
-  rpSSD.SetQ(kdEdXtoQ*e);
-  a1 = fSx->GetRMS(); a1 *= a1; a1 += kRMSx*kRMSx;
-  //  if(a1>1.E5) printf("addSSD: layer=%d track #%d dedx=%e sigmaX2= %e ",
+
+  Int_t lab[4] = {trackNumber,-3,-3,mod->GetIndex()};
+  Float_t a1 = fSx->GetRMS(); a1 *= a1; a1 += kRMSx*kRMSx;
+  //  if(a1>1.E5) printf("addSPD: layer=%d track #%d dedx=%e sigmaX2= %e ",
   //               mod->GetLayer(),trackNumber,e,a1);
-  rpSSD.SetSigmaX2(a1);
-  a2 = fSz->GetRMS(); a2 *= a2; a2 += kRMSz*kRMSz;
-  //  if(a1>1.E5) printf(" sigmaZ2= %e RMSx=%e RMSz=%e\n",a2,fSx->GetRMS(),fSz->GetRMS());
-  rpSSD.SetSigmaZ2(a2);
+  Float_t a2 = fSz->GetRMS(); a2 *= a2; a2 += kRMSz*kRMSz;
+  //  if(a1>1.E5) printf(" sigmaZ2= %e\n",a2);
+  Float_t hit[5] = {fSx->GetMean(),fSz->GetMean(),a1,a2,kdEdXtoQ*e};
+  Int_t info[3] = {0,0,mod->GetLayer()};
+
+  AliITSRecPoint rpSSD(lab,hit,info,kTRUE);
+  rpSSD.SetdEdX(e);
+
+  new (pt[fNrecp]) AliITSRecPoint(rpSSD);
+  fNrecp++;
+
 
-  (mod->GetITS())->AddRecPoint(rpSSD);
 }
 //_______________________________________________________________________