#include "TObjArray.h"
#include "TTree.h"
#include "AliCDBManager.h"
#include "AliCDBEntry.h"
#include "AliITSClusterFinder.h"
#include "AliITSClusterFinderV2SPD.h"
#include "AliITSClusterFinderV2SDD.h"
#include "AliITSClusterFinderSDDfast.h"
#include "AliITSClusterFinderV2SSD.h"
#include "AliITSDetTypeRec.h"
#include "AliITSDDLModuleMapSDD.h"
#include "AliITSRecPoint.h"
#include "AliITSRecPointContainer.h"
#include "AliITSCalibrationSDD.h"
#include "AliITSMapSDD.h"
#include "AliITSCalibrationSSD.h"
#include "AliITSNoiseSSDv2.h"
#include "AliITSGainSSDv2.h"
#include "AliITSBadChannelsSSDv2.h"
#include "AliITSNoiseSSD.h"
#include "AliITSGainSSD.h"
#include "AliITSBadChannelsSSD.h"
#include "AliITSresponseSDD.h"
#include "AliITSsegmentationSPD.h"
#include "AliITSsegmentationSDD.h"
#include "AliITSsegmentationSSD.h"
#include "AliLog.h"
#include "AliITSRawStreamSPD.h"
#include "AliITSTriggerConditions.h"
#include "AliITSFOSignalsSPD.h"
#include "AliRunLoader.h"
#include "AliDataLoader.h"
#include "AliITSLoader.h"
class AliITSDriftSpeedArraySDD;
class AliITSCorrMapSDD;
class AliITSRecoParam;
const Int_t AliITSDetTypeRec::fgkNdettypes = 3;
const Int_t AliITSDetTypeRec::fgkDefaultNModulesSPD = 240;
const Int_t AliITSDetTypeRec::fgkDefaultNModulesSDD = 260;
const Int_t AliITSDetTypeRec::fgkDefaultNModulesSSD = 1698;
ClassImp(AliITSDetTypeRec)
AliITSDetTypeRec::AliITSDetTypeRec(): TObject(),
fNMod(0),
fITSgeom(0),
fReconstruction(0),
fSegmentation(0),
fCalibration(0),
fSSDCalibration(0),
fSPDDead(0),
fSPDSparseDead(0),
fTriggerConditions(0),
fDigits(0),
fFOSignals(0),
fDDLMapSDD(0),
fRespSDD(0),
fAveGainSDD(0),
fRecPoints(0),
fNRecPoints(0),
fFirstcall(kTRUE),
fLoadOnlySPDCalib(0),
fFastOrFiredMap(1200){
fReconstruction = new TObjArray(fgkNdettypes);
fDigits = new TObjArray(fgkNdettypes);
for(Int_t i=0; i<3; i++){
fkDigClassName[i]=0;
}
fSSDCalibration=new AliITSCalibrationSSD();
fNMod = new Int_t [fgkNdettypes];
fNMod[0] = fgkDefaultNModulesSPD;
fNMod[1] = fgkDefaultNModulesSDD;
fNMod[2] = fgkDefaultNModulesSSD;
fNRecPoints = 0;
}
AliITSDetTypeRec::AliITSDetTypeRec(const AliITSDetTypeRec & rec):TObject(rec),
fNMod(rec.fNMod),
fITSgeom(rec.fITSgeom),
fReconstruction(rec.fReconstruction),
fSegmentation(rec.fSegmentation),
fCalibration(rec.fCalibration),
fSSDCalibration(rec.fSSDCalibration),
fSPDDead(rec.fSPDDead),
fSPDSparseDead(rec.fSPDSparseDead),
fTriggerConditions(rec.fTriggerConditions),
fDigits(rec.fDigits),
fFOSignals(rec.fFOSignals),
fDDLMapSDD(rec.fDDLMapSDD),
fRespSDD(rec.fRespSDD),
fAveGainSDD(rec.fAveGainSDD),
fRecPoints(rec.fRecPoints),
fNRecPoints(rec.fNRecPoints),
fFirstcall(rec.fFirstcall),
fLoadOnlySPDCalib(rec.fLoadOnlySPDCalib),
fFastOrFiredMap(rec.fFastOrFiredMap){
for(Int_t i=0; i<3; i++){
fkDigClassName[i]=rec.fkDigClassName[i];
}
}
AliITSDetTypeRec& AliITSDetTypeRec::operator=(const AliITSDetTypeRec& source){
this->~AliITSDetTypeRec();
new(this) AliITSDetTypeRec(source);
return *this;
}
AliITSDetTypeRec::~AliITSDetTypeRec(){
if(fReconstruction){
fReconstruction->Delete();
delete fReconstruction;
}
if(fSegmentation){
fSegmentation->Delete();
delete fSegmentation;
}
if(fCalibration){
if(!(AliCDBManager::Instance()->GetCacheFlag())) {
fCalibration->Delete();
delete fCalibration;
if(fRespSDD) delete fRespSDD;
if(fDDLMapSDD) delete fDDLMapSDD;
}
}
if(fSSDCalibration){
if(!(AliCDBManager::Instance()->GetCacheFlag())) {
delete fSSDCalibration;
}
}
if(fSPDDead){
if(!(AliCDBManager::Instance()->GetCacheFlag())) {
fSPDDead->Delete();
delete fSPDDead;
}
}
if(fSPDSparseDead){
if(!(AliCDBManager::Instance()->GetCacheFlag())) {
fSPDSparseDead->Delete();
delete fSPDSparseDead;
}
}
if(fTriggerConditions){
if(!(AliCDBManager::Instance()->GetCacheFlag())) {
fTriggerConditions->Delete();
delete fTriggerConditions;
}
}
if(fDigits){
fDigits->Delete();
delete fDigits;
}
if(fRecPoints){
fRecPoints->Delete();
delete fRecPoints;
}
delete [] fNMod;
if (fITSgeom) delete fITSgeom;
}
void AliITSDetTypeRec::SetReconstructionModel(Int_t dettype,AliITSClusterFinder *clf){
if(fReconstruction==0) fReconstruction = new TObjArray(fgkNdettypes);
if(fReconstruction->At(dettype)!=0) delete fReconstruction->At(dettype);
fReconstruction->AddAt(clf,dettype);
}
AliITSClusterFinder* AliITSDetTypeRec::GetReconstructionModel(Int_t dettype) const{
if(fReconstruction==0) {
Warning("GetReconstructionModel","fReconstruction is 0!");
return 0;
}
return (AliITSClusterFinder*)fReconstruction->At(dettype);
}
void AliITSDetTypeRec::SetSegmentationModel(Int_t dettype,AliITSsegmentation *seg){
if(fSegmentation==0) fSegmentation = new TObjArray(fgkNdettypes);
if(fSegmentation->At(dettype)!=0) delete fSegmentation->At(dettype);
fSegmentation->AddAt(seg,dettype);
}
AliITSsegmentation* AliITSDetTypeRec::GetSegmentationModel(Int_t dettype) const {
if(fSegmentation==0) {
Warning("GetSegmentationModel","fSegmentation is 0!");
return 0;
}
return (AliITSsegmentation*)fSegmentation->At(dettype);
}
void AliITSDetTypeRec::SetCalibrationModel(Int_t iMod, AliITSCalibration *cal){
if (fCalibration==0) {
fCalibration = new TObjArray(GetITSgeom()->GetIndexMax());
fCalibration->SetOwner(kTRUE);
fCalibration->Clear();
}
if (fCalibration->At(iMod) != 0)
delete (AliITSCalibration*) fCalibration->At(iMod);
fCalibration->AddAt(cal,iMod);
}
void AliITSDetTypeRec::SetSPDDeadModel(Int_t iMod, AliITSCalibration *cal){
if (fSPDDead==0) {
fSPDDead = new TObjArray(fgkDefaultNModulesSPD);
fSPDDead->SetOwner(kTRUE);
fSPDDead->Clear();
}
if (fSPDDead->At(iMod) != 0)
delete (AliITSCalibration*) fSPDDead->At(iMod);
fSPDDead->AddAt(cal,iMod);
}
void AliITSDetTypeRec::SetSPDSparseDeadModel(Int_t iMod, AliITSCalibration *cal){
if (fSPDSparseDead==0) {
fSPDSparseDead = new TObjArray(fgkDefaultNModulesSPD);
fSPDSparseDead->SetOwner(kTRUE);
fSPDSparseDead->Clear();
}
if (fSPDSparseDead->At(iMod) != 0)
delete (AliITSCalibration*) fSPDSparseDead->At(iMod);
fSPDSparseDead->AddAt(cal,iMod);
}
AliITSCalibration* AliITSDetTypeRec::GetCalibrationModel(Int_t iMod) const {
if(fCalibration==0) {
Warning("GetalibrationModel","fCalibration is 0!");
return 0;
}
if(iMod<fgkDefaultNModulesSPD+fgkDefaultNModulesSDD){
return (AliITSCalibration*)fCalibration->At(iMod);
}else{
Int_t i=iMod-(fgkDefaultNModulesSPD+fgkDefaultNModulesSDD);
fSSDCalibration->SetModule(i);
return (AliITSCalibration*)fSSDCalibration;
}
}
AliITSCalibration* AliITSDetTypeRec::GetSPDDeadModel(Int_t iMod) const {
if(fSPDDead==0) {
AliWarning("fSPDDead is 0!");
return 0;
}
return (AliITSCalibration*)fSPDDead->At(iMod);
}
AliITSCalibration* AliITSDetTypeRec::GetSPDSparseDeadModel(Int_t iMod) const {
if(fSPDSparseDead==0) {
AliWarning("fSPDSparseDead is 0!");
return 0;
}
return (AliITSCalibration*)fSPDSparseDead->At(iMod);
}
AliITSTriggerConditions* AliITSDetTypeRec::GetTriggerConditions() const {
if (fTriggerConditions==0) {
AliWarning("fTriggerConditions is 0!");
}
return fTriggerConditions;
}
void AliITSDetTypeRec::SetTreeAddressD(TTree* const treeD){
const char *det[4] = {"SPD","SDD","SSD","ITS"};
TBranch *branch;
const Char_t* digclass;
Int_t i;
char branchname[30];
if(!treeD) return;
if (fDigits == 0x0) {
fDigits = new TObjArray(fgkNdettypes);
}
else {
ResetDigits();
}
for (i=0; i<fgkNdettypes; i++) {
digclass = GetDigitClassName(i);
fDigits->AddAt(new TClonesArray(digclass,1000),i);
if (fgkNdettypes==3) snprintf(branchname,29,"%sDigits%s",det[3],det[i]);
else snprintf(branchname,29,"%sDigits%d",det[3],i+1);
branch = treeD->GetBranch(branchname);
if (branch) branch->SetAddress(&((*fDigits)[i]));
}
}
TBranch* AliITSDetTypeRec::MakeBranchInTree(TTree* const tree,
const char* name, const char *classname,
void* address,Int_t size,Int_t splitlevel)
{
if (tree == 0x0) {
Error("MakeBranchInTree","Making Branch %s Tree is NULL",name);
return 0x0;
}
TBranch *branch = tree->GetBranch(name);
if (branch) {
return branch;
}
if (classname){
branch = tree->Branch(name,classname,address,size,splitlevel);
}
else {
branch = tree->Bronch(name, "TClonesArray", address, size, splitlevel);
}
return branch;
}
void AliITSDetTypeRec::SetDefaults(){
if(!GetITSgeom()){
Warning("SetDefaults","null pointer to AliITSgeomGeom !");
return;
}
AliITSsegmentation* seg;
if(!GetCalibration()) {AliFatal("Exit");exit(0);}
for(Int_t dettype=0;dettype<fgkNdettypes;dettype++){
if(dettype==0){
seg = new AliITSsegmentationSPD();
SetSegmentationModel(dettype,seg);
SetDigitClassName(dettype,"AliITSdigitSPD");
}
if(dettype==1){
seg = new AliITSsegmentationSDD();
if(fLoadOnlySPDCalib==kFALSE){
AliITSCalibrationSDD* cal=(AliITSCalibrationSDD*)GetCalibrationModel(fgkDefaultNModulesSPD+1);
if(cal->IsAMAt20MHz()){
seg->SetPadSize(seg->Dpz(0),20.);
seg->SetNPads(seg->Npz()/2,128);
}
}
SetSegmentationModel(dettype,seg);
SetDigitClassName(dettype,"AliITSdigitSDD");
}
if(dettype==2){
AliITSsegmentationSSD* seg2 = new AliITSsegmentationSSD();
SetSegmentationModel(dettype,seg2);
SetDigitClassName(dettype,"AliITSdigitSSD");
}
}
}
Bool_t AliITSDetTypeRec::GetCalibration() {
if(!fFirstcall){
AliITSCalibration* cal = GetCalibrationModel(0);
if(cal)return kTRUE;
}else {
fFirstcall = kFALSE;
}
Bool_t cacheStatus = AliCDBManager::Instance()->GetCacheFlag();
if (fCalibration==0) {
fCalibration = new TObjArray(GetITSgeom()->GetIndexMax());
fCalibration->SetOwner(!cacheStatus);
fCalibration->Clear();
}
Bool_t retCode=GetCalibrationSPD(cacheStatus);
if(retCode==kFALSE) return kFALSE;
if(fLoadOnlySPDCalib==kFALSE){
retCode=GetCalibrationSDD(cacheStatus);
if(retCode==kFALSE) return kFALSE;
retCode=GetCalibrationSSD(cacheStatus);
if(retCode==kFALSE) return kFALSE;
}
AliInfo(Form("%i SPD, %i SDD and %i SSD in calibration database",
fNMod[0], fNMod[1], fNMod[2]));
return kTRUE;
}
Bool_t AliITSDetTypeRec::GetCalibrationSPD(Bool_t cacheStatus) {
AliCDBEntry *noisySPD = AliCDBManager::Instance()->Get("ITS/Calib/SPDNoisy");
AliCDBEntry *deadSPD = AliCDBManager::Instance()->Get("ITS/Calib/SPDDead");
AliCDBEntry *deadSparseSPD = AliCDBManager::Instance()->Get("ITS/Calib/SPDSparseDead");
AliCDBEntry *pitCond = AliCDBManager::Instance()->Get("TRIGGER/SPD/PITConditions");
if(!noisySPD || !deadSPD || !pitCond ){
AliFatal("SPD Calibration object retrieval failed! ");
return kFALSE;
}
TObjArray *calNoisySPD = (TObjArray*) noisySPD->GetObject();
if (!cacheStatus) noisySPD->SetObject(NULL);
noisySPD->SetOwner(kTRUE);
TObjArray *calDeadSPD = (TObjArray*) deadSPD->GetObject();
if (!cacheStatus) deadSPD->SetObject(NULL);
deadSPD->SetOwner(kTRUE);
TObjArray *calSparseDeadSPD = (TObjArray*) deadSparseSPD->GetObject();
if (!cacheStatus) deadSparseSPD->SetObject(NULL);
deadSparseSPD->SetOwner(kTRUE);
AliITSTriggerConditions *calPitCond = (AliITSTriggerConditions*) pitCond->GetObject();
if (!cacheStatus) pitCond->SetObject(NULL);
pitCond->SetOwner(kTRUE);
if(!cacheStatus){
delete noisySPD;
delete deadSPD;
delete deadSparseSPD;
delete pitCond;
}
if ((!calNoisySPD) || (!calDeadSPD) || (!calSparseDeadSPD) || (!calPitCond)){
AliWarning("Can not get SPD calibration from calibration database !");
return kFALSE;
}
fNMod[0] = calNoisySPD->GetEntries();
AliITSCalibration* cal;
for (Int_t i=0; i<fNMod[0]; i++) {
cal = (AliITSCalibration*) calNoisySPD->At(i);
SetCalibrationModel(i, cal);
cal = (AliITSCalibration*) calDeadSPD->At(i);
SetSPDDeadModel(i, cal);
cal = (AliITSCalibration*) calSparseDeadSPD->At(i);
SetSPDSparseDeadModel(i, cal);
}
fTriggerConditions = calPitCond;
return kTRUE;
}
Bool_t AliITSDetTypeRec::GetCalibrationSDD(Bool_t cacheStatus) {
AliCDBEntry *entrySDD = AliCDBManager::Instance()->Get("ITS/Calib/CalibSDD");
AliCDBEntry *entry2SDD = AliCDBManager::Instance()->Get("ITS/Calib/RespSDD");
AliCDBEntry *drSpSDD = AliCDBManager::Instance()->Get("ITS/Calib/DriftSpeedSDD");
AliCDBEntry *ddlMapSDD = AliCDBManager::Instance()->Get("ITS/Calib/DDLMapSDD");
AliCDBEntry *mapTSDD = AliCDBManager::Instance()->Get("ITS/Calib/MapsTimeSDD");
if(!entrySDD || !entry2SDD || !drSpSDD || !ddlMapSDD || !mapTSDD ){
AliFatal("SDD Calibration object retrieval failed! ");
return kFALSE;
}
TObjArray *calSDD = (TObjArray *)entrySDD->GetObject();
if(!cacheStatus)entrySDD->SetObject(NULL);
entrySDD->SetOwner(kTRUE);
AliITSresponseSDD *pSDD = (AliITSresponseSDD*)entry2SDD->GetObject();
if(!cacheStatus)entry2SDD->SetObject(NULL);
entry2SDD->SetOwner(kTRUE);
TObjArray *drSp = (TObjArray *)drSpSDD->GetObject();
if(!cacheStatus)drSpSDD->SetObject(NULL);
drSpSDD->SetOwner(kTRUE);
AliITSDDLModuleMapSDD *ddlsdd=(AliITSDDLModuleMapSDD*)ddlMapSDD->GetObject();
if(!cacheStatus)ddlMapSDD->SetObject(NULL);
ddlMapSDD->SetOwner(kTRUE);
TObjArray *mapT = (TObjArray *)mapTSDD->GetObject();
if(!cacheStatus)mapTSDD->SetObject(NULL);
mapTSDD->SetOwner(kTRUE);
if(!cacheStatus){
delete entrySDD;
delete entry2SDD;
delete mapTSDD;
delete drSpSDD;
delete ddlMapSDD;
}
if ((!pSDD)||(!calSDD) || (!drSp) || (!ddlsdd) || (!mapT) ){
AliWarning("Can not get SDD calibration from calibration database !");
return kFALSE;
}
fNMod[1] = calSDD->GetEntries();
fDDLMapSDD=ddlsdd;
fRespSDD=pSDD;
AliITSCalibration* cal;
Float_t avegain=0.;
Float_t nGdAnodes=0;
Bool_t oldMapFormat=kFALSE;
TObject* objmap=(TObject*)mapT->At(0);
TString cname(objmap->ClassName());
if(cname.CompareTo("AliITSMapSDD")==0){
oldMapFormat=kTRUE;
AliInfo("SDD Maps converted to new format");
}
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;
cal = (AliITSCalibration*) calSDD->At(i);
Int_t i0=2*i;
Int_t i1=1+2*i;
for(Int_t iAnode=0;iAnode< ((AliITSCalibrationSDD*)cal)->NOfAnodes(); iAnode++){
if(((AliITSCalibrationSDD*)cal)->IsBadChannel(iAnode)) continue;
avegain+= ((AliITSCalibrationSDD*)cal)->GetChannelGain(iAnode);
nGdAnodes++;
}
AliITSDriftSpeedArraySDD* arr0 = (AliITSDriftSpeedArraySDD*) drSp->At(i0);
AliITSDriftSpeedArraySDD* arr1 = (AliITSDriftSpeedArraySDD*) drSp->At(i1);
AliITSCorrMapSDD* mt0 = 0;
AliITSCorrMapSDD* mt1 = 0;
if(oldMapFormat){
AliITSMapSDD* oldmap0=(AliITSMapSDD*)mapT->At(i0);
AliITSMapSDD* oldmap1=(AliITSMapSDD*)mapT->At(i1);
mt0=oldmap0->ConvertToNewFormat();
mt1=oldmap1->ConvertToNewFormat();
}else{
mt0=(AliITSCorrMapSDD*)mapT->At(i0);
mt1=(AliITSCorrMapSDD*)mapT->At(i1);
}
cal->SetDriftSpeed(0,arr0);
cal->SetDriftSpeed(1,arr1);
cal->SetMapT(0,mt0);
cal->SetMapT(1,mt1);
SetCalibrationModel(iMod, cal);
}
}
if(nGdAnodes) fAveGainSDD=avegain/nGdAnodes;
return kTRUE;
}
Bool_t AliITSDetTypeRec::GetCalibrationSSD(Bool_t cacheStatus) {
AliCDBEntry *entryNoiseSSD = AliCDBManager::Instance()->Get("ITS/Calib/NoiseSSD");
AliCDBEntry *entryGainSSD = AliCDBManager::Instance()->Get("ITS/Calib/GainSSD");
AliCDBEntry *entryBadChannelsSSD = AliCDBManager::Instance()->Get("ITS/Calib/BadChannelsSSD");
if(!entryNoiseSSD || !entryGainSSD || !entryBadChannelsSSD){
AliFatal("SSD Calibration object retrieval failed! ");
return kFALSE;
}
TObject *emptyssd = 0; TString ssdobjectname;
AliITSNoiseSSDv2 *noiseSSD = NULL;
emptyssd = (TObject *)entryNoiseSSD->GetObject();
ssdobjectname = emptyssd->GetName();
if(ssdobjectname=="TObjArray") {
TObjArray *noiseSSDOld = (TObjArray *)entryNoiseSSD->GetObject();
noiseSSD = new AliITSNoiseSSDv2();
ReadOldSSDNoise(noiseSSDOld, noiseSSD);
}
else if(ssdobjectname=="AliITSNoiseSSDv2")
noiseSSD = (AliITSNoiseSSDv2 *)entryNoiseSSD->GetObject();
if(!cacheStatus)entryNoiseSSD->SetObject(NULL);
entryNoiseSSD->SetOwner(kTRUE);
AliITSGainSSDv2 *gainSSD = NULL;;
emptyssd = (TObject *)entryGainSSD->GetObject();
ssdobjectname = emptyssd->GetName();
if(ssdobjectname=="Gain") {
TObjArray *gainSSDOld = (TObjArray *)entryGainSSD->GetObject();
gainSSD = new AliITSGainSSDv2();
ReadOldSSDGain(gainSSDOld, gainSSD);
}
else if(ssdobjectname=="AliITSGainSSDv2")
gainSSD = (AliITSGainSSDv2 *)entryGainSSD->GetObject();
if(!cacheStatus)entryGainSSD->SetObject(NULL);
entryGainSSD->SetOwner(kTRUE);
AliITSBadChannelsSSDv2 *badChannelsSSD = NULL;
emptyssd = (TObject *)entryBadChannelsSSD->GetObject();
ssdobjectname = emptyssd->GetName();
if(ssdobjectname=="TObjArray") {
TObjArray *badChannelsSSDOld = (TObjArray *)entryBadChannelsSSD->GetObject();
badChannelsSSD = new AliITSBadChannelsSSDv2();
ReadOldSSDBadChannels(badChannelsSSDOld, badChannelsSSD);
}
else if(ssdobjectname=="AliITSBadChannelsSSDv2")
badChannelsSSD = (AliITSBadChannelsSSDv2*)entryBadChannelsSSD->GetObject();
if(!cacheStatus)entryBadChannelsSSD->SetObject(NULL);
entryBadChannelsSSD->SetOwner(kTRUE);
if(!cacheStatus){
delete entryNoiseSSD;
delete entryGainSSD;
delete entryBadChannelsSSD;
}
if ((!noiseSSD)|| (!gainSSD)|| (!badChannelsSSD)) {
AliWarning("Can not get SSD calibration from calibration database !");
return kFALSE;
}
fSSDCalibration->SetNoise(noiseSSD);
fSSDCalibration->SetGain(gainSSD);
fSSDCalibration->SetBadChannels(badChannelsSSD);
return kTRUE;
}
void AliITSDetTypeRec::SetDefaultClusterFindersV2(Bool_t rawdata, Bool_t fastSDD){
if(!GetITSgeom()){
Warning("SetDefaults","Null pointer to AliITSgeom !");
return;
}
AliITSClusterFinder *clf;
for(Int_t dettype=0;dettype<fgkNdettypes;dettype++){
if(dettype==0){
if(!GetReconstructionModel(dettype)){
clf = new AliITSClusterFinderV2SPD(this);
clf->InitGeometry();
if(!rawdata) clf->SetDigits(DigitsAddress(0));
SetReconstructionModel(dettype,clf);
}
}
if(dettype==1){
if(!GetReconstructionModel(dettype)){
if(fastSDD){
clf = new AliITSClusterFinderSDDfast(this);
}
else {
clf = new AliITSClusterFinderV2SDD(this);
}
clf->InitGeometry();
if(!rawdata) clf->SetDigits(DigitsAddress(1));
SetReconstructionModel(dettype,clf);
}
}
if(dettype==2){
if(!GetReconstructionModel(dettype)){
clf = new AliITSClusterFinderV2SSD(this);
clf->InitGeometry();
if(!rawdata) clf->SetDigits(DigitsAddress(2));
SetReconstructionModel(dettype,clf);
}
}
}
}
void AliITSDetTypeRec::MakeBranch(TTree* tree, Option_t* option){
Bool_t cR = (strstr(option,"R")!=0);
Bool_t cRF = (strstr(option,"RF")!=0);
if(cRF)cR = kFALSE;
if(cR) MakeBranchR(tree);
if(cRF) MakeBranchRF(tree);
}
void AliITSDetTypeRec::ResetDigits(){
if(!fDigits) return;
for(Int_t i=0;i<fgkNdettypes;i++){
ResetDigits(i);
}
}
void AliITSDetTypeRec::ResetDigits(Int_t branch){
if(fDigits->At(branch)) ((TClonesArray*)fDigits->At(branch))->Clear();
}
void AliITSDetTypeRec::MakeBranchR(TTree *treeR, Option_t *opt){
Int_t buffsz = 4000;
char branchname[30];
Bool_t oFast= (strstr(opt,"Fast")!=0);
Char_t detname[10] = "ITS";
if(oFast){
snprintf(branchname,29,"%sRecPointsF",detname);
} else {
snprintf(branchname,29,"%sRecPoints",detname);
}
if(!fRecPoints)fRecPoints = new TClonesArray("AliITSRecPoint",1000);
if (treeR)
MakeBranchInTree(treeR,branchname,0,&fRecPoints,buffsz,99);
}
void AliITSDetTypeRec::SetTreeAddressR(TTree* const treeR){
char branchname[30];
Char_t namedet[10]="ITS";
if(!treeR) return;
if(fRecPoints==0x0) fRecPoints = new TClonesArray("AliITSRecPoint",1000);
TBranch *branch;
snprintf(branchname,29,"%sRecPoints",namedet);
branch = treeR->GetBranch(branchname);
if (branch) {
branch->SetAddress(&fRecPoints);
}
else {
snprintf(branchname,29,"%sRecPointsF",namedet);
branch = treeR->GetBranch(branchname);
if (branch) {
branch->SetAddress(&fRecPoints);
}
}
}
void AliITSDetTypeRec::AddRecPoint(const AliITSRecPoint &r){
TClonesArray &lrecp = *fRecPoints;
new(lrecp[fNRecPoints++]) AliITSRecPoint(r);
}
void AliITSDetTypeRec::DigitsToRecPoints(TTree *treeD,TTree *treeR,Int_t lastentry,Option_t *opt, Int_t optCluFind){
const char *all = strstr(opt,"All");
const char *det[3] = {strstr(opt,"SPD"),strstr(opt,"SDD"),
strstr(opt,"SSD")};
if(optCluFind==0){
SetDefaultClusterFindersV2();
AliDebug(1,"V2 cluster finder has been selected \n");
}else{
SetDefaultClusterFindersV2(kFALSE,kTRUE);
AliDebug(1,"SPD and SSD V2 Cluster Finder - SDD fast Cluster Finder \n");
}
ResetFastOrFiredMap();
if (all || det[0]) {
AliRunLoader* runLoader = AliRunLoader::Instance();
AliITSLoader* itsLoader = (AliITSLoader*) runLoader->GetLoader("ITSLoader");
if (!itsLoader) {
AliError("ITS loader is NULL.");
}
else {
fFOSignals = (AliITSFOSignalsSPD*)itsLoader->TreeD()->GetUserInfo()->FindObject("AliITSFOSignalsSPD");
if(!fFOSignals) AliError("FO signals not retrieved");
}
}
AliITSClusterFinder *rec = 0;
Int_t id,module,first=0;
for(module=0;module<GetITSgeom()->GetIndexMax();module++){
id = GetITSgeom()->GetModuleType(module);
if (!all && !det[id]) continue;
if(det[id]) first = GetITSgeom()->GetStartDet(id);
rec = (AliITSClusterFinder*)GetReconstructionModel(id);
TClonesArray *itsDigits = DigitsAddress(id);
if (!rec){
AliFatal("The reconstruction class was not instanciated!");
return;
}
ResetDigits();
if (all) {
treeD->GetEvent(lastentry+module);
}
else {
treeD->GetEvent(lastentry+(module-first));
}
Int_t ndigits = itsDigits->GetEntriesFast();
if (ndigits>0 || id==0) {
rec->SetDetTypeRec(this);
rec->SetDigits(DigitsAddress(id));
rec->FindRawClusters(module);
}
treeR->Fill();
ResetRecPoints();
}
if (all || det[0]) {
RemoveFastOrFiredInActive();
RemoveFastOrFiredFromDead(GetFiredChipMap(treeR));
}
AliITSRecPointContainer* rpcont = AliITSRecPointContainer::Instance();
Int_t nClu[6];
nClu[0]=rpcont->GetNClustersInLayer(1,treeR);
for(Int_t iLay=2; iLay<=6; iLay++) nClu[iLay-1]=rpcont->GetNClustersInLayerFast(iLay);
AliInfo(Form("Number of RecPoints in ITS Layers = %d %d %d %d %d %d",
nClu[0],nClu[1],nClu[2],nClu[3],nClu[4],nClu[5]));
}
void AliITSDetTypeRec::DigitsToRecPoints(AliRawReader* rawReader,TTree *treeR,Option_t *opt){
const char *all = strstr(opt,"All");
const char *det[3] = {strstr(opt,"SPD"),strstr(opt,"SDD"),
strstr(opt,"SSD")};
Int_t id=0;
AliITSRecPointContainer* rpc = AliITSRecPointContainer::Instance();
rpc->FullReset();
TClonesArray* array = rpc->UncheckedGetClusters(0);
TBranch *branch = treeR->Branch("ITSRecPoints",&array);
DigitsToRecPoints(rawReader,opt);
Int_t nClusters =0;
for(Int_t iModule=0;iModule<GetITSgeom()->GetIndexMax();iModule++){
id = GetITSgeom()->GetModuleType(iModule);
if (!all && !det[id]) continue;
array = rpc->UncheckedGetClusters(iModule);
if(!array){
AliDebug(1,Form("data for module %d missing!",iModule));
}
branch->SetAddress(&array);
treeR->Fill();
nClusters+=array->GetEntriesFast();
}
rpc->FullReset();
AliITSRecPointContainer* rpcont = AliITSRecPointContainer::Instance();
Int_t nClu[6];
nClu[0]=rpcont->GetNClustersInLayer(1,treeR);
for(Int_t iLay=2; iLay<=6; iLay++) nClu[iLay-1]=rpcont->GetNClustersInLayerFast(iLay);
AliInfo(Form("Number of RecPoints in ITS Layers = %d %d %d %d %d %d, Total = %d",
nClu[0],nClu[1],nClu[2],nClu[3],nClu[4],nClu[5],nClusters));
}
void AliITSDetTypeRec::DigitsToRecPoints(AliRawReader* rawReader,Option_t *opt){
const char *all = strstr(opt,"All");
const char *det[3] = {strstr(opt,"SPD"),strstr(opt,"SDD"),
strstr(opt,"SSD")};
ResetFastOrFiredMap();
AliITSClusterFinder *rec = 0;
Int_t id=0;
for(id=0;id<3;id++){
if (!all && !det[id]) continue;
rec = (AliITSClusterFinder*)GetReconstructionModel(id);
if (!rec){
AliFatal("The reconstruction class was not instantiated");
return;
}
rec->SetDetTypeRec(this);
rec->RawdataToClusters(rawReader);
}
if (all || det[0]) {
RemoveFastOrFiredInActive();
RemoveFastOrFiredFromDead(GetFiredChipMap());
}
}
void AliITSDetTypeRec::ReadOldSSDNoise(const TObjArray *array,
AliITSNoiseSSDv2 *noiseSSD) {
const Int_t fgkSSDSTRIPSPERMODULE = 1536;
const Int_t fgkSSDPSIDESTRIPSPERMODULE = 768;
Int_t gNMod = array->GetEntries();
AliInfo("Converting old calibration object for noise...\n");
Double_t noise = 0.0;
for (Int_t iModule = 0; iModule < gNMod; iModule++) {
AliITSNoiseSSD *noiseModule = (AliITSNoiseSSD*) (array->At(iModule));
for(Int_t iStrip = 0; iStrip < fgkSSDSTRIPSPERMODULE; iStrip++) {
noise = (iStrip < fgkSSDPSIDESTRIPSPERMODULE) ? noiseModule->GetNoiseP(iStrip) : noiseModule->GetNoiseN(1535 - iStrip);
if(iStrip < fgkSSDPSIDESTRIPSPERMODULE)
noiseSSD->AddNoiseP(iModule,iStrip,noise);
if(iStrip >= fgkSSDPSIDESTRIPSPERMODULE)
noiseSSD->AddNoiseN(iModule,1535 - iStrip,noise);
}
}
}
void AliITSDetTypeRec::ReadOldSSDBadChannels(const TObjArray *array,
AliITSBadChannelsSSDv2 *badChannelsSSD) {
Int_t gNMod = array->GetEntries();
AliInfo("Converting old calibration object for bad channels...");
for (Int_t iModule = 0; iModule < gNMod; iModule++) {
AliITSBadChannelsSSD *bad = (AliITSBadChannelsSSD*) (array->At(iModule));
TArrayI arrayPSide = bad->GetBadPChannelsList();
for(Int_t iPCounter = 0; iPCounter < arrayPSide.GetSize(); iPCounter++)
badChannelsSSD->AddBadChannelP(iModule,
iPCounter,
(Char_t)arrayPSide.At(iPCounter));
TArrayI arrayNSide = bad->GetBadNChannelsList();
for(Int_t iNCounter = 0; iNCounter < arrayNSide.GetSize(); iNCounter++)
badChannelsSSD->AddBadChannelN(iModule,
iNCounter,
(Char_t)arrayNSide.At(iNCounter));
}
}
void AliITSDetTypeRec::ReadOldSSDGain(const TObjArray *array,
AliITSGainSSDv2 *gainSSD) {
Int_t gNMod = array->GetEntries();
AliInfo("Converting old calibration object for gain...\n");
for (Int_t iModule = 0; iModule < gNMod; iModule++) {
AliITSGainSSD *gainModule = (AliITSGainSSD*) (array->At(iModule));
TArrayF arrayPSide = gainModule->GetGainP();
for(Int_t iPCounter = 0; iPCounter < arrayPSide.GetSize(); iPCounter++)
gainSSD->AddGainP(iModule,
iPCounter,
arrayPSide.At(iPCounter));
TArrayF arrayNSide = gainModule->GetGainN();
for(Int_t iNCounter = 0; iNCounter < arrayNSide.GetSize(); iNCounter++)
gainSSD->AddGainN(iModule,
iNCounter,
arrayNSide.At(iNCounter));
}
}
void AliITSDetTypeRec::RemoveFastOrFiredInActive() {
if (fTriggerConditions==NULL) {
AliError("Pixel trigger conditions are missing.");
return;
}
Int_t eq = -1;
Int_t hs = -1;
Int_t chip = -1;
while (fTriggerConditions->GetNextInActiveChip(eq,hs,chip)) {
UInt_t chipKey = AliITSRawStreamSPD::GetOfflineChipKeyFromOnline(eq,hs,chip);
fFastOrFiredMap.SetBitNumber(chipKey,kFALSE);
}
}
TBits AliITSDetTypeRec::GetFiredChipMap() const {
AliITSRecPointContainer* rpc = AliITSRecPointContainer::Instance();
TBits isfiredchip(1200);
AliITSsegmentationSPD *segSPD = (AliITSsegmentationSPD*)GetSegmentationModel(0);
if(!segSPD) {
AliError("no segmentation model for SPD available, the fired chip map is empty. Exiting");
return isfiredchip;
}
for(Int_t imod =0; imod < fgkDefaultNModulesSPD; imod++){
TClonesArray *array = rpc->UncheckedGetClusters(imod);
if(!array) continue;
Int_t nCluster = array->GetEntriesFast();
while(nCluster--) {
AliITSRecPoint* cluster = (AliITSRecPoint*)array->UncheckedAt(nCluster);
if (cluster->GetLayer()>1)continue;
Float_t local[3]={-1,-1};
local[1]=cluster->GetDetLocalX();
local[0]=cluster->GetDetLocalZ();
Int_t eq = AliITSRawStreamSPD::GetOnlineEqIdFromOffline(imod);
Int_t hs = AliITSRawStreamSPD::GetOnlineHSFromOffline(imod);
Int_t row, col;
segSPD->LocalToDet(0.5,local[0],row,col);
Int_t chip = AliITSRawStreamSPD::GetOnlineChipFromOffline(imod,col);
Int_t chipkey = AliITSRawStreamSPD::GetOfflineChipKeyFromOnline(eq,hs,chip);
isfiredchip.SetBitNumber(chipkey,kTRUE);
}
}
return isfiredchip;
}
TBits AliITSDetTypeRec::GetFiredChipMap(TTree *treeR) const{
TBits isfiredchip(1200);
if(!treeR) {
AliError("no treeR. fired chip map stays empty. Exiting.");
return isfiredchip;
}
AliITSRecPointContainer* rpcont=AliITSRecPointContainer::Instance();
TClonesArray *recpoints = NULL;
rpcont->FetchClusters(0,treeR);
if(!rpcont->GetStatusOK() || !rpcont->IsSPDActive()){
AliError("no clusters. fired chip map stays empty. Exiting.");
return isfiredchip;
}
AliITSsegmentationSPD *segSPD = (AliITSsegmentationSPD*)GetSegmentationModel(0);
for(Int_t imod =0; imod < fgkDefaultNModulesSPD; imod++){
recpoints = rpcont->UncheckedGetClusters(imod);
Int_t nCluster = recpoints->GetEntriesFast();
while(nCluster--) {
AliITSRecPoint* cluster = (AliITSRecPoint*)recpoints->UncheckedAt(nCluster);
if (cluster->GetLayer()>1)continue;
Float_t local[3]={-1,-1};
local[1]=cluster->GetDetLocalX();
local[0]=cluster->GetDetLocalZ();
Int_t eq = AliITSRawStreamSPD::GetOnlineEqIdFromOffline(imod);
Int_t hs = AliITSRawStreamSPD::GetOnlineHSFromOffline(imod);
Int_t row, col;
segSPD->LocalToDet(0.5,local[0],row,col);
Int_t chip = AliITSRawStreamSPD::GetOnlineChipFromOffline(imod,col);
Int_t chipkey = AliITSRawStreamSPD::GetOfflineChipKeyFromOnline(eq,hs,chip);
isfiredchip.SetBitNumber(chipkey,kTRUE);
}
}
return isfiredchip;
}
void AliITSDetTypeRec::RemoveFastOrFiredFromDead(TBits firedchipmap){
for(Int_t chipKey=0; chipKey<1200; chipKey++){
if(!fFastOrFiredMap.TestBitNumber(chipKey)) continue;
if(!firedchipmap.TestBitNumber(chipKey)) {
fFastOrFiredMap.SetBitNumber(chipKey,kFALSE);
AliDebug(2,Form("removing bit in key %i \n ",chipKey));
}
}
}
void AliITSDetTypeRec::SetFastOrFiredMapOnline(UInt_t eq, UInt_t hs, UInt_t chip) {
Int_t chipKey = AliITSRawStreamSPD::GetOfflineChipKeyFromOnline(eq,hs,chip);
return SetFastOrFiredMap(chipKey);
}
AliITSDetTypeRec.cxx:1000 AliITSDetTypeRec.cxx:1001 AliITSDetTypeRec.cxx:1002 AliITSDetTypeRec.cxx:1003 AliITSDetTypeRec.cxx:1004 AliITSDetTypeRec.cxx:1005 AliITSDetTypeRec.cxx:1006 AliITSDetTypeRec.cxx:1007 AliITSDetTypeRec.cxx:1008 AliITSDetTypeRec.cxx:1009 AliITSDetTypeRec.cxx:1010 AliITSDetTypeRec.cxx:1011 AliITSDetTypeRec.cxx:1012 AliITSDetTypeRec.cxx:1013 AliITSDetTypeRec.cxx:1014 AliITSDetTypeRec.cxx:1015 AliITSDetTypeRec.cxx:1016 AliITSDetTypeRec.cxx:1017 AliITSDetTypeRec.cxx:1018 AliITSDetTypeRec.cxx:1019 AliITSDetTypeRec.cxx:1020 AliITSDetTypeRec.cxx:1021 AliITSDetTypeRec.cxx:1022 AliITSDetTypeRec.cxx:1023 AliITSDetTypeRec.cxx:1024 AliITSDetTypeRec.cxx:1025 AliITSDetTypeRec.cxx:1026 AliITSDetTypeRec.cxx:1027 AliITSDetTypeRec.cxx:1028 AliITSDetTypeRec.cxx:1029 AliITSDetTypeRec.cxx:1030 AliITSDetTypeRec.cxx:1031 AliITSDetTypeRec.cxx:1032 AliITSDetTypeRec.cxx:1033 AliITSDetTypeRec.cxx:1034 AliITSDetTypeRec.cxx:1035 AliITSDetTypeRec.cxx:1036 AliITSDetTypeRec.cxx:1037 AliITSDetTypeRec.cxx:1038 AliITSDetTypeRec.cxx:1039 AliITSDetTypeRec.cxx:1040 AliITSDetTypeRec.cxx:1041 AliITSDetTypeRec.cxx:1042 AliITSDetTypeRec.cxx:1043 AliITSDetTypeRec.cxx:1044 AliITSDetTypeRec.cxx:1045 AliITSDetTypeRec.cxx:1046 AliITSDetTypeRec.cxx:1047 AliITSDetTypeRec.cxx:1048 AliITSDetTypeRec.cxx:1049 AliITSDetTypeRec.cxx:1050 AliITSDetTypeRec.cxx:1051 AliITSDetTypeRec.cxx:1052 AliITSDetTypeRec.cxx:1053 AliITSDetTypeRec.cxx:1054 AliITSDetTypeRec.cxx:1055 AliITSDetTypeRec.cxx:1056 AliITSDetTypeRec.cxx:1057 AliITSDetTypeRec.cxx:1058 AliITSDetTypeRec.cxx:1059 AliITSDetTypeRec.cxx:1060 AliITSDetTypeRec.cxx:1061 AliITSDetTypeRec.cxx:1062 AliITSDetTypeRec.cxx:1063 AliITSDetTypeRec.cxx:1064 AliITSDetTypeRec.cxx:1065 AliITSDetTypeRec.cxx:1066 AliITSDetTypeRec.cxx:1067 AliITSDetTypeRec.cxx:1068 AliITSDetTypeRec.cxx:1069 AliITSDetTypeRec.cxx:1070 AliITSDetTypeRec.cxx:1071 AliITSDetTypeRec.cxx:1072 AliITSDetTypeRec.cxx:1073 AliITSDetTypeRec.cxx:1074 AliITSDetTypeRec.cxx:1075 AliITSDetTypeRec.cxx:1076 AliITSDetTypeRec.cxx:1077 AliITSDetTypeRec.cxx:1078 AliITSDetTypeRec.cxx:1079 AliITSDetTypeRec.cxx:1080 AliITSDetTypeRec.cxx:1081 AliITSDetTypeRec.cxx:1082 AliITSDetTypeRec.cxx:1083 AliITSDetTypeRec.cxx:1084 AliITSDetTypeRec.cxx:1085 AliITSDetTypeRec.cxx:1086 AliITSDetTypeRec.cxx:1087 AliITSDetTypeRec.cxx:1088 AliITSDetTypeRec.cxx:1089 AliITSDetTypeRec.cxx:1090 AliITSDetTypeRec.cxx:1091 AliITSDetTypeRec.cxx:1092 AliITSDetTypeRec.cxx:1093 AliITSDetTypeRec.cxx:1094 AliITSDetTypeRec.cxx:1095 AliITSDetTypeRec.cxx:1096 AliITSDetTypeRec.cxx:1097 AliITSDetTypeRec.cxx:1098 AliITSDetTypeRec.cxx:1099 AliITSDetTypeRec.cxx:1100 AliITSDetTypeRec.cxx:1101 AliITSDetTypeRec.cxx:1102 AliITSDetTypeRec.cxx:1103 AliITSDetTypeRec.cxx:1104 AliITSDetTypeRec.cxx:1105 AliITSDetTypeRec.cxx:1106 AliITSDetTypeRec.cxx:1107 AliITSDetTypeRec.cxx:1108 AliITSDetTypeRec.cxx:1109 AliITSDetTypeRec.cxx:1110 AliITSDetTypeRec.cxx:1111 AliITSDetTypeRec.cxx:1112 AliITSDetTypeRec.cxx:1113 AliITSDetTypeRec.cxx:1114 AliITSDetTypeRec.cxx:1115 AliITSDetTypeRec.cxx:1116 AliITSDetTypeRec.cxx:1117 AliITSDetTypeRec.cxx:1118 AliITSDetTypeRec.cxx:1119 AliITSDetTypeRec.cxx:1120 AliITSDetTypeRec.cxx:1121 AliITSDetTypeRec.cxx:1122 AliITSDetTypeRec.cxx:1123 AliITSDetTypeRec.cxx:1124 AliITSDetTypeRec.cxx:1125 AliITSDetTypeRec.cxx:1126 AliITSDetTypeRec.cxx:1127 AliITSDetTypeRec.cxx:1128 AliITSDetTypeRec.cxx:1129 AliITSDetTypeRec.cxx:1130 AliITSDetTypeRec.cxx:1131 AliITSDetTypeRec.cxx:1132 AliITSDetTypeRec.cxx:1133 AliITSDetTypeRec.cxx:1134 AliITSDetTypeRec.cxx:1135 AliITSDetTypeRec.cxx:1136 AliITSDetTypeRec.cxx:1137 AliITSDetTypeRec.cxx:1138 AliITSDetTypeRec.cxx:1139 AliITSDetTypeRec.cxx:1140 AliITSDetTypeRec.cxx:1141 AliITSDetTypeRec.cxx:1142 AliITSDetTypeRec.cxx:1143 AliITSDetTypeRec.cxx:1144 AliITSDetTypeRec.cxx:1145 AliITSDetTypeRec.cxx:1146 AliITSDetTypeRec.cxx:1147 AliITSDetTypeRec.cxx:1148 AliITSDetTypeRec.cxx:1149 AliITSDetTypeRec.cxx:1150 AliITSDetTypeRec.cxx:1151 AliITSDetTypeRec.cxx:1152 AliITSDetTypeRec.cxx:1153 AliITSDetTypeRec.cxx:1154 AliITSDetTypeRec.cxx:1155 AliITSDetTypeRec.cxx:1156 AliITSDetTypeRec.cxx:1157 AliITSDetTypeRec.cxx:1158 AliITSDetTypeRec.cxx:1159 AliITSDetTypeRec.cxx:1160 AliITSDetTypeRec.cxx:1161 AliITSDetTypeRec.cxx:1162 AliITSDetTypeRec.cxx:1163 AliITSDetTypeRec.cxx:1164 AliITSDetTypeRec.cxx:1165 AliITSDetTypeRec.cxx:1166 AliITSDetTypeRec.cxx:1167 AliITSDetTypeRec.cxx:1168 AliITSDetTypeRec.cxx:1169 AliITSDetTypeRec.cxx:1170 AliITSDetTypeRec.cxx:1171 AliITSDetTypeRec.cxx:1172 AliITSDetTypeRec.cxx:1173 AliITSDetTypeRec.cxx:1174 AliITSDetTypeRec.cxx:1175 AliITSDetTypeRec.cxx:1176 AliITSDetTypeRec.cxx:1177 AliITSDetTypeRec.cxx:1178 AliITSDetTypeRec.cxx:1179 AliITSDetTypeRec.cxx:1180 AliITSDetTypeRec.cxx:1181 AliITSDetTypeRec.cxx:1182 AliITSDetTypeRec.cxx:1183 AliITSDetTypeRec.cxx:1184 AliITSDetTypeRec.cxx:1185 AliITSDetTypeRec.cxx:1186 AliITSDetTypeRec.cxx:1187 AliITSDetTypeRec.cxx:1188 AliITSDetTypeRec.cxx:1189 AliITSDetTypeRec.cxx:1190 AliITSDetTypeRec.cxx:1191 AliITSDetTypeRec.cxx:1192 AliITSDetTypeRec.cxx:1193 AliITSDetTypeRec.cxx:1194 AliITSDetTypeRec.cxx:1195 AliITSDetTypeRec.cxx:1196 AliITSDetTypeRec.cxx:1197 AliITSDetTypeRec.cxx:1198 AliITSDetTypeRec.cxx:1199 AliITSDetTypeRec.cxx:1200 AliITSDetTypeRec.cxx:1201 AliITSDetTypeRec.cxx:1202 AliITSDetTypeRec.cxx:1203 AliITSDetTypeRec.cxx:1204 AliITSDetTypeRec.cxx:1205 AliITSDetTypeRec.cxx:1206 AliITSDetTypeRec.cxx:1207 AliITSDetTypeRec.cxx:1208 AliITSDetTypeRec.cxx:1209 AliITSDetTypeRec.cxx:1210 AliITSDetTypeRec.cxx:1211 AliITSDetTypeRec.cxx:1212 AliITSDetTypeRec.cxx:1213 AliITSDetTypeRec.cxx:1214 AliITSDetTypeRec.cxx:1215 AliITSDetTypeRec.cxx:1216 AliITSDetTypeRec.cxx:1217 AliITSDetTypeRec.cxx:1218 AliITSDetTypeRec.cxx:1219 AliITSDetTypeRec.cxx:1220 AliITSDetTypeRec.cxx:1221 AliITSDetTypeRec.cxx:1222 AliITSDetTypeRec.cxx:1223 AliITSDetTypeRec.cxx:1224 AliITSDetTypeRec.cxx:1225 AliITSDetTypeRec.cxx:1226 AliITSDetTypeRec.cxx:1227 AliITSDetTypeRec.cxx:1228 AliITSDetTypeRec.cxx:1229 AliITSDetTypeRec.cxx:1230 AliITSDetTypeRec.cxx:1231 AliITSDetTypeRec.cxx:1232 AliITSDetTypeRec.cxx:1233 AliITSDetTypeRec.cxx:1234 AliITSDetTypeRec.cxx:1235 AliITSDetTypeRec.cxx:1236 AliITSDetTypeRec.cxx:1237 AliITSDetTypeRec.cxx:1238 AliITSDetTypeRec.cxx:1239 AliITSDetTypeRec.cxx:1240 AliITSDetTypeRec.cxx:1241 AliITSDetTypeRec.cxx:1242