* 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. *
- **************************************************************************/
+ ***********************************************************************/
/* $Id$ */
-
-#include <TParticle.h>
-#include <TRandom.h>
+/////////////////////////////////////////////////////////
+// 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
- fSx = 0;
- fSz = 0;
}
-AliITSsimulationFastPointsV0::AliITSsimulationFastPointsV0(const char *dataType){
+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()
}
//-------------------------------------------------------------
-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
// }
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();
}
//_______________________________________________________________________
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()};
- (mod->GetITS())->AddRecPoint(rpSPD);
+ AliITSRecPoint rpSPD(lab,hit,info,kTRUE);
+ rpSPD.SetdEdX(e);
+
+ 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);
}
//_______________________________________________________________________