fPreProcess(), // [] e.g. Fill fHitModule with hits
fPostProcess(), // [] e.g. Wright Raw data
fNSDigits(0), //! number of SDigits
-fSDigits(), //! [NMod][NSDigits]
+fSDigits("AliITSpListItem",1000),
fNDigits(0), //! number of Digits
fRunNumber(0), //! Run number (to access DB)
fDigits(), //! [NMod][NDigits]
+fSimuPar(0),
fDDLMapSDD(0),
fHitClassName(), // String with Hit class name.
fSDigClassName(),// String with SDigit class name.
fSimulation = new TObjArray(fgkNdettypes);
fSegmentation = new TObjArray(fgkNdettypes);
fSegmentation->SetOwner(kTRUE);
- fSDigits = new TClonesArray("AliITSpListItem",1000);
fDigits = new TObjArray(fgkNdettypes);
fNDigits = new Int_t[fgkNdettypes];
fDDLMapSDD=new AliITSDDLModuleMapSDD();
+ fSimuPar= new AliITSSimuParam();
fNMod[0] = fgkDefaultNModulesSPD;
fNMod[1] = fgkDefaultNModulesSDD;
fNMod[2] = fgkDefaultNModulesSSD;
delete fPostProcess;
}
fPostProcess = 0;
+ if(fSimuPar) delete fSimuPar;
if(fDDLMapSDD) delete fDDLMapSDD;
if(fNDigits) delete [] fNDigits;
fNDigits = 0;
if (fLoader)fLoader->GetModulesFolder()->Remove(this);
fLoader = 0; // Not deleting it.
- if (fSDigits) {
- fSDigits->Delete();
- delete fSDigits;
- }
- fSDigits=0;
+ fSDigits.Delete();
if (fDigits) {
fDigits->Delete();
delete fDigits;
fPreProcess(source.fPreProcess), // [] e.g. Fill fHitModule with hits
fPostProcess(source.fPostProcess), // [] e.g. Wright Raw data
fNSDigits(source.fNSDigits), //! number of SDigits
-fSDigits(source.fSDigits), //! [NMod][NSDigits]
+fSDigits(*((TClonesArray*)source.fSDigits.Clone())),
fNDigits(source.fNDigits), //! number of Digits
fRunNumber(source.fRunNumber), //! Run number (to access DB)
fDigits(source.fDigits), //! [NMod][NDigits]
+fSimuPar(source.fSimuPar),
fDDLMapSDD(source.fDDLMapSDD),
fHitClassName(source.fHitClassName), // String with Hit class name.
fSDigClassName(source.fSDigClassName),// String with SDigit class name.
ResetSegmentation();
if(!GetCalibration()){AliFatal("Exit"); exit(0);}
+ SetDigitClassName(0,"AliITSdigitSPD");
+ SetDigitClassName(1,"AliITSdigitSDD");
+ SetDigitClassName(2,"AliITSdigitSSD");
+
for(Int_t idet=0;idet<fgkNdettypes;idet++){
- //SPD
- if(idet==0){
- if(!GetSegmentationModel(idet)) SetDefaultSegmentation(idet);
- const char *kData0=(GetCalibrationModel(GetITSgeom()->GetStartSPD()))->DataType();
- if (strstr(kData0,"real")) {
- SetDigitClassName(idet,"AliITSdigit");
- }else {
- SetDigitClassName(idet,"AliITSdigitSPD");
- } // end if
- } // end if idet==0
- //SDD
- if(idet==1){
- if(!GetSegmentationModel(idet)) SetDefaultSegmentation(idet);
- AliITSCalibrationSDD* rsp =
- (AliITSCalibrationSDD*)GetCalibrationModel(
- GetITSgeom()->GetStartSDD());
- const char *kopt = ((AliITSresponseSDD*)rsp->GetResponse())->
- ZeroSuppOption();
- if(!strstr(kopt,"ZS")) {
- SetDigitClassName(idet,"AliITSdigit");
- }else {
- SetDigitClassName(idet,"AliITSdigitSDD");
- } // end if
- } // end if idet==1
- //SSD
- if(idet==2){
- if(!GetSegmentationModel(idet))SetDefaultSegmentation(idet);
- const char *kData2 = (GetCalibrationModel(
- GetITSgeom()->GetStartSSD())->DataType());
- if (strstr(kData2,"real")) {
- SetDigitClassName(idet,"AliITSdigit");
- }else {
- SetDigitClassName(idet,"AliITSdigitSSD");
- } // end if
- } // end if idet==2
- }// end for idet
+ if(!GetSegmentationModel(idet)) SetDefaultSegmentation(idet);
+ }
}
//______________________________________________________________________
Bool_t AliITSDetTypeSim::GetCalibration() {
}
fDDLMapSDD->SetDDLMap(ddlsdd);
- for(Int_t iddl=0; iddl<AliITSDDLModuleMapSDD::GetNDDLs(); iddl++){
- for(Int_t icar=0; icar<AliITSDDLModuleMapSDD::GetNModPerDDL();icar++){
- Int_t iMod=fDDLMapSDD->GetModuleNumber(iddl,icar);
- if(iMod==-1) continue;
- Int_t i=iMod - fgkDefaultNModulesSPD;
+
+ for (Int_t i=0; i<fgkDefaultNModulesSDD; i++) {
+ Int_t iddl,icarlos;
+ Int_t iMod = i + fgkDefaultNModulesSPD;
+ fDDLMapSDD->FindInDDLMap(iMod,iddl,icarlos);
+ if(iddl<0){
+ AliITSCalibrationSDD* calsdddead=new AliITSCalibrationSDD();
+ calsdddead->SetResponse(pSDD);
+ calsdddead->SetBad();
+ AliITSDriftSpeedSDD* driftspdef = new AliITSDriftSpeedSDD();
+ AliITSDriftSpeedArraySDD* arrdrsp=new AliITSDriftSpeedArraySDD(1);
+ arrdrsp->AddDriftSpeed(driftspdef);
+ calsdddead->SetDriftSpeed(0,arrdrsp);
+ calsdddead->SetDriftSpeed(1,arrdrsp);
+ SetCalibrationModel(iMod, calsdddead);
+ AliWarning(Form("SDD module %d not present in DDL map: set it as dead",iMod));
+ }else{
cal = (AliITSCalibration*) calSDD->At(i);
- cal->SetResponse((AliITSresponse*)pSDD);
+ cal->SetResponse(pSDD);
Int_t i0=2*i;
Int_t i1=1+2*i;
AliITSDriftSpeedArraySDD* arr0 = (AliITSDriftSpeedArraySDD*) drSp->At(i0);
SetCalibrationModel(iMod, cal);
}
}
+
for (Int_t i=0; i<fNMod[2]; i++) {
AliITSCalibrationSSD *calibSSD = new AliITSCalibrationSSD();
calibSSD->SetResponse((AliITSresponse*)pSSD);
if(!treeS){
return;
}
- if (fSDigits == 0x0){
- fSDigits = new TClonesArray("AliITSpListItem",1000);
- }
TBranch *branch;
sprintf(branchname,"%s",name);
branch = treeS->GetBranch(branchname);
- if (branch) branch->SetAddress(&fSDigits);
+ TClonesArray *sdigi = &fSDigits;
+ if (branch) branch->SetAddress(&sdigi);
}
//___________________________________________________________________
}
sim->InitSimulationModule(module,gAlice->GetEvNumber());
- fSDigits->Clear();
+ fSDigits.Clear();
brchSDigits->GetEvent(module);
- sim->AddSDigitsToModule(fSDigits,0);
+ sim->AddSDigitsToModule(&fSDigits,0);
sim->FinishSDigitiseModule();
fLoader->TreeD()->Fill();
ResetDigits();
void AliITSDetTypeSim::AddSumDigit(AliITSpListItem &sdig){
//Adds the module full of summable digits to the summable digits tree.
- TClonesArray &lsdig = *fSDigits;
- new(lsdig[fNSDigits++]) AliITSpListItem(sdig);
-}
-//__________________________________________________________
-void AliITSDetTypeSim::AddRealDigit(Int_t branch, Int_t *digits){
- // Add a real digit - as coming from data.
-
- TClonesArray &ldigits = *((TClonesArray*)fDigits->At(branch));
- new(ldigits[fNDigits[branch]++]) AliITSdigit(digits);
+ new(fSDigits[fNSDigits++]) AliITSpListItem(sdig);
}
//__________________________________________________________
void AliITSDetTypeSim::AddSimDigit(Int_t branch, AliITSdigit* d){
}
//______________________________________________________________________
void AliITSDetTypeSim::AddSimDigit(Int_t branch,Float_t phys,Int_t *digits,
- Int_t *tracks,Int_t *hits,Float_t *charges){
+ Int_t *tracks,Int_t *hits,Float_t *charges,
+ Int_t sigexpanded){
// Add a simulated digit to the list.
TClonesArray &ldigits = *((TClonesArray*)fDigits->At(branch));
- AliITSCalibrationSDD *resp = 0;
switch(branch){
case 0:
new(ldigits[fNDigits[branch]++]) AliITSdigitSPD(digits,tracks,hits);
break;
case 1:
- resp = (AliITSCalibrationSDD*)GetCalibrationModel(
- GetITSgeom()->GetStartSDD());
new(ldigits[fNDigits[branch]++]) AliITSdigitSDD(phys,digits,tracks,
- hits,charges,resp);
+ hits,charges,sigexpanded);
break;
case 2:
new(ldigits[fNDigits[branch]++]) AliITSdigitSSD(digits,tracks,hits);