temp
271866 - 276314
276315 - 278270
278271 - 280927
280928 - infinity
- Failing ROCs not listed under "Known Problems":
-- FPix_BpI_D2_BLD2_PNL1_PLQ1_ROC0 (completely new)
-- BPix_BmO_SEC1_LYR3_LDR3F_MOD3_ROC5 (already seen in the past)
Unkown:
BPix_BpI_SEC3_LYR1_LDR4F_MOD3_ROC2 - bad levels
BPix_BmI_SEC5_LYR1_LDR6F_MOD3_ROC0 - bad levels
Bpix_BmO_SEC1_LYR3_LDR3F_MOD3_ROC5 - bad levels
Already known:
BPix_BpO_SEC4_LYR2_LDR8F_MOD1_ROC3 - disabled (BBB)
BPix_BpI_SEC2_LYR3_LDR6F_MOD1_ROC14 - disabled (no hits)
BPix_BmO_SEC8_LYR1_LDR9F_MOD4_ROC[8-15] (TBM-B) - out (known)
BPix_BmO_SEC4_LYR2_LDR8F_MOD4_ROC7 - disabled (BBB)
BPix_BmO_SEC3_LYR2 - out
Bpix_BmI_SEC6_LYR3_LDR14F_MOD4_ROC11 - out (generates BUSY)
FPix_BmO_D2_BLD10_PNL1_PLQ2_ROC4 - disabled (newly in detconfig 212)
FPix_BpO_D1_BLD5_PNL2_PLQ2_ROC6 - disabled
!!!!!!!!
FPix_BmO_D2_BLD10_PNL1_PLQ2_ROC4
!!!!!!!!
Procedure
Environment
# create a new directory with an appropriate name
# choose a run on which the data validation will be done, let's refer to it as $run$
https://cmswbm.web.cern.ch/cmswbm/cmsdb/servlet/RunSummary
# Need to choose a collision run, the button "for the last 24 hours" is a good starting point, but of course the main thing is that the run should be later then the module was switched off.
# One can also set up the date intervals in the webpage
grid-proxy-init
das_client --query="dataset run=$run$" --limit=0 | grep "/FEVT"
# choose the FEVT dataset
# in case that is not yet avaible
# das_client --query="das_client --query="dataset run=$run$" --limit=0 | grep "/RECO" | grep "Zero"
" and choose the RECO
# lets refer to the found dataset as $dataset$ now
# check the following, this must give back the dataset
das_client --query="dataset dataset=$dataset$ run=$run$"
# check whether the dataset is avaible on disk or not, this query must give back at least one T2 site. Otherwise, choose an other dataset.
das_client --query="site dataset=$dataset$" --limit=0
# check the release
das_client --query="release dataset=$dataset$"
# let's choose the most recent one and now refer to it as $release$
cmsrel $release$
cd $release$/src
cmsenv
git cms-addpkg CondTools/SiPixel
git clone https://github.com/jkarancs/PixelTimingStudy DPGAnalysis/PixelTimingStudy
vim DPGAnalysis/PixelTimingStudy/plugins/TimingStudy.cc
#define COMPLETE 0
#define SPLIT 2
vim DPGAnalysis/PixelTimingStudy/plugins/TimingStudy.h
#define COMPLETE 0
scram b -j 10
New Quality payload generation
cd CondTools/SiPixel/test
# choose the most recent config from git using the link below
https://github.com/tvami/SiPixelQualtiyValidation
# let me note the version number now like $xy$
wget https://raw.githubusercontent.com/tvami/SiPixelQualtiyValidation/master/0SiPixelBadModuleByHandBuilder_cfg_v$xy$.py
# add the new bad module(s) to a new file
cp 0SiPixelBadModuleByHandBuilder_cfg_v$xy$.py 0SiPixelBadModuleByHandBuilder_cfg_v$xy+1$.py
vim 0SiPixelBadModuleByHandBuilder_cfg_v$xy+1$.py
# edit the following lines
connect = cms.string('sqlite_file:SiPixelQuality_v$xy+1$.db'),
toPut = cms.VPSet(cms.PSet(
record = cms.string('SiPixelQualityFromDbRcd'),
tag = cms.string('SiPixelQuality_v$xy+1$')
# add a new bad module using
cms.PSet(
errortype = cms.string('$type$'),
detid = cms.uint32($detid$)
),
# $type$ could be none/tbmA/tbmB/whole
# $detid$ can be learned from
https://tvami.web.cern.ch/tvami/projects/PixelBadModules/phase0GeometryTopology.txt
cmsRun 0SiPixelBadModuleByHandBuilder_cfg_v$xy+1$.py
uploadConditions.py SiPixelQuality_v$xy+1$.db
# upload the sqlite to Prep answering the following way
Answer [y]: y
inputTag [0]: 0
destinationDatabase: oracle://cms_orcoff_prep/CMS_CONDITIONS
since []:
userText []: New pixel bad module list
destinationTag []: SiPixelQuality_v$xy+1$
# where $xy+1$ is the next version number
Answer [n]: y
# upload the new python to the git using the link below
https://github.com/tvami/SiPixelQualtiyValidation/upload/master
MC Validation
mkdir MC
cd MC/
# create the crab config -- dont forget to change the $user$ and the $xy+1$ the other should be ok like this
vim crab_config.py
from CRABClient.UserUtilities import config
config = config()
config.section_('General')
config.General.requestName = 'SiPixelQuality_MCValidation_v$xy+1$'
config.General.transferOutputs = True
config.General.transferLogs = True
config.section_('JobType')
config.JobType.pluginName = 'Analysis'
config.JobType.psetName = 'TimingStudy_MCValidation_cfg.py'
config.JobType.outputFiles = ['Ntuple.root']
config.JobType.allowUndistributedCMSSW = True
config.section_('Data')
config.Data.inputDBS = 'phys03'
config.Data.inputDataset = '/MinBias/tvami-MC_GENSIMDIG2RAW_20k_PerfectDet-b9e9bfc52642b2ceb34895d495556bcd/USER'
config.Data.splitting = 'LumiBased'
config.Data.unitsPerJob = 2
config.Data.outLFNDirBase = '/store/user/$user/QualityValidation/'
config.Data.outputDatasetTag = config.General.requestName
config.section_('Site')
config.Site.storageSite = 'T2_HU_Budapest'
wget https://raw.githubusercontent.com/tvami/SiPixelQualtiyValidation/master/TimingStudy_MCValidation_cfg.py
# edit it
# make sure this is True: process.siPixelDigis.UseQualityInfo = cms.bool(True)
#edit this line to the appropiate version number $xy+1$
toGet = cms.VPSet(
cms.PSet(
record = cms.string('SiPixelQualityFromDbRcd'),
tag = cms.string('SiPixelQuality_v$xy+1$') # local file tag name
)
source /cvmfs/cms.cern.ch/crab3/crab.csh
crab submit -c crab_config.py
Now lets wait until CRAB finishes the job. In the meantime one can start the data validation
crab status -d SiPixelQuality_MCValidation_v$xy+1$
crab getoutput -d SiPixelQuality_MCValidation_v$xy+1$
mv SiPixelQuality_MCValidation_v$xy+1$/results/*.root .
Data Validation
# go back to the /src directory
cd ..
mkdir Data
# other crab python for data reco
# don't forget to modify $xy+1$, $dataset$, $run$, $user$, $GT$ variables, $GT$ can be learn the following way
# go to
https://cmsweb.cern.ch/das/
#enter the dataset name like
config dataset=$dataset$
# click to the "cmsRun" thing
# look for "global_tag":
vim crab_config.py
import os
import glob
from WMCore.Configuration import Configuration
config = Configuration()
PTSdir = os.environ['CMSSW_BASE']+'/src/DPGAnalysis/PixelTimingStudy/'
config.section_('General')
config.General.transferOutputs = True
config.General.transferLogs = True
config.General.requestName = 'SiPixelQuality_DataValidation_v$xy+1$' #can be anything
config.section_('JobType')
config.JobType.allowUndistributedCMSSW = True
config.JobType.pluginName = 'Analysis'
config.JobType.psetName = PTSdir+'test/TimingStudy_RunIIData_80X_cfg.py'
config.JobType.pyCfgParams = ['globalTag='$GT$]
config.JobType.inputFiles = [ PTSdir+'portcardmap.dat', PTSdir+'run_ls_instlumi_pileup_2015.txt' ]
config.JobType.outputFiles = ['Ntuple.root']
config.JobType.disableAutomaticOutputCollection = True
config.section_('Data')
config.Data.inputDataset = '$dataset$ '
config.Data.outLFNDirBase = '/store/user/$user$/QualityValidation/'
config.Data.outputDatasetTag = config.General.requestName
config.Data.splitting = 'LumiBased'
config.Data.unitsPerJob = 2
config.Data.runRange = '$run$'
config.section_('Site')
config.Site.storageSite = 'T2_HU_Budapest'
source /cvmfs/cms.cern.ch/crab3/crab.csh
crab submit -c crab_config.py
#Now lets wait until CRAB finishes the same amount of job as the MC (ie dont have to wait for until the whole dataset is digested).
crab status -d SiPixelQuality_DataValidation_v$xy+1$
crab getoutput -d SiPixelQuality_DataValidation_v$xy+1$
mv SiPixelQuality_DataValidation_v$xy+1$/results/*.root .
Plotting the results
cd $release$/src/MC/
cmsenv
wget https://raw.githubusercontent.com/tvami/SiPixelQualtiyValidation/master/ROC_Occupancy.C
root ROC_Occupancy.C
>> .q
root output.root
>> gStyle->SetPalette(1);
>> gStyle->SetOptStat(0);
>> TBrowser f
# save as a png with the name of v$xy"_occupancyMap.png
cd $release$/src/Data/
wget https://raw.githubusercontent.com/tvami/SiPixelQualtiyValidation/master/ROC_Occupancy.C
root ROC_Occupancy.C
root output.root
gStyle->SetPalette(1);
gStyle->SetOptStat(0);
TBrowser f
# save as a png with the name of v$xy"_occupancyMap_data.png
Procedure (w/o description)
Environment
https://cmswbm.web.cern.ch/cmswbm/cmsdb/servlet/RunSummary
grid-proxy-init
das_client --query="dataset run=$run$" --limit=0 | grep "/FEVT"
das_client --query="dataset dataset=$dataset$ run=$run$"
das_client --query="release dataset=$dataset$"
cmsrel $release$
cd $release$/src
cmsenv
git cms-addpkg CondTools/SiPixel
git clone https://github.com/jkarancs/PixelTimingStudy DPGAnalysis/PixelTimingStudy
vim DPGAnalysis/PixelTimingStudy/plugins/TimingStudy.cc
#define COMPLETE 0
#define SPLIT 2
vim DPGAnalysis/PixelTimingStudy/plugins/TimingStudy.h
#define COMPLETE 0
scram b -j 10
New Quality payload generation
cd CondTools/SiPixel/test
https://github.com/tvami/SiPixelQualtiyValidation
wget https://raw.githubusercontent.com/tvami/SiPixelQualtiyValidation/master/0SiPixelBadModuleByHandBuilder_cfg_v$xy$.py
cp 0SiPixelBadModuleByHandBuilder_cfg_v$xy$.py 0SiPixelBadModuleByHandBuilder_cfg_v$xy+1$.py
vim 0SiPixelBadModuleByHandBuilder_cfg_v$xy+1$.py
connect = cms.string('sqlite_file:SiPixelQuality_v$xy+1$.db'),
toPut = cms.VPSet(cms.PSet(
record = cms.string('SiPixelQualityFromDbRcd'),
tag = cms.string('SiPixelQuality_v$xy+1$')
# add a new bad module using
cms.PSet(
errortype = cms.string('$type$'),
detid = cms.uint32($detid$)
),
https://tvami.web.cern.ch/tvami/projects/PixelBadModules/phase0GeometryTopology.txt
cmsRun 0SiPixelBadModuleByHandBuilder_cfg_v$xy+1$.py
uploadConditions.py SiPixelQuality_v$xy+1$.db
Answer [y]: y
inputTag [0]: 0
destinationDatabase: oracle://cms_orcoff_prep/CMS_CONDITIONS
since []:
userText []: New pixel bad module list
destinationTag []: SiPixelQuality_v$xy+1$
# where $xy+1$ is the next version number
Answer [n]: y
https://github.com/tvami/SiPixelQualtiyValidation/upload/master
MC Validation
mkdir MC
cd MC/
vim crab_config.py
from CRABClient.UserUtilities import config
config = config()
config.section_('General')
config.General.requestName = 'SiPixelQuality_MCValidation_v$xy+1$'
config.General.transferOutputs = True
config.General.transferLogs = True
config.section_('JobType')
config.JobType.pluginName = 'Analysis'
config.JobType.psetName = 'TimingStudy_MCValidation_cfg.py'
config.JobType.outputFiles = ['Ntuple.root']
config.JobType.allowUndistributedCMSSW = True
config.section_('Data')
config.Data.inputDBS = 'phys03'
config.Data.inputDataset = '/MinBias/tvami-MC_GENSIMDIG2RAW_20k_PerfectDet-b9e9bfc52642b2ceb34895d495556bcd/USER'
config.Data.splitting = 'LumiBased'
config.Data.unitsPerJob = 2
config.Data.outLFNDirBase = '/store/user/$user/QualityValidation/'
config.Data.outputDatasetTag = config.General.requestName
config.section_('Site')
config.Site.storageSite = 'T2_HU_Budapest'
wget https://raw.githubusercontent.com/tvami/SiPixelQualtiyValidation/master/TimingStudy_MCValidation_cfg.py
toGet = cms.VPSet(
cms.PSet(
record = cms.string('SiPixelQualityFromDbRcd'),
tag = cms.string('SiPixelQuality_v$xy+1$') # local file tag name
)
source /cvmfs/cms.cern.ch/crab3/crab.csh
crab submit -c crab_config.py
crab status -d SiPixelQuality_MCValidation_v$xy+1$
crab getoutput -d SiPixelQuality_MCValidation_v$xy+1$
mv SiPixelQuality_MCValidation_v$xy+1$/results/*.root .
Data Validation
cd ..
mkdir Data
https://cmsweb.cern.ch/das/
config dataset=$dataset$
import os
import glob
from WMCore.Configuration import Configuration
config = Configuration()
PTSdir = os.environ['CMSSW_BASE']+'/src/DPGAnalysis/PixelTimingStudy/'
config.section_('General')
config.General.transferOutputs = True
config.General.transferLogs = True
config.General.requestName = 'SiPixelQuality_DataValidation_v$xy+1$' #can be anything
config.section_('JobType')
config.JobType.allowUndistributedCMSSW = True
config.JobType.pluginName = 'Analysis'
config.JobType.psetName = PTSdir+'test/TimingStudy_RunIIData_80X_cfg.py'
config.JobType.pyCfgParams = ['globalTag='$GT$]
config.JobType.inputFiles = [ PTSdir+'portcardmap.dat', PTSdir+'run_ls_instlumi_pileup_2015.txt' ]
config.JobType.outputFiles = ['Ntuple.root']
config.JobType.disableAutomaticOutputCollection = True
config.section_('Data')
config.Data.inputDataset = '$dataset$ '
config.Data.outLFNDirBase = '/store/user/$user$/QualityValidation/'
config.Data.outputDatasetTag = config.General.requestName
config.Data.splitting = 'LumiBased'
config.Data.unitsPerJob = 2
config.Data.runRange = '$run$'
config.section_('Site')
config.Site.storageSite = 'T2_HU_Budapest'
source /cvmfs/cms.cern.ch/crab3/crab.csh
crab submit -c crab_config.py
crab status -d SiPixelQuality_DataValidation_v$xy+1$
crab getoutput -d SiPixelQuality_DataValidation_v$xy+1$
mv SiPixelQuality_DataValidation_v$xy+1$/results/*.root .
Plotting the results
cd $release$/src/MC/
cmsenv
wget https://raw.githubusercontent.com/tvami/SiPixelQualtiyValidation/master/ROC_Occupancy.C
root ROC_Occupancy.C
>> .q
root output.root
>> gStyle->SetPalette(1);
>> gStyle->SetOptStat(0);
>> TBrowser f
# save as a png with the name of v$xy"_occupancyMap.png
cd $release$/src/Data/
wget https://raw.githubusercontent.com/tvami/SiPixelQualtiyValidation/master/ROC_Occupancy.C
root ROC_Occupancy.C
root output.root
>> gStyle->SetPalette(1);
>> gStyle->SetOptStat(0);
>> TBrowser f
# save as a png with the name of v$xy"_occupancyMap_data.png
Tracking effect
/data/vami/projects/pilotBlade/pp2016ReProcessing_v3/CMSSW_8_0_8/src/miniDAQ/All/Ntuples
TimingStudy
TChain chain("trajTree");
chain.Add("Ntuple*.root")
h1(416,-3.0,3.0,160,-.55,.55)
# -------------------------------------------------------------------------------------------------------------------
chain.Draw("traj.lx:traj.ly>>h1(8,-3.0,3.0,2,-.55,.55)","module_on.rawid==302059012&&traj.validhit==1&&traj_onedge==0","COLZ")
chain.Draw("traj.lx:traj.ly>>h1(8,-3.0,3.0,2,-.55,.55)","module_on.rawid==302059012&&traj.missing==1&&traj_onedge==0","COLZ")
chain.Draw("traj.lx:traj.ly>>h1(8,-3.0,3.0,2,-.55,.55)","module_on.rawid==302059012&&traj_inactive==1&&traj_onedge==0","COLZ")
chain.Draw("traj.lx:traj.ly>>h1(8,-3.0,3.0,2,-.55,.55)","module_on.rawid==302059012&&traj_badhit==1&&traj_onedge==0","COLZ")
chain.Draw("traj.lx:traj.ly>>h1(416,-3.0,3.0,160,-.55,.55)","module_on.rawid==302059012&&traj.validhit==1&&traj_onedge==0","COLZ")
chain.Draw("traj.lx:traj.ly>>h1(416,-3.0,3.0,160,-.55,.55)","module_on.rawid==302059012&&traj.missing==1&&traj_onedge==0","COLZ")
chain.Draw("traj.lx:traj.ly>>h1(416,-3.0,3.0,160,-.55,.55)","module_on.rawid==302059012&&traj_inactive==1&&traj_onedge==0","COLZ")
TChain chain("clustTree");
chain.Add("Ntuple*.root")
chain.Draw("x:y","module_on.rawid==302059012","COLZ") // all clusters
# -------------------------------------------------------------------------------------------------------------------
chain.Draw("traj.lx:traj.ly>>h1(8,-3.0,3.0,2,-.55,.55)","module_on.rawid==302126344&&traj.validhit==0&&traj_onedge==0","COLZ")
chain.Draw("traj.lx:traj.ly>>h1(8,-3.0,3.0,2,-.55,.55)","module_on.rawid==302126344&&traj.missing==1&&traj_onedge==0","COLZ")
chain.Draw("traj.lx:traj.ly>>h1(8,-3.0,3.0,2,-.55,.55)","module_on.rawid==302126344&&traj_inactive==1&&traj_onedge==0","COLZ")
chain.Draw("traj.lx:traj.ly>>h1(8,-3.0,3.0,2,-.55,.55)","module_on.rawid==302126344&&traj_badhit==1&&traj_onedge==0","COLZ")
chain.Draw("traj.lx:traj.ly>>h1(416,-3.0,3.0,160,-.55,.55)","module_on.rawid==302126344&&traj.validhit==0&&traj_onedge==0","COLZ")
chain.Draw("traj.lx:traj.ly>>h1(416,-3.0,3.0,160,-.55,.55)","module_on.rawid==302126344&&traj.missing==1&&traj_onedge==0","COLZ")
chain.Draw("traj.lx:traj.ly>>h1(416,-3.0,3.0,160,-.55,.55)","module_on.rawid==302126344&&traj_inactive==1&&traj_onedge==0","COLZ")
TChain chain("clustTree");
chain.Add("Ntuple*.root")
chain.Draw("x:y","module_on.rawid==302126344","COLZ") // all clusters
# -------------------------------------------------------------------------------------------------------------------
chain.Draw("traj.lx:traj.ly>>h1(8,-3.0,3.0,2,-.55,.55)","module_on.rawid==302123800&&traj.validhit==1&&traj_onedge==0","COLZ")
chain.Draw("traj.lx:traj.ly>>h1(8,-3.0,3.0,2,-.55,.55)","module_on.rawid==302123800&&traj.missing==1&&traj_onedge==0","COLZ")
chain.Draw("traj.lx:traj.ly>>h1(8,-3.0,3.0,2,-.55,.55)","module_on.rawid==302123800&&traj_inactive==1&&traj_onedge==0","COLZ")
chain.Draw("traj.lx:traj.ly>>h1(8,-3.0,3.0,2,-.55,.55)","module_on.rawid==302123800&&traj_badhit==1&&traj_onedge==0","COLZ")
chain.Draw("traj.lx:traj.ly>>h1(416,-3.0,3.0,160,-.55,.55)","module_on.rawid==302123800&&traj.validhit==1&&traj_onedge==0","COLZ")
chain.Draw("traj.lx:traj.ly>>h1(416,-3.0,3.0,160,-.55,.55)","module_on.rawid==302123800&&traj.missing==1&&traj_onedge==0","COLZ")
chain.Draw("traj.lx:traj.ly>>h1(416,-3.0,3.0,160,-.55,.55)","module_on.rawid==302123800&&traj_inactive==1&&traj_onedge==0","COLZ")
TChain chain("clustTree");
chain.Add("Ntuple*.root")
chain.Draw("x:y","module_on.rawid==302123800","COLZ") // all clusters
What happens with modules marked bad that come alive from time to time?
Studying the valid/traj_missing/traj_inactive modules in three scenarios
Scenario 1) We have a new bad component but it is not included in the DB yet
--> in
SiPixelQuality_v34_data we had a new bad half module (
BmO _Sec8_Lyr1_Ldr9F_Mod4 (TBM-B) -- 302059012)
- Run range 275891 (the moduel is bad from this run) - 275914 (hlt tag was accepted and uploaded, in the meantime there was a half module that was bad but the DB did not contain it)
TChain chain("trajTree");
chain.Add("nTuplePilotBlade_All*.root")
chain.Draw("traj.lx:traj.ly>>h1(8,-3.0,3.0,2,-.55,.55)","module.rawid==302059012&&traj.type==0&&traj.onEdge==0","COLZ") // validhit
chain.Draw("traj.lx:traj.ly>>h1(8,-3.0,3.0,2,-.55,.55)","module.rawid==302059012&&traj.type==1&&traj.onEdge==0","COLZ") // missing
chain.Draw("traj.lx:traj.ly>>h1(8,-3.0,3.0,2,-.55,.55)","module.rawid==302059012&&traj.type==2&&traj.onEdge==0","COLZ") // inactive
chain.Draw("traj.lx:traj.ly>>h1(416,-3.0,3.0,160,-.55,.55)","module.rawid==302059012&&traj.type==0&&traj.onEdge==0","COLZ") // valid pixels
Scenario 2) We have a bad component and it is included in the DB already
--> in
SiPixelQuality_v34_data an old half module (BPix_BmO_SEC7_LYR2_LDR13F_MOD3 (ROC0-7) -- 302126344 [this was added in v33])
- Run range 275891-275914 (same range is OK)
TChain chain("trajTree");
chain.Add("nTuplePilotBlade_All*.root")
chain.Draw("traj.lx:traj.ly>>h1(8,-3.0,3.0,2,-.55,.55)","module.rawid==302126344&&traj.type==0&&traj.onEdge==0","COLZ") // validhit
chain.Draw("traj.lx:traj.ly>>h1(8,-3.0,3.0,2,-.55,.55)","module.rawid==302126344&&traj.type==1&&traj.onEdge==0","COLZ") // missing
chain.Draw("traj.lx:traj.ly>>h1(8,-3.0,3.0,2,-.55,.55)","module.rawid==302126344&&traj.type==2&&traj.onEdge==0","COLZ") // inactive
chain.Draw("traj.lx:traj.ly>>h1(416,-3.0,3.0,160,-.55,.55)","module.rawid==302126344&&traj.type==0&&traj.onEdge==0","COLZ") // valid pixels
chain.Draw("traj.lx:traj.ly>>h1(416,-3.0,3.0,160,-.55,.55)","module.rawid==302126344&&traj.type==1&&traj.onEdge==0","COLZ") // missing pixels
Scenario 3) A module is marked bad although it is working
--> v35_data (302123800)
- Run range 276460-276870 (after this the mistake was corrected)
TChain chain("trajTree");
chain.Add("nTuplePilotBlade_All*.root")
chain.Draw("traj.lx:traj.ly>>h1(8,-3.0,3.0,2,-.55,.55)","module.rawid==302123800&&traj.type==0&&traj.onEdge==0","COLZ") // validhit
chain.Draw("traj.lx:traj.ly>>h1(8,-3.0,3.0,2,-.55,.55)","module.rawid==302123800&&traj.type==1&&traj.onEdge==0","COLZ") // missing
chain.Draw("traj.lx:traj.ly>>h1(8,-3.0,3.0,2,-.55,.55)","module.rawid==302123800&&traj.type==2&&traj.onEdge==0","COLZ") // inactive