* 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.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"
AliITSsimulationFastPointsV0::AliITSsimulationFastPointsV0()
{
+ // default constructor
+ fSx = 0;
+ fSz = 0;
+}
+AliITSsimulationFastPointsV0::AliITSsimulationFastPointsV0(const char *dataType){
//constructor
+ Info("AliITSsimulationFastPointsV0","Standard constructor %s",dataType);
fSx = new AliITSstatistics(2);
fSz = new AliITSstatistics(2);
}
+//______________________________________________________________________
+AliITSsimulationFastPointsV0::AliITSsimulationFastPointsV0(const AliITSsimulationFastPointsV0 &/*rec*/):AliITSsimulation(/*rec*/){
+ // Copy constructor.
+
+ Error("Copy constructor","Copy constructor not allowed");
+
+}
+//______________________________________________________________________
+AliITSsimulationFastPointsV0& AliITSsimulationFastPointsV0::operator=(const AliITSsimulationFastPointsV0& /*source*/){
+ // Assignment operator. This is a function which is not allowed to be
+ // done.
+ Error("operator=","Assignment operator not allowed\n");
+ 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
// }
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);
+
+ AliITSgeom* gm = mod->GetITS()->GetITSgeom();
+
+ AliITSRecPoint rpSPD(gm);
+
+ rpSPD.SetLabel(trackNumber,0);
+ rpSPD.SetLabel(-3,1);
+ rpSPD.SetLabel(-3,2);
+ rpSPD.SetXZ(mod->GetIndex(),fSx->GetMean(),fSz->GetMean());
+ rpSPD.SetdEdX(e);
rpSPD.SetQ(1.0);
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);
+ rpSPD.SetSigmaDetLocX2(a1);
a2 = fSz->GetRMS(); a2 *= a2; a2 += kRMSz*kRMSz;
// if(a1>1.E5) printf(" sigmaZ2= %e\n",a2);
rpSPD.SetSigmaZ2(a2);
-
- (mod->GetITS())->AddRecPoint(rpSPD);
+ rpSPD.SetDetectorIndex(mod->GetIndex());
+ rpSPD.SetLayer(mod->GetLayer());
+ //(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;
+ AliITSgeom* gm = mod->GetITS()->GetITSgeom();
+
+ AliITSRecPoint rpSDD(gm);
- rpSDD.fTracks[0]=trackNumber;
- rpSDD.fTracks[1]=-3;
- rpSDD.fTracks[2]=-3;
- rpSDD.SetX(fSx->GetMean());
- rpSDD.SetZ(fSz->GetMean());
+ rpSDD.SetLabel(trackNumber,0);
+ rpSDD.SetLabel(-3,1);
+ rpSDD.SetLabel(-3,2);
+ rpSDD.SetXZ(mod->GetIndex(),fSx->GetMean(),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 ",
// mod->GetLayer(),trackNumber,e,a1);
- rpSDD.SetSigmaX2(a1);
+ rpSDD.SetSigmaDetLocX2(a1);
a2 = fSz->GetRMS(); a2 *= a2; a2 += kRMSz*kRMSz;
// if(a1>1.E5) printf(" sigmaZ2= %e\n",a2);
rpSDD.SetSigmaZ2(a2);
+ rpSDD.SetDetectorIndex(mod->GetIndex());
+ rpSDD.SetLayer(mod->GetLayer());
+ 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());
+ AliITSgeom* gm = mod->GetITS()->GetITSgeom();
+
+ AliITSRecPoint rpSSD(gm);
+
+ rpSSD.SetLabel(trackNumber,0);
+ rpSSD.SetLabel(-3,1);
+ rpSSD.SetLabel(-3,2);
+ rpSSD.SetXZ(mod->GetIndex(),fSx->GetMean(),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 ",
// mod->GetLayer(),trackNumber,e,a1);
- rpSSD.SetSigmaX2(a1);
+ rpSSD.SetSigmaDetLocX2(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);
+ rpSSD.SetDetectorIndex(mod->GetIndex());
+ rpSSD.SetLayer(mod->GetLayer());
+ new (pt[fNrecp]) AliITSRecPoint(rpSSD);
+ fNrecp++;
+
- (mod->GetITS())->AddRecPoint(rpSSD);
}
//_______________________________________________________________________