#ifndef __CREATEHADES__ #define __CREATEHADES__ #include "hades.h" #include "hdst.h" #include "hbeamtime.h" #include "hruntimedb.h" #include "hdatasource.h" #include "hrootsource.h" #include "hldsource.h" #include "hldfilesource.h" #include "hldgrepfilesource.h" #include "hldremotesource.h" #ifdef DABC_SUPPORT #include "hldstreamsource.h" // dabc! #endif #ifdef ORACLE_SUPPORT #include "hparora2io.h" #endif #include "hparasciifileio.h" #include "hparrootfileio.h" #include "htask.h" #include "htaskset.h" #include "hspectrometer.h" #include "hstart2detector.h" #include "htboxdetector.h" #include "hrichdetector.h" #include "hitofdetector.h" #include "hmdcdetector.h" #include "htofdetector.h" #include "hemcdetector.h" #include "hrpcdetector.h" #include "hwalldetector.h" #include "hpiontrackerdetector.h" #include "hstsdetector.h" #include "hfrpcdetector.h" #include "hstarttaskset.h" #include "hrich700taskset.h" #include "hitoftaskset.h" #include "hmdctaskset.h" #include "htoftaskset.h" #include "hwalltaskset.h" #include "hemctaskset.h" #include "hrpctaskset.h" #include "hststaskset.h" #include "hfrpctaskset.h" #include "hpiontrackertaskset.h" #include "hsplinetaskset.h" #include "hemcclusterf.h" #include "hparticlevertexfind.h" #include "hparticlecandfiller.h" #include "hparticletrackcleaner.h" #include "hparticleevtinfofiller.h" #include "hparticlestart2hitf.h" #include "hparticlebt.h" #include "hparticlet0reco.h" #include "hmdcunpacker.h" #include "hrich700trb3unpacker.h" #include "hitoftrb3unpacker.h" #include "hrpctrb3unpacker.h" #include "htoftrb3unpacker.h" #include "hstart2trb3unpacker.h" #include "hpiontrackertrb3unpacker.h" #include "hwalltrb2unpacker.h" #include "hststrb3unpacker.h" #include "hfrpctrb3unpacker.h" #include "hemctrb3unpacker.h" #include "hlatchunpacker.h" #include "htboxunpacker.h" #include "htrbnetdef.h" #include "hmdcsetup.h" #include "hmdctimecut.h" #include "hmdclayercorrpar.h" #include "hmdctrackdset.h" #include "hmdcvertexfind.h" #include "hmdctrackfinder.h" #include "hmdc34clfinder.h" #include "hmetamatchF2.h" #include "hmdcidealtracking.h" #include "hmdccalibrater1.h" #include "hstart2calibrater.h" #include "hmdcsizescells.h" #include "hmdcgetcontainers.h" #include "hedhelpers.h" #include "TOrdCollection.h" #include "hforwardbasictracker.h" #include "hforwardfinetracker.h" #include using namespace std; Bool_t createHades(Int_t datasource, TString inputDir, TString inputFile, Int_t refId, TString eventbuilder, TString paramSource, TString asciiParFile, TString rootParFile ) { const Bool_t doExtendedFit = kTRUE; // switch on/off fit for initial params of segment fitter (10 x slower!) const Bool_t doStartCorrection = kTRUE; // kTRUE (default)= use run by run start corrections const Bool_t doRotateRich = kFALSE; const Bool_t doMetaMatch = kFALSE; // default : kTRUE, kFALSE switch off metamatch in clusterfinder const Bool_t doMetaMatchScale = kTRUE; const Bool_t useWrireStat = kFALSE; const Float_t metaMatchScale = 2; cout<<"-----------------------------------------------------------------------------"<setTreeBufferSize(8000); gHades->setQuietMode(4); // 0:all prints, 1: Eventwise, 2: Summary at end, 3: Event+Summary, 4: Online eventwise (eventLoop called with one event only) gHades->makeCounter(100); HRuntimeDb* rtdb = gHades->getRuntimeDb(); gHades->setBeamTimeID(HADES::kApr25); TString beamtime = "apr25"; TString paramrelease = "now"; // now, 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} }; Int_t nLayers[6][4] = { {6,6,5,6}, {6,6,5,6}, {6,6,5,6}, {6,6,5,6}, {6,6,5,6}, {6,6,5,6} }; Int_t nLevel[4] = {10,50000,10,5000}; HDst::setupSpectrometer(beamtime,mdcMods,"rich,mdc,tof,rpc,emc,wall,start,tbox"); // beamtime mdcMods_apr12, mdcMods_full // Int_t mdcset[6][4] setup mdc. If not used put NULL (default). // if not NULL it will overwrite settings given by beamtime // detectors (default)= rich,mdc,tof,rpc,shower,fwdet,tbox,start HDst::setupParameterSources(paramSource,asciiParFile,rootParFile,paramrelease); // now, APR12_gen2_dst //HDst::setupParameterSources("oracle",asciiParFile,rootParFile,"now"); // use to create param file // parsource = oracle,ascii,root (order matters) // if source is "ascii" a ascii param file has to provided // if source is "root" a root param file has to provided // The histDate paramter (default "now") is used wit the oracle source if (datasource == 99) { #ifdef DABC_SUPPORT ::Info("", "Add HldStreamSource"); HldStreamSource* source = new HldStreamSource(eventbuilder.Data()+7 ,2); source->setRefId(refId); gHades->setDataSource(source); #else ::Error("", "HldStreamSource not supported!"); exit(1); #endif } else { HDst::setDataSource(datasource,inputDir,inputFile,refId,eventbuilder); // Int_t sourceType,TString inDir,TString inFile,Int_t refId, TString eventbuilder" } // datasource 0 = hld, 1 = hldgrep 2 = hldremote, 3 root // like "lxhadeb02.gsi.de" needed by dataosoure = 2 // inputDir needed by dataosoure = 1,2 // inputFile needed by dataosoure = 1,3 HDst::setupUnpackers(beamtime,"rich,mdc,tof,rpc,emc,tbox,wall,latch,start"); // beamtime feb21 // detectors (default)= rich,mdc,tof,rpc,emc,tbox,sts,frpc,itof,latch,start /* //-------------------------------------------------------------------- // 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(); HRich700TaskSet *richTaskSet = new HRich700TaskSet(); HRpcTaskSet *rpcTaskSet = new HRpcTaskSet(); HEmcTaskSet *emcTaskSet = new HEmcTaskSet(); HTofTaskSet *tofTaskSet = new HTofTaskSet(); // HStsTaskSet *stsTaskSet = new HStsTaskSet(); // HFRpcTaskSet *frpcTaskSet = new HFRpcTaskSet(); // HiTofTaskSet *itofTaskSet = new HiTofTaskSet(); HWallTaskSet *wallTaskSet = new HWallTaskSet(); HMdcTaskSet *mdcTaskSet = new HMdcTaskSet(); mdcTaskSet->setVersionDeDx(1); // 0 = no dEdx, 1 = HMdcDeDx2 // HPionTrackerTaskSet *piontrackerTaskSet = new HPionTrackerTaskSet(); HMdcSetup* mysetup = (HMdcSetup*)rtdb->getContainer("MdcSetup"); HMdcTimeCut* timecut = (HMdcTimeCut*)rtdb->getContainer("MdcTimeCut"); gHades -> getRuntimeDb()->getContainer("MdcLookupRaw"); rtdb->initContainers(refId); timecut->setIsUsed(kFALSE); // time cut not used in HMdcCalibrater1 , but Tracking will use it mysetup->setStatic(); mysetup->getMdcCommonSet()->setAnalysisLevel(4); // fit mysetup->getMdcCalibrater1Set()->setMdcCalibrater1Set(2, 0); // 1 = NoStartandCal, 2 = StartandCal, 3 = NoStartandNoCal :: 0 = noTimeCut, 1 = TimeCut mysetup->getMdcTrackFinderSet()->setIsCoilOff(kFALSE); // field is on mysetup->getMdcTrackFinderSet()->setNLayers(nLayers[0]); mysetup->getMdcTrackFinderSet()->setNLevel(nLevel); mysetup->getMdc12FitSet()->setMdc12FitSet(2,1,0,kFALSE,kFALSE); // tuned fitter, seg HTask *startTasks; startTasks = startTaskSet ->make("real",""); HTask *richTasks = richTaskSet ->make("real",""); HTask *tofTasks = tofTaskSet ->make("real"); HTask *wallTasks = wallTaskSet ->make("real", "noeventplane"); HTask *rpcTasks = rpcTaskSet ->make("real"); HTask *emcTasks = emcTaskSet ->make("real",""); HEmcClusterF* clFinder = (HEmcClusterF*) emcTasks->getTask("emc.clusf"); clFinder->setRpcMatchingParDThDPh(5); // new clFinder->setRpcMatchingParDTheta(0,5); clFinder->setRpcMatchingParDTime(0,10); clFinder->setClFnParamDTimeWindow(-5,5); //HTask *mdcTasks = mdcTaskSet ->make("","hit,NoStartAndCal,NoTimeCuts,MagnetOff"); HTask *mdcTasks = mdcTaskSet ->make("rtdb",""); //new broader cut on vertex position HMdcVertexFind* vertFndr = mdcTaskSet->getMdcVertexFinder(); vertFndr->setCut(-170.,-30.,20.); // HTask *piontrackerTasks = piontrackerTaskSet ->make("real","nopiontrackertrack"); //HTask *piontrackerTasks = piontrackerTaskSet ->make("real"); // ----------- MDC ------------------------------------------------------ //HTask *mdcTasks = mdcTaskSet ->make("rtdb",""); HMdcTrackFinder* trackfinder = HMdcTrackDSet::getMdcTrackFinder(); if(trackfinder) { //trackfinder->setMetaMatchFlag(kFALSE,kFALSE); // no metamatching, no metamacth plots } //----------------SPLINE and RUNGE TACKING---------------------------------------- HSplineTaskSet *splineTaskSet = new HSplineTaskSet("",""); HTask *splineTasks=splineTaskSet->make("","spline,runge"); // do we need this?? ---> ask Jochen !! HParticleStart2HitF *pParticleStart2HitF = new HParticleStart2HitF ("particlehitf" ,"particlehitf",""); pParticleStart2HitF->setTimeCut(5,9); //----------------------------------------------------------------------- //HParticleCandFiller *pParticleCandFiller = new HParticleCandFiller("particlecandfiller","particlecandfiller","debug,goodseg0,goodseg1,goodmeta,goodrk"); HParticleCandFiller *pParticleCandFiller = new HParticleCandFiller ("particlecandfiller","particlecandfiller",""); HParticleTrackCleaner *pParticleCleaner = new HParticleTrackCleaner("particlecleaner" ,"particlecleaner"); HParticleVertexFind *pParticleVertexFind = new HParticleVertexFind ("particlevertexfind","particlevertexfind",""); pParticleVertexFind->setCut(-170.,-30.,20.); //new broader cut on vertex position HParticleEvtInfoFiller *pParticleEvtInfo = new HParticleEvtInfoFiller("particleevtinfo" ,"particleevtinfo",beamtime); //HForwardBasicTracker *pForwardBasicTrk = new HForwardBasicTracker("ForwardBasicTracker","ForwardBasicTracker"); //HForwardFineTracker *pForwardFineTrk = new HForwardFineTracker("ForwardFineTracker","ForwardFineTracker"); //------------------------ Master task set -------------------------- HTaskSet *masterTaskSet = gHades->getTaskSet("all"); //######################### SPECIAL ############################# HStart2Calibrater::setCorrection(kFALSE) ; // kTRUE(default) = use HStartCalRunPar corrections, for online no corrections //############################################################### masterTaskSet->add(startTasks); // masterTaskSet->add(itofTasks); masterTaskSet->add(tofTasks); masterTaskSet->add(wallTasks); masterTaskSet->add(rpcTasks); // masterTaskSet->add(stsTasks); // masterTaskSet->add(frpcTasks); masterTaskSet->add(richTasks); masterTaskSet->add(emcTasks); masterTaskSet->add(mdcTasks); //masterTaskSet->add(piontrackerTasks); masterTaskSet->add(splineTasks); masterTaskSet->add(pParticleCandFiller); masterTaskSet->add(pParticleCleaner); masterTaskSet->add(pParticleVertexFind); // run after track cleaning masterTaskSet->add(pParticleEvtInfo); //masterTaskSet->add(pForwardBasicTrk); //masterTaskSet->add(pForwardFineTrk); masterTaskSet->isTimed(kTRUE); HMdcTrackDSet::setTrackParam(beamtime); if(!doMetaMatch)HMdcTrackDSet::setMetaMatchFlag(kFALSE,kFALSE); //do not user meta match in clusterfinder if(doMetaMatchScale)HMetaMatchF2::setScaleCut(metaMatchScale,metaMatchScale,metaMatchScale); // (tof,rpc,shower) increase matching window, but do not change normalization of MetaQA HMdcCalibrater1::setUseWireStat(useWrireStat); //mdcTaskSet->getCalibrater1()->setUseMultCut(200,kTRUE,kTRUE,kFALSE); // nwires, docut, useTot, skip mdcTaskSet->getCalibrater1()->setDoPrint(kFALSE); //-------------------------------------------------------------------- // find best initial params for segment fit (takes long!) if(doExtendedFit) { HMdcTrackDSet::setCalcInitialValue(1); // - 1 : for all clusters 2 : for not fitted clusters } //-------------------------------------------------------------------- HStart2Calibrater::setCorrection(doStartCorrection); // if calibration is available .... change it //-------------------------------------------------------------------- if (!gHades->init()) { cerr<<"EVENT DISPLAY : ERROR IN INIT, EXITING! #####################################"<