X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=START%2FAliSTART.cxx;h=74c60f8bff331481226ed6fc5f390f4082c307a4;hb=84090f85e438d2803f0eb0bfa38d61b5acfcb6eb;hp=45172e2317192226a5668fa8497ec505f63d5c65;hpb=d0f40f2310e6a9cffbb30fb9e8848715a0ee5e57;p=u%2Fmrichter%2FAliRoot.git diff --git a/START/AliSTART.cxx b/START/AliSTART.cxx index 45172e23171..74c60f8bff3 100755 --- a/START/AliSTART.cxx +++ b/START/AliSTART.cxx @@ -13,66 +13,7 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ -/* -$Log$ -Revision 1.21 2001/06/27 16:06:59 hristov -Rotation matrix in BuildGeometry has been changed to rotx999 - -Revision 1.20.2.1 2001/06/27 10:51:15 alla -Rotation matrix in BuildGeometry has benn changed to rotx999 - -Revision 1.20 2001/05/16 14:57:21 alibrary -New files for folders and Stack - -Revision 1.19 2001/04/04 12:10:18 alla -changes according Coding Convension - -Revision 1.18 2001/03/12 17:46:43 hristov -Changes needed on Sun with CC 5.0 - -Revision 1.17 2001/01/26 19:59:53 hristov -Major upgrade of AliRoot code - -Revision 1.16 2001/01/17 10:56:08 hristov -Corrections to destructors - -Revision 1.15 2001/01/01 13:10:42 hristov -Local definition of digits removed - -Revision 1.14 2000/12/22 16:17:15 hristov -Updated START code from Alla - -Revision 1.13 2000/12/18 11:39:41 alibrary -Quick fix to avoid crash in display waiting for new version - -Revision 1.12 2000/12/04 08:48:19 alibrary -Fixing problems in the HEAD - -Revision 1.11 2000/10/13 13:14:08 hristov -Bug fixes and code cleaning - -Revision 1.10 2000/10/02 21:28:13 fca -Removal of useless dependecies via forward declarations - -Revision 1.9 2000/07/13 16:41:29 fca -New START corrected for coding conventions - -Revision 1.8 2000/03/27 17:24:25 alla -Modifing geometry - -Revision 1.6 2000/01/21 15:45:23 fca -New Version from Alla - -Revision 1.5 2000/01/19 17:17:15 fca -Introducing a list of lists of hits -- more hits allowed for detector now - -Revision 1.4 1999/11/12 15:04:00 fca -Modifications from A.Maevskaya - -Revision 1.3 1999/09/29 09:24:29 fca -Introduction of the Copyright and cvs Log - -*/ +/* $Id$ */ /////////////////////////////////////////////////////////////////////////////// // // @@ -96,27 +37,35 @@ Introduction of the Copyright and cvs Log // // /////////////////////////////////////////////////////////////////////////////// -#include -#include +#include -#include "TMath.h" -#include "TTUBE.h" -#include "TNode.h" -#include "TRandom.h" -#include "TGeometry.h" -#include "TFile.h" -#include "TParticle.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "AliLog.h" +#include "AliMC.h" +#include "AliLoader.h" #include "AliRun.h" +#include "TClonesArray.h" #include "AliSTART.h" +#include "AliSTARTLoader.h" #include "AliSTARTdigit.h" -#include "AliMC.h" #include "AliSTARThit.h" -#include "AliSTARTvertex.h" +#include "AliSTARTDigitizer.h" +#include "AliSTARTRawData.h" +#include "AliSTARTRecPoint.h" +#include "AliLog.h" ClassImp(AliSTART) -static AliSTARTdigit *digits; + //static AliSTARTdigit *digits; //_____________________________________________________________________________ AliSTART::AliSTART() @@ -127,6 +76,7 @@ AliSTART::AliSTART() fIshunt = 1; fHits = 0; fDigits = 0; + fRecPoints = 0; } //_____________________________________________________________________________ @@ -141,8 +91,9 @@ AliSTART::AliSTART(const char *name, const char *title) // // Initialise Hit array fHits = new TClonesArray("AliSTARThit", 405); - gAlice->AddHitList(fHits); - + gAlice->GetMCApp()->AddHitList(fHits); + fDigits = new AliSTARTdigit(); + fRecPoints = new AliSTARTRecPoint(); fIshunt = 1; fIdSens = 0; SetMarkerColor(kRed); @@ -150,10 +101,23 @@ AliSTART::AliSTART(const char *name, const char *title) //_____________________________________________________________________________ AliSTART::~AliSTART() { + if (fHits) { fHits->Delete(); delete fHits; } + /* + if (fDigits) { + fDigits->Delete(); + delete fDigits; + cout<<" delete fDigits; "<Delete(); + delete fRecPoints; + cout<<" delete fRecPoints; "< SetTimeBestRight(besttimeright); + fDigits->SetTimeBestLeft(besttimeleft); + fDigits-> SetMeanTime(meantime); + fDigits-> SetDiffTime(timediff); + fDigits-> SetSumMult(sumMult); + fDigits->SetTime(*time); + fDigits->SetTimeAmp(*timeAmp); + fDigits->SetADC(*adc); + fDigits->SetADCAmp(*adcAmp); } + //_____________________________________________________________________________ void AliSTART::BuildGeometry() { @@ -191,19 +172,19 @@ void AliSTART::BuildGeometry() new TTUBE("S_0ST1","START volume 1","void",5.,10.7,5.3); top->cd(); - node = new TNode("0ST1","0ST01","S_0ST1",0,0,75.,""); + node = new TNode("0ST1","0ST01","S_0ST1",0,0,-69.7,""); node->SetLineColor(kColorSTART); fNodes->Add(node); new TTUBE("S_0ST2","START volume 2","void",5.,10.7,5.3); top->cd(); - node = new TNode("0ST2","0ST2","S_0ST2",0,0,-75,"rotx999"); + node = new TNode("0ST2","0ST2","S_0ST2",0,0,350,"rotx999"); node->SetLineColor(kColorSTART); fNodes->Add(node); } //_____________________________________________________________________________ -Int_t AliSTART::DistanceToPrimitive(Int_t px, Int_t py) +Int_t AliSTART::DistanceToPrimitive(Int_t /*px*/, Int_t /*py*/) { // // Calculate the distance from the mouse to the START on the screen @@ -219,7 +200,7 @@ void AliSTART::Init() // Initialis the START after it has been built Int_t i; // - if(fDebug) { + if(AliLog::GetGlobalDebugLevel()>0) { printf("\n%s: ",ClassName()); for(i=0;i<35;i++) printf("*"); printf(" START_INIT "); @@ -233,159 +214,145 @@ void AliSTART::Init() } //--------------------------------------------------------------------------- -void AliSTART::MakeBranch(Option_t* option, const char *file) +void AliSTART::MakeBranch(Option_t* option) { // - // Specific START branches +// Create Tree branches for the START. + + // Options: + // + // H Make a branch of TClonesArray of AliSTARTHit's + // D Make a branch of TClonesArray of AliSTARTDigit's + // + // R Make a branch of AliSTARTRecPoints // - // Create Tree branches for the START. - Int_t buffersize = 400; - char branchname[10]; + char branchname[20]; sprintf(branchname,"%s",GetName()); - AliDetector::MakeBranch(option,file); - + const char *cH = strstr(option,"H"); const char *cD = strstr(option,"D"); - - if (cD) { - digits = new AliSTARTdigit(); - MakeBranchInTree(gAlice->TreeD(), - branchname, "AliSTARTdigit", digits, buffersize, 1, file); + const char *cR = strstr(option,"R"); + + if (cH && fLoader->TreeH()) + { + if (fHits == 0x0) fHits = new TClonesArray("AliSTARThit", 405); + AliDetector::MakeBranch(option); } -/* - char *cR = strstr(option,"R"); + + + if (cD && fLoader->TreeD()) + { + if (fDigits == 0x0) fDigits = new AliSTARTdigit(); + // MakeBranchInTree(fLoader->TreeD(), branchname, + // &fDigits, 405, 0); + fLoader->TreeD()->Branch(branchname,"AliSTARTdigit",&fDigits,405,1); + // fLoader->TreeD()->Print(); + } + if (cR && fLoader->TreeR()) + { + if (fRecPoints == 0x0) fRecPoints = new AliSTARTRecPoint(); + MakeBranchInTree(fLoader->TreeR(), branchname, + &fRecPoints, 405, 0); + } - if (cR) { - MakeBranchInTree(gAlice->TreeR(), - branchname, "Int_t", &fZposit, buffersize, 1, file); - } - */ } //_____________________________________________________________________________ - -void AliSTART::Hit2digit(Int_t evnum) +void AliSTART::ResetHits() +{ + AliDetector::ResetHits(); + +} +//____________________________________________________________________ +void AliSTART::ResetDigits() { // - // From hits to digits + // Reset number of digits and the digits array for this detector // - Float_t x,y,e; - Int_t nbytes = 0; - Int_t hit; - Int_t nhits; - Int_t volume,pmt; - char nameTH[8],nameTD[8]; - Float_t timediff,timeright,timeleft,timeav; - Float_t besttimeright,besttimeleft,meanTime; - Int_t channelWidth=10; - - TParticle *particle; - AliSTARThit *startHit; - - Int_t buffersize=256; + if (fDigits) fDigits->Clear(); +} - digits= new AliSTARTdigit(); - TBranch *bDig=0; +//_____________________________________________________________________________ +void AliSTART::SetTreeAddress() +{ + TTree *treeH; + treeH = TreeH(); - // Event ------------------------- LOOP - - sprintf(nameTD,"TreeD%d",evnum); - TTree *td = new TTree(nameTD,"START"); - bDig = td->Branch("START","AliSTARTdigit",&digits,buffersize); + if (treeH) + { + if (fHits == 0x0) fHits = new TClonesArray("AliSTARThit", 405); + } + + AliDetector::SetTreeAddress(); + TTree *treeD = fLoader->TreeD(); + if (treeD) { + if (fDigits == 0x0) fDigits = new AliSTARTdigit(); + TBranch* branch = treeD->GetBranch ("START"); + if (branch) branch->SetAddress(&fDigits); + } - besttimeright=9999.; - besttimeleft=9999.; - Int_t timeDiff=0; - Int_t timeAv=0; + TTree *treeR = fLoader->TreeR(); + if (treeR) { + if (fRecPoints == 0x0) fRecPoints = new AliSTARTRecPoint() ; + TBranch* branch = treeR->GetBranch ("START"); + if (branch) branch->SetAddress(&fRecPoints); + } + +} - Int_t nparticles = gAlice->GetEvent(evnum); - if (nparticles <= 0) return; - printf("\n nparticles %d\n",nparticles); - - - sprintf(nameTH,"TreeH%d",evnum); - printf("%s\n",nameTH); - TTree *th = gAlice->TreeH(); - Int_t ntracks = (Int_t) th->GetEntries(); - if (ntracks<=0) return; - // Start loop on tracks in the hits containers - for (Int_t track=0; trackResetHits(); - nbytes += th->GetEvent(track); - particle=gAlice->Particle(track); - nhits =fHits->GetEntriesFast(); - - for (hit=0;hitUncheckedAt(hit); - pmt=startHit->fPmt; - e=startHit->fEtot; - x=startHit->X(); - y=startHit->Y(); - volume = startHit->fVolume; - if(volume==1){ - timeright = startHit->fTime; - if(timerightfTime; - // printf("timeleft %f\n",timeleft); - if(timeleftGaus(besttimeright,0.05); - Float_t besttimeleftGaus=gRandom->Gaus(besttimeleft,0.05); - timediff=besttimerightGaus-besttimeleftGaus; - meanTime=(besttimerightGaus+besttimeleftGaus)/2.; - if ( TMath::Abs(timediff)<2. && meanTime<3.) +//_____________________________________________________________________________ +void AliSTART::MakeBranchInTreeD(TTree *treeD, const char *file) +{ + // + // Create TreeD branches for the FMD + // + const Int_t kBufferSize = 4000; + char branchname[20]; + sprintf(branchname,"%s",GetName()); + if(treeD) { - //we assume centre of bunch is 5ns after TTS signal - //TOF values are relative of the end of bunch - Float_t ppBunch=25; - - ppBunch=ppBunch-10/2; - Float_t t1=1000.*besttimeleftGaus; - Float_t t2=1000.*besttimerightGaus; - t1=t1/channelWidth+ppBunch; //time in ps to channelWidth - t2=t2/channelWidth+ppBunch; //time in ps to channelWidth - - timeav=(t1+t2)/2.; - - // Time to TDC signal - // 256 channels for timediff, range 1ns - - timediff=128+1000*timediff/channelWidth; // time in ps - - timeAv = (Int_t)(timeav); // time (ps) channel numbres - timeDiff = (Int_t)(timediff); // time ( ps) channel numbres - digits->Set(timeAv,timeDiff); + MakeBranchInTree(treeD, branchname,&fDigits, kBufferSize, file); } - else - {timeAv=999999; timeDiff=99999;} - - td->Fill(); - printf("digits-> %d \n",digits->GetTime()); - td->Write(); - } - - - - - - - - - - - - - +//_____________________________________________________________________________ +AliDigitizer* AliSTART::CreateDigitizer(AliRunDigitizer* manager) const +{ + return new AliSTARTDigitizer(manager); +} +//____________________________________________________________________________ +void AliSTART::Digits2Raw() +{ +// +// Starting from the START digits, writes the Raw Data objects +// +// AliSTARTLoader* pStartLoader = (AliSTARTLoader*)fLoader; + fLoader ->LoadDigits("read"); + TTree* treeD = fLoader->TreeD(); + if (!treeD) { + AliError("no digits tree"); + return; + } + if (fDigits == 0x0) fDigits = new AliSTARTdigit(); + + TBranch *branch = treeD->GetBranch("START"); + if (branch) { + branch->SetAddress(&fDigits); + }else{ + AliError("Branch START DIGIT not found"); + exit(111); + } + AliSTARTRawData rawWriter; + rawWriter.SetVerbose(0); + + AliDebug(2,Form(" Formatting raw data for START ")); + branch->GetEntry(0); + // rawWriter.RawDataSTART(treeD->GetBranch("START")); + rawWriter.RawDataSTART(fDigits); + + + fLoader->UnloadDigits(); + +}