X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ITS%2FAliITSvSPD02.cxx;h=7945dd5c43c7237825ff6ddce72f0ef2c7719a66;hb=75fb37cce68c2073863a55b2919d636fa541b901;hp=53f35ab8cfcb3fd501f3a6de13e11d8e1460df86;hpb=a421d86985814cdc92931bf8f9b160115a5dbc03;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/AliITSvSPD02.cxx b/ITS/AliITSvSPD02.cxx index 53f35ab8cfc..7945dd5c43c 100644 --- a/ITS/AliITSvSPD02.cxx +++ b/ITS/AliITSvSPD02.cxx @@ -15,36 +15,30 @@ /* $Id$ */ -#include -#include #include #include #include #include #include +#include +#include #include "AliRun.h" #include "AliMagF.h" -#include "AliITSGeant3Geometry.h" #include "AliTrackReference.h" + #include "AliITShit.h" #include "AliITS.h" #include "AliITSvSPD02.h" #include "AliITSgeom.h" #include "AliITSgeomSPD.h" -#include "AliITSgeomSSD.h" -#include "AliITSDetType.h" -#include "AliITSresponseSPDdubna.h" -#include "AliITSresponseSDD.h" -#include "AliITSresponseSSD.h" +#include "AliITSDetTypeSim.h" +#include "AliITSCalibrationSPD.h" #include "AliITSsegmentationSPD.h" -#include "AliITSsegmentationSDD.h" -#include "AliITSsegmentationSSD.h" -#include "AliITSsimulationSPDdubna.h" -#include "AliITSsimulationSDD.h" -#include "AliITSsimulationSSD.h" +#include "AliITSsimulationSPD.h" #include "AliMC.h" + /////////////////////////////////////////////////////////////////////// // Step manager and // geometry class @@ -56,7 +50,20 @@ ClassImp(AliITSvSPD02) //______________________________________________________________________ -AliITSvSPD02::AliITSvSPD02() { +AliITSvSPD02::AliITSvSPD02(): +AliITS(), +fGeomDetOut(kFALSE), +fGeomDetIn(kFALSE), +fMajorVersion(1), +fMinorVersion(2), +fGeomNumber(2002), +fEuclidGeomDet(), +fRead(), +fWrite(), +fDet1(300.0), +fDet2(300.0), +fChip1(300.0), +fChip2(300.0){ //////////////////////////////////////////////////////////////////////// // Standard default constructor for the ITS SPD test beam 2002 version 1. // Inputs: @@ -68,21 +75,24 @@ AliITSvSPD02::AliITSvSPD02() { //////////////////////////////////////////////////////////////////////// Int_t i; - fIdN = 0; - fIdName = 0; - fIdSens = 0; - fEuclidOut = kFALSE; // Don't write Euclide file - fGeomDetOut = kFALSE; // Don't write .det file - fGeomDetIn = kFALSE; // Don't Read .det file - fMajorVersion = IsVersion(); - fMinorVersion = -1; - fGeomNumber = 2002; // default value for(i=0;i<60;i++) fRead[i] = '\0'; for(i=0;i<60;i++) fWrite[i] = '\0'; for(i=0;i<60;i++) fEuclidGeomDet[i] = '\0'; } //______________________________________________________________________ -AliITSvSPD02::AliITSvSPD02(const char *title,Int_t gn) : AliITS("ITS", title){ +AliITSvSPD02::AliITSvSPD02(const char *title,Int_t gn) : AliITS("ITS", title), +fGeomDetOut(kFALSE), +fGeomDetIn(kFALSE), +fMajorVersion(1), +fMinorVersion(2), +fGeomNumber(2002), +fEuclidGeomDet(), +fRead(), +fWrite(), +fDet1(300.0), +fDet2(300.0), +fChip1(300.0), +fChip2(300.0){ //////////////////////////////////////////////////////////////////////// // Standard constructor for the ITS SPD testbeam 2002 version 1. // Inputs: @@ -102,11 +112,6 @@ AliITSvSPD02::AliITSvSPD02(const char *title,Int_t gn) : AliITS("ITS", title){ fIdName[1] = "ITST"; fIdSens = new Int_t[fIdN]; for(i=0;icd(); // set ourselve into ITSV subvolume of aALIC // SPD part of telescope (MiniBuS) @@ -296,36 +270,36 @@ void AliITSvSPD02::BuildGeometry2002(){ 0.0,iIDETshape->GetDy()-spdY,0.0,0,0); TNode *iIPC0[5]; for(i=0;i<5;i++) { //place readout chips on the back of SPD chip under test - sprintf(name,"IPC0%d",i); - sprintf(title,"Readout chip #%d",i+1); - j = i-2; - iIPC0[i] = new TNode(name,title,iIPC0shape, - 0.0,spdchipY-iIDETshape->GetDy(), - j*2.0*spdchipZ+j*0.25*(spdZ-5.*spdchipZ),0,0); + sprintf(name,"IPC0%d",i); + sprintf(title,"Readout chip #%d",i+1); + j = i-2; + iIPC0[i] = new TNode(name,title,iIPC0shape, + 0.0,spdchipY-iIDETshape->GetDy(), + j*2.0*spdchipZ+j*0.25*(spdZ-5.*spdchipZ),0,0); } // end for i iITS0->cd(); TNode *iITST = new TNode("ITST","SPD sensitive volume",iITSTshape, - 0.0,0.0,0.0,0,0); + 0.0,0.0,0.0,0,0); for(Int_t i=0;i<4;i++){ - iITSV->cd(); - sprintf(name,"ITEL%d",i); - sprintf(title,"Test beam telescope element #%d",i+1); - iITEL[i] = new TNode(name,title,iITELshape,px,py,pz[i],r0,0); - iITEL[i]->cd(); - iICMB[i] = new TNode("ICMB","Chip MiniBus",iICMBshape, - 0.0,-iITELshape->GetDy()+detMiniBusY,0.0,0,0); - iIMB0[i] = new TNode("IMB0","Chip MiniBus",iIMB0shape, - 0.0, iITELshape->GetDy()-detMiniBusY,0.0,0,0); - iIMB0[i]->cd(); - iIMBS[i] = new TNode("IMBS","IMBS",iIMBSshape,0.0,0.0,0.0,0,0); - // place IMBS inside IMB0 with no translation and unit rotation matrix. + iITSV->cd(); + sprintf(name,"ITEL%d",i); + sprintf(title,"Test beam telescope element #%d",i+1); + iITEL[i] = new TNode(name,title,iITELshape,px,py,pz[i],r0,0); + iITEL[i]->cd(); + iICMB[i] = new TNode("ICMB","Chip MiniBus",iICMBshape, + 0.0,-iITELshape->GetDy()+detMiniBusY,0.0,0,0); + iIMB0[i] = new TNode("IMB0","Chip MiniBus",iIMB0shape, + 0.0, iITELshape->GetDy()-detMiniBusY,0.0,0,0); + iIMB0[i]->cd(); + iIMBS[i] = new TNode("IMBS","IMBS",iIMBSshape,0.0,0.0,0.0,0,0); + // place IMBS inside IMB0 with no translation and unit rotation matrix. } // end for i aALIC->cd(); iITST->SetLineColor(kYellow); fNodes->Add(iITST); for(i=0;i<4;i++){ - iIMBS[i]->SetLineColor(kGreen); - fNodes->Add(iIMBS[i]); + iIMBS[i]->SetLineColor(kGreen); + fNodes->Add(iIMBS[i]); } // end for i } //______________________________________________________________________ @@ -388,6 +362,7 @@ void AliITSvSPD02::CreateGeometry2002(){ Float_t dchipMiniBus=750.0E-4,dchiptest=300.0E-4; Float_t yposition= 0.0; + if(gMC==0) return; // Define Rotation-reflextion Matrixes needed // 0 is the unit matrix AliMatrix(idrotm[0], 90.0,0.0, 0.0,0.0, 90.0,270.0); @@ -480,7 +455,7 @@ void AliITSvSPD02::CreateMaterials(){ // Monte Carlo simulations for the geometries AliITSv1, AliITSv3, // AliITSvSPD02. // In general it is automatically replaced by - // the CreatMaterials routine defined in AliITSv?. Should the function + // the CreateMaterials routine defined in AliITSv?. Should the function // CreateMaterials not exist for the geometry version you are using this // one is used. See the definition found in AliITSv5 or the other routine // for a complete definition. @@ -511,7 +486,7 @@ void AliITSvSPD02::CreateMaterials2002(){ // Monte Carlo simulations for the geometries AliITSv1, AliITSv3, // AliITSvSPD02. // In general it is automatically replaced by - // the CreatMaterials routine defined in AliITSv?. Should the function + // the CreateMaterials routine defined in AliITSv?. Should the function // CreateMaterials not exist for the geometry version you are using this // one is used. See the definition found in AliITSv5 or the other routine // for a complete definition. @@ -538,14 +513,38 @@ void AliITSvSPD02::CreateMaterials2002(){ Float_t fieldm = gAlice->Field()->Max(); AliMaterial(1,"AIR$",0.14610E+02,0.73000E+01,0.12050E-02, - 0.30423E+05,0.99900E+03); + 0.30423E+05,0.99900E+03); AliMedium(1,"AIR$",1,0,ifield,fieldm,tmaxfdAir,stemaxAir,deemaxAir, - epsilAir,stminAir); + epsilAir,stminAir); AliMaterial(2,"SI$",0.28086E+02,0.14000E+02,0.23300E+01, - 0.93600E+01,0.99900E+03); + 0.93600E+01,0.99900E+03); AliMedium(2,"SI$",2,0,ifield,fieldm,tmaxfdSi,stemaxSi,deemaxSi, - epsilSi,stminSi); + epsilSi,stminSi); +} +//______________________________________________________________________ +Int_t AliITSvSPD02::DecodeDetector(Int_t id,Int_t cpy,Int_t &lay,Int_t &lad, + Int_t &det)const{ + // Based on the geometry tree defined in Geant 3.21, this + // routine initilizes the Class AliITSgeom from the Geant 3.21 ITS geometry + // sturture. + // Inputs: + // Int_t id Detector volume id + // Int_t cpy Detector copy number + // Outputs: + // Int_t lay layer number + // Int_t lad ladder number + // Int_t det detector number + // Return: + // The module number + Int_t mod; + + lad = det = 1; + lay = cpy; + if(cpy>2 && id==fIdSens[0]) lay = cpy + 1; + if(id==fIdSens[1]) lay = 3; + mod = lay - 1; + return mod; } //______________________________________________________________________ void AliITSvSPD02::InitAliITSgeom(){ @@ -558,65 +557,39 @@ void AliITSvSPD02::InitAliITSgeom(){ // none. // Return: // none. - if(strcmp(gMC->GetName(),"TGeant3")) { - Error("InitAliITSgeom", - "Wrong Monte Carlo. InitAliITSgeom uses TGeant3 calls"); - return; - } // end if - cout << "Reading Geometry transformation directly from Geant 3." << endl; - const Int_t kltypess = 2; - const Int_t knlayers = 5; - const Int_t kndeep = 5; - Int_t itsGeomTreeNames[kltypess][kndeep],lnam[20],lnum[20]; - Int_t nlad[knlayers],ndet[knlayers]; - Double_t t[3],r[10]; - Float_t par[20],att[20]; - Int_t npar,natt,idshape,imat,imed; - AliITSGeant3Geometry *ig = new AliITSGeant3Geometry(); - Int_t mod,typ,lay,lad,det,cpy,i,j,k; - Char_t names[kltypess][kndeep][4]; - Int_t itsGeomTreeCopys[kltypess][kndeep]; - const char *namesA[kltypess][kndeep] = { - {"ALIC","ITSV","ITEL","IMB0","IMBS"}, // lay=1 - {"ALIC","ITSV","IDET","ITS0","ITST"}};// Test SPD - Int_t itsGeomTreeCopysA[kltypess][kndeep]= {{1,1,4,1,1},// lay=1 - {1,1,1,1,1}};//lay=2 TestSPD - for(i=0;iStringToInt(names[i][j]); - mod = 5; - if(fITSgeom!=0) delete fITSgeom; - nlad[0]=1;nlad[1]=1;nlad[2]=1;nlad[3]=1;nlad[4]=1; - ndet[0]=1;ndet[1]=1;ndet[2]=1;ndet[3]=1;ndet[4]=1; - fITSgeom = new AliITSgeom(0,knlayers,nlad,ndet,mod); - for(typ=1;typ<=kltypess;typ++){ - for(j=0;j2 && typ==1) lay = cpy +1; - if(typ==2) lay = 3; - mod = lay-1; - ig->GetGeometry(kndeep,lnam,lnum,t,r,idshape,npar,natt,par,att, - imat,imed); - fITSgeom->CreatMatrix(mod,lay,lad,det,kSPD,t,r); - if(!(fITSgeom->IsShapeDefined((Int_t)kSPD))) - fITSgeom->ReSetShape(kSPD, - new AliITSgeomSPD425Short(npar,par)); - } // end for cpy - } // end for typ + const Int_t kltypess=2; + const Int_t knlayers=5; + const TString knames[kltypess]= + {"ALIC_1/ITSV_1/ITEL_%d/IMB0_1/IMBS_1",//lay=1,2,4,5 + "ALIC_1/ITSV_1/IDET_%d/ITS0_1/ITST_1"};// lay=3 + const Int_t kitsGeomTreeCopys[2]={4,1}; + const Int_t knlad[knlayers]={knlayers*1},kndet[knlayers]={knlayers*1}; + TString path,shapeName; + TGeoHMatrix matrix; + TArrayD shapePar; + TArrayF shapeParF; + Double_t trans[3]={3*0.0},rot[10]={10*0.0}; + Int_t npar=3,mod,i,j,lay,lad,det,cpy; + Float_t par[20]; + + par[0]=0.64;par[1]=0.5*300.0E-4;par[2]=3.48; + mod=5; + AliITSgeom* geom = new AliITSgeom(0,knlayers,knlad,kndet,mod); + SetITSgeom(geom); + for(i=0;iGetTransformation(path.Data(),matrix); + gMC->GetShape(path.Data(),shapeName,shapePar); + shapeParF.Set(shapePar.GetSize()); + for(j=0;jCreateMatrix(mod,lay,lad,det,kSPD,trans,rot); + geom->SetTrans(mod,matrix.GetTranslation()); + geom->SetRotMatrix(mod,matrix.GetRotationMatrix()); + geom->GetGeomMatrix(mod)->SetPath(path.Data()); + if(!(geom->IsShapeDefined((Int_t)kSPD))) + geom->ReSetShape(kSPD,new AliITSgeomSPD425Short(npar,par)); + } // end for i,cpy/ return; } //______________________________________________________________________ @@ -636,19 +609,21 @@ void AliITSvSPD02::Init(){ for(i=0;i<26;i++) cout << "*"; cout << " ITSvSPD02" << fMinorVersion << "_Init "; for(i=0;i<25;i++) cout << "*";cout << endl; -// + if(fRead[0]=='\0') strncpy(fRead,fEuclidGeomDet,60); if(fWrite[0]=='\0') strncpy(fWrite,fEuclidGeomDet,60); - if(fITSgeom!=0) delete fITSgeom; - fITSgeom = new AliITSgeom(); - if(fGeomDetIn) fITSgeom->ReadNewFile(fRead); + if(GetITSgeom()!=0) SetITSgeom(0x0); + AliITSgeom* geom = new AliITSgeom(); + SetITSgeom(geom); + if(fGeomDetIn) GetITSgeom()->ReadNewFile(fRead); if(!fGeomDetIn) this->InitAliITSgeom(); - if(fGeomDetOut) fITSgeom->WriteNewFile(fWrite); + if(fGeomDetOut) GetITSgeom()->WriteNewFile(fWrite); AliITS::Init(); -// + for(i=0;i<72;i++) cout << "*"; cout << endl; - fIDMother = gMC->VolId("ITSV"); // ITS Mother Volume ID. + if(gMC) fIDMother = gMC->VolId("ITSV"); // ITS Mother Volume ID. + else fIDMother = 0; } //______________________________________________________________________ void AliITSvSPD02::SetDefaults(){ @@ -663,20 +638,23 @@ void AliITSvSPD02::SetDefaults(){ Info("SetDefaults","Setting up only SPD detector"); - AliITSDetType *iDetType; + if(!fDetTypeSim) fDetTypeSim = new AliITSDetTypeSim(); + fDetTypeSim->SetITSgeom(GetITSgeom()); AliITSgeomSPD *s0; Int_t i; Float_t bx[256],bz[280]; - + fDetTypeSim->ResetCalibrationArray(); + fDetTypeSim->ResetSegmentation(); + //SPD - iDetType=DetType(kSPD); // Get shape info. Do it this way for now. - s0 = (AliITSgeomSPD*) fITSgeom->GetShape(kSPD); - AliITSresponse *resp0=new AliITSresponseSPDdubna(); + s0 = (AliITSgeomSPD*) GetITSgeom()->GetShape(kSPD); + AliITSCalibration *resp0=new AliITSCalibrationSPD(); resp0->SetTemperature(); resp0->SetDistanceOverVoltage(); - SetResponseModel(kSPD,resp0); - AliITSsegmentationSPD *seg0=new AliITSsegmentationSPD(fITSgeom); + SetCalibrationModel(0,resp0); + + AliITSsegmentationSPD *seg0=new AliITSsegmentationSPD(); seg0->SetDetSize(s0->GetDx()*2.*kconv, // base this on AliITSgeomSPD s0->GetDz()*2.*kconv, // for now. s0->GetDy()*2.*kconv); // x,z,y full width in microns. @@ -692,22 +670,22 @@ void AliITSvSPD02::SetDefaults(){ seg0->SetBinSize(bx,bz); // Based on AliITSgeomSPD for now. SetSegmentationModel(kSPD,seg0); // set digit and raw cluster classes to be used - const char *kData0=(iDetType->GetResponseModel())->DataType(); - if (strstr(kData0,"real")) iDetType->ClassNames("AliITSdigit", - "AliITSRawClusterSPD"); - else iDetType->ClassNames("AliITSdigitSPD","AliITSRawClusterSPD"); -// SetSimulationModel(kSPD,new AliITSsimulationSPD(seg0,resp0)); + const char *kData0=(fDetTypeSim->GetCalibrationModel(0))->DataType(); + if (strstr(kData0,"real")) fDetTypeSim->SetDigitClassName(kSPD,"AliITSdigit"); + else fDetTypeSim->SetDigitClassName(kSPD,"AliITSdigitSPD"); +// SetSimulationModel(kSPD,new AliITSsimulationSPDdubna(seg0,resp0)); // iDetType->ReconstructionModel(new AliITSClusterFinderSPD()); - - SetResponseModel(kSDD,new AliITSresponseSDD()); + +/* + SetResponseModel(kSDD,new AliITSCalibrationSDD()); SetSegmentationModel(kSDD,new AliITSsegmentationSDD()); DetType(kSDD)->ClassNames("AliITSdigitSDD","AliITSRawClusterSDD"); - SetResponseModel(kSSD,new AliITSresponseSSD()); + SetResponseModel(kSSD,new AliITSCalibrationSSD()); SetSegmentationModel(kSSD,new AliITSsegmentationSSD()); DetType(kSSD)->ClassNames("AliITSdigitSSD","AliITSRawClusterSSD"); - - if(kNTYPES>3){ +*/ + if(fgkNTYPES>3){ Warning("SetDefaults", "Only the four basic detector types are initialised!"); }// end if @@ -723,59 +701,57 @@ void AliITSvSPD02::SetDefaultSimulation(){ // Return: // none. - AliITSDetType *iDetType; - AliITSsimulation *sim; - iDetType=DetType(0); - sim = iDetType->GetSimulationModel(); - if (!sim) { - AliITSsegmentation *seg0= - (AliITSsegmentation*)iDetType->GetSegmentationModel(); - AliITSresponse *res0 = (AliITSresponse*)iDetType->GetResponseModel(); - AliITSsimulationSPDdubna *sim0=new AliITSsimulationSPDdubna(seg0,res0); - SetSimulationModel(0,sim0); - }else{ // simulation exists, make sure it is set up properly. - ((AliITSsimulationSPDdubna*)sim)->Init( - (AliITSsegmentationSPD*) iDetType->GetSegmentationModel(), - (AliITSresponseSPDdubna*) iDetType->GetResponseModel()); -// if(sim->GetResponseModel()==0) sim->SetResponseModel( -// (AliITSresponse*)iDetType->GetResponseModel()); -// if(sim->GetSegmentationModel()==0) sim->SetSegmentationModel( -// (AliITSsegmentation*)iDetType->GetSegmentationModel()); - } // end if - iDetType=DetType(1); - sim = iDetType->GetSimulationModel(); - if (!sim) { - AliITSsegmentation *seg1= - (AliITSsegmentation*)iDetType->GetSegmentationModel(); - AliITSresponse *res1 = (AliITSresponse*)iDetType->GetResponseModel(); - AliITSsimulationSDD *sim1=new AliITSsimulationSDD(seg1,res1); - SetSimulationModel(1,sim1); - }else{ // simulation exists, make sure it is set up properly. - ((AliITSsimulationSDD*)sim)->Init( - (AliITSsegmentationSDD*) iDetType->GetSegmentationModel(), - (AliITSresponseSDD*) iDetType->GetResponseModel()); -// if(sim->GetResponseModel()==0) sim->SetResponseModel( -// (AliITSresponse*)iDetType->GetResponseModel()); -// if(sim->GetSegmentationModel()==0) sim->SetSegmentationModel( -// (AliITSsegmentation*)iDetType->GetSegmentationModel()); - } //end if - iDetType=DetType(2); - sim = iDetType->GetSimulationModel(); + if(GetITSgeom()==0){ + Warning("SetDefaultSimulation","ITS geometry is null!"); + return; + } + + if(!fDetTypeSim) fDetTypeSim = new AliITSDetTypeSim(); + AliITSsimulation *sim; + //AliITSsegmentation *seg; + //AliITSCalibration *res; + if(fDetTypeSim){ + sim = fDetTypeSim->GetSimulationModel(kSPD); if (!sim) { - AliITSsegmentation *seg2= - (AliITSsegmentation*)iDetType->GetSegmentationModel(); - AliITSresponse *res2 = (AliITSresponse*)iDetType->GetResponseModel(); - AliITSsimulationSSD *sim2=new AliITSsimulationSSD(seg2,res2); - SetSimulationModel(2,sim2); + //seg = (AliITSsegmentation*)fDetTypeSim->GetSegmentationModel(kSPD); + //res = (AliITSCalibration*)fDetTypeSim->GetResponseModel(GetITSgeom()->GetStartSPD()); + sim = new AliITSsimulationSPD(fDetTypeSim); + SetSimulationModel(kSPD,sim); }else{ // simulation exists, make sure it is set up properly. - ((AliITSsimulationSSD*)sim)->Init( - (AliITSsegmentationSSD*) iDetType->GetSegmentationModel(), - (AliITSresponseSSD*) iDetType->GetResponseModel()); -// if(sim->GetResponseModel()==0) sim->SetResponseModel( -// (AliITSresponse*)iDetType->GetResponseModel()); -// if(sim->GetSegmentationModel()==0) sim->SetSegmentationModel( -// (AliITSsegmentation*)iDetType->GetSegmentationModel()); + sim->SetCalibrationModel(GetITSgeom()->GetStartSPD(),(AliITSCalibration*)fDetTypeSim->GetCalibrationModel(GetITSgeom()->GetStartSPD())); + sim->SetSegmentationModel(kSPD,(AliITSsegmentation*)fDetTypeSim->GetSegmentationModel(kSPD)); + sim->Init(); } // end if + } // end if iDetType + + /* + if(fDetTypeSim){ + sim = fDetTypeSim->GetSimulationModel(kSDD); + if (!sim) { + seg = (AliITSsegmentation*)fDetTypeSim->GetSegmentationModel(kSDD); + res = (AliITSCalibration*)fDetTypeSim->GetResponseModel(GetITSgeom()->GetStartSDD()); + sim = new AliITSsimulationSDD(seg,res); + SetSimulationModel(kSDD,sim); + }else{ // simulation exists, make sure it is set up properly. + sim->SetResponseModel((AliITSCalibration*)fDetTypeSim->GetResponseModel(GetITSgeom()->GetStartSDD())); + sim->SetSegmentationModel((AliITSsegmentation*)fDetTypeSim->GetSegmentationModel(kSDD)); + sim->Init(); + } //end if + } // end if iDetType + if(fDetTypeSim){ + sim = fDetTypeSim->GetSimulationModel(kSSD); + if (!sim) { + seg = (AliITSsegmentation*)fDetTypeSim->GetSegmentationModel(kSSD); + res = (AliITSCalibration*)fDetTypeSim->GetResponseModel(GetITSgeom()->GetStartSSD()); + sim = new AliITSsimulationSSD(seg,res); + SetSimulationModel(kSSD,sim); + }else{ // simulation exists, make sure it is set up properly. + sim->SetResponseModel((AliITSCalibration*)fDetTypeSim->GetResponseModel(GetITSgeom()->GetStartSSD())); + sim->SetSegmentationModel((AliITSsegmentation*)fDetTypeSim->GetSegmentationModel(kSSD)); + sim->Init(); + } // end if + } // + */ } //______________________________________________________________________ void AliITSvSPD02::DrawModule() const { @@ -825,19 +801,20 @@ void AliITSvSPD02::StepManager(){ // Return: // none. //////////////////////////////////////////////////////////////////////// - Int_t copy, id; + Int_t copy=0, id; TLorentzVector position, momentum; static TLorentzVector position0; static Int_t stat0=0; if((id=gMC->CurrentVolID(copy) == fIDMother)&& (gMC->IsTrackEntering()||gMC->IsTrackExiting())){ - copy = fTrackReferences->GetEntriesFast(); - TClonesArray &lTR = *fTrackReferences; - // Fill TrackReference structure with this new TrackReference. - new(lTR[copy]) AliTrackReference(gAlice->GetMCApp()->GetCurrentTrackNumber()); + copy = fTrackReferences->GetEntriesFast(); + TClonesArray &lTR = *fTrackReferences; + // Fill TrackReference structure with this new TrackReference. + new(lTR[copy]) AliTrackReference(gAlice->GetMCApp()-> + GetCurrentTrackNumber()); } // if Outer ITS mother Volume if(!(this->IsActive())){ - return; + return; } // end if !Active volume. Int_t vol[5]; TClonesArray &lhits = *fHits; @@ -857,31 +834,32 @@ void AliITSvSPD02::StepManager(){ if(!(gMC->TrackCharge())) return; id = gMC->CurrentVolID(copy); if(id==fIdSens[0]){ // Volume name "IMBS" - vol[2] = vol[1] = 1; // Det, ladder - id = gMC->CurrentVolOffID(2,copy); - //detector copy in the ladder = 1<->4 (ITS1 < I101 < I103 < I10A) - vol[0] = copy; // Lay - if(copy>2) vol[0]++; + vol[2] = vol[1] = 1; // Det, ladder + id = gMC->CurrentVolOffID(2,copy); + //detector copy in the ladder = 1<->4 (ITS1 < I101 < I103 < I10A) + vol[0] = copy; // Lay + if(copy>2) vol[0]++; } else if(id == fIdSens[1]){ // Volume name "ITST" - vol[0] = 3; // layer - vol[1] = 1; // ladder - id = gMC->CurrentVolOffID(2,copy); - //detector copy in the ladder = 1<->4 (ITS2 < I1D1 < I1D3 < I20A) - vol[2] = 1; // detector + vol[0] = 3; // layer + vol[1] = 1; // ladder + id = gMC->CurrentVolOffID(2,copy); + //detector copy in the ladder = 1<->4 (ITS2 < I1D1 < I1D3 < I20A) + vol[2] = 1; // detector } else return; // end if // gMC->TrackPosition(position); gMC->TrackMomentum(momentum); vol[4] = stat0; if(gMC->IsTrackEntering()){ - position0 = position; - stat0 = vol[3]; - return; + position0 = position; + stat0 = vol[3]; + return; } // end if IsEntering // Fill hit structure with this new hit only for non-entrerance hits. - else new(lhits[fNhits++]) AliITShit(fIshunt,gAlice->GetMCApp()->GetCurrentTrackNumber(),vol, - gMC->Edep(),gMC->TrackTime(),position, - position0,momentum); + else new(lhits[fNhits++]) AliITShit(fIshunt, + gAlice->GetMCApp()->GetCurrentTrackNumber(), + vol,gMC->Edep(),gMC->TrackTime(), + position,position0,momentum); // position0 = position; stat0 = vol[3];