#!/bin/bash ################################################################ ## script for running sim&rec and sim&rec for LMD alignment with current LMD reconstruction ## 28/11/2013 1st version ## A.Karavdina ################################################################ echo Enter momentum from "1.5, 4.06, 8.9, 11.91, 15 [GeV/c]": read mom echo "Beam mometum is: $mom!" echo Enter sample number: read sNum cd ${VMCWORKDIR}/macro/lmd/ PANDAROOTmy=/panda/karavdina/ pbeam=$mom momStr=`echo $pbeam | sed -e '{ s/\./_/g; }'` #path=${VMCWORKDIR}/macro/lmd/testPixelAlignChallenge/mom_${momStr}/ # # create misalignment consts TRANS=(0 50 100 200 300 400 500 600 800 1000) #mkm #TRANS=(0) #mkm TRANSN=${#TRANS[@]} ROT=(0 1 3 5) #mrad #ROT=(0) #mrad ROTN=${#ROT[@]} for (( jt=0;jt<$TRANSN;jt++)); do for (( jr=0;jr<$ROTN;jr++)); do cd ${VMCWORKDIR}/macro/lmd/ dr=${TRANS[${jt}]} da=${ROT[${jr}]} #number of events #for alignment #numEvB=3000000 numEvB=5000000 #for results test numEvA=10000 # numEvA=1000 numEv=${numEvB} pathMC=${VMCWORKDIR}/macro/lmd/testPixelAlignSIM_${numEvB}/MCfilesBOX${sNum}/mom_${momStr} path=${VMCWORKDIR}/macro/lmd/testPixelAlignSIM_${numEvB}/mom_${momStr}/${dr}mkm_${da}mrad/ mkdir -p ${path} #number of trks per event numTrks=1 #merge hits on sensors from different sides. true=yes mergedHits=true doalign=true ##Skip kinematic filter (before back-propagation) SkipFilt=true ### if SkipFilt=false (XThetaCut or YPhiCut) or BoxCut should be true: ### X-Theta kinematic cut before back-propagation, add constant shift dX[cm] if beam is shifted XThetaCut=false dX=0. ### Y-Phi kinematic cut before back-propagation, add constant shift dY[cm] if beam is shifted YPhiCut=false dY=0. ### BOX cut before back-propagation BoxCut=false ## Clean after back-propagation (M-cut: momentum or MVA cut) CleanSig=false ## Combined filter (X&Y and M-cut) CombFilt=false ## Write all MC info in TrkQA array WrAllMC=false ############## # # #generate misalignment consts if [ ! -r ${VMCWORKDIR}/macro/lmd/testPixelAlignSIM_${numEvB}/misalignConsts/${dr}mkm_${da}mrad/lumi.misalign_pixel.par ]; then root -l -b -q LMD_alignment/create_misalignment_lmd_pixel.C\(${dr},${da},"\"${path}/lumi.misalign_pixel.par\""\) mkdir -p ${VMCWORKDIR}/macro/lmd/testPixelAlignSIM_${numEvB}/misalignConsts/${dr}mkm_${da}mrad/ mv ${path}/lumi.misalign_pixel.par ${VMCWORKDIR}/macro/lmd/testPixelAlignSIM_${numEvB}/misalignConsts/${dr}mkm_${da}mrad/. fi cp ${VMCWORKDIR}/macro/lmd/testPixelAlignSIM_${numEvB}/misalignConsts/${dr}mkm_${da}mrad/lumi.misalign_pixel.par ${path}/. cp ${VMCWORKDIR}/geometry/trafo_matrices_lmd.dat ${path}/. # #use externally generated geometry # cp /panda/nov2013pandaroot/macro/lmd/LMD_alignment/challenge/trafo_matrices_lmd.dat ${path}/. # cp /panda/nov2013pandaroot/macro/lmd/LMD_alignment/challenge/Luminosity-Detector.root ${VMCWORKDIR}/input/. # cp ${VMCWORKDIR}/macro/lmd/LMD_alignment/lumi.align_pixel_ideal.par ${path}/lumi.misalign_pixel.par # #simulation with Box generator if [ ! -r ${pathMC}/Lumi_MC_0.root ]; then mkdir -p ${pathMC} root -l -b -q runLumiPixel0SimBox.C\(${numEv},0,"\"${pathMC}\"",0,-2212,${pbeam},${numTrks},0\) fi #copy data from MC data storage cp ${pathMC}/Lumi_MC_0.root ${path}/. cp ${pathMC}/Lumi_Params_0.root ${path}/. ### #simulation with DPM ## #modeDPM=1 #el+inel ## root -l -b -q runLumiPixel0SimDPMDirect.C\(${numEv},0,${pbeam},"\"${path}\"",0,3562,$modeDPM,0.12\) #digi root -l -b -q runLumiPixel1Digi.C\(${numEv},0,"\"${path}\""\) #hit reconstruction with misaligned consts root -l -b -q runLumiPixel2Reco.C\(${numEv},0,"\"${path}\"",0,$doalign\) # ##merge hits root -l -b -q runLumiPixel2bHitMerge.C\(${numEv},0,"\"${path}\"",0,$doalign\) #switch on "missing plane" search algorithm misspl=true #use cuts during trk seacrh with "CA". Should be 'false' if sensors missaligned! trkcut=false ### change "CA" --> "Follow" if you want to use Trk-Following as trk-search algorithm ### NB: CA can use merged or single(not merged) hits, Trk-Following can't root -l -b -q runLumiPixel3Finder.C\(${numEv},0,"\"${path}\"",0,"\"CA\"",${misspl},${mergedHits},${trkcut},${pbeam}\) #track fit: ### Possible options: "Minuit", "KalmanGeane", "KalmanRK" root -l -b -q runLumiPixel4Fitter.C\(${numEv},0,"\"${path}\"",0,"\"Minuit\"",${mergedHits}\) #track filter (on number of hits and chi2) root -l -b -q runLumiPixel4aFilter.C\(${numEv},0,"\"${path}\"",0,${mergedHits},${SkipFilt},${XThetaCut},${YPhiCut},${BoxCut},${dX},${dY}\) #save filtered results as standart Track array mv ${path}/Lumi_Track_0.root ${path}/Lumi_TrackNotFiltered_0.root cp ${path}/Lumi_TrackFiltered_0.root ${path}/Lumi_Track_0.root #back-propgation GEANE ### Possible options: "Geane", "RK" root -l -b -q runLumiPixel5BackProp.C\(${numEvA},0,"\"${path}\"",0,"\"Geane\"",${mergedHits},${pbeam}\) #clean signal from background (momentum cut or MVA cut) if [ $CleanSig == "true" ]; then root -l -b -q runLumiPixel5bCleanSig.C\(${numEvA},0,"\"${path}\"",0,${pbeam},${dX},${dY}\) fi #combined filter (X&Y and M cuts) if [ $CombFilt == "true" ]; then root -l -b -q runLumiPixel5cCombFilt.C\(${numEvA},0,"\"${path}\"",0,${pbeam},${dX},${dY}\) fi # # Quality assurance task(s) if [ $CombFilt == "true" ]; then root -l -b -q runLumiPixel7QA.C\(${numEvA},0,"\"${path}\"",0,${pbeam},${CombFilt}\) else root -l -b -q runLumiPixel7QA.C\(${numEvA},0,"\"${path}\"",0,${pbeam},${CleanSig}\) fi if [ $CombFilt == "true" ]; then root -l -b -q runLumiPixel7TrksQA.C\(${numEvA},0,"\"${path}\"",0,${pbeam},${WrAllMC},${CombFilt}\) else root -l -b -q runLumiPixel7TrksQA.C\(${numEvA},0,"\"${path}\"",0,${pbeam},${WrAllMC},${CleanSig}\) fi mv ${path}/Lumi_QA_0.root ${path}/Lumi_QA_before.root ### And now give some work to Millipede # cd ${VMCWORKDIR}/buildPanda/bin cp ${PANDAROOTmy}/myKnossos/constantsLMD.h ${path}/. rm ${path}/logKnossos* rm ${path}/LumiAlignConst.txt rm ${path}/ModulesStat.txt for (( jm=0;jm<10;jm++)); do cd ${VMCWORKDIR}/buildPanda/bin ./hits_align_pixel -s 0 -n ${numEv} -path ${path} -m ${jm} -out ${path}/hits_trk_for_alignment_sector${jm}.txt -outhist ${path}/hitsRes_before_alignment_sector${jm}.root cd ${PANDAROOTmy}/myKnossos /usr/bin/time -v ./knossos -i ${path}/hits_trk_for_alignment_sector${jm}.txt -o ${path}/LumiAlignConst_sector${jm}.txt -n ${numEv} -r 1 &> ${path}/logKnossos${jm} cat ${path}/LumiAlignConst_sector${jm}.txt >> ${path}/LumiAlignConst.txt echo "Module #${jm}:" >> ${path}/ModulesStat.txt grep "Alignment based on" ${path}/logKnossos${jm} >> ${path}/ModulesStat.txt grep "Last iteration used" ${path}/logKnossos${jm} >> ${path}/ModulesStat.txt done #obtain results and write it in new *.par file rm ${path}/lumi.misalign_pixel_after.par head -16 ${path}/lumi.misalign_pixel.par &> ${path}/lumi.misalign_pixel_after.par cd ${VMCWORKDIR}/buildPanda/bin ./analyze_alignment -stat ${path}/ModulesStat.txt -in ${path}/lumi.misalign_pixel.par -out ${path}/LumiAlignConst.txt -new ${path}/lumi.misalign_pixel_after.par -outroot ${path}/KnossosResults.root &> ${path}/logAnaKnossos cd ${VMCWORKDIR}/macro/lmd/ mv ${path}/Lumi_TrksQA_0.root ${path}/Lumi_TrksQA_before.root rm ${path}/Lumi_MC_0.root rm ${path}/Lumi_Params_0.root rm ${path}/Lumi_digi_0.root rm ${path}/Lumi_reco_0.root rm ${path}/Lumi_recoMerged_0.root rm ${path}/Lumi_TCand_0.root rm ${path}/Lumi_Track_0.root rm ${path}/Lumi_TrackFiltered_0.root rm ${path}/Lumi_TrackNotFiltered_0.root rm ${path}/Lumi_Geane_0.root rm ${path}/Lumi_GeaneFiltered_0.root rm ${path}/Lumi_IGNORE_0.root # TODO: apply all cuts (XY and M) # ## change old params for new params mv ${path}/lumi.misalign_pixel.par ${path}/lumi.misalign_pixel_before.par cp ${path}/lumi.misalign_pixel_after.par ${path}/lumi.misalign_pixel.par numEv=$numEvA ##Skip kinematic filter (before back-propagation) SkipFilt=false ### if SkipFilt=false (XThetaCut or YPhiCut) or BoxCut should be true: ### X-Theta kinematic cut before back-propagation, add constant shift dX[cm] if beam is shifted XThetaCut=true dX=0. ### Y-Phi kinematic cut before back-propagation, add constant shift dY[cm] if beam is shifted YPhiCut=true dY=0. ### BOX cut before back-propagation BoxCut=false ## Clean after back-propagation (M-cut: momentum or MVA cut) CleanSig=true ## Combined filter (X&Y and M-cut) CombFilt=false # #simulation with Box generator # root -l -b -q runLumiPixel0SimBox.C\(${numEv},0,"\"${path}\"",0,-2212,${pbeam},${numTrks},3562\) #copy data from MC data storage cp ${pathMC}/Lumi_MC_0.root ${path}/. cp ${pathMC}/Lumi_Params_0.root ${path}/. # #simulation with DPM #modeDPM=1 #el+inel # root -l -b -q runLumiPixel0SimDPMDirect.C\(${numEv},0,${pbeam},"\"${path}\"",0,3562,$modeDPM,0.12\) #digi root -l -b -q runLumiPixel1Digi.C\(${numEv},0,"\"${path}\""\) #hit reconstruction with misaligned consts root -l -b -q runLumiPixel2Reco.C\(${numEv},0,"\"${path}\"",0,$doalign\) # ##merge hits root -l -b -q runLumiPixel2bHitMerge.C\(${numEv},0,"\"${path}\"",0,$doalign\) #switch on "missing plane" search algorithm misspl=true #use cuts during trk seacrh with "CA". trkcut=true ### change "CA" --> "Follow" if you want to use Trk-Following as trk-search algorithm ### NB: CA can use merged or single(not merged) hits, Trk-Following can't root -l -b -q runLumiPixel3Finder.C\(${numEv},0,"\"${path}\"",0,"\"CA\"",${misspl},${mergedHits},${trkcut},${pbeam}\) #track fit: ### Possible options: "Minuit", "KalmanGeane", "KalmanRK" root -l -b -q runLumiPixel4Fitter.C\(${numEv},0,"\"${path}\"",0,"\"Minuit\"",${mergedHits}\) #track filter (on number of hits and chi2) root -l -b -q runLumiPixel4aFilter.C\(${numEv},0,"\"${path}\"",0,${mergedHits},${SkipFilt},${XThetaCut},${YPhiCut},${BoxCut},${dX},${dY}\) #save filtered results as standart Track array mv ${path}/Lumi_Track_0.root ${path}/Lumi_TrackNotFiltered_0.root cp ${path}/Lumi_TrackFiltered_0.root ${path}/Lumi_Track_0.root #back-propgation GEANE ### Possible options: "Geane", "RK" root -l -b -q runLumiPixel5BackProp.C\(${numEv},0,"\"${path}\"",0,"\"Geane\"",${mergedHits},${pbeam}\) #clean signal from background (momentum cut or MVA cut) if [ $CleanSig == "true" ]; then root -l -b -q runLumiPixel5bCleanSig.C\(${numEv},0,"\"${path}\"",0,${pbeam},${dX},${dY}\) fi #combined filter (X&Y and M cuts) if [ $CombFilt == "true" ]; then root -l -b -q runLumiPixel5cCombFilt.C\(${numEv},0,"\"${path}\"",0,${pbeam},${dX},${dY}\) fi # # Quality assurance task(s) if [ $CombFilt == "true" ]; then root -l -b -q runLumiPixel7QA.C\(${numEv},0,"\"${path}\"",0,${pbeam},${CombFilt}\) else root -l -b -q runLumiPixel7QA.C\(${numEv},0,"\"${path}\"",0,${pbeam},${CleanSig}\) fi if [ $CombFilt == "true" ]; then root -l -b -q runLumiPixel7TrksQA.C\(${numEv},0,"\"${path}\"",0,${pbeam},${WrAllMC},${CombFilt}\) else root -l -b -q runLumiPixel7TrksQA.C\(${numEv},0,"\"${path}\"",0,${pbeam},${WrAllMC},${CleanSig}\) fi mv ${path}/Lumi_QA_0.root ${path}/Lumi_QA_after.root cd ${VMCWORKDIR}/buildPanda/bin for (( jm=0;jm<10;jm++)); do ./hits_align_pixel -s 0 -n ${numEv} -path ${path} -m ${jm} -out ${path}/hits_trk_for_alignment_sector${jm}_after.txt -outhist ${path}/hitsRes_after_alignment_sector${jm}.root done mv ${path}/Lumi_TrksQA_0.root ${path}/Lumi_TrksQA_after.root rm ${path}/Lumi_MC_0.root rm ${path}/Lumi_Params_0.root rm ${path}/Lumi_digi_0.root rm ${path}/Lumi_reco_0.root rm ${path}/Lumi_recoMerged_0.root rm ${path}/Lumi_TCand_0.root rm ${path}/Lumi_Track_0.root rm ${path}/Lumi_TrackFiltered_0.root rm ${path}/Lumi_TrackNotFiltered_0.root rm ${path}/Lumi_Geane_0.root rm ${path}/Lumi_GeaneFiltered_0.root rm ${path}/Lumi_IGNORE_0.root ## ##clean tmp storage place #rm ${path}/FairRunInfo* #rm ${path}/hits_trk_for_alignment* #rm ${path}/Lumi_* done done exit