X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ITS%2FAliITS.cxx;h=9a7b54119a9ea4ac0712de5c6be82a200433682c;hb=67675e42239cb404a3e742b6797e4a4f5a7a4fb4;hp=9d729977539b00d283a5425f251029b1eb093b12;hpb=023ae34bddd5e368420a6f37f069b61b7d98fa4a;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/AliITS.cxx b/ITS/AliITS.cxx index 9d729977539..9a7b54119a9 100644 --- a/ITS/AliITS.cxx +++ b/ITS/AliITS.cxx @@ -85,13 +85,32 @@ the AliITS class. #include "AliMC.h" #include "AliITSDigitizer.h" #include "AliITSRecPoint.h" +#include "AliITSsegmentationSPD.h" +#include "AliITSsegmentationSDD.h" +#include "AliITSsegmentationSSD.h" +#include "AliITSRawStreamSPD.h" +#include "AliITSRawStreamSSD.h" +#include "AliITSRawStreamSDD.h" +#include "AliRawReader.h" #include "AliRun.h" #include "AliLog.h" +#include "AliITSInitGeometry.h" +#include "AliITSFOSignalsSPD.h" ClassImp(AliITS) //______________________________________________________________________ -AliITS::AliITS() : AliDetector(){ +AliITS::AliITS() : AliDetector(), +fDetTypeSim(0), +fEuclidOut(0), +fOpt("All"), +fIdN(0), +fIdSens(0), +fIdName(0), +fITSmodules(0), +fTiming(kFALSE), +fSimuParam(0) +{ // Default initializer for ITS // The default constructor of the AliITS class. In addition to // creating the AliITS class it zeros the variables fIshunt (a member @@ -99,21 +118,60 @@ AliITS::AliITS() : AliDetector(){ // fIdSens, and fIdName. The AliDetector default constructor // is also called. - fEuclidOut=0; - fOpt="All"; - fIdSens=0; - fIdName=0; - fDetTypeSim=0; - fIshunt = 0; // not zeroed in AliDetector. - fHits =0; - fNhits=0; - fITSmodules=0; - // SetDetectors(); // default to fOpt="All". This variable not written out. - SetMarkerColor(kRed); +//PH SetMarkerColor(kRed); +} +//______________________________________________________________________ +AliITS::AliITS(const Char_t *title): + AliDetector("ITS",title), + fDetTypeSim(0), + fEuclidOut(0), + fOpt("All"), + fIdN(0), + fIdSens(0), + fIdName(0), + fITSmodules(0), + fTiming(kFALSE), + fSimuParam(0) +{ + // The standard Constructor for the ITS class. + // It also zeros the variables + // fIshunt (a member of AliDetector class), fEuclidOut, and zeros + // the pointers fIdSens and fIdName. To help in displaying hits via the + // ROOT macro display.C AliITS also sets the marker color to red. The + // variables passes with this constructor, const char *name and *title, + // are used by the constructor of AliDetector class. See AliDetector + // class for a description of these parameters and its constructor + // functions. + // Inputs: + // Char_t *title Simulation title for the ITS + // Outputs: + // none. + // Return: + // none. + + fHits = new TClonesArray("AliITShit",1560); // from AliDetector + if(gAlice->GetMCApp()) gAlice->GetMCApp()->AddHitList(fHits); + //fNhits=0; //done in AliDetector(name,title) + SetDetectors(); // default to fOpt="All". This variable not written out. + fDetTypeSim = new AliITSDetTypeSim(); + //PH SetMarkerColor(kRed); + if(!fLoader) MakeLoader(AliConfig::GetDefaultEventFolderName()); + fDetTypeSim->SetLoader((AliITSLoader*)fLoader); } //______________________________________________________________________ -AliITS::AliITS(const char *name, const char *title):AliDetector(name,title){ +AliITS::AliITS(const char *name, const char *title): + AliDetector(name,title), + fDetTypeSim(0), + fEuclidOut(0), + fOpt("All"), + fIdN(0), + fIdSens(0), + fIdName(0), + fITSmodules(0), + fTiming(kFALSE), + fSimuParam(0) +{ // The standard Constructor for the ITS class. // It also zeros the variables // fIshunt (a member of AliDetector class), fEuclidOut, and zeros @@ -124,28 +182,14 @@ AliITS::AliITS(const char *name, const char *title):AliDetector(name,title){ // class for a description of these parameters and its constructor // functions. - fEuclidOut=0; - fOpt="All"; - fIdSens=0; - fIdName=0; - fDetTypeSim=0; fHits = new TClonesArray("AliITShit",1560); if(gAlice->GetMCApp()) gAlice->GetMCApp()->AddHitList(fHits); - fNhits=0; - fITSmodules = 0; + //fNhits=0; //done in AliDetector(name,title) - fIshunt = 0; // not zeroed in AliDetector - // Not done in AliDetector. - - fEuclidOut = 0; SetDetectors(); // default to fOpt="All". This variable not written out. - - fIdName = 0; - fIdSens = 0; - + fDetTypeSim = new AliITSDetTypeSim(); - - SetMarkerColor(kRed); + //PH SetMarkerColor(kRed); if(!fLoader) MakeLoader(AliConfig::GetDefaultEventFolderName()); fDetTypeSim->SetLoader((AliITSLoader*)fLoader); @@ -181,38 +225,10 @@ AliITS::~AliITS(){ delete fDetTypeSim; fDetTypeSim = 0; } -} -//______________________________________________________________________ -AliITS::AliITS(const AliITS &source) : AliDetector(source){ - // Copy constructor. This is a function which is not allowed to be - // done to the ITS. It exits with an error. - // Inputs: - // AliITS &source An AliITS class. - // Outputs: - // none. - // Return: - // none. - - if(this==&source) return; - Error("Copy constructor", - "You are not allowed to make a copy of the AliITS"); - exit(1); -} -//______________________________________________________________________ -AliITS& AliITS::operator=(const AliITS &source){ - // Assignment operator. This is a function which is not allowed to be - // done to the ITS. It exits with an error. - // Inputs: - // AliITS &source An AliITS class. - // Outputs: - // none. - // Return: - // none. - - if(this==&source) return *this; - Error("operator=","You are not allowed to make a copy of the AliITS"); - exit(1); - return *this; //fake return + if(fSimuParam){ + delete fSimuParam; + fSimuParam=0; + } } //______________________________________________________________________ AliDigitizer* AliITS::CreateDigitizer(AliRunDigitizer* manager)const{ @@ -243,27 +259,10 @@ void AliITS::Init(){ // Return: // none. Int_t i; - - SetDefaults(); // Array of TStrings if(gMC) for(i=0;iVolId(fIdName[i]); - WriteGeometry(); -} - -//______________________________________________________________________ -void AliITS::WriteGeometry(){ - - //Writes ITS geometry on gAlice - - if(!fLoader) MakeLoader(AliConfig::GetDefaultEventFolderName()); - AliRunLoader* rl = fLoader->GetRunLoader(); - rl->CdGAFile(); - AliITSgeom* geom = GetITSgeom(); - geom->Write(); - } - //______________________________________________________________________ void AliITS::SetDefaults(){ // sets the default segmentation, response, digit and raw cluster classes. @@ -274,14 +273,13 @@ void AliITS::SetDefaults(){ // Return: // none. AliInfoClass("AliITS::Setting Defaults"); - if(!fDetTypeSim) { Error("SetDefaults()","fDetTypeSim is 0!"); return; } fDetTypeSim->SetDefaults(); - + if(fSimuParam) fDetTypeSim->SetSimuParam(fSimuParam); } //______________________________________________________________________ @@ -299,6 +297,7 @@ void AliITS::SetDefaultSimulation(){ } fDetTypeSim->SetDefaultSimulation(); + if(fSimuParam) fDetTypeSim->SetSimuParam(fSimuParam); } @@ -353,7 +352,6 @@ void AliITS::MakeBranchS(const char* fl){ sprintf(branchname,"%s",GetName()); if(fLoader->TreeS()){ - if(fDetTypeSim->GetSDigits()==0x0) fDetTypeSim->SetSDigits(new TClonesArray("AliITSpListItem",1000)); TClonesArray* sdig = (TClonesArray*)fDetTypeSim->GetSDigits(); MakeBranchInTree(fLoader->TreeS(),branchname,&sdig,buffersize,fl); } @@ -367,6 +365,7 @@ void AliITS::MakeBranchD(const char* file){ return; } fDetTypeSim->SetLoader((AliITSLoader*)fLoader); + if(fSimuParam) fDetTypeSim->SetSimuParam(fSimuParam); MakeBranchInTreeD(fLoader->TreeD(),file); } @@ -378,9 +377,10 @@ void AliITS:: MakeBranchInTreeD(TTree* treeD, const char* file){ Error("MakeBranchS","fDetTypeSim is 0!"); } fDetTypeSim->SetLoader((AliITSLoader*)fLoader); + if(fSimuParam) fDetTypeSim->SetSimuParam(fSimuParam); const Char_t *det[3] = {"SPD","SDD","SSD"}; - Char_t* digclass; + const Char_t* digclass; Int_t buffersize = 4000; Char_t branchname[30]; @@ -417,6 +417,7 @@ void AliITS::SetTreeAddress(){ } fDetTypeSim->SetLoader((AliITSLoader*)fLoader); + if(fSimuParam) fDetTypeSim->SetSimuParam(fSimuParam); TTree *treeS = fLoader->TreeS(); TTree *treeD = fLoader->TreeD(); @@ -492,8 +493,6 @@ void AliITS::FillModules(Int_t evnt,Int_t bgrev,Int_t nmodules, } - - //______________________________________________________________________ void AliITS::FillModules(TTree *treeH, Int_t mask) { // fill the modules with the sorted by module hits; @@ -546,7 +545,7 @@ void AliITS::FillModules(TTree *treeH, Int_t mask) { } //______________________________________________________________________ -void AliITS::InitModules(Int_t size,Int_t &nmodules){ +Bool_t AliITS::InitModules(Int_t size,Int_t &nmodules){ // Initialize the modules array. // Inputs: // Int_t size Size of array of the number of modules to be @@ -564,15 +563,16 @@ void AliITS::InitModules(Int_t size,Int_t &nmodules){ if(!fDetTypeSim) { Error("InitModules","fDetTypeSim is null!"); - return; + return kFALSE; } + if(fSimuParam) fDetTypeSim->SetSimuParam(fSimuParam); Int_t nl,indexMAX,index; if(size<=0){ // default to using data stored in AliITSgeom if(fDetTypeSim->GetITSgeom()==0) { Error("InitModules","fITSgeom not defined"); - return; + return kFALSE; } // end if fITSgeom==0 nl = fDetTypeSim->GetITSgeom()->GetNlayers(); indexMAX = fDetTypeSim->GetITSgeom()->GetIndexMax(); @@ -589,6 +589,7 @@ void AliITS::InitModules(Int_t size,Int_t &nmodules){ nmodules = size; } // end i size<=0 + return kTRUE; } //______________________________________________________________________ void AliITS::Hits2SDigits(){ @@ -601,8 +602,7 @@ void AliITS::Hits2SDigits(){ if(!fDetTypeSim) { Error("Hits2SDigits","fDetTypeSim is null!"); - return; - + return; } SetDefaults(); @@ -610,6 +610,8 @@ void AliITS::Hits2SDigits(){ fLoader->LoadSDigits("recreate"); AliRunLoader* rl = fLoader->GetRunLoader(); fDetTypeSim->SetLoader((AliITSLoader*)fLoader); + if(fSimuParam) fDetTypeSim->SetSimuParam(fSimuParam); + for (Int_t iEvent = 0; iEvent < rl->GetNumberOfEvents(); iEvent++) { // Do the Hits to Digits operation. Use Standard input values. // Event number from file, no background hit merging , use size from @@ -635,6 +637,7 @@ void AliITS::Hits2Digits(){ } fDetTypeSim->SetLoader((AliITSLoader*)fLoader); + if(fSimuParam) fDetTypeSim->SetSimuParam(fSimuParam); SetDefaults(); fLoader->LoadHits("read"); @@ -680,6 +683,7 @@ void AliITS::HitsToDigits(Int_t evNumber,Int_t bgrev,Int_t size, return; } fDetTypeSim->SetLoader((AliITSLoader*)fLoader); + if(fSimuParam) fDetTypeSim->SetSimuParam(fSimuParam); if(!GetITSgeom()) return; // need transformations to do digitization. AliITSgeom *geom = GetITSgeom(); @@ -693,6 +697,9 @@ void AliITS::HitsToDigits(Int_t evNumber,Int_t bgrev,Int_t size, Int_t nmodules; InitModules(size,nmodules); FillModules(evNumber,bgrev,nmodules,option,filename); + + // Reset Fast-OR signals for this event + fDetTypeSim->ResetFOSignals(); AliITSsimulation *sim = 0; AliITSmodule *mod = 0; @@ -715,6 +722,17 @@ void AliITS::HitsToDigits(Int_t evNumber,Int_t bgrev,Int_t size, } // end for module ClearModules(); + + // Add random noise to FO signals + if (all || det[0]) { // SPD present + fDetTypeSim->ProcessNoiseForFastOr(); + } + + // Add Fast-OR signals to event (only one object per event) + if (all || det[0]) { // SPD present + fDetTypeSim->WriteFOSignals(); + } + fLoader->TreeD()->GetEntries(); fLoader->TreeD()->AutoSave(); @@ -731,6 +749,7 @@ void AliITS::Hits2PreDigits(){ } fDetTypeSim->SetLoader((AliITSLoader*)fLoader); + if(fSimuParam) fDetTypeSim->SetSimuParam(fSimuParam); SetDefaults(); HitsToPreDigits(fLoader->GetRunLoader()->GetEventNumber(), @@ -765,6 +784,7 @@ void AliITS::HitsToPreDigits(Int_t evNumber,Int_t bgrev,Int_t size, return; } fDetTypeSim->SetLoader((AliITSLoader*)fLoader); + if(fSimuParam) fDetTypeSim->SetSimuParam(fSimuParam); if(!GetITSgeom()){ Error("HitsToPreDigits","fGeom is null!"); @@ -881,6 +901,7 @@ void AliITS::HitsToFastRecPoints(Int_t evNumber,Int_t bgrev,Int_t size, mod = (AliITSmodule *)fITSmodules->At(module); sim->CreateFastRecPoints(mod,module,gRandom,ptarray); lTR->Fill(); + ptarray->Clear(); } // end for module ClearModules(); @@ -917,7 +938,7 @@ Int_t AliITS::Hits2Clusters(TTree *hTree, TTree *cTree) { points->Clear(); } - Info("Hits2Clusters","Number of found fast clusters : %d",ncl); + AliDebug(1,Form("Number of found fast clusters : %d",ncl)); //cTree->Write(); @@ -955,20 +976,36 @@ void AliITS::CheckLabels(Int_t lab[3]) const { //______________________________________________________________________ void AliITS::SDigitsToDigits(Option_t *opt){ - // Standard Summable digits to Digits function. - // Inputs: - // none. - // Outputs: - // none. - if(!fDetTypeSim) { - Error("SDigitsToSDigits","fDetTypeSim is 0!"); - return; - } - - fDetTypeSim->SetLoader((AliITSLoader*)fLoader); - SetDefaults(); - fDetTypeSim->SDigitsToDigits(opt,(Char_t*)GetName()); + // Standard Summable digits to Digits function. + // Inputs: + // none. + // Outputs: + // none. + if (!fDetTypeSim) { + AliError("fDetTypeSim is 0!"); + return; + } + + const char *all = strstr(opt,"All"); + const char *det[3] ={strstr(opt,"SPD"),strstr(opt,"SDD"), + strstr(opt,"SSD")}; + + // Reset Fast-OR signals for this event + fDetTypeSim->ResetFOSignals(); + + fDetTypeSim->SetLoader((AliITSLoader*)fLoader); + SetDefaults(); + if(fSimuParam) fDetTypeSim->SetSimuParam(fSimuParam); + fDetTypeSim->SDigitsToDigits(opt,(Char_t*)GetName()); + // Add random noise to FO signals + if (all || det[0]) { // SPD present + fDetTypeSim->ProcessNoiseForFastOr(); + } + // Add Fast-OR signals to event (only one object per event) + if (all || det[0]) { // SPD present + fDetTypeSim->WriteFOSignals(); + } } //______________________________________________________________________ @@ -1019,25 +1056,6 @@ void AliITS::AddSumDigit(AliITSpListItem &sdig){ } fDetTypeSim->AddSumDigit(sdig); -} -//______________________________________________________________________ -void AliITS::AddRealDigit(Int_t branch, Int_t *digits){ - // Add a real digit - as coming from data. - // Inputs: - // Int_t id Detector type number. - // Int_t *digits Integer array containing the digits info. See - // AliITSdigit.h - // Outputs: - // none. - // Return: - // none. - - if(!fDetTypeSim) { - Error("AddRealDigit","fDetTypeSim is 0!"); - return; - } - fDetTypeSim->AddRealDigit(branch,digits); - } //______________________________________________________________________ void AliITS::AddSimDigit(Int_t branch, AliITSdigit *d){ @@ -1060,7 +1078,7 @@ void AliITS::AddSimDigit(Int_t branch, AliITSdigit *d){ } //______________________________________________________________________ void AliITS::AddSimDigit(Int_t branch,Float_t phys,Int_t *digits,Int_t *tracks, - Int_t *hits,Float_t *charges){ + Int_t *hits,Float_t *charges, Int_t sigexpanded){ // Add a simulated digit to the list. // Inputs: // Int_t id Detector type number. @@ -1084,7 +1102,7 @@ void AliITS::AddSimDigit(Int_t branch,Float_t phys,Int_t *digits,Int_t *tracks, Error("AddSimDigit","fDetTypeSim is 0!"); return; } - fDetTypeSim->AddSimDigit(branch,phys,digits,tracks,hits,charges); + fDetTypeSim->AddSimDigit(branch,phys,digits,tracks,hits,charges,sigexpanded); } //______________________________________________________________________ @@ -1097,6 +1115,7 @@ void AliITS::Digits2Raw(){ } fDetTypeSim->SetLoader((AliITSLoader*)fLoader); SetDefaults(); + if(fSimuParam) fDetTypeSim->SetSimuParam(fSimuParam); fDetTypeSim->GetLoader()->LoadDigits(); TTree* digits = fDetTypeSim->GetLoader()->TreeD(); if (!digits) { @@ -1104,8 +1123,33 @@ void AliITS::Digits2Raw(){ return; } fDetTypeSim->SetTreeAddressD(digits,(Char_t*)GetName()); - + + // Get the FO signals for this event + AliITSFOSignalsSPD* foSignals = NULL; + AliRunLoader* runLoader = AliRunLoader::Instance(); + AliITSLoader* itsLoader = (AliITSLoader*) runLoader->GetLoader("ITSLoader"); + if (!itsLoader) { + AliError("ITS loader is NULL."); + } + else { + if(!itsLoader->TreeD()) AliError(" !!! No TreeD available !!!"); + foSignals = (AliITSFOSignalsSPD*)itsLoader->TreeD()->GetUserInfo()->FindObject("AliITSFOSignalsSPD"); + if(!foSignals) AliError("FO signals not retrieved"); + } + + Bool_t deleteFOsignalsLater = kFALSE; + if (!foSignals) { + AliError("FO signals not available. No FO bits will be written."); + foSignals = new AliITSFOSignalsSPD(); // make a temporary dummy signals object + deleteFOsignalsLater = kTRUE; + } + + + AliITSDDLModuleMapSDD* ddlsdd=fDetTypeSim->GetDDLModuleMapSDD(); + Char_t rawSDD=fDetTypeSim->GetSimuParam()->GetSDDRawDataFormat(); AliITSDDLRawData rawWriter; + + rawWriter.SetSDDRawFormat(rawSDD); //Verbose level // 0: Silent // 1: cout messages @@ -1117,15 +1161,16 @@ void AliITS::Digits2Raw(){ rawWriter.SetVerbose(0); //SILICON PIXEL DETECTOR - Info("Digits2Raw", "Formatting raw data for SPD"); - rawWriter.RawDataSPD(digits->GetBranch("ITSDigitsSPD")); + AliDebug(1,"Formatting raw data for SPD"); + rawWriter.RawDataSPD(digits->GetBranch("ITSDigitsSPD"),foSignals); + if(deleteFOsignalsLater) delete foSignals; //SILICON DRIFT DETECTOR - Info("Digits2Raw", "Formatting raw data for SDD"); - rawWriter.RawDataSDD(digits->GetBranch("ITSDigitsSDD")); + AliDebug(1,Form("Formatting raw data for SDD - Format code =%d",rawSDD)); + rawWriter.RawDataSDD(digits->GetBranch("ITSDigitsSDD"),ddlsdd); //SILICON STRIP DETECTOR - Info("Digits2Raw", "Formatting raw data for SSD"); + AliDebug(1,"Formatting raw data for SSD"); rawWriter.RawDataSSD(digits->GetBranch("ITSDigitsSSD")); fLoader->UnloadDigits(); @@ -1135,8 +1180,170 @@ AliLoader* AliITS::MakeLoader(const char* topfoldername){ //builds ITSgetter (AliLoader type) //if detector wants to use castomized getter, it must overload this method - Info("MakeLoader","Creating AliITSLoader. Top folder is %s.", - topfoldername); + AliDebug(1,Form("Creating AliITSLoader. Top folder is %s.", + topfoldername)); fLoader = new AliITSLoader(GetName(),topfoldername); return fLoader; } +//______________________________________________________________________ +Bool_t AliITS::Raw2SDigits(AliRawReader* rawReader) +{ + // + // Converts RAW data to SDigits + // + // Get TreeS + // + Int_t last = -1; + Int_t size = GetITSgeom()->GetIndexMax(); + TClonesArray** modA = new TClonesArray*[size]; + for (Int_t mod = 0; mod < size; mod++) modA[mod] = new TClonesArray("AliITSpListItem", 10000); + + AliLoader* loader = (AliRunLoader::Instance())->GetLoader("ITSLoader"); + if (!loader){ + Error("Open","Can not get ITS loader from Run Loader"); + return kFALSE; + } + + TTree* tree = 0; + tree = loader->TreeS(); + if (!tree){ + loader->MakeTree("S"); + tree = loader->TreeS(); + } + // + // Array for SDigits + // + TClonesArray aSDigits("AliITSpListItem",10000), *itsSDigits=&aSDigits; + Int_t bufsize = 32000; + tree->Branch("ITS", &itsSDigits, bufsize); + Int_t npx = 0; + // + // SPD + // + AliITSsegmentationSPD* segSPD = (AliITSsegmentationSPD*) fDetTypeSim->GetSegmentationModel(0); + if(!segSPD){ + AliWarning("Set AliITS defaults"); + SetDefaults(); + segSPD = (AliITSsegmentationSPD*) fDetTypeSim->GetSegmentationModel(0); + } + npx = segSPD->Npx(); + Double_t thr, sigma; + + AliITSRawStreamSPD inputSPD(rawReader); + while(1){ + Bool_t next = inputSPD.Next(); + if (!next) break; + + Int_t module = inputSPD.GetModuleID(); + Int_t column = inputSPD.GetColumn(); + Int_t row = inputSPD.GetRow(); + Int_t index = npx * column + row; + + if (module >= size) continue; + + last = (modA[module])->GetEntries(); + TClonesArray& dum = *modA[module]; + fDetTypeSim->GetSimuParam()->SPDThresholds(module,thr,sigma); + thr += 1.; + new (dum[last]) AliITSpListItem(-1, -1, module, index, thr); + } + rawReader->Reset(); + + // + // SDD + // + AliITSsegmentationSDD* segSDD = (AliITSsegmentationSDD*) fDetTypeSim->GetSegmentationModel(1); + npx = segSDD->Npx(); + AliITSRawStream* inputSDD=AliITSRawStreamSDD::CreateRawStreamSDD(rawReader); + AliITSDDLModuleMapSDD* ddlmap=fDetTypeSim->GetDDLModuleMapSDD(); + inputSDD->SetDDLModuleMap(ddlmap); + while(1){ + Bool_t next = inputSDD->Next(); + if (!next) break; + + if(inputSDD->IsCompletedModule()==kFALSE && + inputSDD->IsCompletedDDL()==kFALSE){ + + Int_t module = inputSDD->GetModuleID(); + Int_t anode = inputSDD->GetCoord1(); + Int_t time = inputSDD->GetCoord2(); + Int_t signal10 = inputSDD->GetSignal(); + Int_t index = npx * anode + time; + + if (module >= size) continue; + last = modA[module]->GetEntries(); + TClonesArray& dum = *modA[module]; + new (dum[last]) AliITSpListItem(-1, -1, module, index, Double_t(signal10)); + ((AliITSpListItem*) dum.At(last))->AddSignalAfterElect(module, index, Double_t(signal10)); + } + } + delete inputSDD; + rawReader->Reset(); + + // + // SSD + // + AliITSsegmentationSSD* segSSD = (AliITSsegmentationSSD*) fDetTypeSim->GetSegmentationModel(2); + npx = segSSD->Npx(); + AliITSRawStreamSSD inputSSD(rawReader); + while(1){ + Bool_t next = inputSSD.Next(); + if (!next) break; + + Int_t module = inputSSD.GetModuleID(); + Int_t side = inputSSD.GetSideFlag(); + Int_t strip = inputSSD.GetStrip(); + Int_t signal = inputSSD.GetSignal(); + Int_t index = npx * side + strip; + + if (module >= size) continue; + + last = modA[module]->GetEntries(); + TClonesArray& dum = *modA[module]; + new (dum[last]) AliITSpListItem(-1, -1, module, index, Double_t(signal)); + } + rawReader->Reset(); + AliITSpListItem* sdig = 0; + + for (Int_t mod = 0; mod < size; mod++) + { + Int_t nsdig = modA[mod]->GetEntries(); + for (Int_t ie = 0; ie < nsdig; ie++) { + sdig = (AliITSpListItem*) (modA[mod]->At(ie)); + new (aSDigits[ie]) AliITSpListItem(-1, -1, mod, sdig->GetIndex(), sdig->GetSignal()); + Float_t sig = sdig->GetSignalAfterElect(); + if (sig > 0.) { + sdig = (AliITSpListItem*)aSDigits[ie]; + sdig->AddSignalAfterElect(mod, sdig->GetIndex(), Double_t(sig)); + } + } + + tree->Fill(); + aSDigits.Clear(); + modA[mod]->Clear(); + } + loader->WriteSDigits("OVERWRITE"); + delete modA; + return kTRUE; +} + + +//______________________________________________________________________ +void AliITS::UpdateInternalGeometry(){ + + //reads new geometry from TGeo +// AliDebug(1,"Delete ITSgeom and create a new one reading TGeo"); + + AliITSVersion_t version = (AliITSVersion_t)IsVersion(); + Int_t minor = 0; + if(version==kvPPRasymmFMD) minor=2; // default minor version for this geom. + AliITSInitGeometry initgeom; + AliITSgeom* geom = initgeom.CreateAliITSgeom(version,minor); + SetITSgeom(geom); +} +//______________________________________________________________________ +AliTriggerDetector* AliITS::CreateTriggerDetector() const { + // create an AliITSTrigger object (and set trigger conditions as input) + return new AliITSTrigger(fDetTypeSim->GetTriggerConditions()); +} +