X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PHOS%2FAliPHOSGetter.cxx;h=5fdc8489ad20aa504312f6bc9036bbc5db1f2b77;hb=12a7cec1faa853df3fe46cbb2ab175b596e8156e;hp=1b221d9546608558fd2534cf108d1d23f3093d15;hpb=5d12ce3847b64498d417a697c24fb86f715f2752;p=u%2Fmrichter%2FAliRoot.git diff --git a/PHOS/AliPHOSGetter.cxx b/PHOS/AliPHOSGetter.cxx index 1b221d95466..5fdc8489ad2 100644 --- a/PHOS/AliPHOSGetter.cxx +++ b/PHOS/AliPHOSGetter.cxx @@ -40,23 +40,30 @@ // --- ROOT system --- -#include "TSystem.h" -#include "TFile.h" -#include "TROOT.h" - +#include +#include +#include +#include +#include +#include +//#include +//#include // --- Standard library --- // --- AliRoot header files --- - +#include "AliESD.h" +#include "AliHeader.h" +#include "AliMC.h" +#include "AliPHOS.h" +#include "AliPHOSBeamTestEvent.h" #include "AliPHOSGetter.h" +#include "AliPHOSLoader.h" #include "AliRunLoader.h" #include "AliStack.h" -#include "AliPHOSLoader.h" -// #include "AliPHOSRaw2Digits.h" -//#include "AliPHOSCalibrationDB.h" -#include "AliPHOSBeamTestEvent.h" -#include "AliMC.h" +#include "AliPHOSRawStream.h" +#include "AliRawReaderFile.h" +#include "AliLog.h" ClassImp(AliPHOSGetter) @@ -81,6 +88,7 @@ AliPHOSGetter::AliPHOSGetter(const char* headerFile, const char* version, Option if (rl->GetAliRun() == 0x0) { rl->LoadgAlice(); gAlice = rl->GetAliRun(); // should be removed + rl->LoadHeader(); } } fgPhosLoader = dynamic_cast(rl->GetLoader("PHOSLoader")); @@ -89,29 +97,62 @@ AliPHOSGetter::AliPHOSGetter(const char* headerFile, const char* version, Option else fgPhosLoader->SetTitle(version); - // initialize data members SetDebug(0) ; fBTE = 0 ; fPrimaries = 0 ; fLoadingStatus = "" ; + + fESDFileName = rl->GetFileName() ; // this should be the galice.root file + fESDFileName.ReplaceAll("galice.root", "AliESDs.root") ; + fESDFile = 0 ; + fESD = 0 ; + fESDTree = 0 ; + fRawDigits = kFALSE ; } //____________________________________________________________________________ AliPHOSGetter::~AliPHOSGetter() { // dtor - delete fgPhosLoader ; - fgPhosLoader = 0 ; - delete fBTE ; - fBTE = 0 ; - fPrimaries->Delete() ; - delete fPrimaries ; + if(fgPhosLoader){ + delete fgPhosLoader ; + fgPhosLoader = 0 ; + } + if(fBTE){ + delete fBTE ; + fBTE = 0 ; + } + if(fPrimaries){ + fPrimaries->Delete() ; + delete fPrimaries ; + } + if (fESD) + delete fESD ; + if (fESDTree) + delete fESDTree ; + + fgObjGetter = 0; +} + +//____________________________________________________________________________ +void AliPHOSGetter::Reset() +{ + // resets things in case the getter is called consecutively with different files + // the PHOS Loader is already deleted by the Run Loader + + if (fPrimaries) { + fPrimaries->Delete() ; + delete fPrimaries ; + } + fgPhosLoader = 0; + fgObjGetter = 0; } //____________________________________________________________________________ AliPHOSClusterizer * AliPHOSGetter::Clusterizer() { + // Returns pointer to the Clusterizer task AliPHOSClusterizer * rv ; rv = dynamic_cast(PhosLoader()->Reconstructioner()) ; if (!rv) { @@ -154,6 +195,7 @@ TClonesArray * AliPHOSGetter::Digits() //____________________________________________________________________________ AliPHOSDigitizer * AliPHOSGetter::Digitizer() { + // Returns pointer to the Digitizer task AliPHOSDigitizer * rv ; rv = dynamic_cast(PhosLoader()->Digitizer()) ; if (!rv) { @@ -195,8 +237,9 @@ TClonesArray * AliPHOSGetter::TrackSegments() } //____________________________________________________________________________ -AliPHOSTrackSegmentMaker * AliPHOSGetter::TrackSegmentMaker() +AliPHOSTrackSegmentMaker * AliPHOSGetter::TrackSegmentMaker() { + // Returns pointer to the TrackSegmentMaker task AliPHOSTrackSegmentMaker * rv ; rv = dynamic_cast(PhosLoader()->TrackSegmentMaker()) ; if (!rv) { @@ -221,59 +264,79 @@ TClonesArray * AliPHOSGetter::RecParticles() return rv ; } //____________________________________________________________________________ -void AliPHOSGetter::Event(const Int_t event, const char* opt) +void AliPHOSGetter::Event(Int_t event, const char* opt) { // Reads the content of all Tree's S, D and R - if ( event >= MaxEvent() ) { - Error("Event", "%d not found in TreeE !", event) ; - return ; - } +// if ( event >= MaxEvent() ) { +// Error("Event", "%d not found in TreeE !", event) ; +// return ; +// } AliRunLoader * rl = AliRunLoader::GetRunLoader(PhosLoader()->GetTitle()); - // checks if we are dealing with test-beam data - TBranch * btb = rl->TreeE()->GetBranch("AliPHOSBeamTestEvent") ; - if(btb){ - if(!fBTE) - fBTE = new AliPHOSBeamTestEvent() ; - btb->SetAddress(&fBTE) ; - btb->GetEntry(event) ; - } - else{ - if(fBTE){ - delete fBTE ; - fBTE = 0 ; - } - } +// // checks if we are dealing with test-beam data +// TBranch * btb = rl->TreeE()->GetBranch("AliPHOSBeamTestEvent") ; +// if(btb){ +// if(!fBTE) +// fBTE = new AliPHOSBeamTestEvent() ; +// btb->SetAddress(&fBTE) ; +// btb->GetEntry(event) ; +// } +// else{ +// if(fBTE){ +// delete fBTE ; +// fBTE = 0 ; +// } +// } // Loads the type of object(s) requested rl->GetEvent(event) ; - if( strstr(opt,"X") || (strcmp(opt,"")==0) ) + if(strstr(opt,"X") || (strcmp(opt,"")==0)){ ReadPrimaries() ; - - if(strstr(opt,"H") ) + } + + if(strstr(opt,"H") ){ ReadTreeH(); - - if(strstr(opt,"S") ) + } + + if(strstr(opt,"S") ){ ReadTreeS() ; - - if( strstr(opt,"D") ) + } + + if(strstr(opt,"D") ){ ReadTreeD() ; - - if( strstr(opt,"R") ) + } + + if(strstr(opt,"R") ){ ReadTreeR() ; + } - if( strstr(opt,"T") ) + if( strstr(opt,"T") ){ ReadTreeT() ; + } - if( strstr(opt,"P") ) + if( strstr(opt,"P") ){ ReadTreeP() ; + } + + if( strstr(opt,"E") ){ + ReadTreeE(event) ; + } + +} + -// if( strstr(opt,"Q") ) -// ReadTreeQA() ; +//____________________________________________________________________________ +void AliPHOSGetter::Event(AliRawReader *rawReader, const char* opt) +{ + // Reads the raw event from rawReader + + if( strstr(opt,"W") ){ + ReadRaw(rawReader) ; + } } @@ -307,8 +370,6 @@ AliPHOSGetter * AliPHOSGetter::Instance(const char* alirunFileName, const char* // Creates and returns the pointer of the unique instance // Must be called only when the environment has changed - //::Info("Instance","alirunFileName=%s version=%s openingOption=%s",alirunFileName,version,openingOption); - if(!fgObjGetter){ // first time the getter is called fgObjGetter = new AliPHOSGetter(alirunFileName, version, openingOption) ; } @@ -332,11 +393,15 @@ AliPHOSGetter * AliPHOSGetter::Instance(const char* alirunFileName, const char* } } } - else + else { + AliRunLoader * rl = AliRunLoader::GetRunLoader(fgPhosLoader->GetTitle()) ; + if ( strstr(version, AliConfig::GetDefaultEventFolderName()) ) // false in case of merging + delete rl ; fgObjGetter = new AliPHOSGetter(alirunFileName, version, openingOption) ; + } } if (!fgObjGetter) - ::Error("Instance", "Failed to create the PHOS Getter object") ; + ::Error("AliPHOSGetter::Instance", "Failed to create the PHOS Getter object") ; else if (fgDebug) Print() ; @@ -349,8 +414,8 @@ AliPHOSGetter * AliPHOSGetter::Instance() { // Returns the pointer of the unique instance already defined - if(!fgObjGetter) - ::Error("Instance", "Getter not initialized") ; + if(!fgObjGetter && fgDebug) + ::Warning("AliPHOSGetter::Instance", "Getter not initialized") ; return fgObjGetter ; @@ -376,7 +441,16 @@ TParticle * AliPHOSGetter::Primary(Int_t index) const AliPHOS * AliPHOSGetter:: PHOS() const { // returns the PHOS object - AliPHOS * phos = dynamic_cast(PhosLoader()->GetModulesFolder()->FindObject("PHOS")) ; + AliPHOSLoader * loader = 0; + static AliPHOSLoader * oldloader = 0; + static AliPHOS * phos = 0; + + loader = PhosLoader(); + + if ( loader != oldloader) { + phos = dynamic_cast(loader->GetModulesFolder()->FindObject("PHOS")) ; + oldloader = loader; + } if (!phos) if (fgDebug) Warning("PHOS", "PHOS module not found in module folders: %s", PhosLoader()->GetModulesFolder()->GetName() ) ; @@ -386,8 +460,9 @@ AliPHOS * AliPHOSGetter:: PHOS() const //____________________________________________________________________________ -AliPHOSPID * AliPHOSGetter::PID() +AliPHOSPID * AliPHOSGetter::PID() { + // Returns pointer to the PID task AliPHOSPID * rv ; rv = dynamic_cast(PhosLoader()->PIDTask()) ; if (!rv) { @@ -437,11 +512,11 @@ void AliPHOSGetter::ReadPrimaries() AliRunLoader * rl = AliRunLoader::GetRunLoader(PhosLoader()->GetTitle()); // gets kine tree from the root file (Kinematics.root) - if ( ! rl->TreeK() ) // load treeK the first time + if ( ! rl->TreeK() ) { // load treeK the first time rl->LoadKinematics() ; + } - fNPrimaries = rl->Stack()->GetNtrack() ; - + fNPrimaries = (rl->GetHeader())->GetNtrack(); if (fgDebug) Info( "ReadTreeK", "Found %d particles in event # %d", fNPrimaries, EventNumber() ) ; @@ -456,18 +531,71 @@ void AliPHOSGetter::ReadPrimaries() } } +//____________________________________________________________________________ +Bool_t AliPHOSGetter::OpenESDFile() +{ + //Open the ESD file + Bool_t rv = kTRUE ; + if (!fESDFile) { + fESDFile = TFile::Open(fESDFileName) ; + if (!fESDFile ) + return kFALSE ; + } + else if (fESDFile->IsOpen()) { + fESDFile->Close() ; + fESDFile = TFile::Open(fESDFileName) ; + } + if (!fESDFile->IsOpen()) + rv = kFALSE ; + return rv ; +} + +//____________________________________________________________________________ +Int_t AliPHOSGetter::ReadRaw(AliRawReader *rawReader) +{ + // reads the raw format data, converts it into digits format and store digits in Digits() + // container. + + AliPHOSRawStream in(rawReader); + + TClonesArray * digits = Digits() ; + digits->Clear() ; + Int_t idigit = 0 ; + + while ( in.Next() ) { // PHOS entries loop + + Int_t amp = in.GetSignal() ; + Double_t time = in.GetTime() ; + Int_t relId[4], id ; + + relId[0] = in.GetModule() ; + if ( relId[0] >= PHOS()->GetRawFormatLowGainOffset() ) { + relId[0] -= PHOS()->GetRawFormatLowGainOffset() ; + } + relId[1] = 0 ; + relId[2] = in.GetRow() ; + relId[3] = in.GetColumn() ; + PHOSGeometry()->RelToAbsNumbering(relId, id) ; + + if (amp > 0 && id >=0 ) { + new((*digits)[idigit]) AliPHOSDigit( -1, id, amp, time) ; + idigit++ ; + } + + } // PHOS entries loop + + digits->Sort() ; + + return digits->GetEntriesFast() ; +} //____________________________________________________________________________ Int_t AliPHOSGetter::ReadTreeD() { // Read the Digits - - // gets TreeD from the root file (PHOS.SDigits.root) - if ( !IsLoaded("D") ) { - PhosLoader()->LoadDigits("UPDATE") ; - PhosLoader()->LoadDigitizer("UPDATE") ; - SetLoaded("D") ; - } + PhosLoader()->CleanDigits() ; + PhosLoader()->LoadDigits("UPDATE") ; + PhosLoader()->LoadDigitizer("UPDATE") ; return Digits()->GetEntries() ; } @@ -475,12 +603,12 @@ Int_t AliPHOSGetter::ReadTreeD() Int_t AliPHOSGetter::ReadTreeH() { // Read the Hits - + PhosLoader()->CleanHits() ; // gets TreeH from the root file (PHOS.Hit.root) - if ( !IsLoaded("H") ) { + //if ( !IsLoaded("H") ) { PhosLoader()->LoadHits("UPDATE") ; - SetLoaded("H") ; - } + // SetLoaded("H") ; + //} return Hits()->GetEntries() ; } @@ -489,13 +617,13 @@ Int_t AliPHOSGetter::ReadTreeR() { // Read the RecPoints - + PhosLoader()->CleanRecPoints() ; // gets TreeR from the root file (PHOS.RecPoints.root) - if ( !IsLoaded("R") ) { + //if ( !IsLoaded("R") ) { PhosLoader()->LoadRecPoints("UPDATE") ; PhosLoader()->LoadClusterizer("UPDATE") ; - SetLoaded("R") ; - } + // SetLoaded("R") ; + //} return EmcRecPoints()->GetEntries() ; } @@ -505,28 +633,29 @@ Int_t AliPHOSGetter::ReadTreeT() { // Read the TrackSegments - + PhosLoader()->CleanTracks() ; // gets TreeT from the root file (PHOS.TrackSegments.root) - if ( !IsLoaded("T") ) { + //if ( !IsLoaded("T") ) { PhosLoader()->LoadTracks("UPDATE") ; PhosLoader()->LoadTrackSegmentMaker("UPDATE") ; - SetLoaded("T") ; - } + // SetLoaded("T") ; + //} return TrackSegments()->GetEntries() ; } //____________________________________________________________________________ Int_t AliPHOSGetter::ReadTreeP() { - // Read the TrackSegments - + // Read the RecParticles + PhosLoader()->CleanRecParticles() ; + // gets TreeT from the root file (PHOS.TrackSegments.root) - if ( !IsLoaded("P") ) { + // if ( !IsLoaded("P") ) { PhosLoader()->LoadRecParticles("UPDATE") ; PhosLoader()->LoadPID("UPDATE") ; - SetLoaded("P") ; - } + // SetLoaded("P") ; + //} return RecParticles()->GetEntries() ; } @@ -535,17 +664,40 @@ Int_t AliPHOSGetter::ReadTreeS() { // Read the SDigits - + PhosLoader()->CleanSDigits() ; // gets TreeS from the root file (PHOS.SDigits.root) - if ( !IsLoaded("S") ) { - PhosLoader()->LoadSDigits("UPDATE") ; - PhosLoader()->LoadSDigitizer("UPDATE") ; - SetLoaded("S") ; - } + //if ( !IsLoaded("S") ) { + PhosLoader()->LoadSDigits("READ") ; + PhosLoader()->LoadSDigitizer("READ") ; + // SetLoaded("S") ; + //} return SDigits()->GetEntries() ; } +//____________________________________________________________________________ +Int_t AliPHOSGetter::ReadTreeE(Int_t event) +{ + // Read the ESD + + // gets esdTree from the root file (AliESDs.root) + if (!fESDFile) + if ( !OpenESDFile() ) + return -1 ; + + fESDTree = static_cast(fESDFile->Get("esdTree")) ; + fESD = new AliESD; + if (!fESDTree) { + + Error("ReadTreeE", "no ESD tree found"); + return -1; + } + fESDTree->SetBranchAddress("ESD", &fESD); + fESDTree->GetEvent(event); + + return event ; +} + //____________________________________________________________________________ TClonesArray * AliPHOSGetter::SDigits() { @@ -562,8 +714,9 @@ TClonesArray * AliPHOSGetter::SDigits() } //____________________________________________________________________________ -AliPHOSSDigitizer * AliPHOSGetter::SDigitizer() +AliPHOSSDigitizer * AliPHOSGetter::SDigitizer() { + // Returns pointer to the SDigitizer task AliPHOSSDigitizer * rv ; rv = dynamic_cast(PhosLoader()->SDigitizer()) ; if (!rv) { @@ -574,7 +727,7 @@ AliPHOSSDigitizer * AliPHOSGetter::SDigitizer() } //____________________________________________________________________________ -TParticle * AliPHOSGetter::Secondary(const TParticle* p, const Int_t index) const +TParticle * AliPHOSGetter::Secondary(const TParticle* p, Int_t index) const { // Return first (index=1) or second (index=2) secondary particle of primary particle p @@ -593,7 +746,7 @@ TParticle * AliPHOSGetter::Secondary(const TParticle* p, const Int_t index) cons } //____________________________________________________________________________ -void AliPHOSGetter::Track(const Int_t itrack) +void AliPHOSGetter::Track(Int_t itrack) { // Read the first entry of PHOS branch in hit tree gAlice->TreeH() @@ -615,6 +768,7 @@ void AliPHOSGetter::Track(const Int_t itrack) //____________________________________________________________________________ TTree * AliPHOSGetter::TreeD() const { + // Returns pointer to the Digits Tree TTree * rv = 0 ; rv = PhosLoader()->TreeD() ; if ( !rv ) { @@ -628,6 +782,7 @@ TTree * AliPHOSGetter::TreeD() const //____________________________________________________________________________ TTree * AliPHOSGetter::TreeH() const { + // Returns pointer to the Hits Tree TTree * rv = 0 ; rv = PhosLoader()->TreeH() ; if ( !rv ) { @@ -641,6 +796,7 @@ TTree * AliPHOSGetter::TreeH() const //____________________________________________________________________________ TTree * AliPHOSGetter::TreeR() const { + // Returns pointer to the RecPoints Tree TTree * rv = 0 ; rv = PhosLoader()->TreeR() ; if ( !rv ) { @@ -654,6 +810,7 @@ TTree * AliPHOSGetter::TreeR() const //____________________________________________________________________________ TTree * AliPHOSGetter::TreeT() const { + // Returns pointer to the TrackSegments Tree TTree * rv = 0 ; rv = PhosLoader()->TreeT() ; if ( !rv ) { @@ -666,6 +823,7 @@ TTree * AliPHOSGetter::TreeT() const //____________________________________________________________________________ TTree * AliPHOSGetter::TreeP() const { + // Returns pointer to the RecParticles Tree TTree * rv = 0 ; rv = PhosLoader()->TreeP() ; if ( !rv ) { @@ -678,7 +836,8 @@ TTree * AliPHOSGetter::TreeP() const //____________________________________________________________________________ TTree * AliPHOSGetter::TreeS() const -{ +{ + // Returns pointer to the SDigits Tree TTree * rv = 0 ; rv = PhosLoader()->TreeS() ; if ( !rv ) { @@ -704,7 +863,7 @@ Bool_t AliPHOSGetter::VersionExists(TString & opt) const if ( opt == "sdigits") { // add the version name to the root file name TString fileName( PhosLoader()->GetSDigitsFileName() ) ; - if (version != AliConfig::fgkDefaultEventFolderName) // only if not the default folder name + if (version != AliConfig::GetDefaultEventFolderName()) // only if not the default folder name fileName = fileName.ReplaceAll(".root", "") + "_" + version + ".root" ; if ( !(gSystem->AccessPathName(fileName)) ) { Warning("VersionExists", "The file %s already exists", fileName.Data()) ; @@ -716,13 +875,12 @@ Bool_t AliPHOSGetter::VersionExists(TString & opt) const if ( opt == "digits") { // add the version name to the root file name TString fileName( PhosLoader()->GetDigitsFileName() ) ; - if (version != AliConfig::fgkDefaultEventFolderName) // only if not the default folder name + if (version != AliConfig::GetDefaultEventFolderName()) // only if not the default folder name fileName = fileName.ReplaceAll(".root", "") + "_" + version + ".root" ; if ( !(gSystem->AccessPathName(fileName)) ) { Warning("VersionExists", "The file %s already exists", fileName.Data()) ; rv = kTRUE ; } - PhosLoader()->SetDigitsFileName(fileName) ; } return rv ;