#ifndef __CREATEHADES__ #define __CREATEHADES__ #include "hades.h" #include "hruntimedb.h" #include "hdatasource.h" #include "hrootsource.h" #include "hldfilesource.h" #include "hparora2io.h" #include "hparasciifileio.h" #include "hparrootfileio.h" #include "htask.h" #include "htaskset.h" #include "hrichunpacker.h" #include "hmdcunpacker.h" #include "hshowerunpacker.h" #include "htoftrb2unpacker.h" #include "hrpctrb2unpacker.h" #include "hstart2trb2unpacker.h" #include "hlatchunpacker.h" #include "htboxunpacker.h" #include "hspectrometer.h" #include "hstart2detector.h" #include "htboxdetector.h" #include "hrichdetector.h" #include "hmdcdetector.h" #include "htofdetector.h" #include "hshowerdetector.h" #include "hrpcdetector.h" #include "hstarttaskset.h" #include "hrichtaskset.h" #include "hmdctaskset.h" #include "htoftaskset.h" #include "hshowertaskset.h" #include "hrpctaskset.h" #include "hsplinetaskset.h" #include "hparticlecandfiller.h" #include "hparticletrackcleaner.h" #include "hparticleevtinfofiller.h" #include "hmdcdedx2maker.h" #include "hmdcsetup.h" #include "hmdclayercorrpar.h" #include "hmdctrackdset.h" #include "hmdc34clfinder.h" #include "hmdcidealtracking.h" #include "hmdcsizescells.h" #include "hmdcgetcontainers.h" #include "hedhelpers.h" #include "TOrdCollection.h" Bool_t createHades() { TString inputFile = "/lustre/hades/aug11/229/be1122916420403.hld"; Int_t refId = -1; TString asciiParFile=""; TString rootParFile = "/u/hadesdst/aug11/gen0/macros/allParam_AUG11_v3_withfullMDC.root"; //TString paramSource = "ORACLE, ASCII"; TString paramSource = "ROOT"; cout<<"-----------------------------------------------------------------------------"<setTreeBufferSize(8000); gHades->setQuietMode(2); gHades->makeCounter(1); HRuntimeDb* rtdb = gHades->getRuntimeDb(); // ----------Add detectors to the setup: NO NEED TO CHANGE ----------- //----------------- Detector setup configuration --------------------- Int_t mdcUnpackers [12] = {0x1100,0x1110,0x1120,0x1130,0x1140,0x1150,0x1000,0x1010,0x1020,0x1030,0x1040,0x1050}; Int_t rpcUnpackers [2] = {0x8400,0x8410}; // Int_t startUnpackers [1] = {0x8800}; // Int_t tofUnpackers [1] = {0x8600}; // Int_t wallUnpackers [1] = {0x8700}; // Int_t showerUnpackers[6] = {0x3200,0x3210,0x3220,0x3230,0x3240,0x3250}; // Int_t richUnpackers [3] = {0x8300,0x8310,0x8320}; /* Int_t mdcMods[6][4]= { {0,0,0,0}, {1,1,0,1}, {1,1,1,1}, {0,0,0,0}, {1,1,1,1}, {1,1,1,1} }; */ Int_t mdcMods[6][4]= { {1,1,1,1}, {1,1,1,1}, {1,1,1,1}, {1,1,1,1}, {1,1,1,1}, {1,1,1,1} }; // recommendations from Vladimir+Olga // according to params from 28.04.2011 Int_t nLayers[6][4] = { {6,6,6,6}, {6,6,6,6}, {6,6,6,6}, {6,6,6,6}, {6,6,6,6}, {6,6,6,6} }; Int_t nLevel[4] = {10,50000,10,5000}; Int_t tofMods [22] = {1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; Int_t rpcMods [1] = {1}; Int_t showerMods[3] = {1,2,3}; Int_t nStartMods [10] = {1,1,1,1,0,0,0,0,0,0}; Int_t wallMods [1] = {1}; Int_t nTrigMods[] = {1}; Int_t richMods[] = {1}; HSpectrometer* spec = gHades->getSetup(); spec->addDetector(new HRichDetector); spec->addDetector(new HTBoxDetector); spec->addDetector(new HStart2Detector); spec->addDetector(new HMdcDetector); spec->addDetector(new HRpcDetector); spec->addDetector(new HTofDetector); spec->addDetector(new HShowerDetector); spec->addDetector(new HStart2Detector); spec->addDetector(new HTBoxDetector); // ----- Set active modules for each detector: NO NEED TO CHANGE ----- spec->getDetector("TBox")->setModules(-1,nTrigMods); spec->getDetector("Start")->setModules(-1,nStartMods); for (Int_t is = 0; is < 6; is ++) { spec->getDetector("Rpc")->setModules(is,rpcMods); spec->getDetector("Shower")->setModules(is,showerMods); spec->getDetector("Tof")->setModules(is,tofMods); spec->getDetector("Mdc")->setModules(is,mdcMods[is]); spec->getDetector("Rich")->setModules(is,richMods); } // ------------ Set input data file: NO NEED TO CHANGE -------------- HldFileSource *source=new HldFileSource; source->setDirectory(""); source->addFile((Text_t*)inputFile.Data(),refId); myHades->setDataSource(source); refId = gHades->getDataSource()->getCurrentRunId(); //-------------------------------------------------------------------- //-------------------------------------------------------------------- // PARAMETER SOURCES if (paramSource.Contains("ROOT")) { HParRootFileIo *input1=new HParRootFileIo; input1->open(((Char_t *)rootParFile.Data()),"READ"); if (paramSource.Contains("ASCII")){ rtdb->setSecondInput(input1); } else { rtdb->setFirstInput(input1); } } if (paramSource.Contains("ASCII")) { HParAsciiFileIo *input2 = new HParAsciiFileIo(); input2->open((Text_t*)asciiParFile.Data(),"in"); rtdb->setFirstInput(input2); } // ----- SECOND PARAM INPUT FOR PID if (paramSource.Contains("ORACLE")) { HParOra2Io* ora=new HParOra2Io; ora->open(); ora->setHistoryDate("now"); rtdb->setSecondInput(ora); } //-------------------------------------------------------------------- source->addUnpacker( new HLatchUnpacker(startUnpackers[0]) ); source->addUnpacker( new HTBoxUnpacker(startUnpackers[0]) ); for(UInt_t i=0; i<(sizeof(richUnpackers)/sizeof(Int_t)); i++){ source->addUnpacker( new HRichUnpacker(richUnpackers[i]) ); } for(UInt_t i=0; i<(sizeof(mdcUnpackers)/sizeof(Int_t)); i++) { HMdcUnpacker* mdc_unpacker = new HMdcUnpacker( mdcUnpackers[i], kTRUE ); mdc_unpacker->setQuietMode(kTRUE); mdc_unpacker->setFillDataWord(kFALSE); mdc_unpacker->setFillOepStatus(kTRUE); mdc_unpacker->setPersistencyDataword(kTRUE); mdc_unpacker->setPersistencyOepStatusData(kFALSE); source->addUnpacker( (HMdcUnpacker*)mdc_unpacker ); } for(UInt_t i=0; i<(sizeof(showerUnpackers)/sizeof(Int_t)); i++) { source->addUnpacker( new HShowerUnpacker(showerUnpackers[i]) ); } for(UInt_t i=0; i<(sizeof(tofUnpackers)/sizeof(Int_t)); i++){ HTofTrb2Unpacker *tofUnp = new HTofTrb2Unpacker(tofUnpackers[i]); tofUnp->setDebugFlag(0); //tofUnp->setQuietMode(); tofUnp->setcorrectINL(); //tofUnp->disableTimeRef(); tofUnp->removeTimeRef(); //tofUnp->shiftTimes(7200.); source->addUnpacker( tofUnp ); } for(UInt_t i=0; i<(sizeof(startUnpackers)/sizeof(Int_t)); i++){ HStart2Trb2Unpacker *startUnp = new HStart2Trb2Unpacker(startUnpackers[i]); startUnp->setDebugFlag(0); startUnp->setcorrectINL(); //startUnp->setQuietMode(); // //startUnp->disableTimeRef(); source->addUnpacker( startUnp ); } for(UInt_t i=0; i<(sizeof(rpcUnpackers)/sizeof(Int_t)); i++){ HRpcTrb2Unpacker *rpcTrb2Unpacker = new HRpcTrb2Unpacker(rpcUnpackers[i]); //rpcTrb2Unpacker->setQuietMode(); rpcTrb2Unpacker->setDebugFlag(0); rpcTrb2Unpacker->setcorrectINL(); //rpcTrb2Unpacker->storeSpareChannelsData(); //rpcTrb2Unpacker->disableTimeRef(); source->addUnpacker(rpcTrb2Unpacker); } //-------------------------------------------------------------------- // ALIGNMENT OF WIRE PLANES HMdcLayerCorrPar* fMdcLayerCorrPar = (HMdcLayerCorrPar*)rtdb->getContainer("MdcLayerCorrPar"); // fMdcLayerCorrPar->setDefaultPar(); fMdcLayerCorrPar->setStatic(); //-------------------------------------------------------------------- // ----------- Build TASK SETS (using H***TaskSet::make) ------------- HStartTaskSet *startTaskSet = new HStartTaskSet(); HRichTaskSet *richTaskSet = new HRichTaskSet(); HRpcTaskSet *rpcTaskSet = new HRpcTaskSet(); HShowerTaskSet *showerTaskSet = new HShowerTaskSet(); HTofTaskSet *tofTaskSet = new HTofTaskSet(); HMdcTaskSet *mdcTaskSet = new HMdcTaskSet(); mdcTaskSet->setVersionDeDx(1); // 0 = no dEdx, 1 = HMdcDeDx2 HTask *startTasks = startTaskSet ->make("",""); HTask *richTasks = richTaskSet ->make("real",""); HTask *tofTasks = tofTaskSet ->make("real"); HTask *rpcTasks = rpcTaskSet ->make("real"); HTask *showerTasks = showerTaskSet ->make("","lowshowerefficiency"); HTask *mdcTasks = mdcTaskSet->make("rtdb",""); // ----------- MDC ------------------------------------------------------ HMdcSetup* setup = (HMdcSetup*)rtdb->getContainer("MdcSetup"); rtdb->initContainers(refId); setup->setStatic(); //setup->getMdcCommonSet()->setAnalysisLevel(1); setup->getMdcCommonSet()->setAnalysisLevel(4); // fit setup->getMdcCalibrater1Set()->setMdcCalibrater1Set(1, 1); // 1 = NoStartandCal, 2 = StartandCal, 3 = NoStartandNoCal :: 0 = noTimeCut, 1 = TimeCut setup->getMdcTrackFinderSet()->setIsCoilOff(kFALSE); // field is on setup->getMdcTrackFinderSet()->setNLayers(nLayers[0]); setup->getMdcTrackFinderSet()->setNLevel(nLevel); setup->getMdc12FitSet()->setMdc12FitSet(2,1,0,kFALSE,kFALSE); // tuned fitter, seg //----------------SPLINE and RUNGE TACKING---------------------------------------- HSplineTaskSet *splineTaskSet = new HSplineTaskSet("",""); HTask *splineTasks=splineTaskSet->make("","spline,runge"); //----------------------------------------------------------------------- //HParticleCandFiller *pParticleCandFiller = new HParticleCandFiller("particlecandfiller","particlecandfiller","debug,goodseg0,goodseg1,goodmeta,goodrk"); HParticleCandFiller *pParticleCandFiller = new HParticleCandFiller ("particlecandfiller","particlecandfiller",""); HParticleTrackCleaner *pParticleCleaner = new HParticleTrackCleaner("particlecleaner" ,"particlecleaner"); HParticleEvtInfoFiller *pParticleEvtInfo = new HParticleEvtInfoFiller("particleevtinfo" ,"particleevtinfo"); //------------------------ Master task set -------------------------- // filling of MDC de/dx ... HMdcDeDx2Maker::setFillCase(2); // 0 (default)=combined, 1=combined+seg, 2=combined+seg+mod HTaskSet *masterTaskSet = gHades->getTaskSet("all"); masterTaskSet->add(startTasks); masterTaskSet->add(tofTasks); masterTaskSet->add(rpcTasks); masterTaskSet->add(richTasks); masterTaskSet->add(showerTasks); masterTaskSet->add(mdcTasks); masterTaskSet->add(splineTasks); masterTaskSet->add(pParticleCandFiller); masterTaskSet->add(pParticleCleaner); masterTaskSet->add(pParticleEvtInfo); //-------------------------------------------------------------------- // Get Parameter containers for transformations // This taks is needed to get the parameter // containers for coordinate transformations // of the detector hits for the event display masterTaskSet->add(new HEDMakeContainers()); //-------------------------------------------------------------------- masterTaskSet->isTimed(kTRUE); Bool_t hasTracking = kFALSE; HTaskSet* set = (HTaskSet*) gHades->getTaskSet("all")->getSetOfTask()->FindObject("Mdc"); if(set && set->getSetOfTask()->FindObject("mdc.hitf")) hasTracking = kTRUE; if(!hasTracking){ set = (HTaskSet*) gHades->getTaskSet("all")->getSetOfTask()->FindObject("Mdc"); if(set && set->getSetOfTask()->FindObject("mdc.hitf")) hasTracking = kTRUE; } if(hasTracking){ cout<<"EVENT DISPLAY : TRACKING IS RUNNING #########################################"<init()) { cerr<<"EVENT DISPLAY : ERROR IN INIT, EXITING! #####################################"<